class Solution {
public:
    vector<vector<string>> res;
    vector<vector<string>> solveNQueens(int n) {
        vector<string> track;
        string s="";
        for(int i=0;i<n;i++)
        {
            s+='.';
        }
        for(int i=0;i<n;i++)
        {
            track.push_back(s);
        }
        DFS(n,0,track);
        return res;
    }
    void DFS(int n,int index,vector<string>& track)
    {
        if(index==n)
        {
            res.push_back(track);
            return;
        }
        for(int i=0;i<n;i++)
        {
            if(!valid(track,index,i))
            {
               continue;
            }
            track[index][i]='Q';
            DFS(n,index+1,track);
            track[index][i]='.';
        }
    }
    bool valid(vector<string>map,int row,int col)
    {
        for(int i=0;i<row;i++)
        {
            if(map[i][col]=='Q')
            {
                return false;
            }
        }
        for(int i=row-1,j=col-1;i>=0 &&j>=0;i--,j--)
        {
            if(map[i][j]=='Q')
            {
                return false;
            }   
        }
        for(int i=row-1,j=col+1;i>=0 &&j<map.size();i--,j++)
        {
            if(map[i][j]=='Q')
            {
                return false;
            }   
        }
        return true;
    }
};