배열 돌리기 6

아직 제출이 없습니다시간 제한1초메모리 제한512 MB

문제

크기가 2N×2N인 배열이 있을 때, 배열에 연산을 R번 적용하려고 한다. 연산은 8가지가 있고, 연산에는 단계 ℓ (0 ≤ ℓ < N)이 있다. 단계 ℓ은 배열을 부분 배열로 나눌때 사용하는 값이며, 부분 배열의 크기는 2ℓ×2ℓ가 되어야 한다. 단계는 연산을 수행할때마다 정한다.

다음은 크기가 23×23 배열을 단계 ℓ의 값에 따라 부분 배열로 나눈 것이다. 같은 부분 배열은 같은 색상으로 표시했다.

ℓ = 0ℓ = 1ℓ = 2

1번 연산은 각 부분 배열을 상하 반전시키는 연산이다.

배열ℓ = 1, 1번 연산 적용

2번 연산은 각 부분 배열을 좌우 반전시키는 연산이다.

배열ℓ = 2, 2번 연산 적용

3번 연산은 각 부분 배열을 오른쪽으로 90도 회전시키는 연산이다.

배열ℓ = 1, 3번 연산 적용

4번 연산은 각 부분 배열을 왼쪽으로 90도 회전시키는 연산이다.

배열ℓ = 2, 4번 연산 적용

5, 6, 7, 8번 연산은 부분 배열을 한 칸으로 생각하고 적용시킨다. 즉, 부분 배열의 안에 있는 값은 변하지 않는다.

5번 연산은 배열을 상하 반전시키는 연산이다.

배열ℓ = 2, 5번 연산 적용

6번 연산은 배열을 좌우 반전시키는 연산이다.

배열ℓ = 1, 6번 연산 적용

7번 연산은 오른쪽으로 90도 회전시키는 연산이다.

배열ℓ = 1, 7번 연산 적용

8번 연산은 왼쪽으로 90도 회전시키는 연산이다.

배열ℓ = 2, 8번 연산 적용

입력

첫째 줄에 N, R이 주어진다. 둘째 줄부터 2N개의 줄에 배열의 원소 A[i][j]가 주어진다. i번째 줄의 j번째 정수는 A[i][j]를 의미한다.

다음 R개의 줄에 배열에 적용시켜야 하는 연산이 한 줄에 하나씩 주어진다. 연산은 두 정수 k, ℓ로 이루어져 있고, k번 연산을 단계 ℓ로 적용한다는 의미이다.

출력

입력으로 주어진 배열에 R개의 연산을 순서대로 수행한 결과를 출력한다.

제한

  • 1 ≤ N ≤ 7
  • 1 ≤ R ≤ 1,000
  • 1 ≤ k ≤ 8
  • 0 ≤ ℓ < N
  • -999 ≤ A[i][j] ≤ 999