매직 큐브
시간 제한1초메모리 제한2048 MB
n×n×n 큐브의 작은 큐브에 번호가 매겨져 있고, 슬라이스 회전이 여러 번 주어집니다. 회전 후 질의한 위치에 놓인 큐브의 번호를 구합니다.
문제
크기의 큐브를 들고 있다고 생각해 보자. 큐브는 개의 작은 큐브로 나뉘어 있고, 각 작은 큐브에는 1부터 까지 번호가 붙어 있다. 축 방향은 축이 왼쪽에서 오른쪽, 축이 뒤에서 앞, 축이 아래에서 위이다. 예를 들어 큐브의 번호는 다음과 같다.
아래층 ():
1 2
3 4
위층 ():
5 6
7 8
이 큐브에서 큐브 1은 (1, 1, 1)에 있고, 큐브 2는 (2, 1, 1), 큐브 3은 (1, 2, 1), 큐브 5는 (1, 1, 2)에 있다.
슬라이스 에서 큐브를 , , 축 중 하나로 회전하면, 번째 층과 그 축의 증가 방향으로 이후에 있는 모든 층이 함께 회전한다.

입력
첫 줄에 두 정수 ()과 ()이 주어진다. 은 큐브의 크기이고, 은 연산의 개수이다.
다음 개의 줄에는 아래 중 하나의 형식으로 연산이 주어진다.
x, , : 슬라이스 부터 까지를 축을 기준으로 반시계 방향으로 도 회전한다.y, , : 슬라이스 부터 까지를 축을 기준으로 반시계 방향으로 도 회전한다.z, , : 슬라이스 부터 까지를 축을 기준으로 반시계 방향으로 도 회전한다.q x y z: 질의 연산이다. 위치 에 있는 큐브의 번호를 출력한다.
처음 세 연산에서는 이고 이 보장된다. 질의에서 는 질의할 위치이며 이다. 질의는 적어도 하나 주어진다. 큐브는 연산 사이에 초기화되지 않으며, 회전은 누적된다.
출력
각 질의 연산마다 주어진 위치에 있는 큐브의 번호를 한 줄에 하나씩 출력한다.