#include <stdio.h>
#define N 200005
int c[N], size[N];
int used[N], used_count;
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;
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+CgojZGVmaW5lIE4gMjAwMDA1CgppbnQgY1tOXSwgc2l6ZVtOXTsKaW50IHVzZWRbTl0sIHVzZWRfY291bnQ7CgppbnQgZmluZChpbnQgeCkgewogICAgaWYgKHggIT0gY1t4XSkKICAgICAgICBjW3hdID0gZmluZChjW3hdKTsKICAgIHJldHVybiBjW3hdOwp9CgppbnQgdW5pdGUoaW50IHgsIGludCB5KSB7CiAgICB4ID0gZmluZCh4KTsKICAgIHkgPSBmaW5kKHkpOwogICAgaWYgKHggPT0geSkgcmV0dXJuIDA7CiAgICBpZiAoc2l6ZVt4XSA8IHNpemVbeV0pIHsKICAgICAgICBpbnQgdGVtcCA9IHg7CiAgICAgICAgeCA9IHk7CiAgICAgICAgeSA9IHRlbXA7CiAgICB9CiAgICBjW3ldID0geDsKICAgIHNpemVbeF0gKz0gc2l6ZVt5XTsKICAgIHJldHVybiAxOwp9Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IG47CiAgICBzY2FuZigiJWQiLCAmbik7CgogICAgaW50IHNfaW5kaWNlc1tuXSwgc19jb3VudCA9IDA7CiAgICB1c2VkX2NvdW50ID0gMDsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIGludCB1LCB2OwogICAgICAgIHNjYW5mKCIlZCAlZCIsICZ1LCAmdik7CgogICAgICAgIGlmIChjW3VdID09IDApIHsKICAgICAgICAgICAgY1t1XSA9IHU7CiAgICAgICAgICAgIHNpemVbdV0gPSAxOwogICAgICAgICAgICB1c2VkW3VzZWRfY291bnQrK10gPSB1OwogICAgICAgIH0KCiAgICAgICAgaWYgKGNbdl0gPT0gMCkgewogICAgICAgICAgICBjW3ZdID0gdjsKICAgICAgICAgICAgc2l6ZVt2XSA9IDE7CiAgICAgICAgICAgIHVzZWRbdXNlZF9jb3VudCsrXSA9IHY7CiAgICAgICAgfQoKICAgICAgICBpZiAodW5pdGUodSwgdikpIHsKICAgICAgICAgICAgc19pbmRpY2VzW3NfY291bnQrK10gPSBpICsgMTsKICAgICAgICB9CiAgICB9CgogICAgcHJpbnRmKCIlZFxuIiwgc19jb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNfY291bnQ7ICsraSkKICAgICAgICBwcmludGYoIiVkICIsIHNfaW5kaWNlc1tpXSk7CiAgICBwcmludGYoIlxuIik7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2VkX2NvdW50OyArK2kpIHsKICAgICAgICBpbnQgeCA9IHVzZWRbaV07CiAgICAgICAgY1t4XSA9IDA7CiAgICAgICAgc2l6ZVt4XSA9IDA7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgaW50IHQ7CiAgICBzY2FuZigiJWQiLCAmdCk7CiAgICB3aGlsZSAodC0tKSBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K