#include<iostream>
using namespace std;
int ans;
bool vis[3][20];//0代表列,1代表主对角线,2代表副对角线
void search(int cur)//cur代表行
{
if(cur==8)
{
ans++;
return ;
}
for(int i=0;i<=7;i++)
{
if(!vis[0][i]&&!vis[1][cur-i+8]&&!vis[2][cur+i])
{
vis[0][i]=vis[1][cur-i+8]=vis[2][cur+i]=true;
search(cur+1);
vis[0][i]=vis[1][cur-i+8]=vis[2][cur+i]=false;
}
}
}
int main()
{
search(0);
cout<<ans;
}
using namespace std;
int ans;
bool vis[3][20];//0代表列,1代表主对角线,2代表副对角线
void search(int cur)//cur代表行
{
if(cur==8)
{
ans++;
return ;
}
for(int i=0;i<=7;i++)
{
if(!vis[0][i]&&!vis[1][cur-i+8]&&!vis[2][cur+i])
{
vis[0][i]=vis[1][cur-i+8]=vis[2][cur+i]=true;
search(cur+1);
vis[0][i]=vis[1][cur-i+8]=vis[2][cur+i]=false;
}
}
}
int main()
{
search(0);
cout<<ans;
}