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 b1, b2, ..., bn, consisting of zeros and ones. Each second Pavel move skewer on position i to position pi, and if bi 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·105) — the number of skewers.

The second line contains a sequence of integers p1, p2, ..., pn (1 ≤ pi ≤ n) — the permutation, according to which Pavel wants to move the skewers.

The third line contains a sequence b1, b2, ..., bn 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.
import java.util.*;
import java.io.*;
import java.lang.*;
import java.math.*;

public class C {
	static int n;
	static int[] perm;
	static int[] flip;
	static int[] parent;
	static int[] size;
	public static void main(String[] args) throws Exception {
		FastScanner sc = new FastScanner();
		n = sc.nextInt();
		perm = new int[n];
		flip = new int[n];
		parent = new int[n+1];
		size = new int[n+1];
		int res = 0;
		int fcount = 0;
		for(int i = 0; i <= n; i++) {
			parent[i] = i;
			size[i] = 1;
		}
		for(int i = 0; i < n; i++) {
			perm[i] = sc.nextInt();
		}
		for(int i = 0; i < n; i++) {
			flip[i] = sc.nextInt();
			if(flip[i] == 1) fcount++;
		}
		for(int i = 1; i <= n; i++) {
			union(i, perm[i-1]);
		}
		HashSet<Integer> disjoint = new HashSet<Integer>();
		for(int i = 1; i <= n; i++) {
			disjoint.add(find(i));
		}
		if(disjoint.size() > 1) {
			res += disjoint.size(); //or (disjoint.size()-1)*2
		}
		res += (fcount % 2 == 0) ? 1 : 0;
		System.out.println(res);
	}
	static int find(int x) {
		if(parent[x]  != x) {
			parent[x] = find(parent[x]);
		}
		return parent[x];
	}
	static void union(int x, int y) {
		int xpar = find(x);
		int ypar = find(y);
		if(xpar == ypar) return;
		parent[xpar] = ypar;
		size[ypar] += size[xpar];
	}
	static class FastScanner {
		public BufferedReader reader;
		public StringTokenizer tokenizer;

		public FastScanner() {
			reader = new BufferedReader(new InputStreamReader(System.in), 32768);
			tokenizer = null;
		}

		public String next() {
			while (tokenizer == null || !tokenizer.hasMoreTokens()) {
				try {
					tokenizer = new StringTokenizer(reader.readLine());
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
			}
			return tokenizer.nextToken();
		}

		public int nextInt() {
			return Integer.parseInt(next());
		}

		public long nextLong() {
			return Long.parseLong(next());
		}

		public double nextDouble() {
			return Double.parseDouble(next());
		}

		public String nextLine() {
			try {
				return reader.readLine();
			} catch (IOException e) {
				throw new RuntimeException(e);
			}
		}

	}
}