배열 분할

아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

2차원 배열을 분할 정복으로 처리하면 배열은 점점 작은 조각으로 쪼개진다. 이 문제는 마지막에 남는 조각의 모양과 개수를 센다.

크기가 N×MN \times M인 배열은 크기가 최대한 비슷한 네 개의 배열로 나뉜다. 정확히는 N/2×M/2\lfloor N/2 \rfloor \times \lfloor M/2 \rfloor, N/2×M/2\lceil N/2 \rceil \times \lfloor M/2 \rfloor, N/2×M/2\lfloor N/2 \rfloor \times \lceil M/2 \rceil, N/2×M/2\lceil N/2 \rceil \times \lceil M/2 \rceil 크기의 네 배열이다. x\lfloor x \rfloorxx의 소수점 이하를 버린 값이고, x\lceil x \rceil는 올린 값이다. 예를 들어 4×54 \times 5 배열은 2×22 \times 2 배열 두 개와 2×32 \times 3 배열 두 개로 나뉘고, 5×55 \times 5 배열은 2×22 \times 2, 3×23 \times 2, 2×32 \times 3, 3×33 \times 3 배열 네 개로 나뉜다.

지금 보고 있는 배열의 두 변 중 하나라도 길이가 1이면 그 배열은 더 나누지 않고 그대로 남긴다. 그래서 분할을 끝까지 진행하면 처음 배열은 여러 개의 1×K1 \times K 배열로 남는다. K×1K \times 1 배열은 돌리면 1×K1 \times K 배열이므로 같은 종류로 센다.

NNMM이 주어진다. 분할을 모두 끝낸 뒤 남는 1×K1 \times K 배열이 몇 종류인지, 그리고 각 종류의 KK와 그 개수가 얼마인지 구하라.

입력

첫 줄에 테스트 케이스의 수 TT (1T100001 \le T \le 10\,000)가 주어진다.

이어지는 TT개의 줄에 각각 배열의 처음 크기 NNMM (1N,M10181 \le N, M \le 10^{18})이 공백 하나로 구분되어 주어진다.

출력

각 테스트 케이스마다 먼저 분할이 끝난 뒤 남는 1×K1 \times K 배열의 종류 수 CC를 한 줄에 출력한다.

이어지는 CC개의 줄에 각 종류의 KK와 그 종류의 개수를 공백 하나로 구분해 출력한다. KK는 오름차순으로 출력한다. 개수는 매우 커질 수 있으므로 1,234,567,891로 나눈 나머지를 출력한다. 나머지가 0이 되는 종류도 CC에 포함하고 그대로 출력한다.

테스트 케이스 사이에 빈 줄을 넣지 않는다.