#include<set>#include<map>#include<cmath>#include<stack>#include<queue>#include<string>#include<vector>#include<cstring>#include<stdio.h>#include<iostream>#include<algorithm>#define INF 0x3f3f3f3fusingnamespace std;typedeflonglong ll;typedefunsignedlonglong ull;constint maxn =1e6+5;int t,n,m;struct Node{int to,next,val;}edge[maxn<<4];int head[maxn],dis[maxn],tot;bool vis[maxn];voidadd_edge(int u,int v,int w){
edge[tot].to=v;
edge[tot].next=head[u];
edge[tot].val=w;
head[u]=tot++;}voidinit(){memset(head,-1,sizeof(head));memset(dis,INF,sizeof(dis));memset(vis,false,sizeof(vis));
tot=0;}voidbuildGraph(int N,int Seed){int nextRand = Seed;// initialize random number generatorfor(int x =1; x <= N; x++){// generate edges from Node xint w = x %10+1;// the weight of edgesint d =10- w;// the number of edgesfor(int i =1; i <= d; i++){add_edge(x, nextRand % N +1, w);// add a new edge into G
nextRand = nextRand *233% N;}add_edge(x, x % N +1, w);}}voidSPFA(int s){
queue<int>q;
q.push(s);
vis[s]=true;
dis[s]=0;while(!q.empty()){int x=q.front(); q.pop();
vis[x]=false;for(int i=head[x];i!=-1;i=edge[i].next){int y=edge[i].to;if(dis[y]>dis[x]+edge[i].val){
dis[y]=dis[x]+edge[i].val;if(!vis[y]){
q.push(y);
vis[y]=true;}}}}}intmain(){
cin>>t;int seed;while(t--){init();scanf("%d%d",&n,&seed);buildGraph(n,seed);SPFA(1);printf("%d\n",dis[n]);}return0;}