#include <bits/stdc++.h>
using namespace std;
template <typename T>
void read(T& t) {
  cin >> t;
}
template <typename T, typename... U>
void read(T& t, U&... u) {
  read(t);
  read(u...);
}
template <typename T>
void write(T t) {
  cout << t;
}
template <typename T, typename... U>
void write(T t, U... u) {
  write(t);
  write(u...);
}
const vector<pair<int, int>> dxy = {pair<int, int>(0, -1), pair<int, int>(0, 1),
                                    pair<int, int>(-1, 0),
                                    pair<int, int>(1, 0)};
const long double EPS = 1e-9L, PI = acos(-1.0L);
const long long INFLL = 4e18L;
const int INF = 2e9, MOD = 1e9 + 7, LOGN = 16 + 1;
const int N = 2e5 + 3, N2 = +3;
struct Graph {
  int n;
  vector<vector<int>> adj;
  vector<int> visited, lvl, parent;
  Graph() {}
  Graph(int _n) {
    n = _n;
    adj.assign(n + 1, vector<int>());
    visited.assign(n + 1, 0);
    lvl.assign(n + 1, 0);
    parent.assign(n + 1, 0);
  }
  void addEdge(int u, int v) {
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  vector<int>& next(int x) { return adj[x]; }
} G(N);
int n, k;
void dfs(int cur, int prv, int h) {
  G.lvl[cur] = h;
  G.parent[cur] = prv;
  for (int nxt : G.next(cur))
    if (nxt != G.parent[cur]) dfs(nxt, cur, h + 1);
}
set<int> setC;
int chosen = -1;
int findChosen(int cur) {
  int cnt = setC.count(cur);
  for (int nxt : G.next(cur))
    if (nxt != G.parent[cur]) cnt += findChosen(nxt);
  if (cnt >= k && (chosen == -1 || G.lvl[cur] > G.lvl[chosen])) chosen = cur;
  return cnt;
}
void getC(int cur, int prv, vector<int>& v) {
  if (setC.count(cur)) v.push_back(cur);
  for (int nxt : G.next(cur))
    if (nxt != prv) getC(nxt, cur, v);
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  write(fixed, setprecision(12));
  read(n, k);
  for (int i = 1; i <= n - 1; ++i) {
    int u, v;
    read(u, v);
    G.addEdge(u, v);
  }
  for (int i = 1; i <= 2 * k; ++i) {
    int c;
    read(c);
    setC.insert(c);
  }
  dfs(1, 1, 1);
  findChosen(1);
  vector<int> ids;
  for (int nxt : G.next(chosen)) getC(nxt, chosen, ids);
  if (setC.count(chosen)) ids.push_back(chosen);
  write("1\n", chosen, "\n");
  for (int i = 1; i <= k; ++i)
    write(ids[i - 1], " ", ids[i + k - 1], " ", chosen, "\n");
}
