//拓扑排序
#include<bits/stdc++.h>
using namespace std;
queue<int>q;
int n,m;
int in[1000];
bool b[1001];
struct node
{
int n;
node *next;
}*e[1000];
int main()
{
cin>>n>>m;
node *p;
int x;
for(int i=1;i<=m;i++)
{
p=new node();
cin>>x>>p->n;
in[p->n]+=1;
if(e[x]==NULL)
e[x]=p;
else
{
p->next=e[x]->next;
e[x]->next=p;
}
}
for(int i=1;i<=n;i++)
if(in[i]==0)
q.push(i);
while(!q.empty())
{
node *p;
p=e[q.front()];
cout<<q.front()<<"->";
while(p!=NULL)
{
in[p->n]-=1;
if(in[p->n]==0)
q.push(p->n);
p=p->next;
}
q.pop();
}
return 0;
}