
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.NoSuchElementException;

public class Main {

	public static void main(String[] args) throws IOException {
		new Main().solve();
	}

	private void solve() throws IOException {
		try {
			//			solveA();
			//			solveB();
			solveC();
			//			 solveD();
			//			 solveE();
			//			 solveF();
		} finally {
			if (in != null) {
				in.close();
			}
			if (out != null) {
				out.flush();
				out.close();
			}
		}

	}

	private void solveA() {
		int numN = nextInt();

		out.println(chkA(numN) ? "Yes" : "No");
	}

	private boolean chkA(int num) {

		boolean isGoodnum = false;
		int cnt = 0;
		int previous = 0;
		for (int i = 0; num != 0; i++) {
			if (i == 0) {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} else {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			}
			if (cnt == 3) {
				isGoodnum = true;
			}
		}
		return isGoodnum;
	}

	private void solveB() {
		int numN = nextInt();

		if (numN == 1) {
			out.println(1);
			return;
		}

		long val1 = 2;
		long val2 = 1;
		long res = 0;
		for (int i = 0; i < numN - 1; i++) {
			res = val1 + val2;
			long temp = val1;
			val1 = val2;
			val2 = val2 + temp;
		}

		out.println(res);
	}

	private int[] convC(int num) {
		int[] wk = new int[4];
		for (int i = wk.length - 1; i >= 0; i--) {
			wk[i] = num % 10;
			num /= 10;
		}
		return wk;
	}

	private void solveC() {

		int num = nextInt();

		int[] args = convC(num);

		int[] wk = new int[4];

		int res = chkC(args, 0, wk, 0, 0);

		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < wk.length; i++) {
			if (i == 0) {
				builder.append(args[i]);
			} else {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			}
		}

