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

typedef struct node{
  double x,y;
} POINT;

void kock( int, POINT ,POINT );

int main(){

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

  POINT s,t,u;
  if(n == 0) return;

  double th = 60 * M_PI / 180; 
  
  //p1,p2からs,t,u を計算する
  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(th) - (t.y-s.y)*sin(th) + s.x;
  u.y = (t.x-s.x)*sin(th) + (t.y-s.y)*cos(th) + s.y;
  
  kock(n-1, p1, s);
  printf("%.8f %.8f\n", s.x, s.y );//s
  
  kock(n-1, s, u);
  printf("%.8f %.8f\n", u.x, u.y );//u
  
  kock(n-1, u, t);
  printf("%.8f %.8f\n", t.x, t.y);//t
  
  kock(n-1, t, p2);
}

