#include<stdio.h>
#include<string.h>
#define max 100
void maopao();
void jian();
int sb();
char a[max];
int A[max], b[max], c[max], d[max];
int x, N=1;
void maopao1()
{
int i;
x = strlen(a);
for(i=0; i<x; i++)
{
A[x-i-1] = a[i]-48;
}
maopao();
}
int sb()
{
int i, j=0;
for(i=0; i<x; i++)
if(A[x-i-1]!=d[i])
{
j=1;
break;
}
return j;
}
void maopao()
{
int i, j, h;
for(i=x-1; i>=0; i--)
{
printf("%d", A[i]);
d[x-i-1] = A[i];
}
printf(" -> ");
for(i=0; i<x; i++)
{
for(j=0; j<x-i-1; j++)
{
if(A[j]>A[j+1])
{
h = A[j];
A[j] = A[j+1];
A[j+1] = h;
}
}
b[i] = A[x-i-1];
}
jian();
}
void jian()
{
int i, m;
for(i=0; i<x; i++)
{
m = A[i]-1+N-b[i]+10;
N = m/10;
A[i] = m%10;
}
if(sb())
maopao();
else
{
for(i=x-1; i>=0; i--)
printf("%d", A[i]);
}
}
int main()
{
while(scanf("%s", a)!=EOF&&a!=0)
maopao1();
}
#include<string.h>
#define max 100
void maopao();
void jian();
int sb();
char a[max];
int A[max], b[max], c[max], d[max];
int x, N=1;
void maopao1()
{
int i;
x = strlen(a);
for(i=0; i<x; i++)
{
A[x-i-1] = a[i]-48;
}
maopao();
}
int sb()
{
int i, j=0;
for(i=0; i<x; i++)
if(A[x-i-1]!=d[i])
{
j=1;
break;
}
return j;
}
void maopao()
{
int i, j, h;
for(i=x-1; i>=0; i--)
{
printf("%d", A[i]);
d[x-i-1] = A[i];
}
printf(" -> ");
for(i=0; i<x; i++)
{
for(j=0; j<x-i-1; j++)
{
if(A[j]>A[j+1])
{
h = A[j];
A[j] = A[j+1];
A[j+1] = h;
}
}
b[i] = A[x-i-1];
}
jian();
}
void jian()
{
int i, m;
for(i=0; i<x; i++)
{
m = A[i]-1+N-b[i]+10;
N = m/10;
A[i] = m%10;
}
if(sb())
maopao();
else
{
for(i=x-1; i>=0; i--)
printf("%d", A[i]);
}
}
int main()
{
while(scanf("%s", a)!=EOF&&a!=0)
maopao1();
}