#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;   }   