func_code_string: #include <bits/stdc++.h>   using namespace std;   const double eps = 1e-8;   const double pi = acos(-1);   inline int sgn(double x) {     if (x < -eps)       return -1;     else if (x > eps)       return 1;     else       return 0;   }   struct Point {     double x, y;     Point(double _x = 0.0, double _y = 0.0) : x(_x), y(_y) {}     Point operator+(const Point &b) const { return Point(x + b.x, y + b.y); }     Point operator-(const Point &b) const { return Point(x - b.x, y - b.y); }     double operator*(const Point &b) const { return (x * b.x + y * b.y); }     double operator^(const Point &b) const { return (x * b.y - y * b.x); }     Point operator*(double b) { return Point(x * b, y * b); }     bool operator<(const Point &b) const {       if (sgn(x - b.x) == 0)         return sgn(y - b.y) <= 0;       else         return sgn(x - b.x) < 0;     }     bool operator==(const Point &b) const {       return sgn(x - b.x) == 0 && sgn(y - b.y) == 0;     }     Point rot(double ang) {       return Point(x * cos(ang) - y * sin(ang), x * sin(ang) + y * cos(ang));     }     Point rot(double g1, double g2) {       return Point(x * g2 - y * g1, x * g1 + y * g2);     }     double norm() { return sqrt(x * x + y * y); }     Point unit() {       double ll = norm();       return Point(x / ll, y / ll);     }   };   Point f[2005], p[2005];   bool vis[2005];   double d[2005];   int main() {     int n, m, ans = 0, i, j;     Point o = Point(0, 0);     scanf( %d , &n);     for (i = 0; i < n; i++) {       scanf( %lf%lf , &f[i].x, &f[i].y);       o = o + f[i];     }     o = o * (1.0 / n);     for (i = 0; i < n; i++) {       if (vis[i]) continue;       for (j = i; j < n; j++) {         if (f[i] + f[j] == o * 2.0) {           vis[i] = vis[j] = 1;           break;         }       }     }     for (i = j = 0; i < n; i++) {       if (!vis[i]) f[j++] = f[i] - o;     }     if (!j) return puts( -1 ), 0;     n = j;     for (i = m = 0; i < n; i++) {       Point u = f[0] + f[i];       Point v = Point(-u.y, u.x);       for (j = 0; j < n; j++) d[j] = f[j] * v;       sort(d, d + n);       for (j = 0; j < n; j++)         if (sgn(d[j] + d[n - 1 - j])) break;       if (j == n) {         v = v.unit();         for (j = 0; j < m; j++)           if (!sgn(p[j] ^ v)) break;         if (j == m) {           ans++;           p[m++] = v;         }       }     }     printf( %d n , ans);     return 0;   }   