#include <bits/stdc++.h>
using namespace std;
FILE* in = stdin;
bool ret[100009];
int n, dis[100009], f[100009], tree[600000], arr[200009], test[100009];
void update(int ind, int s, int e, int pos, int val) {
  if (s > e || s > pos || e < pos) return;
  if (s == e && s == pos) {
    tree[ind] = val;
    return;
  }
  update(ind * 2, s, ((s + e) / 2), pos, val);
  update(ind * 2 + 1, ((s + e) / 2) + 1, e, pos, val);
  tree[ind] = min(tree[ind * 2], tree[ind * 2 + 1]);
  return;
}
int get(int ind, int s, int e, int st, int en) {
  if (s > e || s > en || e < st) return 1 << 30;
  if (s >= st && e <= en) return tree[ind];
  return min(get(ind * 2, s, ((s + e) / 2), st, en),
             get(ind * 2 + 1, ((s + e) / 2) + 1, e, st, en));
}
void solve() {
  int i, a, cur = 0;
  for (i = 0; i < 2 * n; i++) {
    cur += f[i % n];
    cur -= dis[i % n];
    update(1, 0, n + n + 2, i, cur);
    arr[i] = cur;
  }
  if (get(1, 0, n + n + 2, 0, n + n + 2) >= 0) ret[0] = 1;
  for (i = 1; i < n; i++)
    if (get(1, 0, n + n + 2, i, n + n + 2) - arr[i - 1] >= 0) ret[i] = 1;
  return;
}
void solve1() {
  int i, a, cur = 0;
  for (i = 0; i < 2 * n; i++) {
    cur += f[i % n];
    cur -= dis[i % n];
    update(1, 0, n + n + 2, i, cur);
    arr[i] = cur;
  }
  if (get(1, 0, n + n + 2, 0, n + n + 2) >= 0) ret[0] = 1;
  for (i = 1; i < n; i++)
    if (get(1, 0, n + n + 2, i, n + n + 2) - arr[i - 1] >= 0) ret[n - i] = 1;
  return;
}
int main() {
  int i, a, c = 0;
  fscanf(in, "%d", &n);
  for (i = 0; i < n; i++) fscanf(in, "%d", &f[i]);
  for (i = 0; i < n; i++) fscanf(in, "%d", &dis[i]);
  solve();
  reverse(dis, dis + n);
  for (i = 0; i < n; i++) test[i] = f[i];
  for (i = 1, a = n - 1; i < n; i++, a--) f[i] = test[a];
  solve1();
  for (i = 0; i < n; i++)
    if (ret[i]) c++;
  printf("%d\n", c);
  for (i = 0; i < n; i++)
    if (ret[i]) printf("%d ", i + 1);
  printf("\n");
  return 0;
}
