n = 7385137888721 m = 10470245 L = 1 R = 10**9 ansa = ansb = 0
defcheck(x): if x & 1 == 0: if n * 4 + m >= x**2: return1 else: return0 else: for i inrange(1, 1000, 2): if x < i: return0 if n * 4 >= (x - i)**2and m >= x**2 - (x - i)**2: return1 l = L r = R while l <= r: mid = (l + r) >> 1 if check(2 * mid): l = mid + 1 ansa = mid else: r = mid - 1
l = L r = R while l <= r: mid = (l + r) >> 1 if check(2 * mid - 1): l = mid + 1 ansb = mid else: r = mid - 1
MAXN = 10**5 + 10 M = 10**5 f = [0for _ inrange(MAXN)] isPri = [0for _ inrange(MAXN)] pri = []
defPrime(): isPri[1] = isPri[0] = 0 for i inrange(2, M + 1): if isPri[i] == 0: pri.append(i) for j in pri: if i * j > M: break isPri[i * j] = 1 if i % j == 0: break
if __name__ == '__main__': Prime() for i inrange(M + 1): if i == 0or i == 1: f[i] = 0 if f[i] == 0: for j in pri: if i + j > 10**5: break f[i + j] = 1 withopen(os.path.abspath("C:\\Users\\31546\\Desktop\\output.txt"), "w") as file: for i inrange(M + 1): if f[i] == 0: print(i, ', ', sep='', end='', file=file)
n = int(input()) a = list(map(int, input().split())) fa = list(map(int, input().split())) e = [[] for _ in range(10 ** 5 + 10)] tr = [[0for _ in range(2)] for _ in range(10 ** 5 * 32 + 10)] id = [0for _ in range(10 ** 5 * 32 + 10)] cnt = 0
def dfs(k, p, q):
if q == -1: if id[p] in e[k]: return-1 else: return a[id[p]] x = (a[k] >> q) & 1 if tr[p][x ^ 1]: res = dfs(k, tr[p][x ^ 1], q - 1) if res != -1: return res if tr[p][x]: res = dfs(k, tr[p][x], q - 1) if res != -1: return res return-1
if __name__ == '__main__':
for i in range(n): if fa[i] == -1: root = i break e[fa[i]].append(i) e[i].append(fa[i]) for i in range(n): p = 0 for j in range(32, -1, -1): x = (a[i] >> j) & 1 if tr[p][x] == 0: cnt += 1 tr[p][x] = cnt p = tr[p][x] if j == 0: id[p] = i ans = 0 for i in range(n): res = dfs(i, 0, 32) if res != -1: ans = max(ans, res ^ a[i]) print(ans)