#include <bits/stdc++.h>
using namespace std;
vector<int> v[200010], circle;
int fa[200010], dep[200010], a[200010], b[200010], n, rt, vs, vt, h1, h2;
bool vis[200010], bo[200010];
inline int rd() {
  int x = 0;
  char ch = getchar();
  for (; ch < '0' || ch > '9'; ch = getchar())
    ;
  for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
  return x;
}
inline void dfs(int x) {
  for (int i = 0, siz = v[x].size(); i < siz; i++) {
    int t = v[x][i];
    if (t == fa[x]) continue;
    dep[t] = dep[x] + 1;
    fa[t] = x;
    dfs(t);
  }
}
inline bool gao() {
  int p = 0, q = 0;
  bool flag = true;
  for (int i = 1; i <= n; i++)
    if (a[i] != b[i] && dep[i] > dep[p]) p = i;
  if (!p) return true;
  for (int hh = p; a[hh] != b[hh]; hh = fa[hh])
    bo[hh] = true, circle.push_back(hh);
  for (int i = 1; i <= n; i++)
    if (a[i] != b[i] && !bo[i] && dep[i] > dep[q]) q = i;
  if (q) {
    reverse(circle.begin(), circle.end());
    flag = false;
    for (int hh = q; a[hh] != b[hh]; hh = fa[hh])
      bo[hh] = true, circle.push_back(hh);
  } else
    q = fa[circle.back()];
  for (int i = 1; i <= n; i++)
    if (a[i] != b[i] && !bo[i]) return false;
  int h1 = p, h2 = q;
  for (; h1 != h2; h1 = fa[h1])
    if (dep[h1] < dep[h2]) swap(h1, h2);
  rt = h1;
  if (circle.size() != dep[p] + dep[q] - dep[rt] * 2) return false;
  vs = p;
  vt = q;
  if (flag) reverse(circle.begin(), circle.end());
  return true;
}
int main() {
  n = rd();
  for (int i = 1; i <= n; i++)
    if (!(a[i] = rd())) h1 = i;
  for (int i = 1; i <= n; i++)
    if (!(b[i] = rd())) h2 = i;
  for (int i = 1; i < n; i++) {
    int x = rd(), y = rd();
    v[x].push_back(y);
    v[y].push_back(x);
  }
  dep[0] = -1;
  dfs(h2);
  for (int hh = h1; hh != h2; hh = fa[hh]) swap(a[hh], a[fa[hh]]);
  long long ans = dep[h1];
  if (!gao()) {
    puts("-1");
    return 0;
  }
  if (!circle.size()) {
    printf("0 %d\n", ans);
    return 0;
  }
  for (int i = h1; i; i = fa[i]) vis[i] = true;
  if (vis[circle.back()] && !vis[circle[0]])
    reverse(circle.begin(), circle.end());
  int gap = 0, siz = circle.size();
  for (int i = 0; i < siz; i++)
    if (b[circle[i]] == a[circle[0]]) gap = i;
  for (int i = 0; i < siz; i++)
    if (b[circle[(i + gap) % siz]] != a[circle[i]]) {
      puts("-1");
      return 0;
    }
  if (vis[circle[0]] || vis[circle.back()]) {
    int now = siz;
    for (int i = 0; i < siz; i++)
      if (!vis[circle[i]]) {
        now = i;
        break;
      }
    ans = ans - now +
          min((long long)gap * (siz + 1) + now,
              abs((long long)(siz - gap) * (siz + 1) - now));
  } else
    ans = (ans + (long long)min(gap, siz - gap) * (siz + 1));
  for (; !vis[rt]; rt = fa[rt]) ans += 2;
  if (vs > vt) swap(vs, vt);
  printf("%d %d %I64d\n", vs, vt, ans);
  return 0;
}
