void solve(){
int N, X; cin >> N >> X;
vector<array<int, 5>> bus(N);
rep(i, 0, N) rep(j, 0, 5) cin >> bus[i][j];
auto toIdx = [&](pii p){
return p.first*X + (p.second - 1);
};
vector<vector<int>> dist(5*X, vector<int>(5*X, 1e9));
rep(i, 0, 5*X) dist[i][i] = 0;
rep(i, 0, N) rep(j, 0, 5) rep(k, j+1, 5){
int u = toIdx({j, bus[i][j]}), v = toIdx({k, bus[i][k]});
dist[u][v] = dist[v][u] = 1;
}
rep(k, 0, 5*X) rep(i, 0, 5*X) rep(j, 0, 5*X) dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
int Q; cin >> Q;
while(Q--){
int u, v; cin >> u >> v;
int ans = 1e9;
rep(i, 0, 5) rep(j, 0, 5){
int idx_u = toIdx({i, bus[u-1][i]}), idx_v = toIdx({j, bus[v-1][j]});
ans = min(ans, dist[idx_u][idx_v]);
}
cout << (ans == 1e9 ? -1 : ans+1) << "\n";
}
}