#include <stdio.h>
#include <stdlib.h>
#include <math.h>

typedef struct{
  double x;
  double y;
}P;

void curve(int,P,P);

int main()
{
  int n;
  P p1,p2;

  p1.x = 0;
  p1.y = 0;
  p2.x = 100;
  p2.y = 0;

  scanf("%d",&n);
  if(n<0 || n>6) exit(1);


  printf("%.8f %.8f\n",p1.x,p1.y);
  curve(n,p1,p2); // p1とp2の間に三角形を作る
  printf("%.8f %.8f\n",p2.x,p2.y);
  
  return 0;
}

void curve(int n,P p1,P p2)
{
  P s,t,u; //３等分した点、s>u>tで三角形を形成
  double rad;

  rad = M_PI*60.0/180.0; //60度をラジアンに変える
  if(n==0) return;

  s.x = ((2.0*p1.x)+(1.0*p2.x))/3.0;
  s.y = ((2.0*p1.y)+(1.0*p2.y))/3.0;
  t.x = ((1.0*p1.x)+(2.0*p2.x))/3.0;
  t.y = ((1.0*p1.y)+(2.0*p2.y))/3.0;
  u.x = (t.x-s.x)*cos(rad)-(t.y-s.y)*sin(rad)+s.x;
  u.y = (t.x-s.x)*sin(rad)+(t.y-s.y)*cos(rad)+s.y; //s,t,uそれぞれの座標を決定

  curve(n-1,p1,s); // p1とsの間に三角形を作る
  //printf("s:");
  printf("%.8f %.8f\n",s.x,s.y);
  curve(n-1,s,u); // sとuの間に三角形を作る
  //printf("u:");
  printf("%.8f %.8f\n",u.x,u.y);
  curve(n-1,u,t); // uとtの間に三角形を作る
  //printf("t:");
  printf("%.8f %.8f\n",t.x,t.y);
  curve(n-1,t,p2); // tとp2の間に三角形を作る

}

