#include <bits/stdc++.h>
using namespace std;
vector<int> v[200005];
int val[200005], cent, home[200005];
int n, k;
void dfs1(int node, int par) {
  if (home[node])
    val[node] = 1;
  else
    val[node] = 0;
  for (int i = 0; i < v[node].size(); i++) {
    if (v[node][i] != par) {
      dfs1(v[node][i], node);
      val[node] += val[v[node][i]];
    }
  }
}
void dfs2(int node, int par) {
  int x = 2 * k - val[node];
  for (int i = 0; i < v[node].size(); i++) {
    if (v[node][i] != par) {
      x = max(x, val[v[node][i]]);
    }
  }
  if (x <= k) {
    cent = node;
    return;
  } else {
    for (int i = 0; i < v[node].size(); i++) {
      if (v[node][i] != par && val[v[node][i]] > k) {
        dfs2(v[node][i], node);
        return;
      }
    }
  }
}
queue<int> v1[200005];
void dfs3(int node, int par, int va) {
  if (home[node] == 1) v1[va].push(node);
  for (int i = 0; i < v[node].size(); i++) {
    if (v[node][i] != par) {
      dfs3(v[node][i], node, va);
    }
  }
}
struct compare {
  bool operator()(int x, int y) { return v1[x].size() < v1[y].size(); }
};
int main() {
  int i, j, l;
  scanf("%d", &n);
  scanf("%d", &k);
  for (i = 1; i < n; i++) {
    scanf("%d", &j);
    scanf("%d", &l);
    v[j].push_back(l);
    v[l].push_back(j);
  }
  for (i = 1; i <= 2 * k; i++) {
    scanf("%d", &j);
    home[j] = 1;
  }
  dfs1(1, 0);
  dfs2(1, 0);
  printf("1\n");
  printf("%d\n", cent);
  if (home[cent] == 1) {
    v1[0].push(cent);
    i = 1;
  } else
    i = 0;
  for (j = 0; j < v[cent].size(); j++) {
    dfs3(v[cent][j], cent, i);
    if (v1[i].size() == 0) i--;
    i++;
  }
  priority_queue<int, vector<int>, compare> pq;
  while (!pq.empty()) pq.pop();
  while (i--) {
    pq.push(i);
  }
  while (!pq.empty()) {
    int x = pq.top();
    pq.pop();
    int y = pq.top();
    pq.pop();
    printf("%d %d %d\n", v1[x].front(), v1[y].front(), cent);
    v1[x].pop();
    v1[y].pop();
    int q, w;
    q = v1[x].size();
    w = v1[y].size();
    if (q != 0) pq.push(x);
    if (w != 0) pq.push(y);
  }
  return 0;
}
