#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
#include <set>
#include <algorithm>
#include <cmath>
using namespace std;
#define rep(i,j,k) for(int i=j;i<k;i++)
const int maxn=1e4+10,id=10000;
vector<vector<int>> v(10000);
unordered_map<int,int> cnt;
int s,d,vis[maxn],minCnt,minTrans;
vector<int> tmp,pa;
int tranCnt(vector<int> tmp){
int line=-1,preLine = 0;
rep(i,1,tmp.size()){
if(cnt[tmp[i-1]*id+tmp[i]] != preLine) line++;
preLine = cnt[tmp[i-1]*id+tmp[i]];
}
return line;
}
void dfs(int u,int cnt){
if(u==d && (cnt<minCnt || (cnt==minCnt && tranCnt(tmp) < minTrans))){
minTrans = tranCnt(tmp);
minCnt=cnt;
pa = tmp;
}
if(u==d) return;
rep(i,0,v[u].size()){
if(vis[v[u][i]] == 0){
vis[v[u][i]] = 1;
tmp.push_back(v[u][i]);
dfs(v[u][i],cnt+1);
vis[v[u][i]] = 0;
tmp.pop_back();
}
}
}
int main(){
int n,m,a,b;
cin>>n;
rep(i,0,n){
cin>>m>>a;
rep(j,1,m){
cin>>b;
v[a].push_back(b);
v[b].push_back(a);
cnt[a*id+b] = cnt[b*id+a] = i+1;
a = b;
}
}
int k;
cin>>k;
rep(i,0,k){
cin>>s>>d;
minCnt=99999;minTrans=99999;
tmp.clear();
tmp.push_back(s);
vis[s] = 1;
dfs(s,0);
vis[s]=0;
printf("%d\n",minCnt);
int preLine=0,pre=s;
rep(j,1,pa.size()){
if(cnt[pa[j-1]*id+pa[j]] != preLine){
if (preLine != 0) printf("Take Line#%d from %04d to %04d.\n", preLine, pre, pa[j-1]);
preLine = cnt[pa[j-1]*id+pa[j]];
pre = pa[j-1];
}
}
printf("Take Line#%d from %04d to %04d.\n", preLine, pre, d);
}
return 0;
}