#include <cstdio>
#include <cstring>
#define Nmax 1000005
using namespace std;
char a[Nmax];
int nr[100],aint[1000];
inline void Update(int nod, int st, int dr, int poz, int val)
{
if(st==dr)
{
if(val)
aint[nod]=st;
else
aint[nod]=-1;
return;
}
int mij=(st+dr)/2;
if(poz<=mij)
Update(2*nod,st,mij,poz,val);
else
Update(2*nod+1,mij+1,dr,poz,val);
if(aint[2*nod]!=-1)
aint[nod]=aint[2*nod];
else
aint[nod]=aint[2*nod+1];
}
int main()
{
int N,poz,i,poz1;
char c;
freopen ("ordine.in","r",stdin);
freopen ("ordine.out","w",stdout);
scanf("%s", (a+1));
N=strlen(a+1);
for(i=1;i<=N;++i)
++nr[a[i]-'a'];
for(c='a';c<='z';++c)
if(nr[c-'a'])
Update(1,0,25,c-'a',1);
for(poz=-1,i=1;i<=N;++i)
{
printf("%c %d\n", aint[1]+'a',poz);
poz1=aint[1];
--nr[poz1];
if(poz!=-1 && nr[poz])
Update(1,0,25,poz,1);
Update(1,0,25,poz1,0);
poz=poz1;
}
printf("\n");
return 0;
}