Problem: Given n, find n consecutive positive integers. However, all numbers must have divisors other than 1 and the number itself.

Hint

In Sample Output 2, 8, 9 and 10 are selected as three consecutive integers.
The second and third lines output 3, as a divisor of 9, and the fourth line outputs 5, as a divisor of 10.



Input

The input is given in the following format.


n


The input meets the following constraints.
1 ≤ n ≤ 1,500

Output

Print the smallest of the n consecutive positive integers you choose on the first line.
Output the divisor for each value from the 2nd line to the n + 1 line.
Any value may be output unless the divisor is 1 or the number itself.
Let x be the number output on the first line, and output the divisor of x + i-2 on the i line.

The output value must not exceed 5,000 digits.

Examples

Input

2


Output

8
2
3


Input

3


Output

8
2
3
5

Solution (in CPP):

Solution:
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <cfloat>
#include <map>
#include <utility>
#include <set>
#include <iostream>
#include <memory>
#include <string>
#include <vector>
#include <cstring>
#include <algorithm>
#include <functional>
#include <sstream>
#include <complex>
#include <stack>
#include <queue>
using namespace std;
static const double EPS = 1e-10;
typedef long long ll;
#define rep(i,n) for(int i=0;i<n;i++)
#define rev(i,n) for(int i=n-1;i>=0;i--)
#define sz(a) a.size()
#define all(a) a.begin(),a.end()
#define mp(a,b) make_pair(a,b)
#define pb(a) push_back(a)
#define SS stringstream
#define DBG1(a) rep(_X,sz(a)){printf("%d ",a[_X]);}puts("");
#define DBG2(a) rep(_X,sz(a)){rep(_Y,sz(a[_X]))printf("%d ",a[_X][_Y]);puts("");}
#define bitcount(b) __builtin_popcount(b)
#define REP(i, s, e) for ( int i = s; i <= e; i++ )  

class bigInteger{
#define DIGITMAX (1500) // 8 * n digit
public:
	int value[DIGITMAX];
 
	bigInteger operator=(bigInteger b){
		memcpy(this->value,b.value,sizeof(value));
		return *this;
	}
	/* with bug.. O(n^2) */
	// BigNum * MiniNum
	bigInteger operator*(bigInteger b){
		bigInteger ret;
		for(int i=0;i<DIGITMAX;i++){
			if( this->value[i] == 0 ) continue;
			for(int j=0;j<2;j++){
				if(i+j+1<DIGITMAX){
					ret.value[i+j] += this->value[i]*b.value[j];
					ret.value[i+j+1] += ret.value[i+j]/10000;
					ret.value[i+j] %= 10000;
				}
			}
		}
		return ret;
	}
 
	string str(){
		char tmp[5];
		string retVal = "";
		for(int i=DIGITMAX-1;i>=0;i--){
			sprintf(tmp,"%04d",value[i]);
			retVal += tmp;
		}
		while(retVal[0] == '0' && retVal.length()>=2)retVal = retVal.substr(1);
		return retVal;
	}
 
	bigInteger(){memset(this->value,0,sizeof(this->value));}
	bigInteger(string init){
		bigInteger();
		int k = 0;
		for(int i=init.length()-4;i>-4;i-=4){
			this->value[k++] = ( atoi(init.substr(max(i,0),4+(i<0?i:0)).c_str()) );
		}
	}
};


string itos(int n){
	stringstream ss;
	ss << n;
	return ss.str();
}
string a = "72228086929664420651106521304656510525340468690495933260044147676857493358690644482529638108395307511654564478438634721376272188778051867571677494303971390478873572178260066068150017356078782661241238987533757280852905172211680833294253145024943983656218695296759413733574883908589221245240568177781436209401676317319383038846775665336826901129631895822734268520475643048045127654624269933170907051010300717643313921865856559924232063151144365310173623205941144581550600924166393303087536601524168192597964476245223257921963650541646329278517143758923483173347723106601143537838642178278173829023444956089503311173073618445753532875813867598663296856739315684903609697144796703000651178486736265301118699204591404539960193266425232481989189756061431525222968596964249933088718909743192976395466479225138794875961264058160999548340208799114303226288580379230841407309752248092079394823964414350647207773176541876297915527225415606053332774814257496363798032873335209244976152460512461303281664350940362200855365279247888394988618689137490228189308203886028193659048160287400841160648403948450468224084289104098406210815195475652974251962169023042708112638505809861677431741987644306174852881103908590163278563405878077124909779054561182311006333494307156408251018799408892243760644696289136985692091001832810603200225192529800598541540207945722295290503233051371076246617801246477670491898386246813202252408238696055801835478389207343314704575384096010591055146023561280888407508720627001204634924305070472606572970589678020718487701632305423434235349344522025507212353728960218265256211160666381382943117755892517604832475893838160595865215792161003146516488403270449519393015135593822826378540820967201713148164147547345002056230263528047074622225638748140991986702608398865399049744601427157886679868872401102950407289948283733583740631688248833604906587642185488339004414826636286040142084791683914628657165348291172073808784695309880256246134288491744925129655025265419367296706858162549072808281908104196280507954405184075922579759374364259900561966724140537986243526544191866882749547587269821552286730063949533728318429778480319961104918844731005904281956601875539922218659010377799608600522248104929915980307319208535294184439117445226023638753554745329005449341219363202337799785750760984531925797938724780584079004514261157265167710941377789482520847836003702978999053067419330030050926657009667612503509983499709440743897552530545661922756217360475717714559718725057125088075068494238743382339920393013025095894842804425739450336201397753875785039432714111470079033600589280327555233527701846804008145930925677049193844332677916202467853295244150505705862489551127671077913008968771802260142300348484357305227827114586911391477996693157074154238073649552902809477871814788982767900127707865775785353421816396574616339210499369715432824846523313545412258262472457613114462278858700390438045370815099558667681904548529563967959887782439051381515093051083839971093184924699533324883864533628068255474768530563318062535686651109902881658435530198615781114249938229626930315869443959252881511510806892499353192984181283162193449665304948147353594412389485553869698454787678542400068047527214712896215908316948738319413254818031964190264213846624574815962397511747360826691373404559244514825698683380176427007758604913736911634120333325940804474215742804747345600659876724975648842313122644729082808669136782282299383057415970849029516885694841248600202581390981775107207780538202966696283718312699336922215896101871392802295957267843867101490929563927994151894788454192611564225071646925001390206647138880897340472856291016111630131201127185218000527224245229374106598067483230331626123791916818249484120815023729026712298569622439434649600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002";

int main(){

	bigInteger x("1");
	int n;
	cin >> n;
	cout << a << endl;
	for(int i = 2 ; i <= n+1 ; i++){
		cout << i << endl;
	}
}