#include using namespace std; vector BFS(vector> &Graph,int start){ int N = Graph.size(); vector ret(N,-1); queue Q; ret.at(start) = 0,Q.push(start); while(Q.size()){ int pos = Q.front(); Q.pop(); for(auto to : Graph.at(pos)){ if(ret.at(to) != -1) continue; ret.at(to) = ret.at(pos)+1; Q.push(to); } } return ret; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int N,M; cin >> N >> M; vector> UV(M); for(auto &[u,v] : UV) cin >> u >> v,u--,v--; int K; cin >> K; vector NG(N); while(K--){ int a; cin >> a; NG.at(a-1) = true; } vector> Graph(N*5); for(auto [u,v] : UV){ for(int k=0; k<5; k++){ if(NG.at(v)){ if(k < 4) Graph.at(u+k*N).push_back(v+k*N+N); } else Graph.at(u+k*N).push_back(v); swap(u,v); if(NG.at(v)){ if(k < 4) Graph.at(u+k*N).push_back(v+k*N+N); } else Graph.at(u+k*N).push_back(v); swap(u,v); } } auto dist = BFS(Graph,0); int answer = 1001001001; for(int i=0; i<5; i++){ if(dist.at(N-1+i*N) != -1) answer = min(answer,dist.at(N-1+i*N)); } if(answer > 1e9) answer = -1; cout << answer << endl; }