import java.util.*;
import java.io.*;
public class Main {
static List<List<Integer>> graph;
static int n;
static int[] visited;
static int[] parents;
public static void bfs(int s) {
Queue<Integer> q = new ArrayDeque<>();
q.add(s);
visited[s] = 1;
parents[s] = 0;
while(!q.isEmpty()) {
int now = q.poll();
for (int next : graph.get(now)) {
if (visited[next] == -1) {
visited[next] = visited[now] + 1;
parents[next] = now;
q.add(next);
}
}
}
}
public static int lca(int v1, int v2) {
int l = v1;
int r = v2;
int l_depth = visited[l];
int r_depth = visited[r];
while (visited[r] != visited[l]) {
if (visited[l]<visited[r]) {
r = parents[r];
} else {
l = parents[l];
}
}
while(true) {
if (l==r) return l;
r = parents[r];
l = parents[l];
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n = Integer.parseInt(br.readLine());
graph = new ArrayList<>();
for (int i=0; i<n+1; i++) {
graph.add(new ArrayList<>());
}
for (int i=0; i<n-1; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
graph.get(a).add(b);
graph.get(b).add(a);
}
visited = new int[n+1];
Arrays.fill(visited, -1);
parents = new int[n+1];
Arrays.fill(visited, -1);
bfs(1);
int k = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int i=0; i<k; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int v1 = Integer.parseInt(st.nextToken());
int v2 = Integer.parseInt(st.nextToken());
sb.append(lca(v1,v2)).append("\n");
}
System.out.println(sb);
}
}
To embed this project on your website, copy the following code and paste it into your website's HTML: