#include <bits/stdc++.h>
using namespace std;
vector<long long> vec;
long long p[300005], f[300005], last[300005];
long long read() {
  long long A;
  bool K;
  char C;
  C = A = K = 0;
  while (C < '0' || C > '9') K |= C == '-', C = getchar();
  while (C > '/' && C < ':') A = (A << 3) + (A << 1) + (C ^ 48), C = getchar();
  return (K ? -A : A);
}
inline void work(long long x) {
  long long tmp = ((p[x]) < (p[x + 1]) ? p[x] : p[x + 1]);
  vec.push_back(x);
  p[x] -= tmp;
  p[x + 1] -= tmp;
}
signed main() {
  long long n, i;
  n = read();
  for (i = 1; i <= (n); i++) p[i] = read();
  f[2] = p[1];
  for (i = 3; i <= (n + 1); i++)
    if (f[i - 3] + ((p[i - 1]) > (p[i - 2]) ? p[i - 1] : p[i - 2]) <
        f[i - 2] + p[i - 1])
      f[i] = f[i - 3] + ((p[i - 1]) > (p[i - 2]) ? p[i - 1] : p[i - 2]),
      last[i] = i - 3;
    else
      f[i] = f[i - 2] + p[i - 1], last[i] = i - 2;
  for (i = (f[n] < f[n + 1] ? n : n + 1); i > 1; i = last[i])
    if (last[i] == i - 3) {
      if (p[i - 1] && p[i - 2]) work(i - 2);
      if (p[i - 1]) work(i - 1);
      if (p[i - 2]) work(i - 3);
    } else {
      if (p[i - 1] && p[i - 2]) work(i - 2);
      if (i <= n && p[i - 1] && p[i]) work(i - 1);
    }
  printf("%I64d\n", vec.size());
  for (i = 0; i <= (signed(vec.size()) - 1); i++) printf("%I64d\n", vec[i]);
  return 0;
}
