#include <iostream>
#include <map>
using namespace std;
char ch[21][21];
int n,m;
bool chk[21][21];
void sech (int x,int y){
	
	char ;F
	if (x != 1)sech (x - 1,y);
	if (y != 1)sech (x,y - 1);
	if (x != n){
		VIS D CNT D
		sech (x + 1,y);D
		DEL VIS D CNT D
	}
	if (y != m)sech (x,y + 1);J
	return;
}
int main(){
	cin >> n >> m;
	for (int i = 1;i <= n;i++){
		for (int j = 1;j <= m;j++)cin >> ch[i][j];
	}
	sech (1,1);
	return 0;
}
#include <iostream>
#include <stack>
#include <cmath>
using namespace std;
stack <int> numb;
stack <char> op;
char ch;
bool check(char,char);
void prepare ();
int main(){
	while ((ch = getchar()) != '\n' || ch != ')'){
		if (ch >= '0' && ch <= '9'){
			numb.push(ch - '0');
		}
		else if (ch == '('){
			main();
		}
		else{// + - * /
			if (op.size()){
				if (!check(op.top(),ch)){//check:优先级a比b高不成立
					while (!check(op.top(),ch)){
						prepare();
						op.push(ch);
					}
				}
				else{
					op.push(ch);
				}
			}
			else op.push(ch);
		}
	}
	if (ch == '\n'){
		while(op.size()){
			prepare ();
		}
		cout << numb.top();
	}
	return 0;
}
bool check(char ch1,char ch2){
	int a,b;
	switch (ch1){
	case '+':
		a = 1;
		break;
	case '-':
		a = 1;
		break;
	case '*':
		a = 2;
		break;
	case '/':
		a = 2;
		break;
	default:
		a = 3;
	}
	switch (ch2){
	case '+':
		b = 1;
		break;
	case '-':
		b = 1;
		break;
	case '*':
		b = 2;
		break;
	case '/':
		b = 2;
		break;
	default:
		b = 3;
	}
	return a <= b;
}
void prepare (){
	int a,b;
	b = numb.top();
	numb.pop();
	a = numb.top();
	numb.pop();
	switch (op.top()) {
	case '+':
		numb.push(a + b);
		break;
	case '-':
		numb.push(a - b);
		break;
	case '*':
		numb.push(a * b);
		break;
	case '/':
		numb.push(a / b);
		break;
	case '^':
		numb.push(pow (a,b));
	}
	op.pop();
	return; 
}