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;
complex<double> a, b, c;
int t, x, y;
double E = 1e-8;
double xm(complex<double> a, complex<double> b) { return imag(a * conj(b)); }
complex<double> K(const complex<double>& a, const complex<double>& b,
                  const complex<double>& c) {
  double x1 = real(a), y1 = imag(a), x2 = real(b), y2 = imag(b), x3 = real(c),
         y3 = imag(c);
  double s1 = x1 * x1 + y1 * y1, s2 = x2 * x2 + y2 * y2, s3 = x3 * x3 + y3 * y3;
  double rx = (y1 * (s2 - s3) + y2 * (s3 - s1) + y3 * (s1 - s2)) /
              (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2));
  double ry = (x1 * (s2 - s3) + x2 * (s3 - s1) + x3 * (s1 - s2)) /
              (x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2));
  return complex<double>(-rx / 2, ry / 2);
}
void scan(complex<double>& a) {
  scanf("%d%d", &x, &y), a = complex<double>(x, y);
}
void pt(complex<double>& a) { printf("%.9f %.9f ", real(a), imag(a)); }
int F(complex<double> a, complex<double> b, complex<double> c) {
  complex<double> d = b + b - c;
  complex<double> A = K(a, b, d), B = b + b - A, C = c + c - B, D = a + a - A;
  if (xm(A - D, B - A) < E || xm(B - A, C - B) < E || xm(C - B, D - C) < E ||
      xm(D - C, A - D) < E)
    return 1;
  else
    return puts("YES"), pt(A), pt(B), pt(C), pt(D), 0;
}
int main() {
  for (scanf("%d", &t); t--;) {
    scan(a), scan(b), scan(c);
    if (fabs(xm(b - a, c - a)) < E || F(a, b, c) && F(a, c, b) && F(b, a, c) &&
                                          F(b, c, a) && F(c, a, b) &&
                                          F(c, b, a))
      puts("NO");
    puts("");
  }
  return 0;
}