#include <bits/stdc++.h>

using namespace std;

const int dx[4] = { 0,0,1,-1},
          dy[4] = {-1,1,0, 0};

vector<pair<int,int> > sol,aux;
map<vector<pair<int,int> >, int>  M;
vector<vector<pair<int,int> > > V;
#define TableSize 30
#define middleSize TableSize/2
int used[TableSize][TableSize];
char tabla[TableSize][TableSize];

int Size = 14,avem;

void back(int x,int y,int k)
{
    if(k == Size){ /// we generated a shape

        aux = sol;
        pair<int,int> best = aux[0];

        for(int i = 0; i < Size; ++i)
            if(best > aux[i])
                best = aux[i]; /// we search the down left corner

        for(int i = 0; i < Size; ++i){ /// we fix the corner as reference point
            aux[i].first -= best.first;
            aux[i].second -= best.second;
        }
        sort(aux.begin(),aux.end()); /// le sortam pe nenorocitele astea
                                    /// ca sa fie mereu in aceeasi ordine relativa
        if(M[aux] == 0)
        {
            ++avem;

        }

        M[aux] = 1;
        return;
    }

    for(int i = 0; i <= 3; ++i){
        int _newx,_newy;
        _newx = x + dx[i];
        _newy = y + dy[i];
        if(!used[_newx][_newy]){
            sol[k] = {_newx,_newy};
            used[_newx][_newy] = 1;
            back(_newx,_newy,k+1);
            used[_newx][_newy] = 0;
        }
    }
}
int N,cnt;

void Read()
{
    scanf("%d",&N);
    for(int i = 0; i < N; ++i)
        scanf("%s",tabla[i]);
}

int afara(int x,int y)
{
    if(0 <= x && x < N && 0 <= y && y < N)
        return 0;
    return 1;
}

int main()
{

    cin >> Size;
    sol.resize(Size);
    sol[0] = {middleSize,middleSize};
    used[middleSize][middleSize] = 1;
    back(middleSize,middleSize,1);
    for(auto it : M)
    {
        vector<pair<int,int> > crt = it.first;
        pair<int,int> best = crt[0];
        for(int i = 0; i < Size; ++i)
        {
            crt[i].first -= best.first;
            crt[i].second -= best.second;
            ///used[crt[i].first][crt[i].second] = 1;
        }
        V.push_back(crt);
        ///printf("dadada\n");
    }
    printf("%d\n",V.size());

    return 0;
}