{* 8 levchar 2 widel 80 wides *}
{= 03FFF80 stack =}
!~ {}protectc
{{ inplen level leves wordl word 128 .befch }}
{{ input 0FFFFF output 0FFFFF }}
~pute ( .befch
.+>32 32 :
! 13 : 10 : D0 ) ;
~putc (AC BD+1
B+<#wides : .:befch ++D
? @pute
.+>=32 : .:befch ++D
!
! )CA ;
~putcl (AC C#widel
C+>0 32
[ @putc
]-
! )CA ;
~plev 32 @putc @putcl --C
C>0
[ #levchar @putc 32 @putcl
]-
! ;
~putl (AC level
>0 level >>1 :C @plev
! )CA ;
~nullev level,0
~putlev @pute @putl ;
~putn (AC level +2 :level
>0 level >>1 :C @plev level -2 :level
! )CA ;
~putnel @pute @putn ;
~addlev (AC ++level ++level @putlev )CA ;
~subl level
>0 --level --level
! ;
~sublev (AC @subl @putlev )CA ;
~getsm .'( : .'"
~getsl
[ : .
.<>'"
F+< P
]
! : 32 : ;
~cortop (AF FT --F --F .
.=32 .
.=32 --T
!
! )FA ;
~getw @cortop (CT T#word
`( .='" @getsm !~ ! <<. !
.='" @getsl
?
.=': : .
.='" @getsl
?
.+<=32 32 --F
? --F .
!
!
!
[ : .
.+>32
F+< P
]
!
.=32 :
? 32 : --F
!
!
~! ( T -#word :wordl ) )TC ;
~gets
.<>'! @getw
? .
.+<='! @cortop @putlev (T T#word 02021 :: 2 :wordl )T --F ;
! --F --F . @getw
! ;
~iflet
.+>='a
.+<='z ?A
!
! ;
~cadlev
.<>':
.<>'*
.<>'<
.<>'}
.<>'-
.<>'+ @addlev
!
!
!
!
!
! ;
~tesc .
.<>'] (AF F+wordl F-4 .
.<>'] @addlev
! )FA
! ;
~tescnd .
`< @cadlev
?
`> @cadlev
!
! ;
~tescnp
`< @cadlev
?
`= @cadlev
?
`>
.<>'> @cadlev
!
?
.='+ @addlev
!
!
!
! ;
~tesr .
`.
!
`<
`> @cadlev
? @cadlev
!
?
`= @cadlev
?
`>
.<>'> @cadlev
!
?
.='+ @tescnd
?
.='] @putlev level-2
!
!
!
!
! ;
~tesw .
`( .='" :=level,0 ! <<. !
.='" @pute :=level,0
?
`= @cadlev
?
`< @cadlev
?
`> @cadlev
?
.='+ @tescnd
?
.='! @putlev
?
`?
.+<=32 @putlev
!
!
!
!
!
!
!
! ;
~beflev (F .
`~
.='! @putlev
?
.='? @putlev
?
.='] @sublev
? @pute :=level,0
!
!
!
.?
`:
.='] @sublev
!
.?
.='. @tesw
.?
.='` @addlev
.?
.='+ @tescnd
.?
`{
.='# @putlev
?
.+>='a
.+<='z @nullev
!
!
!
.?
`( .='" @putnel ! <<. !
.='" @putnel
.?
`?
.='~ addlev
?
.='$ addlev
?
.='` addlev
?
.+<=32 @putlev
!
!
!
!
.?
`]
.='- @putlev
?
.<>'} @sublev
!
!
.?
`= @cadlev
?
`<
.<>'.
`>
!
`=
! @cadlev
!
?
`>
.<>'>
`=
! @cadlev
!
?
.='[ @tesc
?
`!
.='~ @addlev
?
.+>32 @tescnp
!
!
?
.+>='A
.+<='Z @tesr
!
!
!
!
!
!
!
.!
.!
.!
.!
.!
.!
.!
.!
.! )F ;
~prdlev (AF F+C --F --F --F . @iflet
!= .
.='( @nullev
?
.=': @nullev
!
!
! )FA ;
~prelev (AF F+C --F --F .
.=':
C+>3 @nullev
!
! )FA ;
~follev (AF --F --F .
.=':
! )FA ;
~aftlev (F F#word .
`]
.<>'} @subl
? @putlev
!
.?
`[
.<>'] @subl
!
.?
`.
.='! @subl
!
.?
`~
.='! @subl
?
.='] @subl
!
!
.?
`!
.+<='! @subl
!
.?
`}
.='} @putlev
!
?
`=
.='} @putlev
!
?
`|
.='} @putlev
!
?
`*
.='} @putlev
!
?
`<
.='} @putlev
!
?
`>
.='} @putlev
!
?
`-
.='} @putlev
!
?
`+
.='} @putlev
!
?
`)
.='} @putlev
!
!
!
!
!
!
!
!
!
!
.!
.!
.!
.!
.! )F ;
~putlew (CF F#word C,wordl @prdlev @prelev @beflev D+C
[ . :
]- @follev @aftlev )FC ;
~main 1 input#readp :inplen F#input T#output PF+inplen
0 :D :level :leves
[
F+< P .
.+>32 @gets BD+wordl
B+<#wides @putlew
? @putnel @putlew
!
?
.=26 :
!~
!
.=13 .
.=10 .
[
.=13 .
.=10 .
]
!
.=13 . @pute .
[
.=32 @putc .
] --F
? --F 32 @putc
!
!
!
!
] 26 :
~! T -#output
( 2 output#writp ;
~promed @entryp :ss SP-128 @lonmed 0 vinit @main 0 @vinit @!returp #}
~! { (P @entryc :ss SP-128 @promod #promed @procep @reamod @!returc
()16384
~~
