#include <iostream>
#include <stack>
#include <string>
using namespace std;
int precedence(char op) {
if (op == '+' || op == '-')
return 1;
if (op == '*' || op == '/')
return 2;
return 0;
}
string infixToPostfix(const string& infix) {
string postfix;
stack<char> operators;
for (char c : infix) {
if (isalnum(c)) {
postfix += c;
} else if (c == '(') {
operators.push(c);
} else if (c == ')') {
while (!operators.empty() && operators.top() != '(') {
postfix += operators.top();
operators.pop();
}
if (!operators.empty() && operators.top() == '(')
operators.pop();
} else {
while (!operators.empty() && precedence(operators.top()) >= precedence(c)) {
postfix += operators.top();
operators.pop();
}
operators.push(c);
}
}
while (!operators.empty()) {
postfix += operators.top();
operators.pop();
}
return postfix;
}
int main() {
string infix_expression;
cout << "Enter infix expression: ";
getline(cin, infix_expression);
string postfix_expression = infixToPostfix(infix_expression);
cout << "Postfix expression: " << postfix_expression << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RhY2s+CiNpbmNsdWRlIDxzdHJpbmc+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IHByZWNlZGVuY2UoY2hhciBvcCkgewogICAgaWYgKG9wID09ICcrJyB8fCBvcCA9PSAnLScpCiAgICAgICAgcmV0dXJuIDE7CiAgICBpZiAob3AgPT0gJyonIHx8IG9wID09ICcvJykKICAgICAgICByZXR1cm4gMjsKICAgIHJldHVybiAwOwp9CgpzdHJpbmcgaW5maXhUb1Bvc3RmaXgoY29uc3Qgc3RyaW5nJiBpbmZpeCkgewogICAgc3RyaW5nIHBvc3RmaXg7CiAgICBzdGFjazxjaGFyPiBvcGVyYXRvcnM7CgogICAgZm9yIChjaGFyIGMgOiBpbmZpeCkgewogICAgICAgIGlmIChpc2FsbnVtKGMpKSB7CiAgICAgICAgICAgIHBvc3RmaXggKz0gYzsKICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJygnKSB7CiAgICAgICAgICAgIG9wZXJhdG9ycy5wdXNoKGMpOwogICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnKScpIHsKICAgICAgICAgICAgd2hpbGUgKCFvcGVyYXRvcnMuZW1wdHkoKSAmJiBvcGVyYXRvcnMudG9wKCkgIT0gJygnKSB7CiAgICAgICAgICAgICAgICBwb3N0Zml4ICs9IG9wZXJhdG9ycy50b3AoKTsKICAgICAgICAgICAgICAgIG9wZXJhdG9ycy5wb3AoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIW9wZXJhdG9ycy5lbXB0eSgpICYmIG9wZXJhdG9ycy50b3AoKSA9PSAnKCcpCiAgICAgICAgICAgICAgICBvcGVyYXRvcnMucG9wKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd2hpbGUgKCFvcGVyYXRvcnMuZW1wdHkoKSAmJiBwcmVjZWRlbmNlKG9wZXJhdG9ycy50b3AoKSkgPj0gcHJlY2VkZW5jZShjKSkgewogICAgICAgICAgICAgICAgcG9zdGZpeCArPSBvcGVyYXRvcnMudG9wKCk7CiAgICAgICAgICAgICAgICBvcGVyYXRvcnMucG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb3BlcmF0b3JzLnB1c2goYyk7CiAgICAgICAgfQogICAgfQoKICAgIHdoaWxlICghb3BlcmF0b3JzLmVtcHR5KCkpIHsKICAgICAgICBwb3N0Zml4ICs9IG9wZXJhdG9ycy50b3AoKTsKICAgICAgICBvcGVyYXRvcnMucG9wKCk7CiAgICB9CgogICAgcmV0dXJuIHBvc3RmaXg7Cn0KCmludCBtYWluKCkgewogICAgc3RyaW5nIGluZml4X2V4cHJlc3Npb247CiAgICBjb3V0IDw8ICJFbnRlciBpbmZpeCBleHByZXNzaW9uOiAiOwogICAgZ2V0bGluZShjaW4sIGluZml4X2V4cHJlc3Npb24pOwoKICAgIHN0cmluZyBwb3N0Zml4X2V4cHJlc3Npb24gPSBpbmZpeFRvUG9zdGZpeChpbmZpeF9leHByZXNzaW9uKTsKICAgIGNvdXQgPDwgIlBvc3RmaXggZXhwcmVzc2lvbjogIiA8PCBwb3N0Zml4X2V4cHJlc3Npb24gPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=