#include <bits/stdc++.h>
using namespace std;
vector<int> o;
int addnum, vel[400010], ne[400010], head[200010];
int a[200010], b[200010];
int n, rt, ed;
int tot, posx, posy, pos;
inline int read() {
  int ans = 0;
  char ch = getchar();
  while (ch < '0' || ch > '9') ch = getchar();
  while (ch >= '0' && ch <= '9')
    ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
  return ans;
}
void add(int u, int v) {
  addnum++, vel[addnum] = v, ne[addnum] = head[u], head[u] = addnum;
}
bool dfs(int u, int fa, int T) {
  o.push_back(u);
  if (u == T) return 1;
  for (int e = head[u]; e; e = ne[e]) {
    int v = vel[e];
    if (v == fa) continue;
    if (dfs(v, u, T)) return 1;
  }
  o.pop_back();
  return 0;
}
void dfst(int u, int fa) {
  for (int e = head[u]; e; e = ne[e]) {
    int v = vel[e];
    if (v == fa) continue;
    dfst(v, u);
  }
  if (a[u] != b[u]) {
    int cnt = 0;
    for (int e = head[u]; e; e = ne[e]) {
      int v = vel[e];
      if (v == fa) continue;
      if (a[v] != b[v]) cnt++;
    }
    if (!cnt) {
      tot++;
      if (posx)
        posy = u;
      else {
        posx = u;
        o.clear();
        dfs(u, -1, ed);
        for (int i = 0; i < (int)o.size(); i++)
          if (a[o[i]] == b[o[i]]) {
            posy = pos = o[i];
            break;
          }
      }
    }
  } else {
    int cnt = 0;
    for (int e = head[u]; e; e = ne[e]) {
      int v = vel[e];
      if (v == fa) continue;
      if (a[v] != b[v]) cnt++;
    }
    if (cnt == 2) tot--, pos = u;
  }
}
int calc(int x, int y) {
  o.clear();
  dfs(x, -1, y);
  return o.size() - 1;
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) {
    a[i] = read();
    if (!a[i]) rt = i;
  }
  for (int i = 1; i <= n; i++) {
    b[i] = read();
    if (!b[i]) ed = i;
  }
  for (int i = 1; i < n; i++) {
    int x = read(), y = read();
    add(x, y), add(y, x);
  }
  o.clear();
  dfs(rt, -1, ed);
  for (int i = 1; i < (int)o.size(); i++) swap(a[o[i - 1]], a[o[i]]);
  int flag = 1;
  for (int i = 1; i <= n; i++) flag &= a[i] == b[i];
  if (flag) {
    printf("0 %d\n", calc(rt, ed));
    return 0;
  }
  dfst(ed, -1);
  if (tot != 1) {
    printf("-1\n");
    return 0;
  }
  o.clear();
  dfs(posx, -1, posy);
  for (int i = 0; i < (int)o.size(); i++)
    if (o[i] == pos) o.erase(o.begin() + i);
  int num = 0;
  long long step = o.size(), sizd = step;
  for (int i = 0; i < sizd; i++)
    if (b[o[i]] == a[o[0]]) num = i;
  for (int i = 0; i < sizd; i++)
    if (a[o[i]] != b[o[(i + num) % sizd]]) {
      printf("-1\n");
      return 0;
    }
  printf(
      "%d %d %lld\n", min(posx, posy), max(posx, posy),
      min((step + 1) * (num - 1) + 1 + calc(rt, posx) + calc(posy, ed),
          (step + 1) * (step - num - 1) + 1 + calc(rt, posy) + calc(posx, ed)));
}
