Knight Polygon

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

요약
각 분수 p/q에 대해 인접한 꼭짓점이 나이트 이동 관계이고 넓이가 정확히 p/q인 단순 격자 다각형을 출력하거나, 존재하지 않으면 -1을 출력한다.
난이도

어려움10점 중 9점

유형
기하, 수학, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

Two points (x_1,y_1)(x\_1, y\_1) and (x_2,y_2)(x\_2, y\_2) are considered to be a knight-move apart if exactly one of the following conditions holds:

  • ∣x_1−x_2∣=2|x\_1 - x\_2| = 2 and ∣y_1−y_2∣=1|y\_1 - y\_2| = 1
  • ∣x_1−x_2∣=1|x\_1 - x\_2| = 1 and ∣y_1−y_2∣=2|y\_1 - y\_2| = 2

Notice that this definition closely matches how a knight moves in chess. For example, here are three pairs of points that are a knight-move apart:

You are given integers pp and qq. Find a simple lattice polygon whose area is p/qp/q, where each pair of adjacent vertices is a knight-move apart, or state that no such polygon exists.

A polygon is simple if there are exactly two edges touching each vertex, and no two edges of the polygon intersect except at its vertices. A polygon is a lattice polygon if the coordinates of each of its vertices are integers.

입력

The first line of the input contains a single integer tt (1≤t≤101 \le t \le 10) --- the number of test cases. The description of the test cases follows.

Each test case consists of a single line containing two integers pp and qq (1≤p,q≤1041 \le p, q \le 10^4) --- the numerator and denominator of the desired area, respectively.

출력

For each test case, if there is no solution, output a single integer −1-1.

Otherwise, the first line of output for each test case should contain a single integer nn (3≤n≤1053 \le n \le 10^5) --- the number of vertices in your polygon.

The next nn lines of output should each contain two integers xx and yy (−109≤x,y≤109-10^9 \le x, y \le 10^9) --- the vertices of your polygon in either clockwise or counterclockwise order.

Your polygon should be simple, have an area of pq\frac{p}{q}, and each pair of adjacent vertices should be a knight-move apart.

If there are multiple solutions, print any.

힌트

Here is the polygon described by the output of the first test case, with an area of 183=6\frac{18}{3} = 6:

Here is the polygon described by the output of the third test case, with an area of 81=8\frac{8}{1} = 8:

For the second and fourth test cases, we can show that no valid polygon exists.

예제1

  1. 예제 1

    입력
    4
    18 3
    1 2
    8 1
    20 3
    
    예상 출력
    6
    0 0
    2 1
    1 3
    0 1
    -1 3
    -2 1
    -1
    14
    -1 -2
    -3 -1
    -2 1
    -1 3
    0 1
    1 3
    2 1
    3 -1
    1 -2
    2 0
    1 2
    0 0
    -1 2
    -2 0
    -1