/*
分析:
bfs+状态压缩。
2013-06-04
*/
#include"iostream"
#include"cstdio"
#include"cstring"
#include"queue"
using namespace std;
char str[30];
int len,aim,dis[1<<20],vis[1<<20],base[20];
int bfs()
{
int i,limit=1<<len;
int now,next;
queue<int>q;
now=0;
for(i=len-1;i>=0;i--) now=now*2+str[i]-'0';
for(i=0;i<limit;i++) vis[i]=0;
dis[now]=0;
vis[now]=1;
q.push(now);
while(!q.empty())
{
now=q.front();
q.pop();
if(now==aim) return dis[aim];
for(i=0;i<len;i++)
{
next=now ^ base[i];
if(vis[next]) continue;
dis[next]=dis[now]+1;
vis[next]=1;
q.push(next);
}
}
return -1;
}
int main()
{
int i;
aim=0;
while(scanf("%s",str)!=-1)
{
len=strlen(str);
base[0]=3;
base[len-1]=3<<(len-2);
for(i=1;i<len-1;i++) base[i]=7<<(i-1);
if(len==1)
{
if(str[0]=='1') printf("1");
else printf("0\n");
continue;
}
int ans=bfs();
if(ans==-1) printf("NO\n");
else printf("%d\n",ans);
}
return 0;
}