from joy.parser import Symbol


def _names():
    n = 0
    while True:
        yield Symbol('a' + str(n))
        n += 1


class InfiniteStack(tuple):

  names = _names().next

  def __iter__(self):
    if not self:
      return iter((self.names(), self))


i = InfiniteStack()

a, b = i

lambda u: (lambda fu, u: fu * fu * u)(
  (lambda u: (lambda fu, u: fu * fu)(
    (lambda u: (lambda fu, u: fu * fu * u)(
      (lambda u: 1)(u), u))(u), u))(u),
  u)

lambda u: (lambda fu, u: fu * fu * u)((lambda u: (lambda fu, u: fu * fu)((lambda u: (lambda fu, u: fu * fu * u)((lambda u: 1)(u), u))(u), u))(u), u)
