int64_t totalWays(int n, int m) { deque<int> dp(m, 0); dp[0] = 1; int sum = 1; for (int i = 1; i < min(n, m); ++i) { for (int j = 0; j < i; ++j) { dp[i] += dp[j]%10007; } dp[i] += 1; sum += dp[i]; sum = sum % 10007; } if (n < m) return dp[n - 1]; for (int i = m; i < n; ++i) { int front = dp.front(); dp.pop_front(); dp.push_back(sum); sum += (sum - front); sum %= 10007; if (sum < 0) sum += 10007; } return dp[m-1] % 10007; }