#include #include #include using namespace std; using Graph = vector>; int N, M; Graph G(200010); bool ok[200010]; int D[200010]; void bfs_forbidden(int src, int dist){ for (int i=1;i<=N;i++) D[i]=-1; D[src]=0; ok[src]=false; queue Q; Q.push(src); while(! Q.empty()){ int cur = Q.front(); Q.pop(); if (D[cur]==dist) continue; for (auto dst:G[cur]){ if(! ok[dst]) continue; D[dst]=D[cur]+1; ok[dst]=false; Q.push(dst); } } return; } int main(){ cin>>N>>M; for (int i=0;i>U>>V; G[U].push_back(V); G[V].push_back(U); } int L; cin>>L; fill(&ok[0], &ok[0]+200010, true); for (int i=0;i>J>>K; bfs_forbidden(J, K); } if(! ok[1]) { cout << "No" << "\n"; return 0; } for (int i=1;i<=N;i++) D[i]=-1; D[1]=0; queue Q; Q.push(1); while(! Q.empty()){ int cur = Q.front(); Q.pop(); for (auto dst:G[cur]){ if(! ok[dst]) continue; if(D[dst]!=-1) continue; D[dst]=D[cur]+1; Q.push(dst); } } if(D[N]!=-1) { cout << "Yes" << "\n"; cout << D[N] << "\n"; } else cout << "No" << "\n"; return 0; }