//#include #include #include #include using std::vector; using std::queue; void bfs(vector> &adj, int s, vector &dist) { queue vertexQ; vertexQ.push(s); while (!vertexQ.empty()) { int u = vertexQ.front(); vertexQ.pop(); for (int i : adj[u]) { if (dist[i] == -1) { vertexQ.push(i); dist[i] = dist[u] + 1; } } } } int distance(vector > &adj, int s, int t) { vector dist(adj.size(), -1); dist[s] = 0; bfs(adj, s, dist); return dist[t]; } int main() { int n, m; std::cin >> n >> m; vector > adj(n, vector()); for (int i = 0; i < m; i++) { int x, y; std::cin >> x >> y; adj[x - 1].push_back(y - 1); adj[y - 1].push_back(x - 1); } int s, t; std::cin >> s >> t; s--, t--; std::cout << distance(adj, s, t); } //TEST(Acyclicity, ac1) { // vector> adj = { { 1 }, { 2 }, { 0 }, { 0 } }; // ASSERT_EQ(acyclic(adj), 1); //}