#include #include unsigned long long curMin, curMax; void eval(const unsigned char *input, const char *oper, unsigned char start, unsigned char end, unsigned long long &min, unsigned long long &max) { if (start == end) min = max = input[start]; else if (end-start == 1) { if (oper[start] == '+') min = max = (unsigned) input[start]+input[end]; else min = max = (unsigned) input[start]*input[end]; } else { unsigned long long curMin1, curMax1, curMin2, curMax2; min = ~(unsigned long long) 0; max = 0; for (unsigned char i = 0; i < end-start; i++) { eval(input, oper, start, start+i, curMin1, curMax1); eval(input, oper, start+i+1, end, curMin2, curMax2); if (oper[start+i] == '+') { curMin = curMin1+curMin2; curMax = curMax1+curMax2; } else { curMin = curMin1*curMin2; curMax = curMax1*curMax2; } if (!i || curMin < min) min = curMin; if (!i || curMax > max) max = curMax; } } } int main(int argc, char** argv) { unsigned char input[100]; char oper[100]; unsigned char len; unsigned long long min, max; unsigned cur; do { for (len = 0; len < 100; len++) { if (!scanf("%u", &cur)) break; input[len] = cur; scanf("%c", &oper[len]); if (oper[len] == '\n') { len++; break; } } if (!len) break; eval(input, oper, 0, len-1, min, max); printf("%llu %llu\n", min, max); } while (true); return (EXIT_SUCCESS); }