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

void kock(int, double[1][2],double[1][2]);

int main(){

  int n;

  double p1[1][2];
  double p2[1][2];

  p1[0][0] = 0.0;
  p1[0][1] = 0.0;
  p2[0][0] = 100.0;
  p2[0][1]= 0.0;

  scanf("%d",&n);

  printf("%f %f\n",p1[0][0],p1[0][1]);

  kock(n,p1,p2);

  printf("%f %f",p2[0][0],p2[0][1]);

  return 0;

}


void kock(int n, double p1[1][2], double p2[1][2]){

  double s[1][2],t[1][2],u[1][2];

  if(n == 0){

    return;

  }

  else{

    s[0][0] = (p2[0][0] - p1[0][0]) / 3; /*sのx座標*/

    s[0][1] = (p2[0][1] - p1[0][1]) /3; /*sのy座標*/

    t[0][0] = s[0][0] *2;

    t[0][1] = s[0][1] *2;

    u[0][0] = (t[0][0] - s[0][0]) * cos(3.14/3) - (t[0][1]-s[0][1]) * sin(3.14/3) + s[0][0];

    u[0][1] = (t[0][0] - s[0][0]) * sin(3.14/3) +(t[0][1]-s[0][1]) * cos(3.14/3) \
    + s[0][1];
  
  

  kock(n-1,p1,s);

  printf("%f %f\n",s[0][0],s[0][1]);
 
  kock(n-1,s,u);

  printf("%f %f\n",u[0][0],u[0][1]);

  kock(n-1,u,t);

  printf("%f %f\n",t[0][0],t[0][1]);

  kock(n-1,t,p2);

  }

}