#include <bits/stdc++.h>
using namespace std;
namespace std {
bool operator<(const complex<double> &lhs, const complex<double> &rhs) {
  if (real(lhs) == real(rhs)) {
    return imag(lhs) < imag(rhs);
  } else {
    return real(lhs) < real(rhs);
  }
}
}  // namespace std
ostream &operator<<(ostream &os, const complex<double> &p) {
  return os << "(" << p.real() << "," << p.imag() << ")";
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &vec) {
  os << "[";
  for (const auto &v : vec) {
    os << v << ",";
  }
  os << "]";
  return os;
}
complex<double> counter_clock_wise(complex<double> p, double rad) {
  double a = abs(p);
  return polar(a, arg(p) + rad);
}
const double EPS = 1e-7;
const double PI = 3.141592653589793;
double dot(complex<double> a, complex<double> b) { return real(conj(a) * b); }
double point_distance(complex<double> a, complex<double> b) {
  return abs(a - b);
}
bool is_square(vector<complex<double> > ps) {
  sort(ps.begin(), ps.end());
  vector<double> dist;
  for (long long i = 0; i < 4; i++) {
    for (long long j = i + 1; j < 4; j++) {
      if (abs(ps[i] - ps[j]) < EPS) return false;
      dist.push_back(abs(ps[i] - ps[j]));
    }
  }
  sort(dist.begin(), dist.end());
  for (long long i = 0; i < 4; i++) {
    if (abs(dist[0] - dist[i]) > EPS) return false;
  }
  for (long long i = 4; i < 6; i++) {
    if (abs(sqrt(2) * dist[1] - dist[i]) > EPS) return false;
  }
  return true;
}
const long long INF = 100000000;
long long solve(vector<long long> y, vector<long long> x, vector<long long> b,
                vector<long long> a) {
  long long ret = INF;
  ;
  ;
  for (long long i = 0; i < static_cast<long long>(4); i++) {
    for (long long j = 0; j < static_cast<long long>(4); j++) {
      for (long long k = 0; k < static_cast<long long>(4); k++) {
        for (long long l = 0; l < static_cast<long long>(4); l++) {
          vector<long long> cur = {i, j, k, l};
          vector<complex<double> > ps;
          for (long long m = 0; m < static_cast<long long>(4); m++) {
            complex<double> p(x[m], y[m]);
            p -= complex<double>(a[m], b[m]);
            p = counter_clock_wise(p, (PI / 2) * cur[m]);
            p += complex<double>(a[m], b[m]);
            ps.push_back(p);
          }
          sort(ps.begin(), ps.end());
          if (is_square(ps)) {
            ;
            ;
            ret = min(ret, i + j + k + l);
          }
        }
      }
    }
  }
  if (ret == INF) return -1;
  return ret;
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long n;
  cin >> n;
  for (long long i = 0; i < n; i++) {
    vector<long long> y(4), x(4), b(4), a(4);
    for (long long j = 0; j < 4; j++) {
      cin >> x[j] >> y[j] >> a[j] >> b[j];
    }
    long long ret = solve(y, x, b, a);
    cout << ret << endl;
  }
  return 0;
}
