#http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_5_C&lang=jp
#整数nを入力し、深さnの再帰呼び出しによって作成されるコッホ曲線の頂点の座標を出力するプログラムを作成してください

# 入力 一つの整数nが与えられます
# 1など

# 出力 コッホ曲線の各頂点の座標(x,y)を出力してください
# 一行に一点の座標を出力してください
# 端点の一つ

def koch(n,a,b)
  if n == 0
    return
  end
  s = [(2*a[0]+1*b[0])/3.to_f,(2*a[1]+1*b[1])/3.to_f]
  t = [(1*a[0]+2*b[0])/3.to_f,(1*a[1]+2*b[1])/3.to_f]
  #点の移動(x,y)=>(x',y')は、(xcosθ-ysinθ, xsinθ+ycosθ)で出せる
  #シータはラジアンのみ可
  rag = Math::PI * 60 / 180 .to_f
  u = [((t[0]-s[0])*Math.cos(rag) - (t[1]-s[1])*Math.sin(rag) + s[0]).to_f,
       ((t[0]-s[0])*Math.sin(rag) + (t[1]-s[1])*Math.cos(rag) * s[1]).to_f]
  koch(n-1, a,s)
  puts(s[0],s[1])
  puts("\n")
  koch(n-1, s,u)
  puts(u[0],u[1])
  puts("\n")
  koch(n-1, u,t)
  puts(t[0],t[1])
  puts("\n")
  koch(n-1, t,b)
end


n = gets.chomp.to_i

start_point = [0,0]
end_point = [100,0]

puts(start_point[0],start_point[1])
puts("\n")
koch(n,start_point,end_point)
puts(end_point[0],end_point[1])
puts("\n")

