#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) x<<1
#define r(x) x<<1|1
#define ms(a,b) memset(a,b,sizeof(a))
using namespace std;
string demo[16];
void Read(string &temp, string &t)
{
int i, j;
int time[10] = { 0 };
for (i = 0; temp[i]; i++)
time[temp[i] - '0']++;
for (i = 0, j = 0; i < 10; i++){
if (time[i]){
if (time[i] < 10) {
t[j++] = time[i] + '0';
t[j++] = i + '0';
}
else {
t[j++] = time[i] / 10 + '0';
t[j++] = time[i] % 10 + '0';
t[j++] = i + '0';
}
}
}
t[j] = '\0';
return;
}
int main(int i, int j){
while (cin >> demo[0] && demo[0][0] != '-'){
bool flag1 = false;
int flag2 = 0;
int flag3 = 0;
for (i = 1; i <= 15; i++)
Read(demo[i - 1], demo[i]);
if (!strcmp(demo[0].c_str(), demo[1].c_str()))
flag1 = true;
if (!flag1){
for (j = 1; j < 15; j++)
if (!strcmp(demo[j].c_str(), demo[j + 1].c_str())) {
flag2 = j;
break;
}
if (!flag2){
for (j = 1; j <= 15; j++) {
for (i = 0; i <= j - 2; i++){
if (!strcmp(demo[j].c_str(), demo[i].c_str())){
flag3 = j - i;
break;
}
}
if (flag3)
break;
}
}
}
if (flag1)
cout << demo[0] << " is self-inventorying" << endl;
else if (flag2)
cout << demo[0] << " is self-inventorying after " << flag2 << " steps" << endl;
else if (flag3)
cout << demo[0] << " enters an inventory loop of length " << flag3 << endl;
else
cout << demo[0] << " can not be classified after 15 iterations" << endl;
}
return 0;
}