#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
const int INF = 2e9 + 5;
bitset<N> vis;
int n, a[N], b[N], c[N], d[N], x[N], t[N + N];
void init(void) {
  for (int i = 0; i < n + n; ++i) {
    t[n + n + i] = x[i + 1];
  }
  for (int i = n + n - 1; i; --i) {
    t[i] = min(t[i << 1], t[i << 1 | 1]);
  }
}
int query(int l, int r) {
  --l;
  int res = INF;
  for (l += n + n, r += n + n; l < r; l >>= 1, r >>= 1) {
    if (l & 1) res = min(res, t[l++]);
    if (r & 1) res = min(res, t[--r]);
  }
  return res;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", a + i);
    a[n + i] = a[i];
  }
  for (int i = 1; i <= n; ++i) {
    scanf("%d", b + i);
    b[n + i] = b[i];
  }
  for (int i = 1; i <= n + n; ++i) {
    c[i] = c[i - 1] + a[i];
    d[i] = d[i - 1] + b[i];
    x[i] = c[i] - d[i];
  }
  init();
  for (int i = 1; i <= n; ++i) {
    if (query(i, i + n - 1) >= x[i - 1]) {
      vis[i] = 1;
    }
  }
  reverse(a + 1, a + n + 1);
  int tmp = b[n];
  for (int i = n; i > 1; --i) b[i] = b[i - 1];
  b[1] = tmp;
  reverse(b + 1, b + n + 1);
  for (int i = 1; i <= n; ++i) {
    a[n + i] = a[i], b[n + i] = b[i];
  }
  for (int i = 1; i <= n + n; ++i) {
    c[i] = c[i - 1] + a[i];
    d[i] = d[i - 1] + b[i];
    x[i] = c[i] - d[i];
  }
  init();
  for (int i = 1; i <= n; ++i) {
    if (query(i, i + n - 1) >= x[i - 1]) {
      vis[n + 1 - i] = 1;
    }
  }
  printf("%d\n", vis.count());
  for (int i = 1; i <= n; ++i) {
    if (vis[i]) printf("%d ", i);
  }
  puts("");
  return 0;
}
