소 줄 세우기

시간 제한1초메모리 제한128 MB

요약
N이 최대 20일 때 1..N의 순열과 사전순 순위 사이를 변환하며, 최대 10000개의 질의를 처리한다.
난이도

보통10점 중 5점

유형
조합론, 수학, 배열
정답자
아직 제출이 없습니다

문제

NN마리의 소(1≤N≤201 \le N \le 20)가 11번부터 NN번까지 번호를 달고 한 줄로 선다. 소들이 설 수 있는 모든 배열은 11부터 NN까지의 순열이며, 모든 순열을 사전순(오름차순)으로 나열했을 때의 위치를 그 배열의 줄 번호라고 한다. 줄 번호는 11부터 시작한다.

요청은 두 종류이다.

  • P: 줄 번호 AA(1≤A≤N!1 \le A \le N!)가 주어지면, 그 줄 번호에 해당하는 소들의 배열을 출력한다.
  • Q: 소들의 배열(즉 11부터 NN까지의 순열)이 주어지면, 그 배열의 줄 번호를 출력한다.

예를 들어 N=5N = 5일 때, 사전순으로 나열한 순열은 다음과 같이 시작한다.

1번째: 1 2 3 4 5
2번째: 1 2 3 5 4
3번째: 1 2 4 3 5
4번째: 1 2 4 5 3
5번째: 1 2 5 3 4

따라서 줄 번호 33에 해당하는 배열은 1 2 4 3 5이고, 배열 1 2 5 3 4의 줄 번호는 55이다.

총 KK개(1≤K≤100001 \le K \le 10000)의 요청이 주어지며, 각 요청에 답해야 한다.

입력

첫째 줄에 두 정수 NN과 KK가 공백으로 구분되어 주어진다.

이어지는 2K2K개의 줄에 KK개의 요청이 한 요청당 두 줄씩 주어진다. 각 요청은 다음과 같다.

  • 첫 줄에는 문자 P 또는 Q 하나가 주어진다.
  • P이면 다음 줄에 정수 AA(1≤A≤N!1 \le A \le N!) 하나가 주어진다. 이 줄 번호에 해당하는 배열을 구해야 한다.
  • Q이면 다음 줄에 서로 다른 NN개의 정수가 주어진다. 이 배열의 줄 번호를 구해야 한다.

출력

각 요청에 대한 답을 입력에 주어진 순서대로 한 줄씩 출력한다.

  • P 요청에는 해당하는 배열을 NN개의 정수로 공백으로 구분하여 출력한다.
  • Q 요청에는 그 배열의 줄 번호를 정수 하나로 출력한다.

예제4

  1. 예제 1

    입력
    5 2
    P
    3
    Q
    1 2 5 3 4
    
    예상 출력
    1 2 4 3 5
    5
    
  2. 예제 2

    입력
    1 2
    P
    1
    Q
    1
    
    예상 출력
    1
    1
    
  3. 예제 3

    입력
    2 4
    P
    1
    P
    2
    Q
    1 2
    Q
    2 1
    
    예상 출력
    1 2
    2 1
    1
    2
    
  4. 예제 4

    입력
    3 6
    P
    1
    P
    2
    P
    3
    P
    4
    P
    5
    P
    6
    
    예상 출력
    1 2 3
    1 3 2
    2 1 3
    2 3 1
    3 1 2
    3 2 1