// defaults to median when idx isn't given
static A ithSmallest(L l, int idx default l(l)/2) {
int n = l(l);
if (n <= 80)
ret get(sorted(l), idx);
cols = (n+4)/5;
new L medians;
for (i = 0; i < cols; i++)
medians.add(ithSmallest(subList(l, i*5)));
// median of medians
A mom = ithSmallest(medians);
setA, setB = unpair filterAntiFilter(l, a -> lessThan(a, mom));
// TODO
}