#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long x = 0, f = 0;
  char ch = getchar();
  while (!isdigit(ch)) f = ch == '-', ch = getchar();
  while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
  return f ? -x : x;
}
const int N = 200005;
int n, s0, t0, s, t, tp;
vector<int> e[N], ch[N];
int a[N], b[N], c[N], f[N];
deque<int> id;
int find(int *a, int v) {
  for (int i = (1); i <= (n); i++)
    if (a[i] == v) return i;
  return 0;
}
int check(int *a, int *b) {
  for (int i = (1); i <= (n); i++)
    if (a[i] != b[i]) return 0;
  return 1;
}
int fa[N], dep[N], anc[N][20];
void dfs(int x, int pre = 0, int d = 0) {
  anc[x][0] = fa[x] = pre, dep[x] = d;
  for (int i = (1); i <= (19); i++) anc[x][i] = anc[anc[x][i - 1]][i - 1];
  for (auto y : e[x])
    if (y != pre) dfs(y, x, d + 1);
}
int LCA(int x, int y) {
  if (dep[x] < dep[y]) swap(x, y);
  for (int i = (19); i >= (0); i--)
    if (dep[x] - (1 << i) >= dep[y]) x = anc[x][i];
  if (x == y) return x;
  for (int i = (19); i >= (0); i--)
    if (anc[x][i] != anc[y][i]) x = anc[x][i], y = anc[y][i];
  return fa[x];
}
int dis(int x, int y) { return dep[x] + dep[y] - 2 * dep[LCA(x, y)]; }
void getc() {
  s0 = find(a, 0), t0 = find(b, 0);
  dfs(t0);
  for (int i = (1); i <= (n); i++) c[i] = a[i];
  for (int x = s0; x != t0; x = fa[x]) id.push_back(x), swap(c[x], c[fa[x]]);
  id.push_back(t0);
  if (check(b, c)) printf("0 %d\n", dep[s0]), exit(0);
}
void NO() {
  puts("-1");
  exit(0);
}
vector<int> cid;
void dfs_ch(int x, int pre = 0) {
  cid.push_back(x);
  if (x == t) tp = (int)cid.size() - 1;
  for (auto y : ch[x])
    if (y != pre) dfs_ch(y, x);
}
int main() {
  n = read();
  for (int i = (1); i <= (n); i++) a[i] = read();
  int Test = a[1] == 3779;
  for (int i = (1); i <= (n); i++) b[i] = read();
  for (int i = (1); i <= (n - 1); i++) {
    int x = read(), y = read();
    e[x].push_back(y), e[y].push_back(x);
  }
  getc();
  deque<int> ID = id;
  while ((int)id.size() >= 2 && b[id[0]] == c[id[0]]) id.pop_front();
  while ((int)id.size() >= 2 &&
         b[id[(int)id.size() - 2]] == c[id[(int)id.size() - 2]])
    id.pop_back();
  assert(!id.empty());
  s = id.front(), t = id.back();
  if (b[id[0]] != c[id[0]]) {
    for (auto i : id) f[i] = 1;
  } else {
    int x = -1;
    for (int i = (1); i <= (n); i++)
      if (b[i] != c[i])
        if (x == -1 || dis(i, t0) < dis(x, t0)) x = i;
    assert(x != -1);
    for (auto y : e[x])
      if (dis(y, t0) < dis(x, t0)) {
        f[s = t = y] = 1;
        break;
      }
    assert(s != 0);
  }
  for (int i = (1); i <= (n); i++)
    if (b[i] != c[i]) f[i] = 1;
  for (int i = (1); i <= (n); i++)
    for (auto j : e[i])
      if (f[i] && f[j]) ch[i].push_back(j);
  int A = -1, B = -1;
  for (int i = (1); i <= (n); i++)
    if (ch[i].size() > 2)
      NO();
    else if (ch[i].size() == 1) {
      if (A == -1)
        A = i;
      else if (B == -1)
        B = i;
      else
        NO();
    } else if (ch[i].empty() && f[i])
      NO();
  if (B == -1) NO();
  if (dis(B, s) < dis(B, t)) swap(A, B);
  b[t] = c[t] = 0;
  dfs_ch(A);
  vector<int> pos(n + 1, -1);
  int cs = (int)cid.size();
  for (int i = (0); i <= (cs - 1); i++) pos[b[cid[i]]] = i;
  int d = -1;
  for (int i = (0); i <= (cs - 1); i++) {
    if (cid[i] == t) continue;
    int p0 = pos[c[cid[i]]], p1 = i;
    p0 -= p0 >= tp, p1 -= p1 >= tp;
    int di = (p1 - p0 + cs - 1) % (cs - 1);
    if (d != -1 && d != di) NO();
    d = di;
  }
  int dst = dis(s, t);
  long long d1 = (long long)cs * d + dst, d2 = (long long)cs * (cs - 1) - d1;
  long long ans = dis(s0, s) + dis(t0, t) + min(d1, d2);
  cout << min(A, B) << " " << max(A, B) << " " << ans << endl;
  return 0;
}
