찬우는 오늘 프로그래밍 기초 강의에서 2차원 배열에 대해 배웠다. 너무 재미있던 찬우는 2차원 배열에다 연산을 진행하기로 결심했다.
아래와 같은 두 가지 종류의 연산이 쿼리로 주어진다.
0 i j k : i번 행의 j번 열의 값을 k로 바꾼다.1 i j : i번 행과 j번 행을 swap한다.swap 이란 i번 행의 모든 원소와 j번 행의 모든 원소를 바꾸는 연산이다.
q개의 쿼리를 수행한 후 바뀐 배열의 최종 결과를 출력하시오.
첫째 줄에 행의 개수 N과 열의 개수 M, 쿼리의 개수 q가 주어진다. (1≤N,M≤3000,1≤q≤106)
2번째 줄부터 N개의 줄에 걸쳐 N행 M열의 2차원 배열이 입력으로 주어진다. 배열의 각 원소의 값은 1 이상 10,000 이하의 정수이다.
이후 q개 줄에 걸쳐 쿼리가 입력으로 주어진다.
쿼리는 0 i j k 혹은 1 i j의 형태로 주어지며, 쿼리의 첫 번째 값이 0이면 첫 번째 쿼리를, 1이면 두 번째 쿼리를 수행한다.
첫 번째 쿼리의 경우 i, j, k의 범위는 (0≤i≤N−1,0≤j≤M−1,1≤k≤10,000)이며 k는 정수이다.
두 번째 쿼리의 경우 i, j의 범위는 (0≤i,j≤N−1)이다.
q개의 쿼리를 전부 수행한 후의 2차원 배열을 출력한다.