#include <bits/stdc++.h>
using namespace std;
int main() {
  int a[3];
  while (~scanf("%d %d %d", &a[0], &a[1], &a[2])) {
    int i;
    int s;
    int flag = 0;
    s = a[0];
    for (i = 0; i < 3; i++) {
      if (a[i] == 1) {
        flag++;
      }
    }
    if (flag == 1) {
      if (a[0] == 1) {
        printf("%d\n", (a[0] + a[1]) * a[2]);
      }
      if (a[2] == 1) {
        printf("%d\n", (a[1] + a[2]) * a[0]);
      }
      if (a[1] == 1) {
        printf("%d\n", (min(a[0], a[2]) + a[1]) * max(a[0], a[2]));
      }
    }
    if (flag == 2) {
      if (a[1] == 1 && a[0] == 1) {
        printf("%d\n", 2 * a[2]);
      }
      if (a[2] == 1 && a[1] == 1) {
        printf("%d\n", 2 * a[0]);
      }
      if (a[0] == 1 && a[2] == 1) {
        printf("%d\n", 2 + a[1]);
      }
    }
    if (flag == 3) {
      printf("3\n");
    }
    if (flag == 0) {
      printf("%d\n", a[0] * a[1] * a[2]);
    }
  }
  return 0;
}

### Prompt

Generate a Cpp solution to the following problem:

Petya studies in a school and he adores Maths. His class has been studying arithmetic expressions. On the last class the teacher wrote three positive integers a, b, c on the blackboard. The task was to insert signs of operations '+' and '*', and probably brackets between the numbers so that the value of the resulting expression is as large as possible. Let's consider an example: assume that the teacher wrote numbers 1, 2 and 3 on the blackboard. Here are some ways of placing signs and brackets:

  * 1+2*3=7 
  * 1*(2+3)=5 
  * 1*2*3=6 
  * (1+2)*3=9 



Note that you can insert operation signs only between a and b, and between b and c, that is, you cannot swap integers. For instance, in the given sample you cannot get expression (1+3)*2.

It's easy to see that the maximum value that you can obtain is 9.

Your task is: given a, b and c print the maximum value that you can get.

Input

The input contains three integers a, b and c, each on a single line (1 ≤ a, b, c ≤ 10).

Output

Print the maximum value of the expression that you can obtain.

Examples

Input

1
2
3


Output

9


Input

2
10
3


Output

60

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
  int a[3];
  while (~scanf("%d %d %d", &a[0], &a[1], &a[2])) {
    int i;
    int s;
    int flag = 0;
    s = a[0];
    for (i = 0; i < 3; i++) {
      if (a[i] == 1) {
        flag++;
      }
    }
    if (flag == 1) {
      if (a[0] == 1) {
        printf("%d\n", (a[0] + a[1]) * a[2]);
      }
      if (a[2] == 1) {
        printf("%d\n", (a[1] + a[2]) * a[0]);
      }
      if (a[1] == 1) {
        printf("%d\n", (min(a[0], a[2]) + a[1]) * max(a[0], a[2]));
      }
    }
    if (flag == 2) {
      if (a[1] == 1 && a[0] == 1) {
        printf("%d\n", 2 * a[2]);
      }
      if (a[2] == 1 && a[1] == 1) {
        printf("%d\n", 2 * a[0]);
      }
      if (a[0] == 1 && a[2] == 1) {
        printf("%d\n", 2 + a[1]);
      }
    }
    if (flag == 3) {
      printf("3\n");
    }
    if (flag == 0) {
      printf("%d\n", a[0] * a[1] * a[2]);
    }
  }
  return 0;
}

```