#include <iostream>
#include <cstdio>#include <cstring>
#include <algorithm>
#include <cctype>
#include <cstdlib>
#include <cmath>
#define M 1000
using namespace std;
int G[M][M];
int q[27];
int Count;
int Min;
int cq[27];
void deal(char *s)
{
int p[M];
memset(G,0,sizeof(G));
memset(p,0,sizeof(p));
char vec;int fv;
fv = 0;
int len = strlen(s);
for(int i = 0;i < len;i++)
{
char c = s[i];
if(isalpha(c))
{
p[c-'A'] = 1;
if(!fv){
vec = c;
fv = 1;
}
else
G[c-'A'][vec-'A'] = G[vec-'A'][c-'A'] = 1;
}
else if(c == ';')
fv = 0;
}
Count = 0;
for(int i = 0;i < M;i++)
if(p[i])
q[Count++] = i;
}
int main()
{
//freopen("in.in","r",stdin);
char str[M];
while(cin>>str)
{
if(str[0] == '#') break;
deal(str);
Min = 10000;
do{
int ma = 0;
for(int i = 0;i < Count;i++){
for(int j = 0;j < Count;j++){
if(G[q[i]][q[j]])
{
int temp = (j - i) > 0? (j-i):(i-j);
if(ma < temp)
ma = temp;
break;
}
}
if(ma > = Min)//已经找到Min时,当发现已有两个点的距离大于等于Min时再怎么扩展也不可能比当前解更优,剪掉
break;
}
if(ma < Min)
{
Min = ma;
memcpy(cq,q,sizeof(int)*Count);
}
for(int i = 0;i < Count;i++)
printf("%c ",cq[i]+'A');
cout<<"-> ";
cout<<Min<<endl;
}
return 0;
}