#include <bits/stdc++.h>
using namespace std;
template <class T1>
void deb(T1 e1) {
  cout << e1 << endl;
}
template <class T1, class T2>
void deb(T1 e1, T2 e2) {
  cout << e1 << " " << e2 << endl;
}
template <class T1, class T2, class T3>
void deb(T1 e1, T2 e2, T3 e3) {
  cout << e1 << " " << e2 << " " << e3 << endl;
}
template <class T1, class T2, class T3, class T4>
void deb(T1 e1, T2 e2, T3 e3, T4 e4) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << endl;
}
template <class T1, class T2, class T3, class T4, class T5>
void deb(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << " " << e5 << endl;
}
template <class T1, class T2, class T3, class T4, class T5, class T6>
void deb(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5, T6 e6) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << " " << e5 << " " << e6
       << endl;
}
struct data {
  int w, pos;
  bool mst;
  bool operator<(const data& p) const {
    if (w == p.w) {
      return mst > p.mst;
    }
    return w < p.w;
  }
} arr[100000 + 7];
int n, ed, possible[100000 + 7];
pair<int, int> ans[100000 + 7];
void reset();
bool cal();
int main() {
  int w, b, i, j, k;
  bool res;
  possible[1] = possible[2] = 0;
  for (i = 3; i <= 100000; i++) {
    possible[i] = possible[i - 1] + (i - 2);
  }
  while (scanf("%d %d", &n, &ed) == 2) {
    for (i = 0; i < ed; i++) {
      scanf("%d %d", &w, &b);
      arr[i].w = w;
      arr[i].mst = b;
      arr[i].pos = i;
    }
    res = cal();
    if (!res) {
      printf("-1\n");
    } else {
      for (i = 0; i < ed; i++) {
        printf("%d %d\n", ans[i].first, ans[i].second);
      }
    }
  }
  return 0;
}
void reset() {}
bool cal() {
  int u, v, v1, v2, lim, e = 0, i, j, k;
  sort(arr, arr + ed);
  lim = n - 1;
  u = 1;
  v1 = 1;
  v2 = 3;
  for (i = 0, j = 0; i < ed; i++) {
    if (!arr[i].mst) {
      if (v2 <= u) {
        ans[arr[i].pos].first = v1;
        ans[arr[i].pos].second = v2;
        if (v2 - v1 == 2) {
          v2++;
          v1 = 1;
        } else {
          v1++;
        }
      } else {
        break;
      }
    } else {
      ans[arr[i].pos].first = u;
      ans[arr[i].pos].second = ++u;
    }
  }
  return (i == ed);
}