		builder.append("=7");
		out.println(builder.toString());
	}

	private int chkC(int[] args, int total, int[] wk, int currentI, int operand) {

		if (currentI >= 4) {
			return total;
		}
		if (currentI == 0) {
			total += args[0];
		} else {
			switch (operand) {
			case 1:
				total += args[currentI];
				wk[currentI] = operand;
				break;
			case 2:
				total -= args[currentI];
				wk[currentI] = operand;
				break;
			}
		}

		int val1 = chkC(args, total, wk, currentI + 1, 1);
		if (val1 == 7) {
			return 7;
		}
		int val2 = chkC(args, total, wk, currentI + 1, 2);
		if (val2 == 7) {
			return 7;
		}

		return -1;

	}

	private void solveD() {
		int numN = nextInt();

		out.println("");
	}

	private void solveE() {
		int numN = nextInt();

		out.println("");
	}

	private void solveF() {
		int numN = nextInt();

		out.println("");
	}

	private final PrintWriter out = new PrintWriter(System.out);
	private final InputStream in = System.in;
	private final byte[] buffer = new byte[1024];
	private int ptr = 0;
	private int buflen = 0;

	private boolean hasNextByte() {
		if (ptr < buflen) {
			return true;
		} else {
			ptr = 0;
			try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (buflen <= 0) {
				return false;
			}
		}
		return true;
	}

	private int readByte() {
		if (hasNextByte())
			return buffer[ptr++];
		else
			return -1;
	}

	private static boolean isPrintableChar(int c) {
		return 33 <= c && c <= 126;
	}

	private void skipUnprintable() {
		while (hasNextByte() && !isPrintableChar(buffer[ptr]))
			ptr++;
	}

	public boolean hasNext() {
		skipUnprintable();
		return hasNextByte();
	}

	public int nextInt() {
		return Integer.parseInt(next());
	}

	public String next() {
		if (!hasNext())
			throw new NoSuchElementException();
		StringBuilder sb = new StringBuilder();
		int b = readByte();
		while (isPrintableChar(b)) {
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}

	public long nextLong() {
		if (!hasNext())
			throw new NoSuchElementException();
		long n = 0;
		boolean minus = false;
		int b = readByte();
		if (b == '-') {
			minus = true;
			b = readByte();
		}
		if (b < '0' || '9' < b) {
			throw new NumberFormatException();
		}
		while (true) {
			if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			} else if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			}
			b = readByte();
		}
	}
} import java.io.IOException; IOException java.io import java.io.InputStream; InputStream java.io import java.io.PrintWriter; PrintWriter java.io import java.util.NoSuchElementException; NoSuchElementException java.util public class Main {

	public static void main(String[] args) throws IOException {
		new Main().solve();
	}

	private void solve() throws IOException {
		try {
			//			solveA();
			//			solveB();
			solveC();
			//			 solveD();
			//			 solveE();
			//			 solveF();
		} finally {
			if (in != null) {
				in.close();
			}
			if (out != null) {
				out.flush();
				out.close();
			}
		}

	}

	private void solveA() {
		int numN = nextInt();

		out.println(chkA(numN) ? "Yes" : "No");
	}

	private boolean chkA(int num) {

		boolean isGoodnum = false;
		int cnt = 0;
		int previous = 0;
		for (int i = 0; num != 0; i++) {
			if (i == 0) {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} else {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			}
			if (cnt == 3) {
				isGoodnum = true;
			}
		}
		return isGoodnum;
	}

	private void solveB() {
		int numN = nextInt();

		if (numN == 1) {
			out.println(1);
			return;
		}

		long val1 = 2;
		long val2 = 1;
		long res = 0;
		for (int i = 0; i < numN - 1; i++) {
			res = val1 + val2;
			long temp = val1;
			val1 = val2;
			val2 = val2 + temp;
		}

		out.println(res);
	}

	private int[] convC(int num) {
		int[] wk = new int[4];
		for (int i = wk.length - 1; i >= 0; i--) {
			wk[i] = num % 10;
			num /= 10;
		}
		return wk;
	}

	private void solveC() {

		int num = nextInt();

		int[] args = convC(num);

		int[] wk = new int[4];

		int res = chkC(args, 0, wk, 0, 0);

		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < wk.length; i++) {
			if (i == 0) {
				builder.append(args[i]);
			} else {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			}
		}

		builder.append("=7");
		out.println(builder.toString());
	}

	private int chkC(int[] args, int total, int[] wk, int currentI, int operand) {

		if (currentI >= 4) {
			return total;
		}
		if (currentI == 0) {
			total += args[0];
		} else {
			switch (operand) {
			case 1:
				total += args[currentI];
				wk[currentI] = operand;
				break;
			case 2:
				total -= args[currentI];
				wk[currentI] = operand;
				break;
			}
		}

		int val1 = chkC(args, total, wk, currentI + 1, 1);
		if (val1 == 7) {
			return 7;
		}
		int val2 = chkC(args, total, wk, currentI + 1, 2);
		if (val2 == 7) {
			return 7;
		}

		return -1;

	}

	private void solveD() {
		int numN = nextInt();

		out.println("");
	}

	private void solveE() {
		int numN = nextInt();

		out.println("");
	}

	private void solveF() {
		int numN = nextInt();

		out.println("");
	}

	private final PrintWriter out = new PrintWriter(System.out);
	private final InputStream in = System.in;
	private final byte[] buffer = new byte[1024];
	private int ptr = 0;
	private int buflen = 0;

	private boolean hasNextByte() {
		if (ptr < buflen) {
			return true;
		} else {
			ptr = 0;
			try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (buflen <= 0) {
				return false;
			}
		}
		return true;
	}

	private int readByte() {
		if (hasNextByte())
			return buffer[ptr++];
		else
			return -1;
	}

	private static boolean isPrintableChar(int c) {
		return 33 <= c && c <= 126;
	}

	private void skipUnprintable() {
		while (hasNextByte() && !isPrintableChar(buffer[ptr]))
			ptr++;
	}

	public boolean hasNext() {
		skipUnprintable();
		return hasNextByte();
	}

	public int nextInt() {
		return Integer.parseInt(next());
	}

	public String next() {
		if (!hasNext())
			throw new NoSuchElementException();
		StringBuilder sb = new StringBuilder();
		int b = readByte();
		while (isPrintableChar(b)) {
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}

	public long nextLong() {
		if (!hasNext())
			throw new NoSuchElementException();
		long n = 0;
		boolean minus = false;
		int b = readByte();
		if (b == '-') {
			minus = true;
			b = readByte();
		}
		if (b < '0' || '9' < b) {
			throw new NumberFormatException();
		}
		while (true) {
			if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			} else if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			}
			b = readByte();
		}
	}
} Main private final PrintWriter out = new PrintWriter(System.out); out new PrintWriter(System.out) private final InputStream in = System.in; in System.in System System.in private final byte[] buffer = new byte[1024]; buffer new byte[1024] 1024 private int ptr = 0; ptr 0 private int buflen = 0; buflen 0 public static void main(String[] args) throws IOException {
		new Main().solve();
	} main {
		new Main().solve();
	} new Main().solve() new Main().solve new Main() String[] args args private void solve() throws IOException {
		try {
			//			solveA();
			//			solveB();
			solveC();
			//			 solveD();
			//			 solveE();
			//			 solveF();
		} finally {
			if (in != null) {
				in.close();
			}
			if (out != null) {
				out.flush();
				out.close();
			}
		}

	} solve {
		try {
			//			solveA();
			//			solveB();
			solveC();
			//			 solveD();
			//			 solveE();
			//			 solveF();
		} finally {
			if (in != null) {
				in.close();
			}
			if (out != null) {
				out.flush();
				out.close();
			}
		}

	} try {
			//			solveA();
			//			solveB();
			solveC();
			//			 solveD();
			//			 solveE();
			//			 solveF();
		} finally {
			if (in != null) {
				in.close();
			}
			if (out != null) {
				out.flush();
				out.close();
			}
		} {
			if (in != null) {
				in.close();
			}
			if (out != null) {
				out.flush();
				out.close();
			}
		} if (in != null) {
				in.close();
			} in != null in null {
				in.close();
			} in.close() in.close in if (out != null) {
				out.flush();
				out.close();
			} out != null out null {
				out.flush();
				out.close();
			} out.flush() out.flush out out.close() out.close out {
			//			solveA();
			//			solveB();
			solveC();
			//			 solveD();
			//			 solveE();
			//			 solveF();
		} solveC() solveC private void solveA() {
		int numN = nextInt();

		out.println(chkA(numN) ? "Yes" : "No");
	} solveA {
		int numN = nextInt();

		out.println(chkA(numN) ? "Yes" : "No");
	} int numN = nextInt(); numN nextInt() nextInt out.println(chkA(numN) ? "Yes" : "No") out.println out chkA(numN) ? "Yes" : "No" chkA(numN) chkA numN "Yes" "No" private boolean chkA(int num) {

		boolean isGoodnum = false;
		int cnt = 0;
		int previous = 0;
		for (int i = 0; num != 0; i++) {
			if (i == 0) {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} else {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			}
			if (cnt == 3) {
				isGoodnum = true;
			}
		}
		return isGoodnum;
	} chkA {

		boolean isGoodnum = false;
		int cnt = 0;
		int previous = 0;
		for (int i = 0; num != 0; i++) {
			if (i == 0) {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} else {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			}
			if (cnt == 3) {
				isGoodnum = true;
			}
		}
		return isGoodnum;
	} boolean isGoodnum = false; isGoodnum false int cnt = 0; cnt 0 int previous = 0; previous 0 for (int i = 0; num != 0; i++) {
			if (i == 0) {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} else {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			}
			if (cnt == 3) {
				isGoodnum = true;
			}
		} int i = 0; int i = 0; i 0 num != 0 num 0 i++ i++ i {
			if (i == 0) {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} else {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			}
			if (cnt == 3) {
				isGoodnum = true;
			}
		} {
			if (i == 0) {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} else {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			}
			if (cnt == 3) {
				isGoodnum = true;
			}
		} if (i == 0) {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} else {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			} i == 0 i 0 {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} previous = num % 10 previous num % 10 num 10 num /= 10 num 10 cnt = 1 cnt 1 {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			} int current = num % 10; current num % 10 num 10 if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				} previous == current previous current {
					cnt++;
				} cnt++ cnt {
					//countやり直し
					cnt = 1;
				} cnt = 1 cnt 1 previous = current previous current num /= 10 num 10 if (cnt == 3) {
				isGoodnum = true;
			} cnt == 3 cnt 3 {
				isGoodnum = true;
			} isGoodnum = true isGoodnum true return isGoodnum; isGoodnum int num num private void solveB() {
		int numN = nextInt();

		if (numN == 1) {
			out.println(1);
			return;
		}

		long val1 = 2;
		long val2 = 1;
		long res = 0;
		for (int i = 0; i < numN - 1; i++) {
			res = val1 + val2;
			long temp = val1;
			val1 = val2;
			val2 = val2 + temp;
		}

		out.println(res);
	} solveB {
		int numN = nextInt();

		if (numN == 1) {
			out.println(1);
			return;
		}

		long val1 = 2;
		long val2 = 1;
		long res = 0;
		for (int i = 0; i < numN - 1; i++) {
			res = val1 + val2;
			long temp = val1;
			val1 = val2;
			val2 = val2 + temp;
		}

		out.println(res);
	} int numN = nextInt(); numN nextInt() nextInt if (numN == 1) {
			out.println(1);
			return;
		} numN == 1 numN 1 {
			out.println(1);
			return;
		} out.println(1) out.println out 1 return; long val1 = 2; val1 2 long val2 = 1; val2 1 long res = 0; res 0 for (int i = 0; i < numN - 1; i++) {
			res = val1 + val2;
			long temp = val1;
			val1 = val2;
			val2 = val2 + temp;
		} int i = 0; int i = 0; i 0 i < numN - 1 i numN - 1 numN 1 i++ i++ i {
			res = val1 + val2;
			long temp = val1;
			val1 = val2;
			val2 = val2 + temp;
		} {
			res = val1 + val2;
			long temp = val1;
			val1 = val2;
			val2 = val2 + temp;
		} res = val1 + val2 res val1 + val2 val1 val2 long temp = val1; temp val1 val1 = val2 val1 val2 val2 = val2 + temp val2 val2 + temp val2 temp out.println(res) out.println out res private int[] convC(int num) {
		int[] wk = new int[4];
		for (int i = wk.length - 1; i >= 0; i--) {
			wk[i] = num % 10;
			num /= 10;
		}
		return wk;
	} convC {
		int[] wk = new int[4];
		for (int i = wk.length - 1; i >= 0; i--) {
			wk[i] = num % 10;
			num /= 10;
		}
		return wk;
	} int[] wk = new int[4]; wk new int[4] 4 for (int i = wk.length - 1; i >= 0; i--) {
			wk[i] = num % 10;
			num /= 10;
		} int i = wk.length - 1; int i = wk.length - 1; i wk.length - 1 wk.length wk wk.length 1 i >= 0 i 0 i-- i-- i {
			wk[i] = num % 10;
			num /= 10;
		} {
			wk[i] = num % 10;
			num /= 10;
		} wk[i] = num % 10 wk[i] wk i num % 10 num 10 num /= 10 num 10 return wk; wk int num num private void solveC() {

		int num = nextInt();

		int[] args = convC(num);

		int[] wk = new int[4];

		int res = chkC(args, 0, wk, 0, 0);

		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < wk.length; i++) {
			if (i == 0) {
				builder.append(args[i]);
			} else {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			}
		}

		builder.append("=7");
		out.println(builder.toString());
	} solveC {

		int num = nextInt();

		int[] args = convC(num);

		int[] wk = new int[4];

		int res = chkC(args, 0, wk, 0, 0);

		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < wk.length; i++) {
			if (i == 0) {
				builder.append(args[i]);
			} else {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			}
		}

		builder.append("=7");
		out.println(builder.toString());
	} int num = nextInt(); num nextInt() nextInt int[] args = convC(num); args convC(num) convC num int[] wk = new int[4]; wk new int[4] 4 int res = chkC(args, 0, wk, 0, 0); res chkC(args, 0, wk, 0, 0) chkC args 0 wk 0 0 StringBuilder builder = new StringBuilder(); builder new StringBuilder() for (int i = 0; i < wk.length; i++) {
			if (i == 0) {
				builder.append(args[i]);
			} else {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			}
		} int i = 0; int i = 0; i 0 i < wk.length i wk.length wk wk.length i++ i++ i {
			if (i == 0) {
				builder.append(args[i]);
			} else {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			}
		} {
			if (i == 0) {
				builder.append(args[i]);
			} else {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			}
		} if (i == 0) {
				builder.append(args[i]);
			} else {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			} i == 0 i 0 {
				builder.append(args[i]);
			} builder.append(args[i]) builder.append builder args[i] args i {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			} switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				} wk[i] wk i case 1: 1 case 1: builder.append("+") builder.append builder "+" break; case 2: 2 case 2: builder.append("-") builder.append builder "-" break; builder.append(args[i]) builder.append builder args[i] args i builder.append("=7") builder.append builder "=7" out.println(builder.toString()) out.println out builder.toString() builder.toString builder private int chkC(int[] args, int total, int[] wk, int currentI, int operand) {

		if (currentI >= 4) {
			return total;
		}
		if (currentI == 0) {
			total += args[0];
		} else {
			switch (operand) {
			case 1:
				total += args[currentI];
				wk[currentI] = operand;
				break;
			case 2:
				total -= args[currentI];
				wk[currentI] = operand;
				break;
			}
		}

		int val1 = chkC(args, total, wk, currentI + 1, 1);
		if (val1 == 7) {
			return 7;
		}
		int val2 = chkC(args, total, wk, currentI + 1, 2);
		if (val2 == 7) {
			return 7;
		}

		return -1;

	} chkC {

		if (currentI >= 4) {
			return total;
		}
		if (currentI == 0) {
			total += args[0];
		} else {
			switch (operand) {
			case 1:
				total += args[currentI];
				wk[currentI] = operand;
				break;
			case 2:
				total -= args[currentI];
				wk[currentI] = operand;
				break;
			}
		}

		int val1 = chkC(args, total, wk, currentI + 1, 1);
		if (val1 == 7) {
			return 7;
		}
		int val2 = chkC(args, total, wk, currentI + 1, 2);
		if (val2 == 7) {
			return 7;
		}

		return -1;

	} if (currentI >= 4) {
			return total;
		} currentI >= 4 currentI 4 {
			return total;
		} return total; total if (currentI == 0) {
			total += args[0];
		} else {
			switch (operand) {
			case 1:
				total += args[currentI];
				wk[currentI] = operand;
				break;
			case 2:
				total -= args[currentI];
				wk[currentI] = operand;
				break;
			}
		} currentI == 0 currentI 0 {
			total += args[0];
		} total += args[0] total args[0] args 0 {
			switch (operand) {
			case 1:
				total += args[currentI];
				wk[currentI] = operand;
				break;
			case 2:
				total -= args[currentI];
				wk[currentI] = operand;
				break;
			}
		} switch (operand) {
			case 1:
				total += args[currentI];
				wk[currentI] = operand;
				break;
			case 2:
				total -= args[currentI];
				wk[currentI] = operand;
				break;
			} operand case 1: 1 case 1: total += args[currentI] total args[currentI] args currentI wk[currentI] = operand wk[currentI] wk currentI operand break; case 2: 2 case 2: total -= args[currentI] total args[currentI] args currentI wk[currentI] = operand wk[currentI] wk currentI operand break; int val1 = chkC(args, total, wk, currentI + 1, 1); val1 chkC(args, total, wk, currentI + 1, 1) chkC args total wk currentI + 1 currentI 1 1 if (val1 == 7) {
			return 7;
		} val1 == 7 val1 7 {
			return 7;
		} return 7; 7 int val2 = chkC(args, total, wk, currentI + 1, 2); val2 chkC(args, total, wk, currentI + 1, 2) chkC args total wk currentI + 1 currentI 1 2 if (val2 == 7) {
			return 7;
		} val2 == 7 val2 7 {
			return 7;
		} return 7; 7 return -1; -1 1 int[] args args int total total int[] wk wk int currentI currentI int operand operand private void solveD() {
		int numN = nextInt();

		out.println("");
	} solveD {
		int numN = nextInt();

		out.println("");
	} int numN = nextInt(); numN nextInt() nextInt out.println("") out.println out "" private void solveE() {
		int numN = nextInt();

		out.println("");
	} solveE {
		int numN = nextInt();

		out.println("");
	} int numN = nextInt(); numN nextInt() nextInt out.println("") out.println out "" private void solveF() {
		int numN = nextInt();

		out.println("");
	} solveF {
		int numN = nextInt();

		out.println("");
	} int numN = nextInt(); numN nextInt() nextInt out.println("") out.println out "" private boolean hasNextByte() {
		if (ptr < buflen) {
			return true;
		} else {
			ptr = 0;
			try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (buflen <= 0) {
				return false;
			}
		}
		return true;
	} hasNextByte {
		if (ptr < buflen) {
			return true;
		} else {
			ptr = 0;
			try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (buflen <= 0) {
				return false;
			}
		}
		return true;
	} if (ptr < buflen) {
			return true;
		} else {
			ptr = 0;
			try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (buflen <= 0) {
				return false;
			}
		} ptr < buflen ptr buflen {
			return true;
		} return true; true {
			ptr = 0;
			try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (buflen <= 0) {
				return false;
			}
		} ptr = 0 ptr 0 try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			} IOException e {
				e.printStackTrace();
			} e.printStackTrace() e.printStackTrace e {
				buflen = in.read(buffer);
			} buflen = in.read(buffer) buflen in.read(buffer) in.read in buffer if (buflen <= 0) {
				return false;
			} buflen <= 0 buflen 0 {
				return false;
			} return false; false return true; true private int readByte() {
		if (hasNextByte())
			return buffer[ptr++];
		else
			return -1;
	} readByte {
		if (hasNextByte())
			return buffer[ptr++];
		else
			return -1;
	} if (hasNextByte())
			return buffer[ptr++];
		else
			return -1; hasNextByte() hasNextByte return buffer[ptr++]; buffer[ptr++] buffer ptr++ ptr return -1; -1 1 private static boolean isPrintableChar(int c) {
		return 33 <= c && c <= 126;
	} isPrintableChar {
		return 33 <= c && c <= 126;
	} return 33 <= c && c <= 126; 33 <= c && c <= 126 33 <= c 33 c c <= 126 c 126 int c c private void skipUnprintable() {
		while (hasNextByte() && !isPrintableChar(buffer[ptr]))
			ptr++;
	} skipUnprintable {
		while (hasNextByte() && !isPrintableChar(buffer[ptr]))
			ptr++;
	} while (hasNextByte() && !isPrintableChar(buffer[ptr]))
			ptr++; hasNextByte() && !isPrintableChar(buffer[ptr]) hasNextByte() hasNextByte !isPrintableChar(buffer[ptr]) isPrintableChar(buffer[ptr]) isPrintableChar buffer[ptr] buffer ptr ptr++ ptr public boolean hasNext() {
		skipUnprintable();
		return hasNextByte();
	} hasNext {
		skipUnprintable();
		return hasNextByte();
	} skipUnprintable() skipUnprintable return hasNextByte(); hasNextByte() hasNextByte public int nextInt() {
		return Integer.parseInt(next());
	} nextInt {
		return Integer.parseInt(next());
	} return Integer.parseInt(next()); Integer.parseInt(next()) Integer.parseInt Integer next() next public String next() {
		if (!hasNext())
			throw new NoSuchElementException();
		StringBuilder sb = new StringBuilder();
		int b = readByte();
		while (isPrintableChar(b)) {
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	} next {
		if (!hasNext())
			throw new NoSuchElementException();
		StringBuilder sb = new StringBuilder();
		int b = readByte();
		while (isPrintableChar(b)) {
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	} if (!hasNext())
			throw new NoSuchElementException(); !hasNext() hasNext() hasNext throw new NoSuchElementException(); new NoSuchElementException() StringBuilder sb = new StringBuilder(); sb new StringBuilder() int b = readByte(); b readByte() readByte while (isPrintableChar(b)) {
			sb.appendCodePoint(b);
			b = readByte();
		} isPrintableChar(b) isPrintableChar b {
			sb.appendCodePoint(b);
			b = readByte();
		} sb.appendCodePoint(b) sb.appendCodePoint sb b b = readByte() b readByte() readByte return sb.toString(); sb.toString() sb.toString sb public long nextLong() {
		if (!hasNext())
			throw new NoSuchElementException();
		long n = 0;
		boolean minus = false;
		int b = readByte();
		if (b == '-') {
			minus = true;
			b = readByte();
		}
		if (b < '0' || '9' < b) {
			throw new NumberFormatException();
		}
		while (true) {
			if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			} else if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			}
			b = readByte();
		}
	} nextLong {
		if (!hasNext())
			throw new NoSuchElementException();
		long n = 0;
		boolean minus = false;
		int b = readByte();
		if (b == '-') {
			minus = true;
			b = readByte();
		}
		if (b < '0' || '9' < b) {
			throw new NumberFormatException();
		}
		while (true) {
			if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			} else if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			}
			b = readByte();
		}
	} if (!hasNext())
			throw new NoSuchElementException(); !hasNext() hasNext() hasNext throw new NoSuchElementException(); new NoSuchElementException() long n = 0; n 0 boolean minus = false; minus false int b = readByte(); b readByte() readByte if (b == '-') {
			minus = true;
			b = readByte();
		} b == '-' b '-' {
			minus = true;
			b = readByte();
		} minus = true minus true b = readByte() b readByte() readByte if (b < '0' || '9' < b) {
			throw new NumberFormatException();
		} b < '0' || '9' < b b < '0' b '0' '9' < b '9' b {
			throw new NumberFormatException();
		} throw new NumberFormatException(); new NumberFormatException() while (true) {
			if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			} else if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			}
			b = readByte();
		} true {
			if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			} else if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			}
			b = readByte();
		} if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			} else if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			} '0' <= b && b <= '9' '0' <= b '0' b b <= '9' b '9' {
				n *= 10;
				n += b - '0';
			} n *= 10 n 10 n += b - '0' n b - '0' b '0' if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			} b == -1 || !isPrintableChar(b) b == -1 b -1 1 !isPrintableChar(b) isPrintableChar(b) isPrintableChar b {
				return minus ? -n : n;
			} return minus ? -n : n; minus ? -n : n minus -n n n {
				throw new NumberFormatException();
			} throw new NumberFormatException(); new NumberFormatException() b = readByte() b readByte() readByte public class Main {

	public static void main(String[] args) throws IOException {
		new Main().solve();
	}

	private void solve() throws IOException {
		try {
			//			solveA();
			//			solveB();
			solveC();
			//			 solveD();
			//			 solveE();
			//			 solveF();
		} finally {
			if (in != null) {
				in.close();
			}
			if (out != null) {
				out.flush();
				out.close();
			}
		}

	}

	private void solveA() {
		int numN = nextInt();

		out.println(chkA(numN) ? "Yes" : "No");
	}

	private boolean chkA(int num) {

		boolean isGoodnum = false;
		int cnt = 0;
		int previous = 0;
		for (int i = 0; num != 0; i++) {
			if (i == 0) {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} else {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			}
			if (cnt == 3) {
				isGoodnum = true;
			}
		}
		return isGoodnum;
	}

	private void solveB() {
		int numN = nextInt();

		if (numN == 1) {
			out.println(1);
			return;
		}

		long val1 = 2;
		long val2 = 1;
		long res = 0;
		for (int i = 0; i < numN - 1; i++) {
			res = val1 + val2;
			long temp = val1;
			val1 = val2;
			val2 = val2 + temp;
		}

		out.println(res);
	}

	private int[] convC(int num) {
		int[] wk = new int[4];
		for (int i = wk.length - 1; i >= 0; i--) {
			wk[i] = num % 10;
			num /= 10;
		}
		return wk;
	}

	private void solveC() {

		int num = nextInt();

		int[] args = convC(num);

		int[] wk = new int[4];

		int res = chkC(args, 0, wk, 0, 0);

		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < wk.length; i++) {
			if (i == 0) {
				builder.append(args[i]);
			} else {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			}
		}

		builder.append("=7");
		out.println(builder.toString());
	}

	private int chkC(int[] args, int total, int[] wk, int currentI, int operand) {

		if (currentI >= 4) {
			return total;
		}
		if (currentI == 0) {
			total += args[0];
		} else {
			switch (operand) {
			case 1:
				total += args[currentI];
				wk[currentI] = operand;
				break;
			case 2:
				total -= args[currentI];
				wk[currentI] = operand;
				break;
			}
		}

		int val1 = chkC(args, total, wk, currentI + 1, 1);
		if (val1 == 7) {
			return 7;
		}
		int val2 = chkC(args, total, wk, currentI + 1, 2);
		if (val2 == 7) {
			return 7;
		}

		return -1;

	}

	private void solveD() {
		int numN = nextInt();

		out.println("");
	}

	private void solveE() {
		int numN = nextInt();

		out.println("");
	}

	private void solveF() {
		int numN = nextInt();

		out.println("");
	}

	private final PrintWriter out = new PrintWriter(System.out);
	private final InputStream in = System.in;
	private final byte[] buffer = new byte[1024];
	private int ptr = 0;
	private int buflen = 0;

	private boolean hasNextByte() {
		if (ptr < buflen) {
			return true;
		} else {
			ptr = 0;
			try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (buflen <= 0) {
				return false;
			}
		}
		return true;
	}

	private int readByte() {
		if (hasNextByte())
			return buffer[ptr++];
		else
			return -1;
	}

	private static boolean isPrintableChar(int c) {
		return 33 <= c && c <= 126;
	}

	private void skipUnprintable() {
		while (hasNextByte() && !isPrintableChar(buffer[ptr]))
			ptr++;
	}

	public boolean hasNext() {
		skipUnprintable();
		return hasNextByte();
	}

	public int nextInt() {
		return Integer.parseInt(next());
	}

	public String next() {
		if (!hasNext())
			throw new NoSuchElementException();
		StringBuilder sb = new StringBuilder();
		int b = readByte();
		while (isPrintableChar(b)) {
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}

	public long nextLong() {
		if (!hasNext())
			throw new NoSuchElementException();
		long n = 0;
		boolean minus = false;
		int b = readByte();
		if (b == '-') {
			minus = true;
			b = readByte();
		}
		if (b < '0' || '9' < b) {
			throw new NumberFormatException();
		}
		while (true) {
			if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			} else if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			}
			b = readByte();
		}
	}
} public class Main {

	public static void main(String[] args) throws IOException {
		new Main().solve();
	}

	private void solve() throws IOException {
		try {
			//			solveA();
			//			solveB();
			solveC();
			//			 solveD();
			//			 solveE();
			//			 solveF();
		} finally {
			if (in != null) {
				in.close();
			}
			if (out != null) {
				out.flush();
				out.close();
			}
		}

	}

	private void solveA() {
		int numN = nextInt();

		out.println(chkA(numN) ? "Yes" : "No");
	}

	private boolean chkA(int num) {

		boolean isGoodnum = false;
		int cnt = 0;
		int previous = 0;
		for (int i = 0; num != 0; i++) {
			if (i == 0) {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} else {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			}
			if (cnt == 3) {
				isGoodnum = true;
			}
		}
		return isGoodnum;
	}

	private void solveB() {
		int numN = nextInt();

		if (numN == 1) {
			out.println(1);
			return;
		}

		long val1 = 2;
		long val2 = 1;
		long res = 0;
		for (int i = 0; i < numN - 1; i++) {
			res = val1 + val2;
			long temp = val1;
			val1 = val2;
			val2 = val2 + temp;
		}

		out.println(res);
	}

	private int[] convC(int num) {
		int[] wk = new int[4];
		for (int i = wk.length - 1; i >= 0; i--) {
			wk[i] = num % 10;
			num /= 10;
		}
		return wk;
	}

	private void solveC() {

		int num = nextInt();

		int[] args = convC(num);

		int[] wk = new int[4];

		int res = chkC(args, 0, wk, 0, 0);

		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < wk.length; i++) {
			if (i == 0) {
				builder.append(args[i]);
			} else {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			}
		}

		builder.append("=7");
		out.println(builder.toString());
	}

	private int chkC(int[] args, int total, int[] wk, int currentI, int operand) {

		if (currentI >= 4) {
			return total;
		}
		if (currentI == 0) {
			total += args[0];
		} else {
			switch (operand) {
			case 1:
				total += args[currentI];
				wk[currentI] = operand;
				break;
			case 2:
				total -= args[currentI];
				wk[currentI] = operand;
				break;
			}
		}

		int val1 = chkC(args, total, wk, currentI + 1, 1);
		if (val1 == 7) {
			return 7;
		}
		int val2 = chkC(args, total, wk, currentI + 1, 2);
		if (val2 == 7) {
			return 7;
		}

		return -1;

	}

	private void solveD() {
		int numN = nextInt();

		out.println("");
	}

	private void solveE() {
		int numN = nextInt();

		out.println("");
	}

	private void solveF() {
		int numN = nextInt();

		out.println("");
	}

	private final PrintWriter out = new PrintWriter(System.out);
	private final InputStream in = System.in;
	private final byte[] buffer = new byte[1024];
	private int ptr = 0;
	private int buflen = 0;

	private boolean hasNextByte() {
		if (ptr < buflen) {
			return true;
		} else {
			ptr = 0;
			try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (buflen <= 0) {
				return false;
			}
		}
		return true;
	}

	private int readByte() {
		if (hasNextByte())
			return buffer[ptr++];
		else
			return -1;
	}

	private static boolean isPrintableChar(int c) {
		return 33 <= c && c <= 126;
	}

	private void skipUnprintable() {
		while (hasNextByte() && !isPrintableChar(buffer[ptr]))
			ptr++;
	}

	public boolean hasNext() {
		skipUnprintable();
		return hasNextByte();
	}

	public int nextInt() {
		return Integer.parseInt(next());
	}

	public String next() {
		if (!hasNext())
			throw new NoSuchElementException();
		StringBuilder sb = new StringBuilder();
		int b = readByte();
		while (isPrintableChar(b)) {
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}

	public long nextLong() {
		if (!hasNext())
			throw new NoSuchElementException();
		long n = 0;
		boolean minus = false;
		int b = readByte();
		if (b == '-') {
			minus = true;
			b = readByte();
		}
		if (b < '0' || '9' < b) {
			throw new NumberFormatException();
		}
		while (true) {
			if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			} else if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			}
			b = readByte();
		}
	}
} Main

