만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

배찬우는 배열을 좋아해

시간 제한3초메모리 제한512 MB

요약
N행 M열 배열에 질의 q개를 적용합니다. 질의는 한 칸의 값을 바꾸거나 두 행을 맞바꿉니다. 최종 배열을 출력합니다.
난이도

쉬움10점 중 3점

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

문제

찬우는 오늘 프로그래밍 기초 강의에서 2차원 배열을 배웠다. 재미를 느낀 찬우는 이 2차원 배열에 연산을 적용하기로 했다.

두 종류의 연산이 쿼리로 주어진다.

  • 0 i j k: ii번 행의 jj번 열 값을 kk로 바꾼다.
  • 1 i j: ii번 행과 jj번 행을 swap한다.

swap은 ii번 행의 모든 원소와 jj번 행의 대응하는 원소를 서로 바꾸는 연산이다.

qq개의 쿼리를 모두 수행한 후, 바뀐 배열의 최종 결과를 출력하시오.

입력

첫째 줄에 행의 개수 NN, 열의 개수 MM, 쿼리의 개수 qq가 주어진다. (1≤N,M≤3000,1≤q≤106)(1 \le N, M \le 3000, 1 \le q \le 10^6)

둘째 줄부터 NN개의 줄에 NN행 MM열의 2차원 배열이 주어진다. 배열의 각 원소는 1 이상 10 00010\,000 이하의 정수이다.

이후 qq개의 줄에 쿼리가 주어진다. 쿼리는 0 i j k 또는 1 i j 형태이며, 첫 번째 값이 0이면 첫 번째 연산을, 1이면 두 번째 연산을 수행한다.

첫 번째 연산에서 ii, jj, kk는 0≤i≤N−10 \le i \le N-1, 0≤j≤M−10 \le j \le M-1, 1≤k≤10 0001 \le k \le 10\,000을 만족하며, kk는 정수이다.

두 번째 연산에서 ii, jj는 0≤i,j≤N−10 \le i, j \le N-1을 만족한다.

출력

qq개의 쿼리를 모두 수행한 후의 2차원 배열을 출력한다.

예제1

  1. 예제 1

    입력
    4 3 4
    10 3 8
    2 10 4
    1 8 4
    1 4 2
    1 2 2
    0 1 0 9
    1 2 1
    1 3 0
    
    예상 출력
    1 4 2
    1 8 4
    9 10 4
    10 3 8