class solution {
  public solution(){

valeur1=new int[16];
operation=new char[16];
valeur2=new int[16];
resultat=new int[16];}

public void setValeur1(int l, int val) {valeur1[l]=val;}
public void setOperation(int l, char ch) {operation[l]=ch;}
public void setValeur2(int l, int val) {valeur2[l]=val;}
public void setResultat(int l, int res) {resultat[l]=res;}
public int getValeur1(int l) {return valeur1[l];}
public char getOperation(int l) {return operation[l];}
public int getValeur2(int l) {return valeur2[l];}
public int getResultat(int l) {return resultat[l];}
public String affiche(int l) {String leCompteEstBon_solution=""+l;String difficult_string="";int difficult=0;int difficult_maxi=0;
	                      for(int i=6;i>l;i--){char opera=operation[i];
         if(operation[i]=='*')opera='\u00D7'; if(operation[i]=='/')opera='\u00F7';
        difficult=difficulte(valeur1[i],valeur2[i],opera);
        if(i>l+1)difficult_string+=difficult+" ";else difficult_string+=difficult;
        if(difficult>difficult_maxi)difficult_maxi=difficult;
        leCompteEstBon_solution+=""+valeur1[i]+opera+valeur2[i]+"="+resultat[i]+" ";}
        leCompteEstBon_solution+="D="+difficult_maxi+"("+difficult_string+")";
        return leCompteEstBon_solution;}

    public int difficulte(int a,int b,char c) {int d=0; if(a<b){d=b;b=a;a=d;}
                                           if(c=='+')d=diffAdd(a,b);
                                           else if(c=='\u00D7')d=diffMul(a,b);
                                           else if(c=='-'){if(a%10==0) d=diffAdd(a-b,b);else d=diffAdd(a-b,b)+1;} //soustraction facile si complément à 10
                                           else d=diffMul(b,a/b)+1; //division
                                           return d;}
//*****************************************************************chiffrage de la difficulté d'une addition******************************
public int diffAdd(int a,int b) {if(a<b){int d=b;b=a;a=d;}//a >= b    //on prend en premier le plus grand des deux...
                                 if(b<10){if((a+b)%10==0){if(a/10==0||a/10==9)return 1; //complément simple à la dizaine ou à la centaine     ex   6+4,  98+2
                                                          else return 2;}               //complément à la dizaine ou à la centaine et retenue ex  36+4, 198+2
                                          else return diffAdd1(a,b); }               //addition d'un chiffre seul            ex 30+5, 31+5, 37+5, 137+5, etc.
                                 else{if(a%10==0&&b%10==0)return diffAdd(a/10,b/10); //addition de dizaines seules           ex 30+20
                                      else if(a%100+b%100==100){if(a/100+b/100==0)return 2;//complément à la centaine sans retenue  ex  76+24
                                                                else return 3;}            //complément à la centaine avec retenue  ex 176+24
                                           else if(a%10+b%10<10)return diffAdd(a/10,b/10)+1;      //pas de retenue                  ex  35+21
                                                else if(a%10+b%10==10)return diffAdd(a/10,b/10)+2;//complément à la dizaine         ex  56+14, 156+64
                                                     else if((a/10+b/10)%10==9)return diffAdd(a/10,b/10)+4;//la retenue se propage  ex  35+67
                                                          else return diffAdd(a/10,b/10)+3;}} //une retenue qui ne se propagera pas ex  35+27, 135+27
public int diffAdd1(int a,int b) {if(a<10)if(a+b<10)return 1;                         //pas de retenue ex  3+2
                                             else return 2;                           //pas de retenue ex  8+3
                                  else if(a%10+b<10)return 1;                         //pas de retenue ex 30+4, 35+4
                                       else if((a/10)%10==9){if(a/10==9)return 4;     //une retenue qui se propage sans addition complémentaire ex  95+6
                                                                  else return 5;}     //une retenue qui se propage avec addition complémentaire ex 195+6
                                            else return 3;}                           //une retenue qui ne se propagera pas     ex 35+7
//*****************************************************************chiffrage de la difficulté d'une multiplication************************
public int diffMul(int a,int b) {if(a<b){int d=b;b=a;a=d;}//a >= b       //on prend en premier le plus grand des deux...
                                 if(b<10) if(a%10==0)return diffMul(a/10,b);                 //un zéro qui ne change pas la difficulté
                                          else if(a==25||a==15){if(b>4)return 3;else return 2;}              //cas particulier1 multiplication par 25 ou 15 ex 25*3
                                               else if(a==75){if(b>2)return 4;else return 2;}             //cas particulier2 multiplication par 75       ex 75*5
                                                    else if(a==125){if(b==4||b==2)return 2;else return 4;}//cas particulier3 multiplication par 125      ex 125*3
                                                          else return diffMul1(a,b);                      //cas général  ex 21*6
                                     else if(b<100){if(a%10==0&&b%10==0)return diffMul(a/10,b/10)+1;             //un zéro de part et d'autre qu'il faut additionner
                                                    else if(a%10==0||b%10==0){if(a%10==0)return diffMul(a/10,b); //un zéro qui ne change pas la difficulté
                                                                              else return diffMul(a,b/10);}      //un zéro qui ne change pas la difficulté
                                                         else if(a==25||b==25)return 4;      //cas particulier1 multiplication par 25   ex 25*13
                                                              else if(a==75||b==75)return 5; //cas particulier2 multiplication par 75   ex 75*13
                                                                   else return diffAdd(a*(b%10),a*(b/10)*10)+4;}//cas général  ex 23*36
                                          else {if(a%10==0&&b%10==0)return diffMul(a/10,b/10)+1;                 //un zéro de part et d'autre qu'il faut additionner
                                                    else if(a%10==0||b%10==0){if(a%10==0)return diffMul(a/10,b); //un zéro qui ne change pas la difficulté
                                                                              else return diffMul(a,b/10);}      //un zéro qui ne change pas la difficulté
                                                         else if((b/10)%10==0)return diffAdd(a*(b%10),a*(b/100))+6;//cas revenant au précédent ex 103*136
                                                              else return diffAdd(a*(b%10),(a*(b/10)%10)*10)+diffAdd(a*(b%100),a*(b/100)*100)+9;} //cas général  ex 153*136
                                  } //ici on ne prends pas vraiment en compte la simplification d'une multiplication par 11 (ou 21, 31, etc)
                                    //cela donne en général des indice trop grands - exemples : 76x8(D=6)  192x4(D=9)  14x51(D=11) alors qu'en faisant 14x50 et 14x1 on trouverai D=4+
                                    //idem pour les multiplications par 5 ou 50, etc.

public int diffMul1(int a,int b) {if(a<10){if(a*b<10)return 1;else return 2;}                                            //cas général à 1 chiffre (les tables)
                                  else if(a<100)return diffAdd(b*(a%10),b*(a/10)*10)+3;                                  //cas général à 2 chiffres  pour 21*6 on additionne 6 et 120
                                       else if((a/10)%10==0)return diffAdd(b*(a%10),b*(a/100)*100)+3;                    //cas revenant au précédent ex 103*6
                                            else return diffAdd(b*(a%10),b*(a/10)*10)+diffAdd(b*(a%100),b*(a/100)*100)+5;//cas général à 3 chiffres pour 421*6 on additionne 6,120 et 2400
                                  }
//****************************************************************************************************************************************
 private int valeur1[];
 private char operation[];
 private int valeur2[];
 private int resultat[];

 }