import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int number[];
static boolean visit[];
static int result[];
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(st.nextToken());
number = new int[N];
visit = new boolean[N];
result = new int[N];
for(int i=0; i<N; i++) {
number[i] = i+1;
}
dfs(0);
}
public static void dfs(int depth) {
if(depth==N) {
for(int i=0; i<N; i++) {
System.out.print(result[i] + " ");
}
System.out.println();
return;
}
for(int i=0; i<N; i++) {
if(!visit[i]) {
visit[i] = true;
result[depth] = number[i];
dfs(depth+1);
visit[i] = false;
}
}
}
}
참고 블로그 : https://velog.io/@gangintheremark/DFS-%EC%A4%91%EB%B3%B5-%EC%97%86%EB%8A%94-%EC%88%9C%EC%97%B4-%EA%B5%AC%ED%95%98%EA%B8%B0