#include #include #include #include int main() { int N, M; std::cin >> N >> M; std::vector> graph(N); while (M--) { int U, V; std::cin >> U >> V; U--, V--; graph[U].emplace_back(V); graph[V].emplace_back(U); } std::vector has_yiwiy9(N); int K; std::cin >> K; while (K--) { int A; std::cin >> A; A--; has_yiwiy9[A] = true; } std::vector> dist(N, std::vector(5, -1)); std::queue> queue; queue.push({0, 0, 0}); while (queue.size()) { auto [u, d, n] = queue.front(); queue.pop(); if (dist[u][d] != -1) continue; dist[u][d] = n; for (int v : graph[u]) { int nd = has_yiwiy9[v] ? d + 1 : 0; if (nd == 5) continue; if (dist[v][nd] != -1) continue; queue.push({v, nd, n + 1}); } } int result = -1; for (int d = 0; d < 5; d++) { if (result == -1 || dist[N - 1][d] != -1 && result > dist[N - 1][d]) result = dist[N - 1][d]; } std::cout << result << std::endl; }