#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

const int MAXN = 1e5 + 1;

int n;
vector<int>nxt[MAXN];
ll c[MAXN];
ll val[MAXN];
bool vis[MAXN];
int T;
ll ans;

void dfs(int v) {
	vis[v] = 1;
	for(int w : nxt[v]) {
		if(!vis[w]) dfs(w);
	}
	val[v] = c[T];
	ans += c[T];
	T++;
}

int main() {
	ios_base::sync_with_stdio(0);
	
	
	
	cin >> n;
	
	for(int i = 1; i < n; i++) {
		int a, b;
		cin >> a >> b;
		nxt[a].push_back(b);
		nxt[b].push_back(a);
	}
	
	for(int i = 0; i < n; i++) cin >> c[i];
	
	sort(c, c + n);
	
	dfs(1);
	
	cout << ans - c[n-1] << '\n';
	for(int v = 1; v <= n; v++) cout << val[v] << ' ';
	cout << '\n';
	
	return 0;
}