1 #include<bits/stdc++.h>
2 using namespace std;
3 const int maxn=5e5+10;
4 struct edge
5 {
6 int u,v,nxt;
7 }e[maxn<<1];
8 int head[maxn],js;
9 void addage(int u,int v)
10 {
11 e[++js].u=u;e[js].v=v;
12 e[js].nxt=head[u];head[u]=js;
13 }
14 int n,m,q;
15 int w[maxn],f[maxn][20],dep[maxn];
16 void dfs(int u,int fa)
17 {
18 f[u][0]=fa;dep[u]=dep[fa]+1;
19 for(int i=1;f[u][i-1];++i)f[u][i]=f[f[u][i-1]][i-1];
20 for(int i=head[u];i;i=e[i].nxt)
21 {
22 int v=e[i].v;
23 if(v==fa)continue;
24 dfs(v,u);
25 }
26 }
27 int ff[maxn][20];
28 void dfs2(int u,int fa)
29 {
30 for(int i=head[u];i;i=e[i].nxt)
31 {
32 int v=e[i].v;
33 if(v==fa)continue;
34 dfs2(v,u);
35 w[u]+=w[v];
36 }
37 }
38 void dfs3(int u,int fa)
39 {
40 ff[u][0]=w[u];
41 for(int i=1;f[u][i-1];++i)ff[u][i]=max(ff[u][i-1],ff[f[u][i-1]][i-1]);
42 for(int i=head[u];i;i=e[i].nxt)
43 {
44 int v=e[i].v;
45 if(v==fa)continue;
46 dfs3(v,u);
47 }
48 }
49 int lca(int u,int v)
50 {
51 if(dep[u]<dep[v])swap(u,v);
52 for(int i=19;i>=0;--i)if(dep[f[u][i]]>=dep[v])u=f[u][i];
53 if(u==v)return u;
54 for(int i=19;i>=0;--i)
55 if(f[u][i]!=f[v][i])
56 {
57 u=f[u][i];v=f[v][i];
58 }
59 return f[u][0];
60 }
61 int lca_(int u,int v)
62 {
63 int ans=0;
64 if(dep[u]<dep[v])swap(u,v);
65 for(int i=19;i>=0;--i)if(dep[f[u][i]]>=dep[v])ans=max(ans,ff[u][i]),u=f[u][i];
66 if(u==v)return max(ans,w[u]);
67 for(int i=19;i>=0;--i)
68 if(f[u][i]!=f[v][i])
69 {
70 ans=max(ans,max(ff[u][i],ff[v][i]));
71 u=f[u][i];v=f[v][i];
72 }
73 ans=max(max(ans,max(w[u],w[v])),w[f[u][0]]);
74 return ans;
75 }
76 int main()
77 {
78 scanf("%d%d%d",&n,&m,&q);
79 for(int v,i=2;i<=n;++i)
80 {
81 scanf("%d",&v);
82 addage(i,v);addage(v,i);
83 }
84 dfs(1,0);
85 for(int u,v,i=1;i<=m;++i)
86 {
87 scanf("%d%d",&u,&v);
88 w[u]++;w[v]++;
89 int l=lca(u,v);
90 w[l]--;w[f[l][0]]--;
91 }
92 dfs2(1,0);
93 dfs3(1,0);
94 for(int u,v,i=1;i<=q;++i)
95 {
96 scanf("%d%d",&u,&v);
97 printf("%d\n",lca_(u,v));
98 }
99 return 0;
100 }