#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a, long long b) { return (b == 0 ? a : gcd(b, a % b)); }
long long lcm(long long a, long long b) { return ((a * b) / gcd(a, b)); }
long long pw(long long b, long long p) {
  if (!p) return 1;
  long long sq = pw(b, p / 2);
  sq *= sq;
  if (p % 2) sq *= b;
  return sq;
}
long long sd(long long x) { return x < 10 ? x : x % 10 + sd(x / 10); }
double sq(double x) {
  for (long long i = 0; i < x; i++)
    if ((double)i * i > x) return (i - 1);
  return double(1);
}
int main() {
  int n;
  cin >> n;
  n *= 2;
  vector<pair<int, pair<int, int>>> st;
  vector<int> team(n);
  vector<bool> taken(n, 0);
  for (long long i = 0; i < n - 1; i++) {
    for (long long j = 0; j < i + 1; j++) {
      int x;
      cin >> x;
      st.push_back(make_pair(x, make_pair(i + 2, j + 1)));
    }
  }
  sort(st.begin(), st.end());
  reverse(st.begin(), st.end());
  for (long long i = 0; i < st.size(); i++) {
    int f = st[i].second.first - 1, l = st[i].second.second - 1;
    if (!taken[f] && !taken[l])
      taken[f] = 1, taken[l] = 1, team[f] = l + 1, team[l] = f + 1;
  }
  for (long long i = 0; i < n; i++) cout << team[i] << " ";
}
