#include <bits/stdc++.h>
#define LL long long
#define PLL pair<long long,long long>
#define FI first
#define SE second;
using namespace std;
const int MAXN=1e6+5;
const int BASE1=29,BASE2=33,MOD1=1e9+7,MOD2=1e9+9;
int h1[MAXN],h2[MAXN],po1[MAXN],po2[MAXN];
char s[MAXN],t[MAXN];
int cnt0,cnt1,S,T;
LL ans=0;
int Hash1(int l,int r)
{
return ((1ll*h1[r]-1ll*h1[l-1]*po1[r-l+1])%MOD1+MOD1)%MOD1;
}
int Hash2(int l,int r)
{
return ((1ll*h2[r]-1ll*h2[l-1]*po2[r-l+1])%MOD2+MOD2)%MOD2;
}
int main()
{
scanf("%s",s+1);
S=strlen(s+1);
scanf("%s",t+1);
T=strlen(t+1);
for(int i=1;i<=S;i++)
{
if(s[i]=='0') cnt0++;
else cnt1++;
}
po1[0]=po2[0]=1;
for(int i=1;i<=T;i++)
{
h1[i]=(1ll*h1[i-1]*BASE1+(t[i]-'a'+1))%MOD1;
h2[i]=(1ll*h2[i-1]*BASE2+(t[i]-'a'+1))%MOD2;
po1[i]=po1[i-1]*BASE1%MOD1;
po2[i]=po2[i-1]*BASE2%MOD2;
}
for(int i=1;i<=T;i++)
{
int ra1=Hash1(1,i),ra2=Hash2(1,i);
int rb1=-1,rb2=-1;
int len=(1ll*T-1ll*i*cnt0)/cnt1;
if(1ll*len*cnt1+1ll*i*cnt0!=T||len<1) continue;
int l=1;
bool flag=1;
for(int j=1;j<=S;j++)
{
if(l>T) break;
if(s[j]=='0')
{
int r=l+i-1;
if(Hash1(l,r)!=ra1||Hash2(l,r)!=ra2)
{
flag=0;
break;
}
l=r+1;
}
else if(s[j]=='1')
{
int r=l+len-1;
int has1=Hash1(l,r),has2=Hash2(l,r);
if(rb1==-1)
{
rb1=has1,rb2=has2;
l=r+1;
continue;
}
if(has1!=rb1||has2!=rb2)
{
flag=0;
break;
}
l=r+1;
}
}
if(flag&&!(ra1==rb1&&ra2==rb2)) ans++;
}
printf("%d\n",ans);
return 0;
}