#include <bits/stdc++.h>
using namespace std;
int n, k, siz[200002], is[200002];
vector<int> e[200002];
int dfs(int u, int p) {
  int big = 0;
  for (int v : e[u])
    if (v != p) {
      int t = dfs(v, u);
      if (t > 0) return t;
      siz[u] += siz[v];
      big = max(big, siz[v]);
    }
  big = max(big, 2 * k - siz[u]);
  return big <= (2 * k) / 2 ? u : 0;
}
void dfs2(int u, int p, vector<int> &c) {
  for (int v : e[u])
    if (v != p) dfs2(v, u, c);
  if (is[u]) c.push_back(u);
}
int main() {
  scanf("%d%d", &n, &k);
  for (int i = 0, u, v; i < n - 1; i++) {
    scanf("%d%d", &u, &v);
    e[u].push_back(v);
    e[v].push_back(u);
  }
  for (int i = 0, c; i < 2 * k; i++) {
    scanf("%d", &c);
    siz[c] = is[c] = 1;
  }
  int cen = dfs(1, -1);
  vector<vector<int>> c;
  for (int u : e[cen]) {
    c.push_back({});
    dfs2(u, cen, c.back());
    if (c.back().size() == 0) c.pop_back();
  }
  if (is[cen]) c.push_back({cen});
  priority_queue<pair<int, int>> pq;
  for (int i = 0; i < c.size(); i++) pq.push({c[i].size(), i});
  printf("%d\n%d\n", 1, cen);
  while (pq.size() > 0) {
    auto pa = pq.top();
    pq.pop();
    while (c[pa.second].size() > 0) {
      auto pa2 = pq.top();
      pq.pop();
      printf("%d %d %d\n", c[pa.second].back(), c[pa2.second].back(), cen);
      c[pa.second].pop_back();
      c[pa2.second].pop_back();
      if (pa2.first - 1 > 0) pq.push({pa2.first - 1, pa2.second});
    }
  }
}
