#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define Mod 998244353
using namespace std;
struct Tree{
	int fa;
	int ch[2];
	int dp;
}T[1000010];int tot;
inline int newnode(int fa)
{
	tot++;
	T[tot].fa=fa;
	T[tot].ch[0]=T[tot].ch[1]=0;
	T[tot].dp=-1;
	return tot;
}
inline int g(int u,int c)
{
	if(!T[u].ch[c])T[u].ch[c]=newnode(u);
	return T[u].ch[c];
}
inline int w(int u)
{
	return T[T[u].fa].ch[1]==u;
}
int tmp[110][110];
int run(int* s,int len)
{
	int cur=0;
	for(int i=0;i<len;i++)
		cur=g(cur,s[i]);
	return cur;
}
int solve(int u,int cur)
{
	if(u==0)return 1;
	if(T[u].dp!=-1)return T[u].dp;
	T[u].dp=solve(T[u].fa,cur)*(w(u)+1)%Mod;
	int d=0,t=u;
	while(t){
		t=T[t].fa;
		d++;
	}
	for(int i=1;i<d;i++)
	{
		t=u;
		for(int j=0;j<i;j++)
			tmp[cur][j]=1;
		for(int j=0;j<d;j++)
		{
			tmp[cur][j%i]&=w(t);t=T[t].fa;
			if(j>=i&&j%i==(i-1))T[u].dp=(T[u].dp+(long long)solve(t,cur+1)*solve(run(tmp[cur],i),cur+1))%Mod;
		}
	}
	return T[u].dp;
}
char str[110];
int main()
{
	scanf("%s",str);
	int n=strlen(str);
	int cur=0;
	for(int i=0;i<n;i++)
		cur=g(cur,str[i]-'0');
	printf("%d\n",solve(cur,0));
	return 0;
}