#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define BIT(i) (1LL << i)
typedef long long ll;
const int MAXN = 1e5 + 7;
int par[MAXN][27], h[MAXN], n, k;
int root = 1;
vector <int> a[MAXN];
void dfs(int u){
for(int i = 1; i <= 20; i++) par[u][i] = par[par[u][i - 1]][i - 1];
for(auto v : a[u]){
if(v != par[u][0]){
par[v][0] = u;
h[v] = h[u] + 1;
dfs(v);
}
}
}
int lca(int u, int v){
if(h[u] < h[v]) swap(u, v);
int x = h[u] - h[v];
for(int i = 20; i >= 0; i--){
if(x >= BIT(i)){
x -= BIT(i);
u = par[u][i];
}
}
if(u == v)return u;
int h_max = __lg(h[u]);
for(int i = h_max; i >= 0; i--){
if(par[u][i] != par[v][i]){
u = par[u][i];
v = par[v][i];
}
}
return par[v][0];
}
int main(){
ios_base::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
cin >> n;
for(int i = 1; i <= n - 1; i++){
int x, y;
cin >> x >> y;
a[x].pb(y);
a[y].pb(x);
}
dfs(1);
cin >> k;
while(k--){
int u, v;
char q;
cin >> q;
if(q == '!')cin >> root;
else{
cin >> u >> v;
int uv = lca(u, v);
int ur = lca(u, root);
int vr = lca(v, root);
if(ur == vr) cout << uv << endl;
else if(h[vr] > h[ur]) cout << vr << endl;
else cout << ur << endl;
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgQklUKGkpICgxTEwgPDwgaSkKdHlwZWRlZiBsb25nIGxvbmcgbGw7CmNvbnN0IGludCBNQVhOID0gMWU1ICsgNzsKaW50IHBhcltNQVhOXVsyN10sIGhbTUFYTl0sIG4sIGs7CmludCByb290ID0gMTsKdmVjdG9yIDxpbnQ+IGFbTUFYTl07CnZvaWQgZGZzKGludCB1KXsKICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gMjA7IGkrKykgcGFyW3VdW2ldID0gcGFyW3Bhclt1XVtpIC0gMV1dW2kgLSAxXTsKICAgIGZvcihhdXRvIHYgOiBhW3VdKXsKICAgICAgICBpZih2ICE9IHBhclt1XVswXSl7CiAgICAgICAgICAgIHBhclt2XVswXSA9IHU7CiAgICAgICAgICAgIGhbdl0gPSBoW3VdICsgMTsKICAgICAgICAgICAgZGZzKHYpOwogICAgICAgIH0KICAgIH0KfQoKaW50IGxjYShpbnQgdSwgaW50IHYpewogICAgaWYoaFt1XSA8IGhbdl0pIHN3YXAodSwgdik7CiAgICBpbnQgeCA9IGhbdV0gLSBoW3ZdOwogICAgZm9yKGludCBpID0gMjA7IGkgPj0gMDsgaS0tKXsKICAgICAgICBpZih4ID49IEJJVChpKSl7CiAgICAgICAgICAgIHggLT0gQklUKGkpOwogICAgICAgICAgICB1ID0gcGFyW3VdW2ldOwogICAgICAgIH0KICAgIH0KICAgIGlmKHUgPT0gdilyZXR1cm4gdTsKICAgIGludCBoX21heCA9IF9fbGcoaFt1XSk7CiAgICBmb3IoaW50IGkgPSBoX21heDsgaSA+PSAwOyBpLS0pewogICAgICAgIGlmKHBhclt1XVtpXSAhPSBwYXJbdl1baV0pewogICAgICAgICAgICB1ID0gcGFyW3VdW2ldOwogICAgICAgICAgICB2ID0gcGFyW3ZdW2ldOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBwYXJbdl1bMF07Cn0KCgppbnQgbWFpbigpewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNvdXQudGllKDApOwogICAgY2luLnRpZSgwKTsKICAgIGNpbiA+PiBuOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuIC0gMTsgaSsrKXsKICAgICAgICBpbnQgIHgsIHk7CiAgICAgICAgY2luID4+IHggPj4geTsKICAgICAgICBhW3hdLnBiKHkpOwogICAgICAgIGFbeV0ucGIoeCk7CiAgICB9CiAgICBkZnMoMSk7CiAgICBjaW4gPj4gazsKICAgIHdoaWxlKGstLSl7CiAgICAgICAgaW50IHUsIHY7CiAgICAgICAgY2hhciBxOwogICAgICAgIGNpbiA+PiBxOwogICAgICAgIGlmKHEgPT0gJyEnKWNpbiA+PiByb290OwogICAgICAgIGVsc2V7CiAgICAgICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgICAgIGludCB1diA9IGxjYSh1LCB2KTsKICAgICAgICAgICAgaW50IHVyID0gbGNhKHUsIHJvb3QpOwogICAgICAgICAgICBpbnQgdnIgPSBsY2Eodiwgcm9vdCk7CiAgICAgICAgICAgIGlmKHVyID09IHZyKSBjb3V0IDw8IHV2IDw8IGVuZGw7IAogICAgICAgICAgICBlbHNlIGlmKGhbdnJdID4gaFt1cl0pIGNvdXQgPDwgdnIgPDwgZW5kbDsKICAgICAgICAgICAgZWxzZSBjb3V0IDw8IHVyIDw8IGVuZGw7CiAgICAgICAgfQogICAgfQp9Cg==