big = 1 000 000
s = 0
S = Set([])
unseen = 1
seen(v) = if (v < big, bit test(s, v), set search(S, v))
see(v) = if (v < big, s = bit or(s, 2^v), S = set union(S, Set([v]))); while (seen(unseen), unseen++)

M = 5
t = []	\\ previous digits

ok(v, keep) = {
	my (d=digits(v), tt=t);
	for (i=1, #d,
		if (#tt < M,
			tt = concat(tt, d[i]),
			tt = concat(tt[2..#tt], d[i]);
		);
		if (#tt==M && vecsum(tt)%M,
			return (0);
		);
	);

	if (keep,
		t = tt;
	);

	return (1);
}

other() = {
	my (can = [0]);
	for (w=1, oo,
		my (newcan = []);
		for (c=1, #can,
			for (d=if (w==1, 1, 0), 9,
				my (v=can[c]*10 + d);
				if (ok(v, !seen(v)),
					if (!seen(v),
						see(v);
						return (v),
						newcan = concat(newcan, v);
					);
				);
			);
		);
		can = newcan;
	);
}

for (n=1, 10 000, print (n " " other()))

quit