#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;
int n,ox,oy,m[50][50];
struct per
{
    int x,y;
}a[50];
set< vector <int> >V;
pair<int,int>h[50];
long long ras,cate;
const int dx[4]={0,1,0,-1};
const int dy[4]={1,0,-1,0};
void bck(int k,int i,int j)
{
    if(k==n-1)
    {
        int minx=ox;
        int miny=oy;
        for(int i=0;i<n;i++)
        {
            if(minx>a[i].x)minx=a[i].x;
            if(miny>a[i].y)miny=a[i].y;
        }
        for(int i=0;i<n;i++)
            h[i]=make_pair(a[i].x-minx,a[i].y-miny);
        sort(h,h+n);
        vector <int >curr;
        for(int i=0;i<n;i++)
        {
            curr.push_back(h[i].first);
            curr.push_back(h[i].second);
        }
        set < vector < int > > :: iterator it = V.find (curr);
        if(it==V.end())
        {
            ras++;
            V.insert(curr);
        }
        return ;
    }
    int nx,ny;
    for(int o=0;o<4;o++)
    {
        nx=i+dx[o];
        ny=j+dy[o];
        if(m[nx][ny]==0)
        {
            m[nx][ny]=1;
            a[k+1].x=nx;
            a[k+1].y=ny;
            bck(k+1,nx,ny);
            m[nx][ny]=0;
        }
    }
}
int main()
{
    //freopen("input","r",stdin);
    //freopen("output","w",stdout);
    scanf("%d",&n);
    ox=15;
    oy=15;
    a[0].x=ox;
    a[0].y=oy;
    m[ox][oy]=1;
    bck(0,ox,oy);
    printf("%lld",ras);
    return 0;
}


/*#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m[50][50];
long long ras,cate;
const int dx[4]={0,1,0,-1};
const int dy[4]={1,0,-1,0};
void bck(int k,int i,int j,int mx,int my)
{
    if(k==n-1)
    {
        ras++;
        return ;
    }
    int nx,ny;
    int xmax,ymax;
    for(int o=0;o<4;o++)
    {
        nx=i+dx[o];
        ny=j+dy[o];
        if(m[nx][ny]==0)
        {
            m[nx][ny]=1;
            xmax=mx;
            ymax=my;
            if(xmax>nx)
            {
                xmax=nx;
                ymax=ny;
            }
            else if(xmax==nx&&ymax<ny)
            {
                xmax=nx;
                ymax=ny;
            }
            bck(k+1,nx,ny,xmax,ymax);
            m[nx][ny]=0;
        }
    }
}
int main()
{
    //freopen("input","r",stdin);
    //freopen("output","w",stdout);
    scanf("%d",&n);
    ox=15;
    oy=15;
    m[ox][oy]=1;
    bck(0,ox,oy,ox,oy);
    printf("%lld",ras-cate/2);
    return 0;
}
*/