def cmb(n, r, mod):#コンビネーションの高速計算　

    if ( r<0 or r>n ):

        return 0

    r = min(r, n-r)

    return g1[n] * g2[r] * g2[n-r] % mod



mod = 10**9+7 #出力の制限

N = 2*10**5

g1 = [1, 1] # 元テーブル

g2 = [1, 1] #逆元テーブル

inverse = [0, 1] #逆元テーブル計算用テーブル



for i in range( 2, N + 1 ):

    g1.append( ( g1[-1] * i ) % mod )

    inverse.append( ( -inverse[mod % i] * (mod//i) ) % mod )

    g2.append( (g2[-1] * inverse[-1]) % mod )



B,W=list(map(int,input().split()))



p=[1]

for i in range(1,B+W+1) :

    p.append((p[-1]*inverse[2])%mod)



BD=[0]

for i in range(1,B+W+1):

    t=(BD[-1]+cmb(i-1,B-1,mod)*p[i])%mod

    BD.append(t)



WD=[0]

for i in range(1,B+W+1):

    t=(WD[-1]+cmb(i-1,W-1,mod)*p[i])%mod

    WD.append(t)



for i in range(1,B+W+1):

    ans=(1-BD[i-1]-WD[i-1])*p[1]+WD[i-1]

    ans%=mod

    print(ans)
def cmb(n, r, mod):#コンビネーションの高速計算　

    if ( r<0 or r>n ):

        return 0

    r = min(r, n-r)

    return g1[n] * g2[r] * g2[n-r] % mod



mod = 10**9+7 #出力の制限

N = 2*10**5

g1 = [1, 1] # 元テーブル

g2 = [1, 1] #逆元テーブル

inverse = [0, 1] #逆元テーブル計算用テーブル



for i in range( 2, N + 1 ):

    g1.append( ( g1[-1] * i ) % mod )

    inverse.append( ( -inverse[mod % i] * (mod//i) ) % mod )

    g2.append( (g2[-1] * inverse[-1]) % mod )



import sys

write=sys.stdout.write



B,W=list(map(int,input().split()))



p=[1]

for i in range(1,B+W+1) :

    p.append((p[-1]*inverse[2])%mod)



BD=[0]

for i in range(1,B+W+1):

    t=(BD[-1]+cmb(i-1,B-1,mod)*p[i])%mod

    BD.append(t)



WD=[0]

for i in range(1,B+W+1):

    t=(WD[-1]+cmb(i-1,W-1,mod)*p[i])%mod

    WD.append(t)



for i in range(1,B+W+1):

    ans=(1-BD[i-1]-WD[i-1])*p[1]+WD[i-1]

    ans%=mod

    write(str(ans)+"\n")
def cmb(n, r, mod):  # コンビネーションの高速計算
    if r < 0 or r > n:
        return 0
    r = min(r, n - r)
    return g1[n] * g2[r] * g2[n - r] % mod


mod = 10**9 + 7  # 出力の制限
N = 2 * 10**5
g1 = [1, 1]  # 元テーブル
g2 = [1, 1]  # 逆元テーブル
inverse = [0, 1]  # 逆元テーブル計算用テーブル
for i in range(2, N + 1):
    g1.append((g1[-1] * i) % mod)
    inverse.append((-inverse[mod % i] * (mod // i)) % mod)
    g2.append((g2[-1] * inverse[-1]) % mod)
B, W = list(map(int, input().split()))
p = [1]
for i in range(1, B + W + 1):
    p.append((p[-1] * inverse[2]) % mod)
BD = [0]
for i in range(1, B + W + 1):
    t = (BD[-1] + cmb(i - 1, B - 1, mod) * p[i]) % mod
    BD.append(t)
WD = [0]
for i in range(1, B + W + 1):
    t = (WD[-1] + cmb(i - 1, W - 1, mod) * p[i]) % mod
    WD.append(t)
for i in range(1, B + W + 1):
    ans = (1 - BD[i - 1] - WD[i - 1]) * p[1] + WD[i - 1]
    ans %= mod
    print(ans)

def cmb(n, r, mod):  # コンビネーションの高速計算
    if r < 0 or r > n:
        return 0
    r = min(r, n - r)
    return g1[n] * g2[r] * g2[n - r] % mod


mod = 10**9 + 7  # 出力の制限
N = 2 * 10**5
g1 = [1, 1]  # 元テーブル
g2 = [1, 1]  # 逆元テーブル
inverse = [0, 1]  # 逆元テーブル計算用テーブル
for i in range(2, N + 1):
    g1.append((g1[-1] * i) % mod)
    inverse.append((-inverse[mod % i] * (mod // i)) % mod)
    g2.append((g2[-1] * inverse[-1]) % mod)
import sys

write = sys.stdout.write
B, W = list(map(int, input().split()))
p = [1]
for i in range(1, B + W + 1):
    p.append((p[-1] * inverse[2]) % mod)
BD = [0]
for i in range(1, B + W + 1):
    t = (BD[-1] + cmb(i - 1, B - 1, mod) * p[i]) % mod
    BD.append(t)
WD = [0]
for i in range(1, B + W + 1):
    t = (WD[-1] + cmb(i - 1, W - 1, mod) * p[i]) % mod
    WD.append(t)
for i in range(1, B + W + 1):
    ans = (1 - BD[i - 1] - WD[i - 1]) * p[1] + WD[i - 1]
    ans %= mod
    write(str(ans) + "\n")

+import sys + +write = sys.stdout.write -    print(ans) +    write(str(ans) + "\n")