#include <bits/stdc++.h>
int head[262144], last[524288], to[524288], cnt = 0;
void add(int u, int v) {
  cnt++;
  last[cnt] = head[u];
  head[u] = cnt;
  to[cnt] = v;
}
int d[262144], fa[262144], d2[262144], fa2[262144];
void dfs(int u, int f) {
  d[u] = d[f] + 1;
  fa[u] = f;
  for (int i = head[u]; i; i = last[i]) {
    int v = to[i];
    if (v == f) {
      continue;
    }
    dfs(v, u);
  }
}
int a[262144], b[262144];
int x[262144], num = 0;
int dfs2(int u, int f) {
  d2[u] = d2[f] + 1;
  fa2[u] = f;
  int ans;
  if (b[u] == a[u]) {
    ans = 2;
  } else {
    ans = 1;
  }
  for (int i = head[u]; i; i = last[i]) {
    int v = to[i];
    if (v == f) {
      continue;
    }
    int ans2 = dfs2(v, u);
    if (ans2 < 0) {
      return -1;
    }
    if (ans2) {
      ans--;
      if (ans < 0) {
        return -1;
      }
    }
  }
  if (ans && a[u] != b[u]) {
    x[num] = u;
    num++;
  }
  return a[u] != b[u];
}
int aa[262144], bb[262144];
int main() {
  int n;
  scanf("%d", &n);
  int root, root2;
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    if (a[i] == 0) {
      root = i;
    }
  }
  for (int i = 1; i <= n; i++) {
    scanf("%d", &b[i]);
    if (b[i] == 0) {
      root2 = i;
    }
  }
  for (int i = 1; i < n; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    add(u, v);
    add(v, u);
  }
  d[0] = -1;
  d2[0] = -1;
  dfs(root, 0);
  int now = 0;
  for (int i = root2; i; i = fa[i]) {
    int t = a[i];
    a[i] = now;
    now = t;
  }
  if (dfs2(root2, 0) < 0) {
    printf("-1\n");
    return 0;
  }
  if (num > 2) {
    printf("-1\n");
    return 0;
  }
  if (num == 0) {
    printf("0 %d\n", d[root2]);
    return 0;
  }
  int u, v, dd;
  if (num == 1) {
    u = x[0];
    for (int i = u;; i = fa2[i]) {
      if (a[i] == b[i]) {
        v = i;
        break;
      }
    }
    dd = d2[u] - d2[v];
    if (u < v) {
      for (int i = u; i != v; i = fa2[i]) {
        aa[d2[u] - d2[i]] = a[i];
        bb[d2[u] - d2[i]] = b[i];
      }
    } else {
      for (int i = u; i != v; i = fa2[i]) {
        aa[d2[i] - d2[v] - 1] = a[i];
        bb[d2[i] - d2[v] - 1] = b[i];
      }
      int t = u;
      u = v;
      v = t;
    }
  } else {
    u = x[0];
    v = x[1];
    if (u > v) {
      int t = u;
      u = v;
      v = t;
    }
    int root3;
    for (int i = u;; i = fa2[i]) {
      aa[d2[u] - d2[i]] = a[i];
      bb[d2[u] - d2[i]] = b[i];
      if (a[i] == b[i]) {
        root3 = i;
        break;
      }
    }
    dd = d2[u] + d2[v] - d2[root3] - d2[root3];
    for (int i = v; i != root3; i = fa2[i]) {
      if (d2[i] <= d2[root3]) {
        printf("-1\n");
        return 0;
      }
      aa[d2[i] + d2[u] - d2[root3] - d2[root3] - 1] = a[i];
      bb[d2[i] + d2[u] - d2[root3] - d2[root3] - 1] = b[i];
      if (a[i] == b[i]) {
        printf("-1\n");
        return 0;
      }
    }
  }
  int dd1 = 0, dd2 = 0;
  for (int i = 1; i < dd; i++) {
    if (bb[i] == aa[0]) {
      dd1 = i;
      dd2 = dd - i;
      break;
    }
  }
  for (int i = 0; i < dd; i++) {
    int j = i + dd1;
    if (j >= dd) {
      j -= dd;
    }
    if (bb[j] != aa[i]) {
      printf("-1\n");
      return 0;
    }
  }
  printf("%d %d ", u, v);
  long long ans1 = (long long)(dd + 1) * (dd1 - 1) + d[u] + d2[v] + 1;
  long long ans2 = (long long)(dd + 1) * (dd2 - 1) + d[v] + d2[u] + 1;
  if (ans2 < ans1) {
    ans1 = ans2;
  }
  printf("%lld\n", ans1);
  return 0;
}
