由于主包不会逆元,但注意到x,y较小,于是使用了组合数的递推公式:c(n)(k) = c(n-1)(k) + c(n-1)(k-1)

然后就是隔板法,代码如下:

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int x=in.nextInt();
        int y=in.nextInt();
        int mod=1000000007;
        if(x<y){
            int t=x;
            x=y;
            y=t;
        }
        long c[][];
        c=new long[x+1][x+1];
        for(int i=0;i<=x;i++) c[i][0]=1;
        for(int i=1;i<=x;i++){
            //System.out.println(c[i][0]);
            for(int j=1;j<=i;j++){
                c[i][j]=(c[i-1][j]+c[i-1][j-1])%mod;
                //System.out.println(c[i][j]);
            }
        }
        for(int i=1;i<=x+y;i++){
            int os=i/2;int js=(i+1)/2;
            long p,q;
            if(os>0&&os-1<=x-1) p=c[x-1][os-1];
            else p=0;
            if(js-1<=x-1) q=c[x-1][js-1];
            else q=0;
            if(js-1<=y-1) p=(p*c[y-1][js-1])%mod;
            else p=0;
            if(os>0&&os-1<=y-1) q=(q*c[y-1][os-1])%mod;
            else q=0;
            long ans=(p+q)%mod;
            System.out.println(ans);
        }
    }
}
//cnk=cnk-1+cn-1k-1