#include <iostream>
#include <stack>

typedef std::stack<int> stack_type;

stack_type get_values(std::istream&);
int evaluate(stack_type&, std::istream&);

int main()
{
    std::cout << "Enter your postfix expression:\n> ";
    stack_type s = get_values(std::cin);    // leaves the operation tokens in the input stream.
    std::cout << evaluate(s, std::cin) << '\n';
}

int evaluate(stack_type& s, std::istream& op_stream)
{
    while (s.size() > 1)
    {
        int a = s.top();
        s.pop();

        int b = s.top();
        s.pop();

        char op;
        op_stream >> op;

        int result;
        switch (op)
        {
        case '+': result = a + b; break;
        }

        s.push(result);
    }

    return s.top();
}

stack_type get_values(std::istream& val_stream)
{
    stack_type stack;

    for (unsigned i=0; i<3; ++i)
    {
    	int value ;
    	val_stream >> value ;
    	stack.push(value) ;
    }

    return stack;
}
