#include<cstdio>#include<cstring>#define maxn 55double dp[maxn][maxn][maxn*maxn];int n,m;int main(){ int cas,i,j,k; scanf("%d",&cas); while(cas--) { scanf("%d%d",&n,&m); int tt=n*m; memset(dp,0,sizeof(dp)); dp[0][0][0]=1; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) {for(k=1;k<=tt;k++) { if(i==n&&j==m) dp[i][j][k]=(dp[i-1][j][k-1]*(n-i+1)*j+dp[i][j-1][k-1]*(m-j+1)*i+dp[i-1][j-1][k-1]*(n-i+1)*(m-j+1))/(tt-k+1); else dp[i][j][k]=(dp[i-1][j][k-1]*(n-i+1)*j+dp[i][j-1][k-1]*(m-j+1)*i+dp[i-1][j-1][k-1]*(n-i+1)*(m-j+1)+dp[i][j][k-1]*(i*j-k+1))/(tt-k+1); } } } double ans=0; for(int i=0;i<=n*m;i++) ans+=dp[n][m][i]*i; printf("%.8lfn",ans); } return 0;}