#include<iostream> #include<map> using namespace std; #define N 35 #define FF(i,n) for(int i=0;i<n;i++) #define mod 1234567891 int len; struct Matrix_Cal{ __int64 mat[N][N]; }e,init,tp1; Matrix_Cal operator+(Matrix_Cal a ,Matrix_Cal b){ Matrix_Cal c; int i,j; FF(i,len)FF(j,len) c.mat[i][j]=a.mat[i][j]+b.mat[i][j]; return c; } Matrix_Cal operator*(Matrix_Cal a ,Matrix_Cal b){ Matrix_Cal c; int i,j,k; FF(i,len)FF(j,len) c.mat[i][j]=0; FF(i,len)FF(k,len) if(a.mat[i][k])FF(j,len) if(b.mat[k][j]) c.mat[i][j]=(c.mat[i][j]+a.mat[i][k]*b.mat[k][j])%mod; return c; } Matrix_Cal operator^(Matrix_Cal a,int b){ Matrix_Cal c=e,q=a; for(;b;b>>=1){ if(b&1) c=c*q; q=q*q; } return c; } Matrix_Cal Matrix_Sum(Matrix_Cal a ,int b){ int n = 0 ,s[N]; int i; Matrix_Cal tp1,tp2; while(b > 0){ s[n++]=b&1; b>>=1; } tp1=tp2=a; for(i=n-2;i>=0;i--){ tp1=tp1*(tp2+e); tp2=tp2*tp2; if(s[i]){ tp2=tp2*a; tp1=tp1+tp2; } } return tp1; } int main(void){ int t,m; int i,j; scanf("%d",&t); while(t--){ FF(i,N)FF(j,N) e.mat[i][j]=(i==j); int K; scanf("%d%d",&m,&K); if(m<K){ printf("0/n"); continue; } len=N; memset(init.mat,0,sizeof(init.mat)); init.mat[0][1]=K; for(i=1;i<=K;i++){ init.mat[i][i+1]=K-i; init.mat[i][i]=i; } tp1=Matrix_Sum(init,m); printf("%I64d/n",tp1.mat[0][K]); } }