#include <iostream>
#include <vector>
#include <string>
#include <cctype>
#include <map>
#include <algorithm>
#define M 32768
using namespace std;
typedef vector<int> vec;
typedef vector<vec> mat;

string S;
size_t cur;
map<char,mat>matrixs;

mat digit();
mat inum();
mat row();
mat rowseq();
mat matrix();
mat primary();
mat factor();
mat term();
mat expr();
void assignment();
// parse
mat digit(){
	mat n(1,vec(1));
 	n[0][0]=S[cur++]-'0';
	return n;
}

mat inum(){
	mat n=digit();
	while(isdigit(S[cur])){
		mat m(1,vec(1));
		m=digit();
		n[0][0]=n[0][0]*10+m[0][0];
	}
	return n;
}
//above OK

mat row(){
	mat n;
	n=expr();
	while(S[cur]==' '){
		cur++;
		mat m=expr();
		//cout << "OK" << endl;
		for(int i=0;i<m.size();i++)
			for(int j=0;j<m[0].size();j++)
				n[i].push_back(m[i][j]);
	}
	return n;
}

mat rowseq(){
	mat n;
	n=row();
	while(S[cur]==';'){
		cur++;
		mat m=row();
		for(int i=0;i<m.size();i++)
			n.push_back(m[i]);
	}
	return n;
}

mat matrix(){
	mat n;
	while(S[cur]!=']'){
		n=rowseq();
	}
	cur++;
	return n;
}

mat primary(){
	mat n;
	if(isdigit(S[cur])){
		n=inum();
	}else if(isupper(S[cur])){
		char t=S[cur++];
		n=matrixs[t];
	}else if(S[cur]=='['){
		cur++;
		n=matrix();
	}else if(S[cur]=='('){
		cur++;
		n=expr();
		if(S[cur]==')')
			cur++;
	}
	while(S[cur]=='\''||S[cur]=='('){
		if(S[cur]=='\''){
			cur++;
			mat tmp(n[0].size(),vec( n.size() ) );
			for(int i=0;i<n.size();i++)
				for(int j=0;j<n[0].size();j++)
					tmp[j][i]=n[i][j];
			swap(tmp,n);
		}else{
			cur++;
			mat a=expr();
			if(S[cur]!=',')
				cout << "error" << endl;
			cur++;
			mat b=expr();
			//cout << a[0].size() << " " << b[0].size() << endl;
			mat tmp( a[0].size(), vec( b[0].size()) );
			for(int i=0;i<a[0].size();i++)
				for(int j=0;j<b[0].size();j++)
					tmp[i][j]=n[a[0][i]-1][b[0][j]-1];
			//out << "come" << endl;
			swap(tmp,n);
			if(S[cur]!=')')
				cout << "error" << endl;
			else
				cur++;
		}
	}
	return n;
}

mat factor(){
	mat n;
	if(S[cur]=='-'){
		cur++;
		n=factor();
		for(int i=0;i<n.size();i++)
			for(int j=0;j<n[0].size();j++)
				n[i][j]=(n[i][j]*-1+M)%M;
	}else
		n=primary();
	return n;
}

mat term(){
	mat a=factor();
	if(S[cur]=='*'){
		cur++;
		mat b=term();
		if(a.size()==1&&a[0].size()==1){
			for(int i=0;i<b.size();i++)
				for(int j=0;j<b[0].size();j++)
					b[i][j]=(b[i][j]*a[0][0]+M)%M;
			swap(b,a);
		}else if(b.size()==1&&b[0].size()==1){
			for(int i=0;i<a.size();i++)
				for(int j=0;j<a[0].size();j++)
					a[i][j]=(a[i][j]*b[0][0]+M)%M;
		}else{
			mat c(a.size(),vec( b[0].size() ));
			for(int i=0;i<a.size();i++)
				for(int k=0;k<a[0].size();k++)
					for(int j=0;j<b[0].size();j++)
						c[i][j]=(c[i][j]+a[i][k]*b[k][j])%M;
			swap(c,a);
		}
	}
	return a;
}

mat expr(){
	mat n=term();
	while(S[cur]=='+'||S[cur]=='-'){
		if(S[cur]=='+'){
			cur++;
			mat b=term();
			for(int i=0;i<n.size();i++)
				for(int j=0;j<n[0].size();j++)
					n[i][j]=(n[i][j]+b[i][j]+M)%M;
		}else{
			cur++;
			mat b=term();
			for(int i=0;i<n.size();i++)
				for(int j=0;j<n[0].size();j++)
					n[i][j]=(n[i][j]-b[i][j]+M)%M;
		}
	}
	return n;
}

void assignment(){
	char var=S[cur++];
	if(S[cur]=='=')
		cur++;
	mat n=expr();
	if(S[cur]=='.')
		cur++;
	matrixs[var]=n;
	for(int i=0;i<n.size();i++){
		for(int j=0;j<n[0].size();j++)
			cout <<(j?" ":"") << n[i][j];
		cout << endl;
	}
	return ;
}

int main(void){
	int n;
	while(cin >> n,n){
		cin.ignore();
		matrixs.erase(matrixs.begin(),matrixs.end());
		for(int i=0;i<n;i++){
			cur=0;
			getline(cin,S);
			assignment();
		}
		cout << "-----" << endl; 
	}
	return 0;
}

Measured memory_bytes: 1500