#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6 + 5;
char c[maxn], s[maxn];
unsigned long long p[2] = {13331, 13332};
unsigned long long hs[maxn][2], f[maxn][2];
int n, m;
unsigned long long get(int l, int r) {
  return hs[r][0] - hs[l - 1][0] * f[r - l + 1][0];
}
unsigned long long get2(int l, int r) {
  return hs[r][1] - hs[l - 1][1] * f[r - l + 1][1];
}
bool check(int x, int y) {
  unsigned long long r = 0, r2 = 0;
  unsigned long long rr = 0, rr2 = 0;
  int id = 1;
  for (int i = 1; i <= m; i++) {
    if (c[i] == '0') {
      if (r == 0)
        r = get(id, id + x - 1), rr = get2(id, id + x - 1);
      else if (get(id, id + x - 1) != r || get2(id, id + x - 1) != rr)
        return false;
      id += x;
    } else {
      if (r2 == 0)
        r2 = get(id, id + y - 1), rr2 = get2(id, id + y - 1);
      else if (get(id, id + y - 1) != r2 || get2(id, id + y - 1) != rr2)
        return false;
      id += y;
    }
  }
  if (x == y) {
    string sss = "", ssss = "";
    for (int i = 1; i <= m; i++) {
      if (c[i] == '0') {
        for (int j = 1 + x * (i - 1); j < 1 + x * i; j++) sss += s[j];
        break;
      }
    }
    for (int i = 1; i <= m; i++) {
      if (c[i] == '1') {
        for (int j = 1 + y * (i - 1); j < 1 + y * i; j++) ssss += s[j];
        break;
      }
    }
    return sss != ssss;
  }
  return true;
}
int main() {
  scanf("%s", c + 1);
  scanf("%s", s + 1);
  f[0][0] = f[0][1] = 1;
  n = strlen(s + 1);
  for (int i = 1; i <= n; i++) {
    hs[i][0] = hs[i - 1][0] * p[0] + s[i];
    f[i][0] = f[i - 1][0] * p[0];
    hs[i][1] = hs[i - 1][1] * p[1] + s[i];
    f[i][1] = f[i - 1][1] * p[1];
  }
  m = strlen(c + 1);
  int a = 0, b = 0;
  for (int i = 1; i <= m; i++) {
    if (c[i] == '0')
      a++;
    else
      b++;
  }
  int ans = 0;
  for (int x = 1;; x++) {
    if (a * x >= n) break;
    if ((n - a * x) % b == 0) {
      int y = (n - a * x) / b;
      if (check(x, y)) ans++;
    }
  }
  cout << ans << endl;
  return 0;
}
