def koch(p1,p2):
    s=[(2*p1[0]+p2[0])/3,(2*p1[1]+p2[1])/3]
    t=[(p1[0]+2*p2[0])/3,(p1[1]+2*p2[1])/3]
    m=[(p1[0]+p2[0])/2,(p1[1]+p2[1])/2]
    mu=[-(p2[1]-p1[1])*3**.5/6,(p2[0]-p1[0])*3**.5/6]
    u=[m[0]+mu[0],m[1]+mu[1]]
    return [s,u,t]
ans=[[0,0],[100,0]]
n=int(input())
for _ in range(n):
    now=ans.copy()
    ans=[]
    l=0
    r=1
    c=len(now)
    while r<c:
        ans.append(now[l])
        ans+=koch(now[l],now[r])
        l+=1
        r+=1
    ans.append(now[l])
for p in ans:
    print(*p) def koch(p1,p2):
    s=[(2*p1[0]+p2[0])/3,(2*p1[1]+p2[1])/3]
    t=[(p1[0]+2*p2[0])/3,(p1[1]+2*p2[1])/3]
    m=[(p1[0]+p2[0])/2,(p1[1]+p2[1])/2]
    mu=[-(p2[1]-p1[1])*3**.5/6,(p2[0]-p1[0])*3**.5/6]
    u=[m[0]+mu[0],m[1]+mu[1]]
    return [s,u,t] koch s=[(2*p1[0]+p2[0])/3,(2*p1[1]+p2[1])/3] s [(2*p1[0]+p2[0])/3,(2*p1[1]+p2[1])/3] (2*p1[0]+p2[0])/3 2*p1[0]+p2[0] 2*p1[0] 2 p1[0] p1 0 p2[0] p2 0 3 (2*p1[1]+p2[1])/3 2*p1[1]+p2[1] 2*p1[1] 2 p1[1] p1 1 p2[1] p2 1 3 t=[(p1[0]+2*p2[0])/3,(p1[1]+2*p2[1])/3] t [(p1[0]+2*p2[0])/3,(p1[1]+2*p2[1])/3] (p1[0]+2*p2[0])/3 p1[0]+2*p2[0] p1[0] p1 0 2*p2[0] 2 p2[0] p2 0 3 (p1[1]+2*p2[1])/3 p1[1]+2*p2[1] p1[1] p1 1 2*p2[1] 2 p2[1] p2 1 3 m=[(p1[0]+p2[0])/2,(p1[1]+p2[1])/2] m [(p1[0]+p2[0])/2,(p1[1]+p2[1])/2] (p1[0]+p2[0])/2 p1[0]+p2[0] p1[0] p1 0 p2[0] p2 0 2 (p1[1]+p2[1])/2 p1[1]+p2[1] p1[1] p1 1 p2[1] p2 1 2 mu=[-(p2[1]-p1[1])*3**.5/6,(p2[0]-p1[0])*3**.5/6] mu [-(p2[1]-p1[1])*3**.5/6,(p2[0]-p1[0])*3**.5/6] -(p2[1]-p1[1])*3**.5/6 -(p2[1]-p1[1])*3**.5 -(p2[1]-p1[1]) p2[1]-p1[1] p2[1] p2 1 p1[1] p1 1 3**.5 3 .5 6 (p2[0]-p1[0])*3**.5/6 (p2[0]-p1[0])*3**.5 p2[0]-p1[0] p2[0] p2 0 p1[0] p1 0 3**.5 3 .5 6 u=[m[0]+mu[0],m[1]+mu[1]] u [m[0]+mu[0],m[1]+mu[1]] m[0]+mu[0] m[0] m 0 mu[0] mu 0 m[1]+mu[1] m[1] m 1 mu[1] mu 1 return [s,u,t] [s,u,t] s u t p1 p1 p2 p2 ans=[[0,0],[100,0]] ans [[0,0],[100,0]] [0,0] 0 0 [100,0] 100 0 n=int(input()) n int(input()) int input() input for _ in range(n):
    now=ans.copy()
    ans=[]
    l=0
    r=1
    c=len(now)
    while r<c:
        ans.append(now[l])
        ans+=koch(now[l],now[r])
        l+=1
        r+=1
    ans.append(now[l]) _ range(n) range n now=ans.copy() now ans.copy() ans.copy ans copy ans=[] ans [] l=0 l 0 r=1 r 1 c=len(now) c len(now) len now while r<c:
        ans.append(now[l])
        ans+=koch(now[l],now[r])
        l+=1
        r+=1
     r<c r c ans.append(now[l]) ans.append ans append now[l] now l ans+=koch(now[l],now[r]) ans koch(now[l],now[r]) koch now[l] now l now[r] now r l+=1 l 1 r+=1 r 1 ans.append(now[l]) ans.append ans append now[l] now l for p in ans:
    print(*p) p ans print(*p) print *p p ans+=koch(now[l],now[r]) koch(now[l],now[r]) ans l=0 0 l r=1 1 r ans=[[0,0],[100,0]] [[0,0],[100,0]] ans now=ans.copy() ans.copy() now n=int(input()) int(input()) n l+=1 1 l def koch(p1,p2):
    s=[(2*p1[0]+p2[0])/3,(2*p1[1]+p2[1])/3]
    t=[(p1[0]+2*p2[0])/3,(p1[1]+2*p2[1])/3]
    m=[(p1[0]+p2[0])/2,(p1[1]+p2[1])/2]
    mu=[-(p2[1]-p1[1])*3**.5/6,(p2[0]-p1[0])*3**.5/6]
    u=[m[0]+mu[0],m[1]+mu[1]]
    return [s,u,t] def koch(p1,p2):
    s=[(2*p1[0]+p2[0])/3,(2*p1[1]+p2[1])/3]
    t=[(p1[0]+2*p2[0])/3,(p1[1]+2*p2[1])/3]
    m=[(p1[0]+p2[0])/2,(p1[1]+p2[1])/2]
    mu=[-(p2[1]-p1[1])*3**.5/6,(p2[0]-p1[0])*3**.5/6]
    u=[m[0]+mu[0],m[1]+mu[1]]
    return [s,u,t] koch ans=[] [] ans c=len(now) len(now) c r+=1 1 r
def koch(p1,p2):
    s=[(2*p1[0]+p2[0])/3,(2*p1[1]+p2[1])/3]
    t=[(p1[0]+2*p2[0])/3,(p1[1]+2*p2[1])/3]
    m=[(p1[0]+p2[0])/2,(p1[1]+p2[1])/2]
    mu=[-(p2[1]-p1[1])*3**.5/6,(p2[0]-p1[0])*3**.5/6]
    u=[m[0]+mu[0],m[1]+mu[1]]
    return [s,u,t]
ans=[[0,0],[100,0]]
n=int(input())
for _ in range(n):
    now=ans.copy()
    ans=[]
    l=0
    r=1
    c=len(now)
    while r<c:
        ans.append(now[l])
        ans+=koch(now[l],now[r])
        l+=1
        r+=1
    ans.append(now[l])
for p in ans:
    print(*p)
