CSES - Shared codeLink to this code: https://cses.fi/paste/4d13d983bfe2cea1ad2378/
#include "bits/stdc++.h"
using namespace std;
constexpr int INF = 1e9;
int main() {
int n; cin >> n;
int m; cin >> m;
vector<array<int, 2>> e(m);
vector<vector<int>> adj(n);
for (auto& [a, b] : e) {
cin >> a >> b;
--a, --b;
adj[a].push_back(b);
adj[b].push_back(a);
}
vector<int> d;
auto bfs = [&](int s, int t) -> void {
d.assign(n, INF);
queue<int> Q;
d[s] = 0;
Q.push(s);
while (!Q.empty()) {
int v = Q.front();
Q.pop();
for (int u : adj[v]) {
if (pair(v, u) == pair(s, t) || pair(u, v) == pair(s, t))
continue;
if (d[u] != INF)
continue;
d[u] = d[v] + 1;
Q.push(u);
}
}
};
int ans = INF;
for (auto [a, b] : e) {
bfs(a, b);
if (d[b] != INF) {
ans = min(ans, d[b] + 1);
}
}
cout << (ans == INF ? -1 : ans) << "\n";
}