#include <bits/stdc++.h>
using namespace std;
int n;
vector<int> a, b;
void rev(vector<int>& a, vector<int>& b) {
  reverse(a.begin(), a.end());
  reverse(b.begin(), b.end() - 1);
}
vector<char> solve(const vector<int>& a, const vector<int>& b) {
  vector<int> d = a;
  for (int i = 0; i < n; ++i) d[i] -= b[i];
  d.insert(d.end(), d.begin(), d.end());
  for (int i = 1; i < 2 * n; ++i) d[i] += d[i - 1];
  vector<int> ll(n), rr(n + 1);
  ll[n - 1] = d[n - 1];
  for (int i = n - 2; i >= 0; --i) ll[i] = min(ll[i + 1], d[i]);
  rr[0] = ll[0], rr[1] = d[n];
  for (int i = 2; i <= n; ++i) rr[i] = min(rr[i - 1], d[n + i - 1]);
  vector<char> ret(n, false);
  int sum = 0;
  for (int i = 0; i < n; ++i) {
    ret[i] = (min(ll[i], rr[i]) >= sum);
    sum = d[i];
  }
  return ret;
}
int main() {
  scanf("%d", &n);
  a.resize(n), b.resize(n);
  for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
  for (int i = 0; i < n; ++i) scanf("%d", &b[i]);
  vector<char> can1 = solve(a, b);
  rev(a, b);
  vector<char> can2 = solve(a, b);
  reverse(can2.begin(), can2.end());
  int k = 0;
  for (int i = 0; i < n; ++i) k += (can1[i] || can2[i]);
  printf("%d\n", k);
  for (int i = 0; i < n; ++i)
    if (can1[i] || can2[i]) printf("%d ", i + 1);
  if (k) putchar('\n');
  return 0;
}
