//#define _GLIBCXX_DEBUG #include using namespace std; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) #define all(a) (a).begin(), (a).end() using ll = long long; const ll INF32 = 2e9; const ll INF64 = 4e18; void printYN(bool ok){ if(ok)cout << "Yes" << endl; else cout << "No" << endl; return; } int main() { int N, M; cin >> N >> M; vector> G(N); rep(i, M){ int u, v; cin >> u >> v; u--; v--; G[u].push_back(v); G[v].push_back(u); } vector IWAI(N); int K; cin >> K; rep(i, K){ int ai; cin >> ai; ai--; IWAI[ai] = true; } vector> dist(5, vector(N, INF32)); dist[0][0] = 0; queue> q; q.push({0,0}); while(!q.empty()){ auto [i, j] = q.front(); q.pop(); for(auto p: G[j]){ int nxi; if(IWAI[p])nxi = i+1; else nxi = 0; if(nxi>=5)continue; if(dist[nxi][p]!=INF32)continue; dist[nxi][p] = dist[i][j] +1; q.push({nxi, p}); } } int ans = INF32; rep(i, 5)ans = min(ans, dist[i][N-1]); if(ans!=INF32)cout << ans << endl; else cout << -1 << endl; return 0; }