Knight Polygon
Time limit1sMemory limit1024 MB
Given integers p and q, find a simple lattice polygon whose edges are all knight moves and whose area is p/q, or print -1 if none exists.
- Level
Hard8 of 10
- Topics
- Geometry, Math, Implementation
- Solved
- No attempts yet
Problem
Two points and are a knight-move apart if exactly one of the following conditions holds:
- and
- and
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 and . Find a simple lattice polygon whose area is , 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.
Input
The first line contains a single integer (), the number of test cases. Each test case consists of a single line with two integers and (), the numerator and denominator of the desired area.
Output
For each test case, if no solution exists, output a single integer .
Otherwise, the first line should contain a single integer (), the number of vertices in your polygon. The next lines should each contain two integers and (), the vertices of your polygon in either clockwise or counterclockwise order.
Your polygon must be simple, have an area of , and have every pair of adjacent vertices a knight-move apart. If there are multiple solutions, print any of them.
Hint
The polygon described by the output of the first test case, with an area of , is shown below.

The polygon described by the output of the third test case, with an area of , is shown below.

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