#include <bits/stdc++.h>
using namespace std;
struct s {
  long long index;
  long long value;
  bool color;
};
struct yal {
  long long from, to;
  long long wazn;
};
vector<yal> ans;
priority_queue<s> black;
priority_queue<s> white;
s arr[100005];
int root[100005];
bool operator<(const s &s1, const s &s2) { return s1.value < s2.value; }
int findFather(int a) {
  if (root[a] == a) return root[a];
  root[a] = findFather(root[a]);
  return root[a];
}
void mer(int u, int v) {
  if (findFather(v) < findFather(u))
    root[findFather(u)] = findFather(v);
  else
    root[findFather(v)] = findFather(u);
}
int main() {
  long long n, a, b;
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    cin >> a >> b;
    s temp;
    temp.index = i;
    temp.value = b;
    if (a == 1) {
      temp.color = false;
      black.push(temp);
    } else {
      temp.color = true;
      white.push(temp);
    }
    arr[i] = temp;
    root[i] = i;
  }
  while (black.size() > 0 && white.size() > 0) {
    s x = black.top();
    s y = white.top();
    yal temp;
    temp.from = x.index;
    temp.to = y.index;
    temp.wazn = min(x.value, y.value);
    ans.push_back(temp);
    if (x.value < y.value) {
      black.pop();
      y.value -= x.value;
      white.pop();
      white.push(y);
    } else if (x.value > y.value) {
      white.pop();
      x.value -= y.value;
      black.pop();
      black.push(x);
    } else {
      black.pop();
      white.pop();
    }
    int u = findFather(x.index);
    int v = findFather(y.index);
    if (u != v) mer(u, v);
  }
  for (int i = 1; i <= n; i++) {
    if (findFather(i) != 1) {
      int c;
      for (int j = 1; j <= n; j++) {
        if (arr[j].color != arr[i].color && arr[j].index != arr[i].index) {
          c = j;
          break;
        }
      }
      yal temp;
      temp.from = arr[i].index;
      temp.to = arr[c].index;
      temp.wazn = 0;
      ans.push_back(temp);
      mer(i, c);
    }
  }
  for (long long i = 0; i < ans.size(); i++)
    cout << ans[i].from << " " << ans[i].to << " " << ans[i].wazn << endl;
  return 0;
}
