#include <bits/stdc++.h>
using namespace std;
inline void read(int &x) {
  int v = 0, f = 1;
  char c = getchar();
  while (!isdigit(c) && c != '-') c = getchar();
  if (c == '-')
    f = -1;
  else
    v = (c & 15);
  while (isdigit(c = getchar())) v = (v << 1) + (v << 3) + (c & 15);
  x = v * f;
}
inline void read(long long &x) {
  long long v = 0ll, f = 1ll;
  char c = getchar();
  while (!isdigit(c) && c != '-') c = getchar();
  if (c == '-')
    f = -1;
  else
    v = (c & 15);
  while (isdigit(c = getchar())) v = (v << 1) + (v << 3) + (c & 15);
  x = v * f;
}
inline void readc(char &x) {
  char c;
  while (((c = getchar()) == ' ') || c == '\n')
    ;
  x = c;
}
int t, n, m, i, j, k, l, px[5], py[5], c[5], res, sx[5], sy[5], tx[5], ty[5],
    tt[5];
void check(int d, int x, int y) {
  tx[1] = tx[2] = x;
  tx[3] = tx[4] = x + d;
  ty[1] = ty[3] = y;
  ty[2] = ty[4] = y + d;
  int i, j;
  for (((i)) = (1); ((i)) <= ((4)); ((i))++) c[i] = i;
  do {
    int s = 0;
    for (((i)) = (1); ((i)) <= ((4)); ((i))++) {
      if (px[i] == tx[c[i]]) {
        s = max(s, abs(py[i] - ty[c[i]]));
        continue;
      }
      if (py[i] == ty[c[i]]) {
        s = max(s, abs(px[i] - tx[c[i]]));
        continue;
      }
      s = 0x3bbbbbbb;
      break;
    }
    if (s < res) {
      res = s;
      for (((i)) = (1); ((i)) <= ((4)); ((i))++) {
        sx[i] = tx[c[i]];
        sy[i] = ty[c[i]];
      }
    }
  } while (next_permutation(c + 1, c + 5));
}
int main() {
  read(t);
  while (t--) {
    for (((i)) = (1); ((i)) <= ((4)); ((i))++) {
      read(px[i]);
      read(py[i]);
    }
    res = 0x3bbbbbbb;
    for (((i)) = (1); ((i)) <= ((4)); ((i))++)
      for ((j) = (i + 1); (j) <= (4); (j)++) {
        for (((k)) = (1); ((k)) <= ((4)); ((k))++)
          for (((l)) = (1); ((l)) <= ((4)); ((l))++) {
            int d = abs(px[i] - px[j]);
            check(d, px[k], py[l]);
            check(d, px[k], py[l] - d);
            check(d, px[k] - d, py[l]);
            check(d, px[k] - d, py[l] - d);
            d = abs(py[i] - py[j]);
            check(d, px[k], py[l]);
            check(d, px[k], py[l] - d);
            check(d, px[k] - d, py[l]);
            check(d, px[k] - d, py[l] - d);
          }
      }
    for (((i)) = (1); ((i)) <= ((4)); ((i))++)
      for ((j) = (i + 1); (j) <= (4); (j)++) {
        k = 1;
        while (k == i || k == j) k++;
        l = 4 ^ i ^ j ^ k;
        if (px[i] == px[j] && px[k] == px[l]) {
          int d = abs(px[i] - px[k]);
          int t1 = min(py[i], py[j]), t2 = max(py[i], py[j]) - d;
          int t3 = min(py[k], py[l]), t4 = max(py[k], py[l]) - d;
          tt[1] = t1;
          tt[2] = t2;
          tt[3] = t3;
          tt[4] = t4;
          sort(tt + 1, tt + 5);
          check(d, min(px[i], px[k]), (tt[1] + tt[4]) / 2);
        }
        if (py[i] == py[j] && py[k] == py[l]) {
          int d = abs(py[i] - py[k]);
          int t1 = min(px[i], px[j]), t2 = max(px[i], px[j]) - d;
          int t3 = min(px[k], px[l]), t4 = max(px[k], px[l]) - d;
          tt[1] = t1;
          tt[2] = t2;
          tt[3] = t3;
          tt[4] = t4;
          sort(tt + 1, tt + 5);
          check(d, (tt[1] + tt[4]) / 2, min(py[i], py[k]));
        }
      }
    if (res >= 0x3bbbbbbb) {
      puts("-1");
    } else {
      printf("%d\n", res);
      for (((i)) = (1); ((i)) <= ((4)); ((i))++) {
        printf("%d %d\n", sx[i], sy[i]);
      }
    }
  }
  return 0;
}
