#include <bits/stdc++.h>
#define MOD 32768LL
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
typedef vector<ll> vec;
typedef vector<vec> mat;

class val{
public:
	mat m;
	ll v;
	int t;
	val(){
		t=0;
		v=0;
	}

	val(int tt,ll vv){
		t=tt;
		v=vv;
	}

	val(mat mm){
		t=1;
		m=mm;
		for(int i=0;i<m.size();i++){
			for(int j=0;j<m[0].size();j++){
				m[i][j]%=MOD;
				if(m[i][j]<0LL)m[i][j]+=MOD;
			}
		}
	}
	val(ll vv){
		v=vv;
		v%=MOD;
		if(v<0LL){
			v+=MOD;
		}
		t=0;
	}
	val operator+ (val va){
		if(va.t==1 && va.m.size()==1 && va.m[0].size()==1){
			va.t=0;
			va.v=va.m[0][0];
		}
		if(t==1 && m.size()==1 && m[0].size()==1){
			t=0;
			v=m[0][0];
		}
		if(t==0 && va.t==0){
			return val(va.v+v);
		}
		if(t==0 && va.t==1){
			for(int i=0;i<va.m.size();i++){
				for(int j=0;j<va.m[0].size();j++){
					va.m[i][j]+=v;
				}
			}
			return mat(va.m);
		}
		if(t==1 && va.t==0){
			for(int i=0;i<m.size();i++){
				for(int j=0;j<m[0].size();j++){
					m[i][j]+=va.v;
				}
			}
			return mat(m);
		}
		if(t==1 && va.t==1){
			for(int i=0;i<va.m.size();i++){
				for(int j=0;j<va.m[0].size();j++){
					m[i][j]+=va.m[i][j];
				}
			}
			return mat(m);
		}
	}
	val operator- (val va){
		if(va.t==1 && va.m.size()==1 && va.m[0].size()==1){
			va.t=0;
			va.v=va.m[0][0];
		}
		if(t==1 && m.size()==1 && m[0].size()==1){
			t=0;
			v=m[0][0];
		}
		if(t==0 && va.t==0){
			return val(v-va.v);
		}
		if(t==0 && va.t==1){
			for(int i=0;i<va.m.size();i++){
				for(int j=0;j<va.m[0].size();j++){
					va.m[i][j]=v-va.m[i][j];
				}
			}
			return mat(va.m);
		}
		if(t==1 && va.t==0){
			for(int i=0;i<m.size();i++){
				for(int j=0;j<m[0].size();j++){
					m[i][j]-=va.v;
				}
			}
			return mat(m);
		}
		if(t==1 && va.t==1){
			for(int i=0;i<va.m.size();i++){
				for(int j=0;j<va.m[0].size();j++){
					m[i][j]-=va.m[i][j];
				}
			}
			return mat(m);
		}
	}
	val operator* (val va){
		if(va.t==1 && va.m.size()==1 && va.m[0].size()==1){
			va.t=0;
			va.v=va.m[0][0];
		}
		if(t==1 && m.size()==1 && m[0].size()==1){
			t=0;
			v=m[0][0];
		}
		if(t==0 && va.t==0){
			return val(v*va.v);
		}
		if(t==0 && va.t==1){
			for(int i=0;i<va.m.size();i++){
				for(int j=0;j<va.m[0].size();j++){
					va.m[i][j]=v*va.m[i][j];
				}
			}
			return mat(va.m);
		}
		if(t==1 && va.t==0){
			for(int i=0;i<m.size();i++){
				for(int j=0;j<m[0].size();j++){
					m[i][j]*=va.v;
				}
			}
			return mat(m);
		}
		if(t==1 && va.t==1){
			mat C(m.size(),vec(va.m[0].size()));
			for(int i=0;i<m.size();i++){
				for(int k=0;k<va.m.size();k++){
					for(int j=0;j<va.m[0].size();j++){
						C[i][j]=(C[i][j]+(m[i][k]*va.m[k][j]%MOD))%MOD;
					}
				}
			}
			return mat(C);
		}
	}
};

val v[35];

typedef string::const_iterator State;
val expression(State &begin);

int number(State &begin){
	int ret=0;
	while(isdigit(*begin)){
		ret*=10;
		ret+=*begin-'0';
		ret%=32768LL;
		begin++;
	}
	return ret;
}

val row(State &begin){
	val ret=expression(begin);
	if(*begin==' '){
		begin++;
		val v2=row(begin);
		//printf("%d %d\n",ret.t,v2.t);
		if(v2.t==0 && ret.t==0){
			ret.t=1;
			ret.m=mat(1,vec(2));
			ret.m[0][0]=ret.v;
			ret.m[0][1]=v2.v;
		}else if(v2.t==0){
			ret.m[0].push_back(v2.v);
		}else if(ret.t==0){
			ret.t=1;
			ret.m=mat(1,vec(1));
			ret.m[0][0]=ret.v;
			for(int i=0;i<v2.m[0].size();i++){
				ret.m[0].push_back(v2.m[0][i]);
			}
		}else if(ret.t==1 && v2.t==1){
			//printf("%d %d %d %d\n",ret.m.size(),ret.m[0].size(),v2.m.size(),v2.m[0].size());
			for(int i=0;i<v2.m.size();i++){
				for(int j=0;j<v2.m[i].size();j++){
					ret.m[i].push_back(v2.m[i][j]);
				}
			}
		}
		return ret;
	}else{
		return ret;
	}
}

