#include <stdio.h>
#define N 200005
int c[N], size[N];
int find(int x) {
if (x != c[x])
c[x] = find(c[x]);
return c[x];
}
int unite(int x, int y) {
x = find(x);
y = find(y);
if (x == y) return 0;
if (size[x] < size[y]) {
int temp = x;
x = y;
y = temp;
}
c[y] = x;
size[x] += size[y];
return 1;
}
void solve() {
int n;
int s_indices[n], s_count = 0;
int used[n * 2], used_count = 0;
for (int i = 0; i < n; ++i) {
int u, v;
if (c[u] == 0) {
c[u] = u;
size[u] = 1;
used[used_count++] = u;
}
if (c[v] == 0) {
c[v] = v;
size[v] = 1;
used[used_count++] = v;
}
if (unite(u, v)) {
s_indices[s_count++] = i + 1;
}
}
for (int i = 0; i < s_count; ++i)
for (int i = 0; i < used_count; ++i) {
int x = used[i];
c[x] = 0;
size[x] = 0;
}
}
int main() {
int t;
while (t--) solve();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIE4gMjAwMDA1CgppbnQgY1tOXSwgc2l6ZVtOXTsKCmludCBmaW5kKGludCB4KSB7CiAgICBpZiAoeCAhPSBjW3hdKQogICAgICAgIGNbeF0gPSBmaW5kKGNbeF0pOwogICAgcmV0dXJuIGNbeF07Cn0KCmludCB1bml0ZShpbnQgeCwgaW50IHkpIHsKICAgIHggPSBmaW5kKHgpOwogICAgeSA9IGZpbmQoeSk7CiAgICBpZiAoeCA9PSB5KSByZXR1cm4gMDsKICAgIGlmIChzaXplW3hdIDwgc2l6ZVt5XSkgewogICAgICAgIGludCB0ZW1wID0geDsKICAgICAgICB4ID0geTsKICAgICAgICB5ID0gdGVtcDsKICAgIH0KICAgIGNbeV0gPSB4OwogICAgc2l6ZVt4XSArPSBzaXplW3ldOwogICAgcmV0dXJuIDE7Cn0KCnZvaWQgc29sdmUoKSB7CiAgICBpbnQgbjsKICAgIHNjYW5mKCIlZCIsICZuKTsKCiAgICBpbnQgc19pbmRpY2VzW25dLCBzX2NvdW50ID0gMDsKICAgIGludCB1c2VkW24gKiAyXSwgdXNlZF9jb3VudCA9IDA7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBzY2FuZigiJWQgJWQiLCAmdSwgJnYpOwoKICAgICAgICBpZiAoY1t1XSA9PSAwKSB7CiAgICAgICAgICAgIGNbdV0gPSB1OwogICAgICAgICAgICBzaXplW3VdID0gMTsKICAgICAgICAgICAgdXNlZFt1c2VkX2NvdW50KytdID0gdTsKICAgICAgICB9CgogICAgICAgIGlmIChjW3ZdID09IDApIHsKICAgICAgICAgICAgY1t2XSA9IHY7CiAgICAgICAgICAgIHNpemVbdl0gPSAxOwogICAgICAgICAgICB1c2VkW3VzZWRfY291bnQrK10gPSB2OwogICAgICAgIH0KCiAgICAgICAgaWYgKHVuaXRlKHUsIHYpKSB7CiAgICAgICAgICAgIHNfaW5kaWNlc1tzX2NvdW50KytdID0gaSArIDE7CiAgICAgICAgfQogICAgfQoKICAgIHByaW50ZigiJWRcbiIsIHNfY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzX2NvdW50OyArK2kpCiAgICAgICAgcHJpbnRmKCIlZCAiLCBzX2luZGljZXNbaV0pOwogICAgcHJpbnRmKCJcbiIpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNlZF9jb3VudDsgKytpKSB7CiAgICAgICAgaW50IHggPSB1c2VkW2ldOwogICAgICAgIGNbeF0gPSAwOwogICAgICAgIHNpemVbeF0gPSAwOwogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIGludCB0OwogICAgc2NhbmYoIiVkIiwgJnQpOwogICAgd2hpbGUgKHQtLSkgc29sdmUoKTsKICAgIHJldHVybiAwOwp9Cg==