#include <bits/stdc++.h>
using namespace std;
struct Node {
  int id;
  int x, y, z;
} v[50555];
int n;
bool cmp(const Node &a, const Node &b) {
  if (a.z != b.z) return a.z < b.z;
  if (a.y != b.y) return a.y < b.y;
  return a.x < b.x;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    v[i].id = i;
    scanf("%d%d%d", &v[i].x, &v[i].y, &v[i].z);
  }
  sort(v + 1, v + n + 1, cmp);
  int it = 0;
  for (int i = 1; i <= n; i++) {
    if (i < n && v[i].z == v[i + 1].z && v[i].y == v[i + 1].y) {
      printf("%d %d\n", v[i].id, v[i + 1].id);
      i++;
    } else
      v[++it] = v[i];
  }
  sort(v + 1, v + it + 1, cmp);
  n = it;
  it = 0;
  for (int i = 1; i <= n; i++) {
    if (i < n && v[i].z == v[i + 1].z) {
      printf("%d %d\n", v[i].id, v[i + 1].id);
      i++;
    } else
      v[++it] = v[i];
  }
  sort(v + 1, v + it + 1, cmp);
  n = it;
  for (int i = 1; i < n; i += 2) {
    printf("%d %d\n", v[i].id, v[i + 1].id);
  }
  return 0;
}
