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;
const double ep = 1e-12;
struct pnt {
  double x, y;
  pnt(double x = 0, double y = 0) : x(x), y(y) {}
  pnt operator+(const pnt &b) { return pnt(x + b.x, y + b.y); }
  pnt operator-(const pnt &b) { return pnt(x - b.x, y - b.y); }
  pnt operator*(const double &b) { return pnt(x * b, y * b); }
  double operator^(const pnt &b) { return x * b.y - b.x * y; }
  bool operator<(const pnt &b) const {
    return abs(x - b.x) > ep ? x < b.x : y < b.y;
  }
  pnt rot() { return pnt(-y, x); }
  void input() { scanf("%lf %lf", &x, &y); }
  void print() { printf("%.12lf %.12lf ", x, y); }
} p[3];
bool get_pnt(pnt a, pnt b, pnt c, pnt d, pnt &rlt) {
  double s = a - b ^ c - d;
  if (abs(s) < ep) return 0;
  double x = (a - d ^ c - d) / s;
  rlt = a * (1 - x) + b * x;
  return 1;
}
int main() {
  int T;
  for (scanf("%d", &T); T--;) {
    for (int i = 0; i < 3; i++) p[i].input();
    sort(p, p + 3);
    bool flag = 0;
    do {
      pnt A = (p[0] + p[1]) * 0.5;
      pnt B = (p[1] + p[2]) * 0.5;
      pnt C;
      bool f = get_pnt(A, A + (p[1] - A).rot(), B, B + (p[1] - B).rot(), C);
      if (!f) continue;
      pnt a, b, c, d;
      f = get_pnt(p[1] * 2 - C, p[1] * 2 - B, A, C, a);
      if (!f) continue;
      b = p[1] * 2 - a;
      c = p[2] * 2 - b;
      d = p[0] * 2 - a;
      double s = abs(a - c ^ b - d);
      if (s < abs(a - c ^ b - c) + ep) continue;
      if (s < abs(a - d ^ b - d) + ep) continue;
      if (s < abs(a - d ^ c - d) + ep) continue;
      if (s < abs(b - d ^ c - d) + ep) continue;
      flag = 1;
      puts("YES");
      a.print(), b.print(), c.print(), d.print();
      break;
    } while (next_permutation(p, p + 3));
    if (!flag) puts("NO");
    puts("");
  }
  return 0;
}