#include<bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define int long long
using namespace std;
const int inf = 1e9 + 10;
const int maxn = 2e5 + 5;
vector<int> adj[maxn];
signed main(){
int n, m, k;
cin >> n >> m >> k;
n -= 1;
int pre1, pre2;
int ans = 0;
int id = 0;
int n1 = n - 1;
vector<pair<int, int>> g;
while(n--){
int u, v;
id += 1;
cin >> u >> v;
u--, v--;
// adj[u].pb(v);
// adj[v].pb(u);
g.push_back({u, v});
}
int cur = 0;
int m1 = m;
vector<vector<int>> s(m, vector<int>(2));
for(int i = 0; i < m1; i++){
int a;
cin >> a;
vector<int> t(a);
for(int j = 0; j < a; j++){
cin >> s[i][j];
}
if(a == 2){
cur += 1;
if(i >= 1 && s[i][0] == s[i - 1][0] && s[i][1] == s[i - 1][1]){
ans += 1;
pre1 = s[i][0];
pre2 = s[i][1];
}
}
}
// cout << ans << endl;
bool is = 0;
// for(auto t : g){
// cout << t.ff << " " << t.ss << " ";
// cout << endl;
// }
// return 0;
if(m >= k && cur == m1 && ans + 1 == m1){
for(int i = 0; i < g.size(); i++){
if(min(g[i].ff + 1, g[i].ss + 1) == min(pre1, pre2) && max(g[i].ss + 1, g[i].ff + 1) == max(pre1, pre2)){
is = 1;
id = i + 1;
}
}
if(is){
cout << "1" << endl;
cout << id;
}
else{
cout << "0";
}
}
else{
cout << "0" << endl;
}
}