← Home
package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)


var (
	adj       [][]int
	res       []int
	swapped   []bool
	totalDist int64
	scanner   *bufio.Scanner
)


func scanInt() int {
	scanner.Scan()
	val, _ := strconv.Atoi(scanner.Text())
	return val
}


func dfs(u, p int) {
	for _, v := range adj[u] {
		if v == p {
			continue
		}
		dfs(v, u)
		
		
		if !swapped[v] {
			
			
			
			res[u], res[v] = res[v], res[u]
			swapped[v] = true
			swapped[u] = true
			totalDist += 2
		}
	}
}

func main() {
	
	scanner = bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	
	buf := make([]byte, 2048)
	scanner.Buffer(buf, 2*1024*1024)

	if !scanner.Scan() {
		return
	}
	N, _ := strconv.Atoi(scanner.Text())

	adj = make([][]int, N+1)
	res = make([]int, N+1)
	swapped = make([]bool, N+1)

	
	for i := 1; i <= N; i++ {
		res[i] = i
	}

	
	for i := 0; i < N-1; i++ {
		u := scanInt()
		v := scanInt()
		adj[u] = append(adj[u], v)
		adj[v] = append(adj[v], u)
	}

	
	dfs(1, 0)

	
	
	
	if !swapped[1] {
		v := adj[1][0]
		res[1], res[v] = res[v], res[1]
		swapped[1] = true
		totalDist += 2
	}

	
	fmt.Fprintln(writer, totalDist)
	for i := 1; i <= N; i++ {
		if i > 1 {
			fmt.Fprint(writer, " ")
		}
		fmt.Fprint(writer, res[i])
	}
	fmt.Fprintln(writer)
}