#include <bits/stdc++.h>
#pragma warning(disable : 4996)
using namespace std;
const int MAXN = 1e3 + 5, INF = 1e9;
int n, k1, k2, x[MAXN], y[MAXN], w, z;
bool used[MAXN];
vector<int> g[MAXN];
void dfs(int v, int p) {
  if (v == w) {
    z = p;
    return;
  }
  used[v] = true;
  for (auto &to : g[v]) {
    if (!used[to]) {
      dfs(to, *lower_bound(x, x + k1, to) == to ? to : p);
      if (z != -1) return;
    }
  }
}
void solve() {
  scanf("%d", &n);
  for (int i = 0, v, u; i < n - 1; ++i) {
    scanf("%d %d", &v, &u);
    --v, --u;
    g[v].emplace_back(u);
    g[u].emplace_back(v);
  }
  scanf("%d", &k1);
  x[k1] = -1;
  for (int i = 0; i < k1; ++i) {
    scanf("%d", &x[i]);
    --x[i];
  }
  sort(x, x + k1);
  scanf("%d", &k2);
  y[k2] = -1;
  for (int i = 0; i < k2; ++i) {
    scanf("%d", &y[i]);
    --y[i];
  }
  sort(y, y + k2);
  printf("B %d\n", y[0] + 1);
  fflush(stdout);
  scanf("%d", &w);
  --w;
  if (*lower_bound(x, x + k1, w) == w) {
    printf("C %d\n", w + 1);
    fflush(stdout);
    return;
  }
  dfs(x[0], x[0]);
  int yz;
  printf("A %d\n", z + 1);
  fflush(stdout);
  scanf("%d", &yz);
  --yz;
  if (*lower_bound(y, y + k2, yz) == yz) {
    printf("C %d\n", z);
  } else {
    printf("C -1\n");
  }
  fflush(stdout);
}
int main() {
  int t;
  scanf("%d", &t);
  for (int i = 0; i < t; ++i) {
    solve();
    if (i != t - 1) {
      for (int i = 0; i < n; ++i) {
        g[i].clear();
      }
      z = -1;
      memset(used, 0, sizeof(bool) * n);
    }
  }
  return 0;
}
