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>
const double zero = 1e-12;
struct points {
  double x, y;
  points() {}
  points(double xx, double yy) { x = xx, y = yy; }
  void scan1() { scanf("%lf%lf", &x, &y); }
  void print1() { printf("%.12lf %.12lf", x, y); }
} p1, p2, p3;
inline double cfabs(double x) {
  if (x > zero) return x;
  if (x < -zero) return -x;
  return 0;
}
points operator+(points a, points b) { return points(a.x + b.x, a.y + b.y); }
points operator-(points a, points b) { return points(a.x - b.x, a.y - b.y); }
double operator*(points a, points b) { return a.x * b.y - a.y * b.x; }
points operator*(double l, points a) { return points(a.x * l, a.y * l); }
points rot90(points a) { return points(-a.y, a.x); }
int t;
bool work(points p1, points p2, points p3) {
  points p4 = p2 + 0.5 * (p2 - p1);
  points p5 = p4 + rot90(p2 - p1);
  points p6 = 0.5 * (p2 + p3);
  points p7 = p6 + rot90(p3 - p2);
  double k1 = (p6 - p4) * (p7 - p4);
  double k2 = (p6 - p5) * (p7 - p5);
  points a3 = (k1 / (k1 - k2)) * (p5 - p4) + p4;
  points a4 = p3 + p3 - a3;
  points a2 = p2 + p2 - a3;
  points a1 = p1 + p1 - a2;
  if (((a4 - a1) * (a2 - a1) < -zero && (a1 - a2) * (a3 - a2) < -zero &&
       (a2 - a3) * (a4 - a3) < -zero && (a3 - a4) * (a1 - a4) < -zero) ||
      ((a4 - a1) * (a2 - a1) > zero && (a1 - a2) * (a3 - a2) > zero &&
       (a2 - a3) * (a4 - a3) > zero && (a3 - a4) * (a1 - a4) > zero)) {
    printf("YES\n");
    a1.print1();
    printf(" ");
    a2.print1();
    printf(" ");
    a3.print1();
    printf(" ");
    a4.print1();
    printf("\n");
    return 1;
  } else
    return 0;
}
int main() {
  for (scanf("%d", &t); t--;) {
    p1.scan1();
    p2.scan1();
    p3.scan1();
    if (cfabs((p2 - p1) * (p3 - p1)) < zero) {
      printf("NO\n\n");
      continue;
    }
    if (work(p1, p2, p3)) continue;
    if (work(p1, p3, p2)) continue;
    if (work(p2, p1, p3)) continue;
    if (work(p2, p3, p1)) continue;
    if (work(p3, p1, p2)) continue;
    if (work(p3, p2, p1)) continue;
    printf("NO\n\n");
  }
  return 0;
}