import macros, strutils

# https://github.com/nim-lang/Nim/issues/1512

proc macrobust0 (raw_input: string) =
  var output = ""
  proc p1 (a:string) =
    output.add (a)

  proc p2 (a:string) = p1 (a)
  proc p3 (a:string) = p2 (a)
  proc p4 (a:string) = p3 (a)
  proc p5 (a:string) = p4 (a)
  proc p6 (a:string) = p5 (a)
  proc p7 (a:string) = p6 (a)
  proc p8 (a:string) = p7 (a)
  proc p9 (a:string) = p8 (a)
  proc p10 (a:string) = p9 (a)
  proc p11 (a:string) = p10 (a)
  proc p12 (a:string) = p11 (a)
  proc p13 (a:string) = p12 (a)
  proc p14 (a:string) = p13 (a)
  proc p15 (a:string) = p14 (a)
  proc p16 (a:string) = p15 (a)
  proc p17 (a:string) = p16 (a)
  proc p18 (a:string) = p17 (a)
  proc p19 (a:string) = p18 (a)
  proc p20 (a:string) = p19 (a)

  let input = $raw_input

  for a in input.split ():
    p20 (a)
    p19 (a)


    p18 (a)
    p17 (a)
    p16 (a)
    p15 (a)
    p14 (a)
    p13 (a)
    p12 (a)
    p11 (a)
    p10 (a)
    p9 (a)
    p8 (a)
    p7 (a)
    p6 (a)
    p5 (a)
    p4 (a)
    p3 (a)
    p2 (a)
    p1 (a)


  echo output

macro macrobust (raw_input: expr) : stmt =

  var output = ""
  proc p1 (a:string) =
    output.add (a)

  proc p2 (a:string) = p1 (a)
  proc p3 (a:string) = p2 (a)
  proc p4 (a:string) = p3 (a)
  proc p5 (a:string) = p4 (a)
  proc p6 (a:string) = p5 (a)
  proc p7 (a:string) = p6 (a)
  proc p8 (a:string) = p7 (a)
  proc p9 (a:string) = p8 (a)
  proc p10 (a:string) = p9 (a)
  proc p11 (a:string) = p10 (a)
  proc p12 (a:string) = p11 (a)
  proc p13 (a:string) = p12 (a)
  proc p14 (a:string) = p13 (a)
  proc p15 (a:string) = p14 (a)
  proc p16 (a:string) = p15 (a)
  proc p17 (a:string) = p16 (a)
  proc p18 (a:string) = p17 (a)
  proc p19 (a:string) = p18 (a)
  proc p20 (a:string) = p19 (a)

  let input = $raw_input

  for a in input.split ():
    p20 (a)
    p19 (a)

    p18 (a)
    p17 (a)
    p16 (a)
    p15 (a)
    p14 (a)
    p13 (a)
    p12 (a)
    p11 (a)
    p10 (a)
    p9 (a)
    p8 (a)
    p7 (a)
    p6 (a)
    p5 (a)
    p4 (a)
    p3 (a)
    p2 (a)

  echo output
  discard result

macrobust """
  fdsasadfsdfa sadfsdafsdaf
  dsfsdafdsfadsfa fsdaasdfasdf
  fsdafsadfsad asdfasdfasdf
  fdsasdfasdfa sadfsadfsadf
  sadfasdfsdaf sadfsdafsdaf dsfasdaf
  sadfsdafsadf fdsasdafsadf fdsasadfsdaf
  sdfasadfsdafdfsa sadfsadfsdaf
  sdafsdaffsda sdfasadfsadf
  fsdasdafsdfa sdfasdfafsda
  sdfasdafsadf sdfasdafsdaf sdfasdafsdaf
"""


macrobust0 """
  fdsasadfsdfa sadfsdafsdaf
  dsfsdafdsfadsfa fsdaasdfasdf
  fsdafsadfsad asdfasdfasdf
  fdsasdfasdfa sadfsadfsadf
  sadfasdfsdaf sadfsdafsdaf dsfasdaf
  sadfsdafsadf fdsasdafsadf fdsasadfsdaf
  sdfasadfsdafdfsa sadfsadfsdaf
  sdafsdaffsda sdfasadfsadf
  fsdasdafsdfa sdfasdfafsda
  sdfasdafsadf sdfasdafsdaf sdfasdafsdaf
"""