s = 0 unseen = 1 seen(v) = bit test(s, v) see(v) = s = bit or(s, 2^v); while (seen(unseen), unseen++) a = vector(1 000) mx = 2*#a find(n) = { my (p=vector(n)); for (v=unseen, mx, if (!seen(v), ok=1; p[1]=v; for (k=2, n, p[k]=p[k-1]*a[n-k+1]; if (p[k]<=mx && seen(p[k]), ok=0; break; ); ); if (ok, for (i=1, n-1, my (q=1); for (j=i, n-1, q*=a[j]; if (setsearch(p,q), ok=0; break; ); ); ); ); if (ok, for (k=1, n, if (p[k]>mx, break, see(p[k])); ); return (v); ); ); ); quit } { see(1); for (n=1, #a, print (n " " a[n] = find(n)); ); } quit