Герой Аркадий находится на узкой полоске земли, разделенной на *n* зон, пронумерованных от 1 до *n*. Из *i*-й зоны можно пройти лишь в (*i* - 1)-ю зону и в (*i* + 1)-ю зону, если они существуют. При этом между каждой парой соседних зон находятся пограничные врата, которые могут быть разных цветов, цвет врат между *i*-й и (*i* + 1)-й зоной равен *g*<sub class="lower-index">*i*</sub>.

Аркадий может пройти пограничные врата некоторого цвета, только если он перед этим побывал в одном из шатров хранителей ключей этого цвета и взял ключ. В каждой зоне находится ровно один шатер хранителя ключей некоторого цвета, цвет шатра в *i*-й зоне равен *k*<sub class="lower-index">*i*</sub>. После посещения шатра определенного цвета Аркадий может неограниченное число раз проходить через любые врата этого цвета.

На проход через одни врата Аркадий тратит один ход, на посещение шатра и другие перемещения ходы не требуются. За какое минимальное число ходов Аркадий может попасть из зоны *a* в зону *b*, если изначально у него нет никаких ключей?
Первая строка содержит три целых числа *n*, *a*, *b* (2 ≤ *n* ≤ 100 000, 1 ≤ *a*, *b* ≤ *n*, *a* ≠ *b*) — число зон, номер начальной зоны и номер конечной зоны, соответственно.

Вторая строка содержит *n* - 1 целое число *g*<sub class="lower-index">1</sub>, *g*<sub class="lower-index">2</sub>, ..., *g*<sub class="lower-index">*n* - 1</sub> (1 ≤ *g*<sub class="lower-index">*i*</sub> ≤ 100 000), где *g*<sub class="lower-index">*i*</sub> означает цвет пограничных врат между зонами *i* и *i* + 1.

Третья строка содержит *n* целых чисел *k*<sub class="lower-index">1</sub>, *k*<sub class="lower-index">2</sub>, ..., *k*<sub class="lower-index">*n*</sub> (1 ≤ *k*<sub class="lower-index">*i*</sub> ≤ 100 000), где *k*<sub class="lower-index">*i*</sub> означает цвет шатра хранителя ключей в *i*-й зоне.
В первом примере, чтобы попасть из зоны 4 в зону 1, Аркадию нужно сначала взять ключ цвета 1, пройти в зону 3, там взять ключ цвета 2 и пройти обратно в зону 4 и затем в зону 5, взять там ключ цвета 3 и дойти до зоны 1 за четыре хода.

Во втором примере Аркадий может дойти лишь до четвертой зоны, так как шатров хранителей ключей цвета 1 нет совсем.
#include <iostream>
#include <random>
#include <algorithm>
#define MAX_VALUE 100000
using namespace std;

long n, a, b;
long g[MAX_VALUE];
long k[MAX_VALUE];

//long slow(long l, long r, long cur, int dir) {
//	if (b >= l && b <= r)
//		return cur;
//
//	long mn = -1; 
//	if (l > 0) {
//		long to_find = g[l - 1];
//		bool flag = false;
//		for (int i = l; i <= r; i++) {
//			if (k[i] == to_find) {
//				flag = true;
//				break;
//			}
//		}
//		if (flag) {
//			long mn1 = slow(l - 1, r, cur + 1 + (dir > 0 ? r - l : 0), -1);
//			if (mn == -1 || (mn1 != -1 && mn1 < mn)) {
//				mn = mn1;
//			}
//		}
//	}
//	if (r < n-1) {
//		long to_find = g[r];
//		bool flag = false;
//		for (int i = l; i <= r; i++) {
//			if (k[i] == to_find) {
//				flag = true;
//				break;
//			}
//		}
//		if (flag) {
//			long mn1 = slow(l, r + 1, cur + 1 + (dir < 0 ? r - l : 0), 1);
//			if (mn == -1 || (mn1 != -1 && mn1 < mn)) {
//				mn = mn1;
//			}
//		}
//	}
//	return mn;
//}

long fast() {
	long path[MAX_VALUE];
	long pos[MAX_VALUE];
	long res[MAX_VALUE];
	for (int i = 0; i < n; i++) {
		pos[i] = -1;
		path[i] = -1;
	}
	path[k[a]] = 0;
	pos[k[a]] = a;

	int dir = (b>a)?1:-1;
	long l = a;
	long r = a;
	long lv = 0;
	long rv = 0;
	long cur = 0;
	while (l != b && r != b) {
		/*cout << l << " " << r << " " << cur << endl;
		for (int i = 0; i < n; i++) {
			cout << path[i] << " ";
		}
		cout << endl;s
		for (int i = 0; i < n; i++) {
			cout << pos[i] << " ";
		}
		cout << endl;*/
		if (dir > 0) {
			long col = g[r];
			if (pos[col] != -1) {
				cur = path[col] + abs(r + 1 - pos[col]);
				r += 1;
				rv = max(rv+1, cur);
				if (pos[k[r]] == -1) {
					pos[k[r]] = r;
					path[k[r]] = rv;
				}
				continue;
			}
			if (l > 0) {
				col = g[l - 1];
				if (pos[col] != -1) {
					cur = path[col] + abs(l - 1 - pos[col]);
					l -= 1;
					lv = max(lv + 1, cur);
					if (pos[k[l]] == -1) {
						pos[k[l]] = l;
						path[k[l]] = lv;
					}
					continue;
				}
			}
			return -1;
		}
		if (dir < 0) {
			long col = g[l-1];
			if (pos[col] != -1) {
				cur = path[col] + abs(l - 1 - pos[col]);
				l -= 1;
				lv = max(lv + 1, cur);
				if (pos[k[l]] == -1) {
					pos[k[l]] = l;
					path[k[l]] = lv;
				}
				continue;
			}
			if (r < n-1) {
				col = g[r];
				if (pos[col] != -1) {
					cur = path[col] + abs(r + 1 - pos[col]);
					r += 1;
					rv = max(rv + 1, cur);
					if (pos[k[r]] == -1) {
						pos[k[r]] = r;
						path[k[r]] = rv;
					}
					continue;
				}
			}
			return -1;
		}
	}
	return dir>0?rv:lv;
}

int main()
{
	//default_random_engine generator;
	//uniform_int_distribution<int> distribution(1, 5);

	//while (true) {
	//	n = 11;
	//	a = distribution(generator);
	//	b = distribution(generator);
	//	if (a == b) continue;
	//	cout << n << " " << a << " " << b << endl;
	//	for (int i = 0; i < n; i++) {
	//		g[i] = distribution(generator);
	//		k[i] = distribution(generator);
	//	}

	//	long sl = slow(a, a, 0, 0);
	//	long fs = fast();
	//	cout << sl << " " << fs << endl;

	//	if (sl != fs) {
	//		for (int i = 0; i < n - 1; i++) cout << g[i] << " ";
	//		cout << endl;
	//		for (int i = 0; i < n; i++) cout << k[i] << " ";
	//		cout << endl;
	//		break;
	//	}
	//}
	//cin >> n;



	cin >> n >> a >> b;
	a--;
	b--;
	for (long i = 0; i < n - 1; i++) {
		cin >> g[i];
	}
	for (long i = 0; i < n; i++) {
		cin >> k[i];
	}
	cout << fast();
	return 0;
}

