#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
inline T1 max(T1 a, T2 b) {
  return b < a ? a : b;
}
template <typename T1, typename T2>
inline T1 min(T1 a, T2 b) {
  return a < b ? a : b;
}
namespace ae86 {
const int bufl = 1 << 15;
char buf[bufl], *s = buf, *t = buf;
inline int fetch() {
  if (s == t) {
    t = (s = buf) + fread(buf, 1, bufl, stdin);
    if (s == t) return EOF;
  }
  return *s++;
}
inline int ty() {
  int a = 0, b = 1, c = fetch();
  while (!isdigit(c)) b ^= c == '-', c = fetch();
  while (isdigit(c)) a = a * 10 + c - 48, c = fetch();
  return b ? a : -a;
}
}  // namespace ae86
using ae86::ty;
const int _ = 300007;
int n, val[_] = {0}, cho[_] = {0};
long long f[_];
vector<int> ans;
inline void gay(int x) {
  if (val[x] <= 0 || val[x + 1] <= 0) return;
  int dlt = min(val[x], val[x + 1]);
  ans.push_back(x), val[x] -= dlt, val[x + 1] -= dlt;
}
int main() {
  n = ty();
  for (int i = 1; i <= n; i++) val[i] = ty();
  for (int i = 1; i <= n; i++) {
    long long a = f[max(i - 2, 0)] + val[i],
              b = f[max(i - 3, 0)] + max(val[i - 1], val[i]);
    f[i] = min(a, b);
    if (f[i] == b) cho[i] = 1;
  }
  for (int i = (min(f[n], f[n - 1]) == f[n]) ? (n) : (n - 1); i >= 1;
       i -= 2 + cho[i]) {
    gay(i - 1);
    if (cho[i]) gay(i - 2);
    gay(i);
  }
  printf("%lu\n", ans.size());
  for (auto i : ans) printf("%d\n", i);
  return 0;
}
