#include <stdio.h>
#include <string.h>//给出一个01字符串(长度不超过100),求其每一个子串出现的次数

void func(char str[],char t[],int l){//递归函数,数组t[]表示子串。开头为0的子串(及其递归后产生的串)永远要排在开头为1的子串(及其递归后产生的串) 
	int sum=0;
	t[l]='0';t[l+1]='\0';//计算数组t下标为l的元素(即t[l])为'0'时,在str中出现的次数
	if(strlen(t)==strlen(str))return;//递归边界 
	char *p=str;
	while(p=strstr(p,t)){ 
		sum++;
		p=p+1;                  
	}
	if(sum>1)printf("%s %d\n",t,sum);
	func(str,t,l+1);//t串在递归中不断更新,核心是l变量不断加一 
	
	sum=0;
	t[l]='1';t[l+1]='\0';//计算数组t下标为l的元素(即t[l])为'1'时,在str中出现的次数
	char *q=str;
	while(q=strstr(q,t)){ 
		sum++;                                                                                 
		q=q+1;                  
	}
	if(sum>1)printf("%s %d\n",t,sum);
	func(str,t,l+1);
	
}
int main(){
char str[101],t[101];//数组t用来遍历所有可能出现的子串 
while(scanf("%s",str)!=EOF){
	func(str,t,0);
}

	return 0;
}
//strstr(str1,str2)函数用于找到子串(str2)在一个字符串(str1)中第一次出现的位置,并返回该位置的指针;如果找不到,返回空指针(NULL)