#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
bool cmp(int x,int y){
if(x!=y) return x>y;//若是x>=y,not all control paths return a value意思就是你得return a value whatsoever
}
int main(){
int N,max,min;
scanf("%d",&N);//输入不用加换行
if(N<=0 || N>=10000) return 0;
//考虑到6174也要执行一次循环,采用do-while格式
do{
int a[4]={0};
a[0]=N/1000;a[1]=N/100%10;a[2]=N/10%10;a[3]=N%10;
if(a[0]==a[1] && a[1]==a[2] && a[2]==a[3]){
printf("%04d - %04d = 0000\n",N,N);
break;//return 0;//换成break更快
}
sort(a,a+4,cmp);
max=a[0]*1000+a[1]*100+a[2]*10+a[3];
min=a[3]*1000+a[2]*100+a[1]*10+a[0];
N=max-min;
printf("%04d - %04d = %04d\n",max,min,N);
}while(N!=6174);
return 0;
}
//法2,更快
/*
#include <cstdio>
#include <iostream>
#include <vector>
#include <map>
#include <list>
#include <assert.h>
#include <string>
#include <algorithm>
#include <set>
#include <queue>
#include <fstream>
typedef long long ll;
using namespace std;
#define MAX_N 100001
int n,l;
#define INPUT cin>>n
void reverse(int t,int&a1,int& b1)
{
assert(t<10000);
int a[4];
for(int i=0;i<4;i++)
a[i]=t%10,t/=10;
a1=b1=0;
sort(a,a+4);
for(int i=3;i>=0;i--)
a1=a1*10+a[i];
for(int i=0;i<4;i++)
b1=b1*10+a[i];
}
int main(){
#ifdef _DEBUG
ifstream cin("input.txt");
while(INPUT)
#else
INPUT;
#endif
{
while(1)
{
int r,r1;
reverse(n,r,r1);
n=r1;
printf("%04d - %04d = %04d\n",r,n,r-n);
if(r-n==0||(r-n==6174)){
break;
}
n=r-n;
}
}
return 0;
}
*/