#include <bits/stdc++.h>
using namespace std;
int n, a[300001];
int best[300001][8][2][2];
long long dp[300001][2];
int cut[300001][8][2][2];
pair<int, pair<int, int> > prv[300001][2];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
  }
  for (int i = 0; i < 300001; i++) {
    for (int j = 0; j < 8; j++) {
      for (int x = 0; x < 2; x++) {
        for (int y = 0; y < 2; y++) {
          best[i][j][x][y] = -1;
          dp[i][x] = -1;
        }
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= 7 && i + j - 1 <= n; j++) {
      long long sum[2] = {};
      for (int x = i; x <= i + j - 1; x++) {
        sum[x % 2] += a[x];
      }
      for (int x = i; x <= i + j - 1; x++) {
        if (sum[x % 2] < sum[1 - x % 2]) continue;
        long long w = a[x] - sum[x % 2] + sum[1 - x % 2];
        long long rec = 0;
        for (int y = i; y <= i + j - 1; y++) {
          rec *= -1;
          if (y != x)
            rec += a[y];
          else
            rec += w;
          if (rec < 0) {
            goto plz;
          }
        }
        if (rec != 0) goto plz;
        if (best[i][j][(x == i)][(x == i + j - 1)] <
            sum[x % 2] - sum[1 - x % 2]) {
          best[i][j][(x == i)][(x == i + j - 1)] = sum[x % 2] - sum[1 - x % 2];
          cut[i][j][(x == i)][(x == i + j - 1)] = x;
        }
      plz:;
        ;
      }
    }
  }
  dp[0][0] = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < 2; j++) {
      if (dp[i][j] < 0) continue;
      for (int k = 1; i + k <= n && k <= 7; k++) {
        for (int b = 0; b < 2; b++) {
          for (int c = 0; c < 2; c++) {
            if (best[i + 1][k][b][c] < 0) continue;
            if (j && b) continue;
            if (dp[i + k][c] < dp[i][j] + best[i + 1][k][b][c]) {
              dp[i + k][c] = dp[i][j] + best[i + 1][k][b][c];
              prv[i + k][c] = make_pair(b, make_pair(i, j));
            }
          }
        }
      }
    }
  }
  pair<long long, pair<int, int> > ans;
  for (int i = n; i <= n; i++) {
    for (int j = 0; j < 2; j++) {
      ans = max(ans, make_pair(dp[i][j], make_pair(i, j)));
    }
  }
  int X = ans.second.first, Y = ans.second.second;
  vector<int> use;
  while (make_pair(X, Y) != make_pair(0, 0)) {
    int b = prv[X][Y].first, i = prv[X][Y].second.first,
        j = prv[X][Y].second.second;
    int k = X - i, c = Y;
    for (int q = i + 1; q < cut[i + 1][k][b][c]; q++) {
      if (a[q] == 0 || a[q + 1] == 0) continue;
      use.push_back(q);
      int V = min(a[q], a[q + 1]);
      a[q] -= V;
      a[q + 1] -= V;
    }
    for (int q = i + k - 1; q >= cut[i + 1][k][b][c]; q--) {
      if (a[q] == 0 || a[q + 1] == 0) continue;
      use.push_back(q);
      int V = min(a[q], a[q + 1]);
      a[q] -= V;
      a[q + 1] -= V;
    }
    X = i;
    Y = j;
  }
  printf("%d\n", use.size());
  for (int i = 0; i < use.size(); i++) {
    printf("%d\n", use[i]);
  }
}
