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 {
  double x, y;
  point(double _x = 0, double _y = 0) {
    x = _x;
    y = _y;
  }
  inline void input() { scanf("%lf%lf", &x, &y); }
  inline void print() { printf("%.9lf %.9lf ", x, y); }
  inline double operator*(const point &a) const { return x * a.y - y * a.x; }
  inline point operator*(const double &a) const { return point(x * a, y * a); }
  inline point operator/(const double &a) const { return point(x / a, y / a); }
  inline point operator+(const point &a) const {
    return point(x + a.x, y + a.y);
  }
  inline point operator-(const point &a) const {
    return point(x - a.x, y - a.y);
  }
  inline double sqr() const { return x * x + y * y; }
};
inline point ex_center(point a, point b, point c) {
  point p = b - a, q = c - a;
  point x(p.x * 2, q.x * 2), y(p.y * 2, q.y * 2), z(p.sqr(), q.sqr());
  return point(z * y, x * z) / (p * q * 4) + a;
}
inline bool convex(point a, point b, point c) {
  return (c - b) * (b - a) <= -1e-6;
}
inline bool chk(point a, point b, point c) {
  point d = b * 2 - c;
  point x = ex_center(a, b, d);
  point y = b * 2 - x, z = c * 2 - y, w = a * 2 - x;
  if (convex(x, y, z) && convex(y, z, w) && convex(z, w, x) &&
      convex(w, x, y)) {
    puts("YES");
    x.print();
    y.print();
    z.print();
    w.print();
    return true;
  }
  return false;
}
int main() {
  int t;
  scanf("%d", &t);
  while (t--) {
    point a, b, c;
    a.input();
    b.input();
    c.input();
    if (fabs((a - b) * (c - b)) <= 1e-6 ||
        (!chk(a, b, c) && !chk(a, c, b) && !chk(b, a, c) && !chk(b, c, a) &&
         !chk(c, a, b) && !chk(c, b, a)))
      puts("NO");
    puts("");
  }
  return 0;
}