분배

아직 제출이 없습니다시간 제한1초메모리 제한512 MB

문제

0 이상 2N12^N - 1 이하의 정수가 하나씩, 모두 2N2^N개 있다. 정수를 담는 상자는 2K2^K개이고, 각 상자에는 1번부터 2K2^K번까지 번호가 차례대로 붙어 있다.

2N2^N개의 정수를 상자에 모두 나누어 담으려고 한다. 상자마다 들어가는 정수의 개수는 서로 같아야 하므로, 각 상자에는 서로 다른 정수가 2NK2^{N-K}개씩 들어간다. 조건이 하나 더 있다. 한 상자에 들어 있는 수를 모두 이진수로 나타낸 다음 거기에 나오는 1의 개수를 세어 더하면, 그 합이 모든 상자에서 같아야 한다.

조건을 만족하는 분배를 출력하라.

입력

첫째 줄에 자연수 NNKK가 공백을 사이에 두고 주어진다. (1K<N161 \le K < N \le 16)

출력

2K2^K개의 줄을 출력한다. ii번째 줄 (1i2K1 \le i \le 2^K)에는 ii번 상자에 들어 있는 정수 2NK2^{N-K}개를 공백 하나로 구분해 출력한다.

조건을 만족하는 분배는 여러 가지이므로, 이 문제에서는 그중 다음 한 가지만 정답으로 인정한다. P=2NK1P = 2^{N-K-1}이라 하자. ii번 상자에는 (i1)Px<iP(i-1)P \le x < iP인 정수 xx가 들어가고, 그런 xx마다 xxNN개 비트를 모두 뒤집은 수 2N1x2^N - 1 - x도 함께 들어간다. 한 상자의 수는 오름차순으로 출력한다.

힌트

N=2N = 2, K=1K = 1인 경우를 보자. 1번 상자에는 0과 3이 들어간다. 0은 이진수로 0, 3은 11이므로 1의 개수의 합은 2다. 2번 상자에는 1과 2가 들어간다. 1은 이진수로 1, 2는 10이므로 이쪽도 합이 2다. 두 상자에 같은 수가 겹치지 않고 1의 개수의 합도 2로 같으므로, 이 분배는 조건을 만족한다.