#include <bits/stdc++.h>
using namespace std;
namespace round61 {
namespace E {
const int INF = 1000000000;
set<int> calc(const vector<int>& a, const vector<int>& b, bool rev = false) {
  set<int> res;
  vector<int> d_min(a.size(), INF);
  int pos = 0, delta = 0;
  for (int i = 0; i < (int)a.size(); ++i) {
    delta += a[i];
    delta -= b[i];
    d_min[pos] = min(delta, d_min[pos]);
  }
  if (d_min[pos] >= 0) res.insert(pos + 1);
  while (++pos < (int)a.size()) {
    d_min[pos] = d_min[pos - 1] - a[pos - 1] + b[pos - 1];
    if (d_min[pos] >= 0) res.insert(rev ? (int)a.size() - pos : pos + 1);
  }
  return res;
}
int solve(istream& in) {
  int n;
  in >> n;
  vector<int> a(n), b(n);
  for (int i = 0; i < n; in >> a[i++])
    ;
  for (int i = 0; i < n; in >> b[i++])
    ;
  set<int> ans;
  vector<int> d_min(a.size(), INF);
  int pos = 0, delta = 0;
  for (int i = 0; i < n; ++i) {
    delta += a[i];
    delta -= b[i];
    d_min[pos] = min(delta, d_min[pos]);
  }
  if (d_min[pos] >= 0) ans.insert(pos + 1);
  while (++pos < (int)a.size()) {
    d_min[pos] = d_min[pos - 1] - a[pos - 1] + b[pos - 1];
    if (d_min[pos] >= 0) ans.insert(pos + 1);
  }
  d_min.assign(a.size(), INF);
  pos = 0, delta = 0;
  for (int i = n; i > 0; --i) {
    delta += a[i % n];
    delta -= b[(i - 1) % n];
    d_min[pos] = min(delta, d_min[pos]);
  }
  if (d_min[pos] >= 0) ans.insert(pos + 1);
  for (pos = n - 1; pos > 0; --pos) {
    d_min[pos] = d_min[(pos + 1) % n] - a[(pos + 1) % n] + b[pos];
    if (d_min[pos] >= 0) ans.insert(pos + 1);
  }
  cout << ans.size() << endl;
  for (set<int>::iterator it = ans.begin(); it != ans.end(); ++it) {
    cout << *it << " ";
  }
  return 999;
}
}  // namespace E
}  // namespace round61
int main() {
  ios_base::sync_with_stdio(false);
  int status = 0;
  do {
    status = round61::E::solve(cin);
  } while (0);
  return 0;
}
