#include #include #include using namespace std; const int INF = 10000002; void solve(){ int N, M; cin >> N >> M; vector A(M); vector B(M); vector C(M); for (int i = 0; i < M; i++){ cin >> A[i] >> B[i] >> C[i]; A[i]--; B[i]--; } vector> graph(2 * N, vector(0)); vector dist(2 * N, INF); for (int i = 0; i < M; i++){ if (C[i] == 1){ graph[A[i]].push_back(B[i]); graph[B[i]].push_back(A[i]); graph[A[i] + N].push_back(B[i] + N); graph[B[i] + N].push_back(A[i] + N); } else{ graph[A[i]].push_back(B[i] + N); graph[B[i]].push_back(A[i] + N); graph[A[i] + N].push_back(B[i] + N); graph[B[i] + N].push_back(A[i] + N); } } queue que; que.push(0); dist[0] = 0; while (que.size()){ int p = que.front(); que.pop(); for (int x: graph[p]){ if (dist[x] == INF){ dist[x] = dist[p] + 1; que.push(x); } } } if (dist[N - 1] < INF){ cout << "Same" << endl; cout << dist[N - 1] << endl; } else if (dist[2 * N - 1] < INF){ cout << "Different" << endl; cout << dist[2 * N - 1] << endl; } else{ cout << "Unknown" << endl; } } int main(){ int T; cin >> T; while (T--) solve(); }