#include <bits/stdc++.h>
using namespace std;
long long n, a[100005], b[100005], c[100005], pref[100005], suff[100005],
    it1[500005], it2[500005], max1[100005], max2[100005];
void build_tree(int k, int l, int r) {
  if (l == r) {
    it1[k] = pref[l];
    it2[k] = suff[l];
    return;
  }
  int mid = (l + r) / 2;
  build_tree(k * 2, l, mid);
  build_tree(k * 2 + 1, mid + 1, r);
  it1[k] = min(it1[k * 2], it1[k * 2 + 1]);
  it2[k] = min(it2[k * 2], it2[k * 2 + 1]);
}
long long get1(int k, int l, int r, int L, int R) {
  if (r < L || R < l || l > r) return LLONG_MAX;
  if (L <= l && r <= R) return it1[k];
  int mid = (l + r) / 2;
  return min(get1(k * 2, l, mid, L, R), get1(k * 2 + 1, mid + 1, r, L, R));
}
long long get2(int k, int l, int r, int L, int R) {
  if (r < L || R < l || l > r) return LLONG_MAX;
  if (L <= l && r <= R) return it2[k];
  int mid = (l + r) / 2;
  return min(get2(k * 2, l, mid, L, R), get2(k * 2 + 1, mid + 1, r, L, R));
}
int main() {
  cin.tie(0), cout.tie(0), ios::sync_with_stdio(0);
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  for (int i = 1; i <= n; i++) cin >> b[i];
  for (int i = 1; i <= n; i++) {
    c[i] = a[i] - b[i];
    pref[i] = c[i];
  }
  b[0] = b[n];
  for (int i = n; i >= 1; i--) suff[i] = a[i] - b[i - 1];
  for (int i = 2; i <= n; i++) pref[i] += pref[i - 1];
  for (int i = 1; i <= n; i++) {
    max1[i] = pref[i];
    if (i - 1 >= 1) max1[i] = min(max1[i - 1], max1[i]);
  }
  for (int i = n - 1; i >= 1; i--) suff[i] += suff[i + 1];
  for (int i = n; i >= 1; i--) {
    max2[i] = suff[i];
    if (i + 1 <= n) max2[i] = min(max2[i], max2[i + 1]);
  }
  vector<int> ans;
  build_tree(1, 1, n);
  for (int i = 1; i <= n; i++) {
    if (i == 1) {
      int check1 = 0;
      if (max1[n] >= 0) {
        ans.push_back(i);
      } else {
        long long sum = a[i];
        for (int j = n; j >= 1; j--) {
          sum -= b[j];
          if (sum < 0) {
            check1 = 1;
            break;
          }
          sum += a[j];
        }
        if (sum < 0) check1 = 1;
        if (check1 == 0) ans.push_back(i);
      }
    } else if (i == n) {
      int check1 = 0;
      if (max2[1] >= 0) {
        ans.push_back(i);
      } else {
        long long sum = a[n];
        sum -= b[n];
        for (int j = 1; j < n; j++) {
          if (sum < 0) {
            check1 = 1;
            break;
          }
          sum += a[j];
          sum -= b[j];
        }
        if (sum < 0) check1 = 1;
        if (check1 == 0) ans.push_back(i);
      }
    } else {
      int check1 = 0, check2 = 0;
      long long k1 = get1(1, 1, n, i, n), amount1;
      long long k2 = get2(1, 1, n, 1, i), amount2;
      if (k1 - pref[i - 1] < 0) check1 = 1;
      amount1 = pref[n] - pref[i - 1];
      if (max1[i - 1] + amount1 < 0) check1 = 1;
      amount2 = suff[i + 1];
      if (k2 - amount2 < 0) check2 = 1;
      if (max2[i + 1] + suff[1] - suff[i + 1] < 0) check2 = 1;
      if (check1 == 0 || check2 == 0) ans.push_back(i);
    }
  }
  cout << ans.size() << "\n";
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << " ";
}
