#include #include #include #include #include #include #include using namespace std; #define LL long long template void read (T &x) { x = 0; T f = 1; char ch = getchar (); while (ch < '0' || ch > '9') { if (ch == '-') f = -1; ch = getchar (); } while (ch >= '0' && ch <= '9') { x = (x << 3) + (x << 1) + ch - '0'; ch = getchar (); } x *= f; } template void write (T x) { if (x < 0) { x = -x; putchar ('-'); } if (x < 10) { putchar (x + '0'); return; } write (x / 10); putchar (x % 10 + '0'); } template void print (T x, char ch) { write (x); putchar (ch); } template T Min (T x, T y) { return x < y ? x : y; } template T Max (T x, T y) { return x > y ? x : y; } template T Abs (T x) { return x > 0 ? x : -x; } const int Maxn = 1e5; int t, n, m, k; int dp[Maxn + 5]; int main () { read (t); while (t--) { memset (dp, -0x3f, sizeof dp); read (n); read (m); read (k); dp[k] = 0; for (int i = 1; i <= m; i++) { int x, y; read (x); read (y); int val1 = dp[x] + 1, val2 = dp[y] + 1; dp[y] = Max (dp[y], val1); dp[x] = Max (dp[x], val2); dp[x]--; dp[y]--; } for (int i = 1; i < n; i++) { if (dp[i] + m < 0) print (-1, ' '); else print (-dp[i], ' '); } if (dp[n] + m < 0) printf ("-1"); else printf ("%d", -dp[n]); putchar ('\n'); } return 0; }