#include <bits/stdc++.h>
using namespace std;
pair<pair<long long, long long>, int> p[4];
pair<pair<long long, long long>, int> p1[4];
pair<pair<long long, long long>, int> p2[4];
long long calc(int msk) {
  if (msk == 0) {
    if (p[0].first.second != p[1].first.second ||
        p[2].first.second != p[2].first.second ||
        p[0].first.second - p[3].first.second !=
            p[1].first.second - p[2].first.second ||
        p[0].first.second - p[3].first.second <= 0 ||
        p[0].first.first > p[1].first.first ||
        p[2].first.first < p[3].first.first)
      return 1e18;
    long long d = p[0].first.second - p[3].first.second;
    for (int f = 0; f < 4; f++) p1[f] = p[f];
    p1[1].first.first -= d;
    p1[2].first.first -= d;
    p1[2].first.second += d;
    p1[3].first.second += d;
    long long maxi = p1[0].first.first;
    long long mini = p1[0].first.first;
    for (int f = 0; f < 4; f++) {
      mini = min(mini, p1[f].first.first);
      maxi = max(maxi, p1[f].first.first);
    }
    p1[0].first.first = (maxi + mini) / 2;
    p1[1].first = p1[0].first;
    p1[1].first.first += d;
    p1[2].first = p1[0].first;
    p1[2].first.first += d;
    p1[2].first.second -= d;
    p1[3].first = p1[0].first;
    p1[3].first.second -= d;
    long long ret = 0;
    for (int f = 0; f < 4; f++)
      ret = max(ret, abs(p[f].first.first - p1[f].first.first) +
                         abs(p[f].first.second - p1[f].first.second));
    return ret;
  }
  if (msk == 15) {
    for (int f = 0; f < 4; f++) swap(p[f].first.first, p[f].first.second);
    if (p[0].first.second != p[1].first.second ||
        p[2].first.second != p[2].first.second ||
        p[0].first.second - p[3].first.second !=
            p[1].first.second - p[2].first.second ||
        p[0].first.second - p[3].first.second <= 0 ||
        p[0].first.first > p[1].first.first ||
        p[2].first.first < p[3].first.first) {
      for (int f = 0; f < 4; f++) swap(p[f].first.first, p[f].first.second);
      return 1e18;
    }
    long long d = p[0].first.second - p[3].first.second;
    for (int f = 0; f < 4; f++) p1[f] = p[f];
    p1[1].first.first -= d;
    p1[2].first.first -= d;
    p1[2].first.second += d;
    p1[3].first.second += d;
    long long maxi = p1[0].first.first;
    long long mini = p1[0].first.first;
    for (int f = 0; f < 4; f++) {
      mini = min(mini, p1[f].first.first);
      maxi = max(maxi, p1[f].first.first);
    }
    p1[0].first.first = (maxi + mini) / 2;
    p1[1].first = p1[0].first;
    p1[1].first.first += d;
    p1[2].first = p1[0].first;
    p1[2].first.first += d;
    p1[2].first.second -= d;
    p1[3].first = p1[0].first;
    p1[3].first.second -= d;
    for (int f = 0; f < 4; f++) swap(p[f].first.first, p[f].first.second);
    for (int f = 0; f < 4; f++) swap(p1[f].first.first, p1[f].first.second);
    long long ret = 0;
    for (int f = 0; f < 4; f++)
      ret = max(ret, abs(p[f].first.first - p1[f].first.first) +
                         abs(p[f].first.second - p1[f].first.second));
    return ret;
  }
  bool a[4] = {0};
  for (int f = 0; f < 4; f++) p1[f] = p[f];
  for (int f = 0; f < 4; f++) {
    if (((msk & (1 << f)) == 0) != ((msk & (1 << ((f + 1) % 4))) == 0)) {
      if (f == 0 || f == 2) {
        if ((msk & (1 << f)))
          p1[f].first.second = p1[(f + 1) % 4].first.second, a[f] = 1;
        else
          p1[(f + 1) % 4].first.second = p1[f].first.second, a[(f + 1) % 4] = 1;
      } else {
        if (!(msk & (1 << f)))
          p1[f].first.first = p1[(f + 1) % 4].first.first, a[f] = 1;
        else
          p1[(f + 1) % 4].first.first = p1[f].first.first, a[(f + 1) % 4] = 1;
      }
    }
  }
  if (a[0] && a[1]) {
    if (p1[1].first.second != p1[0].first.second ||
        p1[1].first.first - p1[0].first.first <= 0)
      return 1e18;
    long long d = p1[1].first.first - p1[0].first.first;
    p1[2].first = p1[1].first;
    p1[2].first.second -= d;
    p1[3].first = p1[2].first;
    p1[3].first.first -= d;
    long long ret = 0;
    for (int f = 0; f < 4; f++) {
      if ((msk & (1 << f)) && p[f].first.first != p1[f].first.first)
        return 1e18;
      if (!(msk & (1 << f)) && p[f].first.second != p1[f].first.second)
        return 1e18;
    }
    for (int f = 0; f < 4; f++)
      ret = max(ret, abs(p[f].first.first - p1[f].first.first) +
                         abs(p[f].first.second - p1[f].first.second));
    return ret;
  }
  if (a[0] && a[2]) {
    if (p1[2].first.second - p1[0].first.second !=
            -p1[2].first.first + p1[0].first.first ||
        p1[2].first.first - p1[0].first.first <= 0)
      return 1e18;
    long long d = p1[2].first.first - p1[0].first.first;
    p1[1].first = p1[0].first;
    p1[1].first.first += d;
    p1[2].first = p1[1].first;
    p1[2].first.second -= d;
    p1[3].first = p1[2].first;
    p1[3].first.first -= d;
    long long ret = 0;
    for (int f = 0; f < 4; f++) {
      if ((msk & (1 << f)) && p[f].first.first != p1[f].first.first)
        return 1e18;
      if (!(msk & (1 << f)) && p[f].first.second != p1[f].first.second)
        return 1e18;
    }
    for (int f = 0; f < 4; f++)
      ret = max(ret, abs(p[f].first.first - p1[f].first.first) +
                         abs(p[f].first.second - p1[f].first.second));
    return ret;
  }
  if (a[0] && a[3]) {
    if (p1[3].first.first != p1[0].first.first ||
        -p1[3].first.second + p1[0].first.second <= 0)
      return 1e18;
    long long d = -p1[3].first.second + p1[0].first.second;
    p1[1].first = p1[0].first;
    p1[1].first.first += d;
    p1[2].first = p1[1].first;
    p1[2].first.second -= d;
    p1[3].first = p1[2].first;
    p1[3].first.first -= d;
    long long ret = 0;
    for (int f = 0; f < 4; f++) {
      if ((msk & (1 << f)) && p[f].first.first != p1[f].first.first)
        return 1e18;
      if (!(msk & (1 << f)) && p[f].first.second != p1[f].first.second)
        return 1e18;
    }
    for (int f = 0; f < 4; f++)
      ret = max(ret, abs(p[f].first.first - p1[f].first.first) +
                         abs(p[f].first.second - p1[f].first.second));
    return ret;
  }
  if (a[1] && a[2]) {
    if (p1[1].first.first != p1[2].first.first ||
        p1[1].first.second - p1[2].first.second <= 0)
      return 1e18;
    long long d = p1[1].first.second - p1[2].first.second;
    p1[0].first = p1[1].first;
    p1[0].first.first -= d;
    p1[2].first = p1[1].first;
    p1[2].first.second -= d;
    p1[3].first = p1[2].first;
    p1[3].first.first -= d;
    long long ret = 0;
    for (int f = 0; f < 4; f++) {
      if ((msk & (1 << f)) && p[f].first.first != p1[f].first.first)
        return 1e18;
      if (!(msk & (1 << f)) && p[f].first.second != p1[f].first.second)
        return 1e18;
    }
    for (int f = 0; f < 4; f++)
      ret = max(ret, abs(p[f].first.first - p1[f].first.first) +
                         abs(p[f].first.second - p1[f].first.second));
    return ret;
  }
  if (a[1] && a[3]) {
    if (p1[1].first.second - p1[3].first.second !=
            p1[1].first.first - p1[3].first.first ||
        p1[1].first.first - p1[3].first.first <= 0)
      return 1e18;
    long long d = p1[1].first.first - p1[3].first.first;
    p1[0].first = p1[1].first;
    p1[0].first.first -= d;
    p1[2].first = p1[1].first;
    p1[2].first.second -= d;
    p1[3].first = p1[2].first;
    p1[3].first.first -= d;
    long long ret = 0;
    for (int f = 0; f < 4; f++) {
      if ((msk & (1 << f)) && p[f].first.first != p1[f].first.first)
        return 1e18;
      if (!(msk & (1 << f)) && p[f].first.second != p1[f].first.second)
        return 1e18;
    }
    for (int f = 0; f < 4; f++)
      ret = max(ret, abs(p[f].first.first - p1[f].first.first) +
                         abs(p[f].first.second - p1[f].first.second));
    return ret;
  }
  if (a[2] && a[3]) {
    if (p1[2].first.second != p1[3].first.second ||
        p1[2].first.first - p1[3].first.first <= 0)
      return 1e18;
    long long d = p1[2].first.first - p1[3].first.first;
    p1[0].first = p1[3].first;
    p1[0].first.second += d;
    p1[1].first = p1[2].first;
    p1[1].first.second += d;
    p1[2].first = p1[1].first;
    p1[2].first.second -= d;
    p1[3].first = p1[2].first;
    p1[3].first.first -= d;
    long long ret = 0;
    for (int f = 0; f < 4; f++) {
      if ((msk & (1 << f)) && p[f].first.first != p1[f].first.first)
        return 1e18;
      if (!(msk & (1 << f)) && p[f].first.second != p1[f].first.second)
        return 1e18;
    }
    for (int f = 0; f < 4; f++)
      ret = max(ret, abs(p[f].first.first - p1[f].first.first) +
                         abs(p[f].first.second - p1[f].first.second));
    return ret;
  }
}
int main() {
  int t;
  cin >> t;
  while (t--) {
    for (int f = 0; f < 4; f++) {
      cin >> p[f].first.first >> p[f].first.second;
      p[f].second = f;
    }
    sort(p, p + 4);
    long long ans = 1e18, temp;
    do {
      for (int f = 0; f < 16; f++) {
        temp = calc(f);
        if (temp < ans) {
          ans = temp;
          for (int f1 = 0; f1 < 4; f1++) p2[f1] = p1[f1];
        }
      }
    } while (next_permutation(p, p + 4));
    if (ans != 1e18) {
      cout << ans << endl;
      for (int f = 0; f < 4; f++) p1[p2[f].second] = p2[f];
      for (int f = 0; f < 4; f++)
        cout << p1[f].first.first << " " << p1[f].first.second << endl;
    } else
      cout << -1 << endl;
  }
}
