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

struct xy{
  double x;
  double y;
};

void kock (int , struct xy ,struct xy);

int main(){
  struct xy a={0,0},b={100,0};
  int num;
  
  scanf("%d",&num);

  printf("%f %f\n",a.x,a.y);
  kock(num,a,b);
  printf("%f %f\n",b.x,b.y);
  


  return 0;

}


void kock(int n, struct xy p1,struct xy p2){

  struct xy s,t,u;
  
  if( n == 0)
    return;
  
  // 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)/2 - (t.y - s.y) * sqrt(3)/2 + s.x;
  u.y = (t.x - s.x)*sqrt(3)/2 + (t.y - s.y) /2 + s.y;


  kock(n-1, p1, s);
  printf ("%f %f\n",s.x,s.y);
  kock(n-1, s, u);
  printf("%f %f\n", u.x,u.y);
  kock(n-1, u, t);
  printf("%f %f\n", t.x,t.y);
  kock(n-1, t, p2);

}

