#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx")
using namespace std;
int a, b, c, d, n, m, k, kolt;
vector<int> sm[1002];
bool cA[1002], cB[1002], used[1002];
bool dfs(int v, int t, vector<int>& path) {
  path.push_back(v);
  used[v] = 1;
  if (v == t) {
    return 1;
  }
  for (int _n(((int)((sm[v]).size())) - 1), i(0); i <= _n; i++) {
    int w = sm[v][i];
    if (used[w]) continue;
    if (dfs(w, t, path)) return 1;
  }
  path.pop_back();
  return 0;
}
int main() {
  scanf("%d", &kolt);
  for (int _n((kolt)), hod(1); hod <= _n; hod++) {
    scanf("%d", &n);
    for (int _n((n)-1), i(0); i <= _n; i++) {
      sm[i].clear();
      cA[i] = 0;
      cB[i] = 0;
      used[i] = 0;
    }
    for (int _n((n - 1) - 1), i(0); i <= _n; i++) {
      scanf("%d%d", &a, &b);
      --a;
      --b;
      sm[a].push_back(b);
      sm[b].push_back(a);
    }
    vector<int> A, B;
    scanf("%d", &m);
    for (int _n((m)-1), i(0); i <= _n; i++) {
      scanf("%d", &a);
      --a;
      A.push_back(a);
      cA[a] = 1;
    }
    scanf("%d", &k);
    for (int _n((k)-1), i(0); i <= _n; i++) {
      scanf("%d", &b);
      --b;
      B.push_back(b);
      cB[b] = 1;
    }
    int base = B[0];
    printf("B %d\n", base + 1);
    fflush(stdout);
    scanf("%d", &a);
    --a;
    if (cA[a]) {
      printf("C %d\n", a + 1);
      fflush(stdout);
      continue;
    }
    vector<int> path;
    dfs(A[0], a, path);
    b = (int)((path).size()) - 1;
    while (!cA[path[b]]) --b;
    printf("A %d\n", path[b] + 1);
    fflush(stdout);
    scanf("%d", &a);
    --a;
    if (!cB[a]) {
      printf("C -1\n");
      fflush(stdout);
      continue;
    }
    printf("C %d\n", path[b] + 1);
    fflush(stdout);
  }
}
