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

typedef struct{
  double x;
  double y;
}Toge;

void koch(int, Toge, Toge);

int main(){
  int n = 0;
  int i = 0;
  Toge p1 = { 0, 0};
  Toge p2 = {100, 0};
  
  scanf("%d",&n);

  printf("%.8f %.8f\n",p1.x, p1.y);
  
  koch(n, p1, p2);

  printf("%.8f %.8f\n",p2.x, p2.y);
  
  return 0;
}

void koch(int n, Toge p1, Toge p2){
  Toge s = {0,0}, t = {0,0}, u = {0,0};
  
  if(n == 0)return;

  /* calculate s */
  s.x = ( (2 * p1.x) + (1 * p2.x) ) / 3;
  s.y = ( (2 * p1.y) + (1 * p2.y) ) / 3;
  
  /* calculate t */
  t.x = ( (1 * p1.x) + (2 * p2.x) ) / 3;
  t.y = ( (1 * p1.y) + (2 * p2.y) ) / 3;
  
  /* calculate u */
  u.x = (t.x - s.x) * cos(M_PI/3) - (t.y - s.y) * sin(M_PI/3) + s.x;
  u.y = (t.x - s.x) * sin(M_PI/3) + (t.y - s.y) * cos(M_PI/3)  + s.y;
  
  /* p1 -> s */
  koch(n-1, p1, s);
  printf("%.8f %.8f\n",s.x,s.y);
  
  /* s -> u */
  koch(n-1, s, u);
  printf("%.8f %.8f\n",u.x,u.y);
  
  /* u -> t */
  koch(n-1, u, t);
  printf("%.8f %.8f\n",t.x,t.y);
  
  /* t -> p2 */
  koch(n-1, t, p2);
}

