#include <iostream>
#include <cstdlib>
#include <cmath>
#include "PS.hpp"

class Sierp : public PS {
	public:
		Sierp(const char *nom);
		void Tri( int n, 	
				double x0, double y0, double x1, double y1, double x2, double y2);
};


Sierp::Sierp(const char *nom) : PS(nom)
{
}

void Sierp::Tri(int n, 
			double x0, double y0, double x1, double y1, double x2, double y2)
{
	if (n==0) {
		moveto(x0,y0);
		lineto(x1,y1);
		lineto(x2,y2);
		lineto(x0,y0);
	}
	else {
		double x01= (x0 + x1) / 2.0;
		double y01= (y0 + y1) / 2.0;

		double x12= (x1 + x2) / 2.0;
		double y12= (y1 + y2) / 2.0;

		double x02= (x0 + x2) / 2.0;
		double y02= (y0 + y2) / 2.0;

		Tri(n-1, x0, y0, x01, y01, x02, y02);
		Tri(n-1, x01, y01, x1, y1, x12, y12);
		Tri(n-1, x12, y12, x02, y02, x2, y2);
	}
}

int main(int argc, const char *argv[])
{
	int n;
	std::cin >> n;
	Sierp p("s2.ps");
	double cenx= 1.0/2.0;
	double ceny= sqrt(3.0)/4;
	double esc= 20.0;
	p.Tri( n,	esc*( 0.0 - cenx ), esc*( 0.0 - ceny ),
				esc*( 1.0 - cenx ), esc*( 0.0 - ceny ),
				esc*( 0.5 - cenx ), esc*( sqrt(3.0)/2.0 - ceny) );
		
	return EXIT_SUCCESS;

}












