#include <bits/stdc++.h>
using namespace std;
const double PI = 2.0 * acos(0.0);
inline int getInt() {
  int x;
  scanf("%d", &x);
  return x;
}
inline long long getLL() {
  long long x;
  scanf("%lld", &x);
  return x;
};
inline int NUM(char c) { return (int)c - 48; }
inline char CHR(int n) { return (char)(n + 48); }
template <class T>
inline T MAX(T a, T b) {
  if (a > b) return a;
  return b;
}
template <class T>
inline T MIN(T a, T b) {
  if (a < b) return a;
  return b;
}
inline void OPEN(string s) {
  freopen((s + ".in").c_str(), "r", stdin);
  freopen((s + ".out").c_str(), "w", stdout);
}
int N;
struct orang {
  string nama;
  int a, h;
  bool operator<(const orang &o) const { return a < o.a; }
};
orang O[3000 + 5];
vector<int> v;
int main() {
  scanf("%d", &N);
  for (int i = 0, _n = (N); i < _n; i++) cin >> O[i].nama >> O[i].a;
  sort(O, O + N);
  bool flag = true;
  int height = N;
  for (int i = 0, _n = (N); i < _n; i++) {
    if (O[i].a > (v).size()) {
      flag = false;
      break;
    } else {
      v.insert(v.begin() + O[i].a, i);
      O[i].h = height--;
    }
  }
  if (!flag)
    puts("-1");
  else {
    for (int i = 0, _n = (N); i < _n; i++) {
      int j = v[i];
      printf("%s %d\n", O[j].nama.c_str(), O[j].h);
    }
  }
  return 0;
}
