#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#define ll  long long 
#define ull unsigned long long int
#define boost ios_base::sync_with_stdio(false);	cin.tie(NULL);	cout.tie(NULL)
#define vi vector<int>
#define P push_back
#define F first
#define S second
#define debug(x) cout<<x<<" "
#define pi vector<pair<int,int> >
#define all(a) a.begin(),a.end()
#define int ll
using namespace std;
using namespace __gnu_pbds;
typedef tree <int, null_type,less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
ll const mod=1e9+7;
int powi(int i,int b){
    int res=1;
    while(b){
        if(b&1)res*=i,res%=mod;
        b>>=1;
        i*=i;
        i%=mod;
    }
    return res;
}
// map<int,int> m;
// ll fact(int n){
// 	//if(n==0)return 0;
// 	if(n<=1)return 1;
// 	if(m[n]!=0)return m[n];
// 	return m[n]=(n*fact(n-1))%mod;
//}
// int ncr(int n,int r){
//     int h=fact(n);
//     int v=fact(r);
//     int j=fact(n-r);
//     v*=j;
//     v%=mod;
//     v=powi(v,mod-2);
//     return (h*v)%mod;
// }
// vi ar(2000000);
// vi sz(2000000);
// int root(int a){
//     if(ar[a]==a)return a;
//     return ar[a]=root(ar[a]);
// }
// int merge(int a,int b){
//     int h=root(a),j=root(b);
//     int ans=sz[h]*sz[j];
//     sz[j]+=sz[h];
//     if(h!=j){
//         ar[h]=j;
//     }
//     return ans;
// } 
void solve(){
    int n;
    cin>>n;
    vi a(n);
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    int sum1=0,sum2=0,cnt=0;
    vi a1,a2;
    for(int i=0;i<n;i++){
        if(a[i]>=0){
            if(i&1)sum1+=a[i];
            else sum2+=a[i];
        }else {
            if(i&1)a1.P(i);
            else a2.P(i);
            cnt++;
        }
    }
    vi ans;
    if(cnt==n){
        sum1=INT_MIN;
        for(int i=0;i<n;i++){
            sum1=max(sum1,a[i]);
        }
        int i;
        for(i=0;i<n;i++){
            if(a[i]==sum1){
                break;
            }else{
                ans.P(0);
            }
        }
        for(int j=n-1;j>i;j--){
            ans.P(j-i);
        }
        cout<<sum1<<"\n"<<ans.size()<<"\n";
        for(int i=0;i<ans.size();i++){
            cout<<ans[i]+1<<"\n";
        }
        return;
    }
    if(sum1>sum2){
        int cnt=0;
        ans.P(0);cnt++;
        for(int i=a1.size()-1;i>=0;i--){
            if(a1[i]==n-1)continue;
            if(a1[i]==1)continue;
            ans.P(a1[i]-1);cnt+=2;
        }
        if(a[1]<0){
            ans.P(0);ans.P(0);cnt+=2;
        }
        if(n-1!=1&&a[n-1]<0&&(n-1)%2==1){
            ans.P(n-cnt-1);ans.P(n-cnt-2);cnt+=2;
        }
        for(int i=0;i<((n-cnt)/2);i++){
            ans.P(1);
        }
        cout<<sum1<<"\n";
    }else{
        int cnt=0;
        for(int i=a2.size()-1;i>=0;i--){
            if(a2[i]==n-1)continue;
            if(a2[i]==0)continue;
            ans.P(a2[i]);cnt+=2;
        }
        if(a[0]<0){
            ans.P(0);ans.P(0);cnt+=2;
        }
        if(n-1!=0&&a[n-1]<0&&(n-1)%2==0){
            ans.P(n-cnt-1);ans.P(n-cnt-2);cnt+=2;
        }
        for(int i=0;i<((n-cnt)/2);i++){
            ans.P(1);
        }
        cout<<sum2<<"\n";
    }
    cout<<ans.size()<<"\n";
    for(int i=0;i<ans.size();i++){
        cout<<ans[i]+1<<"\n";
    }
}
signed main(){
    boost;
    int t=1;
    //cin>>t;
    for(int _=1;_<=t;_++){
        //cout<<"Case #"<<_<<": ";
        solve();
        cout<<"\n";
    }
    
    return 0;
}

Measured memory_bytes: 256