func_code_string: #include <bits/stdc++.h>   using namespace std;   long long n, a, b, k;   long long q;   long long param = 0;   string ciag;   long long MOD = 1000000009;   long long potega(long long a_1, long long n_1) {     if (n_1 == 0) return 1;     if (n_1 == 1)       return a_1;     else if (n_1 % 2 == 0) {       long long s = potega(a_1, n_1 / 2);       return (s * s) % MOD;     } else {       return (potega(a_1, n_1 - 1) * a_1) % MOD;     }   }   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     cin >> n >> a >> b >> k;     cin >> ciag;     q = (potega(b, k) * potega(a, MOD - 1 - k)) % MOD;     if (q < 0) {       q %= MOD;       q += MOD;       q %= MOD;     }     long long krotnosc = ((n + 1) / k);     if (q != 1) {       for (int i = 0; i < (k); ++i) {         if (ciag[i] ==  - ) {           long long a_1 = (potega(a, n - i) * potega(b, i)) % MOD;           if (a_1 < 0) {             a_1 %= MOD;             a_1 += MOD;             a_1 %= MOD;           }           long long temp_ =               (((a_1 * ((potega(q, krotnosc) - 1 + MOD) % MOD) % MOD)) *                (potega(q - 1, MOD - 2))) %               MOD;           if (temp_ < 0) {             temp_ %= MOD;             temp_ += MOD;             temp_ %= MOD;           }           param = ((param - temp_) % MOD + MOD) % MOD;           if (param < 0) {             param %= MOD;             param += MOD;             param %= MOD;           }         } else {           long long a_1 = (potega(a, n - i) * potega(b, i)) % MOD;           if (a_1 < 0) {             a_1 %= MOD;             a_1 += MOD;             a_1 %= MOD;           }           long long temp_ =               (((a_1 * ((potega(q, krotnosc) - 1 + MOD) % MOD) % MOD)) *                (potega(q - 1, MOD - 2))) %               MOD;           if (temp_ < 0) {             temp_ %= MOD;             temp_ += MOD;             temp_ %= MOD;           }           param = (param + temp_) % MOD;           if (param < 0) {             param %= MOD;             param += MOD;             param %= MOD;           }         }       }     } else {       for (int i = 0; i < (k); ++i) {         if (ciag[i] ==  - ) {           long long a_1 = (potega(a, n - i) * potega(b, i)) % MOD;           if (a_1 < 0) {             a_1 %= MOD;             a_1 += MOD;             a_1 %= MOD;           }           long long temp_ = (a_1 * krotnosc) % MOD;           if (temp_ < 0) {             temp_ %= MOD;             temp_ += MOD;             temp_ %= MOD;           }           param = ((param - temp_) % MOD + MOD) % MOD;           if (param < 0) {             param %= MOD;             param += MOD;             param %= MOD;           }         } else {           long long a_1 = (potega(a, n - i) * potega(b, i)) % MOD;           if (a_1 < 0) {             a_1 %= MOD;             a_1 += MOD;             a_1 %= MOD;           }           long long temp_ = (a_1 * krotnosc) % MOD;           if (temp_ < 0) {             temp_ %= MOD;             temp_ += MOD;             temp_ %= MOD;           }           param = (param + temp_) % MOD;           if (param < 0) {             param %= MOD;             param += MOD;             param %= MOD;           }         }       }     }     cout << (param + MOD) % MOD <<   n ;     return 0;   }   