#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, term, sum; 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; signed char sumStart = 0, lPos = -1, rPos = -1; bool zeroSum = !input[0]; for (unsigned char i = 0; i < len; i++) { if (zeroSum) { if (oper[i-1] == '*') { if (sumStart-2 >= 0 && oper[sumStart-2] == '+') oper[sumStart-2] = 'p'; if (sumStart-1 >= 0 && oper[sumStart-1] == '*') { //oper[sumStart-1] = 'l'; lPos = sumStart; } if (oper[i] == '+') oper[i] = 'p'; //oper[i-1] = 'r'; if (rPos < 0) rPos = i-1; sumStart = -1; } if (input[i]) zeroSum = false; } if (oper[i-1] != '+') { sumStart = i; zeroSum = !input[i]; } } if (zeroSum) { if (sumStart-2 >= 0 && oper[sumStart-2] == '+') oper[sumStart-2] = 'p'; if (sumStart-1 >= 0 && oper[sumStart-1] == '*') { //oper[sumStart-1] = 'l'; lPos = sumStart; } } // for (unsigned char i = 0; i < len; i++) // printf("%u%c", input[i], oper[i]); // printf("%d %d %d\n", lPos, rPos, len); if (lPos < 0) lPos = 0; if (rPos < 0) rPos = len; min = 0; term = input[lPos]; for (unsigned char i = lPos+1; i < rPos; i++) { if (oper[i-1] == '*') term *= input[i]; else { min += term; term = input[i]; } } min += term; max = 0; term = 1; sum = input[0]; for (unsigned char i = 1; i < len; i++) { if (oper[i-1] == '+') sum += input[i]; else if (oper[i-1] == '*') { term *= sum; sum = input[i]; } else { max += term*sum; term = 1; sum = input[i]; } } max += term*sum; //eval(input, oper, 0, len-1, min, max); printf("%llu %llu\n", min, max); } while (true); return (EXIT_SUCCESS); }