15649
//1부터 n까지 길이가 m인 가능한 모든 수열
#include <bits/stdc++.h>
#define fIO ios_base::sync_with_stdio(false); \
cin.tie(NULL);
using namespace std;
vector<int> answer;
vector<bool> check;
int n, m;
void recursion(int m, int count) // 뽑아야 할 숫자의 개수, 지금까지 뽑은 숫자의 개수(현재 수열의 길이)
{ // 중복을 피하고 나보다 높은 숫자만 고르도록
if(count == m) //m개를 다 선택했다면 출력
{
for(int i = 0; i < m; i++)
{
cout << answer[i] << " ";
}
cout << "\n";
return;
}
for(int i = 1; i <= n; i++)
{
if(!check[i])
{
check[i] = true;
answer.push_back(i); // i번쨰 선택
recursion(m, count + 1); // i로 시작하는 경우들 탐색끝내고 돌아옴
check[i] = false; // 재사용
answer.pop_back(); // i선택 취소
}
}
}
int main()
{
fIO
cin >> n >> m;
check.resize(n+1, false);
recursion(m, 0);
return 0;
}