#include <stdio.h>
#include <math.h>
typedef struct{
  double x;
  double y;
} P;
void kock(int, P , P);/* コッホ曲線の頂点の座標を順番に出力する関数。*/
int main()
{
  int n;
  P 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);

  return 0;
}

void kock(int n, P p1, P p2)
{
  P s, t, u;

  if(n == 0) return;

  s.x = (double)(2 * p1.x + 1 * p2.x)/(double)3;
  s.y = (double)(2 * p1.y + 1 * p2.y)/(double)3;
  t.x = (double)(1 * p1.x + 2 * p2.x)/(double)3;
  t.y = (double)(1 * p1.y + 2 * p2.y)/(double)3;

  u.x = (t.x - s.x) * cos(M_PI/(double)3) - (t.y - s.y) * sin(M_PI/(double)3) + s.x;
  /* M_PIはmath.hに円周率πとして定義されている */
  u.y = (t.x - s.x) * sin(M_PI/(double)3) + (t.y - s.y) * cos(M_PI/(double)3) + s.y;

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

