1. #include <cstdio>
    2. #include <cstring>
    3. #include <cmath>
    4. #include <cstdlib>
    5. #include <iostream>
    6. #include <cassert>
    7. using namespace std;
    8. inline int gi(){
    9. char tmp=getchar();int ans=0;
    10. while(!isdigit(tmp)) tmp=getchar();
    11. while(isdigit(tmp)){
    12. ans = ans * 10 + tmp - '0';
    13. tmp = getchar();
    14. }
    15. return ans;
    16. }
    17. const int N = 230;
    18. double P[N];int D[N];
    19. double Pow[N][332],F[N][N];
    20. double G[N];
    21. signed main()
    22. {
    23. #ifdef TSUKIAKIOI
    24. freopen("data.in","r",stdin);
    25. #endif
    26. int T=gi();
    27. while(T--){
    28. int n,r;n=gi(),r=gi();
    29. memset(P,0,sizeof P);
    30. memset(Pow,0,sizeof P);
    31. memset(F,0,sizeof F);
    32. memset(G,0,sizeof G);
    33. for(int i=1;i<=n;++i){
    34. scanf("%lf",&P[i]);
    35. D[i] = gi();
    36. }
    37. for(int i=1;i<=n;++i){
    38. Pow[i][0] = 1;
    39. for(int j=1;j<=r;++j)
    40. Pow[i][j] = Pow[i][j-1] * (1.0-P[i]);
    41. }
    42. G[1] = 1.0 - Pow[1][r];
    43. F[1][0] = Pow[1][r];
    44. F[1][1] = 1-F[1][0];
    45. for(int i=2;i<=n;++i){
    46. for(int j=0;j<=min(r,i);++j)
    47. if(!j)
    48. F[i][j] = Pow[i][r-j] * F[i-1][j];
    49. else if(j)
    50. F[i][j] =
    51. (1.0-Pow[i][r-j+1]) * F[i-1][j-1] +
    52. (Pow[i][r-j]) * F[i-1][j];
    53. }
    54. for(int i=2;i<=n;++i){
    55. double res = 0;
    56. for(int j=0;j<=min(i,r);++j)
    57. res += F[i-1][j] * (1.0-Pow[i][r-j]);
    58. G[i] = res;
    59. }
    60. double ans = 0;
    61. for(int i=1;i<=n;++i)
    62. ans += 1.0*G[i]*D[i];
    63. printf("%.10lf\n",ans);
    64. }
    65. return 0;
    66. }