import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.NoSuchElementException;

public class Main {

	public static void main(String[] args) throws IOException {
		new Main().solve();
	}

	private void solve() throws IOException {
		try {
			//			solveA();
			//			solveB();
			solveC();
			//			 solveD();
			//			 solveE();
			//			 solveF();
		} finally {
			if (in != null) {
				in.close();
			}
			if (out != null) {
				out.flush();
				out.close();
			}
		}

	}

	private void solveA() {
		int numN = nextInt();

		out.println(chkA(numN) ? "Yes" : "No");
	}

	private boolean chkA(int num) {

		boolean isGoodnum = false;
		int cnt = 0;
		int previous = 0;
		for (int i = 0; num != 0; i++) {
			if (i == 0) {
				//初期化
				previous = num % 10;
				num /= 10;
				cnt = 1;
			} else {
				int current = num % 10;
				if (previous == current) {
					cnt++;
				} else {
					//countやり直し
					cnt = 1;
				}
				previous = current;
				num /= 10;
			}
			if (cnt == 3) {
				isGoodnum = true;
			}
		}
		return isGoodnum;
	}

	private void solveB() {
		int numN = nextInt();

		if (numN == 1) {
			out.println(1);
			return;
		}

		long val1 = 2;
		long val2 = 1;
		long res = 0;
		for (int i = 0; i < numN - 1; i++) {
			res = val1 + val2;
			long temp = val1;
			val1 = val2;
			val2 = val2 + temp;
		}

		out.println(res);
	}

