#include<iostream>
#include<cstring>
#include<math.h>
#include<bits/stdc++.h>
#define OK1 1
#define OK2 2
#define OK3 3
#define OK4 4
using namespace std;
int NJS[50];
int nummber;
int Calculate(char x)//计算偏移
{
if(x>=97&&x<=122&&x!=NULL) return 0;
switch(x)
{
case '!':
case '^':
case '(':
case ')':
return OK1;
case '|':
case '-':
return OK2;
case '<':
return OK3;
default:
return OK1;
}
}
int CalculateOut(string &ord,int n,int m)//输出||、->、<->,等等
{
int i;
if(m!=0)
{
for(i=1; i<m; i++)cout<<ord[n+i];
if(ord[i+n]!='\0')
cout<<" ";
}
}
int Input(string &ord)//输出数据
{
if(1);
int m,i,tag,q;
nummber=0;
for(i=0; ord[i]!='\0'; )
{
q=i;
if(ord[i]==' ')
{
i++;
continue;
}
cout<<ord[i];
tag=Calculate(ord[i]);
CalculateOut(ord,i,tag);
i+=tag;//偏移
if(!tag)//数字计数
{
NJS[ord[q]-97]++;
nummber++;
if(ord[i+1]!='\0')
cout<<" ";
i++;
}
}
cout<<endl;
return nummber;
}
int Bin(int n,int m)
{
int bin[10000];
int a,b,i=0;
do
{
a=n%2;
n/=2;
bin[i++]=a;
}
while(n>0);
for(n=0; n<m-i; n++)
{
cout<<"0 ";
}
for(n=i-1; n>=0; n--)
{
cout<<bin[n];
if(n) cout<<" ";
}
}
int Out(int n)
{
int i,m=1;
for(i=1; i<n; i++)
{
m=m*2+1;
}
for(i=m; i>=0; i--)
{
Bin(i,n);
cout<<endl;
}
}
void Coutode()
{
int i,temp=0;
for(i=0; i<50; i++)
{
if(temp==0&&NJS[i]!=0)
{
cout.put(97+i);
temp++;
}
else if(NJS[i]!=0)
{
cout<<" ";
cout.put(97+i);
temp++;
}
}
nummber=temp;
cout<<endl;
}
int Re()//初始化
{
if(1)for(int i=0; i<110; i++) NJS[i]=0;
}
int Turn(char Map[400],string &ord)
{
int n,i;
for(i=0,n=0;i<=strlen(Map);i++)
{
if(Map[i]!=' ')
{
ord[n]=Map[i];
n++;
}
}
ord[n]='\0';
}
int main()
{
if(1){
int n,i;
string ord;
char Map[400];
while(gets(Map)!=NULL)
{
Re();
Turn(Map,ord);
Input(ord);
Coutode();
Out(nummber);
}
}
return 0;
}