func_code_string: #include <bits/stdc++.h>   using namespace std;   const int INF = 0x3f3f3f3f;   const double EPS = 1e-9;   inline int cmp(double x, double y = 0, double tol = EPS) {     return ((x <= y + tol) ? (x + tol < y) ? -1 : 0 : 1);   }   struct point {     long long x, y;     point(long long x = 0, long long y = 0) : x(x), y(y) {}     point operator+(point q) { return point(x + q.x, y + q.y); }     point operator-(point q) { return point(x - q.x, y - q.y); }     int cmp(point q) const {       if (int t = ::cmp(x, q.x)) return t;       return ::cmp(y, q.y);     }     bool operator==(point q) const { return cmp(q) == 0; };     bool operator!=(point q) const { return cmp(q) != 0; };     bool operator<(point q) const { return cmp(q) < 0; };   };   ostream &operator<<(ostream &os, const point &p) {     os <<  (  << p.x <<  ,  << p.y <<  ) ;   }   long long dot(point a, point b) { return a.x * b.x + a.y * b.y; }   long long cross(point a, point b) { return a.x * b.y - a.y * b.x; }   long long abs2(point a) { return dot(a, a); }   bool collinear(point a, point b, point c) {     return cmp(cross((b - a), (c - a))) == 0;   }   int ccw(point a, point b, point p) { return cmp(cross((b - a), (p - a))); }   point pivot;   bool radial_lt(point a, point b) {     int R = ccw(pivot, a, b);     if (R == 0)       return dot(pivot - a, pivot - a) < dot(pivot - b, pivot - b);     else       return (R == 1);   }   vector<point> convexhull(vector<point> T) {     sort(T.begin(), T.end());     T.resize(unique(T.begin(), T.end()) - T.begin());     int tam = 0, n = T.size();     vector<point> U;     int idx = min_element(T.begin(), T.end()) - T.begin();     pivot = T[idx];     swap(T[0], T[idx]);     sort(++T.begin(), T.end(), radial_lt);     for (int i = 0; i < T.size(); i++) {       while (tam > 1 && ccw(U[tam - 2], U[tam - 1], T[i]) <= 0)         U.pop_back(), tam--;       U.push_back(T[i]);       tam++;     }     return U;   }   void show(pair<pair<long long, long long>, pair<long long, long long> > s) {     cout << s.first.first <<     << s.first.second <<     << s.second.first <<              << s.second.second << endl;   }   int least_rot(       vector<pair<pair<long long, long long>, pair<long long, long long> > >           second) {     int n = second.size();     for (int i = (0); i < (n); i++) second.push_back(second[i]);     vector<int> f(second.size(), -1);     int k = 0;     for (int j = 1; j < second.size(); j++) {       pair<pair<long long, long long>, pair<long long, long long> > sj =           second[j];       int i = f[j - k - 1];       while (i != -1 && sj != second[k + i + 1]) {         if (sj < second[k + i + 1]) k = j - i - 1;         i = f[i];       }       if (sj != second[k + i + 1]) {         if (sj < second[k]) k = j;         f[j - k] = -1;       } else         f[j - k] = i + 1;     }     return k;   }   int main() {     int n, m;     scanf( %d %d , &n, &m);     vector<point> A(n), B(m);     point p;     for (int i = (0); i < (n); i++) {       scanf( %lld %lld , &p.x, &p.y);       A[i] = p;     }     for (int i = (0); i < (m); i++) {       scanf( %lld %lld , &p.x, &p.y);       B[i] = p;     }     A = convexhull(A);     B = convexhull(B);     n = A.size();     m = B.size();     if (n != m) {       cout <<  NO n ;       return 0;     }     vector<pair<pair<long long, long long>, pair<long long, long long> > > AA, BB;     point esq, dir;     int ee, dd;     for (int i = (0); i < (n); i++) {       ee = i - 1;       if (ee < 0) ee += n;       dd = i + 1;       if (dd >= n) dd %= n;       esq = A[ee] - A[i], dir = A[dd] - A[i];       AA.push_back(make_pair(make_pair(cross(esq, dir), dot(esq, dir)),                              make_pair(abs2(esq), abs2(dir))));     }     for (int i = (0); i < (n); i++) {       ee = i - 1;       if (ee < 0) ee += n;       dd = i + 1;       if (dd >= n) dd %= n;       esq = B[ee] - B[i], dir = B[dd] - B[i];       BB.push_back(make_pair(make_pair(cross(esq, dir), dot(esq, dir)),                              make_pair(abs2(esq), abs2(dir))));     }     int u = least_rot(AA);     int v = least_rot(BB);     bool ok = true;     for (int i = (0); i < (n); i++) {       if (AA[u] != BB[v]) {         ok = false;         break;       }       u = (u + 1) % n;       v = (v + 1) % n;     }     if (ok)       cout <<  YES n ;     else       cout <<  NO n ;     return 0;   }   