import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.Map;
public
class
PossibleExpressionValues {
private
static
boolean
isOperator(
char
op) {
return
(op ==
'+'
|| op ==
'-'
|| op ==
'*'
);
}
private
static
ArrayList<Integer> possibleResultUtil(String input, Map<String, ArrayList<Integer>> memo) {
if
(memo.containsKey(input)) {
return
memo.get(input);
}
ArrayList<Integer> res =
new
ArrayList<>();
for
(
int
i =
0
; i < input.length(); i++) {
if
(isOperator(input.charAt(i))) {
ArrayList<Integer> resPre = possibleResultUtil(input.substring(
0
, i), memo);
ArrayList<Integer> resSuf = possibleResultUtil(input.substring(i +
1
), memo);
for
(
int
j =
0
; j < resPre.size(); j++) {
for
(
int
k =
0
; k < resSuf.size(); k++) {
if
(input.charAt(i) ==
'+'
)
res.add(resPre.get(j) + resSuf.get(k));
else
if
(input.charAt(i) ==
'-'
)
res.add(resPre.get(j) - resSuf.get(k));
else
if
(input.charAt(i) ==
'*'
)
res.add(resPre.get(j) * resSuf.get(k));
}
}
}
}
if
(res.isEmpty())
res.add(Integer.parseInt(input));
memo.put(input, res);
return
res;
}
private
static
ArrayList<Integer> possibleResult(String input) {
Map<String, ArrayList<Integer>> memo =
new
HashMap<>();
return
possibleResultUtil(input, memo);
}
public
static
void
main(String[] args) {
String input =
"5*4-3*2"
;
ArrayList<Integer> res = possibleResult(input);
for
(
int
i =
0
; i < res.size(); i++) {
System.out.print(res.get(i) +
" "
);
}
}
}