#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
using ld = long double;
using PII=pair<ll,ll>;
using PIII=pair<int,pair<int,int>>;
const ll MOD = 1000000007LL;
const ld ESP = 1e-10;
const ld PI = acosl(-1);
#define rep(i,j,k) for(int i=(j);i<(k);i++)
#define per(i,j,k) for(int i=(j);i>(k);i--)
/**
* @brief 快速幂函数
*/
ll qpow(ll base, ll exp, ll mod) {
ll res = 1;
base %= mod;
while (exp > 0) {
if (exp & 1) res = (res * base) % mod;
base = (base * base) % mod;
exp >>= 1;
}
return res;
}
void solve(){
// Lambda 表达式,创建一个名为 comb_factory 的工厂函数
auto comb_factory = [&](int max_n) -> function<ll(int, int)> {
// 先预处理阶乘和阶乘的逆元
vector<ll> fact(max_n + 1), inv_fact(max_n + 1);
fact[0] = 1;
for (int i = 1; i <= max_n; ++i) {
fact[i] = (fact[i - 1] * i) % MOD;
}
inv_fact[max_n] = qpow(fact[max_n], MOD - 2, MOD);
for (int i = max_n; i >= 1; --i) {
inv_fact[i - 1] = (inv_fact[i] * i) % MOD;
}
//返回一个能计算 C(n, k) 的 Lambda 函数
return [=](int n, int k) -> ll {
if (k < 0 || k > n) return 0;
return fact[n] * inv_fact[k] % MOD * inv_fact[n - k] % MOD;
};
};
int x, y; cin >> x >> y;
int total = x + y;
auto C_from_example = comb_factory(total);
for(int i = 1; i <= total; ++i){
int a1 = (i + 1) >> 1, b1 = i >> 1;
int a2 = i >> 1, b2 = (i + 1) >> 1;
ll ans = (C_from_example(x - 1, a1 - 1) * C_from_example(y - 1, b1 - 1)) % MOD;
ans = (ans + (C_from_example(x - 1, a2 - 1) * C_from_example(y - 1, b2 - 1)) % MOD) % MOD;
cout << ans << endl;
}
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
int T = 1;
// cin >> T;
while (T--)
solve();
return 0;
}