def l(a): from itertools import count for i in count(): if a(i) is None: return i def r(k, a): l_a = l(a) return lambda i: a(i % l_a) if i < l_a * k else None def c(a, b): l_a, l_b = l(a), l(b) return lambda i: a(i) if i < l_a else b(i - l_a) if i < l_a + l_b else None def s(c): assert len(c) == 1 return lambda i: c if i == 0 else None def p(a): print ''.join(a(i) for i in range(l(a))) if __name__ == '__main__': p(c(r(3,c(r(3,s('9')),s('1'))),s('2')))