#include <bits/stdc++.h>   using namespace std;   void file() {}   void fast() {     std::ios_base::sync_with_stdio(0);     cin.tie(NULL);   }   const int N = 510 + 20;   const double PI = acos(-1.0);   bool cmp(complex<double> a, complex<double> b) {     if (a.real() == b.real()) return a.imag() < b.imag();     return a.real() < b.real();   }   bool cmp_doub(double a, double b) {     if (fabs(a - b) <= 1e-9) {       return 1;     }     return 0;   }   bool is_correct(complex<double> p1, complex<double> p2, complex<double> p3,                   complex<double> p4) {     vector<double> dists;     double dist1 = (hypot((p1 - p2).imag(), (p1 - p2).real()));     double dist2 = (hypot((p2 - p4).imag(), (p2 - p4).real()));     double dist3 = (hypot((p3 - p4).imag(), (p3 - p4).real()));     double dist4 = (hypot((p3 - p1).imag(), (p3 - p1).real()));     double dist5 = (hypot((p2 - p3).imag(), (p2 - p3).real()));     double dist6 = (hypot((p1 - p4).imag(), (p1 - p4).real()));     dists.push_back(dist1);     dists.push_back(dist2);     dists.push_back(dist3);     dists.push_back(dist4);     dists.push_back(dist5);     dists.push_back(dist6);     sort(((dists).begin()), ((dists).end()));     if (dists[0] > 0 && cmp_doub(dists[0], dists[1]) &&         cmp_doub(dists[1], dists[2]) && cmp_doub(dists[2], dists[3]) &&         cmp_doub(dists[3], dists[2])) {       if (cmp_doub(dists[4], dists[5]) && !cmp_doub(dists[5], dists[0])) {         return 1;       }     }     return 0;   }   complex<double> rotate(complex<double> a, complex<double> b, int c) {     for (int i = 0; i < c; i++) {       a = (((((a) - (b))) * exp(complex<double>(0, PI / 2.0))) + b);     }     return a;   }   int main() {     file();     fast();     int n;     cin >> n;     for (int i = 0; i < n; i++) {       vector<pair<complex<double>, complex<double>>> points;       for (int j = 0; j < 4; j++) {         int x, y, z, m;         cin >> x >> y >> z >> m;         points.push_back({complex<double>(x, y), complex<double>(z, m)});       }       int ans = 1e9;       for (int j1 = 0; j1 < 4; j1++) {         for (int j2 = 0; j2 < 4; j2++) {           for (int j3 = 0; j3 < 4; j3++) {             for (int j4 = 0; j4 < 4; j4++) {               vector<complex<double>> points1(4);               points1[0] = rotate(points[0].first, points[0].second, j1);               points1[1] = rotate(points[1].first, points[1].second, j2);               points1[2] = rotate(points[2].first, points[2].second, j3);               points1[3] = rotate(points[3].first, points[3].second, j4);               if (is_correct(points1[0], points1[1], points1[2], points1[3])) {                 ans = min(ans, j1 + j2 + j3 + j4);               }             }           }         }       }       if (ans == 1e9) ans = -1;       cout << ans << endl;     }   }   