func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   struct Vec {     long long x, y;     Vec operator+(const Vec &o) const { return (Vec){x + o.x, y + o.y}; }     Vec operator-(const Vec &o) const { return (Vec){x - o.x, y - o.y}; }     long long operator*(const Vec &o) const {       return 1ll * x * o.y - 1ll * y * o.x;     }     long long operator|(const Vec &o) const {       return 1ll * x * o.x + 1ll * y * o.y;     }   } mon[1010], arr[11];   vector<int> ir[11][1010];   bool book[11];   int a[11];   int die[1010], clk;   int now;   bool chk(int p) {     if (die[p] == clk) return 1;     now++;     if (now > m) return 0;     int ap = a[now];     int ma = ir[ap][p].size();     if (!ma) {       die[p] = clk;       return 1;     }     for (int i = 0; i < ma; ++i)       if (!chk(ir[ap][p][i])) return 0;     die[p] = clk;     return 1;   }   bool check(int x) {     clk++;     now = 0;     return chk(x);   }   bool dfs(int x, int p) {     if (x > m) {       if (check(p)) return 1;       return 0;     }     for (int i = 1; i <= m; ++i)       if (!book[i]) {         a[x] = i;         book[i] = 1;         if (dfs(x + 1, p)) return 1;         book[i] = 0;       }     return 0;   }   int main() {     scanf( %d%d , &m, &n);     for (int i = 1; i <= m; ++i) scanf( %lld%lld , &arr[i].x, &arr[i].y);     for (int i = 1; i <= n; ++i) scanf( %lld%lld , &mon[i].x, &mon[i].y);     Vec vn, v1;     for (int i = 1; i <= m; ++i)       for (int j = 1; j <= n; ++j) {         vn = mon[j] - arr[i];         for (int k = 1; k <= n; ++k) {           if (k == j) continue;           v1 = mon[k] - arr[i];           if (v1 * vn != 0 || (v1 | vn) <= 0) continue;           if (abs(v1.x) > abs(vn.x) || abs(v1.y) > abs(vn.y)) continue;           ir[i][j].push_back(k);         }       }     int ans = 0;     for (int i = 1; i <= n; ++i) {       memset(book, 0, sizeof(book));       if (dfs(1, i)) ans++;     }     printf( %d n , ans);     return 0;   }   