#include<iostream>
#include<algorithm>
using namespace std;
int N, M;
int temp[8]; // 출력용도(N개의 값이 있는 위치를 인덱스로 저장)
int arr[8]; // N개의 값 저장
bool state[8][8]; // N개의 상태(중복 허용)
void func(int k) {
if (k == M) {
for (int i = 0; i < M; i++) {
cout << arr[temp[i]] << ' ';
}
cout << '\n';
return;
}
// N개 수만큼 반복
int st = 0;
if (k > 0) st = temp[k - 1];
for (int i = st; i < N; i++) {
if (state[k][i] == 0) {
temp[k] = i;
state[k][i] = 1;
func(k + 1);
state[k][i] = 0;
}
}
}
int main(void) {
ios_base::sync_with_stdio(0);
cin.tie(0);
// 1.입력
cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> arr[i];
}
sort(arr, arr + N); // 수열은 사전순 정렬이므로 오름차순 정렬
func(0);
return 0;
}
알고리즘&자료구조/백트레킹