/*
    題意: 給出3個(gè)骰子,每次投3個(gè),起始count=0
            若投出的三個(gè)骰子分別為a,b,c,則count=0;
            否則count+=投出的3個(gè)數(shù)之和;
            若count>n ,結(jié)束    
    對于期望值,一般定義的Ex都是表示離目標(biāo)狀態(tài)還需要的代價(jià)
    所以這里定義E[i]表示當(dāng)前狀態(tài)為i離結(jié)束還需要代價(jià)的期望值,那答案就是E[0]
    E[>n] = 0 
    E[i] = ∑Pk*E[i+k] + P0*E[0]    
    Pk是三顆骰子和為k的概率,但=a,=b,=c的情況除外
    P0是=a,=b,=c的概率,也即1.0/(k1*k2*k3)

    我們要求的是E[0],但求E[i]的同時(shí)又要用到E[0]  這樣會(huì)形成一個(gè)環(huán)
    但這個(gè)環(huán)很有特點(diǎn),E[0]存在于每個(gè)環(huán)上
    所以如果每個(gè)E[i+k]都表示成E[0],由于只涉及到乘法、加法,那么E[i]也可以用
    E[0]表示咯,就這樣推到E[0]
    E[i] = x[i]*E[0]+y[i]

    神奇,用這種表示方法。因?yàn)镋[0]存在于每個(gè)環(huán)上,那當(dāng)然環(huán)上的東西就可以用E[0]表示了
    則遞推后其它的也可以同樣表示了

*/

#include
<cstdio>
#include
<cstring>

const int MAXN = 505;

double x[MAXN],y[MAXN];
double p[20];

inline 
int min(int a,int b){return a<b?a:b;}

int main()
{
    
int T;
    
for(scanf("%d",&T);T--;)
    
{
        
int n,k1,k2,k3,a,b,c;
        scanf(
"%d%d%d%d%d%d%d",&n,&k1,&k2,&k3,&a,&b,&c);
        
double pp = 1.0/(k1*k2*k3);
        memset(p,
0,sizeof(p));
        
for(int i=1;i<=k1;i++)
            
for(int j=1;j<=k2;j++)
                
for(int k=1;k<=k3;k++)
                    p[i
+j+k]+=pp;
        p[a
+b+c]-=pp;
        x[n
+1]=0.0,y[n+1]=0.0;
        
for(int i=n;i>=0;i--)
        
{
            x[i]
=pp;
            y[i]
=1.0;
            
for(int k=3;k<=k1+k2+k3;k++)
            
{
                
int j = min(n+1,i+k);
                x[i]
+=p[k]*x[j];
                y[i]
+=p[k]*y[j];
            }

        }

        printf(
"%.15f\n",y[0]/(1-x[0]));
    }
    
    
return 0;
}