#include <bits/stdc++.h>
#define ll long long
#define el cout << '\n'
#define ii pair<int, int>
#define fi first
#define se second
#define mp make_pair
using namespace std;
struct Node
{
int top, idx, dist;
Node(int top = 0, int idx = 0, int dist = 0) :
top(top), idx(idx), dist(dist) {};
};
const int maxn = 2e5;
const int INF = 1e9;
int t, n, m, q, id[maxn + 10], low[maxn + 10], timer = 0;
ii ans[maxn + 10];
vector<ii> adj[maxn + 10];
queue<Node> qe;
bool dfs(int top, int p = -1)
{
bool is_par_n = 0;
id[top] = low[top] = ++timer;
for (ii pr : adj[top])
{
int next_top = pr.fi;
int idx = pr.se;
if (next_top == p)
continue;
if (id[next_top])
low[top] = min(low[top], id[next_top]);
else
{
bool flag = dfs(next_top, top);
is_par_n |= flag;
low[top] = min(low[next_top], low[top]);
if (low[next_top] == id[next_top] && flag)
{
qe.push(Node(top, idx, 0));
qe.push(Node(next_top, idx, 0));
ans[top] = min(ans[top], {0, idx});
ans[next_top] = min(ans[next_top], {0, idx});
}
}
}
return is_par_n || top == n;
}
int main()
{
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if (fopen("F.INP", "r"))
{
freopen("F.INP", "r", stdin);
freopen("F.OUT", "w", stdout);
}
cin >> t;
while (t--)
{
timer = 0;
cin >> n >> m;
while (qe.size())
qe.pop();
for (int i = 1; i <= n; i++)
{
adj[i].clear();
id[i] = low[i] = 0;
ans[i] = {INF, -1};
}
for (int i = 1; i <= m; i++)
{
int x, y;
cin >> x >> y;
adj[x].push_back({y, i});
adj[y].push_back({x, i});
}
dfs(1);
while (qe.size())
{
Node t = qe.front();
qe.pop();
int top = t.top;
int dist = t.dist;
int idx = t.idx;
if (dist > ans[top].fi)
continue;
for (ii pr : adj[top])
{
int next_top = pr.fi;
if (ans[next_top] > mp(ans[top].fi + 1, ans[top].se))
{
ans[next_top] = {ans[top].fi + 1, ans[top].se};
qe.push(Node(next_top, ans[next_top].se, ans[next_top].fi));
}
}
}
cin >> q;
for (int i = 1; i <= q; i++)
{
int x;
cin >> x;
cout << ans[x].se << ' ';
}
el;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIGVsIGNvdXQgPDwgJ1xuJwojZGVmaW5lIGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBtcCBtYWtlX3BhaXIKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgTm9kZQp7CiAgICBpbnQgdG9wLCBpZHgsIGRpc3Q7CgogICAgTm9kZShpbnQgdG9wID0gMCwgaW50IGlkeCA9IDAsIGludCBkaXN0ID0gMCkgOgogICAgICAgIHRvcCh0b3ApLCBpZHgoaWR4KSwgZGlzdChkaXN0KSB7fTsKfTsKCmNvbnN0IGludCBtYXhuID0gMmU1Owpjb25zdCBpbnQgSU5GID0gMWU5OwoKaW50IHQsIG4sIG0sIHEsIGlkW21heG4gKyAxMF0sIGxvd1ttYXhuICsgMTBdLCB0aW1lciA9IDA7CmlpIGFuc1ttYXhuICsgMTBdOwp2ZWN0b3I8aWk+IGFkalttYXhuICsgMTBdOwpxdWV1ZTxOb2RlPiBxZTsKCmJvb2wgZGZzKGludCB0b3AsIGludCBwID0gLTEpCnsKICAgIGJvb2wgaXNfcGFyX24gPSAwOwogICAgaWRbdG9wXSA9IGxvd1t0b3BdID0gKyt0aW1lcjsKICAgIGZvciAoaWkgcHIgOiBhZGpbdG9wXSkKICAgIHsKICAgICAgICBpbnQgbmV4dF90b3AgPSBwci5maTsKICAgICAgICBpbnQgaWR4ID0gcHIuc2U7CiAgICAgICAgaWYgKG5leHRfdG9wID09IHApCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGlmIChpZFtuZXh0X3RvcF0pCiAgICAgICAgICAgIGxvd1t0b3BdID0gbWluKGxvd1t0b3BdLCBpZFtuZXh0X3RvcF0pOwogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGJvb2wgZmxhZyA9IGRmcyhuZXh0X3RvcCwgdG9wKTsKICAgICAgICAgICAgaXNfcGFyX24gfD0gZmxhZzsKICAgICAgICAgICAgbG93W3RvcF0gPSBtaW4obG93W25leHRfdG9wXSwgbG93W3RvcF0pOwogICAgICAgICAgICBpZiAobG93W25leHRfdG9wXSA9PSBpZFtuZXh0X3RvcF0gJiYgZmxhZykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcWUucHVzaChOb2RlKHRvcCwgaWR4LCAwKSk7CiAgICAgICAgICAgICAgICBxZS5wdXNoKE5vZGUobmV4dF90b3AsIGlkeCwgMCkpOwogICAgICAgICAgICAgICAgYW5zW3RvcF0gPSBtaW4oYW5zW3RvcF0sIHswLCBpZHh9KTsKICAgICAgICAgICAgICAgIGFuc1tuZXh0X3RvcF0gPSBtaW4oYW5zW25leHRfdG9wXSwgezAsIGlkeH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGlzX3Bhcl9uIHx8IHRvcCA9PSBuOwp9CgppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwogICAgaWYgKGZvcGVuKCJGLklOUCIsICJyIikpCiAgICB7CiAgICAgICAgZnJlb3BlbigiRi5JTlAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJGLk9VVCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KCiAgICBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pCiAgICB7CiAgICAgICAgdGltZXIgPSAwOwogICAgICAgIGNpbiA+PiBuID4+IG07CiAgICAgICAgd2hpbGUgKHFlLnNpemUoKSkKICAgICAgICAgICAgcWUucG9wKCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgYWRqW2ldLmNsZWFyKCk7CiAgICAgICAgICAgIGlkW2ldID0gbG93W2ldID0gMDsKICAgICAgICAgICAgYW5zW2ldID0ge0lORiwgLTF9OwogICAgICAgIH0KICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBtOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpbnQgeCwgeTsKICAgICAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICAgICAgYWRqW3hdLnB1c2hfYmFjayh7eSwgaX0pOwogICAgICAgICAgICBhZGpbeV0ucHVzaF9iYWNrKHt4LCBpfSk7CiAgICAgICAgfQogICAgICAgIGRmcygxKTsKICAgICAgICB3aGlsZSAocWUuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgICAgTm9kZSB0ID0gcWUuZnJvbnQoKTsKICAgICAgICAgICAgcWUucG9wKCk7CiAgICAgICAgICAgIGludCB0b3AgPSB0LnRvcDsKICAgICAgICAgICAgaW50IGRpc3QgPSB0LmRpc3Q7CiAgICAgICAgICAgIGludCBpZHggPSB0LmlkeDsKICAgICAgICAgICAgaWYgKGRpc3QgPiBhbnNbdG9wXS5maSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBmb3IgKGlpIHByIDogYWRqW3RvcF0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGludCBuZXh0X3RvcCA9IHByLmZpOwogICAgICAgICAgICAgICAgaWYgKGFuc1tuZXh0X3RvcF0gPiBtcChhbnNbdG9wXS5maSArIDEsIGFuc1t0b3BdLnNlKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBhbnNbbmV4dF90b3BdID0ge2Fuc1t0b3BdLmZpICsgMSwgYW5zW3RvcF0uc2V9OwogICAgICAgICAgICAgICAgICAgIHFlLnB1c2goTm9kZShuZXh0X3RvcCwgYW5zW25leHRfdG9wXS5zZSwgYW5zW25leHRfdG9wXS5maSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNpbiA+PiBxOwogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGludCB4OwogICAgICAgICAgICBjaW4gPj4geDsKICAgICAgICAgICAgY291dCA8PCBhbnNbeF0uc2UgPDwgJyAnOwogICAgICAgIH0KICAgICAgICBlbDsKICAgIH0KfQo=