#include<iostream>
#include<vector>
#include<cctype>

using namespace std;

typedef vector<vector<int> > M;

const int MOD=32768;
char prg[99];
char *p;
M v[128];

M expr();
M primary();

M row(){
  auto l=expr();
  while(*p==' '){
    p++;
    auto r=expr();
    for(int i=0;i<l.size();i++){
      l[i].insert(end(l[i]),begin(r[i]),end(r[i]));
    }
  }
  return l;
}

M primary_h(){
  if(isdigit(*p)){
    int r=0;
    while(isdigit(*p)){
      r=r*10+(*p++)-'0';
    }
    return {{r}};
  }else if(isalpha(*p)){
    return v[*p++];
  }else if(*p=='['){
    p++;
    auto l=row();
    while(*p==';'){
      p++;
      auto r=row();
      l.insert(end(l),begin(r),end(r));
    }
    p++;
    return l;
  }else if(*p=='('){
    p++;
    auto l=expr();
    p++;
    return l;
  }
}

M primary(){
  auto l=primary_h();
  for(;;){
    if(*p=='('){
      p++;
      auto f=expr()[0];
      p++;
      auto s=expr()[0];
      p++;
      M res(f.size(),vector<int>(s.size()));
      for(int i=0;i<f.size();i++){
	for(int j=0;j<s.size();j++){
	  res[i][j]=l[f[i]-1][s[j]-1];
	}
      }
      l=res;
    }else if(*p=='\''){
      p++;
      M res(l[0].size(),vector<int>(l.size()));
      for(int i=0;i<l.size();i++){
	for(int j=0;j<l[0].size();j++){
	  res[j][i]=l[i][j];
	}
      }
      l=res;
    }else{
      return l;
    }
  }
}

M neg(M m){
  for(auto &e:m){
    for(auto &f:e){
      f=(MOD-f)%MOD;
    }
  }
  return m;
}

M factor(){
  if(*p=='-'){
    p++;
    return neg(factor());
  }else{
    return primary();
  }
}

M mpi(M m,int i){
  for(auto &e:m){
    for(auto &f:e){
      f=(f*i)%MOD;
    }
  }
  return m;
}

M term(){
  auto l=factor();
  while(*p=='*'){
    p++;
    auto r=factor();
    if(l.size()==1&&l[0].size()==1){
      l=mpi(r,l[0][0]);
    }else if(r.size()==1&&r[0].size()==1){
      l=mpi(l,r[0][0]);
    }else{
      auto res=M(l.size(),vector<int>(r[0].size()));
      for(int i=0;i<l.size();i++){
	for(int j=0;j<r[0].size();j++){
	  int t=0;
	  for(int k=0;k<l[i].size();k++){
	    t=(t+l[i][k]*r[k][j])%MOD;
	  }
	  res[i][j]=t;
	}
      }
      l=res;
    }
  }
  return l;
}

M expr(){
  auto l=term();
  while(*p=='+'||*p=='-'){
    bool n=*p=='-';
    p++;
    auto r=term();
    if(n){
      r=neg(r);
    }
    for(int i=0;i<l.size();i++){
      for(int j=0;j<l[i].size();j++){
	l[i][j]=(l[i][j]+r[i][j])%MOD;
      }
    }
  }
  return l;
}

int main(){
  for(int n;cin>>n,n;){
    cin.ignore();
    while(n--){
      cin.getline(prg,99);
      p=prg+2;
      v[prg[0]]=expr();
      for(auto e:v[prg[0]]){
	for(int i=0;i<e.size();i++){
	  cout<<e[i]<<" \n"[i==e.size()-1];
	}
      }
    }
    cout<<"-----"<<endl;
  }
}