func_code_string: #include <bits/stdc++.h>   using namespace std;   using lld = int64_t;   struct PT {     lld x, y;     PT() : x(0), y(0) {}     PT(lld a, lld b) : x(a), y(b) {}     PT operator-(const PT& a) const { return PT(x - a.x, y - a.y); }   };   lld dot(const PT& a, const PT& b) { return a.x * b.x + a.y * b.y; }   lld cross(const PT& a, const PT& b) { return a.x * b.y - a.y * b.x; }   class ConvexHull_2D {    private:     vector<PT> dots;       public:     inline void init() { dots.clear(); }     void insert(const PT& x) { dots.push_back(x); }     void solve() {       sort(begin(dots), end(dots), [](const PT& a, const PT& b) {         return tie(a.x, a.y) < tie(b.x, b.y);       });       vector<PT> stk((static_cast<int>((dots).size())) << 1);       int top = 0;       for (auto p : dots) {         while (top >= 2 and                cross(p - stk[top - 2], stk[top - 1] - stk[top - 2]) <= 0)           top--;         stk[top++] = p;       }       for (int i = (static_cast<int>((dots).size())) - 2, t = top + 1; i >= 0;            i--) {         while (top >= t and                cross(dots[i] - stk[top - 2], stk[top - 1] - stk[top - 2]) <= 0)           top--;         stk[top++] = dots[i];       }       stk.resize(top - 1);       swap(stk, dots);     }     vector<PT> get() { return dots; }   };   ConvexHull_2D cv;   inline bool check(const vector<lld>&, const vector<lld>&);   vector<lld> get_it(const vector<PT>& a) {     vector<lld> ret;     ret.push_back(dot(a.back() - a[0], a.back() - a[0]));     ret.push_back(dot(a.back() - a[0], a[1] - a[0]));     for (int i = 1; i < (static_cast<int>((a).size())) - 1; i++) {       ret.push_back(dot(a[i - 1] - a[i], a[i - 1] - a[i]));       ret.push_back(dot(a[i - 1] - a[i], a[i + 1] - a[i]));     }     ret.push_back(dot(a[(static_cast<int>((a).size())) - 2] -                           a[(static_cast<int>((a).size())) - 1],                       a[(static_cast<int>((a).size())) - 2] -                           a[(static_cast<int>((a).size())) - 1]));     ret.push_back(dot(a[(static_cast<int>((a).size())) - 2] -                           a[(static_cast<int>((a).size())) - 1],                       a[0] - a[(static_cast<int>((a).size())) - 1]));     return ret;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     int n, m;     cin >> n >> m;     cv.init();     for (int i = 0; i < n; i++) {       lld x, y;       cin >> x >> y;       cv.insert(PT(x, y));     }     cv.solve();     vector<PT> one = cv.get();     cv.init();     for (int i = 0; i < m; i++) {       lld x, y;       cin >> x >> y;       cv.insert(PT(x, y));     }     cv.solve();     vector<PT> two = cv.get();     if ((static_cast<int>((one).size())) != (static_cast<int>((two).size())) or         !check(get_it(one), get_it(two)))       cout <<  NO  <<   n ;     else       cout <<  YES  <<   n ;     return 0;   }   inline bool check(const vector<lld>& a, const vector<lld>& b) {     for (int i = 0; i < (static_cast<int>((a).size())); i++) {       bool flag = true;       for (int j = 0; j < (static_cast<int>((b).size())); j++) {         flag &= (a[(i + j) % (static_cast<int>((a).size()))] == b[j]);         if (!flag) break;       }       if (flag) return true;     }     return false;   }   