로테이트

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

요약
K개씩 나눈 각 구간을 회전시키는 연산과 전체를 회전시키는 연산의 역순을 적용해 초기 수열을 복원한다.
난이도

보통10점 중 4점

유형
구현, 시뮬레이션, 배열
정답자
아직 제출이 없습니다

문제

상근이와 정인이가 '로테이트'라는 새로운 게임을 만들었다.

먼저 정인이는 길이가 NN인 수열을 하나 생각한다. 그런 다음 이 수열을 각각 KK개의 수가 들어가는 섹션으로 나눈다(KK는 NN의 약수이다). 첫 번째 섹션에는 수열의 처음 KK개의 수가 들어가고, 두 번째 섹션에는 그 다음 KK개의 수가 들어간다. 나머지 섹션도 같은 방식으로 채운다.

정인이는 이 수열에 다음 두 가지 연산을 적용할 수 있다.

  1. 각 섹션을 왼쪽 또는 오른쪽으로 XX칸만큼 회전시킨다.
  2. 수열 전체를 왼쪽 또는 오른쪽으로 XX칸만큼 회전시킨다.

2번 연산은 수열 전체를 회전시키므로, 각 섹션에 들어 있는 수가 바뀔 수도 있다.

정인이는 자신이 생각한 수열에 위 연산들을 순서대로 적용한 뒤, 최종 수열을 상근이에게 보여 준다. 최종 수열과 정인이가 적용한 연산이 순서대로 주어졌을 때, 정인이가 처음에 생각한 수열을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 수열의 길이 NN, 섹션의 크기 KK, 정인이가 적용한 연산의 수 QQ가 주어진다 (1≤N,K,Q≤100,0001 \le N, K, Q \le 100{,}000, KK는 NN의 약수).

다음 QQ개의 줄에는 정인이가 적용한 연산이 순서대로 주어진다. 각 줄에는 연산의 종류를 나타내는 정수 AA (1≤A≤21 \le A \le 2)와 회전량을 나타내는 정수 XX (−100,000≤X≤100,000-100{,}000 \le X \le 100{,}000)가 주어진다. XX가 음수이면 왼쪽 방향으로, 양수이면 오른쪽 방향으로 회전한다.

마지막 줄에는 모든 연산을 적용한 뒤의 최종 수열이 공백으로 구분되어 주어진다.

출력

첫째 줄에 정인이가 처음에 생각한 수열을 공백으로 구분하여 출력한다.

예제3

  1. 예제 1

    입력
    4 2 2
    2 2
    1 1
    3 2 1 0
    
    예상 출력
    0 1 2 3
    
  2. 예제 2

    입력
    8 4 4
    1 3
    1 15
    1 -5
    2 -1
    6 10 14 19 2 16 17 1
    
    예상 출력
    6 10 14 1 2 16 17 19
    
  3. 예제 3

    입력
    9 3 5
    1 1
    2 -8
    2 9
    1 1
    2 -4
    3 1 8 7 4 5 2 6 9
    
    예상 출력
    5 3 6 9 7 1 8 2 4