n,m=map(int,input().split())
inc=[0]*m
edges=[]
for i in range(m):
a,b=map(int,input().split())
inc[i]=b
edges.append((a,b,i))
edges.sort(key=lambda x:(x[0],-x[1]))
ans=[[] for _ in range(m)]
last=1
fro=2
to=3
f=True
for a,b,ind in edges:
if inc[ind]:
last+=1
ans[ind]=[1,last]
else:
if to==fro:
to+=1
fro=2
if to>last:
f=False
break
ans[ind]=[fro,to]
fro+=1
if f:
for el in ans:
print(*el)
else:
print(-1)
1358D - The Best Vacation | 1620B - Triangles on a Rectangle |
999C - Alphabetic Removals | 1634C - OKEA |
1368C - Even Picture | 1505F - Math |
1473A - Replacing Elements | 959A - Mahmoud and Ehab and the even-odd game |
78B - Easter Eggs | 1455B - Jumps |
1225C - p-binary | 1525D - Armchairs |
1257A - Two Rival Students | 1415A - Prison Break |
1271A - Suits | 259B - Little Elephant and Magic Square |
1389A - LCM Problem | 778A - String Game |
1382A - Common Subsequence | 1512D - Corrupted Array |
667B - Coat of Anticubism | 284B - Cows and Poker Game |
1666D - Deletive Editing | 1433D - Districts Connection |
2B - The least round way | 1324A - Yet Another Tetris Problem |
246B - Increase and Decrease | 22E - Scheme |
1566A - Median Maximization | 1278A - Shuffle Hashing |