#include <bits/stdc++.h>
using namespace std;
const long long N = 5000005l;
long long n, a[N];
long long f[N], lst[N];
vector<long long> ret;
long long read() {
  long long x, f = 1;
  char ch;
  while ((ch = getchar()) < '0' || ch > '9')
    if (ch == '-') f = -1;
  x = ch ^ 48;
  while ((ch = getchar()) >= '0' && ch <= '9')
    x = (x << 3) + (x << 1) + (ch ^ 48);
  return x * f;
}
void add(long long x) {
  if (x < n && a[x] && a[x + 1]) {
    ret.push_back(x);
    long long tmp = min(a[x], a[x + 1]);
    a[x] -= tmp, a[x + 1] -= tmp;
  }
}
signed main() {
  scanf("%d", &n);
  for (long long i = 1; i <= n; i++) scanf("%d", a + i);
  f[2] = a[1];
  for (long long i = 3; i <= n + 1; i++) {
    if (f[i - 3] + max(a[i - 1], a[i - 2]) < f[i - 2] + a[i - 1])
      f[i] = f[i - 3] + max(a[i - 1], a[i - 2]), lst[i] = i - 3;
    else
      f[i] = f[i - 2] + a[i - 1], lst[i] = i - 2;
  }
  for (long long i = f[n] < f[n + 1] ? n : n + 1; i >= 2; i = lst[i]) {
    if (lst[i] == i - 3)
      add(i - 2), add(i - 1), i > 3 ? add(i - 3) : void();
    else
      add(i - 1), i > 2 ? add(i - 2) : void();
  }
  printf("%d\n", ret.size());
  for (long long i = 0; i < ret.size(); i++) printf("%d\n", ret[i]);
  return 0;
}
