#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y, a, b;
};
point rotate(point p) {
  point p1 = p;
  int x = p1.x - p1.a, y = p1.y - p1.b;
  p1.x = -y + p1.a;
  p1.y = x + p1.b;
  return p1;
}
bool comp(point p1, point p2) {
  if (p1.x == p2.x) return p1.y < p2.y;
  return p1.x < p2.x;
}
bool issq(point p[]) {
  sort(p, p + 4, comp);
  if (p[0].x == p[3].x && p[0].y == p[3].y) return false;
  if (p[0].x == p[1].x && p[0].y == p[1].y) return false;
  int d11 = (p[0].x - p[1].x) * (p[0].x - p[1].x) +
            (p[0].y - p[1].y) * (p[0].y - p[1].y);
  int d22 = (p[0].x - p[2].x) * (p[0].x - p[2].x) +
            (p[0].y - p[2].y) * (p[0].y - p[2].y);
  int d1 = (p[0].x - p[3].x) * (p[0].x - p[3].x) +
           (p[0].y - p[3].y) * (p[0].y - p[3].y);
  int d2 = (p[1].x - p[2].x) * (p[1].x - p[2].x) +
           (p[1].y - p[2].y) * (p[1].y - p[2].y);
  if (p[0].x + p[3].x == p[1].x + p[2].x &&
      p[0].y + p[3].y == p[1].y + p[2].y && d11 == d22 && d1 == d2)
    return true;
  return false;
}
int main() {
  int n;
  cin >> n;
  while (n--) {
    point p[4];
    for (int i = 0; i < 4; i++) cin >> p[i].x >> p[i].y >> p[i].a >> p[i].b;
    int ans = 17;
    for (int i = 0; i < 4; i++) {
      for (int j = 0; j < 4; j++) {
        for (int k = 0; k < 4; k++) {
          for (int l = 0; l < 4; l++) {
            point pc[4];
            for (int il = 0; il < 4; il++) pc[il] = p[il];
            if (issq(pc)) ans = min(ans, i + j + k + l);
            p[3] = rotate(p[3]);
          }
          p[2] = rotate(p[2]);
        }
        p[1] = rotate(p[1]);
      }
      p[0] = rotate(p[0]);
    }
    if (ans == 17)
      cout << -1;
    else
      cout << ans;
    cout << '\n';
  }
  return 0;
}
