#include<stdio.h>
#include<math.h>
typedef struct{
double x,y;
} Pointer;

int koch(int d,Pointer p1,Pointer p2){
  Pointer s,t,u;

  double r =M_PI*60/180;//度からラジアンへ60度固定
 if(d==0)return 0;
   s.x=(2*p1.x+1*p2.x)/3;
   s.y=(2*p1.y+1*p2.y)/3;
   t.x=(1*p1.x+2*p2.x)/3;
   t.y=(1*p1.y+2*p2.y)/3;
   u.x=(t.x-s.x)*cos(r)-(t.y-s.y)*sin(r)+s.x;
   u.y=(t.x-s.x)*sin(r)+(t.y-s.y)*cos(r)+s.y;//それぞれの座標
   koch(d-1,p1,s);
   printf("%.8f %.8f\n",s.x,s.y);
   koch(d-1,s,u);
   printf("%.8f %.8f\n",u.x,u.y);
   koch(d-1,u,t);
   printf("%.8f %.8f\n",t.x,t.y);
   koch(d-1,t,p2);
 }


int main(){
  Pointer p1,p2;
  int n;
  scanf("%d",&n);
  p1.x=0;
  p1.y=0;
  p2.x=100;
  p2.y=0;
  printf("%.8f %.8f\n",p1.x,p1.y);
  koch(n,p1,p2);
  printf("%.8f %.8f\n",p2.x,p2.y);
  return 0;
}

