바자와 샤자
시간 제한13초메모리 제한230 MB
격자 칸 값을 바꾸는 점 업데이트와 직사각형 안 모든 수의 최대공약수를 구하는 질의를 순서대로 처리합니다.
문제
두 사람 바자(Bazza)와 샤자(Shazza)가 다음과 같은 게임을 한다. 게임판은 개의 행과 개의 열로 이루어진 격자이다. 행에는 위에서부터 의 번호가, 열에는 왼쪽부터 의 번호가 매겨져 있다. 는 행 , 열 에 있는 칸을 뜻한다. 각 칸에는 음이 아닌 정수가 하나씩 적혀 있으며, 게임을 시작할 때 모든 칸의 값은 이다.
게임이 진행되는 동안 바자는 다음 두 가지 작업 중 하나를 할 수 있다.
- 갱신: 칸 에 적힌 정수를 새로운 값으로 바꾼다.
- 질의: 두 꼭짓점 와 를 마주 보는 모퉁이로 하는 직사각형(테두리 포함) 안에 있는 모든 정수의 최대공약수(GCD)를 계산한다.
바자는 이 작업을 최대 번(값을 번 갱신하고 번 질의) 수행한 뒤 게임을 그만둔다. 각 질의에 대한 최대공약수를 순서대로 구하는 것이 목표이다.
예를 들어 , 이고 바자가 다음 순서로 값을 갱신했다고 하자.
- 칸 을 으로 갱신
- 칸 를 로 갱신
- 칸 을 로 갱신

이때 격자는 위 그림과 같다. 이어서 바자가 다음 두 직사각형의 최대공약수를 질의한다.
- 모퉁이 , : 직사각형 안의 세 정수는 이고 최대공약수는 이다.
- 모퉁이 , : 직사각형 안의 네 정수는 이고 최대공약수는 이다.
다시 바자가 다음과 같이 값을 갱신한다.
- 칸 을 으로 갱신
- 칸 을 로 갱신

바뀐 격자는 위 그림과 같다. 바자가 같은 두 직사각형을 다시 질의한다.
- 모퉁이 , : 세 정수는 이고 최대공약수는 이다.
- 모퉁이 , : 네 정수는 이고 최대공약수는 이다.
여기까지 바자는 값을 번 갱신하고 번 질의했다.
입력
첫째 줄에 행의 개수 , 열의 개수 , 작업의 개수 이 공백으로 구분되어 주어진다. ()
다음 개의 줄에는 작업이 일어난 순서대로 한 줄에 하나씩 주어진다. 갱신 작업은 최대 번, 질의 작업은 최대 번 주어진다.
- 갱신 작업은
1 P Q K꼴이며, 칸 의 값을 로 바꾼다. (, , ) - 질의 작업은
2 P Q U V꼴이며, 두 꼭짓점 와 를 모퉁이로 하는 직사각형(테두리 포함) 안에 있는 모든 값의 최대공약수를 구한다. (, )
직사각형 안의 모든 값이 이면 최대공약수는 으로 정의한다.
출력
질의 작업이 주어질 때마다, 해당 직사각형 안에 있는 모든 값의 최대공약수를 한 줄에 하나씩 순서대로 출력한다.