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 eps = 1e-9;
int _c;
double ch(const pair<double, double> A, const pair<double, double> B,
          const pair<double, double> C) {
  return (B.first - A.first) * (C.second - A.second) -
         (B.second - A.second) * (C.first - A.first);
}
pair<double, double> mid(const pair<double, double> A,
                         const pair<double, double> B) {
  return make_pair(0.5 * (A.first + B.first), 0.5 * (A.second + B.second));
}
pair<double, double> G_point(const pair<double, double> &A,
                             const pair<double, double> &B,
                             const pair<double, double> &C,
                             const pair<double, double> &D) {
  double f =
      ((C.first - A.first) * D.second - (C.second - A.second) * D.first) /
      (B.first * D.second - B.second * D.first);
  return make_pair(A.first + B.first * f, A.second + B.second * f);
}
pair<double, double> G_mid(const pair<double, double> &A,
                           const pair<double, double> &B) {
  return make_pair(A.first * 2 - B.first, A.second * 2 - B.second);
}
bool G(const pair<double, double> &A, pair<double, double> B,
       pair<double, double> C) {
  double p = ch(A, B, C);
  if (abs(p) < 1e-9) return 0;
  if (p < 0) swap(B, C);
  pair<double, double> b = mid(A, B), c = mid(A, C);
  pair<double, double> _b = make_pair(A.second - B.second, B.first - A.first),
                       _c = make_pair(A.second - C.second, C.first - A.first);
  pair<double, double> X = G_point(b, _b, c, _c);
  pair<double, double> k2 = G_point(A, _c, X, _b), k1 = G_point(A, _b, X, _c);
  k2 = G_mid(k2, X), k1 = G_mid(k1, X);
  pair<double, double> k3 = G_mid(B, k2), k4 = G_mid(C, k1);
  if (ch(k1, k2, k3) > eps && ch(k2, k3, k4) > eps && ch(k3, k4, k1) > eps &&
      ch(k4, k1, k2) > eps) {
    puts("YES");
    printf("%.10lf %.10lf %.10lf %.10lf %.10lf %.10lf %.10lf %.10lf\n",
           k1.first, k1.second, k2.first, k2.second, k3.first, k3.second,
           k4.first, k4.second);
    return 1;
  }
  return 0;
}
int main() {
  pair<double, double> a, b, c;
  for (scanf("%d", &_c); _c--;) {
    scanf("%lf%lf%lf%lf%lf%lf", &a.first, &a.second, &b.first, &b.second,
          &c.first, &c.second);
    if (!G(a, b, c) && !G(b, a, c) && !G(c, a, b)) puts("NO\n");
  }
  return 0;
}