#include <iostream>
#include <vector>

enum class Op
{
	ADD,
	SUB
};

int evaluate(std::vector<int> numbers, std::vector<Op> operations, std::string & formula)
{
	formula = std::to_string(numbers[0]);
	int total = numbers[0];
	for(int i = 0 ; i < operations.size() ; ++i)
	{
		if(operations[i] == Op::ADD) 
		{
			formula += "+" + std::to_string(numbers[i+1]);
			total += numbers[i+1];
		}
		else
		{
			formula += "-" + std::to_string(numbers[i+1]);
			total -= numbers[i+1];
		}
	}
	
	return total;
}

void generate(int level, std::vector<int> numbers, std::vector<Op> operations)
{
	if(level == 10)
	{
		std::string formula;
		if(evaluate(numbers, operations, formula) == 100)
		{
			std::cout << formula << " = 100" << std::endl;
		}
		
		return;
	}

	auto numbers_next = numbers;
	numbers_next.push_back(level);
	
	auto operations_add = operations;
	operations_add.push_back(Op::ADD);
	generate(level+1, numbers_next, operations_add);
	
	auto operations_sub = operations;
	operations_sub.push_back(Op::SUB);
	generate(level+1, numbers_next, operations_sub);

	auto numbers_num = numbers;	
	numbers_num.back() = numbers_num.back() * 10 + level;
	generate(level+1, numbers_num, operations);
}

int main()
{
	generate(2, {1}, {});
}
