0 이상 2N−1 이하의 정수가 하나씩, 모두 2N개 있다. 정수를 담는 상자는 2K개이고, 각 상자에는 1번부터 2K번까지 번호가 차례대로 붙어 있다.
이 2N개의 정수를 상자에 모두 나누어 담으려고 한다. 상자마다 들어가는 정수의 개수는 서로 같아야 하므로, 각 상자에는 서로 다른 정수가 2N−K개씩 들어간다. 조건이 하나 더 있다. 한 상자에 들어 있는 수를 모두 이진수로 나타낸 다음 거기에 나오는 1의 개수를 세어 더하면, 그 합이 모든 상자에서 같아야 한다.
조건을 만족하는 분배를 출력하라.
첫째 줄에 자연수 N과 K가 공백을 사이에 두고 주어진다. (1≤K<N≤16)
2K개의 줄을 출력한다. i번째 줄 (1≤i≤2K)에는 i번 상자에 들어 있는 정수 2N−K개를 공백 하나로 구분해 출력한다.
조건을 만족하는 분배는 여러 가지이므로, 이 문제에서는 그중 다음 한 가지만 정답으로 인정한다. P=2N−K−1이라 하자. i번 상자에는 (i−1)P≤x<iP인 정수 x가 들어가고, 그런 x마다 x의 N개 비트를 모두 뒤집은 수 2N−1−x도 함께 들어간다. 한 상자의 수는 오름차순으로 출력한다.
N=2, K=1인 경우를 보자. 1번 상자에는 0과 3이 들어간다. 0은 이진수로 0, 3은 11이므로 1의 개수의 합은 2다. 2번 상자에는 1과 2가 들어간다. 1은 이진수로 1, 2는 10이므로 이쪽도 합이 2다. 두 상자에 같은 수가 겹치지 않고 1의 개수의 합도 2로 같으므로, 이 분배는 조건을 만족한다.