#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y;
  int num;
  int mark;
};
point p[100010];
int ans[100010];
point pt;
int sum1, sum2;
bool cmp(point a, point b) {
  return (a.x - pt.x) * (b.y - pt.y) - (a.y - pt.y) * (b.x - pt.x) < 0;
}
bool cmp2(point a, point b) { return a.y != b.y ? a.y < b.y : a.x < b.x; }
void work(int l, int r) {
  if (r < l) return;
  int maxi = 0;
  int marki = 0;
  maxi = min_element(p + l, p + r + 1, cmp2) - p;
  swap(p[maxi], p[l]);
  pt = p[l];
  int k;
  sort(p + l + 1, p + r + 1, cmp);
  sum1 = sum2 = 0;
  for (k = r; !(pt.mark != p[k].mark && sum1 == sum2); k--)
    if (p[k].mark == pt.mark)
      sum1++;
    else
      sum2++;
  marki = k;
  if (pt.mark)
    ans[p[k].num] = pt.num;
  else
    ans[pt.num] = p[k].num;
  work(l + 1, marki - 1);
  work(marki + 1, r);
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  for (int i = (1); i <= (2 * n); ++i) {
    cin >> p[i].x >> p[i].y;
    p[i].mark = (i > n);
    p[i].num = i > n ? i - n : i;
  }
  work(1, 2 * n);
  for (int i = (1); i <= (n); ++i) {
    cout << ans[i] << '\n';
  }
}
