<pre>import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;


public class Screen {
	public static char[][] formula;
	
	public static String buildString(int row, int start, int end) {
		String result = &quot;&quot;;
		for (int i = start; i &lt; end &amp;&amp; i &lt; formula[row].length; i++) {
			result += formula[row][i];
		}
		return result.trim();
	}
	
	public static int toInt(int row, int start, int end) {
		int result = 0;
		for (int i = start; i &lt; end; i++) {
			result *= 10;
			result += formula[row][i] - '0';
		}
		return result;
	}
	
	public static int resolveSimple(int row, int start, int end) {
		String[] parts = buildString(row, start, end).split(&quot; &quot;);
		Stack&lt;String&gt; newParts = new Stack&lt;String&gt;();
	
		for (int i = 0; i &lt; parts.length; i++) {
			if (parts[i].equals(&quot;*&quot;)) {
				newParts.push(String.valueOf(Integer.valueOf(newParts.pop()) * Integer.valueOf(parts[i+1])));
				i++;
			} else {
				newParts.push(parts[i]);
			}
		}
		
		int result = Integer.valueOf(newParts.get(0));
		int i = 1;
		while (i &lt; newParts.size()) {
			if (newParts.get(i).equals(&quot;+&quot;))
				result += Integer.valueOf(newParts.get(i+1));
			else if (newParts.get(i).equals(&quot;-&quot;))
				result -= Integer.valueOf(newParts.get(i+1));

			i += 2;
		}
		return result;				
	}
	
	public static int resolveSimple(int row, int col) {
		int length = complexLength(row, col);
		return resolveSimple(row, col, col+length);
	}
	
	public static int resolveSqrt(int row, int col) {
		int length = complexLength(row, col);
		return (int) Math.sqrt(resolveSimple(row, col + 2, col + length));
	}
	
	public static int resolveFraction(int row, int col) {
		int length = complexLength(row, col);
		return (int) (resolveSimple(row - 1, col, col + length) / resolveSimple(row + 1, col, col + length));
	}
	
	public static int resolveComplex(int row, int col) {
		switch(formula[row][col]) {
		case '\\':
			return resolveSqrt(row, col);
		case '=':
			return resolveFraction(row, col);
		default:
			return resolveSimple(row, col);
		}
	}
	
	public static int complexLength(int row, int col) {
		int length = 0;
		switch(formula[row][col]) {
		case '\\':
			while (col + 2 + length &lt; formula[row - 1].length &amp;&amp; formula[row - 1][col + 2 + length] == '_')
				length++;
			length += 2;
			break;
		case '=':
			while (col + length &lt; formula[row].length &amp;&amp; formula[row][col + length] == '=')
				length++;
			break;
		default:
			while (col + length &lt; formula[row].length &amp;&amp; &quot;+-*0123456789 &quot;.contains(String.valueOf(formula[row][col + length])))
				length++;
			while (&quot;+-* &quot;.contains(String.valueOf(formula[row][col + length - 1])))
				length--;
			break;
		}
		return length;
	}
	
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		while (true) {
			int r = s.nextInt();
			int c = s.nextInt();
			if (r == 0 &amp;&amp; c == 0)
				break;
			
			s.nextLine();
			
			formula = new char[r][c];
			for (int i = 0; i &lt; r; i++)
				formula[i] = s.nextLine().toCharArray();
			
			int result = 0;
			
			if (r == 1)
				result = resolveSimple(0, 0);
			else {
				int i = 0;
				while (i &lt; formula[1].length) {
					if (i == 0) {
						result = resolveComplex(1, 0);
						i += complexLength(1, 0);
					} else if (formula[1][i + 1] == '+') {
						result += resolveComplex(1, i+3);
						i += complexLength(1, i+3) + 3;
					} else if (formula[1][i + 1] == '-') {
						result -= resolveComplex(1, i+3);
						i += complexLength(1, i+3) + 3;
					}

					//System.out.println(i);
					
				}
			}
			
			System.out.println(result);
		}
		
		s.close();
	}
}
</pre>
