#include <bits/stdc++.h>
using namespace std;
vector<int> split, ans;
int a[300002];
int p[300002][3];
long long max(long long a, long long b) { return a >= b ? a : b; }
long long min(long long a, long long b) { return a <= b ? a : b; }
int main() {
  int n, i, j, l, r;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", a + i);
  }
  a[0] = a[n + 1] = 0;
  long long _0, _1, _2, __0, __1, __2;
  _0 = a[1], _1 = 0, _2 = -1;
  for (i = 1; i <= n; i++) {
    p[i + 1][0] = p[i + 1][1] = p[i + 1][2] = -1;
    __0 = __1 = __2 = -1;
    if (~_0) {
      if (__1 == -1 || _0 < __1) {
        __1 = _0;
        p[i + 1][1] = 0;
      }
    }
    if (~_1) {
      if (__2 == -1 || _1 < __2) {
        __2 = _1;
        p[i + 1][2] = 1;
      }
    }
    if (~_2) {
      if (__0 == -1 || _2 + max(a[i], a[i + 1]) < __0) {
        __0 = _2 + max(a[i], a[i + 1]);
        p[i + 1][0] = 2;
      }
      if (__1 == -1 || _2 + a[i] < __1) {
        __1 = _2 + a[i];
        p[i + 1][1] = 2;
      }
    }
    _0 = __0, _1 = __1, _2 = __2;
  }
  long long u;
  j = 0, u = __0;
  if (__1 < u) j = 1, u = __1;
  if (__2 < u) j = 2, u = __2;
  split.clear();
  for (i = n + 1;; i--) {
    if (j == 0) {
      split.push_back(i - 1);
    }
    if (i == 1) break;
    j = p[i][j];
  }
  ans.clear();
  int t;
  for (i = 0; i < split.size(); i++) {
    j = split[i];
    t = min(a[j], a[j + 1]);
    a[j] -= t, a[j + 1] -= t;
    if (t) ans.push_back(j);
  }
  for (i = split.size() - 1; i >= -1; i--) {
    l = i == split.size() - 1 ? 0 : split[i + 1] + 1, r = ~i ? split[i] : n + 1;
    for (j = l; j <= r; j += 2) {
      if (j >= 1 && min(a[j - 1], a[j])) {
        t = min(a[j - 1], a[j]);
        a[j - 1] -= t, a[j] -= t;
        ans.push_back(j - 1);
      }
      if (j <= n && min(a[j], a[j + 1])) {
        t = min(a[j], a[j + 1]);
        a[j] -= t, a[j + 1] -= t;
        ans.push_back(j);
      }
    }
  }
  printf("%d\n", ans.size());
  for (i = 0; i < ans.size(); i++) printf("%d\n", ans[i]);
  return 0;
}
