#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007, base = 36161;
const int MAX_T = 1000007;
long long prefHash[MAX_T], Pow[MAX_T];
string s, t;
long long zeroes = 0, ones = 0, firstOne = -1, firstZero = -1, n;
long long GetHash(int a, int b);
void HashPreprocessing();
bool Check(long long a, long long b);
int main() {
  ios_base::sync_with_stdio(0);
  cin >> s >> t;
  if (s[0] == '1')
    for (char &c : s) c = c == '0' ? '1' : '0';
  for (int i = 0; i < (int)s.size(); i++)
    if (s[i] == '0') {
      zeroes++;
      if (firstZero == -1) firstZero = i;
    } else {
      ones++;
      if (firstOne == -1) firstOne = i;
    }
  n = t.size();
  HashPreprocessing();
  long long result = 0;
  for (int a = 1; a < n; a++)
    if (n - zeroes * a > 0 && (n - zeroes * a) % ones == 0)
      result += Check(a, (n - zeroes * a) / ones);
  cout << result << "\n";
  return 0;
}
bool Check(long long a, long long b) {
  if (a * firstOne + b > n) return 0;
  long long aHash = GetHash(0, a - 1);
  long long bHash = GetHash(a * firstOne, a * firstOne + b - 1);
  if (aHash == bHash && a == b) return 0;
  long long pos = 0;
  for (char c : s) {
    if (c == '0') {
      if (aHash != GetHash(pos, pos + a - 1)) return 0;
      pos += a;
    } else {
      if (bHash != GetHash(pos, pos + b - 1)) return 0;
      pos += b;
    }
  }
  return 1;
}
void HashPreprocessing() {
  Pow[0] = 1;
  for (int i = 1; i <= n; i++) Pow[i] = (Pow[i - 1] * base) % mod;
  prefHash[0] = t[0] - 'a';
  for (int i = 1; i < n; i++)
    prefHash[i] = (prefHash[i - 1] * base + t[i] - 'a') % mod;
}
long long GetHash(int a, int b) {
  long long left = a == 0 ? 0 : (prefHash[a - 1] * Pow[b - a + 1]) % mod;
  return (prefHash[b] + mod - left) % mod;
}