val rowsqr(State &begin){
	val ret=row(begin);
	while(1){
		//cout << "rs " << *begin << endl;
		if(*begin==';'){
			begin++;
			val v2=rowsqr(begin);
			if(ret.t==0){
				ret.t=1;
				ret.m=mat(1,vec(1));
				ret.m[0][0]=ret.v;
			}
			if(v2.t==0){
				ret.m.push_back(vec(1,v2.v));
			}else{
				for(int i=0;i<v2.m.size();i++){
					ret.m.push_back(v2.m[i]);
				}
			}
			//printf("%d %d\n",ret.m.size(),ret.m[0].size());
		}else{
			return ret;
		}
	}
	
}

val primary(State &begin){
	val ret=val(-1,0);
	while(1){
		if(*begin=='['){
			begin++;
			ret=rowsqr(begin);
			begin++;
		}else if((*begin)>='A' && (*begin)<='Z'){
			ret=v[(*begin)-'A'];
			begin++;
		}else if(*begin=='('){
			begin++;
			val v1=expression(begin);
			if(*begin==')'){
				begin++;
				ret=v1;
				continue;
			}
			begin++;
			val v2=expression(begin);
			begin++;
			val ret2;
			ret2.t=1;
			if(ret.t==0){
				ret.m=mat(1,vec(1,ret.v));
			}
			if(v1.t==0){
				v1.m=mat(1,vec(1,v1.v));
			}
			if(v2.t==0){
				v2.m=mat(1,vec(1,v2.v));
			}
			ret2.m=mat(v1.m[0].size(),vec(v2.m[0].size()));
			for(int i=0;i<v1.m[0].size();i++){
				for(int j=0;j<v2.m[0].size();j++){
					ret2.m[i][j]=ret.m[v1.m[0][i]-1][v2.m[0][j]-1];
				}
			}
			ret=ret2;
		}else if(*begin=='\''){
			begin++;
			val ret2;
			ret2.t=ret.t;
			if(ret.t==0){
				ret2.v=ret.v;
			}else if(ret.t==1){
				ret2.m=mat(ret.m[0].size(),vec(ret.m.size()));
				for(int i=0;i<ret.m.size();i++){
					for(int j=0;j<ret.m[0].size();j++){
						ret2.m[j][i]=ret.m[i][j];
					}
				}
			}
			ret=ret2;
		}else if(isdigit(*begin)){
			ret=val(number(begin));
		}else{
			break;
		}
	}
	return ret;
}

val negation(val ret){
	if(ret.t==0){
		ret.v=MOD-ret.v;
		return ret;
	}else{
		for(int i=0;i<ret.m.size();i++){
			for(int j=0;j<ret.m[i].size();j++){
				ret.m[i][j]=MOD-ret.m[i][j];
			}
		}
		return ret;
	}
}

val factor(State &begin){
	if(*begin=='-'){
		begin++;
		val ret=factor(begin);
		return negation(ret);
	}else{
		return primary(begin);
	}
}

val term(State &begin){
	val ret=factor(begin);
	while(1){
		if(*begin=='*'){
			begin++;
			ret=ret*factor(begin);
		}else{
			break;
		}
	}
	return ret;
}

val expression(State &begin){
	val ret=term(begin);
	while(1){
		if(*begin=='+'){
			begin++;
			ret=ret+term(begin);
		}else if(*begin=='-'){
			begin++;
			ret=ret-term(begin);
		}else{
			break;
		}
	}
	return ret;
}

int n;

void solve(){
	for(int i=0;i<26;i++){
		v[i].m.clear();
		v[i].t=0;
	}
	for(int i=0;i<n;i++){
		string str;
		getline(cin,str);
		State b=str.begin();
		b++;
		b++;
		int pos=str[0]-'A';
		v[pos]=expression(b);
		if(v[pos].t==0){
			printf("%lld\n",v[pos].v);
		}else{
			for(int i=0;i<v[pos].m.size();i++){
				for(int j=0;j<v[pos].m[0].size();j++){
					printf("%lld%c",v[pos].m[i][j],j+1==v[pos].m[0].size()?'\n':' ');
				}
			}
		}
	}
	printf("-----\n");
}

int main(void){
	while(1){
		scanf("%d%*c",&n);
		if(n==0)break;
		solve();
	}
	return 0;
}


Measured memory_bytes: 3732