#include <bits/stdc++.h>
using namespace std;
const double PI = acos(0) * 2;
const double EPS = 1e-8;
const long long MOD = 1e9 + 7;
const int MAXN = 1e5 + 5;
const int oo = 1e9;
const double foo = 1e30;
template <class T>
int getbit(T s, int i) {
  return (s >> i) & 1;
}
template <class T>
T onbit(T s, int i) {
  return s | (T(1) << i);
}
template <class T>
T offbit(T s, int i) {
  return s & (~(T(1) << i));
}
template <class T>
int cntbit(T s) {
  return __builtin_popcounll(s);
}
int n, m;
vector<pair<pair<int, int>, int> > q;
vector<pair<int, pair<int, int> > > ed;
vector<int> v;
int a[100100];
bool cmp(pair<pair<int, int>, int> a, pair<pair<int, int>, int> b) {
  if (a.first.first != b.first.first)
    return a.first.first < b.first.first;
  else
    return a.first.second > b.first.second;
}
int main() {
  cin >> n >> m;
  for (int i = 0; i < m; i++) {
    int x, y;
    cin >> x >> y;
    q.push_back(make_pair(make_pair(x, y), i));
  }
  sort(q.begin(), q.end(), cmp);
  v.clear();
  long long Ned = 1, cnt = 0;
  for (int i = 0; i < ((int)(q).size()); i++) {
    int x = q[i].first.second;
    int pos = q[i].second;
    if (x == 0 && cnt + 1 > Ned * (Ned - 1) / 2LL - Ned + 1) {
      cout << -1;
      return 0;
    } else if (x == 0) {
      cnt++;
    }
    if (x == 1) {
      Ned++;
    }
  }
  Ned = 1;
  for (int i = 0; i < ((int)(q).size()); i++) {
    int x = q[i].first.second;
    int pos = q[i].second;
    if (x == 0) {
      int t = v[((int)(v).size()) - 1];
      ed.push_back(make_pair(pos, make_pair(t, a[t])));
      a[t]++;
      if (a[t] == t) v.pop_back();
    }
    if (x == 1) {
      Ned++;
      if (Ned != 2) v.push_back(Ned);
      a[Ned] = 2;
      ed.push_back(make_pair(pos, make_pair(1, Ned)));
    }
  }
  sort(ed.begin(), ed.end());
  for (int i = 0; i < ((int)(ed).size()); i++)
    cout << ed[i].second.first << " " << ed[i].second.second << endl;
}