	private int[] convC(int num) {
		int[] wk = new int[4];
		for (int i = wk.length - 1; i >= 0; i--) {
			wk[i] = num % 10;
			num /= 10;
		}
		return wk;
	}

	private void solveC() {

		int num = nextInt();

		int[] args = convC(num);

		int[] wk = new int[4];

		int res = chkC(args, 0, wk, 0, 0);

		StringBuilder builder = new StringBuilder();
		for (int i = 0; i < wk.length; i++) {
			if (i == 0) {
				builder.append(args[i]);
			} else {
				switch (wk[i]) {
				case 1:
					builder.append("+");
					break;
				case 2:
					builder.append("-");
					break;
				}
				builder.append(args[i]);
			}
		}

		builder.append("=7");
		out.println(builder.toString());
	}

	private int chkC(int[] args, int total, int[] wk, int currentI, int operand) {

		if (currentI >= 4) {
			return total;
		}
		if (currentI == 0) {
			total += args[0];
		} else {
			switch (operand) {
			case 1:
				total += args[currentI];
				wk[currentI] = operand;
				break;
			case 2:
				total -= args[currentI];
				wk[currentI] = operand;
				break;
			}
		}

		int val1 = chkC(args, total, wk, currentI + 1, 1);
		if (val1 == 7) {
			return 7;
		}
		int val2 = chkC(args, total, wk, currentI + 1, 2);
		if (val2 == 7) {
			return 7;
		}

		return -1;

	}

