#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
struct Point {
  long long x, y;
} pt[4][4];
long long dist(Point a, Point b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
bool isSquare(Point p1, Point p2, Point p3, Point p4) {
  long long d2 = dist(p1, p2);
  long long d3 = dist(p1, p3);
  long long d4 = dist(p1, p4);
  if (d2 == 0 || d3 == 0 || d4 == 0) return false;
  if (d2 == d3 && 2 * d2 == d4 && 2 * dist(p2, p4) == dist(p2, p3)) {
    return true;
  }
  if (d3 == d4 && 2 * d3 == d2 && 2 * dist(p3, p2) == dist(p3, p4)) {
    return true;
  }
  if (d2 == d4 && 2 * d2 == d3 && 2 * dist(p2, p3) == dist(p2, p4)) {
    return true;
  }
  return false;
}
void rewind() {
  for (int i = 0; i < 4; i++) {
    int a, b;
    cin >> pt[i][0].x >> pt[i][0].y >> a >> b;
    for (int j = 1; j < 4; j++) {
      pt[i][j].x = a - (pt[i][j - 1].y - b);
      pt[i][j].y = b + (pt[i][j - 1].x - a);
    }
  }
  int ans = 16;
  for (int i = 0; i < 4; i++)
    for (int j = 0; j < 4; j++)
      for (int k = 0; k < 4; k++)
        for (int w = 0; w < 4; w++) {
          if (i + j + k + w < ans &&
              isSquare(pt[0][i], pt[1][j], pt[2][k], pt[3][w])) {
            ans = i + j + k + w;
          }
        }
  cout << (ans == 16 ? -1 : ans) << endl;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int test_case;
  cin >> test_case;
  while (test_case--) {
    rewind();
  }
  return 0;
}
