#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #undef max #undef min #ifdef __GNUC__ #pragma GCC diagnostic ignored "-Wunused-result" #endif #ifdef _DEBUG #define ASSERT(x) if(!(x)) __debugbreak() #else char *crash_please=(char *)42; #define ASSERT(x) //if(!(x)) { printf("%s failed",#x); *crash_please=33; } #endif #include class cLogPerformance_Guard { std::chrono::time_point mStartTime=std::chrono::high_resolution_clock::now(); const char *mName; public: cLogPerformance_Guard(const char *Name): mName(Name) {} ~cLogPerformance_Guard() { auto EndTime=std::chrono::high_resolution_clock::now(); auto Elapsed=std::chrono::duration_cast(EndTime-mStartTime); // printf("--- Elapsed %llu ms in %s ---\n", (unsigned long long)Elapsed.count(), mName); } }; using namespace std; using namespace std::string_literals; using ull=unsigned long long; using ll=long long; constexpr ll mod=1'000'000'007; template auto rev(I i) { return std::reverse_iterator(i); } #define RI(var_name) int var_name; scanf("%d", &var_name); #define RIV(var_name, size) vector var_name(size); for(auto &item_of_##var_name: var_name) scanf("%d", &item_of_##var_name); #define RII(var_name1, var_name2) int var_name1, var_name2; scanf("%d %d", &var_name1, &var_name2); #define RIII(var_name1, var_name2, var_name3) int var_name1, var_name2, var_name3; scanf("%d %d %d", &var_name1, &var_name2, &var_name3); #define RIIII(var_name1, var_name2, var_name3, var_name4) int var_name1, var_name2, var_name3, var_name4; scanf("%d %d %d %d", &var_name1, &var_name2, &var_name3, &var_name4); #define RL(var_name) ll var_name; scanf("%lld", &var_name); #define RLV(var_name, size) vector var_name(size); for(auto &item_of_##var_name: var_name) scanf("%lld", &item_of_##var_name); #define RLL(var_name1, var_name2) ll var_name1, var_name2; scanf("%lld %lld", &var_name1, &var_name2); #define RLLL(var_name1, var_name2, var_name3) ll var_name1, var_name2, var_name3; scanf("%lld %lld %lld", &var_name1, &var_name2, &var_name3); #define RLLLL(var_name1, var_name2, var_name3, var_name4) ll var_name1, var_name2, var_name3, var_name4; scanf("%lld %lld %lld %lld", &var_name1, &var_name2, &var_name3, &var_name4); #define RD(var_name) double var_name; scanf("%lf", &var_name); #define RDV(var_name, size) vector var_name(size); for(auto &item_of_##var_name: var_name) scanf("%d", &item_of_##var_name); #define RDD(var_name1, var_name2) double var_name1, var_name2; scanf("%lf %lf", &var_name1, &var_name2); #define RDDD(var_name1, var_name2, var_name3) double var_name1, var_name2, var_name3; scanf("%lf %lf %lf", &var_name1, &var_name2, &var_name3); #define ALL(cont) cont.begin(), cont.end() #define FOR(var, max_value) for(int var=0;var T modpow(T base, T exp) { base %= mod; T result = 1; while(exp > 0) { if(exp & 1) result = (result * base) % mod; base = (base * base) % mod; exp >>= 1; } return result; } void Solve() { RLLL(n, k, x); --x; ll total_sum=1; vector last_digit(2, 0); last_digit[0]=1; for(int i=2; i<=n-2; ++i) { ll new_sum=0; // for(int j=0; j