#include <bits/stdc++.h>
using namespace std;
const signed long long Infinity = 1000000000;
const long double Pi = 2.0L * asinl(1.0L);
const long double Epsilon = 0.000000001;
template <class T, class U>
ostream& operator<<(ostream& os, const pair<T, U>& p) {
  return os << p.first << " " << p.second << "\n";
}
template <class T>
ostream& operator<<(ostream& os, const vector<T>& V) {
  for (typeof(V.begin()) i = V.begin(); i != V.end(); ++i) os << *i << endl;
  return os;
}
template <class T>
ostream& operator<<(ostream& os, const set<T>& S) {
  for (typeof(S.begin()) i = S.begin(); i != S.end(); ++i) os << *i << endl;
  return os;
}
template <class T, class U>
ostream& operator<<(ostream& os, const map<T, U>& M) {
  for (typeof(M.begin()) i = M.begin(); i != M.end(); ++i) os << *i << endl;
  return os;
}
vector<pair<string, int> > A;
int n;
void readData() {
  scanf("%d", &n);
  for (int(i) = (1); (i) <= (n); (i)++) {
    string a;
    int b;
    cin >> a >> b;
    A.push_back(make_pair(a, b));
  }
}
bool comp(pair<string, int> a, pair<string, int> b) {
  return a.second < b.second;
}
int greate(vector<int>& a, int x, int q) {
  int r = 0;
  for (int(i) = (0); (i) < (q); (i)++)
    if (x <= a[i]) r++;
  return r;
}
bool solve() {
  sort(A.begin(), A.end(), comp);
  int c = 100000000;
  vector<int> D(n, c);
  if (A[0].second != 0)
    return false;
  else
    D[0] = c;
  for (int(i) = (1); (i) < (n); (i)++) {
    if (A[i].second == 0) {
      int m = 0;
      for (int(j) = (0); (j) < (i); (j)++) m = max(m, D[j]);
      D[i] = m + 1;
    } else {
      int k = ({
        typeof(1) X = 1, RRR = (Infinity), PPP = 1;
        while (PPP < RRR) {
          X = (PPP + (RRR - PPP) / 2);
          if (greate(D, X, i) <= A[i].second)
            RRR = X;
          else
            PPP = X + 1;
        }
        PPP;
      });
      if (greate(D, k, i) != A[i].second) return false;
      for (int(j) = (0); (j) < (i); (j)++)
        if (D[j] >= k) D[j]++;
      D[i] = k;
    }
  }
  for (int(i) = (0); (i) < (n); (i)++)
    cout << A[i].first << " " << D[i] << "\n";
  return true;
}
int main() {
  readData();
  if (!solve()) cout << -1;
  return 0;
}
