#nullable enable #region var _sw = new StreamWriter(Console.OpenStandardOutput()){ AutoFlush = false }; var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion static T[] Range(int n, Func F) => Enumerable.Range(0, n).Select(_ => F()).ToArray(); const int Min = -4; const int Max = -Min; static int D(int x1, int y1, int x2, int y2) => Math.Abs(x1 - x2) + Math.Abs(y1 - y2); static bool Inside(int x, int y, int x1, int y1, int x2, int y2) { if ((x, y) == (x1, y1) || (x, y) == (x2, y2)) return false; var minX = Math.Min(x1, x2); var maxX = Math.Max(x1, x2); var minY = Math.Min(y1, y2); var maxY = Math.Max(y1, y2); return minX <= x && x <= maxX && minY <= y && y <= maxY; } (int, int)[]? Solve() { var afx = I(); var afy = I(); var bfx = I(); var bfy = I(); var atx = I(); var aty = I(); var btx = I(); var bty = I(); if (Math.Abs(afx + afy) % 2 != Math.Abs(bfx + bfy) % 2) return null; var (rx, ry) = (1, 1); if (afx > bfx) { rx = -1; afx *= -1; bfx *= -1; atx *= -1; btx *= -1; } if (afy > bfy) { ry = -1; afy *= -1; aty *= -1; bfy *= -1; bty *= -1; } var (x, y) = (afx, afy); while (x < bfx && D(x, y, afx, afy) != D(x, y, bfx, bfy)) x++; if (x == bfx) while (D(x, y, afx, afy) != D(x, y, bfx, bfy)) y++; while (x >= afx && !Inside(x, y, afx, afy, atx, aty) && !Inside(x, y, bfx, bfy, btx, bty)) (x, y) = (x - 1, y + 1); if (x < afx) return null; var wz = new HashSet<(int, int)>(); if (!Inside(atx, aty, x, y, -201, -201) && !Inside(btx, bty, x, y, -201, -201) && !Inside(atx, aty, x, y, 201, 201) && !Inside(btx, bty, x, y, 201, 201)) { for (var xi = Min; xi < x; xi++) wz.Add((xi, y - 1)); for (var xi = Max; xi > x; xi--) wz.Add((xi, y + 1)); for (var yi = Min; yi < y; yi++) wz.Add((x - 1, yi)); for (var yi = Max; yi > y; yi--) wz.Add((x + 1, yi)); } else { for (var xi = Min; xi < x; xi++) wz.Add((xi, y + 1)); for (var xi = Max; xi > x; xi--) wz.Add((xi, y - 1)); for (var yi = Min; yi < y; yi++) wz.Add((x + 1, yi)); for (var yi = Max; yi > y; yi--) wz.Add((x - 1, yi)); } var res = wz.ToArray(); for (var i = 0; i < res.Length; i++) { var (xi, yi) = res[i]; res[i] = (xi * rx, yi * ry); } return res; } var t = I(); var ans = Range(t, Solve); foreach (var a in ans) { if (a == null) { _sw.WriteLine(-1); continue; } _sw.WriteLine(a.Length); foreach (var (x, y) in a) _sw.WriteLine(x + " " + y); } _sw.Flush();