/****************************************************************
*	Author: huhao
*	Email: 826538400@qq.com
*	Create time: 2020-02-18 10:36:40
****************************************************************/
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#define fr(i,a,b) for(int i=(a),end_##i=(b);i<=end_##i;i++)
#define fd(i,a,b) for(int i=(a),end_##i=(b);i>=end_##i;i--)
int read()
{
	int r=0,t=1,c=getchar();
	while(c<'0'||c>'9')
	{
		t=c=='-'?-1:1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		r=(r<<3)+(r<<1)+(c^48);
		c=getchar();
	}
	return r*t;
}
#define Int __int128
#define i64 long long
#include<map>
const int mod=998244353,N=110;
std::map<Int,i64> f[N];
char s[N];
int n;
Int a;
i64 solve(Int a,int n)
{
	i64 g[N]; memset(g,0,sizeof(g));
	g[0]=1;
	fr(i,1,n)
	{
		g[i]=g[i-1]*(((a>>(i-1))&1)+1);
		fr(j,1,i/2)
		{
			int k=i-j; Int B=((Int)1<<j)-1,A=(a>>k)&B;
			while(k>=j)
			{
				k-=j; A&=(a>>k)&B;
				g[i]=(g[i]+g[k]*solve(A,j))%mod;
			}
		}
	}
//	printf("%d ",n);
//	fr(i,0,n-1) putchar(((a>>i)&1)+48); putchar(10); putchar(' ');
//	fr(i,0,n) printf("%d%c",int(g[i]),i==n?'\n':' ');
	return g[n];
}
int main()
{
	scanf("%s",s); n=strlen(s);
	fr(i,0,n-1) a|=(Int)(s[i]-48)<<i;
	printf("%d\n",int(solve(a,n)));
	return 0;
}
