← Home
```go
package main

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

var (
	adj [][]int
	p   []int
	ans int
)

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

	scanner.Scan()
	nStr := scanner.Text()
	n, _ := strconv.Atoi(nStr)

	adj = make([][]int, n+1)
	p = make([]int, n+1)
	for i := 1; i <= n; i++ {
		p[i] = i
	}

	for i := 0; i < n-1; i++ {
		scanner.Scan()
		uStr := scanner.Text()
		scanner.Scan()
		vStr := scanner.Text()
		u, _ := strconv.Atoi(uStr)
		v, _ := strconv.Atoi(vStr)
		adj[u] = append(adj[u], v)
		adj[v] = append(adj[v], u)
	}

	dfs(1, 0)

	if p[1] == 1 {
		target := adj[1][0]
		p[1], p[target] = p[target], p[1]
		ans += 2
	}

	fmt.Fprintln(writer, ans)
	for i := 1; i <= n; i++ {
		if i > 1 {
			fmt.Fprint(writer, " ")
		}
		fmt.Fprint(writer, p[i])
	}
	fmt.Fprintln(writer)
}

func dfs(u, parent int) {
	for _, v := range adj[u] {
		if v == parent {
			continue
		}
		dfs(v, u)
		if p[v] == v {
			p[u], p[v] = p[v], p[u]
			ans += 2
		}
	}
}
```