#include<bits/stdc++.h>
#define ll long long
#define pll pair<ll,ll>
#define pii pair<int,int>
#define all(data) data.begin(),data.end()
#define pb push_back
#define mp make_pair
#define INF 1e13
#define MOD 1000000007
using namespace std;
#define MAXN 400007
vector<ll> adj[MAXN],vrez;
ll a[MAXN],dp[MAXN][2],gp[MAXN][2],h[MAXN];
void DFSh(ll u,ll p)
{
    h[u]=h[p]+1;
    for(auto v:adj[u])
    {
        if(v==p) continue;
        DFSh(v,u);
    }
}
void DFS(ll u,ll p)
{
    if(adj[u].size()==1 && adj[u][0]==p)
    {
        dp[u][0]=0; dp[u][1]=a[u];
        gp[u][0]=gp[u][1]=0;
    }
    else
    {
        dp[u][1]=a[u]; gp[u][0]=gp[u][1]=0;
        for(auto v:adj[u])
        {
            if(v==p) continue;
            DFS(v,u);
        }
        for(auto v:adj[u])
        {
            if(v==p) continue;
            gp[u][0]+=dp[v][0]; gp[u][1]+=dp[v][1];
            dp[u][1]+=min(dp[v][0],dp[v][1]);
        }
        dp[u][0]=gp[u][1];
        for(auto v:adj[u])
        {
            if(v==p) continue;
            dp[u][0]=min(dp[u][0],gp[u][1]-dp[v][1]+gp[v][1]);
        }
    }
}
void DFS1(ll u,ll p,ll val,ll col)
{
    if(adj[u].size()==1 && adj[u][0]==p)
    {
        if(col) vrez.pb(u);
        return;
    }
    else
    {
        if(col)
        {
            vrez.pb(u);
            for(auto v:adj[u])
            {
                if(v==p) continue;
                if(dp[v][0]<dp[v][1]) DFS1(v,u,dp[v][0],0);
                else DFS1(v,u,dp[v][1],1);
            }
        }
        else
        {
            if(val==gp[u][1])
            {
                for(auto v:adj[u])
                {
                    if(v==p) continue;
                    DFS1(v,u,dp[v][1],1);
                }
            }
            else
            {
                ll idx=-1;
                for(auto v:adj[u])
                {
                    if(v==p) continue;
                    if(val==gp[u][1]-dp[v][1]+gp[v][1]) {idx=v; break;}
                }
                for(auto v:adj[u])
                {
                    if(v==p) continue;
                    if(v!=idx) DFS1(v,u,dp[v][1],1);
                    else DFS1(v,u,dp[v][0],0);
                }
            }
        }
    }
}
int main()
{
    ios::sync_with_stdio(false); cin.tie(0);
    ll n,uu,vv,rez=0; cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<n;i++)
    {
        cin>>uu>>vv;
        adj[uu].pb(vv); adj[vv].pb(uu);
    }
    ll m=n;
    for(int i=1;i<=n;i++)
    {
        if(adj[i].size()==1)
        {
            m++; a[m]=INF;
            adj[i].pb(m);
            adj[m].pb(i);
        }
    }
    DFS(1,0); DFSh(1,0);
    rez=min(dp[1][0],dp[1][1]);
    cout<<rez<<endl;
    if(dp[1][0]<dp[1][1]) DFS1(1,0,rez,0);
    else DFS1(1,0,rez,1);
    vector<ll> vvv[2];
    for(auto mm:vrez) vvv[h[mm]%2].pb(mm);
    cout<<vvv[0].size()<<endl;
    for(auto mm:vvv[0]) cout<<mm<<" "; cout<<endl;
    cout<<vvv[1].size()<<endl;
    for(auto mm:vvv[1]) cout<<mm<<" "; cout<<endl;
    return 0;
}