"""BTVN: đặt n quân Hậu trên m hàng, n cột (m>n), Python3.

python3 g11-cs-hau-chu-nhat.py 4 2
python3 g11-cs-hau-chu-nhat.py 6 4 --chi-dem
"""
import argparse

m = n = 0
A = []
solutionCount = 0
show_results = True


def isOK(i, j):
    for k in range(j):
        if A[k] == i or abs(A[k] - i) == abs(j - k):
            return False
    return True


def showQueen(A):
    for i in range(m):
        print(*[int(A[j] == i) for j in range(n)])


def trynext(k):
    global solutionCount
    if k == n:
        solutionCount += 1
        if show_results:
            print('Phương án', solutionCount, ':', A)
            showQueen(A)
    else:
        for i in range(m):
            if isOK(i, k):
                A[k] = i
                trynext(k + 1)


def main():
    global m, n, A, solutionCount, show_results
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument('m', type=int)
    parser.add_argument('n', type=int)
    parser.add_argument('--chi-dem', action='store_true')
    args = parser.parse_args()
    if not (1 <= args.n < args.m <= 10 and args.n <= 8):
        parser.error('Nhận1<=n<m<=10, n<=8 trong bản thực hành.')
    if (args.m > 7 or args.n > 5) and not args.chi_dem:
        parser.error('Dùng --chi-dem khi m>7 hoặc n>5 để hạn chế đầu ra.')
    m, n = args.m, args.n
    A = [0] * n
    solutionCount = 0
    show_results = not args.chi_dem
    trynext(0)
    print('Tổng số phương án:', solutionCount)


if __name__ == '__main__':
    main()
