#include <bits/stdc++.h>
using namespace std;
char __INPUT[25];
inline int _Int() {
  scanf("%s", __INPUT);
  return atoi(__INPUT);
}
inline long long int _LLi() {
  scanf("%s", __INPUT);
  return atoll(__INPUT);
}
long long int bigMod(long long int A, long long int P, int M) {
  long long int R = 1;
  for (A %= M; P; P >>= 1) {
    if (P & 1) R = (R * A) % M;
    A = (A * A) % M;
  }
  return R;
}
long long int bigMul(long long int A, long long int B, long long int M) {
  long long int R = 0;
  for (A %= M; B; B >>= 1) {
    if (B & 1) R = (R + A) % M;
    A = (A + A) % M;
  }
  return R;
}
unsigned long long int _pow(unsigned long long int A, int P) {
  unsigned long long int R = 1;
  for (; P; P >>= 1) {
    if (P & 1) R = (R * A);
    A = (A * A);
  }
  return R;
}
template <class T>
T GCD(T x, T y) {
  while (x) x ^= y ^= x ^= y %= x;
  return y;
}
int a[300000];
int b[300000];
void Main() {
  int n = _Int();
  for (int i = 0; i < n; i++) {
    a[i] = _Int();
  }
  for (int i = 0; i < n; i++) {
    b[i] = _Int();
  }
  int x, y;
  for (int i = 0; i < n; i++) {
    if (a[i] == 1) x = i;
    if (b[i] == 1) y = i;
  }
  for (int i = 0; i < n; i++) {
    x = (x + 1) % n;
    y = (y + 1) % n;
    if (a[x] == 0) {
      x = (x + 1) % n;
    }
    if (b[y] == 0) {
      y = (y + 1) % n;
    }
    if (a[x] != b[y]) {
      printf("NO\n");
      return;
    }
  }
  printf("YES\n");
}
int main() {
  Main();
  return 0;
}
