<aside> 💛

백준 1722번

</aside>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Practice81 {

	public static void main(String[] args) throws IOException{
		int N, Q;
		long F[] = new long[21];
		int S[] = new int[21];
		boolean visited[] = new boolean[21];
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(bf.readLine());
		N = Integer.parseInt(st.nextToken());
		st = new StringTokenizer(bf.readLine());
		Q = Integer.parseInt(st.nextToken());
		
		F[0] = 1;
		for(int i = 1; i <= N; i++) {
			F[i] = F[i - 1] * i;
		}
		
		int cnt;
		if(Q == 1) {
			long K = Long.parseLong(st.nextToken());
			for(int i = 1; i <= N; i++) {
				cnt = 1;
				for(int j = 1; j <= N; j++) {
					if(visited[j])
						continue;
					if(K <= cnt * F[N - i]) {
						K -= ((cnt - 1) * F[N - i]);
						S[i] = j;
						visited[j] = true;
						break;
					}
					cnt++;
				}
			}
			for(int i = 1; i <= N; i++) {
				System.out.print(S[i] + " ");
			}
		}else {
			long K = 1;
			for(int i = 1; i <= N; i++) {
				S[i] = Integer.parseInt(st.nextToken());
				long cnt2 = 0;
				for(int j = 1; j < S[i] ; j++) {
					if(visited[j] == false) {
						cnt2++;
					}
				}
				K += cnt2 * F[N - i];
				visited[S[i]] =true;	
			}
			System.out.println(K);
		}
	}

}