#include #include #include #define N 90 #define Q 15 char buf[N*Q] ; char *add(int n,char *x) { if (n>9) { *x++='0'+(n/10) ; n%=10 ; } *x++='0'+n ; return x ; } void transf(char *a,char *b) { int i,c[10] ; for (i=0;i<10;i++) c[i]=0 ; for(;*a;a++) c[*a-'0']++ ; for (i=0;i<10;i++) if (c[i]>0) { b=add(c[i],b) ; b=add(i,b) ; } *b='\0' ; } int cmp(char *a,char *b) { int i ; for(i=0;i*b) return 1; if (*a<*b) return -1; if (*a=='\0' && *b=='\0') return 0 ; a++ ; b++ ; } return 0 ; } int binary(char *x,int l,int h) { int m,c ; m=(l+h)/2 ; c=cmp(buf+m*N,x) ; if (c==0) return m ; if (l==h) return -l ; if (c<0) return binary(x,m==l ? h : m,h) ; return binary(x,l,m) ; } int solve() { int l ; int f,i,j ; gets(buf) ; if (buf[0]=='-') return 0; l=0 ; printf("%s ",buf) ; for (i=0;i<15;i++) { transf(buf+N*i,buf+N*(i+1)) ; #if 0 printf("i=%d --> %s ",i,buf+N*(i+1)) ; #endif f=-1 ; for (j=0;j<=i;j++) if (cmp(buf+N*(i+1),buf+N*j)==0) { f=j ; break ; } #if 0 printf("f=%d\n",f) ; #endif if (f==i) { if (i==0) { printf("is self-inventorying\n") ; return 1 ; } else { printf("becomes self-inventorying after %d steps\n",i) ; return 1 ; } } if (f>-1) { printf("enters an inventory loop of length %d\n",i-f+1) ; return 1 ; } } printf("can not be classified after 15 iterations \n") ; return 1; } int main() { /* float x,y,r ; */ /* int n ;*/ while(solve()) {} return 0 ; }