#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
vector<int> adj[N];
int nn;
int subsize[N];
int isTeam[N];
void sub_dfs(int v, int p) {
  nn += isTeam[v];
  subsize[v] = isTeam[v];
  for (auto it = adj[v].begin(); it != adj[v].end(); it++) {
    if (*it == p) continue;
    sub_dfs(*it, v);
    subsize[v] += subsize[*it];
  }
}
int find_centroid(int v, int p) {
  for (auto it = adj[v].begin(); it != adj[v].end(); it++) {
    if (*it == p) continue;
    if (subsize[*it] > nn / 2) return find_centroid(*it, v);
  }
  return v;
}
int decompose(int v, int p) {
  nn = 0;
  sub_dfs(v, 0);
  int c = find_centroid(v, 0);
  return c;
}
int teams[N];
int kc = 0;
vector<int> lists[N];
void dfs(int v, int p, int k) {
  if (isTeam[v]) lists[k].push_back(v);
  for (auto it : adj[v]) {
    if (it == p) continue;
    dfs(it, v, k);
  }
}
priority_queue<pair<int, int> > pq;
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int n, k;
  cin >> n >> k;
  for (int i = 1; i < n; i++) {
    int a, b;
    cin >> a >> b;
    adj[a].push_back(b), adj[b].push_back(a);
  }
  for (int i = 1; i <= 2 * k; i++) {
    cin >> teams[i];
    isTeam[teams[i]] = 1;
  }
  int c = decompose(1, 0);
  if (isTeam[c]) {
    lists[++kc].push_back(c);
    pq.push(make_pair(1, kc));
  }
  for (auto it : adj[c]) {
    dfs(it, c, ++kc);
    if (lists[kc].size()) pq.push(make_pair(lists[kc].size(), kc));
  }
  cout << "1\n";
  cout << c << "\n";
  while (pq.size()) {
    pair<int, int> A = pq.top();
    pq.pop();
    pair<int, int> B = pq.top();
    pq.pop();
    cout << lists[A.second].back() << " " << lists[B.second].back() << " " << c
         << "\n";
    lists[A.second].pop_back();
    lists[B.second].pop_back();
    if (--A.first) pq.push(A);
    if (--B.first) pq.push(B);
  }
  return 0;
}
