#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
#include <cstring>

using namespace std;

#define REP(i,x,n) for(int i=x;i<(int)(n);i++)
#define rep(i,n) REP(i,0,n)
typedef pair<int,int> pii;
typedef long long ll;

const int mod=2011;

pii expr(int,int,int,int);
pii term(int,int,int,int);
pii factor(int,int,int,int);
pii powexpr(int,int,int,int);
pii primary(int,int,int,int);

int H,W;
char field[30][100];

ll mod_pow(ll num,ll p,ll mod){
  ll mul=num;
  ll res=1;
  while(p){
    if(p%2)res=(res*mul)%mod;
    p/=2;
    mul=(mul*mul)%mod;
  }
  return res;
}
ll div_mod(ll num,ll mod){
  return mod_pow(num,mod-2,mod);
}

pii expr(int miny,int minx,int maxy,int maxx){
  for(int x=minx;x<=maxx;x++){
    bool flg=false;
    for(int y=miny;y<=maxy;y++){
      if(field[y][x]!='.'){
        flg=true;
      }
    }
    if(flg)break;
    minx++;
  }
  pii res=term(miny,minx,maxy,maxx);
  minx=res.second;
  if(minx<=maxx){
    while(minx<=maxx){
      minx++;
      bool no=false;
      for(int y=miny;y<=maxy;y++){
        if(field[y][minx]=='+'){
          minx+=2;
          pii p=term(miny,minx,maxy,maxx);
          res.first+=p.first;
          res.first%=mod;
          minx=p.second;
          break;
        }
        else if(field[y][minx]=='-'&&field[y][minx+1]!='-'){
          minx+=2;
          pii p=term(miny,minx,maxy,maxx);
          res.first-=p.first;
          res.first+=mod;
          res.first%=mod;
          minx=p.second;
          break;
        }
        else if(y==maxy){
          no=true;
          break;
        }
      }
      if(no){
        minx--;
        break;
      }
    }
  }
  return pii(res.first,minx);
}
pii term(int miny,int minx,int maxy,int maxx){
  pii res=factor(miny,minx,maxy,maxx);
  minx=res.second;
  if(minx<=maxx){
    while(minx<=maxx){
      minx++;
      bool no=false;
      for(int y=miny;y<=maxy;y++){
        if(field[y][minx]=='*'){
          minx+=2;
          pii p=factor(miny,minx,maxy,maxx);
          res.first*=p.first;res.first%=mod;
          minx=p.second;
          break;
        }
        else if(y==maxy){
          no=true;
          break;
        }
      }
      if(no){
        minx--;
        break;
      }
    }
  }
  return pii(res.first,minx);
}
pii factor(int miny,int minx,int maxy,int maxx){
  pii res(1,1);
  for(int y=miny;y<=maxy;y++){
    if(field[y][minx]=='-'
       &&field[y][minx+1]=='.'){
      minx+=2;
      pii p=factor(miny,minx,maxy,maxx);
      p.first*=-1;
      p.first+=mod;
      p.first%=mod;
      minx=p.second;
      return pii(p.first,minx);
    }
  }
  // fraction
  for(int y=miny;y<=maxy;y++){
    // found
    if(field[y][minx]=='-'&&field[y][minx+1]=='-'){
      int pos=-1;
      for(int i=minx;i<=maxx;i++){
        if(field[y][i]!='-'){
          pos=i;
          break;
          // const int from=minx+1;
          // const int to=i-2;
          // pii p1=expr(miny,from,y-1,to);
          // pii p2=expr(y+1,from,maxy,to);
          // return pii((p1.first*div_mod(p2.first,mod))%mod,i);
        }
      }
      if(pos==-1)pos=maxx+1;
      const int from=minx+1;
      const int to=pos-2;
      pii p1=expr(miny,from,y-1,to);
      pii p2=expr(y+1,from,maxy,to);
      return pii((p1.first*div_mod(p2.first,mod))%mod,pos);
    }
  }
  // powexpr
  return powexpr(miny,minx,maxy,maxx);
}
pii powexpr(int miny,int minx,int maxy,int maxx){
  pii res=primary(miny,minx,maxy,maxx);
  minx=res.second;
  int mul=res.first;
  res.first=1;
  bool found=false;
  for(int y=miny;y<=maxy;y++)
    if(isdigit(field[y][minx])){
      for(int i=0;i<field[y][minx]-'0';i++){
        res.first*=mul;
        res.first%=mod;
      }
      minx++;
      found=true;
      break;
    }
  if(!found)res.first=mul;
  return pii(res.first,minx);
}

pii primary(int miny,int minx,int maxy,int maxx){
  pii res;
  for(int y=miny;y<=maxy;y++)
    if(isdigit(field[y][minx])){
      res.first=field[y][minx]-'0';
      return pii(res.first,minx+1);
    }
  // par
  minx+=2;
  res=expr(miny,minx,maxy,maxx);
  minx=res.second+2;
  return pii(res.first,minx);
}

int main(){
 // ifstream cin("in.txt");
  while(cin>>H&&H){
    rep(i,H){
      cin>>field[i];
      W=strlen(field[i]);
    }
    cout<<expr(0,0,H-1,W-1).first<<endl;
    //cout<<(mod-(3*div_mod(4,mod))%mod)%mod<<endl;
  }
  
  return 0;
}

Measured memory_bytes: 1176