#include <bits/stdc++.h>   using namespace std;   long long mod = 1000000007;   const int INF = 1e9;   const long long LINF = 1e18;   long long mod_sum() { return 0LL; }   template <typename T, typename... Args>   T mod_sum(T a, Args... args) {     return ((a + mod_sum(args...)) % mod + mod) % mod;   }   long long mod_prod() { return 1LL; }   template <typename T, typename... Args>   T mod_prod(T a, Args... args) {     return (a * mod_prod(args...)) % mod;   }   struct ast {     long long u, v, len;   };   vector<ast> ans;   long long solve() {     long long n;     cin >> n;     priority_queue<pair<long long, long long>,                    vector<pair<long long, long long> >,                    greater<pair<long long, long long> > >         pq0;     priority_queue<pair<long long, long long>,                    vector<pair<long long, long long> >,                    greater<pair<long long, long long> > >         pq1;     for (long long i = 0; i < n; i++) {       long long which, s;       cin >> which >> s;       if (which == 0)         pq0.push({s, i});       else         pq1.push({s, i});     }     long long atlast0 = pq0.top().second, atlast1 = pq1.top().second;     while (!pq0.empty() && !pq1.empty()) {       if (pq0.top().first < pq1.top().first) {         long long v = pq0.top().second;         long long u = pq1.top().second;         long long len = pq0.top().first;         ans.push_back({u, v, len});         long long temp = pq1.top().first - len;         pq0.pop(), pq1.pop();         pq1.push({temp, u});       } else {         long long v = pq1.top().second;         long long u = pq0.top().second;         long long len = pq1.top().first;         ans.push_back({u, v, len});         long long temp = pq0.top().first - len;         pq0.pop(), pq1.pop();         pq0.push({temp, u});       }     }     if ((long long)ans.size() < n - 1 && !pq0.empty()) {       pq0.pop();       while (!pq0.empty())         ans.push_back({atlast1, pq0.top().second, 0}), pq0.pop();     } else if ((long long)ans.size() < n - 1 && !pq1.empty()) {       pq1.pop();       while (!pq1.empty())         ans.push_back({atlast0, pq1.top().second, 0}), pq1.pop();     }     for (auto xxx : ans)       cout << xxx.u + 1 <<     << xxx.v + 1 <<     << xxx.len <<   n ;     return 0;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     long long t = 1;     while (t--) solve();     return 0;   }   