#include<bits/stdc++.h>
using namespace std;
long long n, m;
long long dis[55][55];
bool G[55][55], f[35][35][35];
long long len=1;
void dp(){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(G[i][j])
f[0][i][j]=true;
for(int i=1;i<=30;i++)
for(int k=1;k<=n;k++)
for(int u=1;u<=n;u++)
for(int v=1;v<=n;v++)
f[i][u][v]|=f[i-1][u][k]&f[i-1][k][v];
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x, y;
cin>>x>>y;
G[x][y]=true;
}
dp();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j) dis[i][j]=1e9;
for(int i=0;i<=30;i++)
for(int u=1;u<=n;u++)
for(int v=1;v<=n;v++)
if(f[i][u][v]) dis[u][v]=min(dis[u][v],len);
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(k!=i && k!=j && i!=j)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
cout<<dis[1][n]<<endl;
return 0;
}
哪位好心人帮忙看看有什么问题