/*
Lord Jesus, grant me clarity and patience to write clean code.
Buddha, help my mind be calm and mindful so I see the errors before they happen.
Allah, guide my hands on the straight path of logic, free from bugs and confusion.
May every compile be smooth, and every run be successful.
Amen. So be it. Ameen.
*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<ll,pll> lll;
typedef array<ll,3> arr3;
typedef pair<ll,arr3> pq3;
#define fi first
#define se second
const ll maxN = 1e5 + 5, maxM = 5e4 + 5, maxLog = 20;
ll n, h [maxN], st [maxN], en [maxN], pr [maxN] [maxLog], cnt, t, f [maxN], m, k;
vector <ll> adj [maxN], ver;
stack <ll> sta;
vector <pll> edge;
void dfs (ll x, ll par) {
h [x] = h [par] + 1;
pr [x] [0] = par;
for (int i = 1; i < maxLog; i ++) pr [x] [i] = pr [pr [x] [i - 1]] [i - 1];
st [x] = ++ cnt;
for (ll i : adj [x]) if (i != par) dfs (i, x);
en [x] = cnt;
}
ll lca (ll x, ll y) {
if (h [x] < h [y]) swap (x, y);
if (h [x] > h [y]) {
ll dis = h [x] - h [y];
for (int i = 0; i < maxLog; i ++) if ((dis >> i) & 1) x = pr [x] [i];
}
if (x == y) return x;
for (int i = maxLog - 1; ~i; i --) {
if (pr [x] [i] != pr [y] [i]) {
x = pr [x] [i];
y = pr [y] [i];
}
}
return pr [x] [0];
}
bool cmp (ll x, ll y) {return st [x] < st [y];}
void build () {
t = ver. size ();
if (t < 2) {
ver. clear ();
return;
}
sort (ver. begin (), ver. end (), cmp);
for (int i = 1; i < t; i ++) ver. push_back (lca (ver [i], ver [i - 1]));
sort (ver. begin (), ver. end (), cmp);
ver. erase (unique (ver. begin (), ver. end ()), ver. end ());
sta. push (ver [0]);
for (int i = 1; i < ver. size (); i ++) {
f [ver [i]] ++;
//cerr << ver [i] << '+' << '\n';
while (en [sta. top ()] < st [ver [i]]) sta. pop ();
f [pr [sta. top ()] [0]] --;
//cerr << sta. top () << '-' << '\n';
sta. push (ver [i]);
}
while (!sta. empty ()) sta. pop ();
ver. clear ();
}
void dfs2 (ll x, ll par) {
for (ll i : adj [x]) if (i != par) {
dfs2 (i, x);
f [x] += f [i];
}
}
signed main () {
ios::sync_with_stdio (0);
cin. tie (0);
cout. tie (0);
#define task "untitled1"
if (fopen (task".inp", "r")) {
freopen (task".inp", "r", stdin );
freopen (task".out", "w", stdout);
}
cin >> n >> m >> k;
for (int i = 1, u, v; i < n; i ++) {
cin >> u >> v;
adj [u]. push_back (v);
adj [v]. push_back (u);
edge. push_back ({u, v});
}
dfs (1, 0);
for (int c, x; m; m --) {
cin >> c;
for (;c;c --) {
cin >> x;
ver. push_back (x);
}
//for (ll i : ver) cerr << i << ' '; cerr << '\n';
build ();
//for (int i = 1; i <= n; i ++) cerr << f [i] << ' '; cerr << '\n';
}
dfs2 (1, 0);
//for (int i = 1; i <= n; i ++) cerr << f [i] << ' '; cerr << '\n';
vector <ll> ans;
cnt = 0;
for (pll i : edge) {
cnt ++;
if (f [i. fi] >= k && f [i. se] >= k) ans. push_back (cnt);
}
cout << ans. size () << '\n';
for (ll i : ans) cout << i << ' ';
}
LyoKTG9yZCBKZXN1cywgZ3JhbnQgbWUgY2xhcml0eSBhbmQgcGF0aWVuY2UgdG8gd3JpdGUgY2xlYW4gY29kZS4KQnVkZGhhLCBoZWxwIG15IG1pbmQgYmUgY2FsbSBhbmQgbWluZGZ1bCBzbyBJIHNlZSB0aGUgZXJyb3JzIGJlZm9yZSB0aGV5IGhhcHBlbi4KQWxsYWgsIGd1aWRlIG15IGhhbmRzIG9uIHRoZSBzdHJhaWdodCBwYXRoIG9mIGxvZ2ljLCBmcmVlIGZyb20gYnVncyBhbmQgY29uZnVzaW9uLgpNYXkgZXZlcnkgY29tcGlsZSBiZSBzbW9vdGgsIGFuZCBldmVyeSBydW4gYmUgc3VjY2Vzc2Z1bC4KQW1lbi4gU28gYmUgaXQuIEFtZWVuLgoqLwojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiBsb25nIGxvbmcgbGw7CnR5cGVkZWYgcGFpcjxsbCxsbD4gcGxsOwp0eXBlZGVmIHBhaXI8bGwscGxsPiBsbGw7CnR5cGVkZWYgYXJyYXk8bGwsMz4gYXJyMzsKdHlwZWRlZiBwYWlyPGxsLGFycjM+IHBxMzsKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAoKY29uc3QgbGwgbWF4TiA9IDFlNSArIDUsIG1heE0gPSA1ZTQgKyA1LCBtYXhMb2cgPSAyMDsKCmxsIG4sIGggW21heE5dLCBzdCBbbWF4Tl0sIGVuIFttYXhOXSwgcHIgW21heE5dIFttYXhMb2ddLCBjbnQsIHQsIGYgW21heE5dLCBtLCBrOwp2ZWN0b3IgPGxsPiBhZGogW21heE5dLCB2ZXI7CnN0YWNrIDxsbD4gc3RhOwp2ZWN0b3IgPHBsbD4gZWRnZTsKCnZvaWQgZGZzIChsbCB4LCBsbCBwYXIpIHsKICAgIGggW3hdID0gaCBbcGFyXSArIDE7CiAgICBwciBbeF0gWzBdID0gcGFyOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBtYXhMb2c7IGkgKyspIHByIFt4XSBbaV0gPSBwciBbcHIgW3hdIFtpIC0gMV1dIFtpIC0gMV07CiAgICBzdCBbeF0gPSArKyBjbnQ7CiAgICBmb3IgKGxsIGkgOiBhZGogW3hdKSBpZiAoaSAhPSBwYXIpIGRmcyAoaSwgeCk7CiAgICBlbiBbeF0gPSAgICBjbnQ7Cn0KCmxsIGxjYSAobGwgeCwgbGwgeSkgewogICAgaWYgKGggW3hdIDwgaCBbeV0pIHN3YXAgKHgsIHkpOwogICAgaWYgKGggW3hdID4gaCBbeV0pIHsKICAgICAgICBsbCBkaXMgPSBoIFt4XSAtIGggW3ldOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4TG9nOyBpICsrKSBpZiAoKGRpcyA+PiBpKSAmIDEpIHggPSBwciBbeF0gW2ldOwogICAgfQogICAgaWYgKHggPT0geSkgcmV0dXJuIHg7CiAgICBmb3IgKGludCBpID0gbWF4TG9nIC0gMTsgfmk7IGkgLS0pIHsKICAgICAgICBpZiAocHIgW3hdIFtpXSAhPSBwciBbeV0gW2ldKSB7CiAgICAgICAgICAgIHggPSBwciBbeF0gW2ldOwogICAgICAgICAgICB5ID0gcHIgW3ldIFtpXTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcHIgW3hdIFswXTsKfQoKYm9vbCBjbXAgKGxsIHgsIGxsIHkpIHtyZXR1cm4gc3QgW3hdIDwgc3QgW3ldO30KCnZvaWQgYnVpbGQgKCkgewogICAgdCA9IHZlci4gc2l6ZSAoKTsKICAgIGlmICh0IDwgMikgewogICAgICAgIHZlci4gY2xlYXIgKCk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgc29ydCAodmVyLiBiZWdpbiAoKSwgdmVyLiBlbmQgKCksIGNtcCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IHQ7IGkgKyspIHZlci4gcHVzaF9iYWNrIChsY2EgKHZlciBbaV0sIHZlciBbaSAtIDFdKSk7CiAgICBzb3J0ICh2ZXIuIGJlZ2luICgpLCB2ZXIuIGVuZCAoKSwgY21wKTsKICAgIHZlci4gZXJhc2UgKHVuaXF1ZSAodmVyLiBiZWdpbiAoKSwgdmVyLiBlbmQgKCkpLCB2ZXIuIGVuZCAoKSk7CiAgICBzdGEuIHB1c2ggKHZlciBbMF0pOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCB2ZXIuIHNpemUgKCk7IGkgKyspIHsKICAgICAgICBmIFt2ZXIgW2ldXSArKzsKICAgICAgICAvL2NlcnIgPDwgdmVyIFtpXSA8PCAnKycgPDwgJ1xuJzsKICAgICAgICB3aGlsZSAoZW4gW3N0YS4gdG9wICgpXSA8IHN0IFt2ZXIgW2ldXSkgc3RhLiBwb3AgKCk7CiAgICAgICAgZiBbcHIgW3N0YS4gdG9wICgpXSBbMF1dIC0tOwogICAgICAgIC8vY2VyciA8PCBzdGEuIHRvcCAoKSA8PCAnLScgPDwgJ1xuJzsKICAgICAgICBzdGEuIHB1c2ggKHZlciBbaV0pOwogICAgfQogICAgd2hpbGUgKCFzdGEuIGVtcHR5ICgpKSBzdGEuIHBvcCAoKTsKICAgIHZlci4gY2xlYXIgKCk7Cn0KCnZvaWQgZGZzMiAobGwgeCwgbGwgcGFyKSB7CiAgICBmb3IgKGxsIGkgOiBhZGogW3hdKSBpZiAoaSAhPSBwYXIpIHsKICAgICAgICBkZnMyIChpLCB4KTsKICAgICAgICBmIFt4XSArPSBmIFtpXTsKICAgIH0KfQoKc2lnbmVkIG1haW4gKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8gKDApOwogICAgY2luLiB0aWUgKDApOwogICAgY291dC4gdGllICgwKTsKICAgICNkZWZpbmUgdGFzayAidW50aXRsZWQxIgogICAgaWYgKGZvcGVuICh0YXNrIi5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3BlbiAodGFzayIuaW5wIiwgInIiLCBzdGRpbiApOwogICAgICAgIGZyZW9wZW4gKHRhc2siLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGNpbiA+PiBuID4+IG0gPj4gazsKICAgIGZvciAoaW50IGkgPSAxLCB1LCB2OyBpIDwgbjsgaSArKykgewogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgYWRqIFt1XS4gcHVzaF9iYWNrICh2KTsKICAgICAgICBhZGogW3ZdLiBwdXNoX2JhY2sgKHUpOwogICAgICAgIGVkZ2UuIHB1c2hfYmFjayAoe3UsIHZ9KTsKICAgIH0KICAgIGRmcyAoMSwgMCk7CiAgICBmb3IgKGludCBjLCB4OyBtOyBtIC0tKSB7CiAgICAgICAgY2luID4+IGM7CiAgICAgICAgZm9yICg7YztjIC0tKSB7CiAgICAgICAgICAgIGNpbiA+PiB4OwogICAgICAgICAgICB2ZXIuIHB1c2hfYmFjayAoeCk7CiAgICAgICAgfQogICAgICAgIC8vZm9yIChsbCBpIDogdmVyKSBjZXJyIDw8IGkgPDwgJyAnOyBjZXJyIDw8ICdcbic7CiAgICAgICAgYnVpbGQgKCk7CiAgICAgICAgLy9mb3IgKGludCBpID0gMTsgaSA8PSBuOyBpICsrKSBjZXJyIDw8IGYgW2ldIDw8ICcgJzsgY2VyciA8PCAnXG4nOwogICAgfQogICAgZGZzMiAoMSwgMCk7CiAgICAvL2ZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkgKyspIGNlcnIgPDwgZiBbaV0gPDwgJyAnOyBjZXJyIDw8ICdcbic7CiAgICB2ZWN0b3IgPGxsPiBhbnM7CiAgICBjbnQgPSAwOwogICAgZm9yIChwbGwgaSA6IGVkZ2UpIHsKICAgICAgICBjbnQgKys7CiAgICAgICAgaWYgKGYgW2kuIGZpXSA+PSBrICYmIGYgW2kuIHNlXSA+PSBrKSBhbnMuIHB1c2hfYmFjayAoY250KTsKICAgIH0KICAgIGNvdXQgPDwgYW5zLiBzaXplICgpIDw8ICdcbic7CiAgICBmb3IgKGxsIGkgOiBhbnMpIGNvdXQgPDwgaSA8PCAnICc7Cn0K