#include <bits/stdc++.h>
using namespace std;

const int INF = 1e9 + 7;

int take, mul;
vector<int> u;
vector<bool> stages, cur;

void check(int x, int to) {
	if (x == to) {
    	if (stages.size() > cur.size())
    		stages = cur;
		return;
	}
	u[x] = cur.size();
	if (x - take > 0 && u[x - take] > cur.size() + 1) {
		cur.push_back(0);
		check(x - take, to);
		cur.pop_back();
	}
	if (x * mul < u.size() && u[x * mul] > cur.size() + 1) {
		cur.push_back(1);
		check(x * mul, to);
		cur.pop_back();
	}
}

int32_t main() {
	cout << "Maximum number in calculations: ";
	int sz;
	cin >> sz;
	if (sz <= 0 || sz > 1000) return 0;
	++sz;
	cout << "Subtract param: ";
	cin >> take;
	if (take < 0) return 0;
	cout << "Multiply param: ";
	cin >> mul;
	if (mul <= 0) return 0;
	while (1) {
		u.clear();
		u.resize(sz, INF);
		int from, to;
		cout << "From: ";
		cin >> from;
		if (from < 0 || from > sz) return 0;
		cout << "To: ";
		cin >> to;
		if (to < 0 || to > sz) return 0;
		stages.clear();
		cur.clear();
		stages.resize(sz*10, 0);
		check(from, to);
		cout << "Answer: " << stages.size() << endl;
		for (auto to : stages)
			if (to)
				cout << from << " * " << mul << " = " << (from * mul) << endl, from *= mul;
			else cout << from << " - " << take << " = " << (from - take) << endl, from -= take;
	}
    return 0;
}
