#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct Graph
{
    int n;
    vector<vector<int> > adj;
    vector<int> boja;
};

void init_graph(Graph &g,int n)
{
    g.n=n;
    g.adj.resize(n);
    g.boja.resize(n,0);
}

void addEdge(Graph &g,int u,int v)
{
    g.adj[u].push_back(v);
    g.adj[v].push_back(u);
}
int crveni=0;
int plavi=0;
void BFS(Graph &g)
{
    queue<int> q;
    queue<int> color;
    q.push(0);
    color.push(1);
    crveni++;
    g.boja[0]=1;
    while(!q.empty())
    {
        int pom=q.front();
        int pomcol=color.front();
        q.pop();
        color.pop();
        for(int i=0;i<g.adj[pom].size();i++)
        {
            if(g.boja[g.adj[pom][i]]==0)
            {
               g.boja[g.adj[pom][i]]=pomcol*(-1);
               q.push(g.adj[pom][i]);
               color.push(pomcol*(-1));
               if(pomcol==1)
               {
                   plavi++;
               }
               else
               {
                   crveni++;
               }
            }

        }

    }



}

int main()
{
    ios_base::sync_with_stdio(false);
    int n;
    cin >>n;
    Graph g;
    init_graph(g,n);
    vector<int> v(n);
    for(int i=0;i<n;i++)
    {
        cin >>v[i];
    }

    for(int i=0;i<n-1;i++)
    {
        int u,v;
        cin >>u>>v;
        u--;
        v--;
        addEdge(g,u,v);

    }
    BFS(g);
    if(crveni>plavi)
    {
        cout <<plavi*v[0]<<"\n";
        cout <<plavi<<"\n";
        for(int i=0;i<n;i++)
        {
            if(g.boja[i]==-1)
            {
                cout <<i+1<<" ";
            }
        }
        cout <<"\n";
    }
    else
    {
        cout <<crveni*v[0]<<"\n";
        cout <<crveni<<"\n";
        for(int i=0;i<n;i++)
        {
            if(g.boja[i]==1)
            {
                cout <<i+1<<" ";
            }
        }
        cout <<"\n";
    }
    cout <<0<<"\n";
    return 0;
}