#include #include #define MAXL 100 #define MAXS 15 char nums[MAXS+2][MAXL]; int inventory (const char* src, char* dst) { char ch; const char* p; for ( ch = '0'; ch <= '9'; ++ch ) if ( strchr (src, ch) ) { int cnt = 0; for ( p = src; *p != '\0'; ++p ) if ( *p == ch ) ++cnt; dst += sprintf (dst, "%d%c", cnt, ch); } return 0; } int main (void) { int i, j, ii, jj; for ( ; ; ) { scanf ("%s", nums[0]); if ( nums[0][0] == '-' ) break; ii = jj = -1; for ( i = 1; i <= MAXS && ii < 0; ++i ) { inventory (nums[i-1], nums[i]); for ( j = 0; j < i; ++j ) if ( strcmp (nums[i], nums[j]) == 0 ) { ii = i; jj = j; break; } } printf ("%s ", nums[0]); if ( jj == 0 && ii == 1 ) printf ("is self-inventorying\n"); else if ( jj+1 == ii ) printf ("becomes self-inventorying after %d steps\n", jj); else if ( ii >= 0 ) printf ("enters an inventory loop of length %d\n", ii-jj); else printf ("can not be classified after %d iterations\n", MAXS); } return 0; }