#include <bits/stdc++.h>
using namespace std;
int n, m, cnt, ans, an[2 * 10010];
double pi = atan2(0, -1);
struct node {
  int x, y, id;
  double t;
  bool operator<(node const &a) const { return t < a.t; }
} q[2 * 10010];
void sol(int l, int r) {
  if (l + 1 == r) {
    l = q[l].id;
    r = q[r].id;
    an[l] = r;
    an[r] = l;
    return;
  }
  int i, s, a, b, j, k;
  for (i = l + 1; i <= r; i++)
    if (q[i].y < q[l].y) swap(q[i], q[l]);
  for (i = l + 1; i <= r; i++) q[i].t = atan2(q[i].y - q[l].y, q[i].x - q[l].x);
  sort(q + l + 1, q + r + 1);
  for (i = s = l + 1, k = 0; i <= r; i++) {
    if (q[i].id <= n)
      k++;
    else
      k--;
    if (!k) sol(s, i), s = i + 1;
  }
  an[q[l].id] = q[s].id;
  an[q[s].id] = q[l].id;
  if (s + 1 <= r) sol(s + 1, r);
}
int main() {
  int i, s, a, b, j, k;
  scanf("%d", &n);
  for (i = 1; i <= 2 * n; i++) scanf("%d%d", &q[i].x, &q[i].y), q[i].id = i;
  sol(1, 2 * n);
  for (i = 1; i <= n; i++) printf("%d\n", an[i] - n);
  return 0;
}
