//题目大意:给两个数据,各个位的数的平方和就是他的下一个数.请问这两个数据形成的数列中出现第一个系统数据时,两个数列的长度.
//PS:第一个数据如果太大,要处理掉.其他的可以用数组直接记录
#include<stdio.h>
#include<string.h>
int first[1000],second[1000],fStep[1000],sStep[1000];
int in1,in2,x1,y1,x2,y2,i,j,step,minf,mins,px,py;
int qk;//0代表未找到,1代表2数在1圈的圈外(包括入圈点),2代表在圈内.
bool f[1000],s[1000];
int GetNum(int k)
{
int sum=0,m;
while(k)
{
m=k%10;
sum+=m*m;
k/=10;
}
return sum;
}
int main()
{
while(scanf("%d%d",&x1,&y1))
{
if(!x1&&!y1) break;
memset(f,false,sizeof(f));
memset(s,false,sizeof(s));
qk=0;//表示未找到
px=x1,py=y1;//输出原数用
if(px==py)
{
printf("%d %d 2\n",px,py);
continue;
}
//第一个数画圈
step=1;
//解决第一个数过大问题
if(px<1000)
{
f[x1]=true;
fStep[x1]=step++;
}
else
{
x1=GetNum(x1);
step++;
f[x1]=true;
fStep[x1]=step++;
}
x2=GetNum(x1);
while(!f[x2])
{
first[x1]=x2;
f[x2]=true;
fStep[x2]=step++;
x1=x2;
x2=GetNum(x1);
}
first[x1]=x2;
in1=x2;//记录进入圈的步数
//深搜第二个数
step=1;
//解决第二个数过大问题
if(py<1000)
{
s[y1]=true;
sStep[y1]=step++;
}
else
{
y1=GetNum(y1);
step++;
s[y1]=true;
sStep[y1]=step++;
}
if(f[y1])
{
y2=y1;
if(fStep[y2]<=fStep[in1])
qk=1;
else
{
qk=2;
in2=y2;
}
}
else
{
y2=GetNum(y1);
while(!s[y2])
{
second[y1]=y2;
s[y2]=true;
sStep[y2]=step++;
//判断该数是否已经在画第一个圈时出现过
if(f[y2])
{
if(fStep[y2]<=fStep[in1])
qk=1;
else
{
qk=2;
in2=y2;
}
break;
}
y1=y2;
y2=GetNum(y1);
}
}
if(qk==0) printf("%d %d 0\n",px,py);
else if(qk==1) printf("%d %d %d\n",px,py,fStep[y2]+sStep[y2]);
else
{
int min,now;
//算出in2到in1的距离
now=in2;
step=0;
while(now!=in1)
{
now=first[now];
step++;
}
min=step;
if(fStep[in2]-fStep[in1]<min) min=fStep[in2]-fStep[in1];
step=min;
printf("%d %d %d\n",px,py,fStep[in1]+sStep[in2]+step);
}
}
return 0;
}