#include <bits/stdc++.h>   using namespace std;   struct edge {     long long a, b, index;     long long u, v;   };   bool compare(edge i, edge j) {     if (i.a == j.a) return i.b > j.b;     return i.a < j.a;   }   bool compare2(edge i, edge j) { return i.index < j.index; }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     long long n, m;     cin >> n >> m;     edge a[m];     for (long long i = 0; i < m; i++) {       cin >> a[i].a >> a[i].b;       a[i].index = i;     }     long long suc = 0, unsuc = 0;     sort(a, a + m, compare);     long long u1 = 2, v1 = 3;     for (long long i = 0; i < m; i++) {       if (a[i].b == 1) {         a[i].u = 1;         a[i].v = suc + 2;         suc++;       } else {         unsuc++;         long long edges = ((suc + 1) * (suc)) / 2 - (suc);         if (edges < unsuc) {           cout << -1 <<   n ;           return 0;         }         a[i].u = u1;         a[i].v = v1;         if (u1 + 1 == v1) {           u1 = 2;           v1++;         } else {           u1++;         }       }     }     sort(a, a + m, compare2);     for (long long i = 0; i < m; i++) cout << a[i].u <<     << a[i].v <<   n ;     return 0;   }   