#include using namespace std; using ll = long long; #ifdef LOCAL #include #else #define debug(...) #endif constexpr int INF = (1 << 30) - 1; int main() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(20); int N, M; cin >> N >> M; vector> G(N); for (int i = 0; i < M; i++) { int U, V; cin >> U >> V, U--, V--; G[U].emplace_back(V); G[V].emplace_back(U); } int K; cin >> K; vector isiwi(N); for (int i = 0; i < K; i++) { int A; cin >> A, A--; isiwi[A] = true; } vector dist(5, vector(N, INF)); queue> que; dist[0][0] = 0; que.emplace(0, 0); while (!que.empty()) { auto [iwi, v] = que.front(); que.pop(); for (auto u : G[v]) { int niwi = isiwi[u] ? iwi + 1 : 0; if (niwi >= 5) continue; if (dist[niwi][u] != INF) continue; dist[niwi][u] = dist[iwi][v] + 1; que.emplace(niwi, u); } } int ans = INF; for (int i = 0; i < 5; i++) { ans = min(ans, dist[i][N - 1]); } cout << (ans == INF ? -1 : ans) << "\n"; }