//Love and Freedom.
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<map>
#define ll long long
#define inf 20021225
#define N 110
#define LL __int128
#define mdn 998244353
using namespace std;
int read()
{
	int s=0,t=1; char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')	t=-1; ch=getchar();}
	while(ch>='0' && ch<='9')	s=s*10+ch-'0',ch=getchar();
	return s*t;
}
void upd(int &x,int y){x+=x+y>=mdn?y-mdn:y;}
char ch[N]; map<LL,int> f;
int n,pw[N];
LL get(LL w,int l,int r)
{
	return w>>l&(((LL)1<<(r-l+1))-1);
}
int solve(LL k)
{
	if(f.find(k)!=f.end())	return f[k];
	int ans=0,w=k>>n; if(!w)	return f[k]=1;
	LL S=get(k,0,n-1);
	for(int i=0;i<w;i++)	if(S>>i&1)	ans++;
	ans=pw[ans]; int cnt=0;
	for(int i=0;i<w;i++)
	{
		for(int j=i;j<w;j++)
		{
			int len=j-i+1; if(j+len>w-1)	break;
			LL nw=get(S,i,j);
			for(int t=i+len;t+len-1<w;t+=len)
			{
				nw&=get(S,t,t+len-1);
				upd(ans,1ll*pw[cnt]*solve(nw|(LL)len<<n)%mdn*solve(get(S,t+len,w-1)|((LL)w-t-len<<n))%mdn);
			}
		}
		if(S>>i&1)	cnt++;
	}
	return f[k]=ans;
}
int main()
{
	scanf("%s",ch+1); n=strlen(ch+1); pw[0]=1; LL s=0;
	for(int i=1;i<=n;i++)	pw[i]=(pw[i-1]<<1)%mdn;
	for(int i=0;i<n;i++)	s|=((LL)ch[i+1]-'0'<<i);
	s|=(LL)n<<n; printf("%d\n",solve(s));
	return 0;
}
