#include<iostream>
#include<string>
#include<algorithm>
#include<string.h>
#include<vector>
#include<queue>
using namespace std;
int n, ans;
bool v[20][20];
void visited(int x, int y) {
v[x][y] = true;
for (int i = 0; i < n; i++)
v[x][i] = true;
for (int i = 0; i < n; i++)
v[i][y] = true;
int X = x; int Y = y;
while (1) {
X += 1;
Y += 1;
if (X == n || Y == n)
break;
v[X][Y] = true;
}
X = x; Y = y;
while (1) {
X -= 1;
Y -= 1;
if (X == -1 || Y == -1)
break;
v[X][Y] = true;
}
X = x; Y = y;
while (1) {
X += 1;
Y -= 1;
if (X == n || Y == -1)
break;
v[X][Y] = true;
}
X = x; Y = y;
while (1) {
X -= 1;
Y += 1;
if (X == -1 || Y == n)
break;
v[X][Y] = true;
}
}
void unvisited(int x, int y) {
v[x][y] = false;
for (int i = 0; i < n; i++)
v[x][i] = false;
for (int i = 0; i < n; i++)
v[i][y] = false;
int X = x; int Y = y;
while (1) {
X += 1;
Y += 1;
if (X == n || Y == n)
break;
v[X][Y] = false;
}
X = x; Y = y;
while (1) {
X -= 1;
Y -= 1;
if (X == -1 || Y == -1)
break;
v[X][Y] = false;
}
X = x; Y = y;
while (1) {
X += 1;
Y -= 1;
if (X == n || Y == -1)
break;
v[X][Y] = false;
}
X = x; Y = y;
while (1) {
X -= 1;
Y += 1;
if (X == -1 || Y == n)
break;
v[X][Y] = false;
}
}
bool check(int x, int y) {
if (v[x][y] == true)
return false;
return true;
}
void dfs(int x, int y) {
if (x == n) {
ans+=1;
return;
}
for (int i = 0; i < n; i++) {
if (check(x + 1, i)==true) {
visited(x + 1, i);
dfs(x + 1, i);
unvisited(x + 1, i);
}
}
}
int main() {
cin >> n;
dfs(-1, -1);
printf("%d\n", ans);
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0cmluZz4KI2luY2x1ZGU8YWxnb3JpdGhtPgojaW5jbHVkZTxzdHJpbmcuaD4KI2luY2x1ZGU8dmVjdG9yPgojaW5jbHVkZTxxdWV1ZT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBuLCBhbnM7CmJvb2wgdlsyMF1bMjBdOwoKdm9pZCB2aXNpdGVkKGludCB4LCBpbnQgeSkgewoJdlt4XVt5XSA9IHRydWU7CgoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgkJdlt4XVtpXSA9IHRydWU7CgoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgkJdltpXVt5XSA9IHRydWU7CgoJaW50IFggPSB4OyBpbnQgWSA9IHk7CgoJd2hpbGUgKDEpIHsKCQlYICs9IDE7CgkJWSArPSAxOwoKCQlpZiAoWCA9PSBuIHx8IFkgPT0gbikKCQkJYnJlYWs7CgoJCXZbWF1bWV0gPSB0cnVlOwoJfQoKCVggPSB4OyBZID0geTsKCgl3aGlsZSAoMSkgewoJCVggLT0gMTsKCQlZIC09IDE7CgoJCWlmIChYID09IC0xIHx8IFkgPT0gLTEpCgkJCWJyZWFrOwoKCQl2W1hdW1ldID0gdHJ1ZTsKCX0KCVggPSB4OyBZID0geTsKCgl3aGlsZSAoMSkgewoJCVggKz0gMTsKCQlZIC09IDE7CgoJCWlmIChYID09IG4gfHwgWSA9PSAtMSkKCQkJYnJlYWs7CgoJCXZbWF1bWV0gPSB0cnVlOwoJfQoKCVggPSB4OyBZID0geTsKCgl3aGlsZSAoMSkgewoJCVggLT0gMTsKCQlZICs9IDE7CgoJCWlmIChYID09IC0xIHx8IFkgPT0gbikKCQkJYnJlYWs7CgoJCXZbWF1bWV0gPSB0cnVlOwoJfQp9Cgp2b2lkIHVudmlzaXRlZChpbnQgeCwgaW50IHkpIHsKCXZbeF1beV0gPSBmYWxzZTsKCglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKCQl2W3hdW2ldID0gZmFsc2U7CgoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgkJdltpXVt5XSA9IGZhbHNlOwoKCWludCBYID0geDsgaW50IFkgPSB5OwoKCXdoaWxlICgxKSB7CgkJWCArPSAxOwoJCVkgKz0gMTsKCgkJaWYgKFggPT0gbiB8fCBZID09IG4pCgkJCWJyZWFrOwoKCQl2W1hdW1ldID0gZmFsc2U7Cgl9CgoJWCA9IHg7IFkgPSB5OwoKCXdoaWxlICgxKSB7CgkJWCAtPSAxOwoJCVkgLT0gMTsKCgkJaWYgKFggPT0gLTEgfHwgWSA9PSAtMSkKCQkJYnJlYWs7CgoJCXZbWF1bWV0gPSBmYWxzZTsKCX0KCglYID0geDsgWSA9IHk7CgoJd2hpbGUgKDEpIHsKCQlYICs9IDE7CgkJWSAtPSAxOwoKCQlpZiAoWCA9PSBuIHx8IFkgPT0gLTEpCgkJCWJyZWFrOwoKCQl2W1hdW1ldID0gZmFsc2U7Cgl9CgoJWCA9IHg7IFkgPSB5OwoKCXdoaWxlICgxKSB7CgkJWCAtPSAxOwoJCVkgKz0gMTsKCgkJaWYgKFggPT0gLTEgfHwgWSA9PSBuKQoJCQlicmVhazsKCgkJdltYXVtZXSA9IGZhbHNlOwoJfQoKfQoKYm9vbCBjaGVjayhpbnQgeCwgaW50IHkpIHsKCglpZiAodlt4XVt5XSA9PSB0cnVlKQoJCXJldHVybiBmYWxzZTsKCglyZXR1cm4gdHJ1ZTsKfQoKdm9pZCBkZnMoaW50IHgsIGludCB5KSB7CglpZiAoeCA9PSBuKSB7CgkJYW5zKz0xOwoJCXJldHVybjsKCX0KCglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoJCWlmIChjaGVjayh4ICsgMSwgaSk9PXRydWUpIHsKCQkJdmlzaXRlZCh4ICsgMSwgaSk7CgkJCWRmcyh4ICsgMSwgaSk7CgkJCXVudmlzaXRlZCh4ICsgMSwgaSk7CgkJfQoJfQoKfQoKaW50IG1haW4oKSB7CgoJCWNpbiA+PiBuOwoJCWRmcygtMSwgLTEpOwoKCQlwcmludGYoIiVkXG4iLCBhbnMpOwoKCXJldHVybiAwOwp9