#include<stdio.h>
#include<math.h>
struct loc{
	double x;
	double y;
}; 
struct loc p1,p2;
void koch(int i,struct loc p1a,struct loc p2a){
	if(i==0)
	return;//递归结束条件 
	
	struct loc s,u,t;
	s.x=(p2a.x+2*p1a.x)/3;
	s.y=(p2a.y+2*p1a.y)/3;
	t.x=(2*p2a.x+p1a.x)/3;
	t.y=(2*p2a.y+p1a.y)/3;
	u.x=(t.x-s.x)*0.5-(t.y-s.y)*(sqrt(3)/2)+s.x;
	u.y=(t.x-s.x)*(sqrt(3)/2)+(t.y-s.y)*0.5+s.y;//计算坐标 
	
	koch(i-1,p1a,s);
	printf("%.8lf %.8lf\n",s.x,s.y);
	koch(i-1,s,u);
	printf("%.8lf %.8lf\n",u.x,u.y);
	koch(i-1,u,t);
	printf("%.8lf %.8lf\n",t.x,t.y);
	koch(i-1,t,p2a);//递归 
}
int main(){
	p1.x=0.00000000;
    p1.y=0.00000000;
    p2.x=100.00000000;
    p2.y=0.00000000;
	int n;
	scanf("%d",&n);
	printf("%.8lf %.8lf\n",p1.x,p1.y);
	koch(n,p1,p2);
	printf("%.8lf %.8lf\n",p2.x,p2.y);
	return 0;
} 
