#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:16777216")
using namespace std;
template <class T>
void pv(T a, T b) {
  for (T i = a; i != b; ++i) cout << *i << " ";
  cout << endl;
}
int n;
int a[1 << 20], b[1 << 20];
const int MAXN = 200000 + 100;
long long tree[4 * MAXN], add[4 * MAXN];
void update1(int pos, long long val, int no = 1, int ini = 0, int fim = MAXN) {
  if (fim < pos || pos < ini) return;
  if (ini == fim)
    tree[no] += val;
  else {
    int med = (ini + fim) / 2;
    update1(pos, val, 2 * no, ini, med);
    update1(pos, val, 2 * no + 1, med + 1, fim);
    tree[no] = min(tree[2 * no], tree[2 * no + 1]);
  }
}
void update2(int i, int j, long long inc, int no = 1, int ini = 0,
             int fim = MAXN) {
  if (fim < i || j < ini) return;
  if (i <= ini && fim <= j) {
    add[no] += inc;
  } else {
    int med = (ini + fim) / 2;
    update2(i, j, inc, 2 * no, ini, med);
    update2(i, j, inc, 2 * no + 1, med + 1, fim);
    tree[no] =
        min(tree[2 * no] + add[2 * no], tree[2 * no + 1] + add[2 * no + 1]);
  }
}
long long query(int i, int j, int no = 1, int ini = 0, int fim = MAXN) {
  if (fim < i || j < ini) return (1LL << 30);
  if (i <= ini && fim <= j) {
    return tree[no] + add[no];
  } else {
    int med = (ini + fim) / 2;
    long long q1 = query(i, j, 2 * no, ini, med);
    long long q2 = query(i, j, 2 * no + 1, med + 1, fim);
    return add[no] + min(q1, q2);
  }
}
char can[1 << 20];
int main() {
  cin >> n;
  for (int(i) = (0); (i) < (n); (i)++) scanf("%d", a + i);
  for (int(i) = (0); (i) < (n); (i)++) scanf("%d", b + i);
  {
    memset(add, 0, sizeof(add));
    memset(tree, 0, sizeof(tree));
    long long now = 0;
    for (int i = 0; i < n; i++) {
      now += (a[i] - b[i]);
      update1(i, now);
    }
    for (int i = 0; i < n; i++) {
      long long q = query(i, n + i - 1);
      if (q >= 0) can[i] = 1;
      update2(i, n + i - 1, b[i] - a[i]);
    }
  }
  {
    reverse(a, a + n);
    reverse(b, b + n);
    {
      long long tmp = b[0];
      for (int i = 0; i < n; i++) b[i] = b[i + 1];
      b[n - 1] = tmp;
    }
    memset(add, 0, sizeof(add));
    memset(tree, 0, sizeof(tree));
    long long now = 0;
    for (int i = 0; i < n; i++) {
      now += (a[i] - b[i]);
      update1(i, now);
    }
    for (int i = 0; i < n; i++) {
      long long q = query(i, n + i - 1);
      if (q >= 0) can[n - i - 1] = 1;
      update2(i, n + i - 1, b[i] - a[i]);
    }
  }
  int tot = 0, foi = 0;
  for (int i = 0; i < n; i++) {
    tot += can[i];
  }
  cout << tot << endl;
  for (int i = 0; i < n; i++)
    if (can[i]) {
      if (foi++) printf(" ");
      printf("%d", i + 1);
    }
  if (foi) printf("\n");
  return 0;
}
