#include <bits/stdc++.h>
using namespace std;
struct node {
  int value;
  int a, b;
  node() = default;
  node(int x, int y, int z) : value(x), a(y), b(z) {}
  bool operator<(const node &t) const { return value < t.value; }
};
priority_queue<node> q;
int n;
int visit[5000000];
int main() {
  int i, j, x;
  scanf("%d", &n);
  for (i = 2; i <= 2 * n; i++) {
    for (j = 1; j < i; j++) {
      scanf("%d", &x);
      q.push(node(x, i, j));
    }
  }
  while (!q.empty()) {
    node temp = q.top();
    q.pop();
    if (visit[temp.a] || visit[temp.b]) continue;
    visit[temp.a] = temp.b;
    visit[temp.b] = temp.a;
  }
  for (i = 1; i <= 2 * n; i++) printf("%d ", visit[i]);
  return 0;
}
