#include <iostream>
using namespace std;

int prime[500]; // 0 means prime

template<int n> void fillMultiple(int i)
{
	prime[n*i]=1;
	n*i<500?fillMultiple<n>(i+1):fillMultiple<499>(i);
}

template<> void fillMultiple<499>(int i)
{
}

template<int n> void generatePrime()
{	
	prime[n]==0?fillMultiple<n>(2):generatePrime<n+1>();
	generatePrime<n+1>();
}

template<> void generatePrime<499>()
{
}

int main()
{
	prime[0]=prime[1]=1;
	generatePrime<2>();

	for(int i=0;i<500;i++)
		if(0==prime[i])
			cout<<i<<endl;

	return 0;
}