import [Link].
*;
import [Link].*;
public class Main {
private static class Node {
int data;
ArrayList<Node> children = new ArrayList<>();
}
public static void display(Node node) {
String str = [Link] + " -> ";
for (Node child : [Link]) {
str += [Link] + ", ";
}
str += ".";
[Link](str);
for (Node child : [Link]) {
display(child);
}
}
public static Node construct(int[] arr) {
Node root = null;
Stack<Node> st = new Stack<>();
for (int i = 0; i < [Link]; i++) {
if (arr[i] == -1) {
[Link]();
} else {
Node t = new Node();
[Link] = arr[i];
if ([Link]() > 0) {
[Link]().[Link](t);
} else {
root = t;
}
[Link](t);
}
}
return root;
}
public static ArrayList<Integer> nodeToRootPath(Node node, int data) {
if ([Link] == data) {
ArrayList<Integer> path = new ArrayList<>();
[Link]([Link]);
return path;
}
for (Node child : [Link]) {
ArrayList<Integer> ptc = nodeToRootPath(child, data);
if ([Link]() > 0) {
[Link]([Link]);
return ptc;
}
}
return new ArrayList<>();
}
public static int lca(Node node, int d1, int d2) {
ArrayList<Integer> p1 = nodeToRootPath(node, d1);
ArrayList<Integer> p2 = nodeToRootPath(node, d2);
int i = [Link]() - 1;
int j = [Link]() - 1;
while(i >= 0 && j >= 0 && [Link](i) == [Link](j)){
i--;
j--;
}
return [Link](i + 1);
}
public static int distanceBetweenNodes(Node node, int d1, int d2){
ArrayList<Integer> p1 = nodeToRootPath(node, d1);
ArrayList<Integer> p2 = nodeToRootPath(node, d2);
int i = [Link]() - 1;
int j = [Link]() - 1;
while(i >= 0 && j >= 0 && [Link](i) == [Link](j)){
i--;
j--;
}
i++;
j++;
return i + j;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader([Link]));
int n = [Link]([Link]());
int[] arr = new int[n];
String[] values = [Link]().split(" ");
for (int i = 0; i < n; i++) {
arr[i] = [Link](values[i]);
}
int d1 = [Link]([Link]());
int d2 = [Link]([Link]());
Node root = construct(arr);
int dist = distanceBetweenNodes(root, d1, d2);
[Link](dist);
// display(root);
}