	private void solveD() {
		int numN = nextInt();

		out.println("");
	}

	private void solveE() {
		int numN = nextInt();

		out.println("");
	}

	private void solveF() {
		int numN = nextInt();

		out.println("");
	}

	private final PrintWriter out = new PrintWriter(System.out);
	private final InputStream in = System.in;
	private final byte[] buffer = new byte[1024];
	private int ptr = 0;
	private int buflen = 0;

	private boolean hasNextByte() {
		if (ptr < buflen) {
			return true;
		} else {
			ptr = 0;
			try {
				buflen = in.read(buffer);
			} catch (IOException e) {
				e.printStackTrace();
			}
			if (buflen <= 0) {
				return false;
			}
		}
		return true;
	}

	private int readByte() {
		if (hasNextByte())
			return buffer[ptr++];
		else
			return -1;
	}

	private static boolean isPrintableChar(int c) {
		return 33 <= c && c <= 126;
	}

	private void skipUnprintable() {
		while (hasNextByte() && !isPrintableChar(buffer[ptr]))
			ptr++;
	}

	public boolean hasNext() {
		skipUnprintable();
		return hasNextByte();
	}

	public int nextInt() {
		return Integer.parseInt(next());
	}

	public String next() {
		if (!hasNext())
			throw new NoSuchElementException();
		StringBuilder sb = new StringBuilder();
		int b = readByte();
		while (isPrintableChar(b)) {
			sb.appendCodePoint(b);
			b = readByte();
		}
		return sb.toString();
	}

	public long nextLong() {
		if (!hasNext())
			throw new NoSuchElementException();
		long n = 0;
		boolean minus = false;
		int b = readByte();
		if (b == '-') {
			minus = true;
			b = readByte();
		}
		if (b < '0' || '9' < b) {
			throw new NumberFormatException();
		}
		while (true) {
			if ('0' <= b && b <= '9') {
				n *= 10;
				n += b - '0';
			} else if (b == -1 || !isPrintableChar(b)) {
				return minus ? -n : n;
			} else {
				throw new NumberFormatException();
			}
			b = readByte();
		}
	}
}