func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 100010;   long long mod = 1e9 + 7;   long long fmod(long long b, long long exp) {     long long res = 1;     while (exp) {       if (exp & 1ll) res = (res * b) % mod;       b = (b * b) % mod;       exp /= 2ll;     }     return res;   }   long long buc[101];   long long fac[N], inv[N];   long long dp[N], temp_dp[N];   long long ans[55][55];   string s, s1, s2;   int find(char c) {     if (c >=  A  && c <=  Z )       return (int)(c -  A  + 26);     else       return (c -  a );   }   inline void add(long long &a, long long b) {     a += b;     if (a >= mod) a -= mod;   }   inline void sub(long long &a, long long b) {     a -= b;     if (a < 0) a += mod;   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     int t = 1, n, i, j, m, q;     cin >> s;     n = s.length();     for (int i = 0; i < n; i++) buc[find(s[i])]++;     fac[0] = 1;     for (i = 1; i <= n; i++) fac[i] = (fac[i - 1] * 1ll * i) % mod;     inv[n] = fmod(fac[n], mod - 2);     for (int i = n - 1; i >= 0; i--) inv[i] = (inv[i + 1] * 1ll * (i + 1)) % mod;     long long num = (fac[n / 2] * fac[n / 2]) % mod;     for (int i = 0; i < 52; i++) num = (num * inv[buc[i]]) % mod;     dp[0] = 1;     for (int i = 0; i < 52; i++) {       if (!buc[i]) continue;       for (int j = n; j >= buc[i]; j--) add(dp[j], dp[j - buc[i]]);     }     for (i = 0; i < 52; i++) ans[i][i] = dp[n / 2];     for (i = 0; i < 52; i++) {       if (!buc[i]) continue;       for (int k = 0; k <= n; k++) temp_dp[k] = dp[k];       for (int k = buc[i]; k <= n; k++) sub(temp_dp[k], temp_dp[k - buc[i]]);       for (int j = i + 1; j < 52; j++) {         if (!buc[j]) continue;         for (int k = buc[j]; k <= n; k++) sub(temp_dp[k], temp_dp[k - buc[j]]);         ans[i][j] = (2ll * temp_dp[n / 2]) % mod;         ans[j][i] = ans[i][j];         for (int k = n; k >= buc[j]; k--) add(temp_dp[k], temp_dp[k - buc[j]]);       }     }     cin >> q;     int x, y;     while (q--) {       cin >> x >> y;       int l = find(s[x - 1]);       int r = find(s[y - 1]);       cout << (num * ans[l][r]) % mod <<   n ;     }     return 0;   }   