/*
 * zyobusuku.c
 *
 *  Created on: 2016/03/18
 *      Author: Owner
 */



#include<stdio.h>
#include<stdlib.h>


typedef struct Numbers{
	int turn; //?????????(??????????????????????????????)
	int flag; //flag==1????????????????????¶?´?????????£?????????
	int read; //read==1???????????¢?´¢??????
	int num; //?????????
}str;


int N,K,Turn_now;
int **job;//job[????????°???][????????°????????????????????°???]
str *Number;//??????????????????????????±

//?????????????°??????????????????????????????????
int compare(const void *arg1,const void *arg2){
	return ((str*)arg1)->turn - ((str*)arg2)->turn;
}

//??±???????????¢?´¢??§????????£?????\?????¨????????????????????°??????
void Check_Number(int Node){
	int i,t;
	//???????????£?????¨?????????????????????
	if(Number[Node].read == 1){
		return;
	}
	Number[Node].read = 1;

	//????????????????????????
	for(i=0;job[Node][i] != 0;i++){
		t = job[Node][i];
		//printf("??????%d??§??????????¬????%d????????§??????????\n",Node,t);
		Check_Number(t);
	}

	Number[Node].turn = Turn_now; //??????????????????
	Turn_now++;
	return;
}

//????????????????????????????????¨????????????????§????
int main(){
	int i,j,n,m;
	scanf("%d %d",&N,&K);
	//job[????????°???][????????°????????????????????°???]
	job = malloc(sizeof(int*)*N);
	Number = (str*)malloc(sizeof(str)*N);
	for(i=0;i<N;i++){
		job[i] = malloc(sizeof(int)*N);
	}
	//?????????
	for(i=0;i<N;i++){
		Number[i].flag = 0;
		Number[i].turn = 0;
		Number[i].read = 0;
		Number[i].num = i;

		for(j=0;j<N;j++){
			job[i][j] = 0;
		}
	}

	//job?????£??\
	for(i=0;i<K;i++){
		scanf("%d %d",&n,&m);
		for(j=0;j<N;j++){
			if(job[m][j] == 0){
				break;
			}
		}
		job[m][j] = n;
		//printf("%d???%d?????????%d???????´??????????????\n",n,j,m);
		Number[n].flag = 1;
	}
	for(i=0;i<N;i++){
		//????????????????????????????????¶?´?????????£?????????????????°
		if(Number[i].flag == 0){
			Check_Number(i); //???????????????????????????????????°
		}
	}


    //?????????????????????
	qsort(&(Number[0]),N,sizeof(str),compare);

	for(i=0;i<N;i++){
		printf("%d ",Number[i].num);
		printf("%d?\n",Number[i].turn);
	}

	//?§£???
	free(Number);
	for(i=0;i<N;i++){
		free(job[i]);
	}
	return 0;
}