행렬 시프트

중첩 반복이 있는 압축된 시프트 명령 문자열을 해석해 N×N 행렬의 행과 열 회전을 적용한 뒤 결과를 출력한다.

보통6시뮬레이션구현배열문자열아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

N×NN \times N 행렬 AA가 주어진다. 처음 값은 Ai,j=(i1)N+jA_{i,j} = (i-1)N + j이고, Ai,jA_{i,j}ii번째 행 jj번째 열의 원소다. 행 번호와 열 번호는 1부터 센다.

이 행렬에는 네 가지 이동 연산을 적용한다.

  • ii에 대한 왼쪽 이동은 ii번째 행을 왼쪽으로 한 칸 회전한다. 2kN2 \le k \le Nkk에 대해 이전 Ai,kA_{i,k}가 새 Ai,k1A_{i,k-1}이 되고, 이전 Ai,1A_{i,1}은 새 Ai,NA_{i,N}이 된다.
  • ii에 대한 오른쪽 이동은 ii번째 행을 오른쪽으로 한 칸 회전한다. 1kN11 \le k \le N-1kk에 대해 이전 Ai,kA_{i,k}가 새 Ai,k+1A_{i,k+1}이 되고, 이전 Ai,NA_{i,N}은 새 Ai,1A_{i,1}이 된다.
  • jj에 대한 위쪽 이동은 jj번째 열을 위로 한 칸 회전한다. 2kN2 \le k \le Nkk에 대해 이전 Ak,jA_{k,j}가 새 Ak1,jA_{k-1,j}가 되고, 이전 A1,jA_{1,j}는 새 AN,jA_{N,j}가 된다.
  • jj에 대한 아래쪽 이동은 jj번째 열을 아래로 한 칸 회전한다. 1kN11 \le k \le N-1kk에 대해 이전 Ak,jA_{k,j}가 새 Ak+1,jA_{k+1,j}가 되고, 이전 AN,jA_{N,j}는 새 A1,jA_{1,j}가 된다.

연산 순서는 문자열 하나로 주어지며, 문자열의 왼쪽부터 오른쪽으로 차례대로 적용한다. 왼쪽, 오른쪽, 위쪽, 아래쪽 이동은 각각 문자 'L', 'R', 'U', 'D'로 쓰고, 문자 바로 뒤에 오는 수가 이동할 행이나 열의 번호다. 예를 들어 "R25"는 25에 대한 오른쪽 이동이다. 이 표기법은 반복도 지원한다. 괄호로 묶인 연산 순서 뒤에 수 mm이 오면 그 순서를 정확히 mm번 반복한다. 예를 들어 "(L1R2)10"은 1에 대한 왼쪽 이동과 2에 대한 오른쪽 이동을 이 순서대로 묶어 10번 반복한다.

주어지는 연산 순서는 모두 다음 문법을 따른다.

<sequence> := <sequence><repetition> | <sequence><operation> | <repetition> | <operation>
<repetition> := '('<sequence>')'<number>
<operation> := <shift><number>
<shift> := 'L' | 'R' | 'U' | 'D'
<number> := <nonzero_digit> | <number><digit>
<digit> := '0' | <nonzero_digit>
<nonzero_digit> := '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

NN과 연산 순서가 주어지면, 연산을 모두 적용한 뒤의 N×NN \times N 행렬을 구하는 프로그램을 작성하시오.

입력

입력은 테스트 케이스 하나로 이루어지며 형식은 다음과 같다.

N L
S

첫째 줄에 두 정수 NNLL이 주어진다. NN (1N1001 \le N \le 100)은 행렬의 크기이고, LL (2L10002 \le L \le 1000)은 둘째 줄에 오는 문자열의 길이다. 둘째 줄에 연산 순서 SS가 주어지고, SS는 위 문법을 따른다. SS에 나오는 행 번호와 열 번호는 모두 1 이상 NN 이하이며, 각 반복 횟수는 1 이상 10910^9 이하다.

출력

NN개의 줄을 출력한다. ii번째 줄에는 연산을 모두 적용한 뒤 AAii번째 행에 있는 NN개의 정수를 공백 하나로 구분해 출력한다.