import std.stdio, std.array, std.string, std.conv, std.algorithm;
import std.typecons, std.range, std.random, std.math, std.container;
import std.numeric, std.bigint, core.bitop, core.stdc.stdio;

immutable uint MOD = 10^^9 + 7;
alias mint = ModInt!MOD;

void main() {
    auto s = readln.split.map!(to!int);
    auto B = s[0];
    auto W = s[1];

    auto comb = new Combinations!MOD(B + W + 1);
    auto ans = new mint[](B + W + 1);
    ans[] = mint(1) / mint(2);
    ans[0] = mint(1);
    mint prevB, prevW;

    foreach (i; 1..B+W) {
        if (i == B) {
            prevB = mint(1) / (mint(2)^^i);
            ans[i + 1] -= prevB / 2;
        } else if (i > B) {
            prevB += comb.nCr(i-1, B-1) / (mint(2)^^i);
            ans[i + 1] -= prevB / 2;
        }
        if (i == W) {
            prevW = mint(1) / (mint(2)^^i);
            ans[i + 1] += prevW / 2;
        } else if (i > W) {
            prevW += comb.nCr(i-1, W-1) / (mint(2)^^i);
            ans[i + 1] += prevW / 2;
        }
    }

    ans[1..$].each!writeln;
}

struct ModInt(uint mod) {
    import std.conv : to;

    uint n;

    this(int n) {
        this.n = (n % mod + mod) % mod;
    }

    this(long n) {
        this.n = (n % mod + mod) % mod;
    }

    private this(uint n) {
        this.n = n;
    }

    string toString() {
        return to!string(this.n);
    }

    private uint normilize(uint n) const {
        return n < mod ? n : n - mod;
    }

    private ModInt pow(uint n, long x) const {
        long ret = 1;
        long a = n;
        while (x) {
            if (x & 1) ret = ret * a % mod;
            a = a * a % mod;
            x >>= 1;
        }
        return ModInt(to!ulong(ret));
    }

    ModInt opBinary(string op : "+")(ModInt rhs) const {
        return ModInt(normilize(n + rhs.n));
    }

    ModInt opBinary(string op : "-")(ModInt rhs) const {
        return ModInt(normilize(n + mod - rhs.n));
    }

    ModInt opBinary(string op : "*")(ModInt rhs) const {
        return ModInt(to!uint(to!long(n) * rhs.n % mod));
    }

    ModInt opBinary(string op : "/")(ModInt rhs) const {
        return this * pow(rhs.n, mod-2);
    }

    ModInt opBinary(string op : "^^")(ModInt rhs) const {
        return pow(this.n, rhs.n);
    }

    ModInt opBinary(string op, T)(T rhs) {
        ModInt mod_rhs = ModInt(rhs);
        return opBinary!op(mod_rhs);
    }

    ModInt opOpAssign(string op)(ModInt rhs) {
        return mixin ("this=this"~op~"rhs");
    }

    ModInt opOpAssign(string op, T)(T rhs) {
        ModInt mod_rhs = ModInt(rhs);
        return mixin ("this=this"~op~"mod_rhs");
    }
}

class Combinations(uint mod) {
    alias mint = ModInt!mod;
    mint[] f;

    this(int maxval) {
        f = new mint[](maxval);
        f[0] = f[1] = mint(1);
        foreach(i; 1..maxval-1) {
            f[i+1] = f[i] * (i+1);
        }
    }

    mint nCr(int n, int r) {
        if (n < r) return mint(0);
        return f[n] / f[n-r] / f[r];
    }

    mint nPr(int n, int r) {
        if (n < r) return mint(0);
        return f[n] / f[n-r];
    }

    mint nHr(int n, int r) {
        if (n == 0 &&r == 0) return mint(1);
        if (n == 0) return mint(0);
        return f[n+r-1] / f[n-1] / f[r];
    }
}
