낙서

시간 제한1초메모리 제한128 MB

요약
대각선 이동이 직사각형의 변과 모서리에서 반사되며 시작 칸으로 처음 돌아올 때까지 지나간 서로 다른 칸의 수를 구한다.
난이도

보통10점 중 7점

유형
수학, 정수론, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

모눈종이 위에 낙서를 합니다. 낙서는 가장 왼쪽 위 칸인 (0, 0)에서 시작하며, 어떤 칸을 방문할 때마다 그 칸에 X를 적습니다.

(0, 0)에 X를 적은 뒤에는 오른쪽 아래 대각선 방향으로 한 칸 이동하여 (1, 1)로 가서 다시 X를 적습니다. 이렇게 대각선으로 계속 이동하다가 종이의 경계에 닿으면, 닿은 쪽(가로 또는 세로)의 진행 방향만 반대로 바꾸어 계속 나아갑니다. 가로와 세로 경계가 만나는 모퉁이에 닿으면 두 방향이 모두 반대로 바뀝니다. 이 과정을 다시 시작점 (0, 0)으로 처음 되돌아올 때까지 반복합니다.

종이의 크기가 주어졌을 때, X가 적힌 서로 다른 칸의 개수를 구하는 프로그램을 작성하세요.

입력

첫째 줄에 테스트 케이스의 개수 nn (1≤n≤40001 \le n \le 4000)이 주어집니다.

이어지는 각 줄에는 모눈종이의 높이와 너비(칸의 개수)를 나타내는 두 자연수가 공백으로 구분되어 주어집니다. 두 값은 모두 22 이상 2000020000 이하입니다.

출력

각 테스트 케이스마다 X가 적힌 서로 다른 칸의 개수를 한 줄에 하나씩 출력합니다.

예제1

  1. 예제 1

    입력
    3
    11 3
    5 7
    5 8
    
    예상 출력
    11
    12
    20