final class opAlgo
{
  //    private static final int[] values = {3, 7, 8, 10, 50, 100};
  private static final int[] values = {1, 2, 3};
  private static final char[] ops = {'+', '-', '/', '*'};

  public static void main (String[] args)
  {
      try(java.io.BufferedReader br = new java.io.BufferedReader(
              new java.io.InputStreamReader(System.in))) {

          opAlgo solver = new opAlgo();

          while (true) {
              System.out.print("Enter a target value: ");
              int target = Integer.parseInt(br.readLine());
              System.out.println(solver.solve(target));
              break;
          }
      }
      catch (java.io.IOException | java.lang.IllegalArgumentException e) {

      }

  }

  private String solve(final int target) {
      java.lang.StringBuilder ans = new java.lang.StringBuilder();
      java.util.LinkedHashSet<Integer> set = new java.util.LinkedHashSet<Integer>();
      java.util.List<Character> operands= new java.util.Vector<Character>();

      for (int n : opAlgo.values) {
          set.add(n);
          if (n == target) {
              ans.append('\n' + Integer.toString(n));
          }
          looper(n, target, ans, set, operands);
          set.remove(n);
      }
      ans.append("\n-------------------------\n");
      return ans.toString();
  }

  private void looper(int total, int target, java.lang.StringBuilder ans, 
          java.util.LinkedHashSet<Integer> set, java.util.List<Character> operands) {

      for (int n : opAlgo.values) {
          if (set.add(n)) {
              for (char op : opAlgo.ops) {
                  operands.add(op);
                  int cul = chrToValue(total, op, n);
                  if (cul == target) {
                      String exp = opAlgoFormat(set, operands);
                      ans.append('\n' + exp);
                  }
                  looper(cul, target, ans, set, operands);
                  operands.remove(operands.size() - 1);
              }
              set.remove(n);
          }
      }
  }

  private String opAlgoFormat(java.util.LinkedHashSet<Integer> set, 
          java.util.List<Character> values) {

      java.util.Iterator<Integer> iter = set.iterator();
      String toString = new String(Integer.toString(iter.next()));
      int t = 0;
      char prev = ' ';
      while (iter.hasNext()) {
          int v = iter.next();
          if ((values.get(t) == '/' || values.get(t) == '*') && (prev == '+' || prev == '-')) {
              toString = "(" + toString + ")";
          }

          toString += " " + Character.toString(values.get(t)) + " " + Integer.toString(v);
          prev = values.get(t++);
      }
      return toString;
  }

  private int chrToValue(int n1, char op, int n2) {
      switch(op) {
      case '+':
          return n1 + n2;
      case '-':
          return n1 - n2;
      case '/':
          if (n1 % n2 == 0)
              return n1 / n2;
          return Integer.MAX_VALUE;
      case '*':
          return n1 * n2;
      }
      throw new java.lang.IllegalArgumentException();
  }
}