text next(text s) { integer c, e, l; index v; data d; l = ~s; while (l) { v[-s[l -= 1]] += 1; } for (c, e in v) { b_form(d, "%d%c", e, -c); } return d; } integer depth(text s, integer i, record r) { integer d; d = 0; r_j_integer(d, r, s); if (d <= 0) { i += 1; d += d ? i : -i; r[s] = d; i = depth(next(s), i, r); d = r[s]; if (d <= 0) { r[s] = d = i + 1; } } return d; } integer main(void) { integer d, e, i; record r; list l; d = 0; i = 1000000; while (i) { i -= 1; e = depth(itoa(i), 0, r); if (e == d) { lb_p_integer(l, i); } elif (d < e) { d = e; l_clear(l); lb_p_integer(l, i); } } o_("longest length is ", d, "\n"); while (l_o_integer(i, l, 0)) { text s; o_("\n", i, "\n"); e = d - 1; s = itoa(i); while (e) { o_(s = next(s), "\n"); e -= 1; } } return 0; }