#include <bits/stdc++.h>
using namespace std;
struct edge {
  bool flag;
  int u, v, w, no;
};
bool compw(const edge &A, const edge &B) {
  if (A.w != B.w) return A.w < B.w;
  return A.flag > B.flag;
}
bool compno(const edge &A, const edge &B) { return A.no < B.no; }
int n, m;
edge E[100007];
int cnt[100007] = {0};
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < m; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    E[i].w = a, E[i].flag = b;
    E[i].no = i;
  }
  int ucnt = 1, ecnt = 0;
  int u = 3, v = 2;
  bool flag = false;
  sort(E, E + m, compw);
  for (int i = 0; i < m; i++) {
    if (E[i].flag) {
      ucnt++;
      E[i].u = ucnt, E[i].v = 1;
    } else {
      int ke = (ucnt * (ucnt - 1)) / 2;
      if (i >= ke) {
        flag = true;
        break;
      }
      E[i].u = u, E[i].v = v;
      v++;
      if (u == v) v = 2, u++;
    }
  }
  if (flag) {
    printf("-1\n");
    return 0;
  }
  sort(E, E + m, compno);
  for (int i = 0; i < m; i++) printf("%d %d\n", E[i].u, E[i].v);
  return 0;
}
