func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAXN = 1e6 + 10;   const int mod = 1e9 + 7;   const int P = 257;   int H[MAXN];   char s[MAXN];   char t[MAXN];   int iP[MAXN];   int add(int a, int b) { return (a + b) % mod; }   int mul(long long a, long long b) { return (a * b) % mod; }   int range(int l, int r) {     if (l == 0) return H[r];     return mul(add(H[r], mod - H[l - 1]), iP[l]);   }   int n, m;   bool check(int x, int y) {     int pos = 0;     int hx = -1, hy = -1;     for (int i = 0; i < n; ++i) {       if (s[i] ==  1 ) {         if (hx == -1)           hx = range(pos, pos + x - 1);         else if (hx != range(pos, pos + x - 1))           return 0;         pos += x;       } else {         if (hy == -1)           hy = range(pos, pos + y - 1);         else if (hy != range(pos, pos + y - 1))           return 0;         pos += y;       }     }     if (x == y) return hx != hy;     return 1;   }   int ex(int a, int b) {     int r = 1;     while (b > 0) {       if (b & 1) r = mul(r, a);       a = mul(a, a);       b >>= 1;     }     return r;   }   int main() {     scanf( %s , s);     scanf( %s , t);     n = strlen(s);     m = strlen(t);     int c1 = 0, c0 = 0;     for (int i = 0; i < n; ++i) {       if (s[i] ==  0 )         c0 += 1;       else         c1 += 1;     }     int h = 0;     int ip = ex(P, mod - 2);     int p = 1;     for (int i = 0; i < m; ++i) {       h = add(h, mul(t[i], p));       p = mul(p, P);       H[i] = h;     }     iP[0] = 1;     for (int i = 1; i < m; ++i) {       iP[i] = mul(iP[i - 1], ip);     }     int ans = 0;     for (int x = 1; x * c1 < m; ++x) {       if ((m - c1 * x) % c0 == 0) {         int y = (m - c1 * x) / c0;         ans += check(x, y);       }     }     printf( %d n , ans);     return 0;   }   