/*思路比较简单,主要是没有数据规模,所以用了new 一片新空间的方法,
但是忘了怎么动态申请二维数组...以及最开始时直接把g初始化了....*/
#include<iostream>
#include<cstdio>
#include<string.h>
#include<cstring>
#include<string>
using namespace std;
int v,a,s,e;
int **g;
int *rec,*visit;
int main(){
int i;
while(scanf("%d%d",&v,&a)!=EOF){
int t = v + 1;
g = new int*[t];
for(i = 0; i <= v; ++i){
g[i] = new int[t];
memset(g[i],0,t * sizeof(int));
}
rec = new int[t];
visit = new int[t];
memset(visit,0,t*sizeof(int));
memset(rec,0,t*sizeof(int));
for(i = 0; i < a; ++i){
scanf("%d%d",&s,&e);
g[s][e] = 1;
rec[e]++;
}
int tt = v;
bool output = false;
while(tt > 0){
for(i = 1; i < t; ++i){
if(rec[i] == 0 && !visit[i])
break;
}
if(output)
printf(" ");
printf("v%d",i);
output = true;
visit[i] = 1;
--tt;
for(int j = 0; j < t; ++j){
if(g[i][j]){
--rec[j];
}
}
}
printf("\n");
for(int i = 0; i < t; ++i){
delete [] g[i];
g[i] = NULL;
}
delete [] g;
g = NULL;
delete [] rec;
rec = NULL;
delete []visit;
visit = NULL;
}
return 0;
}