import math

n=int(input())

#def koch(p1,p2,n):
def koch(d,p1,p2):
  if d==0:
    return
  #3等分する
  s=[(2*p1[0]+1*p2[0])/3,(2*p1[1]+1*p2[1])/3]
  t=[(1*p1[0]+2*p2[0])/3,(1*p1[1]+2*p2[1])/3]
  #正三角形の頂点のひとつである座標を求める
  u=[
    (t[0]-s[0])*math.cos(math.radians(60))-(t[1]-s[1])*math.sin(math.radians(60))+s[0],
    (t[0]-s[0])*math.sin(math.radians(60))+(t[1]-s[1])*math.cos(math.radians(60))+s[1]
    ]
  koch(d-1,p1,s)
  print(*s)
  koch(d-1,s,u)
  print(*u)
  koch(d-1,u,t)
  print(*t)
  koch(d-1,t,p2)

print('0 0')
koch(n,[0,0],[100,0])
print('100 0') import math math n=int(input()) n int(input()) int input() input def koch(d,p1,p2):
  if d==0:
    return
  #3等分する
  s=[(2*p1[0]+1*p2[0])/3,(2*p1[1]+1*p2[1])/3]
  t=[(1*p1[0]+2*p2[0])/3,(1*p1[1]+2*p2[1])/3]
  #正三角形の頂点のひとつである座標を求める
  u=[
    (t[0]-s[0])*math.cos(math.radians(60))-(t[1]-s[1])*math.sin(math.radians(60))+s[0],
    (t[0]-s[0])*math.sin(math.radians(60))+(t[1]-s[1])*math.cos(math.radians(60))+s[1]
    ]
  koch(d-1,p1,s)
  print(*s)
  koch(d-1,s,u)
  print(*u)
  koch(d-1,u,t)
  print(*t)
  koch(d-1,t,p2) koch if d==0:
    return
  #3等分する
   d==0 d 0 return s=[(2*p1[0]+1*p2[0])/3,(2*p1[1]+1*p2[1])/3] s [(2*p1[0]+1*p2[0])/3,(2*p1[1]+1*p2[1])/3] (2*p1[0]+1*p2[0])/3 2*p1[0]+1*p2[0] 2*p1[0] 2 p1[0] p1 0 1*p2[0] 1 p2[0] p2 0 3 (2*p1[1]+1*p2[1])/3 2*p1[1]+1*p2[1] 2*p1[1] 2 p1[1] p1 1 1*p2[1] 1 p2[1] p2 1 3 t=[(1*p1[0]+2*p2[0])/3,(1*p1[1]+2*p2[1])/3] t [(1*p1[0]+2*p2[0])/3,(1*p1[1]+2*p2[1])/3] (1*p1[0]+2*p2[0])/3 1*p1[0]+2*p2[0] 1*p1[0] 1 p1[0] p1 0 2*p2[0] 2 p2[0] p2 0 3 (1*p1[1]+2*p2[1])/3 1*p1[1]+2*p2[1] 1*p1[1] 1 p1[1] p1 1 2*p2[1] 2 p2[1] p2 1 3 u=[
    (t[0]-s[0])*math.cos(math.radians(60))-(t[1]-s[1])*math.sin(math.radians(60))+s[0],
    (t[0]-s[0])*math.sin(math.radians(60))+(t[1]-s[1])*math.cos(math.radians(60))+s[1]
    ] u [
    (t[0]-s[0])*math.cos(math.radians(60))-(t[1]-s[1])*math.sin(math.radians(60))+s[0],
    (t[0]-s[0])*math.sin(math.radians(60))+(t[1]-s[1])*math.cos(math.radians(60))+s[1]
    ] (t[0]-s[0])*math.cos(math.radians(60))-(t[1]-s[1])*math.sin(math.radians(60))+s[0] (t[0]-s[0])*math.cos(math.radians(60))-(t[1]-s[1])*math.sin(math.radians(60)) (t[0]-s[0])*math.cos(math.radians(60)) t[0]-s[0] t[0] t 0 s[0] s 0 math.cos(math.radians(60)) math.cos math cos math.radians(60) math.radians math radians 60 (t[1]-s[1])*math.sin(math.radians(60)) t[1]-s[1] t[1] t 1 s[1] s 1 math.sin(math.radians(60)) math.sin math sin math.radians(60) math.radians math radians 60 s[0] s 0 (t[0]-s[0])*math.sin(math.radians(60))+(t[1]-s[1])*math.cos(math.radians(60))+s[1] (t[0]-s[0])*math.sin(math.radians(60))+(t[1]-s[1])*math.cos(math.radians(60)) (t[0]-s[0])*math.sin(math.radians(60)) t[0]-s[0] t[0] t 0 s[0] s 0 math.sin(math.radians(60)) math.sin math sin math.radians(60) math.radians math radians 60 (t[1]-s[1])*math.cos(math.radians(60)) t[1]-s[1] t[1] t 1 s[1] s 1 math.cos(math.radians(60)) math.cos math cos math.radians(60) math.radians math radians 60 s[1] s 1 koch(d-1,p1,s) koch d-1 d 1 p1 s print(*s) print *s s koch(d-1,s,u) koch d-1 d 1 s u print(*u) print *u u koch(d-1,u,t) koch d-1 d 1 u t print(*t) print *t t koch(d-1,t,p2) koch d-1 d 1 t p2 d d p1 p1 p2 p2 print('0 0') print '0 0' koch(n,[0,0],[100,0]) koch n [0,0] 0 0 [100,0] 100 0 print('100 0') print '100 0' def koch(d,p1,p2):
  if d==0:
    return
  #3等分する
  s=[(2*p1[0]+1*p2[0])/3,(2*p1[1]+1*p2[1])/3]
  t=[(1*p1[0]+2*p2[0])/3,(1*p1[1]+2*p2[1])/3]
  #正三角形の頂点のひとつである座標を求める
  u=[
    (t[0]-s[0])*math.cos(math.radians(60))-(t[1]-s[1])*math.sin(math.radians(60))+s[0],
    (t[0]-s[0])*math.sin(math.radians(60))+(t[1]-s[1])*math.cos(math.radians(60))+s[1]
    ]
  koch(d-1,p1,s)
  print(*s)
  koch(d-1,s,u)
  print(*u)
  koch(d-1,u,t)
  print(*t)
  koch(d-1,t,p2) def koch(d,p1,p2):
  if d==0:
    return
  #3等分する
  s=[(2*p1[0]+1*p2[0])/3,(2*p1[1]+1*p2[1])/3]
  t=[(1*p1[0]+2*p2[0])/3,(1*p1[1]+2*p2[1])/3]
  #正三角形の頂点のひとつである座標を求める
  u=[
    (t[0]-s[0])*math.cos(math.radians(60))-(t[1]-s[1])*math.sin(math.radians(60))+s[0],
    (t[0]-s[0])*math.sin(math.radians(60))+(t[1]-s[1])*math.cos(math.radians(60))+s[1]
    ]
  koch(d-1,p1,s)
  print(*s)
  koch(d-1,s,u)
  print(*u)
  koch(d-1,u,t)
  print(*t)
  koch(d-1,t,p2) koch n=int(input()) int(input()) n
import math

n=int(input())

#def koch(p1,p2,n):
def koch(d,p1,p2):
  if d==0:
    return
  #3等分する
  s=[(2*p1[0]+1*p2[0])/3,(2*p1[1]+1*p2[1])/3]
  t=[(1*p1[0]+2*p2[0])/3,(1*p1[1]+2*p2[1])/3]
  #正三角形の頂点のひとつである座標を求める
  u=[
    (t[0]-s[0])*math.cos(math.radians(60))-(t[1]-s[1])*math.sin(math.radians(60))+s[0],
    (t[0]-s[0])*math.sin(math.radians(60))+(t[1]-s[1])*math.cos(math.radians(60))+s[1]
    ]
  koch(d-1,p1,s)
  print(*s)
  koch(d-1,s,u)
  print(*u)
  koch(d-1,u,t)
  print(*t)
  koch(d-1,t,p2)

print('0 0')
koch(n,[0,0],[100,0])
print('100 0')
