#include <bits/stdc++.h>
using namespace std;
const int maxn = 810, X = 1 * 1000 * 1000;
int n, zoor[maxn][maxn], tmate[maxn];
set<pair<int, pair<int, int> > > st;
pair<int, pair<int, int> > tmp;
bool mark[maxn];
int main() {
  ios::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < 2 * n - 1; i++) {
    for (int j = 0; j < i + 1; j++) {
      cin >> zoor[i + 1][j];
      zoor[j][i + 1] = zoor[i + 1][j];
      st.insert(make_pair(X - zoor[i + 1][j],
                          make_pair(min(i + 1, j), max(i + 1, j))));
    }
  }
  while (!st.empty()) {
    tmp = *(st.begin());
    st.erase(tmp);
    mark[tmp.second.first] = mark[tmp.second.second] = 1;
    tmate[tmp.second.first] = tmp.second.second;
    tmate[tmp.second.second] = tmp.second.first;
    for (int i = 0; i < 2 * n; i++) {
      if (!mark[i]) {
        st.erase(make_pair(
            X - zoor[tmp.second.first][i],
            make_pair(min(tmp.second.first, i), max(tmp.second.first, i))));
        st.erase(make_pair(
            X - zoor[tmp.second.second][i],
            make_pair(min(tmp.second.second, i), max(tmp.second.second, i))));
      }
    }
  }
  for (int i = 0; i < 2 * n; i++) cout << tmate[i] + 1 << " ";
  return 0;
}
