//N連続岩井. #include using namespace std; #define int long long int N,M; int INF = 1e18; signed main(){ cin>>N>>M; vector> G(N); for(int i = 0; i < M; i++){ int u,v; cin>>u>>v; u--; v--; G[u].push_back(v); G[v].push_back(u); } vector> dist(5,vector(N,INF)); int K; cin>>K; vector A(N,false); for(int i = 0; i < K; i++){ int p; cin>>p; p--; A[p] = true; } queue> Q; Q.push({0,0}); dist[0][0] = 0; while(!Q.empty()){ int ren = Q.front().first; int pos = Q.front().second; Q.pop(); for(int i:G[pos]){ if(A[i]){ if(ren+1 >= 5) continue; if(dist[ren+1][i] != INF) continue; dist[ren+1][i] = dist[ren][pos] + 1; Q.push({ren+1,i}); } else{ if(dist[0][i] != INF) continue; dist[0][i] = dist[ren][pos] + 1; Q.push({0,i}); } } } int ans = min({dist[0][N-1],dist[1][N-1],dist[2][N-1],dist[3][N-1],dist[4][N-1]}); ans == INF ? cout << -1 << "\n" : cout << ans << "\n"; }