def back_track(line_num, n, queens, solutions, columns, diagonal1, diagonal2):
if line_num n:
result gen_board(n, queens)
solutions.append(result)
return
for i in range(n):
if i in columns or line_num - i in diagonal1 or line_num i in diagonal2:
continue
queens[line_num] i
columns.add(i)
diagonal1.add(line_num - i)
diagonal2.add(line_num i)
back_track(line_num 1, n, queens, solutions, columns, diagonal1, diagonal2)
columns.remove(i)
diagonal1.remove(line_num - i)
diagonal2.remove(line_num i)