#include <bits/stdc++.h>
using namespace std;
vector<int> Edge[200001];
vector<int> Party[200001];
priority_queue<pair<int, int> > Q;
int N, K, C[200001], Visit[200001], Center, Size, Num;
int findCenter(int now) {
  int i, j = Edge[now].size(), sum = 0, temp, ok = 1;
  for (i = 0; i < j; i++) {
    if (!Visit[Edge[now][i]]) {
      Visit[Edge[now][i]] = 1;
      temp = findCenter(Edge[now][i]);
      sum += temp;
      if (temp > K) ok = 0;
    }
  }
  if (C[now]) sum++;
  if (sum < K) ok = 0;
  if (ok) Center = now;
  return sum;
}
void makeParty(int now) {
  int i, j = Edge[now].size();
  for (i = 0; i < j; i++)
    if (!Visit[Edge[now][i]]) {
      Visit[Edge[now][i]] = 1;
      if (C[Edge[now][i]]) Party[Num].push_back(Edge[now][i]);
      makeParty(Edge[now][i]);
    }
}
int main(void) {
  int i, x, y;
  scanf("%d %d", &N, &K);
  for (i = 1; i < N; i++) {
    scanf("%d %d", &x, &y);
    Edge[x].push_back(y);
    Edge[y].push_back(x);
  }
  for (i = 1; i <= 2 * K; i++) {
    scanf("%d", &x);
    C[x] = 1;
  }
  Visit[1] = 1;
  x = findCenter(1);
  for (i = 1; i <= N; i++) Visit[i] = 0;
  printf("1\n%d\n", Center);
  Visit[Center] = 1;
  Size = Edge[Center].size();
  for (i = 0; i < Size; i++) {
    Num = i + 1;
    Visit[Edge[Center][i]] = 1;
    if (C[Edge[Center][i]]) Party[Num].push_back(Edge[Center][i]);
    makeParty(Edge[Center][i]);
  }
  if (C[Center]) {
    for (i = 1; i <= Size; i++) {
      if (Party[i].size() < K) {
        Party[i].push_back(Center);
        break;
      }
    }
    if (i == Size + 1) Party[++Size].push_back(Center);
  }
  for (i = 1; i <= Size; i++)
    if (Party[i].size()) Q.push(make_pair(Party[i].size(), i));
  while (!Q.empty()) {
    x = Q.top().second;
    Q.pop();
    y = Q.top().second;
    Q.pop();
    printf("%d %d %d\n", Party[x].back(), Party[y].back(), Center);
    Party[x].pop_back();
    Party[y].pop_back();
    if (Party[x].size()) Q.push(make_pair(Party[x].size(), x));
    if (Party[y].size()) Q.push(make_pair(Party[y].size(), y));
  }
  return 0;
}
