1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<vector>
5 #include<set>
6 using namespace std;
7 #define inf 1<<26
8 #define N 86
9 int n,m;
10 int edge[N][N];
11 struct Matrix
12 {
13 int mp[N][N];
14 }matrix[N];
15 Matrix Mul(Matrix a,Matrix b)
16 {
17 Matrix res;
18 for(int i=1;i<=m;i++)
19 {
20 for(int j=1;j<=m;j++)
21 {
22 res.mp[i][j]=0;
23 for(int k=1;k<=m;k++)
24 {
25 res.mp[i][j]=res.mp[i][j]+(a.mp[i][k]*b.mp[k][j]);
26 }
27 }
28 }
29 return res;
30 }
31 bool judge(Matrix a,Matrix b)
32 {
33 for(int i=1;i<=m;i++)
34 {
35 for(int j=1;j<=m;j++)
36 {
37 if(a.mp[i][j]!=b.mp[i][j])
38 return false;
39 }
40 }
41 return true;
42 }
43 void init()
44 {
45 for(int i=1;i<=n;i++)
46 {
47 for(int j=1;j<=n;j++)
48 {
49 if(i==j)
50 edge[i][j]=0;
51 else
52 {
53 edge[i][j]=inf;
54 }
55 }
56 }
57 }
58 void floyd()
59 {
60 for(int k=1;k<=n;k++)
61 {
62 for(int i=1;i<=n;i++)
63 {
64 for(int j=1;j<=n;j++)
65 {
66 if(edge[i][j]>edge[i][k]+edge[k][j])
67 edge[i][j]=edge[i][k]+edge[k][j];
68 }
69 }
70 }
71 }
72 int main()
73 {
74 while(scanf("%d%d",&n,&m)==2 && n+m)
75 {
76 //memset(edge,0,sizeof(edge));
77
78 init();
79
80 for(int i=1;i<=n;i++)
81 {
82 for(int j=1;j<=m;j++)
83 {
84 for(int k=1;k<=m;k++)
85 {
86 scanf("%d",&matrix[i].mp[j][k]);
87 }
88 }
89 }
90 for(int i=1;i<=n;i++)
91 {
92 for(int j=1;j<=n;j++)
93 {
94 if(i==j)
95 continue;
96 Matrix tmp = Mul(matrix[i],matrix[j]);
97 for(int k=1;k<=n;k++)
98 {
99 if(i==k || j==k)
100 continue;
101 if(judge(tmp,matrix[k]))
102 edge[i][k]=1;
103 }
104 }
105 }
106
107 floyd();
108
109 int c;
110 scanf("%d",&c);
111 while(c--)
112 {
113 int u,v;
114 scanf("%d%d",&u,&v);
115 if(edge[u][v]!=inf)
116 printf("%d\n",edge[u][v]);
117 else
118 printf("Sorry\n");
119 }
120 }
121 return 0;
122 }