package main import . "fmt" import . "math/big" const M = 1e9+7 var IntM = NewInt(M) func modinv(a int) int { return int(new(Int).ModInverse(NewInt(int64(a)), IntM).Int64()) } func modpow(a, p int) int { return int(new(Int).Exp(NewInt(int64(a)),NewInt(int64(p)),IntM).Int64()) } func main() { var t int Scan(&t) for ; t > 0; t-- { var n,ag,bg,ac,bc,ap,bp int Scan(&n,&ag,&bg,&ac,&bc,&ap,&bp) bg = modinv(bg) bc = modinv(bc) bp = modinv(bp) allNoG := modpow((1 - ag*bg%M + M)%M, n) allNoC := modpow((1 - ac*bc%M + M)%M, n) allNoP := modpow((1 - ap*bp%M + M)%M, n) allG := modpow(ag*bg%M, n) allC := modpow(ac*bc%M, n) allP := modpow(ap*bp%M, n) ans := 1 - allNoG - allNoC - allNoP + 2 * allG + 2 * allC + 2 * allP ans = (M + ans%M)%M Println(ans) } } /* 考察 (あいこの確率) = 1 - (決着がつく確率) あいこの種類  全員グー  全員チョキ  全員パー  グーチョキパーがそれぞれ1人以上いる 決着がつく種類  全員が1人以上のグーと1人以上のチョキで分かれる (= 全員がパー以外 - 全員がグー - 全員がチョキ)  全員が1人以上のグーと1人以上のパーで分かれる  (= 全員がチョキ以外 - 全員がグー - 全員がパー)  全員が1人以上のチョキと1人以上のパーで分かれる (= 全員がグー以外 - 全員がチョキ - 全員がパー) つまり 1 - ( (1-AP/BP)^N - (AG/BG)^N - (AC/BC)^N ) - ( (1-AC/BC)^N - (AG/BG)^N - (AP/BP)^N ) - ( (1-AG/BG)^N - (AC/BC)^N - (AP/BP)^N ) = 1 - (1-AG/BG)^N - (1-AC/BC)^N - (1-AP/BP)^N + 2 * (AG/BG)^N + 2 * (AC/BC)^N + 2 * (AP/BP)^N だと思う 数学苦手なので正しいかわからない */