먼저 두 그림을 정의합니다.
- S(r,c)는 너비 c, 높이 r인 공백으로만 이루어진 그림입니다.
- Vh는 너비 1, 높이 h인
|로만 이루어진 그림입니다.
표현식 E는 다음 다섯 가지 중 하나입니다.
- 수. E는 다음과 같은 형태이며, eval(E)=nmodp로 정의합니다. n≥0이 주어집니다. h1,h2≥0이고, E의 너비는 L, 높이는 h1+h2+1입니다.
- 괄호. eval(E)=eval(E′)로 정의합니다.
E′의 높이가 1이면, E는 다음과 같으며 너비는 L+2, 높이는 1입니다.
E′의 높이가 H≥2이면, E는 다음과 같으며 너비는 L+2, 높이는 H입니다.
| / | E' (너비 L) | \ |
| VH−2 | | VH−2 |
| \ | | / |
- 루트. E는 다음과 같으며 eval(E)=min{0≤x<p:x4=eval(E′)2modp}로 정의합니다. E의 너비는 L+3, 높이는 H+1입니다.
- 연산. E는 다음과 같으며, op는
+, -, *, / 중 하나입니다. eval(E)=(eval(E1)opeval(E2))modp로 정의합니다. 이때 eval(E1)/0=19981204로 정의합니다. E의 너비는 L1+L2+3, 높이는 H입니다.
- 분수. E는 다음과 같으며 eval(E)=(eval(E1)/eval(E2))modp로 정의합니다. E의 너비는 L+2, 높이는 H1+H2+1입니다.
입력은 위 규칙으로 둘 이상의 parse tree가 생성되지 않도록 주어집니다. 위의 모든 식에서 p=109+7은 소수입니다.