Every problem
All 105 problems from Rosalind — Bioinformatics Stronghold. Press Run on any block to execute it in your browser. Every problem is on this page, so it is large and takes a moment to settle — the sections are lighter.
DNA — Counting DNA Nucleotides
solved Problem statement
A warm-up for the site's input format rather than a biological question — but the four counts it produces are exactly what GC content is computed from, and a lopsided base composition is the first thing a QC tool flags as contamination or adapter read-through.
RNA — Transcribing DNA into RNA
solved Problem statement
One character substituted for another, which is a fair summary of transcription only if you ignore splicing, capping and polyadenylation. SPLC covers the part this leaves out.
REVC — Complementing a Strand of DNA
solved Problem statement
The most-used operation in the whole track. A read carries no record of which strand it came from, so a motif present on one strand appears as its reverse complement on the other — which is why REVP, BA6E and GASM all have to search both.
HAMM — Counting Point Mutations
solved Problem statement
Counts differing positions, which undercounts mutations: a site can change and change back, leaving no trace. RSUB shows exactly that happening, and it is why distance models correct for unseen substitutions rather than using raw counts.
FIB — Rabbits and Recurrence Relations
solved Problem statement
A recurrence-relation exercise wearing rabbits, not population biology — nothing here dies, competes or mutates. WFMD and EBIN are where real population dynamics appear.
GC — Computing GC Content
solved Problem statement
GC content ranges from about 16 to 75 percent across bacteria, and a difference under 5 percent is taken as evidence of the same species — which is why a fragment's GC content alone narrows down where it came from. It also biases sequencing: GC-rich regions amplify poorly and end up under-covered.
PROT — Translating RNA into Protein
solved Problem statement
Sixty-four codons encode twenty amino acids and a stop, so the code is degenerate and translation discards information. MRNA counts exactly how much.
SUBS — Finding a Motif in DNA
solved Problem statement
Finding every occurrence, overlaps included, because real motifs do overlap. The motifs worth finding are restriction sites (REVP) and binding sites — though a real binding site is a tendency rather than a fixed string, which KSIM and MPRT address.
FIBD — Mortal Fibonacci Rabbits
solved Problem statement
FIB with a death clock added. Still a recurrence exercise rather than population biology, and useful mainly for showing that the state has to widen from one number to an age profile.
IPRB — Mendel's First Law
solved Problem statement
Mendel's first law as a probability question. The whole content is that two alleles segregate independently, which is what makes the offspring distribution a product rather than something requiring simulation.
IEV — Calculating Expected Offspring
solved Problem statement
Expectation is linear whether or not the events are independent, so the answer is a weighted sum with no interaction between genotypes to model. That property is why expected values are reached for far more often than full distributions.
MRNA — Inferring mRNA from Protein
solved Problem statement
The reverse of PROT, and it cannot be done — the code is degenerate, so a protein maps back to many mRNAs. Leucine, serine and arginine take six codons each. Counting them needs a modulus because the total outgrows any integer.
PRTM — Calculating Protein Mass
solved Problem statement
Monoisotopic masses, which is what a high-resolution instrument reports when it can resolve individual isotope peaks; low-resolution and high-mass measurements give average masses instead, differing by roughly 0.06 percent. Everything in the mass-spectrometry chapter rests on this sum.
PERM — Enumerating Gene Orders
solved Problem statement
Permutations as gene orders. n! grows fast enough that enumeration stops being possible almost immediately, which is the premise SIGN, REAR and SORT build on — there, gene order is the data and the question is how few reversals separate two of them.
PPER — Partial Permutations
solved Problem statement
Ordered selections rather than full orderings, taken modulo a million because the count outgrows the answer format long before it outgrows the biology. Combinatorial groundwork for the counting problems, not a biological question in itself.
EDIT — Edit Distance
solved Problem statement
The crude version of sequence comparison, and the pack refines it twice: GLOB stops treating every substitution as equally costly, and GAFF stops treating a gap of k bases as k separate events. Useful mainly as the baseline those two improve on.
GLOB — Global Alignment with Scoring Matrix
solved Problem statement
BLOSUM62 is built from substitution frequencies actually observed in aligned protein blocks, so swapping a residue for a chemically similar one costs little and swapping it for an unrelated one costs a lot. That is the information EDIT throws away by charging one for every mismatch.
LOCA — Local Alignment with Scoring Matrix
solved Problem statement
Two proteins may share a single conserved domain inside otherwise unrelated sequence. A global alignment has to align the unrelated parts too and buries the signal; local alignment reports only the stretch that matches, which is what makes it the basis of database search.
GAFF — Global Alignment with Scoring Matrix and Affine Gap Penalty
solved Problem statement
One insertion of ten bases is a single mutational event, not ten. Charging per base makes an aligner scatter several short gaps where one long gap is right, so opening a gap costs more than extending it.
OAP — Overlap Alignment
solved Problem statement
Brute-force DP over lists; ~9 s. A flat-buffer implementation would be the natural follow-up.
SSET — Counting Subsets
solved Problem statement
Two to the n, which is the point. Any method that examines every subset of a set of sites stops being usable in the low twenties, and that is the wall the search problems elsewhere in this pack are built to avoid.
PMCH — Perfect Matchings and RNA Secondary Structures
solved Problem statement
RNA folds back on itself and pairs. This counts the ways every base could be paired, which requires the A and U counts to match and the C and G counts to match — a condition real sequences rarely satisfy, which is what MMCH addresses.
MMCH — Maximum Matchings and RNA Secondary Structures
solved Problem statement
PMCH without the assumption that everything pairs. Real RNA leaves bases unpaired because the counts do not match, so the question becomes how many bonds are possible rather than how many arrangements are complete.
CAT — Catalan Numbers and RNA Secondary Structures
solved Problem statement
Catalan numbers count matchings that do not cross, and non-crossing is a physical constraint rather than a mathematical convenience: crossing bonds are pseudoknots, which this model excludes. MOTZ relaxes the requirement that everything pairs, and RNAS adds wobble bonds and a minimum hairpin turn.
LIA — Independent Alleles
solved Problem statement
Mendel's second law. Alleles at different loci assort independently, so the two-locus probability factors — which is what makes this a binomial calculation rather than a simulation.
SEXL — Sex-Linked Inheritance
solved Problem statement
Males carry one X, so a recessive allele on it is expressed with no second copy to mask it. The proportion of affected males is therefore the allele frequency itself, which is why X-linked recessive conditions appear far more often in males than females.
AFRQ — Counting Disease Carriers
solved Problem statement
Hardy-Weinberg run backwards: the disease frequency gives the allele frequency, and the carrier frequency 2pq follows. For a rare recessive allele carriers vastly outnumber sufferers, which is the counterintuitive result the arithmetic exists to make obvious.
PROB — Introduction to Random Strings
solved Problem statement
Computed in logarithms because the raw probability of any particular long string underflows to zero — the same reason the HMM problems decode in log space rather than multiplying probabilities directly.
LEXF — Enumerating k-mers Lexicographically
solved Problem statement
Enumerating every k-mer over an alphabet, which is 4 to the k for DNA. Fine at k=3 and hopeless by k=20, which is why the k-mer problems index sequences rather than enumerate possibilities.
LCSM — Finding a Shared Motif
solved Problem statement
Any longest common substring is a valid answer, so the assertion checks the length and that the motif really is shared, not one particular string.
TRAN — Transitions and Transversions
solved Problem statement
A random mutation process would give a ratio near 0.5, since there are twice as many ways to make a transversion. Real human data sits near 2.1 genome-wide and near 3 in exomes, largely because methylated cytosine deaminates to thymine. The ratio is therefore a standard quality check: a callset far from those values is reporting sequencing error rather than biology.
SPLC — RNA Splicing
solved Problem statement
What RNA glossed over. A eukaryotic gene is not a contiguous coding sequence — introns are cut out before translation, so the protein comes from the exons joined together. Removing the introns first is the difference between the right protein and nonsense.
CONS — Consensus and Profile
solved Problem statement
A profile is the same object BA2's motif search builds and scores against: counts per base per position. The consensus reads off the commonest base at each, which is a useful summary and a lossy one — it discards how strong the preference was.
GRPH — Overlap Graphs
solved Problem statement
Overlap graphs make reads the nodes, which makes assembly a Hamiltonian path — NP-hard. DBRU makes reads the edges instead and gets an Eulerian path, solvable in linear time. Same data, different graph, and the whole reason modern assemblers use de Bruijn graphs.
REVP — Locating Restriction Sites
solved Problem statement
Restriction enzymes cut at reverse palindromes because they bind as symmetric dimers, one subunit per strand, so the site reads the same on both. That is why these particular sequences matter and why they are always even in length.
TREE — Completing a Tree
solved Problem statement
A tree on n nodes has exactly n-1 edges, so the answer is that count minus the edges already present, with no search involved. The point is recognising the invariant rather than exploring the graph.
INOD — Counting Phylogenetic Ancestors
solved Problem statement
An unrooted binary tree with n leaves always has n-2 internal nodes, whatever its shape. That fixed relationship is what lets EUBT count trees by insertion and CNTQ count quartets without ever examining a topology.
SIGN — Enumerating Oriented Gene Orderings
solved Problem statement
Signed permutations: 2^n times n! of them, because each gene may also be flipped. The sign is not decoration — a reversed gene reads on the opposite strand, which is exactly what REAR and SORT measure.
LGIS — Longest Increasing Subsequence
solved Problem statement
Longest increasing subsequence, which in a genomic setting is how conserved order is recovered from a comparison of two genomes: positions that stay in ascending order form a synteny block, and the rest is rearrangement.
SSEQ — Finding a Spliced Motif
solved Problem statement
A subsequence rather than a substring — the characters need not be contiguous. That is the right model for a motif split across exons, since the intervening introns are spliced out before the protein is made.
PDST — Creating a Distance Matrix
solved Problem statement
Pairwise p-distance: the fraction of positions at which two sequences differ. It is the crude measure HAMM warns about, applied to every pair, and it feeds the tree-building problems that follow.
ASMQ — Assessing Assembly Quality with N50 and N75
solved Problem statement
N50 is the contig length at which half the assembly sits in contigs that long or longer. It is the standard summary and a gameable one: joining contigs wrongly raises it, so a high N50 is evidence of a long assembly rather than a correct one.
ORF — Open Reading Frames
solved Problem statement
Six frames, not three — the gene may sit on either strand, and there is no way to tell from the sequence which. Each frame is scanned from every start codon to the first stop.
LEXV — Ordering Strings of Varying Length Lexicographically
solved Problem statement
Ordering strings of unequal length, where a prefix sorts before anything extending it. Ordinary lexicographic order on padded strings gets this wrong, which is the whole exercise.
SETO — Introduction to Set Operations
solved Problem statement
Set operations as groundwork. Worth having explicitly because several later problems phrase their answer as a complement or an intersection, and getting the universe wrong is a common way to be quietly off by a few elements.
LCSQ — Finding a Shared Spliced Motif
solved Problem statement
Any longest common subsequence is a valid answer, so the assertion checks the length and that the motif really is a subsequence of both strings.
KMP — Speeding Up Motif Finding
solved Problem statement
The failure array records, for each prefix, the longest proper prefix that is also a suffix — so a mismatch can resume without re-reading the text. That is what makes matching linear rather than quadratic, and it is the same insight the trie and suffix-array problems generalise.
DBRU — Constructing a De Bruijn Graph
solved Problem statement
Reads become edges rather than nodes, which turns assembly from a Hamiltonian path problem into an Eulerian one. GRPH shows the alternative; this is the construction real assemblers are built on.
ASPC — Introduction to Alternative Splicing
solved Problem statement
Summing binomial coefficients, motivated by alternative splicing: one gene yields many proteins depending on which exons are kept. The count grows fast enough that the modulus is doing real work.
CORR — Error Correction in Reads
solved Problem statement
Assumes a correct read appears at least twice and an erroneous one exactly once — which is what read depth buys and why coverage matters. Reverse complements count as the same read, since strand is not recorded.
SCSP — Interleaving Two Motifs
solved Problem statement
Any shortest common supersequence is valid, so the assertion checks the length and that both inputs are subsequences of the result.
EVAL — Expected Number of Restriction Sites
solved Problem statement
The expected number of times a motif appears in a random sequence, which is what makes an observed count interesting or unremarkable. Without a baseline, finding a site says nothing at all.
LONG — Genome Assembly as Shortest Superstring
solved Problem statement
Shortest superstring is NP-hard in general. This is solvable only because the problem guarantees every pair overlaps by more than half their length, which makes the correct overlap unique and a greedy merge safe. GREP shows what happens when that guarantee is dropped.
KMER — k-Mer Composition
solved Problem statement
The official answer is a 256-entry array. Rather than restate it, the assertion checks the ordering endpoints, that the counts total the number of windows, and cross-checks an entry by independent counting — which is what an ordering or lookup mistake would break.
EBIN — Wright-Fisher's Expected Behavior
solved Problem statement
Expected allele counts under Wright-Fisher, where expectation is linear and so the answer is a sum of binomial means. WFMD gives the distribution this summarises.
SPEC — Inferring Protein from Spectrum
solved Problem statement
The answer is derived from the spectrum's consecutive differences (186.079 W, 131.040 M, 128.059 Q, 71.037 A) rather than restated from memory, and the assertion re-checks each residue against its own gap.
ROOT — Counting Rooted Binary Trees
solved Problem statement
Rooted binary trees on n leaves number (2n-3)!!, which passes a billion by n=11. That growth is why phylogenetics searches tree space rather than enumerating it.
CUNR — Counting Unrooted Binary Trees
solved Problem statement
The unrooted count, (2n-5)!!, which is the rooted count one step back — a rooted tree is an unrooted one with a root placed on some edge. EUBT constructs these rather than counting them.
MOTZ — Motzkin Numbers and RNA Secondary Structures
solved Problem statement
Motzkin numbers drop CAT's requirement that every base pairs, which is the more realistic model: real RNA leaves plenty unpaired. RNAS goes further and adds wobble bonds and a minimum hairpin length.
INDC — Independent Segregation of Chromosomes
solved Problem statement
Rosalind allows 0.001 absolute error and its printed sample rounds some entries differently, so the assertion pins the exact endpoints — log10(1023/1024) and log10(1/1024) — and that the tail never increases, rather than a rounding-dependent array.
TRIE — Introduction to Pattern Matching
solved Problem statement
Patterns sharing a prefix share a path, so the text is scanned once regardless of how many patterns are sought. That is the property that makes trie matching worth building, and BA9A and BA9B use it directly.
WFMD — The Wright-Fisher Model of Genetic Drift
solved Problem statement
Genetic drift: allele frequencies move at random in a finite population, and an allele can be lost or fixed with no selection involved at all. It is the null model everything claiming selection has to be tested against.
NWCK — Distances in Trees
solved Problem statement
Carries a small Newick parser written in BioLang — phylo_tree() renders SVG and nw_to_distance_matrix() takes a table, so neither parses Newick.
NKEW — Newick Format with Edge Weights
solved Problem statement
The NWCK parser extended to read ':length' suffixes, walking to the lowest common ancestor rather than breadth-first.
CTBL — Creating a Character Table
solved Problem statement
A character table records the splits a set of taxa admits. CHBP inverts it back into a tree, which works only because the splits of a consistent table are nested or disjoint and never crossing.
SPTD — Phylogeny Comparison with Split Distance
solved Problem statement
The two trees here share no nontrivial split, so the distance is 2(n-3) = 6; the splits of each are printed so that is checkable by eye. The assertion also requires a tree compared with itself to give 0, which tests the canonical split orientation rather than just the arithmetic.
CONV — Comparing Spectra with the Spectral Convolution
solved Problem statement
Both spectra repeat a mass, so the winning difference (149.06586) arises four ways; the example prints that reasoning. The assertion also pins the three hand-checked occurrences of 85.03163 and the size of the convolution.
PCOV — Genome Assembly with Perfect Coverage
solved Problem statement
Perfect coverage makes the De Bruijn graph a single cycle, so it is walked directly rather than searched. The assertion checks every read appears in the doubled string, which is what cyclic containment means.
SIMS — Finding a Motif with Modifications
solved Problem statement
Fitting alignment by dynamic programming over two rolling rows, written in place with indexed assignment. Rebuilding each row with push() took about 40 s; this takes about 18 s.
MEND — Inferring Genotype from a Pedigree
solved Problem statement
The distribution was worked out by hand up the pedigree before being asserted, and the example prints that derivation. The assertion also requires the three probabilities to sum to one.
LING — Linguistic Complexity of a Genome
solved Problem statement
The fraction of substrings that actually occur out of all that could. Repetitive sequence scores low because it reuses the same substrings — which is exactly what makes repeats hard to assemble through, as GREP demonstrates.
RSTR — Matching Random Motifs
solved Problem statement
Derived rather than recalled: the motif has four weak and four strong bases, so p = 0.2^4 x 0.3^4 = 1.296e-05 and 1-(1-p)^90 = 0.00117. The assertion pins p as well as the answer.
EDTA — Edit Distance Alignment
solved Problem statement
Any optimal alignment is valid, so the assertion checks the distance and that the two rows are equal length, recover the inputs once gaps are removed, and differ in exactly `distance` positions.
CTEA — Counting Optimal Alignments
solved Problem statement
Two passes: the edit-distance table, then a count of the paths achieving it. The distance agrees with EDIT on the same pair of strings.
FOUN — The Founder Effect and Genetic Drift
solved Problem statement
The first generation was derived by hand — from one copy, (7/8)^8 = 0.343609 so log10 = -0.463936 — and the assertion pins that plus the requirement that loss never becomes less likely over time.
GCON — Global Alignment with Constant Gap Penalty
solved Problem statement
The affine recurrence with a zero extension cost. Cross-checked against GLOB, which scores the same pair at 8 with a per-residue gap of 5.
PRSM — Matching a Spectrum to a Protein
solved Problem statement
GSDMQS ties with IASMQS at multiplicity 3, so the assertion requires the reported protein to be one of the maximal ones rather than a single fixed string.
PDPL — Creating a Restriction Map
solved Problem statement
Self-verifying: the assertion recomputes the pairwise differences of the reconstructed points and requires them to reproduce the input multiset exactly, which is stronger than matching one printed answer.
CSET — Fixing an Inconsistent Character Set
solved Problem statement
Any character whose removal restores consistency is a valid answer, so the assertion checks the four-gamete condition on the result and that the input really was inconsistent, rather than naming one row.
LREP — Finding the Longest Multiple Repeat
solved Problem statement
Rosalind supplies the suffix tree as an edge list, so nothing has to build one — the work is counting leaves below each node, which is how often the path to it occurs.
MREP — Identifying Maximal Repeats
solved Problem statement
Read off the LCP array: a value of at least 20 is a candidate repeat, kept when its occurrences do not all share the character before them.
LAFF — Local Alignment with Affine Gap Penalty
solved Problem statement
One call. Local mode and affine gaps were both already in align(); what was missing until recently was any way to reach a substitution matrix from it.
SMGB — Semiglobal Alignment
solved Problem statement
Semiglobal is one of the two alignment modes added for this pack; before that the problem could not be expressed at all.
MGAP — Maximizing the Gap Symbols of an Optimal Alignment
solved Problem statement
The scoring is deliberately unspecified, which is the hint: a maximum-score alignment matches as much as it can, so the answer falls out of the longest common subsequence.
CSTR — Creating a Character Table from Genetic Strings
solved Problem statement
A split is nontrivial only when both sides hold at least two strings; a position where one string differs from all the others separates nothing. Which state is written as 1 is arbitrary, so the assertion accepts a row or its complement.
SUFF — Encoding Suffix Trees
solved Problem statement
Built from the suffix array and LCP array rather than by collapsing a trie. Both give the same tree; a trie of all suffixes has O(n^2) nodes first, whereas the arrays are linear — which is why aligners store the arrays and never materialise the tree.
SGRA — Using the Spectrum Graph to Infer Peptides
solved Problem statement
Monoisotopic masses, so differences are matched within a tolerance rather than exactly. The graph is a DAG since masses only increase, so the longest path is one scan in sorted order instead of an exponential search.
FULL — Inferring Peptide from Full Spectrum
solved Problem statement
A peptide fragments from both ends at once, so a b-ion and its y-ion sum to the parent mass and the list mixes them unlabelled. It does not matter which is which — taking an ion spends its complement, since a prefix and its suffix are one event and cannot both extend the chain.
ALPH — Alignment-Based Phylogeny
solved Problem statement
Small parsimony with the gap as a fifth symbol rather than a missing value — in an alignment a gap is evidence that an indel happened, and treating it as unknown would make every column containing one free. Finds a different labelling of equal score, so the assertion recounts the changes.
GASM — Genome Assembly Using Reads
solved Problem statement
A read gives no clue which strand it came from, so the graph holds every read and its reverse complement and falls into two mirror cycles. Returns AATCTGT — a rotation of the reverse complement of GATTACA, which the assertion checks up to both rotation and strand.
MULT — Multiple Alignment
solved Problem statement
Four sequences need a hypercube and 2^k-1 moves out of every cell — fifteen here, against three for a pairwise alignment. Exact multiple alignment costs O(n^k), which is why every tool that aligns hundreds of sequences is approximating.
GREP — Genome Assembly with Perfect Coverage and Repeats
solved Problem statement
PCOV returns one answer; this is the honest version. Repeats make the Eulerian cycle non-unique and all six cycles are genomes consistent with the reads — so the reads do not determine the chromosome, and reporting one would be picking arbitrarily.
MPRT — Finding a Protein Motif
solved Problem statement
Calls NCBI, so it needs a network connection and its answer can change over time.
Fetches from UniProt, so it runs in the advisory job rather than the hermetic gate. The motif matcher itself is asserted offline — N{P}[ST]{P} has alternatives and exclusions, so it is a pattern rather than a substring search.
OSYM — Isolating Symbols in Alignments
solved Problem statement
The best alignment through a given pairing is the best way of reaching it plus the best way of leaving it, so one forward table and one backward table answer all 49 pairs at once — the same trick BA5K uses to find a middle edge.
ITWV — Finding Disjoint Motifs in a Gene
solved Problem statement
Two motifs competing for the same characters, which is what makes this different from finding each separately. Every reachable state must consume the current character or the window ends — carrying one forward unconsumed would let the motifs match unrelated parts of the sequence.
CNTQ — Counting Quartets
solved Problem statement
The answer is C(n,4), and the reason matters more than the number: in a fully resolved tree any four taxa are separated into two pairs by some edge, so the shape never enters into it. The assertion enumerates all 15 subsets and confirms it rather than trusting the formula.
QRT — Quartets
solved Problem statement
An 'x' means not scored, not a third state — so a partial character still separates the taxa it did see, and missing data does not make it useless. Quartets are recorded canonically because neither side nor the order within a side carries meaning, and two characters often support the same one.
CHBP — Character-Based Phylogeny
solved Problem statement
The inverse of CTBL. It works because a consistent table's splits are laminar — any two nested or disjoint, never crossing — and a laminar family is exactly a tree. Returns a differently-rooted Newick, so the assertion compares induced splits rather than a formatting choice.
EUBT — Enumerating Unrooted Binary Trees
solved Problem statement
Built by insertion: every unrooted binary tree arises exactly once by splitting an edge and hanging the next taxon off it, which is why the count is (2n-5)!! — fifteen trees at n=5, over two million at n=10. That growth is why nobody enumerates trees to find the best one.
QRTD — Quartet Distance
solved Problem statement
Quartets degrade gracefully where splits do not: moving one taxon changes a handful of quartets but can destroy every split at once. Asserted to be zero between a tree and itself, which is the identity any distance must satisfy.
RNAS — Wobble Bonding and RNA Secondary Structures
solved Problem statement
Real RNA pairs U-G nearly as readily as A-U, so a count excluding wobble understates what a molecule can fold into. Memoised with has_key — contains(keys(memo), k) rebuilds the key list on every probe and would make the lookup the bottleneck the memo was meant to remove.
KSIM — Finding All Similar Motifs
solved Problem statement
A binding site is a tendency rather than a fixed string, so exact search finds a fraction of real sites — the motif here does not occur exactly at all. Checks every (start, length) pair directly, which is O(n^2) and stated as such: a 50 kbp genome would need the fitting-alignment form instead.
RSUB — Identifying Reversing Substitutions
solved Problem statement
A site that mutates and mutates back looks, from the tips alone, as though nothing happened — which is exactly what makes distant relationships hard to recover. Only the internal labels reveal it, which is why the problem supplies them.
REAR — Reversal Distance
solved Problem statement
Where BA6C's 2-break distance had a closed form, this has none at size 10 and must be searched: 45 reversals per step, 3.6 million reachable orders, distance reaching 9. The builtin searches from both ends and meets in the middle, so each side only reaches depth 4 or 5.
SORT — Sorting by Reversals
solved Problem statement
REAR asks how far apart two gene orders are; this asks for the route, which is what actually says how the rearrangement happened. The assertion applies the reversals and checks they produce the target — a plausible list that does not sort is the failure this invites.