
#include <algorithm>
#include <iostream>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>

int
main()
{
	std::vector<bool> map{ true, true, true, true, false, true };
	std::set<int> open, visited;
	open.emplace(0);
	while (!open.empty()) {
		int current = *open.begin();
		open.erase(current);
		visited.insert(current);
		if (current == map.size() - 1) {
			std::cout << "We won" << std::endl;
			break;
		}
		if (current - 1 > 0 && !visited.count(current - 1) &&
		    map[current - 1]) {
			open.emplace(current - 1);
		}
		if (current + 3 < map.size() && !visited.count(current + 3) &&
		    map[current + 3]) {
			open.emplace(current + 3);
		}
	}
}

///////////////////////////////////////////////

int
main2()
{
	std::string input;

	std::stack<std::vector<int>> mystack;

	while (std::cin >> input) {
		if (input == "p") {
			if (mystack.empty()) {
				std::cout << '?' << std::endl;
				continue;
			}
			auto &tmp = mystack.top();

			for (size_t i = 0; i < tmp.size(); ++i) {
				std::cout << tmp[i] << "x^" << i << ' ';
			}
			std::cout << std::endl;

			mystack.pop();
		} else if (input == "d") {
			if (mystack.empty()) {
				std::cout << '?' << std::endl;
				continue;
			}
			auto &last = mystack.top();
			mystack.push(last);
		}

		else if (std::all_of(
		           input.begin(), input.end(), std::isdigit) &&
		         !input.empty()) {
			int i;
			std::stringstream s(input);
			s >> i;
			mystack.push({ i });
		} else if (input == "+") {
			if (mystack.size() < 2) {
				std::cout << '?' << std::endl;
				continue;
			}

			auto var1 = mystack.top();
			mystack.pop();

			auto &var2 = mystack.top();

			size_t larger = std::max(var1.size(), var2.size());

			var2.resize(larger);
			for (size_t i = 0; i < var1.size(); i++) {
				var2[i] += var1[i];
			}
		} else if (input == "*") {
			if (mystack.size() < 2) {
				std::cout << '?' << std::endl;
				continue;
			}
			auto var1 = mystack.top();
			mystack.pop();

			auto var2 = mystack.top();
			mystack.pop();

			std::vector<int> res;

			res.resize(var1.size() + var2.size() - 1);

			for (size_t i1 = 0; i1 < var1.size(); ++i1) {
				for (size_t i2 = 0; i2 < var2.size(); ++i2) {
					res[i1 + i2] += var1[i1] * var2[i2];
				}
			}

			mystack.push(res);
		} else if (input == "x") {
			std::vector<int> temp;

			temp.push_back(0);

			temp.push_back(1);

			mystack.push(temp);
		} else
			std::cout << "?" << std::endl;
	}

	return 0;
}
