#define EOF char* /* !\ cat >>/dev/null <. Project blog: http://awibiswritteninbrainfuck.blogspot.com/ Repository: http://awib.googlecode.com/ Usage ===== Feed awib brainfuck source code as input and the compiled program will be written as output. Awib is a cross-compiler. The supported target platforms are listed in table 1. By default, the target "lang_c" is chosen. To specify a target platform, insert a line on the form "@TARGET" (without the quotation marks and with "TARGET" suitably replaced) at the very beginning of the source code you wish to compile. Awib will then produce output accordingly. +----------------+--------------------------------------------+ | TARGET | Description | +----------------+--------------------------------------------+ | 386_linux | Linux on i386 | +----------------+--------------------------------------------+ | lang_c | C programming language | +----------------+--------------------------------------------+ | lang_ruby | Ruby programming language | +----------------+--------------------------------------------+ | lang_go | Go programming language | +----------------+--------------------------------------------+ | lang_tcl | Tcl programming language | +----------------+--------------------------------------------+ Table 1 - Available target platforms For instance, the following input would produce an executable hello world-program for Linux: @386_linux ++++++[->++++++++++++<]>.----[--<+++>]<-.+++++++..+++.[--->+<]>-----.-- -[-<+++>]<.---[--->++++<]>-.+++.------.--------.-[---<+>]<.[--->+<]>-. The following would produce a hello world-program in Ruby: @lang_ruby ++++++[->++++++++++++<]>.----[--<+++>]<-.+++++++..+++.[--->+<]>-----.-- -[-<+++>]<.---[--->++++<]>-.+++.------.--------.-[---<+>]<.[--->+<]>-. And this would give you the hello world-program in C: @lang_c ++++++[->++++++++++++<]>.----[--<+++>]<-.+++++++..+++.[--->+<]>-----.-- -[-<+++>]<.---[--->++++<]>-.+++.------.--------.-[---<+>]<.[--->+<]>-. Optimizations ============= Awib is an optimizing compiler: o) Sequences of '-','>','<' and '+' are contracted into single instructions. E.g. "----" is replaced with a single SUB(4). o) Mutually cancelling instructions are reduced. E.g. "+++-->><" is equivalent to "+>" and is compiled accordingly. o) Some common constructs are identified and replaced with single instructions. E.g. "[-]" is compiled into a single CLEAR- instruction. o) Loops known to never be entered are removed. This is the case for loops opened at the very beginning of a program (when all cells are 0) and loops opened immediately after the closing of another loop. Requirements ============ Awib will run smoothly in any brainfuck environment where: o) Cells are 8-bit or larger o) The read instruction ',' (comma) issued after end of input results in 0 being written OR -1 being written OR no change being made to the cell at all. The vast majority of brainfuck environments meet these criteria. Since awib is polyglot, it is also possible to compile and/or run awib directly as C or bash. For instance, using gcc, the following will build an executable file called awib from awib-0.2.b. $ cp awib-0.2.b awib-0.2.c $ gcc awib-0.2.c -o awib.tmp $ ./awib.tmp < awib-0.2.b > awib-0.2.c $ gcc -O2 awib-0.2.c -o awib Using bash works fine, but is very very very slow: $ (echo "@386_linux"; cat awib.b) | bash awib.b > awib $ chmod +x awib Environment =========== Code compiled with awib will execute in an environment where: o) Cells are 8-bit wrapping integers. o) Issuing the read instruction ',' (comma) after end of input results in the current cell being left as is (no-change on EOF). o) At least 2^16-1 = 65535 cells are available. o) Operating beyond the available memory, in either direction, results in undefined behaviour. License ======= This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Mats Linander, 2010-10-03 ]*/ EOF K="\ >>>>>>>>>>>>>>>>>>>>++>>>>+[>[-],+[->+>+<<]>>[-<<+>>]+< [-[>+++++[-<---- \ --->]+<-[-[-[-[--------------[--[-->>+<<[>>-<++[-<----- ---->]+<[--[>+++ \ ++++++[-<++++++++++>]<[-]]]]]]]]]]]<->]>[-<<<->>>]<<<]> >>>[->++++++++++ \ ++++++++++<<<<[-]>>>+[-<,+[-<+<+>>]+<<->[-[---------[-[-- -[>++++[-<---->] \ +<+[-----------[-[-[-[--------------[--[>++[-<--------->] +<--[--[>+++++++ \ ++[-<++++++++++>]<[-]]]]]]]]]]]]]]]+>[-<->]>>[->+<]<<<[-> >>+>->+<[>-]>[>] \ <[-<<->>]<<<<<]>>>]+>[<-]<[<]>[-<<<,>>>>]<<<<+[->+<]>[-<< [<]<<<+>>>>[>]>] \ ++++++++++++++++++++>>>>[-<<<<->>>>]<<<+++++++<<<[<]<<<-> >>>[>]>>[[->+>+< \ <]>[-<+>]+>-[-[-[-[-[-[-[<->[-]]<[->+++++++++[->+ >++++ ++++++++<<]>->[- \ >+>+> +>+>+>+>+>+<<<<<<<<]>>----------->++>-----> ----- -------->+++++++ \ +>---------<<<<<<<<<<]>]<[->+++++++++[->+>++++++ ++++ ++<<]>>[->+>+>+> \ +>+>+>+>+>+<<<<<<<<<]>>----------->++>----->--- --- ------->++++++>+ \ ++++++++>---------->+++++++++++++<<<<<<<<<<<<]> ]<[ ->+++++++++++[-> \ +>++++++++++<<]>>[->+>+>+>+>+>+>+>+>+>+>+<<<<<< <<< <<]>-->--------- \ ---->>------->--------------->++>+++++++++++>++ +++ +>------>+<<<<<< \ <<<<<<<]>]<[->>+++++++[->+++++++<]+++++++>[->++ >++ >++>++>++>++>++< \ <<<<<<]>++++++++++>->++++++++++++>+++++>--->++++ +>++ +++++++++++<<<<< \ <<<<<]>]<[->>+++++++[->+++++++<]++++++++++>[->++> ++>++ >++>++>++>++>++> \ ++>++<<<<<<<<<<]>++++++++++>->++++++++++++>+++++>--->++>+ ++++++++++++++++ \ ++>+++++++++++>+++++++++++>+++++++++++++++++++++++<<<<<<< <<<<<<]>]<[->>++ \ +++++[->+++++++<]++++++>[->++>++>++>++>++>++<<<<<<]>+++++ +++++>->++++++++ \ ++++>+++++>--->+<<<<<<<<<]>]<[->>+++++++[->+++++++<]+++++ ++++>[->+>+>+>++ \ >++>++>++>++>++<<<<<<<<<]>++>+++++++>+++++>--->++++++++++ >+++++++>+++++++ \ +++++>+++++++++++++++++++>+++++++++++++++++++ +++ <<<<<<<<<<<<]<<[ \ ->>+>>-<<<<]>>[-<<+>>]>+>[<++++[->++++<]>[-]] <[- <+<<<<[<]>[[-<+< \ +>>]<[>>[>]>>>>>[>]>+>[<-]<[<]>[-<<[<]<[-]<<< <[< ]<[-]+>>[>]>>>>> \ [>]>>+<]>-<<<[<]<<<<<[<]<-]>>[>]>>>>>[>]>>[[-]<< <[< ]<[-]>>[>]>>]<<+ \ [<]<<<< <[<] >]<<<[[->>+<<] < ]>> >[>] >>>>>[>] \ <[-<] <[ -<<<<[<]<<<<[- ] >>> >> [>]>>[ \ -<<< [ <]<<<<+>>>>>[> ] >>] + >]>]>> \ >[>] <[[ -]< ]<<<<-]<[-]<<[[-]< ]< <<+ [ ->>>> \ +<< <<]>> >> ->>>]<<<+[->>>>>>> +<< <<< <<]> >>>> \ >>- +[[-<+ >] >+<]>[-<<->>]<<[[- >+> +<< ]>[-<+ >]+ \ +++ ++[->- -- ----<]+>-[-[-[-[ --- --- ------- -[- \ -[< +++[- >- ------<]+>-[--[< ->>+ +++ +++[-<++ +++ \ +++ +++++ >] <++[-]]]]]]]]]<< >[-+ +++ ++[-<--- --- \ ->] +<[-[- [ -[-[---------- ----[ --[ --------- -- \ --- ------ -- -------[-->-<< <<<<< [-> >>>+>+<<< << \ ]>>> >>[-<<< << +>>>>>]<<<[->> >+>+< <<< ]>>>>[-<< << \ +>>>>]<<<[->> >+ >+<<< <]>>>> [-<<< <+> >>>]+<-[+[ - \ ]>[-]<]<---[+ ++[ -]>>[ -]<<]< ----- --[ +++++++[-] > \ >>[-]<<<]++++ +++ +>>>[ -<<<[ -]<-< --- <<++>>>]]> [ \ -<<+++<+<<[>> >-< -]>>[ ->>]< <+<<-- --- ---[>>>-<- ] \ >>[->> ]<< +<<- [>>>- <-]>> [->>]< <<< +++++++++> > \ ++++ + ++>[ ->+ <]> [>>>>> +<< <<<[>>+<,[ > \ -]> [>]< [-< <-> >]+<+[> -]> [>]<[-<<-> > \ ]<- >+++ ++ ++ ++[-<-- --- ----->]+<- [ \ >- ]>[ >]<[ - > >>>>+++ +++ ++[-<+++++ + \ ++ >]<[- >++++ < ] <[->+>- <<] >+[-<+>]+> - \ [ <->[-]] <[-<[ - ]<+>>]< <<< ]+<--[>-]> [ \ > ]<[->>> >+<[> -<[->>+ <<] ]>>[-<<+>> ] \ < <->[-<+ <->+++ +++++[-> +++ +++++<]>[- < \ ++++>]< ->]<<< <]++++++ +++ [-<+++++++ + \ ++>]<++ ++[-]> >>>>+<[>- ]>[ >]<<<[[->> > \ +<<<]>> [-]<<] > >>[-<<<+> >>] <<<>>[-<< << \ <<[-]<< ------ - >>>>>>]<< <<< <]]>>>>[- ]> \ [-]<<<] <]>[-<< << <[->>+>+<< <]> >[-<<+>>] <[ \ - >+>>+<< <]>[-<+ >] ++++++++[- >>- -------- --- \ - ---<<]> >+[<<++ ++ ++++[->>++ +++ ++++++++ +++ \ < <]+>>[- ]]<----- -[<[ -]>+++++ + [-]]<[- >>+ \ << ]++++ ++>+>[-< -<-- ----<+>] > >]<]>[ -<< \ << <[- >>+>+<<< ]>>[ -<<+>>]< [ ->+> >+<< \ <]> [ -<+>]+++ +++++ [->>---------------- < <]>>+ \ [<< + +++++++ [->>+ +++++++++++++++<<] + >>[-]] \ <---- -[<[- ]>++++ +[-]]< [->>+<<]+++++>+>[-< -<- ----<+> \ ]>>]<] >[<<<+ +++>>> ->]<]> [-<<<<<[->>+>+<<<]> >[-<<+>>]< [->+>>+< \ <<]>[-<+>]>---[<+++>+++[-]+>[-]>]>[<++++++++++++++++[->----------------<]>+>+<[ \ <<<+>>++++++++++++++++[->++++++++++++++++<]>[-]>-<]>[-<<<<[-]<--->>>]<]]<]>[<<< \ ++>>>->]<]>[-<<<<<[->>+>+<<<]>>[-<<+>>]<[->+>>+<<<]>[-<+>]>-[<+>+[-]+>[-]>]>[<+ \ +++++++++++++++ [->----------------<]>+>+<[<<<+>>+++ +++++++++++++[ \ ->+++++++++++ +++++<]>[-]>-<]>[-<<<<[-]<->>>] <]]<]<<[[->+ \ <]>>+<<]>[-< +>]<<<[[->>>+<<<]>>>>+<<<<]> >>[-<<<+>> \ >]+>--[<->+ +[-]]<[-<<[->>+>+<<<]>>[-< <+>>]<<<< \ [->>>>+>+< <<<< ]>>>>[-<<<<+>>>>]+>----[ ------ -[<->+++ \ ++++++++ [-]]]<[- <-<[-]+<-[>-<[->>+<< ]]>>[-<<+> >]<[-< \ <[-]]]] >>>]<[-]>, +[[-<+>]>+<]>[-<<-> >]<<]<<<<[<< ]<+<< \ +>>>>> [<<<[->>+<<] <[->>+<<]<[->>+< <]<[->>+<<]>>>> >>>[ \ -<<<<< <+>>>>>>]<[- >+<<<<<<<+>>>>>>]+ >-------[-[<->+ ++++ \ +++[- ]]<[-<<>>+<[ >-<[->>+<<]]>>[-<<+ >>]<<->[-<+<->+++ ++++ \ +[->+ +++++++<]>[-<+ +++>]<->]<<>>]>]<[<<[-<<->>>>>+<<<]<< [[- \ >>+< <]>>>>-<<<<]>> >[-<<-<+>>>]<<[[->>+<<]>>>[-]<<<]>>[- <<+ \ >>]< <<[->+>>+<<<]>>[ -<<+>>]>>>[-<<<+<<+>>>>>]<[-<<<<<+>>> >> \ ]<< >>>++++++++[-<++ ++++++>]<[->++++<]<[->+>-<<]>+[-<+>] +> \ -[ <->[-]]<[-<[-]<+ >>]<<<<<[->[-]>[-]>[-<+<+>>]<[->+<] >> \ [- >+<<<+>>]>[-<+>]<< <<<]>>>>>]<<[[->>+<<]>>>+<<<]>>[-<< +> \ > ]<[[->+<]>>+<<]>[- <+>]+>[<->[-]]<<<>>[-<+>>>[>>]>[- ]+< \ < <[<<]]>>]<<<<>>+<[ >-<[->>+<<]]>>[-<<+>>]<<->[-<+<-> +++ \ + ++++[->++++++++<]> [-<++++>]<->]<<>[>>+<]>[<]<<[[->> +<<] \ >>>+<<<]>>[-<<+>>] >[[-]<+>]<<<>>[->>>[-]+<<<]<[-] <[-] \ <[->+<]<[->+<]>>>> >>>[-<<<<+>>>>]<<<<<<<<<[<<]>+> [>>]> \ >>[-<[-]<[-]<<<[<< ]>->[>>]+++++++++++[->++++++>+ ++++++ \ +++>+++<<<]>+++.>+ +++..---.+++.<-----------.>>- .<+++. \ -------.---------- --.-.+++++++++++.----------- .+++++++ \ ++++++.----------- .++.-.>.<--.+++++++++++++++ +.------- \ ----------.++.++++ ++++.------.++++++++++++++ +.-.>+.--- \ [--->+<]>.[-]<<[-] <[-]>>>]<<<<<[<<]>[<<[-[- [-[-[-[-[- \ [[-]>>-<<]>>[-<+++ ++++>]<<]>>[-<++++++>]<<] >>[-<+++++ \ >]<<]>>[-<++++>]<< ]>>[-<+++>]<<]>[[->+<]>[-< <<<<<<<<< \ <<<<<<<+>>>>>>>>>> >>>>>>>]>[>>]>[-]>[-]<+++++ +++[-<++ \ ++>]<[<<]>++++++++ [-<++++>]<-[[-<+<+>>]<<<<<<< <<<<<<< \ [->>+>>+<<<<]<[->> +>>+<<<<]<[->+>+<<]+>---[-[-[- [-[<- \ >++++[-]]<[->>>>>> >>>>>>+>>-[-[-[-[-[-[-[-[-[<<-> >[-< \ +>]<+>]<+>]<+>]<+> ]<+>]<+>]<+>]<+>]<+>]<+<[-<<<<+ +++ \ [-<++++++++>]<.... <[->....<]<[->++++++++++++++++[- >. \ .................. ................................. . \ ...........<]<]>>[ -]>>>>>]<<<<<<<[-]>[-]>>>>>>+>-[-[ - \ [ -[-[-[-[-[-[------ -------[--[--[-[-----[-[<->++++++++ \ + ++++++++++++++++++ ++++++[-]]<[-++++[->++++++++<]>.... \ -- -[-<++++>]<--.---- ---------.+++++++++++++++.+.---.---- \ .- -[--->+<]>----.[-- <+++>]<.[---->+<]>--.++++[-<++++++++ \ +>] <-.+[--------->+ <]>----.++++[-<++++++++>]<++.+++.--- \ --- -.--[--->+<]>--- -.---[-<++++>]<-.+.----------------. \ +++ ++.+++++.--[---> +<]>----.---[-<++++>]<-.+.---------- \ ---- --.+++++++++++ .++++++.-.+[---- ----->+<]>---.[-]<]> ] \ <[-+ ++++[->+++++++ <]>. --.-[--< +++>]<-.-[-->+++++<] > \ ++.-- .-.+[-----<++> ]<+. ++[->+ +<]>.+++++++.+++++ .[ \ ----- <++>]<+++.-[ --> ++++ +<]>+.---------- --- \ ----.+ ++++++++.+++ +++ +.- ----------.[--- --- \ --<+>]< ---.[->+++ ++++ +++< ]>++.---.++++ ++++ \ ++++.-. --------.+ ++.- -.++++ +++++++++ +.--- \ .-------- -----. --[--- <+>]<-. ---[- >++++< \ ]>-.+.---- ---- ------- -.++++++ +++++.+ \ +++++.-.[-- --<+>]<++ +.--[-->++ +<]>.+++ \ ++[-<++>]<+. +++++++++. -----------. ++++++++++ \ ++.---------- -.+++++.++++ +.-------.-[--- >+<]>--.[-<+ \ ++>]<++.+++++++ .+++++.-------- -----.+++++++++++++++++.+++++++.[------- \ ---->+<]>-.[-<++++++++++>]<++.---.++++++++++++.-.--------.+++.--.++++++++++++++ \ .---.-------------.--[--->+<]>-.---[-<++++>]<-.+.----------------.+++++.+++++.- \ -[--->+<]>----.--[--<+++>]<.+++++[->++<]>+.+++++++++.-----------.++++++++++++.- \ ----------.+++++.+++++.-------.-[---<+>]<--.[->+++<]>++.+++++++.+++++.--------- \ ----.+++++++++++++++++.+++++++.[-----------<+>]<-..++++[->++++++++<]>.++.---.-- \ ----------.[---<+>]<-.---[->++++<]>--.+++.-------.--[---<+>]<----.-[->++++<]>-. \ ------------------.+++++.--[---<+>]<----.+++++[->+++<]>.++++++.-.+++++++++.-[-- \ --<+>]<+.-[->++++<]>-.--[-----------<+>]<-.[->+++<]>++....---[-<++++>]<-.------ \ --------.+++++++++++++++.[---->+<]>+++.----[-<++++>]<.[---->+<]>++++.[--<+++>]< \ .[---->+<]>--.[-<+++>]<++....---[->++++<]>-.--------------.+++++++++++++++.[--- \ -<+>]<+++.++++[->+++<]>+.--------.++++++++.-[---<+>]<----.-[->++++<]>-.---[---- \ -<++>]<.++[-->+++++<]>.+[---------<+>]<----.[->+++<]>++....++[-<+++>]<.++++++++ \ +.+++.[--->+<]>------.-[-<++++>]<-.--------.--------------.+++++++++++++++.[--- \ ->+<]>+++.+++[-<+++>]<.[--->+<]>---.[--<+++>]<.++[-->+++++<]>.-[----<+>]<+.-[-> \ ++++<]>-.[---<+>]<-----.-[->+++<]>.[-------<++++>]<.------------.[-->+++++<]>.- \ -----------------....--[----<+++++>]<.-[---->+<]>+.-[-<++++>]<-.--------------- \ ---.+++++.-----------.+++++++++++++++.[--->+<]>------.+++[-<+++>]<.[----->+++++ \ +<]>-.-[----<+>]<+.-[->++++<]>-.---------------.-----------.+++++++++++++++..-- \ ---------.+++++++++.----------.-[---<+>]<-.++++[->+++<]>+.--------.++++++++.-[- \ --<+>]<----.[-->+++<]>.++[--<+++++>]<.+[--------->+<]>----.[-]<]>]<[-++++++[->+ \ ++++++++++++++<]>+++.---[---------<+>]<.[-]]>]<[-++++++[->+++++++++++++++<]>+++ \ .---[---------<+>]<.[-]]>]<[-+++++[->++++++++<]>+.---------.+++++.-----.[--<+++ \ >]<++.+++.+.[--->+++++<]>+++.---[---------<+>]<.[-]]>]<[-+++++[->++++++++<]>+.- \ --------.+++++.-----.[--<+++>]<++.+++.+.[--->+++++<]>+++.---[---------<+>]<.[-] \ ]>]<[-++++++[->++++++++++++++++++<]>.+++++++.--------------.+++++++++++++++.[-- \ --<+>]<+++.++++[->+++<]>+.--------.++++++++.-[---<+>]<----.++++.+[->+++<]>+.[-- \ --<+>]<++++.[-->+++<]>.[----<+>]<--.[-]]>]<[-++++++[->+++++++++++++++++++++<]>- \ .+[---------<+>]<----.[-]]>]<[-++++++[->++++++++++++++++++++<]>-.-------------- \ -.+.+++.-------.--[---<+>]<-.-[->++++<]>-.+[----<+++>]<--.+++++++++++++++++.--- \ .+++++.----------.+.-[----->++++++<]>.[----<+>]<++.++++.[->+++<]>+.--------.+++ \ +++++.-[---<+>]<----.++++.+[->+++<]>+.+++[-----<++++>]<+.[--->+<]>+.+.--[-<++>] \ <-.+[-->+<]>+.[--<+++>]<.++[-->+++++<]>.-[----<+>]<+.-[->++++<]>-.--[---------- \ -<+>]<-.[-]]>]<[-++++++[->++++ ++ +++++++++++++<]>+.--------------.+++ \ ++++++++++++.[----<+>]< +++.----[->++++<]>.[----<+>]<+++ \ +.--[->+++<]>+.+++++ +++ ++.-[-----<++++++>]<.------ \ --.++.[--->+<]>--- ---.++ ++.+[-<+++>]<+.--[----- \ >++<]>-.[-]<]>]<[ -++++++[ ->+ ++++++++++++++++++<]> \ +.------------- -.++ +++++++++++ ++.[----<+>]<+++.--- \ -[->++++<]>.[ - -- -<+>]<++++.--[->++ +<] >+.++++++++++.-[-- \ ---<++++++>]<.-- ---- --.+ +.[--->+<] >--- ---.++++.+[-<+++>] \ <+.--[----->++ < ]>+.[-]<]>] <[-++++++[->+++++++++ \ ++++++++++<]> --.+++++.-.- .+[----<+>]<+++.--[ \ -->+++<]>.-[- -<+++++>] <.+.-.---------.++ \ ++++++++++++++ ++.---- -------.---.+++++ \ .---------.-- [- -->+<] >-.++++.+[-<+++> \ ]<.++++++.- .[- --->+ <]> +++.--[-<+++>]< \ +.++++++++ +++ .+++ +++ + ++.+ ++.-----.------ \ ------.++ +++ +++++ +++++++++.[ ---- >+<]>+++.+++++.- \ ---[-<++ +>]< .[---> +<]>-.--[-<++ +>]<+.+++++++++++++ \ ++++.-- -.+ ++++.- -- -------. +.-[--- -->++++++< \ ]>.[--- -<+ >] <++. ++++ .[->+++<]>+.- - ------.+++ \ +++++. -[ --- <+>]<---- .++++.+[->+++ < ]>+.+++[--- \ --<+++ +> ]<+..---[-- -- ---- ->+<]>.[-]<] \ >]<[-++ + +++[->++++ +++++ +++++ ++++<]>.+++++ \ ++.--- ---- -------.+ +++++++++++++ +.[----<+>] \ <+++. ++++[ ->+++<]>+ .-------- .++++++++. \ -[--- <+>]< ----.++++ .+[ ->+++<]>+ \ .[--- - <+>]<++++.--[-> +++<]>+ .++ ++++++++ \ .-[-- --- <++++++>]<.--- -----. ++.[ --->+<]> \ ------ .++ ++++++.+++++[ -<++> ]<+. ++++++++ \ +++++++ ++ .---.+++++.- - ---- -- - -.+ .-[----- \ >++++++< ]> .[----<+>]<+ + .++++. [-> +++ <]>+.---- \ ----.+++ ++ +++.-[---< +> ]< ----.++ ++.+ [->+++<]>+ \ .+++[--- --< ++++>]<+ .[- -->+< ]>+.--[- -<+++ >]<.[-]]>]< \ [-++++++[->+ +++++++ +++++ ++++++< ]>+ .------- ---- ---.+++++++ \ ++++++++.[- ---<+ >]<+++. +[->+++< ]>.[- --< +>]<- .--[->+++<]>+.+ \ [----<++++ +>]<- .------- ------.---- .+++ .-[- -->+ <]>-.++++.-[-<+ \ ++>]<.+++ ++.-- [ --->+<]>-- --.[--<+++> ]<+ .--[-> ++ <]>-.[---<++>]< \ ---.---- - -[- > ++<]>-.---.[---<+>]<--. - [->++++<] >-.+[----<+++>]< \ --.+[--- - >++ ++ +<]>.+.--.---------.+++ + +.-------.-[ ---<+>]<--.+++ \ +[->+++<]> .-- -- ---.++++++ +++.------ - .+++++++++++++ .----------- \ -.--[---< +>] <- -.++++.-- -[->+++<] >. ------.[---<++ >]<-..----- \ -------.+ [- -> +++++<]> .-[----<+ >]< +.-[->++++<]>- .--------- \ ------.++ ++ +++ .- --------- ----.+++++ ++++++++++.[----< +>]<+++.+ \ +++[->+++ <]> +.---- ----.++++++++.-[---<+ >]<----.++++.+[-> +++<]>+.[ \ ----<+>]<+ +++. --[->++ +<]>+.+[----<+++++> ]< .--------------- -.--.+++++ \ ++++++++.- -[-- ->+<]>- ---.++++.---[-<+ ++> ]<.[--->+<]>-.+ ++++.----[- \ <+++>]<.--- ---.[ --->++++ <]>+.+[---- ----- <+>]<----.[- ]]>]<[-+++++ \ +[->++++++++ ++++ ++++++<]> .+++++++ .------- -------.+++++ \ ++++++++++.[- ---< +>]<+++.++++ [->+++<]>+.--- -----.++++++++. \ -[---<+>]<---- .++ ++.+[->+++<]>+.[----<+>]<++++.--[- >+++<]>+.++++++++ \ ++.-[-----<++++ ++> ]<.--------.++.[--->+< ]>- -----.++ ++++++.+++++[-<++>] \ <+.++++++++++++++++ +.---.+++++.------ ----.+ .-[--- -->++++++<]>.[----< \ +>]<++.++++.[->+++ <]>+.--------.+ +++++++ .-[-- -<+>]<----.++++.+[-> \ +++<]>+.+++[-----< ++++>]<+.[--- >+<]>+.++ +++ ++++++.[-]<]<<<<<<<<< \ <<<]>]<[->>>>>>>> >>>>+>>-[-[ -[-[-[-[-[- [-[ <<->>[-<+>]<+>]<+>]<+ \ >]<+>]<+>]<+>]<+ > ]<+>]<+>] <+<[-<<<<++++[ -<+ +++++++>]<....<[->... \ .<]<[->+++++++++ ++ + ++++[-> ................. ... ..................... \ ................... . ...<]< ]>>[-]>>>>>]<<<<<<< [-] >[-]>>>>>>+>-[-[-[-[ \ -[-[-[-[-[-------- -- ---[- -[--[-[-----[-[<->++++++ + +++++++++++++++++++ \ +++++++[-]]<[-++++ ++ [->++ +++++++++ ++++++<]>-.+++ ++ ++++.----------.[- \ ---------<+>]<.+++ +[- >++++++++<]>++ .+++.-------.+[ -- -<+>]<+++.+[->++< \ ]>+.+.+[-----<+++ +>] <.+++++.+++++. [-->+<]>+++++.-- -- --------.----[-< \ +++>]<-.+.+[---- ->+ +++<]>.++++++++ +++.++++++.-.[--<+ >] <-.-[---->+<]>. \ [-]<]>]<[-+++++ [-> +++++ ++<]>.--.- [--<+++>]< -.-[--> +++ ++<]>++.--.-.+ \ [-----<++>]<+.+ +[- >++<] >.+++++++.+++++.[-----< ++>]<++ +.- [-->+++++<]>- \ .+++.--------- --- ----- --.--[----<+++++>]<+.[- -------- --> +<]>-.[-<+++ \ +++++++>]<.+. +.[- -->+< ]>--.---[-<++++>]<--.++ +.------- .+[- -->+<]>+++. \ -----[-<+++ >]<. ++++ +.---------------.-[- ->+<]>--- .- --- --------.+ \ ++++[-<+++ >]<.++ ++++. -.+[--->+<]>++.-[--- -<+>]<.[->++ +< ]>+ +....++++ \ [-<+++> ]<+.+[- ->+<]>++++++.-[--<+++>]<+ .+[-->+<]>++. -[ -<+ +>]<-.-[- \ ->+<]>----.++++++. [--<+++++>]<.------------ ------....--[-- -- ->+ ++<]>-.- \ --[-<++>]<.[-->+< ]>++++ +.-------------.+++++++++++.+[----- -< +>] <.[-]]>] \ <[-++++++++++.[-] ]>]<[-++ ++++++++.[-]]>]<[-+++++[->++++++++< ]> +.- ---.++++ \ +++++++.[--<++++ +>]<.[--- -->++<]>+.-.. [-]++++++++++.[-]<]>] < [-+ ++++[->+ \ +++++++<]>+.---- .++++++++++ +.[--<+++ ++>]<.[----->++<]>+.-.. [- ]+++++++ \ +++.[-]<]>]<[-++ ++++[->+++++ +++++++++++++<]>+.------ -- --------- \ -.+[----<+++++>] <---.+++[---- ->++++<]>+.[---<++>]<-.-- -- ---------. \ [---->+<]>--.[-] <]>]<[-++++++[ ->+++++++++++++++++<]>-.+ ++ ++++++.---- \ ------.[-------- --<+>]<.[-]]>]< [-++++++[->++++++++++++++ + +++++<]>-.-- \ -------------.+. +++.-------.--[-- -<+>]<-.++++[->+++<]>+.--- ------------- \ --.+[----<+++++> ]<---.+++[----->+++ +<]>+.[---<+>]<++.--[->++< ]>-.--------- \ ----.[----<+>]<- -.[-]]>]<[-++++++ [->+++++++++++++++++++<]>- -.--[-----<++> \ ]<-.-[-->+++<]>-- .[-]<]>]<[-++++++ [->+++++++++++++++++++<]>- -.--[-----<++> \ ]<+.[--->++++<]>+ .[-]<]>]<[-++++ ++[->++++++++++++++++++<]> +++.++++++.-.-[ \ -----<++>]<.++[--> +++++<]>-.----- .---------.+++++++++++.-- -------------.-[ \ -----<++>]<.------ ..----[->++<] >..-----[-<++>]<-.------- -----------.+[--- \ ->+++++<]>---.+++[- ----<++++>]<+ .-[-->+<]>-----.-[----<+ >]<.[-]]>]<[-+++++ \ +[->+++++++++++++++ +++<]>+.--- ---------------.+[----<+ ++++>]<---.+++[---- \ ->++++<]>+.[---<++>] <-.-[--->++ <]>.----[-<+++>]<+.---- --------------.+[--- \ ->+++++<]>---.+++[-- ---<++++> ]<+.-[-->+<]>-.[-]<]>]< [-++++++[->++++++++++ \ ++++++<]>+++.[---<++> ]<-----.+ +[--->+++++<]>.+++++.- --------------.-[--<+> \ ]<-.[-->+++++<]>-.--- ------- ---.----.+++.[-----<++ >]<.+++++++++.--------. \ -[-->+++<]>-.----[-<++ >]<-.- -----------------.+[- --->+++++<]>---.+++[---- \ -<++++>]<+.[--->++<]>- .-[-- -<+++++>]<-.--------. +[-->+<]>++.-[-<++>]<-.[- \ -->+<]>+.---[-<++++>]<+ .--- ----.--.-------.++++ ++++++++++..+[---->+<]>+++ \ .+[-<+++>]<.[--->++<]>- --- -..------[-<++>]<.-- ---.+++.[--------->+<]>--.[ \ -]<]>]<[-++++++[->++++++ ++ ++++++++++<]>+.---- --------------.+[----<+++++> \ ]<---.+++[----->++++<]>+ . [---<++>]<-.-[--->+ +<]>.----[-<+++>]<+.--------- \ ---------.+[---->+++++<]> ---.+++[-----<++++ >]<+.-[-->+<]>---.[-]<]<<<<<<< \ []>[]>[]>[]>[]>[]>[]>[]>[ ]>[]><<<<<<<<<<<<< <<]>]<[->>>>>>>>>>>>+>>-[-[-[-[ \ -[-[-[-[-[<<->>[-<+>]<+>]< +>]<+>]<+>]<+>]<+ >]<+>]<+>]<+>]<+<[-<<<<++++[-<++ \ ++++++>]<....<[->....<]<[ ->++++++++++++++ ++[->............................ \ ......................... ...........<]<] >>[-]>>>>>]<<<<<<<[-]>[-]>>>>>>+>- \ [-[-[-[-[-[-[-[-[-------- ---- -[--[--[- [-----[-[<->+++++++++++++++++++++++ \ ++++++++++[-]]<[-++++++++ ++[- >++++++ ++++<]>+++++.---.<++++[-<++++++++> \ ]<.>>-------..++++++++++++ +++.------- - -----.++++++++++++.--------.------ \ ..<<--[->++<]>+..-[--<+>]< +++ +.>>..+ + + +++++++++++.------------.++++++++. \ +++++.---------------..<<.- -- -[->++< ] >--.<++++++++++.[->---<]>++++....> \ +++++++++++++++++++.+++.--- -- --.<++++ + +++.>+++++.++++++.------.<++++++.> \ .+.----------------.+++++.+ ++ ++.<.>++ + +.-------------.----.+++.<--.>++++ \ +++++++++++.++++++.------.<+ +. >.+.----- - ----------.+++++++++++.++++++.-.< \ .>+++.-----.---------.++++++ ++ +++.------ - --------.[-]<-----.-[---->+<]>.[ \ -]<]>]<[-++++++++++[->++++++ +++ +<]>+++++.+ +++.+++.-.+++.++.++++++++++++[-- \ --<+>]<.[->++++<]>---------- ---.++++++.---- --.<++++++++++.>---------------. \ +.+.<[-<+++>]<++.>>+++++++++ +++.+++.-------. <<++++++++.>>-----.<<++++.>>+++ \ +++.<<---.+++++++++++++++++. ++[------>+<]>.[ -<+++>]<++....>>--.<<[->++<]>-- \ -.>------------------.<----- --------.>++.<-- ----.++++++.>+++++++++++++++++ \ ++++++++++.------------------ ....<+++++++++++ .++>++++++++++.[-]<.---------- \ ---.++[----->+<]>.[-]<]>]<[-+ +++++++++.[-]]> ]<[-++++++++++.[-]]>]<[-+++++[ \ ->++++++++<]>+.----.+++++++++ ++.[--<+++++>]< .[----->++<]>+.-..[-]<]>]<[-++ \ +++[->++++++++<]>+.----.+++++ ++++++.[--<++++ +>]<.[----->++<]>+.-..[-]<]>]< \ [-+++++++++++[->++++++++++<]> -.------------- -----.+++++++++++++++++++++.-- \ -----------------.[---<++>]<-. -------------. [-]++++++++++.[-]]>]<[-+++++++ \ +++.[-]]>]<[-++++++++++++[->++ ++++++++<]>-. ---------------.+.+++.-------.- \ [----------<+++>]<++.--[--->++ +++++++++<]>- .------------------.+++++++++++ \ ++++++++++.------------------- .---[---<++> ]<--.[-]++++++++++.[-]]>]<[-++++ \ ++++++[->+++++++++++<]>++.----[ ------------ <+++++>]<--.++[--->++++<]>+.[-]< \ ]>]<[-++++++++++[->+++++++++++< ]>++.----[-- ----------<+++++>]<.[--->++++<]> \ +.[-]<]>]<[-++++++++++[->++++++ +++++<]>+.- [-----------<++++>]<.[-->+++++<]> \ -.+++++.++++++++++.----[------- ----<++++> ]<.[-->+++++<]>+++++++++.-------- \ ----------.++++++++++++++++++++ +.-------- -----------.---[---------<++++>]< \ +..-[---->+<]>.[-]<]>]<[-+++++++ +++[->+++ ++++++++<]>-.------------------.++ \ +++++++++++++++++++.------------ -------. [---<++>]<-.-[--->++<]>.[-<+++>]<- \ ----------.------------------.++ ++++++++ +++++++++++.-------------------.-- \ -[-->+<]>.[-]<]>]<[-++++++++++[-> ++++++++ ++<]>-.<<<++++++++[->+++++>+++++++ \ +<<]>>---.>++++++.<<.+++++++++.-- ------ .>--.>++++.------------------.+++++ \ ++++++++++++++++.---------------- ---.<+ +.>++++++.<<---------.>>--.++++++++ \ +++++.----------.<<.>>+++++++++++. +++.-- ------------.<<++++++++.>>-.<<+.--- \ ------.>>++++++++++++.+++.<<.>>--- --.--- ---------------.+++++++++++++++++++ \ ++.-------------------.[-]<[-]<[-]> +++++ +++++.[-]]>]<[-++++++++++[->+++++++ \ ++++<]>-.------------------.+++++++ +++++ +++++++++.-------------------.[---< \ ++>]<-.-[--->++<]>.[-<+++>]<------- ----. - -----------------.++++++++++++++++ \ +++++.-------------------.---[-->+< ]>--. [ -]<]<<<<<<<<<<<<]>]<[->>>>>>>>>>>> \ +>>-[-[-[-[-[-[-[-[-[<<->>[-<+>]<+>] <+>]<+ >]<+>]<+>]<+>]<+>]<+>]<+>]<+<[-<<<< \ ++++[-<++++++++>]<....<[->....<]<[ - >++++++ ++++++++++[->..................... \ ................................. ... ...... .<]<]>>[-]>>>>>]<<<<<<<[-]>[-]>>>> \ >>+>-[-[-[-[-[-[-[-[-[---------- ---[ --[--[ -[-----[-[<->+++++++++++++++++++++ \ ++++++++++++[-]]<[-++++++[->+++ +++++ +++++++ ++++++<]>-.+[---------<+>]<----.[ \ ->++++++++++<]>++.++++++++++++ +++.-- -----.- ----------.[---<+>]<-.++++[->+++ \ <]>+.------------.++++++++.+++ ++.+[-- -<+>]<++ +.+.[->+++<]>.--[-----------<+> \ ]<-.[->+++<]>++..---[-<++++>]< --.+++. -------.+ [--->+<]>+++.---[-<+++>]<.++++ \ .[----->++<]>.----[-<++>]<-.-- - --[-- >+++<]>-.- ---------------.+++++.+++++.[ \ -----<++>]<.------------.+++++ [ - >+ ++<]>.++++ .[-----<++>]<.----[->++<]>-.- \ ----[--<+++>]<-.--------------- - .+ ++++++++++ .++++++.-.+[--->+<]>++.-[---- \ <+>]<.++++[->+++++++++<]>-.+[--- -- ----<+>] < ----.[-]]>]<[-++++++[->++++++ \ +++++++++++++<]>--.-------------- - .++. + + ++++++.----------.++++++.--.- \ -[---<+>]<-.++++[->+++<]>+.------------ .+++ + ++++.+++++.[-----------<+>]<.+ \ ++[->++++++++<]>+.++++.+++.-.+++.++.[--- -<+> ]<+++.++.+++[->+++<]>.++++.-[-- \ -<+>]<----.-[--->+<]>-.[-<++++++++++>]<++ .+ ++++++++++++++.-------.--------- \ --.[--->+<]>-.---[-<++++>]<--.+++.-------. +[--->+<]>+++.-----[-<+++>]<.++++ \ +.--[--->+<]>----.++++++++++.-----[-<+++>]<.++++.[----->++<]>.[--<+++>]<+.[-->+ \ ++<]>.+++.-------.-[--<+>]<------.------------.+++++[->+++<]>.++++++.-.[----<+> \ ]<+++.++++++++++.-----[->+++<]>.++++.[-----<++>]<.[-->+++<]>+.[--<+++>]<.+++.-- \ -----.-[----->++<]>+.[-<+++>]<.--[----------->+<]>-.[-<+++>]<++..--[->++++<]>-- \ .++[-----<++++>]<+.+++++++++++++++++.[--->+<]>------.++++[-<+++>]<+.----------- \ -------.+[-->+<]>++.[--<+++++>]<.------------------....---------.+++++.--[----> \ +++++<]>+.-----.---------------.-[----------<+>]<.[->+++<]>++..--[-<++++>]<--.+ \ +[----->++++<]>+.+++++++++++++++++.[---<+>]<------.----[->++++<]>.[----<+>]<+++ \ +.+++[->+++<]>.+++++.++++++.+[---------<+>]<---.[->+++<]>++..++++[-<+++>]<+.--- \ ---------------.+[---->+++++<]>---.+++[-----<++++>]<+.[--->++<]>-.------------- \ .[----<+>]<--.[-]]>]<[-++++++++++.[-]]>]<[-++++++++++.[-]]>]<[-++++++++++.[-]]> \ ]<[-++++++++++.[-]]>]<[-++++++[->++++++++++++++++++<]>+.------------------.+[-- \ --<+++++>]<---.+++[----->++++<]>+.[---<++>]<-.-------------.[---->+<]>--.[-]<]> \ ]<[-++++++[->+++++++++++++++++++++<]>-.+[---------<+>]<----.[-]]>]<[-++++++[->+ \ ++++++++++++++++<]>.+++++++++.+++.[---<+>]<------.++++[->+++<]>+.-------------- \ ----.+[----<+++++>]<---.+++[----->++++<]>+.[---<+>]<++.--[->++<]>-.------------ \ -.[--<+++++>]<+++.--[----------->+<]>-.[-]<]>]<[-++++++[->+++++++++++++++++++<] \ >--.--[-----<++>]<-.-[-->+++<]>--.[-]<]>]<[-++++++[->+++++++++++++++++++<]>--.- \ -[-----<++>]<+.[--->++++<]>+.[-]<]>]<[-++++++[->++++++++++++++++++<]>+++.++++.[ \ -----<++>]<.----[->++<]>-.-----[--<+++>]<-.----------------.+++++++++++.++++++. \ -.-[----->++<]>.--[-<++>]<-.[--->++++<]>--.---------.+++++++++++.-------------- \ -.-[-----<++>]<.----[->+++<]>+.------------------.+[----<+++++>]<---.[-->+<]>++ \ .--[-<++>]<.--[----->++<]>-.++++++.--[-<++>]<-.-[-->+<]>-----.-[----<+>]<.[-]]> \ ]<[-++++++[->++++++++++++++++++<]>+.------------------.+[----<+++++>]<---.+++[- \ ---->++++<]>+.-[--<+>]<-.[--->++++<]>+.[-]<]>]<[-++++++[->++++++++++++++++++<]> \ +++.++++.[-----<++>]<.----[->++<]>-.-----[--<+++>]<-.----------------.+++++.+++ \ ++.[----->++<]>++.-----[-<++>]<.--[---->+++++<]>+.----.+++.[-----<++>]<.----[-> \ +++<]>+.------------------.+[----<+++++>]<---.[-->+<]>++.--[-<++>]<.--[----->++ \ <]>-.++++++.--[-<++>]<-.-[-->+<]>-----.-[----<+>]<.[-]]>]<[-++++++[->++++++++++ \ ++++++++<]>+.------------------.+[----<+++++>]<---.+++[----->++++<]>+.-[--<+>]< \ ---.-[-->+++<]>--.[-]<]<<<<<<<<<<<<]>]<[->>>>>>>>>>>>+>>-[-[-[-[-[-[-[-[-[<<->> \ [-<+>]<+>]<+>]<+>]<+>]<+>]<+>]<+>]<+>]<+>]<+<[-<<<<++++[-<++++++++>]<<[->..<]<[ \ ->++++++++++++++++[->................................<]<]>>[-]>>>>>]<<<<<<<[-]> \ [-]>>>>>>+>-[-[-[-[-[-[-[-[-[-------------[--[--[-[-----[-[<->+++++++++++++++++ \ ++++++++++++++++[-]]<[-++++++++++++++++++++++++++++++++++++++++++++++++++++++++ \ ++++++++++++++++++++++++++++++++++++++++++++++.+++++++++..+++++.--------------- \ .+++++++++++++.>++++++++++.[-]<[-]]>]<[-+++++++++++++++++++++++++++++++++++++++ \ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++.---.----.+++. \ +.+++++++++++++.>++++++++++.[-]<[-]]>]<[-++++++++[->+++++<]>+.-[----<+>]<.[-]]> \ ]<[-++++++++[->+++++<]>+.-[----<+>]<.[-]]>]<[-++++++++[->+++++<]>+.-[----<+>]<. \ [-]]>]<[-++++++++[->+++++<]>+.-[----<+>]<.[-]]>]<[-++++++[->+++++++++++<]>+.+++ \ ++++++.-------.----.+++++++++++++++++.--[--------<+>]<.[-]]>]<[-+++++++++++[->+ \ +++++<]>+.+++++++++.+++.++++.--------------.+[-------<+>]<.[-]]>]<[-++++++++[-> \ ++++++++++<]>-.+.-----------.+++++++++.++[--------<+>]<.[-]]>]<[-++++++++[->+++ \ +++++++<]>++.---------.--.+.++++++++++++.----[--<+>]<.[-]]>]<[-++++++++[->+++++ \ +++++<]>----.-------.+.++++++++++++++.----[--<+>]<.[-]]>]<[-++++++++[->++++++++ \ ++<]>-.++++++.-.----.+++++.-.----[--------<+>]<.[-]]>]<[-++++++++[->++++++++++< \ ]>+++.++.+++[----<+++>]<.-[----->+++<]>+.[----<+>]<-[-]]>]<[-++++++++[->+++++++ \ ++<]>+.+++++.++.+++++.-.----[--------<+>]<.[-]]>]<[-++++++++[->++++++++<]>+.+++ \ ..++[--<+>]<+++++.[-]]<<<<<<<<<<<<]>>>>>>>>>>>>>>>><[->+<<+>]++++>-[<->--[<->-- \ [<->-[<->++++++[-]]]]]<[[-]>>[-<<<<+>>>>]<<<<<<+[->[-]>[<+>-[<+>-[<+>-[<+>-[<+> \ -[<+>-[<+>-[<+>-[<+>-[<[-]<<<+>>>>-[<<+>>[-<<<+>>>]]]]]]]]]]]]<<<[->>>+<<<]>]>[ \ -<<<<+>>>>]<<<[[->>>>+<<<<]>>+[->[-]>[<+>-[<+>-[<+>-[<+>-[<+>-[<+>-[<+>-[<+>-[< \ +>-[<[-]<<<+>>>>-[<<+>>[-<<<+>>>]]]]]]]]]]]]<<<[->>>+<<<]>]<<[>++++++[-<+++++++ \ +>]<.[-]]>>++++++[->++++++++<]>.[-]<<<]++++++[-<++++++++>]<.[-]>>>>>>>]>+<<-[-[ \ -[-[-[-[-[-[-[[->+<]>>-<<]>+<]>+<]>+<]>+<]>+<]>+<]>+<]>+<]>+>[+++++++++++++++++ \ ++<[->+<<<<<<<<<+>>>>>>>>]<<<<<<<<<+>-------[-[<->++++++++[-]]<[-<<<>>+<[>-<[-> \ >+<<]]>>[-<<+>>]<<->[-<+<->++++++++[->++++++++<]>[-<++++>]<->]<<>>>]>]<[-<<<>>> \ ++++++++[-<++++++++>]<[->++++<]<[->+>-<<]>+[-<+>]+>-[<->[-]]<[-<[-]<+>>]<<>>>]< \ <<<[-<<+>>]>[-<<+>>]>[-<<+>>]>>>>>>>>>>]<[-]>>>]]<>>[+--<<<<<<<<+++++++++++++++ \ +++++[->+++>++>+++++>+++++>++++++<<<<<]++++++++++>>----->>++++++++++<<.>+++++.> \ .<------.+>--.+++++++++.<.+.<---.+++<.>>>--.+.<-.+++++.>-----.-<<+++++++++++.-- \ --------->-.----<<++.--<.>>>>>>+++++++++[<<<<.>.+.+.+++.>.<----.<---.>.>>>>++++ \ ++[-<++++++++>]<.>++++++[-<-------->]<<<<<++++++++.>>>.<<<+.---------.+++>->>>[ \ ->+>+<<]>[-<+>]+>-[-[-[-[-[-[-[-[-[<->[-]]<[-<<<<<+++++++.>>++.--<<<+.>++++++.- \ ------------<--.+<.>>>>>>>]>]<[-<<+++++.----->++.-->]>]<[-<<-.<<++++.+.>--.++<- \ ---.-<+++++.++.>>++.--<<-.------>>>++++.--->+++.--->]>]<[-<<<++.--<<++++++++.-- \ ------<+.>>>>.<<<<--.+<.>>>>>>>]>]<[-<<<++.--<<++++++++++.----------<+.>>>>.<<< \ <--.+<.>>>>>>>]>]<[-<<<++.+++++.-.<-.+++++.-------.+++>--.<<+++++.++.>>--.--<<- \ .------<-.+<.>>>>>>>]>]<[-<<<<<+++++++.>>++.--<<+++.----------<+.>>>>.<<<<--.+< \ .>>>>>>>]>]<[-<<<<-.<<+.>>++++.--.>++++++.<--.+++++.-------.>--.<<+++++.+.<--.> \ >++++++++.---.<-.>---.<<+++.-.->++++++++.-------.+.------->>--.--<<<+.>>.+<<--. \ +<.>>>>>>>]>]<[-<<<<<+++++++.>>++.--<<+.--------<+.>>>>.<<<<--.+<.>>>>>>>]><<-] \ <<<-.+++++.-------.>++++.<<---.>+.>+++.<++++.-----------.<<------------.>>>>.<< \ +++++++++++....---------.<<+++++++++++.<.>>>++++++++++++.+++++.>-.<<.>-.------- \ -----.++++++++.+++++.<++++++++.+.>>>+++.<<<<<.>>>-----------.+++++.-------.>--. \ <<---------.++++++++++.>>--.<<<++.>>+.>+++++.<++++.<<--.<.>>>+++.+++++.>-.<<--- \ -------.>-----------.<<.<.[-]>[-]>[-]>[-]>[-]>[-]>>>>[<<++++++++++[->++++++++++ \ <]>+.-[--<+>>+<]>--.[-]>[-<<<<<<<+>>>>>>>]<<<----------.+[->>>+<<<]<<<<>>>>+[++ \ +++++++[-<++++++++++>]+<[-<<+<[>-]>[>]<[->>>[-]<<<]<->>>]>[-<+>>+<]<[->+<]>]>[> \ ++++++[-<++++++++>]+<.[-]]<<<<++++++++++[-<++++++++++>]>>>+[<++++++++++[-<<+<[> \ -]>[>]<[->>>[-]<<<]<->>>]>[-<+>>+<]<[->+<]>]>[>[-]++++++[-<++++++++>]<.[-]]>[++ \ +++[-<++++++++>]<.[-]>]<<<<<++++++++++[-<++++++>]<--.[-]>>>>>>>.[-]++++++++++.- \ --------->]>[-]>[-]++++++++++[->+++++++++++>+++>+++++<<<]>++++.-------------.++ \ +++++++++++++.+.---.----.>++.>--.+++++++++++.<<+++++++++++++++.>>>++++++++++.[- \ ]<[-]<[-]<[-]<]<<]>>[->[>>]>[->>+<<]>[->>+<<]>>>+[-<<[->>+<<]+>[->>+<<]+>>>+<[> \ -<[->>+<<]]>>[-<<+>>]<<->[-<+<->++++++++[->++++++++<]>[-<++++>]<->]<<>[>>+<]>[< \ ]<<[[->>+<<]>>>+<<<]>>[-<<+>>]>[[-]<+>]<<<>>]<<+>+>+>+>+>+>+>+[<]>>->->>->->-<< \ <<<<<>>+++++[->+++++++++++<]<<<<<<[<<]>>[[-<+<<+>>>]>[-<<<+>>>]<<>+<-[-[-[-[-[- \ [-[-[-[[-]>-<]>[->++<]<]>[->>[>>]>>>[[[>]>]>]<<<-<[->>+>>+<<<<]<[->>+>>+<<<<]>> \ [-<<+>>]>[-<<+>>]<<<[-<<+>>]>[->+<]>[-<++++++++[-<++++++++>]<[->++++<]<[->+>-<< \ ]>+[-<+>]+>-[<->[-]]<[-<[-]<+>>]>>]<<+>>>>>>-<<[->>>[>]>>>[>>>]>+<<<<[<<<]<[<]< \ <]>[->>[>]>>>[>>>]>>+<<<<<[<<<]<[<]<]<+>+>+[>]>>>[>>>]>[->>>+<<<]>[->>>+<<<]<<+ \ [[<]<]<->>>[>>>]>[-<<<+<[<<<]>+>>[>>>]>]>[-<<<+<<[<<<]>>+>[>>>]>>]<<<<<[<<<]+[> \ >>]<[->>+<<]<[->>+<<]++++++++++++++++[-<++++++++++++++++>]<--[->+>+<<]+>>>>>+<[ \ >-<[->>+<<]]>>[-<<+>>]<<->[-<+<->++++++++[->++++++++<]>[-<++++>]<->]<<[-<<->>]> \ [->+<]>[-<<+<[>-<[->>+<<]]>>[-<<+>>]<<->[-<+<->++++++++[->++++++++<]>[-<++++>]< \ ->]>>]<<<<<[<<<]<[<]<<<[[[<]<]<]<<[<<]]<]>[->>[>>]>>>[[[>]>]>]<<<->>++++++++[-< \ <<<>>>++++++++[-<++++++++>]<[->++++<]<[->+>-<<]>+[-<+>]+>-[<->[-]]<[-<[-]<+>>]< \ <>>>>]<++++++++>+>>->->[>]>>>[>>>]+[<<<]<[[[<]<]<]<[[[<]<]<]<<[<<]]<]>[->+++<<+ \ <-[>-]>[>]<[->>--<<]+<-[>-]>[>]<[->>-<<]<++>>]<]>[->+++<<+<-[>-]>[>]<[->>--<<]+ \ <-[>-]>[>]<[->>-<<]<++>>]<]>[->++++<]<]>[->+++<<+<-[>-]>[>]<[->>-<<]<+>>]<]>[-> \ ++++++<]<]>[->+++<<+<-[>-]>[>]<[->>-<<]<+>>]<>>[->[>>]>>>[[[>]>]>]<<<-<<>>>++++ \ ++++[-<++++++++>]<[->++++<]<[->+>-<<]>+[-<+>]+>-[<->[-]]<[-<[-]<+>>]<<>>+[[[<]< \ ]<]<<[<<]>]>]+++++++++[>++++++++++++++<-]>+.+[--<+>]<+++++.+++++++.------.>+... \ ++.---........++.--.+++.---.+.-...++++[-<+++>]<++.[-->+++<]>++.<++++.++++.[-]>- \ -[------->+++<]>--.<...........>.<.+++++[->----<]>.<.+.-.>++++++++.[-].....>.-. \ .......++++++++[-<++++++++++++++++>]<.>++++.++++.[-].<.[-]>++++.++++.[-]<++++++ \ [->++++++++++++++<]>>>>-<<<[->>>>++++++++[-<++++++++>]<[->++++<]<[->+>-<<]>+[-< \ +>]+>-[<->[-]]<[-<[-]<+>>]<<<]>>.<.<..>>.<.<..+++++.[-]....++++++++++++++++.[-] \ ..>>[-]>>>>+<+<+<+<+<+<+<+<<<++++++++++[->++++++++++++++++++++++>++++++++++++++ \ +++++++++++<<<+++++<++++++++++++++++++>>]>>+++++<<<<++++.++++++++.>>...<-.>>-.< \ <<-------.>>>>..<<..<<+.>>+++.---...<<++++.>---------------.>...<++++++++++++++ \ +.>>>.<<<.>>++++++++++++++++++.<<<+++++++++++++++.>>>>-[--<<+>>]<<+.+++++++++.< \ <-----------.>+[->>>+++<<<]>>>+.<+++++++++++++++.---------.>+++++++++++++++++++ \ .<<.<<+++++++++++++++.>>.<<--------------.>>+[--<+>]<--.++[->++<]>-.<++++[-<+++ \ ++>]<+++.>>.<<+++++.>>+++[--<+>]<+..-[->++<]>---.>+++++++++++.<+++[--<+>]<.-..< \ [-]>[-]>>[-]>[-]+<+<+<+<<<[<<]>>[<+>-[-[-[-[-[-[-[-[-[[-]<->]<[-+++++++++++[->+ \ ++++>++++++++++++<<]>>++++.[-]<++.[-]<]>]<[-+++++++[->++++++++<]>++.-.+++[----< \ +>]<.[->+++++++++<]>--.[-]>>[>>]>[>]+>+>+>->>.[-]<.[-]+++++++++++++++++[-<+++++ \ ++++++++++>]<..[-]<[<]<<[<<]<]>]<[-+++++++[->++++++++<]>++.-.+++[---->+<]>.[-<+ \ ++++++++>]<---.[-]>>[>>]>[>]+>+>+>->>.[-]<.[-]..<<[<]<<[<<]<]>]<[->+>-[-[<+++++ \ ++++[-<+++++++++++++>]<+.>++++++[-<++++++++++>]<++.[-]>>++.[-]]<[.++++++++++++[ \ ->++++++++++++++++++<]>-.[-]<]>]<[++++[->+++++++++++++<]>.[-]<]<]>]<[->+>-[-[<+ \ ++++++++[-<+++++++++++++>]<+.>++++++++++[-<++++++++++>]<++.[-]>>++.[-]]<[++++[- \ >++++++++<]>+.+++++[-<+++++>]<+++.[-]]>]<[+++++++[->+++++++++<]>+.[-]<]<]>]<[-+ \ +++++++++[->+++++++++++++<]>+++++++.+[------<++++++++++>]<++++++++++.[------>++ \ +++<]>+++++.-----[-----<+++>]<++++++++.[-]]>]<[->+>-[<-]<[<]++++[-<++++>]<[->++ \ ++++++<]+>>[-<<->-[->++<]>.[-]+++++++++.[-]]<<[->.++[------------->++++<]>+.[-] \ >+.[-]<<<]>]>]<[-++++++++++[->++++++++++++++<]>---.+++[-----<+++++++++>]<----.+ \ +[---------->+++<]>.+++++++[--<+++++>]<.[-]+++++[->+++++<]>[-<+++++>]<+++.+++++ \ +++[-------->++++<]>-.[-]<]>]<[->+>-[<-]<[<]++++[-<++++>]<[->++++++++<]+>>[-<<- \ >-[->++<]>.[-]+.-]<<[>.[-]<.>>>+.[-]<<<-]>]>>>]<++++++++++[->++++++++++++++<]>- \ --.+++[-------<+++++++++++>]<----.>++++++++[-<++++>]<++[---------->+++<]>.+++++ \ ++[--<+++++>]<.[-]+++++[->+++++<]>[-<+++++>]<+++.[-]<]<<]]"; #if 0 /*[ O0=($(echo "$K"|sed -e"s/\(.\)/\\1 /g"));OO=($(for((i=0;i<65535;i++)) do echo "0";done));Oo=0;oo="";oO=0;o0=0;while [ $oO -lt ${#O0[@]} ];do case ${O0[$oO]} in ">")o0=$((o0+1));;"<")o0=$((o0-1));;"+")OO[$o0]=$(( (${OO[$o0]}+1)%0x100));;"-")OO[$o0]=$(((${OO[$o0]}+0377)%0x100));;".") echo -ne "\0$(((${OO[$o0]}/64)%8))""$(((${OO[o0]}/8)%8))$((${OO[o0]}%8 ))";;",")if ((${#oo}==0)); then oo=$(cat);fi;if ((${#oo}>0)); then OO[ $o0]=$(printf "%d" "'${oo:0:1}");oo=${oo:1};fi;;"[")if ((${OO[$o0]}==0 ));then c=1;while (($c>0));do oO=$(($oO+1));if [ ${O0[$oO]} == \[ ] ; then c=$((c+1));fi;if [ ${O0[$oO]} == \] ]; then ((c-- ));fi;done;else O0O[$Oo]=$oO;((Oo++)); fi;;"]")((Oo--));if ((${OO[$o0]})); then oO=$(( ${O0O[$Oo]}-1));fi;;esac;((oO++));done; cat >>/dev/null <>002<<020]; _(__){__K=____?__K:__;____=__;while( __K){__K+=*(__*__*__+_KK+K)-0133?22^_KK[K+__]^'K'?'.'^'u'^'[':-(__[_KK +K]&1):__*__;_KK+=__;_(__);}}___(){while(K[++_KK]){ _K_('v'^']',__[ ,]++)_K_(055|___==___,__[,]--)_K_('K'^'u',,++)_K_('w'^'K',--,)_K_('_'^ 4,__[,]?_(_KK[K]&1>>1):_(_KK[K]&1))_K_('v'^'+',__[,]?_((_KK[K]&2)-(_KK [K]&1)):_(0))K[_KK]-46?_(__[_K_]&1>>1):putchar(__[_K_]);if(_KK[K]^(1<< 1^'.'))_(0);else{__[_K_]=getchar();}}}main(){--_KK;___();} #endif #define EoF #if 0 ]} #[ fconfigure stdout -encoding binary;fconfigure stdin -encoding binary;set __ 0 set _ 0;set _1 {0};;for {set ___ 0} {$___<0xffff} {incr ___} {lappend _1 0} lappend _1_ 0;;while {$_ < [string length $K]} {switch -exact -- \ [string index $K $_] {{>} {incr __} {<} {set __ [expr $__-1]} {,} {set __1 [read stdin 1]; if {[string length $__1]==1} {lset _1 $__ [scan $__1 \ %c]}} {.} {puts -nonewline stdout [format %c [lindex $_1 $__]]} {[} { if {[lindex $_1 $__] == 0} {set ___ 1; while {$___ != 0} {incr _; set __1 [string index $K $_];if {[string equal $__1 {[} ]} {incr ___;} \ elseif {[string equal $__1 {]}]} {set ___ [expr $___-1]}}} else { lappend _1_ [expr $_ - 1]}} {]} {if {[lindex $_1 $__] != 0} { set _ [lindex $_1_ end]};set _1_ [lrange $_1_ 0 end-1]} {+} { lset _1 $__ [expr ([lindex $_1 $__] + 1)%256]} {-} {lset _1 $__ [expr \ ([lindex $_1 $__] - 1)%256]} default {}}; incr _} exit ] #endif EoF