n = gets.chomp.to_i

def koch(depth, ary_p1, ary_p2)
    if depth == 0 then
         return 0
    end
    p1 = ary_p1
    p2 = ary_p2
    # 線分を 3等分する 2点 s, t を算出する。
    s = [(ary_p1[0] * 2 + ary_p2[0] * 1) / 3.0, (ary_p1[1] * 2 + ary_p2[1] * 1) / 3.0]
    t = [(ary_p1[0] * 1 + ary_p2[0] * 2) / 3.0, (ary_p1[1] * 1 + ary_p2[1] * 2) / 3.0]
    # 張り出す三角形の頂点 u を算出する。
    u = []
    u[0] = (t[0] - s[0]) * Math.cos(60 * Math::PI / 180) - (t[1] - s[1]) * Math.sin(60 * Math::PI / 180) + s[0]
    u[1] = (t[0] - s[0]) * Math.sin(60 * Math::PI / 180) + (t[1] - s[1]) * Math.cos(60 * Math::PI / 180) + s[1]
    
    koch(depth - 1, p1, s)
    puts s.join(' ')
    koch(depth - 1, s, u)
    puts u.join(' ')
    koch(depth - 1, u, t)
    puts t.join(' ')
    koch(depth - 1, t, p2)
end

p1 = [0, 0]
p2 = [100, 0]
puts p1.join(' ')
koch(n, p1, p2)
puts p2.join(' ')

