#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<vector>
#include<cstdio>
#include<cmath>
#include<stack>
#include<queue>
#include<set>
#include<map>
#define ll long long
using namespace std;
const int maxn=5e5+10;
ll n,m,s1,s2,t1,t2,d[maxn];
vector<int> e[maxn];
priority_queue<int> q1;
priority_queue<int,vector<int>,greater<int> > q2;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
ll x,y;
scanf("%d%d",&x,&y);
e[x].push_back(y);
d[y]++;
}
for(int i=1;i<=n;i++)
{
if(d[i]==0)
{
q1.push(i);
q2.push(i);
}
}
while(!q1.empty())
{
int x=q1.top();
cout<<"*"<<x<<endl;
q1.pop();
if(x>=t1)
{
t1=x;
s1++;
}
for(int i=0;i<e[x].size();i++)
{
int y=e[x][i];
d[y]--;
if(d[y]==0) q1.push(y);
}
}
while(!q2.empty())
{
int x=q2.top();
q2.pop();
if(x>=t2)
{
t2=x;
s2++;
}
for(int i=0;i<e[x].size();i++)
{
int y=e[x][i];
d[y]--;
if(d[y]==0) q2.push(y);
}
}
cout<<s1<<"\n"<<s2<<"\n";
return 0;
}