#include #include #include #include #include #include using namespace atcoder; using namespace std; using ll = long long; using ull = unsigned long long; template using max_heap = priority_queue; template using min_heap = priority_queue, greater<>>; ll ll_min = numeric_limits::min(); ll ll_max = numeric_limits::max(); ll ALPHABET_N = 26; using mint = modint998244353; #define rep(i, n) for (ll i = (ll)0; i < (ll)n; i++) #define rep_(i, k, n) for (ll i = (ll)k; i < (ll)n; i++) #define all(a) a.begin(), a.end() int main() { ios::sync_with_stdio(false); cin.tie(0); ll n, m; cin >> n >> m; vector> g(n); rep(i, m) { ll a, b; cin >> a >> b; a--; b--; g[a].push_back(b); g[b].push_back(a); } ll k; cin >> k; set st; rep(i, k) { ll a; cin >> a; a--; st.insert(a); } vector> min_cost(n, vector(5, ll_max)); min_cost[0][0] = 0; queue> que; que.push({0, 0, 0}); while (!que.empty()) { auto [v, c, cdist] = que.front(); que.pop(); for (auto nv : g[v]) { ll nc; if (st.count(nv)) { nc = c + 1; } else { nc = 0; } if (nc > 4) continue; ll ncdist = cdist + 1; if (min_cost[nv][nc] > ncdist) { min_cost[nv][nc] = ncdist; que.push({nv, nc, ncdist}); } } } ll ans = ll_max; rep(i, 5) { ans = min(ans, min_cost[n - 1][i]); } if (ans == ll_max) ans = -1; cout << ans << endl; return 0; }