문제 출처: https://www.acmicpc.net/problem/15654
문제
N개의 자연수와 자연수 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. N개의 자연수는 모두 다른 수이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
    private static int[] arr;
    private static int N, M;
    private static StringBuilder sb = new StringBuilder();
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer tokenizer = new StringTokenizer(reader.readLine());
        N = Integer.parseInt(tokenizer.nextToken());
        M = Integer.parseInt(tokenizer.nextToken());
        arr = new int[N];
        tokenizer = new StringTokenizer(reader.readLine());
        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(tokenizer.nextToken());
        }
        Arrays.sort(arr);
        permutation(new boolean[N], 0, new StringBuilder());
        System.out.println(sb);
    }
    private static void permutation(boolean[] isSelected, int cnt, StringBuilder cur) {
        if (cnt == M) {
            // 다 뽑음
            sb.append(cur).append("\n");
            return;
        }
        for (int i = 0; i < N; i++) {
            if (!isSelected[i]) {
                isSelected[i] = true;
                int temp = cur.length();
                cur.append(arr[i]).append(" ");
                permutation(isSelected, cnt + 1, cur);
                cur.setLength(temp);
                isSelected[i] = false;
            }
        }
    }
}