func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e4 + 9;   struct Point {     int col, id;     int x, y;     bool operator<(const Point& b) {       if (x == b.x) return y < b.y;       return x < b.x;     }   } p0, p[N * 2];   int cross(Point a, Point b, Point c) {     return (b.x - a.x) * (c.y - a.y) - (c.x - a.x) * (b.y - a.y);   }   bool cmpang(Point a, Point b) { return cross(p0, a, b) > 0; }   int ans[N];   void solve(int L, int R) {     int c = L;     for (int i = L; i <= R; ++i)       if (p[i] < p[c]) c = i;     swap(p[c], p[L]);     p0 = p[L];     sort(p + L + 1, p + R + 1, cmpang);     int a1 = 0, a0 = 0;     int k = 1000000;     int mid = (L + R) >> 1;     for (int i = L + 1; i <= R; ++i) {       if (a1 == a0 && p[i].col != p0.col) {         k = i;         break;       }       if (p[i].col)         ++a1;       else         ++a0;     }     if (p0.col)       ans[p[k].id] = p0.id;     else       ans[p0.id] = p[k].id;     if (L + 1 < k - 1) solve(L + 1, k - 1);     if (k + 1 < R) solve(k + 1, R);   }   inline int read() {     char ch = getchar();     int x = 0, f = 1;     while (ch <  0  || ch >  9 ) {       if (ch ==  - ) f = -1;       ch = getchar();     }     while ( 0  <= ch && ch <=  9 ) {       x = x * 10 + ch -  0 ;       ch = getchar();     }     return x * f;   }   int main() {     int n = read();     for (int i = 1; i <= n; ++i) {       p[i].x = read();       p[i].y = read();       p[i].col = 0;       p[i].id = i;     }     for (int i = 1; i <= n; ++i) {       p[i + n].x = read();       p[i + n].y = read();       p[i + n].col = 1;       p[i + n].id = i;     }     solve(1, 2 * n);     for (int i = 1; i <= n; ++i) cout << ans[i] <<   n ;   }   