import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class numbers extends java.applet.Applet implements ActionListener {
  int i, j, k;

  String s;
  int len;
  int ops[];
  int result[]=new int[2];
  String side[]=new String[2];
  String next;
  boolean ignoredivision;
  boolean running=false;

  TextField number=new TextField(30);
  Button go=new Button("Calculate");
  Button stop=new Button("Stop");
  TextArea results=new TextArea(10, 50);

  public void init() {
    setBackground(Color.white);
    add(number);
    add(go);
    add(stop);
    add(results);
    results.setEditable(false);
    go.addActionListener(this);
    stop.addActionListener(this);
    stop.setEnabled(false);
  }

  public void actionPerformed(ActionEvent e) {
    if (!running) {
      running=true;
      results.setText("Results:\n");
      go.setEnabled(false);
      stop.setEnabled(true);
      s=number.getText();
      len=s.length();
      results.append(calc());
      running=false;
    } else {
      running=false;
    }
  }

  public String calc() {
    if (len<3)
      return "Number is too short.";
    for (i=1; i<len+1; i++) {
      if (s.charAt(i-1)<'0' || s.charAt(i-1)>'9')
        return "Invalid digit at char. " + i;
    }
    ops=new int[len-2];
    for (i=1; i<len && running; i++)
        recurse(len-3);
    done();
    if (running)
      return "Calculation complete.";
    else
      return "Calculation aborted.";
  }

  public void recurse(int pos) {
    for (ops[pos]=0; ops[pos]<=5 && running; ops[pos]++) {
      if (pos != 0)
        recurse(pos-1);
      if (pos == 0) {
        ignoredivision = false;
        side[0] = s.substring(0,1);
        side[1] = s.substring(i,i+1);
        result[0] = Integer.parseInt(side[0]);
        result[1] = Integer.parseInt(side[1]);
        for (j=0; j<i-1 && running; j++)
          operation(0);
        for (j=i; j<len-1 && running; j++)
          operation(1);
        if (result[0]==result[1] && !ignoredivision)
          results.append(side[0]+" = "+side[1]+"\n");
      }
    }
  }

  public void operation(int d) {
    next = s.substring(j+1,j+2);
    if (ops[j-d]==0) {
      result[d] = Integer.parseInt(Integer.toString(result[d])+next);
      side[d] += next;
    }
    if (ops[j-d]==1) {
      result[d] += Integer.parseInt(next);
      side[d] += "+"+next;
    }
    if (ops[j-d]==2) {
      result[d] -= Integer.parseInt(next);
      side[d] += "-"+next;
    }
    if (ops[j-d]==3) {
      result[d] *= Integer.parseInt(next);
      side[d] += "*"+next;
    }
    if (ops[j-d]==4) {
      if ((float)Math.round((float)result[d]/Integer.parseInt(next))
                         == (float)result[d]/Integer.parseInt(next)) {
        result[d] /= Integer.parseInt(next);
        side[d] += "/"+next;
      } else {
        ignoredivision = true;
      }
    }
    if (ops[j-d]==5) {
      result[d] %= Integer.parseInt(next);
      side[d] += "%"+next;
    }
  }

  public void done() {
    go.setEnabled(true);
    stop.setEnabled(false);
  }
}