#include #include using namespace std; using namespace atcoder; #define ll long long #define rep(i,a,b) for(int i=(a);i<(b);i++) #define repl(i,a,b) for(ll i=(a);i<(b);i++) #define all(a) (a).begin(),(a).end() #define rall(a) (a).rbegin(),(a).rend() template bool chmin(T &a,T b){if(a>b){a=b;return true;} return false;} template bool chmax(T &a,T b){if(a> n >> m; vector> eq(n),neq(n); rep(i,0,m){ int a,b,c; cin >> a >> b >> c; a--,b--; if(c == 1){ eq[a].push_back(b); eq[b].push_back(a); } else{ neq[a].push_back(b); neq[b].push_back(a); } } int INF=1e9; vector dist(n,INF); queue que; que.push(0); dist[0]=0; while(!que.empty()){ auto v=que.front(); que.pop(); for(auto nv:eq[v]){ if(dist[nv] != INF) continue; dist[nv]=dist[v]+1; que.push(nv); } } if(dist[n-1] != INF){ cout << "Same" << "\n"; cout << dist[n-1] << "\n"; return; } int ans=INF; vector dist2(n,INF); dist2[n-1]=0; que.push(n-1); while(!que.empty()){ auto v=que.front(); que.pop(); for(auto nv:eq[v]){ if(dist2[nv] != INF) continue; dist2[nv]=dist2[v]+1; que.push(nv); } for(auto nv:neq[v]){ if(dist[nv] != INF){ chmin(ans,dist[nv]+dist2[v]+1); } } } if(ans != INF){ cout << "Different" << "\n"; cout << ans << "\n"; } else cout << "Unknown" << "\n"; return; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; while(T--) solve(); }