#include #include int n,m; int map[111][111]; struct A { int ts; int ms; }dp[111][111]; int Judge(int x,int y) { if(x<0 || x>=n || y<0 || y>=m) return 1; return 0; } int main() { int T; int i,l; int t,x_n,y_n; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(i=0;idp[x_n][y_n].ts) { dp[x_n][y_n].ts=dp[i][l].ts+1; dp[x_n][y_n].ms=dp[i][l].ms; } else if(dp[i][l].ts+1==dp[x_n][y_n].ts) dp[x_n][y_n].ms+=dp[i][l].ms; x_n--; y_n++; } if(i+l+map[i][l]>n+m-2) { if(dp[i][l].ts>dp[n-1][m-1].ts) { dp[n-1][m-1].ts=dp[i][l].ts; dp[n-1][m-1].ms=dp[i][l].ms; } else if(dp[i][l].ts==dp[n-1][m-1].ts) dp[n-1][m-1].ms+=dp[i][l].ms; } else if(i+l+map[i][l]==n+m-2) { if(dp[i][l].ts+1>dp[n-1][m-1].ts) { dp[n-1][m-1].ts=dp[i][l].ts+1; dp[n-1][m-1].ms=dp[i][l].ms; } else if(dp[i][l].ts+1==dp[n-1][m-1].ts) dp[n-1][m-1].ms+=dp[i][l].ms; } } } printf("%d %d\n",dp[n-1][m-1].ts,dp[n-1][m-1].ms); } return 0; }