#include <bits/stdc++.h>
using namespace std;
class cmp {
 public:
  bool operator()(int a, int b) { return a <= b; }
};
class PtCmp {
 public:
  bool operator()(pair<int, int> a, pair<int, int> b) {
    return a.second <= b.second;
  }
};
void update(int pos, int prev, int val, vector<int> *adj, vector<int> *cnt,
            bool *hometown) {
  int tot = val;
  for (int i = 0; i < adj[pos].size(); ++i) {
    int w = adj[pos][i];
    if (w != prev) {
      tot += cnt[pos][i];
    }
  }
  for (int i = 0; i < adj[pos].size(); ++i) {
    int w = adj[pos][i];
    if (w == prev) {
      cnt[pos][i] = val;
    } else {
      update(w, pos, tot - cnt[pos][i] + hometown[pos], adj, cnt, hometown);
    }
  }
}
int calculateHometowns(int pos, int prev, vector<int> *adj, bool *hometown,
                       vector<int> *cnt) {
  int tot = 0;
  for (int i = 0; i < adj[pos].size(); ++i) {
    int w = adj[pos][i];
    if (w != prev) {
      cnt[pos][i] += calculateHometowns(w, pos, adj, hometown, cnt);
      tot += cnt[pos][i];
    }
  }
  if (hometown[pos]) {
    tot++;
  }
  return tot;
}
bool possible(int pos, vector<int> *adj, bool *hometown, vector<int> *cnt,
              int tot) {
  for (int i = 0; i < adj[pos].size(); ++i) {
    if (cnt[pos][i] > tot / 2) {
      return false;
    }
  }
  return true;
}
void addHometowns(int pos, int prev, int qpos, queue<int> *q, bool *hometown,
                  vector<int> *adj) {
  if (hometown[pos]) {
    q[qpos].push(pos);
  }
  for (int i = 0; i < adj[pos].size(); ++i) {
    int w = adj[pos][i];
    if (w != prev) {
      addHometowns(w, pos, qpos, q, hometown, adj);
    }
  }
}
void makeMatch(int pos, vector<int> *adj, bool *hometown, vector<int> *cnt) {
  int hcnt = 0;
  for (int i = 0; i < cnt[pos].size(); ++i) {
    if (cnt[pos][i] > 0) {
      hcnt++;
    }
  }
  if (hometown[pos]) {
    hcnt++;
  }
  queue<int> q[hcnt];
  for (int i = 0, qpos = 0; i < adj[pos].size(); ++i) {
    if (cnt[pos][i] > 0) {
      int w = adj[pos][i];
      addHometowns(w, pos, qpos++, q, hometown, adj);
    }
  }
  if (hometown[pos]) {
    q[hcnt - 1].push(pos);
  }
  priority_queue<pair<int, int>, vector<pair<int, int> >, PtCmp> pq;
  for (int i = 0; i < hcnt; ++i) {
    pq.push(make_pair(i, q[i].size()));
  }
  printf("%d\n%d\n", 1, pos + 1);
  while (pq.size() > 0) {
    pair<int, int> first = pq.top();
    pq.pop();
    pair<int, int> second = pq.top();
    pq.pop();
    printf("%d %d %d\n", q[first.first].front() + 1,
           q[second.first].front() + 1, pos + 1);
    q[first.first].pop();
    q[second.first].pop();
    if (first.second - 1 > 0) {
      pq.push(make_pair(first.first, first.second - 1));
    }
    if (second.second - 1 > 0) {
      pq.push(make_pair(second.first, second.second - 1));
    }
  }
}
int main() {
  int n, k;
  scanf("%d %d", &n, &k);
  vector<int> adj[n];
  for (int i = 0; i < n - 1; ++i) {
    int a, b;
    scanf("%d %d", &a, &b);
    a--;
    b--;
    adj[a].push_back(b);
    adj[b].push_back(a);
  }
  bool hometown[n];
  for (int i = 0; i < n; ++i) {
    hometown[i] = false;
  }
  for (int i = 0; i < 2 * k; ++i) {
    int c;
    scanf("%d", &c);
    c--;
    hometown[c] = true;
  }
  vector<int> cnt[n];
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < adj[i].size(); ++j) {
      cnt[i].push_back(0);
    }
  }
  calculateHometowns(0, -1, adj, hometown, cnt);
  update(0, -1, 0, adj, cnt, hometown);
  for (int i = 0; i < n; ++i) {
    if (possible(i, adj, hometown, cnt, 2 * k)) {
      makeMatch(i, adj, hometown, cnt);
      break;
    }
  }
  return 0;
}
