#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);
    int n,prvi=0;cin>>n;
    int a[n],dp[n];
    ll zbir=0;
    int razsus=0;
    for(int i=0;i<n;i++){
        dp[i]=0;
        cin>>a[i];
        zbir+=ll(a[i]);
    }
    vector<int> adj[n];
    for(int i=0;i<n-1;i++){
        int u,v;
        cin >> u >> v;
        u--;v--;
        if(u==0 || v==0)prvi++;
        adj[u].push_back(v);
        adj[v].push_back(u);
        razsus=max(razsus,abs(v-u));
    }
    if(prvi==n-1){// svi su povezani sa njim prvi podzadatak
        if((zbir)-ll(a[0]) >=  ll(a[0])){//zbir svih bez prvog VS prvi
            cout<<a[0]<<endl;//prvi je manji ili jednak
            cout<<1<<endl;
            cout<<1<<endl;
            cout<<0<<endl;
        }
        else{
            cout<<(zbir)-ll(a[0])<<endl;
            cout<<n-1<<endl;
            for(int i=2;i<=n;i++){
                cout<<i<<" ";
            }cout<<endl;
            cout<<0<<endl;
        }
        return 0;
    }

    //int vr1=0,vr2=0;
    //treci podzadatak svaki je povezan sa susednim brojem
    vector<int>c,p;
    dp[0]=a[0];
    c.push_back(0);
    dp[1]=a[1];
    p.push_back(1);
    if(razsus==1){// dp se radi
        for(int i=2;i<n;i++){
            dp[i]=a[i]+min(dp[i-1],dp[i-2]);
            if(i%2==0){//paran, ide u crveno
                c.push_back(i);
            }
            else{
                p.push_back(i);
            }
        }
        cout<<dp[n-1]<<endl;
        cout<<c.size()<<endl;
        for(int i=0;i<c.size();i++){
            cout<< c[i]+1 << " ";
        }cout<<endl;
        cout<<p.size()<<endl;
        for(int i=0;i<p.size();i++){
            cout<< p[i]+1 << " ";
        }cout<<endl;
    }

    /*for(int i=0;i<n;i++){
        for(auto x:adj[i]){
            cout<<x<<" ";
        }cout<<endl;
    }*/
    return 0;
}