Pavel cooks barbecue. There are n skewers, they lay on a brazier in a row, each on one of n positions. Pavel wants each skewer to be cooked some time in every of n positions in two directions: in the one it was directed originally and in the reversed direction.

Pavel has a plan: a permutation p and a sequence b_1, b_2, ..., b_{n}, consisting of zeros and ones. Each second Pavel move skewer on position i to position p_{i}, and if b_{i} equals 1 then he reverses it. So he hope that every skewer will visit every position in both directions.

Unfortunately, not every pair of permutation p and sequence b suits Pavel. What is the minimum total number of elements in the given permutation p and the given sequence b he needs to change so that every skewer will visit each of 2n placements? Note that after changing the permutation should remain a permutation as well.

There is no problem for Pavel, if some skewer visits some of the placements several times before he ends to cook. In other words, a permutation p and a sequence b suit him if there is an integer k (k ≥ 2n), so that after k seconds each skewer visits each of the 2n placements.

It can be shown that some suitable pair of permutation p and sequence b exists for any n.


-----Input-----

The first line contain the integer n (1 ≤ n ≤ 2·10^5) — the number of skewers.

The second line contains a sequence of integers p_1, p_2, ..., p_{n} (1 ≤ p_{i} ≤ n) — the permutation, according to which Pavel wants to move the skewers.

The third line contains a sequence b_1, b_2, ..., b_{n} consisting of zeros and ones, according to which Pavel wants to reverse the skewers.


-----Output-----

Print single integer — the minimum total number of elements in the given permutation p and the given sequence b he needs to change so that every skewer will visit each of 2n placements.


-----Examples-----
Input
4
4 3 2 1
0 1 1 1

Output
2

Input
3
2 3 1
0 0 0

Output
1



-----Note-----

In the first example Pavel can change the permutation to 4, 3, 1, 2.

In the second example Pavel can change any element of b to 1.

Difficulty: MEDIUM_HARD

Solutions:
import sys
input = sys.stdin.readline
n = int(input())
permutation = list(map(int, input().split()))
go = set(range(1, n + 1))
reached = set()
ans = 0
while go:
	x = go.pop()
	while x not in reached:
		reached.add(x)
		x = permutation[x - 1]
		if x in go:
			go.remove(x)
	ans += 1
if ans == 1:
	ans = 0
permutation = input().split()
if permutation.count('1') % 2 == 0:
	ans += 1
print(ans)


from sys import stdin, stdout

def rint():
	return map(int, stdin.readline().split())
n = int(input())
p = list(rint())
b = list(rint())
p = [i - 1 for i in p]
v = [0] * n
loop = 0
for i in range(n):
	if v[i]:
		continue
	loop += 1
	while v[i] == 0:
		v[i] = 1
		i = p[i]
ans = 0
if loop != 1:
	ans += loop
if sum(b) % 2 == 0:
	ans += 1
print(ans)


n = int(input())
p = [[0, 1] for i in range(n)]
b = [0 for i in range(n)]
ans = 0
s = input().split()
for i in range(n):
	p[i][0] = int(s[i]) - 1
s = input().split()
for i in range(n):
	b[i] = int(s[i])
temp = 0
cyc = 0
for i in range(n):
	if p[i][1] == 0:
		continue
	cyc += 1
	temp = i
	while p[temp][1] == 1:
		p[temp][1] = 0
		temp = p[temp][0]
if cyc > 1:
	ans = cyc
if sum(b) % 2 == 0:
	ans += 1
print(str(ans))


n = int(input())
p = list(map(lambda x: int(x) - 1, input().split()))
b = list(map(int, input().split()))
cp = 0
z = [True] * n
old = -1
nn = n
while nn:
	cp += 1
	cur = next((i for i in range(old + 1, n) if z[i]))
	old = cur
	while z[cur]:
		z[cur] = False
		nn -= 1
		cur = p[cur]
if cp == 1:
	cp = 0
cb = 1 - (sum(b) & 1)
print(cb + cp)


n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
k = 0
s = 0
v = [False] * n
for i in range(n):
	if v[i]:
		continue
	k += 1
	while not v[i]:
		v[i] = True
		i = a[i] - 1
if k == 1:
	k = 0
else:
	s += k
if sum(b) % 2 == 0:
	s += 1
print(s)