#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
FILE *fin, *fout;
vector <int> nr;
vector <int> inm(int k, vector <int> nr){
vector <int> s;
vector <int> :: iterator it;
int val, transport;
transport=0;
for(it=nr.begin();it!=nr.end();it++){
val=(*it)*k+transport;
transport=val/10;
val%=10;
s.push_back(val);
}
if(transport)
s.push_back(transport);
return s;
}
vector <int> adun(vector <int> rez, vector <int> s,int pas){
vector <int> sol;
vector <int> :: iterator it1;
vector <int> :: iterator it2;
int transport,val;
transport=0;
for(it1=rez.begin();it1!=rez.begin()+pas;it1++)
sol.push_back(*it1);
for(it1=rez.begin()+pas,it2=s.begin(); it1!=rez.end() && it2!=s.end(); it1++, it2++){
val=(*it1)+(*it2)+transport;
transport=val/10;
val%=10;
sol.push_back(val);
}
while(it1!=rez.end()){
val=(*it1)+transport;
transport=val/10;
val%=10;
sol.push_back(val);
it1++;
}
while(it2!=s.end()){
val=(*it2)+transport;
transport=val/10;
val%=10;
sol.push_back(val);
it2++;
}
if(transport)
sol.push_back(transport);
return sol;
}
vector <int> solve(int x){
vector <int> rez;
int pas,k;
pas=0;
while(x){
k=x%10;
rez=adun(rez,inm(k,nr),pas);
pas++;
x/=10;
}
return rez;
}
void afis(){
while(!nr.empty()){
fprintf(fout,"%d",nr.back());
nr.pop_back();
}
fprintf(fout,"\n");
}
int main()
{
fin=fopen("patrate2.in","r");
fout=fopen("patrate2.out","w");
int n,i;
fscanf(fin,"%d",&n);
nr.push_back(1);
for(i=2;i<=n;i++)
nr=solve(i);
n=n*n;
for(i=1;i<=n;i++)
nr=solve(2);
afis();
fclose(fin);
fclose(fout);
return 0;
}