#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void init(T& x) {
  x = 0;
  char ch = getchar();
  bool t = 0;
  for (; ch > '9' || ch < '0'; ch = getchar())
    if (ch == '-') t = 1;
  for (; ch >= '0' && ch <= '9'; ch = getchar())
    x = (x << 1) + (x << 3) + (ch - 48);
  if (t) x = -x;
  return;
}
const int N = 3e5 + 10;
const long long INF = 1e18;
int P[N];
long long f[N];
int fr[N];
int n;
vector<int> opt;
inline void Deal(int i) {
  int x = min(P[i], P[i + 1]);
  if (!x) return;
  opt.emplace_back(i);
  P[i] -= x, P[i + 1] -= x;
}
int main() {
  init(n);
  for (int i = 1; i <= n; ++i) init(P[i]);
  for (int i = 1; i <= n; ++i) {
    long long b;
    f[i] = min(f[max(i - 2, 0)] + P[i],
               b = (f[max(i - 3, 0)] + max(P[i], P[i - 1])));
    if (f[i] == b)
      fr[i] = max(i - 3, 0);
    else
      fr[i] = max(i - 2, 0);
  }
  long long ans = min(f[n - 1], f[n]);
  for (int i = (n - (ans == f[n - 1])); i; i = fr[i]) {
    Deal(i - 1);
    if (fr[i] == i - 3) Deal(i - 2);
    Deal(i);
  }
  printf("%d\n", (int)opt.size());
  for (int v : opt) printf("%d\n", v);
  return 0;
}
