#include <iostream>
#include <cstdio>
#include <cstring>
#include <cassert>
#include <bitset>
#include <vector>
typedef long long lint;
const int N=1005;
int n,val[N];
std::bitset <N> use;

namespace utils{
	template <class T> inline void apn(T &x,const T y){x=x<y?x:y;}
	template <class T> inline void apx(T &x,const T y){x=x>y?x:y;}
	inline int nxi(){
		int x=0;
		char c;
		while(((c=getchar())>'9'||c<'0')&&c!='-');
		const bool f=c=='-'&&(c=getchar());
		while(x=x*10-48+c,(c=getchar())>='0'&&c<='9');
		return f?-x:x;
	}
}
using namespace utils;

int main(){
	std::vector <int> step;
	n=nxi();
	{
		lint v[2]={0};
		bool all_neg=1;
		int xpos=1;
		for(int i=1; i<=n; ++i){
			val[i]=nxi();
			if(val[i]>0) v[i&1]+=val[i];
			all_neg&=val[i]<0;
			if(val[xpos]<val[i]) xpos=i;
		}
		bool p=v[1]>v[0];
		printf("%lld\n",all_neg?(lint)val[xpos]:v[p]);
		for(int i=1; i<=n; ++i){
			use[i]=(i&1)==p&&val[i]>=0;
		}
		if(all_neg) use[xpos]=1;
	}
	for(int x=n; n>1; apn(x,n)){
		for(; x&&(use[x]||(x!=1&&x!=n&&use[x-1]!=use[x+1])); --x);
		assert(x);
		step.push_back(x);
		const int p=2-(x==1||x==n);
		n-=p;
		use=(use>>(x+p)<<x)|(use^(use>>x<<x));
	}
	printf("%d\n",(int)step.size());
	for(std::vector <int> ::iterator it=step.begin(); it!=step.end(); ++it){
		printf("%d\n",*it);
	}
	return 0;
}
