#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef vector vi; typedef vector vvi; typedef pair pii; #define all(c) (c).begin(), (c).end() #define loop(i,a,b) for(ll i=a; iDUMP &operator,(const T&t){if(this->tellp())*this<<", ";*this< ostream& operator<<(ostream& os, vector const& v){ rep(i,v.size()) os << v[i] << (i+1==v.size()?"":" "); return os; } ll mod = 1000000000; // memset(dpcomb,-1,sizeof(dpcomb)); ll dpcomb[1024][1024]; // nCr % mod ll nCr(int n, int r){ if (n < 0 || r < 0 || n < r) return 0; if (r==0) return 1; ll &res = dpcomb[n][r]; if (res!=-1) return res; return res = (nCr(n - 1, r - 1) + nCr(n - 1, r))%mod; } ll N,M; int main(){ memset(dpcomb,-1,sizeof(dpcomb)); while(cin>>N>>M){ N/=1000; ll rem = N - N/M * M; cout << nCr(M,rem) << endl; } }