#ifndef _GLIBCXX_NO_ASSERT #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#ifdef __GXX_EXPERIMENTAL_CXX0X__ #include #include #include #include #include #include #include #include //#endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include #include //#include #include //#include #include //#include #include #include #include #include //#include #include #include #include #include #include using namespace std; int data[10001][10001] = {}; int main () { data[0][1] = 1; for( size_t i = 1; i < 10001; i++ ) { for( size_t j = 1; j < 10001; j++ ) { data[i][j] = ( data[i - 1][j] + data[i - 1][j - 1] ) % 1000000000; } } long long int N , M , A , B; cin >> N; cin >> M; N %= M * 1000; N /= 1000; cout << data[M][N + 1] << endl; }