Place queens row by row. For each row, try each column and check if it's safe.
Track three constraints:
cols: columns with queens.
diag1: main diagonals (row - col is constant).
diag2: anti-diagonals (row + col is constant).
If column and both diagonals are free, place the queen and recurse.