삼각행렬

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

수를 정삼각형 모양으로 늘어놓은 것을 삼각행렬이라고 하자.

크기가 LL인 삼각행렬은 LL개의 행으로 이루어지고, 위에서 ii번째 행에는 수가 ii개 들어간다.

삼각행렬의 덧셈은 다음과 같이 정의한다.

크기가 같은 두 삼각행렬만 더할 수 있고, 같은 자리에 있는 수끼리 더한다.

삼각행렬의 곱셈은 다음과 같이 정의한다.

곱셈에는 교환법칙이 성립하지 않는다. A * B에서 앞에 오는 AA의 크기는 BB의 크기보다 작거나 같아야 한다. BB 안에서 AA와 크기가 같은 삼각형을 모두 찾고, 삼각형마다 겹치는 자리의 수를 곱해서 모두 더한다. 그 합이 결과 삼각행렬의 한 자리를 채운다. 꼭짓점이 BBrrcc열에 있는 삼각형이 만든 값은 결과의 rrcc열에 들어간다. 따라서 결과의 크기는 BB의 크기에서 AA의 크기를 뺀 값에 1을 더한 것이다.

위 그림에서 AA와 크기가 같은 BB 안의 삼각형은 {b1,b2,b3}\{b_1, b_2, b_3\}, {b2,b4,b5}\{b_2, b_4, b_5\}, {b3,b5,b6}\{b_3, b_5, b_6\} 세 개다. 대응하는 수끼리 곱해서 더하면 c=a1b1+a2b2+a3b3c = a_1 b_1 + a_2 b_2 + a_3 b_3, d=a1b2+a2b4+a3b5d = a_1 b_2 + a_2 b_4 + a_3 b_5, e=a1b3+a2b5+a3b6e = a_1 b_3 + a_2 b_5 + a_3 b_6이 된다. cc를 만든 삼각형이 BB의 맨 위에 있으므로 cc는 결과의 맨 위에 놓이고, ddee는 원래 삼각형이 놓였던 순서 그대로 다음 행에 dd가 왼쪽, ee가 오른쪽으로 놓인다.

식은 후위 표기법으로 주어진다. 예컨대 A B * A +(A * B) + A와 같다. 왼쪽부터 차례로 읽으면 A, B, * 순서이므로 A * B를 먼저 계산한다. 이 결과를 CC라고 하고 A B *CC로 바꾸면 C A +가 남으며, 이는 C+AC + A를 뜻한다.

입력

입력은 여러 데이터 집합으로 이루어진다.

각 데이터 집합의 첫 줄에는 식에 쓰이는 삼각행렬의 개수 NN이 주어진다. 이어서 삼각행렬이 하나씩 주어진다. 삼각행렬은 먼저 식별자 문자열 KK와 한 변의 길이 LL이 공백을 사이에 두고 한 줄에 주어지고, 다음 LL개의 줄에 삼각행렬의 값이 공백으로 구분되어 주어진다. 첫 줄에는 값이 1개, 둘째 줄에는 2개, 셋째 줄에는 3개 있고 LL번째 줄까지 이렇게 이어진다. 값이 1개인 첫 줄이 삼각형의 꼭대기이고, 값이 LL개인 LL번째 줄이 삼각형의 밑변이다.

삼각행렬을 모두 준 다음 줄에는 계산할 식이 주어진다. 식의 연산자와 기호는 공백으로 구분되고, 삼각행렬은 식별자 문자열로 나타낸다.

NN이 0이면 입력이 끝난다.

출력

데이터 집합마다 식을 계산한 결과 삼각행렬을 입력과 같은 형식으로 출력한다. 첫 줄에 꼭대기 값을 출력하고 다음 줄부터 각 행의 값을 왼쪽부터 공백으로 구분해 출력하며, 마지막 줄에 밑변을 출력한다. 데이터 집합 사이에 빈 줄을 넣지 않는다.

식을 계산할 수 없으면 Invalid expression을 출력한다. 정의되지 않은 식별자가 나오거나, 후위 표기가 올바르지 않거나, 덧셈에서 두 삼각행렬의 크기가 다르거나, 곱셈에서 앞 삼각행렬이 뒤 삼각행렬보다 크면 계산할 수 없다.