#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";
}
