#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100000 + 5;
long long a[MAXN], b[MAXN], d[MAXN];
bool can[MAXN];
struct elem {
  int id;
  elem() {}
  elem(int _id) : id(_id) {}
};
bool operator<(const elem& e1, const elem& e2) {
  return (d[e1.id] == d[e2.id]) ? e1.id < e2.id : d[e1.id] < d[e2.id];
}
set<elem> s;
int main() {
  int n, i;
  scanf("%d ", &n);
  for (i = 0; i < n; ++i) scanf("%I64d ", &a[i]);
  for (i = 0; i < n; ++i) {
    scanf("%I64d ", &b[i]);
  }
  memset(can, false, sizeof(can));
  int j;
  for (i = 0; i < 2; ++i) {
    d[0] = a[0] - b[0];
    for (j = 1; j < n; ++j) d[j] = d[j - 1] + a[j] - b[j];
    for (j = 0; j < n; ++j) {
      s.insert(elem(j));
    }
    long long offset = 0;
    int mn_id;
    for (j = 0; j < n; ++j) {
      mn_id = s.begin()->id;
      if (d[mn_id] - offset >= 0) {
        if (i == 0)
          can[j] = true;
        else
          can[(n - j) % n] = true;
      }
      offset += d[j] - offset;
      s.erase(s.find(elem(j)));
      d[(j + n) % n] = d[(j - 1 + n) % n] + a[(j + n) % n] - b[(j + n) % n];
      s.insert(elem((j + n) % n));
    }
    if (i == 0) {
      for (j = 1; j < n / 2; ++j) {
        swap(a[j], a[n - j]);
      }
      reverse(b, b + n);
      s.clear();
    }
  }
  vector<int> ans;
  for (i = 0; i < n; ++i)
    if (can[i]) ans.push_back(i);
  int sz = ans.size();
  printf("%d\n", sz);
  for (i = 0; i < sz; ++i) printf("%d ", ans[i] + 1);
  return 0;
}
