// 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);
int cols = (n+4)/5;
new L medians;
for (int i = 0; i < cols; i++)
medians.add(ithSmallest(subList(l, i*5)));
// median of medians
A mom = ithSmallest(medians);
var setA, setB = unpair filterAntiFilter(l, a -> lessThan(a, mom));
// TODO
}