#include <bits/stdc++.h>
using namespace std;
void solve(int n, int a[], int b[], bool possible[], bool rev) {
  multiset<int> S;
  int acc = 0;
  for (int i = 1; i <= n; ++i) {
    acc += a[i] - b[i];
    S.insert(acc);
  }
  int d = 0;
  int tot = acc;
  for (int i = 1; i <= n; ++i) {
    if (i > 1) {
      S.erase(S.find(a[i - 1] - b[i - 1] + d));
    }
    d += a[i - 1] - b[i - 1];
    if (i > 1) {
      S.insert(tot + d);
    }
    if (*(S.begin()) - d >= 0) {
      if (!rev) {
        possible[i] = true;
      } else {
        if (i == 1) {
          possible[1] = 1;
        } else {
          possible[n - i + 2] = true;
        }
      }
    }
  }
}
int main() {
  int n;
  scanf("%d", &n);
  int a[n + 1], b[n + 1], arev[n + 1], brev[n + 1];
  bool possible[n + 1];
  for (int i = 1; i <= n; ++i) {
    possible[i] = false;
  }
  a[0] = arev[0] = 0;
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
    if (i > 1) {
      arev[n - i + 2] = a[i];
    }
  }
  arev[1] = a[1];
  b[0] = brev[0] = 0;
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &b[i]);
    brev[n - i + 1] = b[i];
  }
  solve(n, a, b, possible, false);
  solve(n, arev, brev, possible, true);
  int cnt = 0;
  for (int i = 1; i <= n; ++i) {
    if (possible[i]) {
      ++cnt;
    }
  }
  printf("%d\n", cnt);
  int pt = 0;
  for (int i = 1; i <= n; ++i) {
    if (possible[i]) {
      printf("%d", i);
      ++pt;
      if (pt < cnt) {
        printf(" ");
      }
    }
  }
  printf("\n");
  return 0;
}
