n, m = gets.not_nil!.split.map(&.to_i) g = Array.new(n) { [] of Int32 } m.times do u, v = gets.not_nil!.split.map(&.to_i) u -= 1 v -= 1 g[u] << v g[v] << u end flg = Array.new(n, false) k = gets.not_nil!.to_i k.times do x = gets.not_nil!.to_i x -= 1 flg[x] = true end dist = Array.new(n) { Array.new(5, -1) } dq = Deque(Tuple(Int32, Int32)).new dist[0][0] = 0 dq.push({0, 0}) until dq.empty? u, c = dq.shift g[u].each do |v| nc = flg[v] ? c + 1 : 0 if nc < 5 && dist[v][nc] == -1 dist[v][nc] = dist[u][c] + 1 dq.push({v, nc}) end end end INF = 1_000_000_000 ans = INF 5.times do |i| if dist[n - 1][i] != -1 ans = Math.min(ans, dist[n - 1][i]) end end ans = -1 if ans == INF puts ans