#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n, m, s;
int f[N];
vector<pair<int, int>> g[N];
int e[N], ne[N], h[N], idx;
void add(int a, int b)
{
e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}
bool vis[N];
int ans[N];
int find(int x)
{
if (f[x] == x) return x;
return f[x] = find(f[x]);
}
void tarjan(int u)
{
vis[u] = 1;
for (int i = h[u]; ~i; i = ne[i])
{
if (vis[e[i]]) continue;
tarjan(e[i]);
f[find(e[i])] = find(u);
}
for (auto v : g[u])
if(vis[v.first]) ans[v.second] = find(v.first);
}
int main()
{
ios ::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m >> s;
for (int i = 1; i <= n; i ++) f[i] = i, h[i] = -1;
for (int i = 1; i < n; i ++)
{
int u, v;
cin >> u >> v;
add(u, v), add(v, u);
}
for (int i = 1; i <= n; i ++)
{
int u, v;
cin >> u >> v;
g[u].push_back(make_pair(v, i));
g[v].push_back(make_pair(u, i));
}
tarjan(s);
for (int i = 1; i <= m; i ++) cout << ans[i] << "\n";
return 0;
}