/*
因为最多有8个点,因此暴力搜索即可,最多时间复杂度8!
1.按照提议处理数据,首先是读取字符串,处理边关系e[i][j]和标记使用的节点v[i]
2.对于每一种排列,计算每个元素的位置pos[i],方便后面计算每个节点的带宽bd[i]
3.更新结果带宽和对应的排序。
*/#include <iostream>
#include<cstdio>
#include<string>
#include<map>
#include<vector>
#include<sstream>
#include<string.h>
#include<algorithm>
using namespace std;
char s[100];
int v[26],e[26][26],bd[26],pos[26];
void init(){
memset(e,0,sizeof(e));
memset(v,0,sizeof(v));
memset(pos,0,sizeof(pos));
int beg=0,end,len=strlen(s);
while(beg<len){
v[s[beg]-'A']=1;
for(end=beg+2;end<len&&s[end]!=';';++end){
v[s[end]-'A']=1;
e[s[beg]-'A'][s[end]-'A']=1;
}
beg=end+1;
}
}
int cal(){
int ans=0;
memset(bd,0,sizeof(bd));
for(int i=0;i<26;++i)if(v[i]){
for(int j=0;j<26;++j)if(e[i][j])bd[i]=max(bd[i],abs(pos[i]-pos[j]));
ans=max(ans,bd[i]);
}
return ans;
}
int main()
{
while(scanf("%s",s)&&s[0]!='#'){
init();
int ans=30;
vector<int>ch,order;
for(int i=0;i<26;++i)if(v[i])ch.push_back(i);
do{
for(int i=0;i<ch.size();++i)pos[ch[i]]=i;
int tmp=cal();
if(tmp<ans){order=ch;ans=tmp;}
}while(next_permutation(ch.begin(),ch.end()));
for(int i=0;i<order.size();++i)printf("%c ",order[i]+'A');
printf("-> %d\n",ans);
}
return 0;
}