Problem: You're given the centers of three equal sides of a strictly convex tetragon. Your task is to restore the initial tetragon.

Input

The first input line contains one number T — amount of tests (1 ≤ T ≤ 5·104). Each of the following T lines contains numbers x1, y1, x2, y2, x3, y3 — coordinates of different points that are the centers of three equal sides (non-negative integer numbers, not exceeding 10).

Output

For each test output two lines. If the required tetragon exists, output in the first line YES, in the second line — four pairs of numbers — coordinates of the polygon's vertices in clockwise or counter-clockwise order. Don't forget, please, that the tetragon should be strictly convex, i.e. no 3 of its points lie on one line. Output numbers with 9 characters after a decimal point.

If the required tetragon doen't exist, output NO in the first line, and leave the second line empty.

Examples

Input

3
1 1 2 2 3 3
0 1 1 0 2 2
9 3 7 9 9 8


Output

NO

YES
3.5 1.5 0.5 2.5 -0.5 -0.5 2.5 0.5
NO

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
struct Point {
  int x, y;
} p1, p2, p3;
struct Point2 {
  double x, y;
};
bool Find;
int Ral(Point2 p1, Point2 p2, Point2 p3) {
  double x1 = p2.x - p1.x;
  double y1 = p2.y - p1.y;
  double x2 = p3.x - p2.x;
  double y2 = p3.y - p2.y;
  double c = x1 * y2 - x2 * y1;
  if (-1e-8 < c && c < 1e-8) return 0;
  if (c > 0)
    return 1;
  else
    return -1;
}
void Chk(Point p1, Point p2, Point p3, double x, double y) {
  if (Find) return;
  Point2 a, b, c, d;
  a.x = x;
  a.y = y;
  b.x = 2 * p2.x - a.x;
  b.y = 2 * p2.y - a.y;
  c.x = 2 * p3.x - b.x;
  c.y = 2 * p3.y - b.y;
  d.x = 2 * p1.x - a.x;
  d.y = 2 * p1.y - a.y;
  int t = Ral(a, b, c) + Ral(b, c, d) + Ral(c, d, a) + Ral(d, a, b);
  if (t == 4 || t == -4) {
    Find = true;
    printf("YES\n%.9lf %.9lf %.9lf %.9lf %.9lf %.9lf %.9lf %.9lf\n", a.x, a.y,
           b.x, b.y, c.x, c.y, d.x, d.y);
  }
}
void work(Point p1, Point p2, Point p3) {
  int x1 = p1.x, y1 = p1.y, x2 = p2.x, y2 = p2.y, x3 = 2 * p2.x - p3.x,
      y3 = 2 * p2.y - p3.y;
  int a1 = 2 * (x2 - x1), b1 = 2 * (y2 - y1),
      c1 = x1 * x1 + y1 * y1 - x2 * x2 - y2 * y2;
  int a2 = 2 * (x2 - x3), b2 = 2 * (y2 - y3),
      c2 = x3 * x3 + y3 * y3 - x2 * x2 - y2 * y2;
  if (a1 * b2 == a2 * b1) return;
  double y = -(double)(c1 * a2 - c2 * a1) / (b1 * a2 - a1 * b2);
  double x = -(double)(c1 * b2 - c2 * b1) / (a1 * b2 - b1 * a2);
  Chk(p1, p2, p3, x, y);
}
int main() {
  int T;
  scanf("%d", &T);
  while (T--) {
    scanf("%d%d%d%d%d%d", &p1.x, &p1.y, &p2.x, &p2.y, &p3.x, &p3.y);
    Find = false;
    work(p1, p2, p3);
    if (!Find) work(p2, p3, p1);
    if (!Find) work(p3, p1, p2);
    if (!Find) printf("NO\n\n");
  }
  return 0;
}