package main
import (
"bufio"
"io"
"os"
"strconv"
)
type Scanner struct {
buf []byte
pos int
}
func NewScanner() *Scanner {
buf, _ := io.ReadAll(os.Stdin)
return &Scanner{buf: buf, pos: 0}
}
func (s *Scanner) NextInt() int {
for s.pos < len(s.buf) && (s.buf[s.pos] < '0' || s.buf[s.pos] > '9') {
s.pos++
}
if s.pos >= len(s.buf) {
return 0
}
res := 0
for s.pos < len(s.buf) && s.buf[s.pos] >= '0' && s.buf[s.pos] <= '9' {
res = res*10 + int(s.buf[s.pos]-'0')
s.pos++
}
return res
}
func main() {
sc := NewScanner()
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
n := sc.NextInt()
k := sc.NextInt()
if n == 0 {
return
}
adj := make([][]int, n+1)
for i := 0; i < n-1; i++ {
u := sc.NextInt()
v := sc.NextInt()
adj[u] = append(adj[u], v)
adj[v] = append(adj[v], u)
}
isMarked := make([]bool, n+1)
for i := 0; i < 2*k; i++ {
u := sc.NextInt()
isMarked[u] = true
}
sz := make([]int, n+1)
var dfsSize func(u, p int)
dfsSize = func(u, p int) {
if isMarked[u] {
sz[u] = 1
}
for _, v := range adj[u] {
if v != p {
dfsSize(v, u)
sz[u] += sz[v]
}
}
}
dfsSize(1, 0)
var findCentroid func(u, p int) int
findCentroid = func(u, p int) int {
for _, v := range adj[u] {
if v != p && sz[v] > k {
return findCentroid(v, u)
}
}
return u
}
c := findCentroid(1, 0)
markedNodes := make([]int, 0, 2*k)
var dfsCollect func(u, p int)
dfsCollect = func(u, p int) {
if isMarked[u] {
markedNodes = append(markedNodes, u)
}
for _, v := range adj[u] {
if v != p {
dfsCollect(v, u)
}
}
}
dfsCollect(c, 0)
writer.WriteString("1\n")
writer.WriteString(strconv.Itoa(c) + "\n")
for i := 0; i < k; i++ {
writer.WriteString(strconv.Itoa(markedNodes[i]) + " " + strconv.Itoa(markedNodes[i+k]) + " " + strconv.Itoa(c) + "\n")
}
}