class Solution {
public:
bool check(int x,int y,vector<vector<bool>>&f,int n)
{
bool fl=true;
for(int i=1;i<=x;i++)if(f[i][y])fl=false;
int i=x-1,j=y-1;
while(i>=1&&i<=n&&j>=1&&j<=n)
{
if(f[i][j])
{
fl=false;
break;
}
i--,j--;
}
i=x-1,j=y+1;
while(i>=1&&i<=n&&j>=1&&j<=n)
{
if(f[i][j])
{
fl=false;
break;
}
i--,j++;
}
return fl;
}
void dfs(int &res,vector<vector<bool>>f,int row,int n)
{
if(row>n)
{
res++;
return;
}
for(int i=1;i<=n;i++)
{
if(check(row,i,f,n))
{
f[row][i]=true;
dfs(res,f,row+1,n);
f[row][i]=false;
}
}
}
int Nqueen(int n) {
vector<vector<bool>>f(n+2,vector<bool>(n+2,false));
int res=0;
dfs(res,f,1,n);
return res;
}
};