#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define ERROR 0
char sz[8]=" +-*/";
int list[25][5],map[5][5],visit[5],t,pp[5];
char z[400];
double two(double a,int f,double b)
{
switch(f)
{
case 1:
{
return a+b;
break;
}
case 2:
{
return a-b;
break;
}
case 3:
{
return a*b;
break;
}
case 4:
{
return a/b;
break;
}
}
}
int pan(char *x,double a,double b,double c,int f1,int f2)
{
double xy=two(a,f1,two(b,f2,c));
if(24.0==xy)
{ sprintf(z,"%s%c(%.0lf%c%.0lf)",x,sz[f1],b,sz[f2],c);
return 1;
}
else
return 0;
}
int four(double *a,int *f) /*3个符号 四个操作数 */
{
char x[200],y[200];
double b[3],hou[2];
{ sprintf(x,"(%.0lf%c%.0lf)",a[0],sz[f[0]],a[1]); }
b[0]=two(a[0],f[0],a[1]);
if(b[0]<0)
{ b[0]=-b[0];
sprintf(x,"(%.0lf%c%.0lf)",a[1],sz[f[0]],a[0]);
}
{ sprintf(y,"(%s%c%.0lf)",x,sz[f[1]],a[2]); }
b[1]=two(b[0],f[1],a[2]);
if(b[1]<0)
{
b[1]=-b[1];
sprintf(y,"(%.0lf%c%s)",a[2],sz[f[1]],x);
}
{ sprintf(z,"(%s%c%.0lf)",y,sz[f[2]],a[3]); }
b[2]=two(b[1],f[2],a[3]);
if(b[2]<0)
{ b[2]=-b[2];
sprintf(z,"(%.0lf%c%s)",a[3],sz[f[2]],y);
}
if(b[2]==24.0)
{ return OK; }
else
{ if(pan(x,b[0],a[2],a[3],f[1],f[2]))
{ return OK; }
else
return ERROR;
}
}
void cal(int r,int j)
{ int i,k;
if(r<4)
{ for(i=0;i<4;i++)
{ if(!visit[i])
{ visit[i]=1;
pp[j]=map[r][i];
cal(r+1,j+1);
visit[i]=0; }
}
}
else
{ for(k=0;k<4;k++)
list[t][k]=pp[k];
t++; }
}
int main()
{ char m,n,p;
int a,b,c,d,ttt=0;
int i,j,k,l,kt,flag;
int ft[3];
double at[4];
printf("please enter the four cards:");
while(scanf("%d%d%d%d",&a,&b,&c,&d)!=EOF)
{
ttt++; t=0; flag=1;
for( i=0;i<4;i++)
{ map[i][0]=a;
map[i][1]=b;
map[i][2]=c;
map[i][3]=d; }
cal(0,0);
printf("Case %d:/n",ttt);
for(i=0;i<t&&flag;i++)
{for(kt=0;kt<4;kt++)
at[kt]=list[i][kt];
for(j=1;j<=4&&flag;j++)
for(k=1;k<=4&&flag;k++)
for(l=1;l<=4&&flag;l++)
{ ft[0]=j;ft[1]=k;ft[2]=l;
if(four(at,ft))
{ printf("%s/n",z);
flag=0;
break; }
}
}
if(flag)
{ printf("No Solution!/n"); }
}
return 0;
}