#include <bits/stdc++.h>
using namespace std;
const int N = 200010, inf = 1e9 + 7;
int n, a[N], b[N], sum[N], vis[N];
struct node {
  int minn;
} tree[N << 2];
void pushup(int u) {
  tree[u].minn = min(tree[u << 1].minn, tree[u << 1 | 1].minn);
}
void build(int u, int x, int y) {
  if (x == y) {
    tree[u].minn = sum[x];
    return;
  }
  int mid = (x + y) >> 1;
  build(u << 1, x, mid), build(u << 1 | 1, mid + 1, y);
  pushup(u);
}
int query(int u, int x, int y, int a, int b) {
  if (a <= x && b >= y) return tree[u].minn;
  int mid = (x + y) >> 1, res = inf;
  if (a <= mid) res = min(res, query(u << 1, x, mid, a, b));
  if (b > mid) res = min(res, query(u << 1 | 1, mid + 1, y, a, b));
  return res;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), a[i + n] = a[i];
  for (int i = 1; i <= n; i++) scanf("%d", &b[i]), b[i + n] = b[i];
  n <<= 1;
  for (int i = 1; i <= n; i++) sum[i] = sum[i - 1] + a[i] - b[i];
  build(1, 1, n);
  int ans[N];
  for (int i = 1; i <= (n >> 1); i++)
    if (query(1, 1, n, i, i + (n >> 1)) - sum[i - 1] >= 0)
      ans[++ans[0]] = i, vis[i] = 1;
  for (int i = n; i > 1; i--) sum[i] = sum[i + 1] + a[i] - b[i - 1];
  sum[1] = sum[2] + a[1] - b[n];
  build(1, 1, n);
  for (int i = n; i > (n >> 1); i--) {
    if (query(1, 1, n, i - (n >> 1), i) - sum[i + 1] >= 0 && !vis[i - (n >> 1)])
      ans[++ans[0]] = i - (n >> 1);
  }
  sort(ans + 1, ans + ans[0] + 1);
  printf("%d\n", ans[0]);
  for (int i = 1; i <= ans[0]; i++) printf("%d ", ans[i]);
  return 0;
}
