#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];
    ll zbir=0;
    int razsus=0;
    for(int i=0;i<n;i++){
        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
    if(razsus==1){//radi se dp
        for(int i=0;i<n;i++){
            if((i+1)&1){//neparna pozicija posto se broji od 1 ide i+1
                vr1+=a[i];//niz je od 0 pa je samo i
            }
            else{
                vr2+=a[i];
            }
        }
        if(vr1<=vr2){//neparni
            //zbir1
            cout<<vr1<<endl;
            //crveni
            cout<<  ( n&1 ? ((n+1)/2) : (n/2) ) <<endl;//ako je parno onda treba n/2
            for(int i=0;i<n;i++){
                if((i+1)&1)cout<<(i+1)<<" ";
            }cout<<endl;
            cout<<0<<endl;

        }
        else{//parni
            //zbir2
            cout<<vr2<<endl;
            //crveni
            cout<<  ( n&1 ? (n-1)/2 : (n/2) ) <<endl;
            for(int i=0;i<n;i++){
                if(!((i+1)&1))cout<<(i+1)<<" ";
            }cout<<endl;
            cout<<0<<endl;
        }

    }

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