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

typedef struct point{
  double x;
  double y;
}Point ;

void kock(int,Point *,Point *);

int n;//深さを記録する外部変数

int main(){
  Point p1, p2;

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

  scanf("%d", &n);
  printf("%f %f\n", p1.x,p1.y);
  kock(n,&p1,&p2);
  printf("%f %f\n", p2.x,p2.y);  

  return 0;
}

void kock(int n,Point *p1,Point *p2){
  double rad = 60 * M_PI / 180.0;
  Point s, t, u;

  if(n == 0){
    return ;
  }

  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(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;
  
  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);
}

