• Source
    1. #include<bits/stdc++.h>
    2. #define MAX 10000
    3. #define pb push_back
    4.  
    5. using namespace std;
    6.  
    7. bool check[MAX];
    8.  
    9. char store[5],store1[5];
    10.  
    11. vector<int>graph[MAX],prime;
    12.  
    13. bool color[MAX];
    14.  
    15. int cost[MAX];
    16.  
    17. void sieve()
    18. {
    19. int i,j,k;
    20.  
    21. k = sqrt(MAX);
    22.  
    23. for(i=3; i<=k; i+=2)
    24. {
    25. for(j=i*i; j<=MAX; j+=2*i)
    26. {
    27. check[j] = true;
    28. }
    29. }
    30.  
    31. for(i=4; i<=MAX; i+=2)
    32. {
    33. check[i] = true;
    34. }
    35.  
    36. for(i=1001; i<=9999; i+=2)
    37. {
    38. if(!check[i])
    39. {
    40. prime.pb(i);
    41. }
    42. }
    43. }
    44.  
    45. void make_graph()
    46. {
    47. int len = prime.size();
    48.  
    49. int i,j,k;
    50.  
    51. for(i=0; i<len; i++)
    52. {
    53. for(j=i+1; j<len; j++)
    54. {
    55. sprintf(store,"%d",prime[i]);
    56.  
    57. sprintf(store1,"%d",prime[j]);
    58.  
    59. int cnt = 0;
    60.  
    61. for(k=0; k<4; k++)
    62. {
    63. if(store[k]==store1[k])
    64. {
    65. cnt++;
    66. }
    67. }
    68.  
    69. if(cnt==3)
    70. {
    71. graph[prime[i]].pb(prime[j]);
    72.  
    73. graph[prime[j]].pb(prime[i]);
    74. }
    75. }
    76. }
    77. }
    78.  
    79. void BFS(int source)
    80. {
    81. memset(color,0,sizeof(color));
    82.  
    83. memset(cost,0,sizeof(cost));
    84.  
    85. queue<int>Q;
    86.  
    87. int u,v,i,len;
    88.  
    89. color[source] = true;
    90.  
    91. cost[source] = 0;
    92.  
    93. Q.push(source);
    94.  
    95. while(!Q.empty())
    96. {
    97. u = Q.front();
    98.  
    99. Q.pop();
    100.  
    101. len = graph[u].size();
    102.  
    103. for(i=0; i<len; i++)
    104. {
    105. v = graph[u][i];
    106.  
    107. if(color[v]==false)
    108. {
    109. color[v] = true;
    110.  
    111. cost[v] = cost[u]+1;
    112.  
    113. Q.push(v);
    114. }
    115. }
    116. }
    117. }
    118.  
    119. int main()
    120. {
    121. sieve();
    122.  
    123. make_graph();
    124.  
    125. int test,src,dest;
    126.  
    127. scanf("%d",&test);
    128.  
    129. while(test--)
    130. {
    131. scanf("%d%d",&src,&dest);
    132.  
    133. if(src==dest)
    134. {
    135. puts("0");
    136.  
    137. continue;
    138. }
    139.  
    140. BFS(src);
    141.  
    142. if(cost[dest])
    143. {
    144. printf("%d\n",cost[dest]);
    145. }
    146. else
    147. {
    148. puts("Impossible");
    149. }
    150. }
    151.  
    152. return 0;
    153. }