func_code_string: #include <bits/stdc++.h>   using namespace std;   struct rua {     long double x, y;   } m;   set<pair<long double, long double> > p;   vector<pair<long double, long double> > del;   vector<long double> d;   set<long double> mm;   int n, ans;   long double x, y;   bool tt;   bool check(rua T) {     d.clear();     rua M = {(T.x + x) / 2, (T.y + y) / 2};     rua mM = {M.x - m.x, M.y - m.y};     rua r0 = {mM.y, -mM.x};     if (!r0.x)       if (tt)         return false;       else         tt = true;     long double k = r0.y / r0.x;     if (mm.count(k))       return false;     else       mm.insert(k);     long double R = pow(r0.x * r0.x + r0.y * r0.y, 0.5);     for (auto i = p.begin(); i != p.end(); i++) {       rua mP = {(*i).first - m.x, (*i).second - m.y};       long double t = r0.x * mP.x + r0.y * mP.y;       t /= r0.x * r0.x + r0.y * r0.y;       if (t) d.push_back(t);     }     long double _ = (r0.x * mM.x + r0.y * mM.y) / R;     int l = 0, r = d.size() - 1;     sort(d.begin(), d.end());     while (l <= r && d[l] + d[r] == 0) l++, r--;     return l > r;   }   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       cin >> x >> y;       p.insert(make_pair(x, y));       m.x += x, m.y += y;     }     m.x = m.x * 1.0 / n, m.y = m.y * 1.0 / n;     for (auto i = p.begin(); i != p.end(); i++) {       x = (*i).first, y = (*i).second;       if (p.count(make_pair(2 * m.x - x, 2 * m.y - y)))         del.push_back(make_pair(2 * m.x - x, 2 * m.y - y)), del.push_back(*i);     }     for (int i = 0; i < del.size(); i++)       if (p.count(del[i])) p.erase(del[i]);     if (!p.size()) return printf( -1 n ), 0;     x = (*p.begin()).first, y = (*p.begin()).second;     for (auto i = p.begin(); i != p.end(); i++)       if (check({(*i).first, (*i).second})) ans++;     printf( %d n , ans);     return 0;   }   