a = vector(100 000) rem = vector(#a) inv = [] other(n) = { for (v=1, oo, if (#inv0 && rem[m]==0, ok=0; break, m<=0, inv[v] = inv[v][1..k-1]; break ); ); if (ok, for (k=1, #inv[v], my (m=2*inv[v][k]-n); rem[m]-- ); inv[v] = concat(n, inv[v]); return (v); ); ); } { my (k = 0); for (n=1, #a, rem[n] = a[n] = other(n); if (a[n]==1, print (k++ " " n); ); ); } quit