# 각 열에 1개 퀸을 배치한 조합을 재귀적으로 나열하기
# 각 열별로 8칸이 존재하니 총 8가지가 존재, 그래서 8 을 8번 곱한다..
# 8 * 8 * 8 * 8 * 8 * 8 * 8 * 8 = 16,777,216 ( 위 규칙을 추가할 경우 퀸을 배치하는 조합의 수)
pos = [0] * 8  # 각 열에서 퀸의 위치를 출력
# print(pos)


def put() -> None:
    """
    각 열에 배치한 퀸의 위치를 출력
    퀸을 더이상 배치할 필요가 없으므로 퀸을 배치한 위치를 출력하는 것.
    출력하는 값은 배열 pos 의 원소값들이다.
    16,777,216 가지 조합을 나열한다.
    맨 처음은 0 0 0 0 0 0 0 0 모든 퀸이 0행에 배치된 것을 나타낸다.
    """

    for i in range(8):
        print(f'{pos[i]:2}', end='')
    print()     # 한줄 띄우기


def set(i: int) -> None:
    """i 열에 퀸을 배치"""
    for j in range(8):  # 0 ~ 7 인덱스
        pos[i] = j   # i열 퀸을 j행에 배치
        if i == 7:  # 모든 열에 배치를 종료(0열 ~ 7열, 총 8열)
            put()
        else:
            set(i + 1)  # 7열이 될때까지 다음 열에 퀸을 배치


set(0)  # 0 열에 퀸을 배치