the size of the input. In some cases (such as Lemma \[lem:core\] in Section \[sec:theory\]) $|{{\mathcal C}}|$ is at most a constant factor larger than $|{{\mathcal X}}|$ and then it is sufficient to prove a running time polynomial in $|{{\mathcal X}}|$. In other cases a running time of the form $O( |{{\mathcal C}}|^{a}|{{\mathcal X}}|^{b} )$ is obtained, for constants $a$ and $b$, and this is clearly polynomial in $|{{\mathcal C}}| + |{{\mathcal X}}|$ because $(|{{\mathcal C}}| + |{{\mathcal X}}|)^2 \geq |{{\mathcal C}}||{{\mathcal X}}|$.

Structure of the article {#subsec:struc}
------------------------

To facilitate the mathematical exposition we build the results of this article up in a specific order, which differs from the order presented in the introduction. We begin with Section \[sec:theory\]: *A theoretical polynomial-time algorithm for constructing level-$k$ networks*, where we prove that, for every fixed $k \geq 0$, the problem of determining whether a level-$k$ network that represents ${{\mathcal C}}$ exists (and if so to construct such a network) is solvable in polynomial time. This section is, compared to the rest of the article, comparatively self-contained. In Section \[sec:stsets\]: *From theory to practice: the importance of ST-sets* we describe several fundamental properties of the ST-set, a special structure that plays 