소 줄 세우기
시간 제한1초메모리 제한128 MB
N이 최대 20일 때 1..N의 순열과 사전순 순위 사이를 변환하며, 최대 10000개의 질의를 처리한다.
문제
마리의 소()가 번부터 번까지 번호를 달고 한 줄로 선다. 소들이 설 수 있는 모든 배열은 부터 까지의 순열이며, 모든 순열을 사전순(오름차순)으로 나열했을 때의 위치를 그 배열의 줄 번호라고 한다. 줄 번호는 부터 시작한다.
요청은 두 종류이다.
- P: 줄 번호 ()가 주어지면, 그 줄 번호에 해당하는 소들의 배열을 출력한다.
- Q: 소들의 배열(즉 부터 까지의 순열)이 주어지면, 그 배열의 줄 번호를 출력한다.
예를 들어 일 때, 사전순으로 나열한 순열은 다음과 같이 시작한다.
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
따라서 줄 번호 에 해당하는 배열은 1 2 4 3 5이고, 배열 1 2 5 3 4의 줄 번호는 이다.
총 개()의 요청이 주어지며, 각 요청에 답해야 한다.
입력
첫째 줄에 두 정수 과 가 공백으로 구분되어 주어진다.
이어지는 개의 줄에 개의 요청이 한 요청당 두 줄씩 주어진다. 각 요청은 다음과 같다.
- 첫 줄에는 문자
P또는Q하나가 주어진다. P이면 다음 줄에 정수 () 하나가 주어진다. 이 줄 번호에 해당하는 배열을 구해야 한다.Q이면 다음 줄에 서로 다른 개의 정수가 주어진다. 이 배열의 줄 번호를 구해야 한다.
출력
각 요청에 대한 답을 입력에 주어진 순서대로 한 줄씩 출력한다.
P요청에는 해당하는 배열을 개의 정수로 공백으로 구분하여 출력한다.Q요청에는 그 배열의 줄 번호를 정수 하나로 출력한다.