#include <bits/stdc++.h>
using namespace std;

#define REP(i,n) for(int i = 0; i < (n); ++i)
#define FOR(i,a,b) for(int i = (a); i <= (b); ++i)
#define FORD(i,a,b) for(int i = (a); i >= (b); --i)

int R, C;
char board[5][5000];

bool is_op(char ch) {
  return ch == '+' || ch == '-' || ch ==  '*';
}

int my_sqrt(int x) {
  return (int)sqrt((double)x + 0.1);
}

int evl(const vector<int>& nums, const vector<char>& ops) {
//  printf("nums:");
//  for (auto v : nums) printf(" %d", v);
//  printf("\n");
//  printf("ops:");
//  for (auto c : ops) printf(" %c", c);
//  printf("\n");
  int s = 0;
  int last = nums[0];
  char last_op = '+';
  REP(i, (int)ops.size()) {
    if (ops[i] == '+' || ops[i] == '-') {
      if (last_op == '+') s += last;
      else s-= last;
      last_op = ops[i];
      last = nums[i + 1];
    } else {
      last *= nums[i + 1];
    }
  }
  if (last_op == '+') s += last;
  else s-= last;
//  printf("result: %d\n", s);
  return s;
}

int ev_simp(int x1, int y1, int x2, int y2) {
//  printf("ev simp %d %d %d %d\n", x1, y1, x2, y2);
  int num = 0;
  vector<int> nums;
  vector<char> ops;
  bool is_num = false;
  FOR(i, y1, y2) {
    if (isdigit(board[x1][i])) {
      num *= 10;
      num += board[x1][i] - '0';
      is_num = true;
    } else {
      if (is_num) {
        nums.push_back(num);
        num = 0;
        is_num = false;
      }
    }
    if (is_op(board[x1][i])) ops.push_back(board[x1][i]);
  }
  if (nums.size() == ops.size()) nums.push_back(num);
  return evl(nums, ops);
}

int ev_comp(int x1, int y1, int x2, int y2) {
//  printf("ev comp %d %d %d %d\n", x1, y1, x2, y2);
  bool is_frac = false;
  int starty = -1, endy;
  FOR(j, y1, y2) {
    if (board[x1][j] == '_') {
      if (starty == -1) starty = j;
      endy = j;
    }
  }
  if (starty != -1) {
    return my_sqrt(ev_simp(x1 + 1, starty, x1 + 1, endy));
  }
  return ev_simp(x1, y1, x1, y2) / ev_simp(x2, y1, x2, y2);
}

int ev_form(int x1, int y1, int x2, int y2) {
//  printf("ev form %d %d %d %d\n", x1, y1, x2, y2);
  if (x1 == x2) return ev_simp(x1, y1, x2, y2);
  vector<int> nums;
  vector<char> ops;
  FOR(i, y1, y2) {
    if (board[x1+1][i] == '=') {
      int starty = i, endy = i;
      while (i <= y2 && board[x1+1][i] == '=') ++i;
      endy = i - 1;
      nums.push_back(ev_comp(x1, starty, x2, endy));
    } else if (board[x1 + 1][i] == '\\') {
      int starty = i, endy = i;
      i += 2;
      while (i <= y2 && board[x1][i] == '_') ++i;
      endy = i - 1;
      nums.push_back(ev_comp(x1, starty, x1 + 1, endy));
    } else if (is_op(board[x1 + 1][i])) {
      ops.push_back(board[x1 + 1][i]);
    } else if (isdigit(board[x1 + 1][i])) {
      int starty = i, endy = i;
      while (i <= y2 && isdigit(board[x1 + 1][i])) ++i;
      endy = i - 1;
      nums.push_back(ev_simp(x1 + 1, starty, x1 + 1, endy));
    }
  }
  return evl(nums, ops);
}

int main() {
  char c1;
  while (scanf("%d%d%c", &R, &C, &c1) == 3) {
    if (R == 0) break;
    REP(i, R) {
      int j = 0;
      while (scanf("%c", &board[i][j]) == 1 && board[i][j] != '\n') {
        ++j;
      }
      FOR(j2, j, C - 1) board[i][j2] = ' ';
      board[i][C] = 0;
//      printf("%s\n", board[i]);
    }
    scanf("%c", &c1);

    if (R == 1) {
      printf("%d\n", ev_simp(0, 0, 0, C - 1));
      continue;
    }
    printf("%d\n", ev_form(0, 0, R - 1, C - 1));
  }
  return 0;
}