#include<iostream>
#include<cstring>
#define debug(x) cerr << __LINE__ << " : "<<#x<<" is "<<x<<endl
using namespace std;
typedef unsigned long long ull;
const ull mod = 1e9 + 7;
const int N = 1e6 + 5;
char s[100005],t[N];
ull base[N],hash_val[N],hash0,hash1,hash_base = 7758258;
int n,cnt0,cnt1,m,len[2];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> (s + 1);
cin >> (t + 1);
n = strlen(s + 1);
m = strlen(t + 1);
base[0] = 1;
for(int i = 1;i < N;i++){
base[i] = base[i - 1] * hash_base;
}
for(int i = 1;i <= m;i++){
hash_val[i] = hash_val[i - 1] * hash_base + t[i] - 'a';
}
for(int i = 1;i <= n;i++){
if(s[i] == '0')
cnt0++;
else
cnt1++;
}
ull ans = 0;
for(int i = 1;i * cnt0 <= m - 1;i++){
if((m - i * cnt0) % cnt1 != 0)continue;
len[0] = i, len[1] = (m - i * cnt0) / cnt1;
bool f0 = 0,f1 = 0,f = 1;
for(int j = 1,idx = 1;j <= m;j += len[s[idx] == '1'],idx++){
int tmp_len = len[s[idx] == '1'];
int tmp = tmp_len + j - 1;
ull tmp_hash = hash_val[tmp] - hash_val[tmp - tmp_len] * base[tmp_len];
if(s[idx] == '0'){
if(!f0)hash0 = tmp_hash,f0 = 1;
else if(hash0 != tmp_hash){
f = 0;
break;
}
}
if(s[idx] == '1'){
if(!f1)hash1 = tmp_hash,f1 = 1;
else if(hash1 != tmp_hash){
f = 0;
break;
}
}
}
if(len[0] == len[1] && hash0 == hash1)continue;
if(f)ans++;
}
cout << ans << '\n';
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPGNzdHJpbmc+CiNkZWZpbmUgZGVidWcoeCkgY2VyciA8PCBfX0xJTkVfXyA8PCAiIDogIjw8I3g8PCIgaXMgIjw8eDw8ZW5kbAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwpjb25zdCB1bGwgbW9kID0gMWU5ICsgNzsgCmNvbnN0IGludCBOID0gMWU2ICsgNTsKY2hhciBzWzEwMDAwNV0sdFtOXTsKdWxsIGJhc2VbTl0saGFzaF92YWxbTl0saGFzaDAsaGFzaDEsaGFzaF9iYXNlID0gNzc1ODI1ODsKaW50IG4sY250MCxjbnQxLG0sbGVuWzJdOwppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZSgwKTsKICAgIGNvdXQudGllKDApOwoJY2luID4+IChzICsgMSk7CgljaW4gPj4gKHQgKyAxKTsKCW4gPSBzdHJsZW4ocyArIDEpOwoJbSA9IHN0cmxlbih0ICsgMSk7CgliYXNlWzBdID0gMTsKCWZvcihpbnQgaSA9IDE7aSA8IE47aSsrKXsKCQliYXNlW2ldID0gYmFzZVtpIC0gMV0gKiBoYXNoX2Jhc2U7Cgl9Cglmb3IoaW50IGkgPSAxO2kgPD0gbTtpKyspewoJCWhhc2hfdmFsW2ldID0gaGFzaF92YWxbaSAtIDFdICogaGFzaF9iYXNlICsgdFtpXSAtICdhJzsKCX0KCWZvcihpbnQgaSA9IDE7aSA8PSBuO2krKyl7CgkJaWYoc1tpXSA9PSAnMCcpCgkJCWNudDArKzsKCQllbHNlIAoJCQljbnQxKys7Cgl9CgoJdWxsIGFucyA9IDA7Cglmb3IoaW50IGkgPSAxO2kgKiBjbnQwIDw9IG0gLSAxO2krKyl7CgkJCgkJaWYoKG0gLSBpICogY250MCkgJSBjbnQxICE9IDApY29udGludWU7CgoJCWxlblswXSA9IGksIGxlblsxXSA9IChtIC0gaSAqIGNudDApIC8gY250MTsKCQlib29sIGYwID0gMCxmMSA9IDAsZiA9IDE7CgkJZm9yKGludCBqID0gMSxpZHggPSAxO2ogPD0gbTtqICs9IGxlbltzW2lkeF0gPT0gJzEnXSxpZHgrKyl7CgkJCQoJCQlpbnQgdG1wX2xlbiA9IGxlbltzW2lkeF0gPT0gJzEnXTsKCQkJaW50IHRtcCA9IHRtcF9sZW4gKyBqIC0gMTsKCQkJdWxsIHRtcF9oYXNoID0gaGFzaF92YWxbdG1wXSAtIGhhc2hfdmFsW3RtcCAtIHRtcF9sZW5dICogYmFzZVt0bXBfbGVuXTsKCgkJCWlmKHNbaWR4XSA9PSAnMCcpewoJCQkJaWYoIWYwKWhhc2gwID0gdG1wX2hhc2gsZjAgPSAxOwoJCQkJZWxzZSBpZihoYXNoMCAhPSB0bXBfaGFzaCl7CgkJCQkJZiA9IDA7CgoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWlmKHNbaWR4XSA9PSAnMScpewoJCQkJaWYoIWYxKWhhc2gxID0gdG1wX2hhc2gsZjEgPSAxOwoJCQkJZWxzZSBpZihoYXNoMSAhPSB0bXBfaGFzaCl7CgkJCQkJZiA9IDA7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9CgkJaWYobGVuWzBdID09IGxlblsxXSAmJiBoYXNoMCA9PSBoYXNoMSljb250aW51ZTsKCQlpZihmKWFucysrOwoJfQoJY291dCA8PCBhbnMgPDwgJ1xuJzsKCXJldHVybiAwOwp9