#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline T sqr(const T& a) {
  return a * a;
}
template <typename T>
inline int sign(const T& a) {
  return a < 0 ? -1 : a > 0;
}
void task();
int main() {
  task();
  return 0;
}
int n;
set<pair<int, int> > any;
set<pair<int, int> > t[2];
pair<int, int> a[int(1e5) + 10];
void task() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < n; ++i) {
    int t, w;
    cin >> t >> w;
    a[i] = {t, w};
  }
  for (int i = 0; i < n; ++i)
    any.insert({a[i].second, i}), t[a[i].first].insert({a[i].second, i});
  for (int i = 0; i < n - 1; ++i) {
    pair<int, int> p;
    if (t[1].size() == 1)
      p = *t[0].begin();
    else if (t[0].size() == 1)
      p = *t[1].begin();
    else
      p = min(*t[1].begin(), *t[0].begin());
    cout << p.second + 1 << ' ';
    if (p != *t[0].begin()) {
      cout << t[0].begin()->second + 1 << ' ';
      pair<int, int> sv = *t[0].begin();
      t[0].erase(sv);
      sv.first -= p.first;
      t[0].insert(sv);
      t[1].erase(t[1].begin());
    } else {
      cout << t[1].begin()->second + 1 << ' ';
      pair<int, int> sv = *t[1].begin();
      t[1].erase(sv);
      sv.first -= p.first;
      t[1].insert(sv);
      t[0].erase(t[0].begin());
    }
    cout << p.first << "\n";
    (void(1));
  }
}
