import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class next_sm_wrong6 {

	void solve() throws IOException {
		StringTokenizer st = new StringTokenizer(br.readLine(), "=+", true);
		int n = Integer.parseInt(st.nextToken());
		assert 1 <= n && n <= 100000;
		String eq = st.nextToken();
		assert eq.equals("=");
		ArrayList<Integer> part = new ArrayList<Integer>();
		part.add(Integer.parseInt(st.nextToken()));
		while (st.hasMoreTokens()) {
			String plus = st.nextToken();
			assert plus.equals("+");
			part.add(Integer.parseInt(st.nextToken()));
		}
		int sum = 0;
		for (int i : part) {
			sum += i;
		}
		assert sum == n;
		for (int i = 1; i < part.size(); i++) {
			assert part.get(i - 1) <= part.get(i);
		}
		int cur = 0;
		for (int i = part.size() - 1; i >= 0; i--) {
			if (cur > 1) {
				out.print(n + "=");
				for (int j = 0; j < i; j++) {
					out.print(part.get(j) + "+");
				}
				int k = part.get(i) + 1;
				cur--;
				System.err.println(k + " " + cur);
				if (cur < k) {
					k += cur;
					cur = 0;
				}
				out.print(k);
				if (cur > 0) {
					while (cur >= 2 * k) {
						out.print("+" + k);
						cur -= k;
					}
					out.println("+" + cur);
				} else {
					out.println();
				}
				return;
			}
			cur += part.get(i);
		}
		if (part.size() == 2) {
			out.println(n + "=" + n);
			return;
		}
		out.println("No solution");
	}

	BufferedReader br;
	PrintWriter out;

	public void run() {
		try {
			br = new BufferedReader(new FileReader("next.in"));
			out = new PrintWriter(new FileWriter("next.out"));
			solve();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
			System.exit(1);
		}
	}

	public static void main(String[] args) {
		new next_sm_wrong6().run();
	}
}
