import java.io.*;
import java.util.*;
public class Main{
public static int[] arr;
public static boolean[] visit;
public static int[] tmp;
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
arr = new int[M];
visit = new boolean[N];
dfs(N, M, 0);
}
public static void dfs(int N, int M, int depth){
//재귀의 깊이가 M과 같아지면 탐색과정에 담았던 배열을 출력
if(depth == M){
for(int i=0; i<arr.length; i++){
System.out.print(arr[i]+" ");
}
System.out.println();
return;
}
for (int i = 0; i < N; i++) {
//만약 아직 방문하지 않았다면
if(!visit[i]){
//해당 노드를 방문했다는 것으로 변경
visit[i] = true;
//깊이를 index로 해서 i+1값을 저장
arr[depth] = i+1;
//다음 자식 노드방문을 위해 깊이를 하나 늘려주면서 재귀 호출
dfs(N, M, depth+1);
//만약 자식 노드 방문이 끝나고 돌아오면 방문하지 않은 상태로 변경
visit[i] = false;
}
}
}
}