#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
/*
给你一个字符串只有0和1,问你有多少个子串满足长度等于该子串的二进数值
开始我不知道如何暴力,后来想直接借助前面求得二进制值来往下求
但是还是不可以,tle
现在的思路是,直接找1的位置,然后求他左边有多少前导0,以此1往后延伸,不够就用前导0,因为要枚举所有1
所以不会有遗漏,而且从1开始的吗所以最多往后延伸18位1<<18大于它的长度了
*/
const int maxn=2e5+10;
int dis=18;
char s[maxn];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%s",s);
int sum=0;
int len=strlen(s);
int pre=0;
for(int i=0; i<len; i++)
{
if(s[i]=='0')
pre++;
else
{
int r=i;
int cnt=1;
for(int j=0; j<dis; j++)
{
if(cnt<=pre+(r-i+1))
sum++;
if(r==len-1)
break;
cnt=cnt*2+(s[++r]-'0');
}
pre=0;
}
}
printf("%d\n",sum);
}
return 0;
}