#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef int Vector[8];

int main (int argc, char **argv, char **envp);
int parse (void);
void Evaluate (void);
void PrintExpr (void);

char istr[11], mask[11] = {};
int nextbit=0, found;

int main (int argc, char **argv, char **envp) {

  int ct=1;

 stdin = fopen ("bartjens.in","r");
 stdout = fopen ("bartjens.out","w");
 while (1) {
  fgets (istr,11,stdin);
  if (istr[strlen(istr)-1]!='\n') while (getchar()!='\n');
  if (istr[0]=='=') break;
  printf ("Problem %d\n",ct++);
  found = 0;
  Evaluate ();
  if (!found) printf ("  IMPOSSIBLE\n");
 }
 fclose (stdin);
 fclose (stdout);
 return EXIT_SUCCESS;
}

void Evaluate (void) {

  int i;

 if ((istr[nextbit]!='0' || istr[nextbit+1]=='=') && parse()==2000) {
  PrintExpr ();
  found = 1;
 }
 i=nextbit;
 while (istr[nextbit+1]!='=') {
  mask[nextbit++]='+';  Evaluate ();
  mask[nextbit-1] = '-'; Evaluate ();
  mask[nextbit-1] = '*'; Evaluate ();
  mask[nextbit-1]=0;
  if (istr[nextbit-1]=='0'&&nextbit>1&&mask[nextbit-2]!=0) break;
 }
 nextbit = i;
}

int parse (void) {

  int i, sto1=0, sto2=0, cur=0;
  char op1 = ' ', op2 = ' ';
  
 for (i=0; istr[i]!='=';i++) {
  cur = 10*cur+istr[i]-'0';
  switch (mask[i]) {
   case '-':
   case '+': switch (op1) {
              case ' ': sto1 = cur; break;
              case '+': switch (op2) {
                         case ' ': sto1 += cur; break;
                         case '*': sto2 *= cur; sto1 += sto2; break;
	                } break;
              case '-': switch (op2) {
                         case ' ': sto1 -= cur; break;
                         case '*': sto2 *= cur; sto1 -= sto2; break;
	                } break;
              case '*': sto1 *= cur; break;
	     }
             cur = 0; op1 = mask[i]; op2 = ' '; break;
   case '*': switch (op1) {
              case ' ': sto1 = cur; op1 = '*'; op2 = ' '; break;
              case '-':
              case '+': switch (op2) {
                         case ' ': sto2 = cur; op2 = '*'; break;
                         case '*': sto2 *= cur; break;
	                } break;
              case '*': sto1 *= cur; break;
	     }
             cur = 0; break;
  }
 }
 switch (op1) {
  case ' ': sto1 = cur; break;
  case '+': switch (op2) {
             case ' ': sto1 += cur; break;
             case '*': sto2 *= cur; sto1 += sto2; break;
	    } break;
  case '-': switch (op2) {
             case ' ': sto1 -= cur; break;
             case '*': sto2 *= cur; sto1 -= sto2; break;
	    } break;
  case '*': sto1 *= cur; break;
 }
 return sto1;
}

void PrintExpr (void) {

  int i;

 printf ("  ");
 for (i = 0; istr[i]!='='; i++) {
  printf ("%c",istr[i]);
  if (mask[i] != 0) printf ("%c",mask[i]);
 }
 printf ("=\n"); 
}
