#!/usr/bin/env python3
# CANONICAL: use this solution to generate answers.
n = int(input())
a = [int(x) - 1 for x in input().split()]
b = [int(x) - 1 for x in input().split()]


def gcd(a, b):
  return a if b == 0 else gcd(b, a % b)


def lcm(a, b):
  return a // gcd(a, b) * b


def egcd(a, b):
  if b == 0:
    return (1, 0, a)
  (s, t, d) = egcd(b, a % b)
  return (t, s - a // b * t, d)


def crt(a, b):
  s, t, d = egcd(a[1], b[1])
  if a[0] % d != b[0] % d:
    return (0, -1)
  return ((s * b[0] % b[1] * a[1] + t * a[0] % a[1] * b[1]) // d,
          a[1] // d * b[1])


# Even
e = 1
ab = [0] * n
for i in range(n):
  ab[i] = b[a[i]]
done = [False] * n
for i in range(n):
  if done[i]:
    continue
  l = 0
  while not done[i]:
    done[i] = True
    i = ab[i]
    l += 1
  e = lcm(e, l)
e *= 2

# Odd
ai = [0] * n
for i in range(n):
  ai[a[i]] = i
done = [False] * n
odd = (0, 1)
for i in range(n):
  if done[i]:
    continue
  offset, period = -1, 0
  target = ai[i]
  while True:
    if i == target:
      offset = period
    done[i] = True
    i = ab[i]
    period += 1
    if done[i]:
      break
  if offset >= 0:
    for k in range(period):
      if ai[i] != target:
        offset = -1
        break
      i = ab[i]
      target = ab[target]
  if offset == -1:
    print(e)
    exit(0)
  odd = crt(odd, (offset, period))
  if odd[1] == -1:
    print(e)
    exit(0)

a = min(e, 2 * odd[0] + 1)
print(a if a <= 10**12 else 'huge')
