#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
struct node {
  int col;
  int val;
  int id;
  friend bool operator>(node a, node b) { return a.val > b.val; }
} a[N];
int main() {
  int n;
  priority_queue<node, vector<node>, greater<node> > q0, q1;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i].col >> a[i].val;
    a[i].id = i;
    if (a[i].col)
      q1.push(a[i]);
    else
      q0.push(a[i]);
  }
  int id0, id1;
  while (q0.size() && q1.size()) {
    node temp0 = q0.top();
    node temp1 = q1.top();
    id0 = temp0.id;
    id1 = temp1.id;
    if (temp0.val < temp1.val) {
      q0.pop();
      q1.pop();
      cout << temp0.id << ' ' << temp1.id << ' ' << temp0.val << endl;
      temp1.val -= temp0.val;
      if (q0.size()) q1.push(temp1);
    } else {
      q0.pop();
      q1.pop();
      cout << temp0.id << ' ' << temp1.id << ' ' << temp1.val << endl;
      temp0.val -= temp1.val;
      if (q1.size()) q0.push(temp0);
    }
  }
  while (q0.size()) {
    node temp = q0.top();
    q0.pop();
    cout << temp.id << ' ' << id1 << ' ' << temp.val << endl;
  }
  while (q1.size()) {
    node temp = q1.top();
    q1.pop();
    cout << temp.id << ' ' << id0 << ' ' << temp.val << endl;
  }
  return 0;
}
