#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 9;
const int N = 1 << 20;
const int inf = 0x3f3f3f3f;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const long long mod = 1e9 + 7;
const int temp = 233;
const double eps = 0.0000001;
const double PI = acos(-1);
const int dx[] = {0, 0, 1, 1, 1, -1, -1, -1};
const int dy[] = {-1, 1, 1, -1, 0, 1, -1, 0};
inline int read() {
  int num = 0, w = 0;
  char ch = 0;
  while (!isdigit(ch)) {
    w |= ch == '-';
    ch = getchar();
  }
  while (isdigit(ch)) {
    num = (num << 3) + (num << 1) + (ch ^ 48);
    ch = getchar();
  }
  return w ? -num : num;
}
int n, m, t;
int s[maxn], u[maxn], v[maxn];
struct node {
  int w, op;
  int pos;
} a[maxn];
bool cmp(const node &s1, const node &s2) {
  if (s1.w == s2.w)
    return s1.op > s2.op;
  else
    return s1.w < s2.w;
}
void init() {
  for (int i = 1; i <= n; i++) s[i] = i + 2;
  memset(v, 0, sizeof v);
  memset(u, 0, sizeof u);
}
int main() {
  while (~scanf("%d%d", &n, &m) && n) {
    init();
    for (int i = 1; i <= m; i++) {
      scanf("%d%d", &a[i].w, &a[i].op);
      a[i].pos = i;
    }
    sort(a + 1, a + 1 + m, cmp);
    t = 1;
    int flag = 0;
    for (int i = 1; i <= m; i++) {
      int index = a[i].pos;
      if (a[i].op) {
        u[index] = t++;
        v[index] = t;
      } else {
        int k = 0;
        for (int j = 1; j <= t; j++) {
          if (s[j] <= t) {
            k = 1;
            u[index] = j;
            v[index] = s[j];
            s[j]++;
            break;
          }
        }
        if (!k) {
          flag = 1;
          break;
        }
      }
    }
    if (!flag) {
      for (int i = 1; i <= m; i++) {
        printf("%d %d\n", u[i], v[i]);
      }
    } else
      printf("-1\n");
  }
  return 0;
}
