import sys
input = sys.stdin.readline
N, M = map(int, input().split())
path = []
def orders(n, m, start):
if len(path) == m:
print(*path)
return
for i in range(start, n+1):
if i not in path:
path.append(i)
orders(n, m, i)
path.pop()
orders(N, M, 1)
M, N 최대 8인 문제라 이렇게 푸는 게 하단 코드처럼 path와 used 따로 관리하는 것보다 더 빠를 줄 알았는데 아니더라. 아주 근소한 차이로 하단 코드가 더 빨랐다.
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
used = [0] * (N+1)
path = []
def orders(n, m, start):
if len(path) == m:
print(*path)
return
for i in range(start, n+1):
if not used[i]:
used[i] = 1
path.append(i)
orders(n, m, i)
path.pop()
used[i] = 0
orders(N, M, 1)