/*
* GSJANC
* Author: Omkar Prabhu <omkar.prabhu15@siesgst.ac.in>
*/
#include <bits/stdc++.h>
using namespace std;
#define MAX 12345
int visited[ MAX] ;
int dist[ MAX] ;
vector< int > v[ MAX+ 1 ] ;
void bfs( int s, int e, int n)
{
for ( int i = 0 ; i <= n; i++ ) { visited[ i] = 0 ; dist[ i] = 0 ; }
visited[ s] = 1 ;
queue< int > q;
q.push ( s) ;
while ( ! q.empty ( ) ) {
int x = q.front ( ) ; q.pop ( ) ;
for ( int i = 0 ; i < v[ x] .size ( ) ; i++ ) {
if ( visited[ v[ x] [ i] ] == 0 ) {
dist[ v[ x] [ i] ] = dist[ x] + 1 ;
visited[ v[ x] [ i] ] = 1 ;
q.push ( v[ x] [ i] ) ;
}
}
}
}
int main( )
{
ios_base:: sync_with_stdio ( 0 ) ;
// Start Solution here
int t, n, m, s, e, a, b;
cin >> t;
while ( t-- ) {
cin >> n >> m >> s >> e;
for ( int i = 0 ; i <= n; i++ ) v[ i] .clear ( ) ;
for ( int tt = 0 ; tt < m; tt++ ) {
cin >> a >> b;
v[ a] .push_back ( b) ;
v[ b] .push_back ( a) ;
}
bfs( s, e, n) ;
if ( dist[ e] == 0 ) cout << "NO" << endl;
else cout << "YES " << ( dist[ e] - 1 ) << endl;
}
// End Solution here
return 0 ;
} #include <iostream>
using namespace std;
int main( ) {
// your code goes here
return 0 ;
}
LyoKICoJR1NKQU5DCiAqCUF1dGhvcjogT21rYXIgUHJhYmh1IDxvbWthci5wcmFiaHUxNUBzaWVzZ3N0LmFjLmluPgogKi8KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAojZGVmaW5lIE1BWCAxMjM0NQogCmludCB2aXNpdGVkW01BWF07CmludCBkaXN0W01BWF07CnZlY3RvcjxpbnQ+IHZbTUFYKzFdOwogCnZvaWQgYmZzKGludCBzLCBpbnQgZSwgaW50IG4pCnsKCWZvciAoaW50IGkgPSAwOyBpIDw9IG47IGkrKykgeyB2aXNpdGVkW2ldID0gMDsgZGlzdFtpXSA9IDA7IH0KCXZpc2l0ZWRbc10gPSAxOwoJcXVldWU8aW50PiBxOwoJcS5wdXNoKHMpOwoJd2hpbGUgKCFxLmVtcHR5KCkpIHsKCQlpbnQgeCA9IHEuZnJvbnQoKTsgcS5wb3AoKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IHZbeF0uc2l6ZSgpOyBpKyspIHsKCQkJaWYgKHZpc2l0ZWRbdlt4XVtpXV0gPT0gMCkgewoJCQkJZGlzdFt2W3hdW2ldXSA9IGRpc3RbeF0rMTsKCQkJCXZpc2l0ZWRbdlt4XVtpXV0gPSAxOwoJCQkJcS5wdXNoKHZbeF1baV0pOwoJCQl9CgkJfQoJfQp9IAogCmludCBtYWluKCkKewoJaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKCS8vIFN0YXJ0IFNvbHV0aW9uIGhlcmUKCWludCB0LCBuLCBtLCBzLCBlLCBhLCBiOwoJY2luID4+IHQ7Cgl3aGlsZSAodC0tKSB7CgkJY2luID4+IG4gPj4gbSA+PiBzID4+IGU7CgkJZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKSB2W2ldLmNsZWFyKCk7CgkJZm9yIChpbnQgdHQgPSAwOyB0dCA8IG07IHR0KyspIHsKCQkJY2luID4+IGEgPj4gYjsKCQkJdlthXS5wdXNoX2JhY2soYik7CgkJCXZbYl0ucHVzaF9iYWNrKGEpOwoJCX0KCQliZnMocywgZSwgbik7CgkJaWYgKGRpc3RbZV0gPT0gMCkgY291dCA8PCAiTk8iIDw8IGVuZGw7CgkJZWxzZSBjb3V0IDw8ICJZRVMgIiA8PCAoZGlzdFtlXS0xKSA8PCBlbmRsOyAKCX0KCS8vIEVuZCBTb2x1dGlvbiBoZXJlCglyZXR1cm4gMDsKfSAjaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKLy8geW91ciBjb2RlIGdvZXMgaGVyZQpyZXR1cm4gMDsKfQ==