#include <bits/stdc++.h>
using namespace std;
template <class T>
inline bool minn(T &A, T B) {
  return A > B ? (A = B, 1) : 0;
}
template <class T>
inline bool maxx(T &A, T B) {
  return A < B ? (A = B, 1) : 0;
}
const long long mod = 1e9 + 7;
const long long base = 9973;
string s, t;
int n, cnt0, cnt1, cnt, res;
long long hsh[1000005], pw[1000005];
int get(int l, int r) {
  return (hsh[r] - hsh[l - 1] * pw[r - l + 1] + mod * mod) % mod;
}
bool ck(int dem0, int dem1) {
  int res1 = 0, res0 = 0, i = 1;
  for (char c : s) {
    if (c == '0') {
      if (res0 == 0)
        res0 = get(i, i + dem0 - 1);
      else if (res0 != get(i, i + dem0 - 1))
        return 0;
      i += dem0;
    } else {
      if (res1 == 0)
        res1 = get(i, i + dem1 - 1);
      else if (res1 != get(i, i + dem1 - 1))
        return 0;
      i += dem1;
    }
  }
  return res1 != res0;
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> s >> t;
  n = (int)((t).size());
  t = ' ' + t;
  pw[0] = 1;
  for (int i = 1; i <= n; ++i) {
    pw[i] = (pw[i - 1] * base) % mod;
    hsh[i] = (hsh[i - 1] * base + t[i] - 'a' + 1) % mod;
  }
  for (char c : s) {
    if (c == '0')
      cnt0++;
    else
      cnt1++;
  }
  for (int i = 1; i * cnt0 + cnt1 <= n; ++i) {
    cnt = n - i * cnt0;
    ;
    if (cnt % cnt1) continue;
    if (ck(i, cnt / cnt1)) res++;
  }
  cout << res;
}
