#include <bits/stdc++.h>
using namespace std;
const long long INF = (long long)1e16;
const int N = 900300;
const int K = 40;
int n;
long long a[N];
long long sum[N];
long long dp[N][2];
int par[N][2][3];
int intPoint[N];
int m;
vector<int> ans;
long long getCost(int L, int R, int f1, int f2) {
  int len = R - L;
  if (len == 1) {
    if (a[L] == 0) return 0;
    if (f1 == 0 || f2 == 0) return -1;
    return a[L];
  }
  if (len == 2) {
    if (a[L] == a[L + 1]) return 0;
    if (a[L] < a[L + 1]) {
      if (f2 == 0) return -1;
      return abs(a[L + 1] - a[L]);
    } else {
      if (f1 == 0) return -1;
      return abs(a[L + 1] - a[L]);
    }
  }
  if (f1 == 0 && a[L] > a[L + 1]) return -1;
  if (f2 == 0 && a[R - 1] > a[R - 2]) return -1;
  long long cost = abs(sum[R] - sum[L]);
  if (len == 3) {
    if (a[L] + a[L + 2] <= a[L + 1]) return cost;
    if (f1 == 1 && f2 == 1) return cost;
    if (f1 == 0 && f2 == 0) return -1;
    return cost;
  }
  return cost;
}
void restoreAns(int L, int R, int f1, int f2) {
  int len = R - L;
  if (len == 1) {
    return;
  }
  if (len == 2) {
    if (a[L] == 0 || a[L + 1] == 0) return;
    ans.push_back(L);
    return;
  }
  if (f1 == 0 && a[L] != 0 && a[L + 1] != 0) {
    long long x = min(a[L], a[L + 1]);
    ans.push_back(L);
    a[L] -= x;
    a[L + 1] -= x;
  }
  if (f2 == 0 && a[R - 1] != 0 && a[R - 2] != 0) {
    long long x = min(a[R - 1], a[R - 2]);
    ans.push_back(R - 2);
    a[R - 2] -= x;
    a[R - 1] -= x;
  }
  for (int i = L; i < R - 1; i++) {
    if (a[i] != 0 && a[i + 1] != 0) {
      long long x = min(a[i], a[i + 1]);
      ans.push_back(i);
      a[i] -= x;
      a[i + 1] -= x;
    }
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%lld", &a[i]);
    sum[i + 1] = sum[i];
    if (i % 2 == 0)
      sum[i + 1] += a[i];
    else
      sum[i + 1] -= a[i];
  }
  for (int i = 0; i <= n; i++) {
    if (i < 5 || i > n - 5) {
      intPoint[m++] = i;
      continue;
    }
    if (a[i - 1] <= a[i - 2] || a[i] <= a[i + 1]) intPoint[m++] = i;
  }
  for (int i = 0; i <= m; i++) dp[i][0] = dp[i][1] = -INF;
  dp[0][0] = 0;
  dp[0][1] = 0;
  for (int i = 0; i < m; i++)
    for (int f1 = 0; f1 < 2; f1++) {
      if (dp[i][f1] < 0) continue;
      for (int j = i + 1; j < min(m, i + K); j++) {
        for (int f2 = 0; f2 < 2 - f1; f2++)
          for (int f3 = 0; f3 < 2; f3++) {
            long long cost = getCost(intPoint[i], intPoint[j], f2, f3);
            if (cost == -1) continue;
            if (dp[i][f1] + cost > dp[j][f3]) {
              dp[j][f3] = dp[i][f1] + cost;
              par[j][f3][0] = i;
              par[j][f3][1] = f1;
              par[j][f3][2] = f2;
            }
          }
      }
    }
  int x = m - 1;
  int f = 0;
  if (dp[x][1] > dp[x][0]) f = 1;
  while (x > 0) {
    restoreAns(intPoint[par[x][f][0]], intPoint[x], par[x][f][2], f);
    int nx = par[x][f][0];
    f = par[x][f][1];
    x = nx;
  }
  printf("%d\n", (int)ans.size());
  for (int y : ans) printf("%d\n", 1 + y);
  return 0;
}
