import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.BitSet; import java.util.Collections; import java.util.Comparator; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.TreeSet; public class Main { public static void main(String[] args) throws NumberFormatException, IOException{ ContestScanner in = new ContestScanner(); long n = in.nextLong(); long m = in.nextLong(); // long div = n/m; long ans1 = (n/m/1000)*1000; long res = n-ans1*m; // long mod = n%m; int atari = (int)(res/1000); int hazure = (int)(m-atari); int a = atari>hazure?atari:hazure; int b = atari>hazure?hazure:atari; System.out.println(combi((int)m+1, b, 1000000000)); } public static long combi(int n, int a, int mod){ long[] old = new long[n]; long[] tri = new long[n]; for(int i=0; i{ public int compare(int[] a, int[] b) { return a[0] - b[0]; } } // //class Reverse implements Comparator{ // public int compare(Integer arg0, Integer arg1) { // return arg1 - arg0; // } //} class Node implements Comparable{ int id; int qNum; int xor; List edge = new ArrayList(); public Node(int id, int q, int xor){ this.id = id; qNum = q; this.xor = xor; } public void createEdge(Node node){ edge.add(node); } @Override public int compareTo(Node n) { return n.qNum - qNum; } } class MyMath{ public final static double PIhalf = Math.PI/2.0; public static double pAngle(double x, double y){ // ベクトル(1, 0)と(x, y)とのなす角を返す(rad:0 to 2pi) if(x == 0){ if(y == 0){ System.err.println("pAngle error: zero vector."); return 0; }else if(y < 0){ return PIhalf*3.0; }else{ return PIhalf; } } double rad = Math.atan(y/x); if(rad < 0){ rad += Math.PI*2.0; } return rad; } public static long fact(long n){ long res = 1; while(n > 0){ res *= n--; } return res; } public static long[][] pascalT(int n){ long[][] tri = new long[n][]; for(int i=0; i