From 7c00f3d8cebd01591dbb913b084d8494d42a2dd2 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Wed, 2 Sep 2020 21:53:47 -0400 Subject: =?UTF-8?q?Add=20constant=201-modifier=20=CB=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- c.bqn | 4 ++-- doc/primitive.md | 1 + docs/bqn.js | 10 +++++----- docs/doc/primitive.html | 6 ++++++ docs/problems.html | 6 +++--- docs/repl.js | 4 ++-- docs/spec/token.html | 2 +- dzref | 3 ++- dzref_full | 2 +- editors/kak/autoload/filetype/bqn.kak | 2 +- editors/vim/autoload/bqn.txt | 1 + editors/vim/syntax/bqn.vim | 2 +- md.bqn | 2 +- problems.md | 8 ++++---- spec/reference.bqn | 3 ++- spec/token.md | 2 +- src/c.bqn | 2 +- src/cjs.bqn | 2 +- src/pr.bqn | 2 +- src/r.bqn | 1 + test/cmpref.bqn | 2 +- 21 files changed, 39 insertions(+), 28 deletions(-) diff --git a/c.bqn b/c.bqn index a038c3cf..f0e626d2 100755 --- a/c.bqn +++ b/c.bqn @@ -3,7 +3,7 @@ nl‿tab←•UCS 10‿9 charSet←∾charGroups←⟨ chF←"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" # Function - "˜˘¨⌜⁼´˝`" # Modifier + "˙˜˘¨⌜⁼´˝`" # Modifier "∘○⊸⟜⌾⊘◶⎉⚇⍟" # Composition nl∾"⋄," # Separator "←↩→" # Gets @@ -204,7 +204,7 @@ DParse ← {nv‿r𝕊𝕩: prims←⟨ +,-,×,÷,⋆,√,⌊,⌈,|,¬,∧,∨,<,>,≠,=,≤,≥,≡,≢,⊣,⊢,⥊,∾,≍,↑,↓,↕,⌽,⍉,/,⍋,⍒,⊏,⊑,⊐,⊒,∊,⍷,⊔,! - ˜,˘,¨,⌜,⁼,´,˝,` + ˙,˜,˘,¨,⌜,⁼,´,˝,` ∘,○,⊸,⟜,⌾,⊘,◶,⎉,⚇,⍟ ⟩ DGenFn←{ diff --git a/doc/primitive.md b/doc/primitive.md index 3a2d72a6..527312ab 100644 --- a/doc/primitive.md +++ b/doc/primitive.md @@ -57,6 +57,7 @@ Functions that have significant differences from APL functions are marked with a Glyph | Name(s) | Definition | Description ------|-------------|--------------------------------|--------------------------------------- +`˙` | Constant | `{𝕩⋄𝕗}` | Return a function that returns the operand `˜` | Self/Swap | `{𝕩𝔽𝕨⊣𝕩}` | Duplicate one argument or exchange two `∘` | Atop | `{𝔽𝕨𝔾𝕩}` | Apply `𝔾` to both arguments and `𝔽` to the result `○` | Over | `{(𝔾𝕨)𝔽𝔾𝕩}` | Apply `𝔾` to each argument and `𝔽` to the results diff --git a/docs/bqn.js b/docs/bqn.js index e57032a3..d1d9fe1a 100644 --- a/docs/bqn.js +++ b/docs/bqn.js @@ -139,19 +139,19 @@ let provide = [ ]; let runtime = run( - new Uint8Array([15,1,22,0,0,11,14,15,2,22,0,1,11,14,15,3,0,20,15,4,8,22,0,2,11,14,15,5,22,0,3,11,14,15,6,22,0,4,11,14,15,7,22,0,5,11,14,15,8,22,0,6,11,14,15,9,22,0,7,11,14,15,10,22,0,8,11,14,0,12,21,0,6,0,11,8,0,21,3,2,21,0,0,0,0,8,22,0,9,11,14,0,12,21,0,6,0,11,8,0,8,0,13,21,0,6,0,21,8,19,0,21,3,2,21,0,0,0,0,8,22,0,10,11,14,21,0,3,0,13,7,22,0,11,11,14,21,0,11,0,7,0,22,19,0,20,15,11,8,22,0,12,11,14,0,13,0,7,0,22,19,22,0,13,11,14,15,12,0,16,21,0,13,19,0,20,0,11,8,22,0,14,11,14,15,13,0,16,21,0,12,19,0,20,0,7,21,0,4,21,0,14,21,0,4,0,7,8,8,8,22,0,15,11,14,0,22,0,14,0,16,0,21,19,3,2,21,0,0,0,12,21,0,12,0,21,19,8,22,0,16,11,14,15,14,22,0,17,11,14,21,0,17,22,0,18,11,14,0,0,0,7,0,22,19,21,0,8,21,0,12,8,22,0,19,11,14,0,14,21,0,7,15,15,8,22,0,20,11,14,15,16,22,0,21,11,14,15,17,22,0,22,11,14,15,18,22,0,23,11,14,0,13,0,7,21,0,11,19,22,0,24,11,14,0,22,0,15,0,16,0,21,19,21,0,7,0,13,0,8,0,23,19,0,7,0,22,19,15,19,3,2,21,0,0,21,0,1,21,0,4,0,0,8,8,8,3,2,21,0,0,21,0,1,21,0,4,0,14,8,21,0,18,0,8,7,0,22,19,21,0,12,0,21,19,8,22,0,25,11,14,21,0,24,21,0,25,21,0,3,21,0,25,7,0,7,9,3,2,21,0,0,21,0,2,21,0,4,0,0,8,8,15,20,3,3,21,0,0,0,0,21,0,5,0,6,8,8,22,0,26,11,14,15,21,22,0,27,11,14,15,22,22,0,28,11,14,0,12,21,0,12,0,21,19,21,0,8,15,23,8,22,0,29,11,14,0,12,21,0,12,0,21,19,21,0,8,15,24,8,22,0,30,11,14,15,25,22,0,31,11,14,15,26,22,0,32,11,14,15,27,22,0,33,11,14,15,28,22,0,34,11,14,15,29,22,0,35,11,14,0,0,21,0,5,0,12,8,0,21,3,2,21,0,1,21,0,4,0,0,8,0,12,3,2,0,12,21,0,5,0,12,8,0,21,3,2,0,14,21,0,5,21,0,35,0,12,7,8,21,0,18,0,8,7,0,22,19,0,21,3,2,15,30,3,5,21,0,18,15,31,7,16,22,0,36,11,14,0,21,15,32,3,2,21,0,0,0,0,8,22,0,37,11,14,21,0,36,0,20,21,0,37,8,22,0,38,11,14,21,0,36,0,7,0,22,19,0,20,3,0,0,14,3,2,21,0,0,0,0,8,8,22,0,39,11,14,15,33,22,0,40,11,14,15,34,22,0,41,11,14,0,22,21,0,41,21,0,31,8,21,0,6,21,0,19,8,22,0,42,11,14,21,0,42,0,20,21,0,42,21,0,6,0,21,8,8,22,0,43,11,14,0,0,21,0,8,0,15,21,0,4,21,0,16,8,21,0,12,0,21,19,21,0,8,15,35,8,8,22,0,44,11,14,15,36,22,0,45,11,14,21,0,23,0,9,7,22,0,46,11,14,21,0,23,0,10,7,22,0,47,11,14,21,0,3,21,0,46,21,0,7,21,0,47,8,7,0,20,0,23,21,0,46,16,21,0,7,21,0,47,8,8,22,0,48,11,14,21,0,23,15,37,0,20,0,7,21,0,1,3,2,21,0,0,0,13,21,0,6,0,21,8,8,8,7,22,0,49,11,14,21,0,23,15,38,0,20,21,0,14,8,7,22,0,50,11,14,21,0,23,15,39,0,20,0,7,21,0,4,21,0,50,21,0,4,0,7,8,8,8,7,22,0,51,11,14,21,0,23,0,8,7,0,20,21,0,45,0,21,7,8,22,0,52,11,14,21,0,23,0,8,0,7,0,6,19,7,0,20,21,0,45,0,22,7,8,22,0,53,11,14,21,0,23,0,8,0,20,21,0,13,0,7,21,0,12,19,21,0,6,0,21,8,8,7,22,0,54,11,14,21,0,23,21,0,11,0,7,0,22,19,7,0,20,15,40,8,22,0,55,11,14,21,0,23,0,13,0,7,0,22,19,7,0,20,21,0,44,8,22,0,56,11,14,21,0,23,0,12,0,7,0,22,19,7,0,20,21,0,16,8,22,0,57,11,14,21,0,23,0,12,7,0,20,0,12,8,22,0,58,11,14,21,0,23,21,0,11,7,0,20,21,0,3,0,21,7,0,5,0,46,19,8,22,0,59,11,14,21,0,23,0,13,7,0,20,21,0,3,0,21,7,0,5,0,47,19,8,22,0,60,11,14,21,0,23,0,6,7,22,0,61,11,14,21,0,23,0,7,7,22,0,62,11,14,21,0,62,21,0,61,0,22,19,22,0,63,11,14,21,0,61,0,21,3,2,21,0,62,0,21,3,2,21,0,54,0,22,3,2,21,0,46,0,22,3,2,21,0,47,0,22,3,2,21,0,48,0,22,3,2,21,0,52,0,22,3,2,21,0,53,0,21,3,2,21,0,63,0,22,3,2,21,0,49,0,21,3,2,21,0,50,0,28,3,2,21,0,51,0,29,3,2,21,0,55,0,21,3,2,21,0,60,0,22,3,2,21,0,58,0,22,3,2,21,0,59,0,22,3,2,21,0,56,0,21,3,2,21,0,57,0,21,3,2,3,18,21,0,18,15,41,7,21,0,3,0,21,7,0,5,0,48,19,3,1,0,16,0,21,17,17,22,0,64,11,14,15,42,0,15,3,2,21,0,0,0,0,8,22,0,65,11,14,15,43,22,0,66,11,14,0,15,0,20,21,0,65,8,22,0,67,11,14,15,44,22,0,68,11,14,15,45,0,20,15,46,8,22,0,69,11,14,21,0,69,21,0,4,21,0,56,8,22,0,70,11,14,15,47,22,0,71,11,14,15,48,22,0,72,11,14,21,0,72,22,0,73,11,14,15,49,22,0,74,11,14,21,0,74,22,0,75,11,14,15,50,22,0,76,11,14,21,0,76,22,0,77,11,14,21,0,67,21,0,5,21,0,21,8,15,51,3,2,21,0,0,21,0,58,21,0,55,0,22,19,21,0,5,21,0,53,8,8,22,0,78,11,14,15,52,22,0,79,11,14,15,53,22,0,80,11,14,21,0,79,0,20,21,0,80,8,22,0,81,11,14,15,54,22,0,82,11,14,15,55,22,0,83,11,14,21,0,82,0,20,21,0,83,8,22,0,84,11,14,15,56,22,0,85,11,14,21,0,43,21,0,6,21,0,28,8,22,0,86,11,14,21,0,57,21,0,58,0,21,19,21,0,62,0,22,19,21,0,41,15,57,15,58,3,2,21,0,0,15,59,8,8,22,0,87,11,14,21,0,85,0,20,21,0,68,8,22,0,88,11,14,0,21,21,0,41,21,0,33,8,0,20,21,0,32,8,22,0,89,11,14,21,0,87,0,20,21,0,28,8,22,0,90,11,14,21,0,67,21,0,4,21,0,57,8,21,0,55,0,21,19,21,0,8,15,60,15,61,3,2,21,0,0,0,18,21,0,58,7,21,0,57,0,22,19,21,0,18,21,0,53,7,9,0,22,3,2,21,0,0,21,0,58,21,0,57,0,22,19,8,8,8,22,0,91,11,14,15,62,22,0,92,11,14,15,63,22,0,93,11,14,15,64,22,0,94,11,14,21,0,78,0,20,21,0,91,8,22,0,95,11,14,21,0,94,0,20,21,0,93,8,22,0,96,11,14,15,65,22,0,97,11,14,21,0,97,15,66,3,2,21,0,0,21,0,2,21,0,4,21,0,67,21,0,4,0,18,0,0,7,8,8,21,0,18,21,0,53,7,9,8,22,0,98,11,14,21,0,98,21,0,6,21,0,67,21,0,1,3,2,21,0,0,0,0,8,8,22,0,99,11,14,15,67,22,0,100,11,14,15,68,22,0,101,11,14,15,69,22,0,102,11,14,15,70,22,0,103,11,14,21,0,103,21,0,26,7,0,20,0,21,21,0,27,21,0,26,8,8,22,0,104,11,14,21,0,103,21,0,3,21,0,26,7,7,0,20,0,22,21,0,27,21,0,3,21,0,26,7,8,8,22,0,105,11,14,15,71,22,0,106,11,14,0,4,21,0,6,21,0,35,0,22,7,8,22,0,107,11,14,15,72,22,0,108,11,14,21,0,108,21,0,1,21,0,4,0,19,21,0,61,7,8,21,0,3,21,0,62,7,0,22,19,21,0,3,21,0,43,7,21,0,3,21,0,90,21,0,4,21,0,104,21,0,4,21,0,107,8,8,7,19,7,22,0,109,11,14,15,73,22,0,110,11,14,21,0,106,0,22,7,0,20,21,0,109,8,22,0,111,11,14,21,0,3,21,0,106,0,21,7,7,0,20,21,0,108,21,0,1,7,8,22,0,112,11,14,21,0,110,0,20,21,0,90,21,0,6,21,0,112,8,8,22,0,113,11,14,15,74,22,0,114,11,14,15,75,22,0,115,11,14,15,76,22,0,116,11,14,15,77,22,0,117,11,14,21,0,116,0,20,21,0,29,8,22,0,118,11,14,21,0,104,21,0,4,21,0,104,8,21,0,43,21,0,62,21,0,1,19,21,0,3,21,0,111,7,19,22,0,119,11,14,15,78,22,0,120,11,14,21,0,120,0,20,21,0,119,8,22,0,121,11,14,21,0,99,0,20,21,0,67,0,16,0,21,19,8,22,0,122,11,14,15,79,22,0,123,11,14,0,5,21,0,6,0,94,8,22,0,124,11,14,0,5,21,0,6,0,95,8,22,0,125,11,14,15,80,22,0,126,11,14,15,81,22,0,127,11,14,15,82,22,0,128,1,11,14,21,0,61,21,0,3,21,0,62,7,0,20,21,0,61,8,21,0,62,21,0,62,21,0,54,21,0,3,21,0,46,7,0,20,21,0,1,8,21,0,46,21,0,46,21,0,47,21,0,23,0,2,7,21,0,48,21,0,3,21,0,47,7,0,20,0,23,21,0,7,21,0,47,8,8,21,0,52,21,0,3,21,0,46,7,0,20,21,0,52,21,0,126,21,0,1,8,8,21,0,53,21,0,1,21,0,62,0,22,19,21,0,46,21,0,3,21,0,62,7,19,0,20,21,0,53,21,0,126,21,0,1,8,8,21,0,63,21,0,63,21,0,55,0,21,21,0,4,21,0,124,8,0,20,15,83,8,21,0,1,21,0,1,21,0,2,21,0,38,21,0,4,21,0,125,8,21,0,2,21,0,1,19,0,20,21,0,1,8,21,0,95,15,84,0,20,0,21,21,0,4,21,0,124,8,8,21,0,70,15,85,0,20,15,86,8,21,0,81,0,21,21,0,4,21,0,124,8,0,20,21,0,81,21,0,126,21,0,122,21,0,6,0,27,8,8,8,21,0,84,0,21,21,0,4,21,0,124,8,0,20,21,0,84,21,0,126,21,0,122,8,8,21,0,88,0,21,21,0,4,21,0,124,8,0,20,21,0,88,21,0,126,21,0,39,8,8,21,0,89,21,0,89,21,0,6,21,0,62,8,0,20,21,0,89,8,21,0,118,21,0,117,0,20,21,0,30,8,21,0,90,0,21,21,0,4,21,0,124,8,0,20,15,87,8,21,0,96,21,0,128,1,0,20,21,0,127,8,3,42,21,0,67,21,0,6,21,0,57,21,0,3,21,0,46,7,0,23,19,21,0,3,21,0,95,7,0,23,19,8,16,21,0,118,16,15,88,16,22,0,129,1,11,14,15,89,22,0,130,1,11,14,15,90,22,0,131,1,11,14,21,0,131,1,22,0,132,1,11,14,21,0,55,21,0,111,21,0,4,21,0,122,8,21,0,4,21,0,50,21,0,89,21,0,81,3,4,19,22,0,133,1,11,14,21,0,66,0,20,21,0,65,8,22,0,134,1,11,14,15,91,22,0,135,1,11,14,21,0,34,22,0,136,1,11,14,21,0,61,21,0,62,21,0,54,21,0,46,21,0,47,21,0,48,21,0,50,21,0,51,21,0,49,21,0,63,21,0,52,21,0,53,21,0,55,21,0,56,21,0,57,21,0,58,21,0,60,21,0,59,21,0,38,21,0,39,21,0,2,21,0,1,21,0,134,1,21,0,95,21,0,70,21,0,81,21,0,84,21,0,88,21,0,89,21,0,118,21,0,90,21,0,104,21,0,105,21,0,43,21,0,122,21,0,111,21,0,121,21,0,112,21,0,113,21,0,96,0,5,21,0,3,21,0,40,21,0,35,21,0,135,1,21,0,130,1,21,0,18,21,0,77,0,19,21,0,4,21,0,5,21,0,6,21,0,7,21,0,136,1,0,20,21,0,123,21,0,75,21,0,73,21,0,132,1,3,59,25,21,0,1,15,92,21,0,5,0,16,21,0,1,21,0,4,21,0,2,17,17,7,21,0,2,17,25,21,0,1,25,21,0,2,25,21,0,1,25,21,0,1,21,1,2,21,0,2,17,21,0,4,21,0,1,17,25,21,0,1,21,0,5,21,0,2,17,21,0,4,16,25,21,0,1,21,0,5,16,21,0,4,21,0,2,21,0,5,16,17,25,21,0,1,21,0,5,21,0,1,21,1,2,21,0,2,17,21,0,4,16,17,25,21,0,1,21,0,5,16,21,0,4,21,0,1,21,1,2,21,0,2,17,17,25,21,0,1,15,93,21,1,1,21,0,4,3,2,0,16,21,0,1,21,0,5,21,0,2,17,17,7,21,0,2,17,25,21,0,1,3,1,0,15,3,0,17,25,21,0,2,21,0,1,3,2,25,21,0,2,21,0,1,3,2,25,21,0,1,0,12,16,0,12,0,22,17,0,5,0,31,17,14,21,0,1,22,0,5,11,21,1,16,16,22,0,6,11,14,21,0,4,22,0,7,11,14,21,0,1,21,1,2,0,20,15,94,15,95,3,2,21,1,0,21,0,6,21,1,12,0,21,17,8,8,21,0,2,17,22,0,8,11,14,21,0,6,0,17,16,0,18,0,7,21,1,6,0,22,0,7,21,0,6,17,8,7,16,0,18,15,96,7,16,14,21,0,8,25,21,0,2,0,7,21,0,1,21,1,16,16,17,0,17,16,0,18,21,1,3,21,0,1,7,0,16,0,6,21,1,6,21,0,2,8,19,7,16,25,21,0,2,21,1,16,16,22,0,3,11,14,21,0,1,21,1,16,16,0,6,21,0,3,17,0,17,16,0,18,21,0,2,21,1,7,0,16,8,21,1,3,21,0,1,7,0,16,21,0,3,21,1,7,0,7,8,19,3,2,21,1,0,0,13,21,1,6,21,0,3,8,8,7,16,25,15,97,22,0,2,11,14,15,98,22,0,3,11,14,21,0,3,21,0,1,7,21,1,3,21,0,3,21,1,3,21,0,1,7,7,7,3,2,21,1,0,0,12,21,1,5,21,1,13,8,8,21,0,2,21,0,1,7,3,2,21,1,0,0,12,21,1,5,0,12,8,8,25,15,99,21,0,1,7,22,0,2,11,14,21,0,1,15,100,15,101,3,2,21,1,0,0,0,21,1,5,21,1,13,8,8,0,20,0,18,21,0,2,7,8,21,1,22,21,0,2,7,3,3,21,1,0,0,0,21,1,5,0,6,8,8,25,21,0,1,21,1,25,21,0,2,17,25,21,0,1,0,14,21,1,5,21,1,100,8,21,0,2,17,22,0,3,11,14,21,0,3,21,1,18,21,1,101,21,0,1,0,15,16,21,1,7,0,16,8,21,1,7,21,1,26,21,1,6,21,0,2,0,15,16,21,1,7,0,16,8,8,8,7,7,16,22,0,4,11,14,0,21,21,1,3,21,0,4,7,16,25,21,0,1,0,12,16,0,13,0,22,17,0,5,0,34,17,14,21,0,1,21,1,16,16,22,0,6,11,14,21,0,1,21,1,20,0,22,17,21,1,18,0,8,7,0,22,17,22,0,7,11,14,21,0,1,0,15,16,22,0,8,11,14,0,21,22,0,9,11,22,0,10,11,14,21,0,8,0,21,0,18,21,1,9,7,21,1,18,0,8,7,0,22,19,3,2,21,1,0,21,0,6,21,1,12,0,24,17,0,8,0,22,0,12,21,0,7,17,17,8,16,21,1,1,21,1,8,21,0,1,21,1,7,15,102,8,8,16,0,7,0,22,17,22,0,11,11,14,21,0,1,0,18,21,0,10,21,1,7,0,7,8,0,7,21,1,6,21,0,9,8,3,2,0,16,21,0,5,17,7,0,4,21,1,6,0,3,8,9,15,103,21,0,4,7,3,2,21,1,0,21,0,11,8,16,25,21,0,1,0,12,16,0,12,0,22,17,0,5,0,35,17,14,21,0,1,21,1,16,16,22,0,3,11,14,21,0,1,21,0,3,21,1,12,0,21,17,21,1,8,15,104,8,16,25,21,0,1,21,1,16,16,22,0,3,11,14,21,0,1,21,1,20,0,22,17,22,0,4,11,21,1,18,0,8,7,0,22,17,22,0,5,11,14,21,0,3,0,17,16,0,18,21,1,3,21,0,1,0,15,16,7,0,16,0,8,21,1,6,21,0,5,8,21,1,7,0,6,8,19,7,21,0,5,0,17,16,0,15,21,0,4,17,17,25,21,0,1,0,12,16,21,1,3,0,7,7,0,22,17,22,0,3,11,14,21,0,1,0,14,16,22,0,4,11,14,21,0,4,0,16,21,0,3,17,22,0,5,11,14,21,0,3,0,17,16,0,18,21,0,4,21,1,7,0,16,8,7,16,22,0,6,11,14,21,0,6,21,1,18,0,8,7,0,22,17,0,17,16,0,15,21,0,6,17,0,18,21,1,3,21,0,1,0,15,16,7,0,16,0,8,21,1,6,21,0,5,8,21,1,7,0,6,8,19,7,21,0,5,0,17,16,17,25,21,0,2,0,0,16,0,5,0,37,17,14,21,0,2,0,18,21,1,9,7,16,0,15,16,21,1,18,0,8,7,0,22,17,0,5,0,38,17,14,21,0,1,21,1,16,16,22,0,3,11,14,21,0,2,0,18,21,1,13,21,1,6,21,0,3,8,0,8,0,13,21,1,6,21,0,3,0,7,16,8,19,7,16,0,15,16,21,1,18,0,8,7,0,22,17,0,5,0,39,17,14,21,0,1,15,105,15,106,3,2,21,1,0,21,0,1,0,12,16,0,12,0,22,17,8,21,0,2,0,18,21,1,1,21,1,13,0,21,19,0,8,21,0,3,19,0,6,21,1,1,19,7,16,17,25,21,0,1,0,12,16,0,13,0,22,17,0,5,0,40,17,14,21,0,1,21,1,16,16,22,0,3,11,14,21,0,1,21,1,42,21,0,3,0,17,16,0,18,0,7,21,1,6,0,22,0,7,21,0,3,17,8,7,16,17,25,21,0,2,21,1,9,16,0,5,0,41,17,14,21,0,1,21,1,16,16,22,0,3,11,14,21,0,3,0,9,21,0,2,17,21,1,14,16,0,8,21,0,3,17,0,7,22,0,2,13,14,21,0,1,21,1,42,21,0,3,0,17,16,0,18,21,1,1,0,13,21,0,2,0,7,21,0,3,17,19,0,8,21,0,3,19,0,7,21,1,1,19,0,6,21,0,2,19,7,16,17,25,21,0,1,0,14,16,22,0,6,11,21,1,18,0,8,7,0,22,17,22,0,7,11,0,17,16,22,0,8,11,14,21,0,1,21,0,5,21,1,5,21,0,4,8,21,0,2,17,22,0,9,11,14,21,0,8,0,15,21,0,6,17,21,0,5,16,22,0,10,11,14,15,107,0,15,3,2,0,16,21,0,10,0,0,16,17,22,0,11,11,14,21,0,9,21,0,11,16,22,0,9,12,14,21,0,10,21,0,11,16,22,0,10,12,14,21,0,10,0,21,21,1,27,21,1,24,8,16,22,0,12,11,14,21,1,3,21,0,10,7,0,16,21,0,12,21,1,7,0,16,8,19,21,0,7,3,2,21,1,0,0,13,21,1,6,21,0,12,21,1,16,16,8,8,22,0,13,11,14,0,21,22,0,14,11,21,0,13,16,22,0,15,11,14,21,0,8,0,18,21,0,1,0,15,16,21,1,7,0,16,8,15,108,3,2,21,1,0,15,109,8,7,16,0,15,21,0,6,17,25,21,1,19,21,1,5,21,1,22,21,0,1,7,0,20,0,18,21,0,1,7,8,8,25,21,0,1,21,1,35,21,1,36,7,21,0,2,17,0,15,16,21,1,18,0,8,7,0,22,17,25,21,0,2,0,16,0,22,17,21,0,1,3,2,21,1,0,21,0,2,0,16,0,21,17,8,25,21,0,1,0,15,16,0,18,21,1,37,7,16,21,1,18,0,7,0,8,0,13,19,0,7,21,1,2,19,7,0,21,17,0,6,0,22,17,25,0,27,21,1,74,21,0,1,8,25,21,0,1,22,0,3,11,14,15,110,15,111,3,2,21,1,0,21,1,2,21,1,4,21,1,38,21,1,12,21,0,2,19,8,8,25,21,0,1,0,15,16,0,16,0,21,17,21,1,39,16,22,0,3,11,14,21,0,1,0,15,16,0,18,21,1,39,21,1,38,21,0,3,19,7,16,21,1,18,0,8,7,0,22,17,0,5,0,45,17,14,21,0,3,21,1,18,0,8,7,0,22,17,0,17,16,0,15,21,0,3,17,0,18,21,1,3,21,1,65,21,1,7,0,16,8,7,7,21,0,1,17,25,21,1,42,21,1,6,21,0,1,21,1,27,21,1,26,21,1,3,21,1,26,7,3,2,0,16,21,0,1,17,8,8,25,21,0,2,21,1,46,21,0,1,17,21,1,14,16,0,8,21,0,2,17,0,7,21,0,1,17,25,21,0,2,21,0,1,3,2,0,16,21,0,1,21,1,13,21,0,2,17,17,25,21,0,2,21,0,1,3,2,0,16,21,0,1,21,1,12,21,0,2,17,17,25,21,0,1,3,1,0,15,3,0,17,25,21,0,1,21,0,2,0,16,0,22,17,3,2,21,1,0,15,112,21,0,2,0,16,0,21,17,7,8,25,21,0,1,3,1,25,21,0,2,21,1,58,16,21,1,59,0,22,17,0,5,0,49,17,14,21,0,2,21,1,65,16,22,0,3,11,14,21,0,3,0,18,21,1,10,7,16,21,1,63,16,22,0,4,11,21,1,18,21,1,61,7,16,22,0,5,11,14,21,0,5,21,1,59,0,22,17,0,5,0,50,17,14,21,0,1,21,1,65,16,22,0,6,11,21,1,57,16,22,0,7,11,14,21,0,3,21,1,18,21,1,54,7,15,113,3,2,21,1,0,21,0,5,8,16,22,0,8,11,14,21,0,6,21,0,7,21,1,57,21,0,8,17,21,1,8,15,114,8,16,0,15,21,0,3,17,25,15,115,22,0,3,11,14,15,116,22,0,4,11,14,21,0,1,21,0,3,21,0,4,3,2,21,1,0,0,0,8,16,25,21,0,2,21,0,1,3,2,25,21,0,1,3,1,25,21,0,1,21,1,4,21,1,67,8,21,1,1,21,1,4,21,1,55,8,21,1,35,0,16,7,21,1,57,21,1,7,21,1,3,21,1,49,21,1,61,0,22,19,21,1,62,21,1,2,19,7,8,19,0,22,0,21,3,2,0,20,0,23,3,1,8,19,25,21,0,1,21,1,71,21,0,5,7,21,0,2,17,22,0,6,11,21,1,56,0,21,17,22,0,7,11,14,21,0,4,22,0,8,11,14,15,117,22,0,9,11,14,21,0,1,21,0,9,21,0,6,7,21,0,2,17,25,21,0,1,21,1,71,21,0,5,7,21,1,35,21,1,62,21,1,7,21,1,50,8,21,1,62,21,1,51,0,21,19,3,2,21,1,0,21,1,1,21,1,60,0,21,19,8,7,21,1,58,21,1,5,21,1,69,8,19,21,0,2,17,22,0,6,11,14,15,118,22,0,7,11,14,21,1,1,21,1,55,9,21,0,7,21,1,1,0,18,21,1,55,7,9,3,3,21,1,0,21,1,58,21,1,7,21,1,59,8,21,1,61,0,22,19,21,1,54,0,21,21,1,7,21,1,56,8,19,8,22,0,7,12,14,21,0,1,21,0,7,21,0,6,0,16,21,1,6,21,1,57,21,1,3,21,1,62,7,0,22,19,8,16,17,21,1,35,21,0,4,7,21,0,2,21,0,7,21,0,6,0,16,0,21,17,17,17,21,1,56,16,25,21,0,1,21,1,58,16,21,1,60,0,22,17,0,5,0,56,17,14,21,0,1,21,1,40,21,1,55,7,16,21,1,18,21,0,4,7,21,0,2,17,25,21,0,1,21,1,39,21,1,5,21,1,69,8,21,0,2,17,22,0,3,11,14,21,0,3,0,18,21,1,57,7,16,22,0,4,11,21,1,18,21,1,51,7,0,22,17,22,0,5,11,14,21,0,4,21,1,62,21,0,5,17,21,1,59,0,22,17,21,1,18,21,1,52,7,16,0,5,0,57,17,14,21,0,3,21,1,35,21,1,43,21,1,6,0,22,21,1,62,21,0,5,17,0,17,16,21,1,7,21,1,61,8,8,7,21,0,5,21,1,63,21,0,4,17,17,22,0,6,11,14,21,0,6,21,1,18,21,1,38,7,16,0,5,0,58,17,14,21,0,3,21,1,35,0,22,21,1,1,0,16,0,21,19,3,2,21,1,0,21,1,2,8,7,21,0,4,21,1,58,21,0,5,17,17,21,1,18,21,1,61,7,16,22,0,7,11,14,21,0,1,21,1,67,21,1,5,21,1,21,8,21,0,2,17,21,1,67,21,0,6,0,16,0,21,17,21,1,21,21,0,7,3,1,17,17,25,15,119,22,0,3,11,14,21,0,1,21,1,67,21,1,67,21,1,39,21,1,4,21,1,21,21,1,6,21,1,1,21,1,57,21,1,5,21,1,62,8,21,0,2,19,21,1,51,0,21,19,0,17,21,1,4,0,18,0,22,7,8,9,8,8,19,16,0,21,21,1,41,21,0,3,8,21,0,2,17,25,21,0,1,21,1,58,16,21,1,60,0,22,17,0,5,0,60,17,14,21,0,1,21,1,57,16,21,1,61,0,22,17,0,17,16,0,18,21,0,1,21,1,7,21,1,79,8,7,16,25,21,0,1,21,1,39,16,21,1,57,21,1,7,21,1,62,8,21,1,51,0,21,19,0,17,21,1,4,0,18,0,22,7,8,9,21,1,3,21,1,21,7,21,1,1,19,21,1,81,21,1,2,19,21,0,2,21,1,57,16,17,22,0,3,11,14,21,0,1,21,1,81,21,0,2,21,1,50,21,0,3,17,21,1,51,21,0,3,21,1,62,16,17,21,1,61,0,21,21,1,56,21,0,2,17,21,1,47,0,27,17,21,1,54,21,0,3,17,17,17,25,21,0,1,21,1,58,16,21,1,60,0,22,17,0,5,0,61,17,14,21,0,1,21,1,57,16,21,1,61,0,22,17,0,17,16,0,18,21,0,1,21,1,7,21,1,82,8,7,16,25,21,0,1,0,0,16,0,5,0,62,17,14,21,0,2,21,1,58,16,21,1,59,0,22,17,0,5,0,63,17,14,21,0,1,21,1,39,16,21,1,57,21,1,5,21,1,60,8,21,0,2,17,0,5,0,64,17,14,21,0,2,21,1,67,16,0,18,21,1,10,7,16,21,1,18,21,1,52,7,16,0,5,0,65,17,14,21,0,1,21,1,39,16,21,1,81,21,0,2,21,1,57,16,17,22,0,3,11,14,21,0,3,21,1,61,0,22,17,21,1,60,21,0,2,17,21,1,18,21,1,52,7,16,0,5,0,66,17,14,21,0,1,21,0,2,21,1,57,16,21,1,55,0,21,17,21,1,8,15,120,8,21,0,2,17,25,21,0,1,21,1,86,21,1,6,21,1,40,21,0,2,7,8,16,25,21,0,1,21,1,57,21,1,5,21,1,58,8,21,0,2,17,0,5,0,67,17,14,21,0,1,21,1,86,21,0,2,17,25,21,0,2,21,1,58,16,21,1,55,0,21,17,25,0,27,22,0,3,11,22,0,4,11,14,3,0,22,0,5,11,14,21,0,1,22,0,6,11,14,21,0,1,0,18,21,1,57,7,16,21,1,90,16,0,18,15,121,7,16,25,21,1,1,21,1,18,0,18,21,1,21,21,1,6,21,1,67,8,7,7,3,0,21,1,55,16,19,22,0,3,11,14,21,0,1,0,0,16,0,5,0,68,17,14,21,0,1,0,18,21,1,39,7,16,22,0,4,11,14,21,0,4,21,1,67,16,0,16,0,21,17,21,1,57,16,22,0,5,11,14,21,0,4,0,18,21,1,57,7,16,21,1,58,21,0,5,17,21,1,67,16,21,1,18,21,1,52,7,16,0,5,0,69,17,14,21,0,1,21,1,58,16,21,1,59,21,0,5,17,0,5,0,70,17,14,21,0,1,22,0,6,11,21,1,58,16,22,0,7,11,21,1,88,16,22,0,8,11,21,1,35,15,122,7,21,0,1,21,1,39,16,17,22,0,9,11,14,21,0,9,21,0,3,16,21,1,38,21,0,4,0,18,21,1,81,21,1,6,21,0,7,8,7,16,17,0,5,0,71,17,14,21,0,9,0,18,15,123,7,16,21,0,3,16,22,0,10,11,14,21,0,1,21,1,90,21,0,9,17,21,1,35,21,1,43,21,1,6,0,18,21,1,55,7,8,7,21,0,10,17,21,1,56,16,25,21,0,1,21,1,58,16,21,1,58,0,22,17,0,5,0,72,17,14,21,0,1,0,18,21,1,9,7,16,21,1,18,21,1,52,7,16,0,5,0,73,17,14,21,0,1,21,1,60,0,27,17,21,1,18,21,1,52,7,16,0,5,0,74,17,14,21,0,1,0,4,21,0,1,0,3,16,22,0,5,11,17,22,0,6,11,14,0,21,22,0,7,11,14,21,0,5,0,18,21,1,88,21,1,4,0,18,15,124,7,8,21,0,4,9,7,16,25,21,0,1,0,0,16,0,5,0,75,17,14,21,1,92,21,1,1,7,22,0,3,11,14,21,0,1,21,0,3,0,18,21,0,3,7,21,1,18,0,18,0,18,21,1,21,21,1,6,21,1,67,8,7,7,7,3,0,21,1,55,16,21,1,55,16,19,3,2,21,1,0,21,1,38,21,1,55,0,22,19,8,16,25,21,0,1,0,0,16,0,5,0,76,17,14,21,0,2,21,1,38,16,21,1,55,0,22,17,22,0,3,11,14,21,0,2,21,1,57,15,125,3,2,21,1,0,21,0,3,8,16,22,0,4,11,14,21,0,1,21,1,39,16,21,1,57,21,1,5,21,1,60,8,21,0,4,17,0,5,0,78,17,14,21,0,1,21,1,39,16,21,1,81,21,1,6,21,1,57,8,21,0,4,17,21,1,58,21,0,4,17,21,1,18,21,1,52,7,16,0,5,0,79,17,14,21,0,1,21,1,2,21,1,92,21,0,1,21,1,7,21,1,43,8,7,9,15,126,3,2,21,1,0,21,0,3,8,21,0,2,17,25,21,0,2,21,1,58,16,21,1,58,0,22,17,0,5,0,80,17,14,21,0,1,21,1,39,16,22,0,3,11,21,1,57,21,1,5,21,1,58,8,21,0,2,17,0,5,0,81,17,14,21,0,2,0,18,21,1,9,7,16,21,1,18,21,1,52,7,16,0,5,0,82,17,14,21,0,3,21,1,55,21,1,52,21,1,62,21,1,7,21,1,59,8,19,21,0,2,17,21,1,18,21,1,52,7,16,0,5,0,83,17,14,0,21,21,1,55,21,0,2,17,21,1,54,21,0,3,17,21,1,61,21,0,2,17,22,0,2,12,14,21,0,2,21,1,57,16,21,1,63,21,1,6,21,1,88,8,16,21,1,62,16,21,1,18,21,1,1,21,1,54,21,0,3,21,1,7,0,16,8,19,21,1,61,21,0,2,21,1,7,0,16,8,19,7,0,21,17,21,1,3,0,16,7,21,0,1,21,1,67,16,17,25,21,0,2,0,18,21,0,1,21,1,7,21,1,98,8,7,16,25,21,0,1,21,1,58,21,1,6,0,21,8,21,1,18,21,1,53,7,9,21,1,5,21,1,3,21,1,62,7,8,21,0,2,17,22,0,3,11,14,21,0,1,0,21,21,0,3,3,2,15,127,3,2,21,1,0,0,21,21,1,58,21,0,3,17,8,21,0,2,17,25,21,0,4,22,0,5,11,14,21,0,2,22,0,6,11,14,21,0,1,22,0,7,11,14,15,128,1,22,0,8,11,14,21,0,4,21,1,58,21,1,6,0,21,8,21,1,8,21,0,1,8,9,21,0,8,3,2,0,16,21,0,6,21,1,57,0,22,17,17,25,21,0,1,22,0,2,11,14,21,1,55,21,1,6,0,21,8,21,1,8,15,129,1,8,25,21,0,2,21,1,58,16,21,1,3,21,1,62,7,0,22,17,22,0,5,11,14,21,0,5,21,1,60,0,21,17,0,5,0,84,17,14,21,0,1,21,1,58,16,21,1,60,21,0,5,17,0,5,0,85,17,14,21,0,2,21,1,20,0,22,17,22,0,6,11,21,1,18,21,1,54,7,16,22,0,7,11,14,0,21,21,1,101,21,0,2,21,1,67,16,21,1,7,0,16,8,21,1,5,21,0,4,8,7,21,0,7,17,22,0,8,11,14,21,0,2,21,1,57,16,0,22,0,22,21,1,7,21,1,62,21,1,4,21,1,88,8,8,21,1,54,21,0,7,19,0,18,21,1,61,21,1,6,21,0,7,8,21,1,7,21,0,8,8,7,9,21,1,3,21,1,60,7,0,21,19,21,1,18,21,1,52,7,9,3,2,21,1,0,21,1,55,21,1,6,0,21,8,8,16,0,5,0,86,17,14,21,0,1,21,1,58,16,21,1,3,21,1,62,7,21,0,5,17,22,0,9,11,14,21,0,1,21,1,20,21,0,9,17,22,0,10,11,14,21,0,10,21,1,100,21,0,6,17,22,0,11,11,14,21,0,11,21,1,18,21,1,101,21,0,1,21,1,67,16,21,1,7,0,16,8,21,1,7,21,0,4,21,1,6,21,0,2,21,1,67,16,21,1,7,0,16,8,8,8,7,7,16,22,0,12,11,14,21,1,3,0,21,7,21,1,60,21,0,12,21,1,6,21,1,54,21,1,6,21,0,6,21,1,18,21,1,54,7,16,8,8,19,22,0,13,11,14,21,0,9,21,1,88,16,0,18,21,0,1,21,1,39,16,21,1,7,0,16,8,7,16,21,1,18,21,1,54,7,21,1,88,9,21,1,7,21,1,67,8,16,21,1,54,21,0,10,21,1,18,21,1,54,7,16,17,0,18,15,130,1,21,1,6,21,0,2,21,1,57,16,8,7,16,25,21,0,1,22,0,2,11,14,21,1,77,21,1,52,7,21,1,63,9,0,19,21,1,52,7,21,1,77,21,1,61,7,9,3,2,0,16,21,0,1,17,22,0,3,11,14,15,131,1,25,21,0,1,21,1,58,16,21,1,60,0,22,17,0,5,0,88,17,14,21,0,1,21,1,104,16,22,0,5,11,14,21,0,1,21,1,57,16,21,1,88,16,0,18,0,22,21,1,1,21,0,1,21,1,58,21,1,55,0,22,19,21,1,8,21,1,40,21,1,55,7,8,16,21,1,43,21,0,5,17,21,1,7,0,16,8,21,1,5,21,1,39,8,0,22,21,1,7,21,1,62,8,19,3,2,21,1,0,21,1,55,21,1,6,0,21,8,8,7,16,21,0,4,21,0,5,17,21,1,43,21,0,5,21,1,107,16,17,25,21,0,2,21,1,58,16,22,0,3,11,14,21,0,1,21,1,58,16,21,1,60,21,0,3,17,0,5,0,89,17,14,21,0,1,21,0,3,21,1,75,21,1,88,8,21,0,2,21,1,39,16,17,21,0,3,21,1,75,21,1,38,8,21,0,2,17,25,21,0,2,21,1,58,16,21,1,59,0,22,17,0,5,0,90,17,14,21,0,1,21,1,39,16,21,1,57,21,1,5,21,1,60,8,21,0,2,17,0,5,0,91,17,14,21,0,2,21,1,67,16,0,18,21,1,10,7,16,21,1,18,21,1,52,7,16,0,5,0,92,17,25,21,0,1,21,1,39,16,21,1,96,21,0,2,17,0,18,21,1,18,21,1,50,7,7,16,21,1,88,16,0,18,21,1,3,21,0,1,7,21,1,99,21,1,43,21,1,6,21,0,2,8,19,7,16,25,21,0,1,21,1,114,21,0,2,17,14,21,0,2,21,1,67,16,22,0,2,12,14,21,0,2,21,1,112,16,21,1,63,16,21,1,18,21,1,61,7,16,21,1,62,21,0,1,21,1,58,16,17,22,0,3,11,14,21,0,3,21,1,55,21,0,2,17,21,1,18,21,1,52,7,16,0,5,0,93,17,14,21,0,1,21,1,115,21,0,3,21,1,88,16,21,1,1,21,1,90,21,1,3,21,1,112,21,1,4,21,1,63,8,7,19,21,0,2,17,21,1,95,21,0,2,17,17,25,21,0,1,21,1,114,21,0,2,17,14,21,0,2,21,1,67,16,22,0,2,12,14,21,0,1,21,1,58,16,22,0,3,11,14,21,0,2,21,0,3,21,1,7,21,1,55,8,21,1,52,21,1,112,19,16,21,1,18,21,1,52,7,16,21,1,124,16,14,21,0,1,21,1,115,21,0,3,21,1,88,16,21,1,1,21,1,90,21,1,3,21,1,112,21,1,4,21,1,63,8,7,19,21,0,2,17,21,1,95,21,0,2,17,21,1,107,16,17,25,21,0,1,21,1,111,21,1,6,21,0,2,8,21,1,119,21,1,7,21,1,40,21,1,70,7,8,9,21,1,5,21,1,111,8,21,0,2,17,25,21,0,1,15,132,1,21,0,5,21,1,122,21,0,1,21,0,4,21,0,2,17,17,7,21,0,2,17,25,21,0,1,21,0,4,21,0,2,17,22,0,6,11,14,21,0,6,21,0,5,21,0,2,17,21,1,38,21,0,1,17,21,1,125,16,14,21,0,6,25,21,0,1,21,1,58,16,21,1,58,0,22,17,21,1,124,16,14,21,0,1,21,1,95,16,22,0,3,11,14,21,0,3,0,18,21,1,10,7,16,21,1,18,21,1,52,7,16,21,1,124,16,14,21,0,3,0,3,16,22,0,4,11,14,0,22,21,1,60,21,0,4,17,21,1,18,21,1,52,7,16,21,1,125,16,14,21,0,4,21,1,63,16,21,1,90,16,22,0,5,11,14,21,0,5,21,1,35,0,27,7,16,21,1,95,21,0,1,21,1,35,21,1,57,7,16,21,1,90,16,17,21,1,43,21,0,5,21,1,95,21,0,3,17,21,1,104,16,17,25,21,0,2,21,1,58,16,21,1,58,0,22,17,21,1,124,16,14,21,0,2,0,18,21,1,10,7,16,21,1,18,21,1,52,7,16,21,1,124,16,14,21,0,1,21,1,95,21,1,5,21,1,43,21,1,6,21,1,104,8,8,21,0,2,21,1,96,16,17,25,21,0,1,0,0,16,21,1,125,16,14,21,0,1,21,1,58,16,21,1,58,0,21,17,21,1,125,16,14,21,0,1,21,1,122,16,25,21,0,2,21,1,58,21,1,5,21,1,62,8,21,0,1,17,22,0,3,11,14,21,0,3,0,22,21,1,7,21,1,60,8,21,1,52,21,1,60,21,1,6,0,21,8,19,16,21,1,125,16,14,21,0,2,0,22,21,1,57,3,2,21,1,123,21,0,3,8,16,22,0,4,11,14,21,0,1,21,1,57,16,21,1,60,21,0,4,17,21,1,125,16,14,21,0,1,21,1,43,21,1,81,21,1,6,21,0,4,8,3,2,21,1,123,21,0,3,8,16,21,1,38,21,0,2,17,21,1,125,16,14,21,0,1,21,1,84,21,0,4,17,25,21,0,1,21,1,57,16,21,1,58,0,23,17,21,1,125,16,14,21,0,1,21,1,43,16,21,1,38,21,0,2,17,21,1,125,16,14,21,0,1,21,1,43,0,22,17,25,21,0,1,21,1,57,16,21,1,58,0,22,17,21,1,125,16,14,21,0,1,21,1,43,16,25,21,0,1,21,1,58,16,21,1,58,0,22,17,21,1,124,16,14,21,0,1,0,18,21,1,10,7,16,21,1,18,21,1,52,7,16,21,1,124,16,14,21,0,1,21,1,84,21,1,6,0,22,8,21,1,60,21,1,84,21,1,6,0,27,8,19,21,1,18,21,1,52,7,9,16,21,1,125,16,14,21,0,1,0,3,16,25,21,1,3,21,1,3,0,21,7,0,5,0,96,19,3,1,21,1,95,21,0,1,21,1,43,0,22,17,17,7,21,1,122,21,1,55,21,1,111,21,0,1,21,1,43,0,21,17,19,21,1,122,9,19,25,21,0,1,21,1,129,1,16,25,21,0,1,21,0,5,21,0,2,17,22,0,6,11,14,0,21,22,0,7,11,22,0,8,11,14,21,0,6,0,21,21,1,73,15,133,1,8,16,14,21,0,1,22,0,9,11,14,15,134,1,22,0,10,11,14,21,0,7,21,0,10,21,1,1,21,0,4,21,0,2,19,7,16,22,0,11,11,14,21,0,8,21,1,62,16,21,0,10,21,1,1,21,1,130,1,21,0,4,7,21,0,2,19,7,16,22,0,12,11,14,21,0,6,0,21,21,1,73,21,1,3,21,0,11,21,0,12,3,2,7,21,1,122,0,21,21,1,7,21,1,55,8,19,21,1,122,21,1,49,19,8,16,25,21,1,19,21,1,5,0,18,21,0,1,7,8,25,21,0,1,25,21,0,1,25,21,0,1,14,21,1,7,21,2,64,16,25,0,22,0,7,21,1,6,17,22,1,6,12,14,21,0,1,0,16,21,1,6,17,25,21,1,8,21,1,7,21,1,5,0,16,21,0,1,17,17,22,1,8,12,25,21,0,2,0,14,16,22,0,5,11,14,21,0,2,0,12,16,0,17,16,21,2,18,0,8,21,2,6,21,0,1,0,14,16,21,2,7,0,16,8,0,12,21,0,5,21,2,7,0,16,8,19,8,7,0,22,17,0,5,0,32,17,14,21,0,5,21,2,18,0,8,7,0,22,17,0,17,16,0,18,21,0,1,0,15,16,21,2,7,0,16,8,21,0,4,21,0,2,0,15,16,21,2,7,0,16,8,19,7,16,0,15,21,0,5,17,25,21,0,2,0,14,16,22,0,5,11,14,21,0,2,0,12,16,22,0,6,11,14,21,0,1,0,14,16,22,0,7,11,14,21,0,6,0,17,16,21,2,18,0,8,21,2,6,21,0,7,21,2,7,0,16,8,0,12,21,0,5,21,2,7,0,16,8,19,8,7,0,22,17,0,5,0,33,17,14,21,0,6,0,7,21,0,1,0,12,16,17,0,17,16,21,2,18,0,8,21,2,6,0,6,21,2,6,21,0,6,8,21,2,3,0,16,7,21,0,7,19,8,7,0,22,17,22,0,8,11,14,21,0,2,0,15,16,22,0,9,11,14,21,0,1,0,15,16,22,0,10,11,14,21,0,8,0,17,21,2,5,0,18,21,2,3,21,0,10,7,0,16,0,6,21,2,6,0,8,21,2,6,21,0,8,8,8,19,21,0,4,21,0,9,21,2,7,0,16,8,19,7,8,21,0,9,21,2,16,16,17,0,15,16,0,15,21,0,7,17,25,21,0,1,21,2,23,21,0,4,7,21,0,2,17,25,21,0,1,0,18,15,135,1,21,0,2,7,7,16,25,21,0,2,0,18,15,136,1,21,0,1,7,7,16,25,21,1,6,0,8,0,23,17,0,13,21,0,1,21,2,18,21,2,14,7,16,22,1,10,12,0,7,21,0,1,21,2,18,21,2,15,7,16,22,1,9,12,17,17,25,21,0,1,14,21,2,3,0,21,7,21,2,13,0,21,21,2,101,21,1,8,21,2,7,0,16,8,21,2,5,21,0,4,8,7,21,1,7,17,19,22,0,5,11,14,21,2,1,21,1,6,3,2,21,2,0,0,13,21,2,6,21,1,6,8,8,22,0,6,11,14,0,21,0,12,21,1,6,17,0,6,21,1,6,17,0,2,0,23,17,21,2,15,16,22,0,7,11,0,17,16,0,18,21,2,1,0,6,0,22,19,0,7,21,0,7,19,0,10,0,23,19,7,16,21,2,18,15,137,1,7,21,1,6,0,17,16,17,25,21,0,1,0,18,21,2,10,7,16,21,2,18,0,8,7,0,22,17,0,5,0,36,17,14,0,22,0,7,21,1,3,17,22,0,3,11,14,21,2,1,0,7,21,0,3,19,21,2,3,0,16,7,21,1,3,0,17,16,0,18,0,7,21,2,6,21,0,3,8,7,16,0,19,21,2,1,21,2,3,0,16,7,21,0,1,19,0,12,0,21,19,0,8,0,7,19,0,6,21,2,1,19,7,16,19,22,0,4,11,14,21,0,1,0,19,0,6,7,16,21,2,7,0,16,8,22,0,5,11,14,0,21,21,0,4,16,22,0,6,11,21,0,5,16,22,0,7,11,14,21,0,3,21,0,5,16,0,17,16,0,18,15,138,1,7,16,25,21,0,1,21,2,20,0,22,17,22,0,3,11,21,2,18,0,8,7,0,22,17,22,0,4,11,14,21,0,4,0,17,16,0,15,21,0,3,17,0,18,0,6,21,2,6,0,8,21,2,6,21,0,4,8,8,21,2,3,0,16,7,21,0,1,0,15,16,19,7,21,0,2,17,25,21,0,2,0,18,21,0,1,21,2,7,0,16,8,7,16,25,21,0,1,3,1,25,21,0,1,14,21,1,9,0,16,21,1,12,0,16,21,1,14,17,17,22,0,3,11,14,21,1,14,0,6,0,22,17,22,1,14,12,21,1,13,16,22,1,15,12,14,21,0,3,25,21,0,1,0,12,21,1,15,17,25,21,0,1,0,12,16,0,13,0,22,17,0,5,0,42,17,14,21,0,1,21,1,3,21,0,2,17,25,21,0,2,0,12,16,21,2,11,0,22,17,0,5,0,43,17,14,21,0,1,21,2,39,16,21,2,16,21,2,5,0,13,8,21,0,2,17,0,5,0,44,17,14,21,0,2,21,2,16,16,22,0,3,11,14,21,0,2,0,15,16,21,2,7,0,16,8,22,0,4,11,14,21,0,1,21,0,3,21,2,12,0,21,17,21,2,8,15,139,1,8,0,21,17,25,21,0,1,21,2,58,21,0,4,17,25,21,0,1,21,2,35,21,2,1,0,22,3,2,21,2,0,21,2,2,8,7,21,1,4,17,21,2,18,21,2,54,7,16,22,0,3,11,14,21,0,3,21,2,55,0,21,17,0,5,0,51,17,14,21,1,4,21,2,57,16,0,17,16,21,2,54,21,1,4,17,21,2,18,21,2,61,7,16,22,0,4,11,14,21,1,3,0,16,21,0,4,17,21,2,133,1,16,22,0,5,11,14,0,30,21,2,55,21,0,5,17,0,5,0,52,17,14,21,2,58,21,2,6,21,2,50,8,0,5,0,53,19,21,2,2,21,2,1,19,22,0,6,11,14,21,0,3,21,2,46,21,1,7,17,21,0,6,21,2,50,21,2,51,3,3,21,2,0,21,0,5,21,2,50,0,23,17,8,16,22,0,7,11,14,21,1,3,21,2,35,21,2,1,21,0,7,3,2,21,2,0,21,2,2,8,7,21,1,4,17,22,1,3,12,14,21,0,7,21,2,54,21,0,3,17,21,0,5,21,2,58,0,25,17,21,2,8,21,2,55,21,2,6,21,1,7,8,21,2,8,15,140,1,8,8,16,25,21,1,8,0,17,16,0,18,21,2,2,7,21,2,6,0,1,8,15,141,1,3,2,21,2,0,21,1,7,21,2,55,0,21,17,8,21,0,1,17,25,21,0,1,21,2,10,16,0,5,0,54,17,14,21,0,1,0,17,16,25,21,0,1,21,2,58,16,21,2,58,0,22,17,0,5,0,55,17,14,21,0,1,0,18,21,1,3,7,16,21,2,18,0,18,21,2,21,21,2,6,21,2,67,8,7,7,3,0,21,2,55,16,17,25,21,1,9,21,1,7,21,2,61,21,0,4,17,7,22,0,5,11,14,21,0,1,21,2,35,21,0,5,7,21,2,2,21,2,4,0,18,21,0,1,21,2,7,21,0,5,8,7,8,21,2,1,21,2,4,0,18,21,2,1,21,0,5,21,0,2,19,7,8,21,1,8,3,4,21,2,0,21,2,38,21,2,5,21,2,69,8,21,2,59,21,0,4,21,2,51,0,21,17,19,21,2,53,0,21,21,2,59,21,0,4,17,21,2,52,21,1,7,17,19,21,2,66,0,23,19,21,2,18,21,2,61,21,2,6,0,23,21,2,7,21,2,54,8,8,7,9,8,21,0,2,17,25,21,0,2,0,17,16,0,18,21,0,1,21,2,39,16,21,2,7,0,16,8,7,16,22,0,3,11,14,21,0,1,21,2,20,21,0,2,17,22,0,4,11,21,2,18,21,2,54,7,16,22,0,5,11,14,21,0,3,21,2,18,21,2,54,7,16,0,17,16,0,18,21,2,1,21,2,54,21,0,5,19,21,2,61,21,0,5,0,17,16,21,2,67,21,0,4,17,19,21,2,4,0,18,21,0,1,21,2,67,16,21,2,7,0,16,8,7,8,7,16,21,2,67,21,0,3,17,25,21,0,2,21,2,9,16,0,5,0,59,17,14,21,0,1,21,2,57,16,22,0,3,11,14,0,21,21,2,55,21,0,2,17,22,0,4,11,14,21,0,2,21,2,49,16,22,0,5,11,21,2,50,21,0,3,17,22,0,6,11,14,21,0,5,3,1,22,0,7,11,14,0,22,22,0,8,11,14,21,0,6,0,17,16,21,0,4,21,2,8,21,2,61,8,21,0,6,21,2,62,21,0,3,17,17,21,0,1,21,2,58,16,21,2,57,0,22,17,21,2,8,15,142,1,8,21,0,1,17,22,0,9,11,14,21,0,9,0,18,21,0,1,21,2,67,16,21,2,7,0,16,8,7,16,21,0,5,21,2,55,21,0,3,17,21,2,8,15,143,1,21,0,1,7,8,16,21,2,67,21,0,7,17,25,21,0,2,21,2,67,16,21,2,1,21,2,68,21,2,5,0,18,21,2,61,7,8,21,2,63,19,21,1,3,17,21,2,35,21,0,1,21,2,7,21,2,43,21,2,6,0,18,21,2,55,7,8,8,7,16,21,2,56,21,2,67,21,2,39,21,2,4,21,0,1,21,2,39,16,21,2,84,21,2,6,21,2,57,8,21,0,2,17,21,2,7,21,2,21,8,8,19,16,25,21,0,1,21,2,57,21,2,6,21,1,4,8,21,2,8,15,144,1,8,16,14,21,1,5,0,16,0,22,21,2,61,21,1,3,17,22,1,3,12,17,25,21,0,2,21,2,88,16,0,18,21,2,54,21,2,6,21,0,1,21,2,58,21,1,8,17,8,21,2,3,21,2,97,7,21,1,6,19,21,2,39,21,2,7,0,16,8,21,0,1,19,7,16,25,21,0,1,21,2,81,16,0,18,21,2,18,21,2,61,7,7,16,22,0,3,11,14,21,0,3,21,2,84,0,27,17,21,2,90,21,0,1,17,21,2,62,21,0,3,21,2,89,16,0,16,0,21,17,21,2,88,16,17,25,21,0,1,14,21,1,6,0,16,21,1,7,17,21,2,1,0,22,21,2,61,21,1,7,17,22,1,7,12,17,25,21,0,1,21,2,58,16,21,2,58,0,22,17,0,5,0,77,17,14,21,0,1,0,18,21,2,57,7,16,25,21,0,2,0,18,21,2,92,21,2,1,7,7,16,21,2,54,21,1,4,21,2,84,0,22,17,21,2,89,16,21,2,21,0,22,3,1,17,0,19,21,2,54,7,16,21,2,89,16,17,21,2,18,0,18,0,18,21,2,61,7,7,7,16,0,18,21,0,1,21,2,20,21,1,4,21,2,57,16,17,21,2,21,21,1,4,21,2,18,21,2,54,7,16,3,1,17,21,2,3,21,2,67,7,21,0,1,17,21,2,7,21,2,43,8,7,16,25,21,0,1,21,2,57,21,2,5,21,2,62,8,21,0,2,17,21,2,54,16,22,0,3,11,14,21,0,1,21,2,57,21,2,5,21,2,50,8,21,0,2,17,22,0,4,11,14,21,0,1,15,145,1,21,2,6,21,2,57,21,2,61,21,0,4,21,2,88,16,21,2,61,0,22,17,21,2,62,16,19,8,21,2,5,15,146,1,8,21,0,2,17,22,0,5,11,14,21,0,5,21,0,3,3,2,25,21,0,2,22,0,3,11,14,21,0,1,22,0,4,11,14,15,147,1,21,1,7,3,2,21,2,0,21,2,58,21,2,6,21,1,6,8,8,22,0,5,11,14,0,21,21,0,5,16,25,15,148,1,22,0,3,11,14,0,27,21,0,3,0,22,21,2,61,21,0,1,17,17,21,2,61,0,22,17,25,21,0,2,21,2,102,21,0,1,21,2,7,21,1,13,8,7,16,25,21,0,2,21,2,58,16,21,2,3,21,2,62,7,0,22,17,22,0,3,11,14,21,0,3,21,2,60,0,21,17,0,5,0,87,17,14,21,0,1,21,2,19,16,21,2,1,21,2,4,21,0,3,21,2,75,0,21,8,8,21,2,1,21,0,3,21,2,75,21,2,55,8,3,2,21,2,0,21,0,3,21,2,55,0,21,17,8,21,2,5,0,18,21,2,39,7,8,21,1,3,9,3,2,21,2,0,21,0,2,21,2,57,16,21,2,55,0,21,17,8,15,149,1,3,2,21,2,0,21,2,67,21,2,4,21,2,57,8,21,2,55,0,26,19,21,2,5,21,2,52,8,8,21,0,2,17,25,21,0,1,25,21,0,1,21,2,9,16,0,5,0,97,17,14,21,0,1,21,2,50,21,1,8,17,22,1,8,12,14,21,0,1,21,2,51,21,1,7,17,22,1,7,12,25,21,0,1,21,2,61,0,21,17,21,2,88,16,21,2,95,21,1,9,3,1,17,0,19,21,2,2,21,2,4,21,0,4,8,7,16,25,21,0,1,21,2,2,21,0,4,17,25,21,0,4,21,2,2,21,0,1,17,25,21,0,2,22,0,3,11,0,7,16,22,0,4,11,14,0,21,22,0,5,11,22,0,6,11,22,0,7,11,14,0,25,22,0,8,11,14,21,0,1,0,22,0,12,21,2,7,17,0,7,0,22,17,21,3,8,0,18,0,8,21,3,6,21,2,7,8,7,8,16,21,3,7,0,16,8,21,3,5,21,1,5,8,22,0,9,11,14,21,0,9,0,21,0,22,0,23,3,4,22,0,10,11,14,0,6,15,150,1,3,2,0,16,21,0,3,0,13,0,26,17,17,22,0,11,11,14,15,151,1,22,0,12,11,14,15,152,1,15,153,1,21,0,12,3,3,21,3,0,15,154,1,8,22,0,13,11,14,21,0,1,0,18,21,0,1,21,3,7,15,155,1,8,7,16,25,21,1,6,21,1,7,0,12,21,0,1,17,21,3,8,15,156,1,8,16,25,21,0,1,0,22,0,7,21,1,3,17,21,3,12,21,0,2,17,21,3,8,21,3,40,21,0,0,21,3,6,21,0,2,0,6,0,22,17,8,7,8,16,21,2,3,21,0,2,21,1,4,16,17,25,21,2,7,21,3,62,21,0,1,17,0,17,16,0,18,21,2,6,0,1,16,7,16,21,3,21,22,2,6,13,14,21,2,7,25,21,0,1,21,3,49,21,2,7,17,0,18,21,2,6,21,3,7,0,16,8,7,16,25,21,0,2,21,3,20,0,22,17,22,0,3,11,21,3,21,22,1,7,13,14,21,0,3,21,3,18,21,3,54,7,16,22,1,8,12,21,3,1,21,3,4,0,17,8,0,18,21,3,61,7,21,3,54,19,21,0,1,17,25,21,1,6,21,3,62,21,1,5,17,21,3,54,21,1,8,17,0,17,16,0,18,21,0,4,0,1,16,21,3,67,16,0,16,0,21,17,7,16,21,3,21,21,3,3,21,3,21,7,3,2,21,3,0,21,1,4,8,21,0,1,21,3,67,16,17,25,21,0,1,22,2,4,12,21,3,3,0,16,7,21,2,6,17,22,2,5,12,14,0,27,22,2,3,12,25,21,0,2,0,18,21,0,1,21,3,7,0,16,8,7,16,25,21,0,1,21,3,58,21,0,2,17,0,19,21,3,52,7,16,21,3,18,21,3,61,7,16,22,0,3,11,14,21,0,3,21,3,88,16,0,18,21,0,2,21,3,7,0,16,8,7,16,21,3,18,21,3,54,7,16,22,0,4,11,14,21,0,3,21,3,56,21,3,6,21,1,4,8,21,3,8,21,0,2,21,0,1,3,2,21,3,7,21,3,35,0,16,7,8,21,3,4,15,157,1,8,8,16,14,21,0,4,25,21,1,4,21,3,61,21,3,6,21,0,1,8,21,3,5,21,2,5,8,21,1,3,17,21,3,58,21,3,6,0,21,8,21,3,8,21,0,1,21,3,61,0,22,17,21,3,4,21,1,5,8,8,16,25,21,0,1,0,22,21,3,7,21,3,56,8,21,3,8,15,158,1,8,21,0,2,17,25,21,0,2,21,3,105,16,21,3,89,16,22,0,3,11,14,21,0,1,21,3,104,21,0,2,21,3,43,21,0,3,17,17,21,3,3,21,3,62,7,0,22,17,21,3,51,0,21,17,21,3,3,21,3,43,7,21,0,3,17,22,0,4,11,14,21,0,1,21,1,3,21,3,75,21,3,38,8,21,0,2,21,3,43,21,0,4,17,17,21,2,2,21,3,8,21,3,54,21,3,6,21,3,62,21,3,6,21,0,4,8,8,21,3,61,21,3,2,19,8,21,0,2,21,3,57,16,17,25,21,0,1,21,1,8,0,7,0,22,17,21,4,8,21,1,9,0,7,0,22,19,21,4,8,15,159,1,8,8,0,22,0,7,21,0,1,17,17,25,21,0,2,0,6,21,1,3,17,22,1,4,12,14,21,0,1,0,6,21,1,3,17,22,1,7,12,21,2,6,16,22,1,6,12,0,6,21,1,3,17,21,2,6,16,22,1,5,12,14,21,1,7,0,13,21,3,6,17,22,1,8,12,14,21,1,6,21,1,11,16,14,21,1,7,21,1,13,21,1,4,17,25,21,0,2,0,6,0,22,17,22,1,4,12,0,12,21,1,6,17,0,8,0,23,17,0,6,22,1,8,13,14,21,0,2,25,21,0,1,0,6,0,22,17,22,1,7,12,0,12,21,1,5,17,0,6,22,1,8,13,14,21,0,1,25,21,0,1,21,1,10,21,4,0,21,1,8,8,21,0,2,17,25,21,0,1,0,16,21,1,7,21,1,13,21,1,4,17,17,25,0,22,0,6,21,0,1,17,21,2,4,16,22,2,6,12,21,2,5,16,22,2,7,12,14,21,2,6,25,21,0,1,21,4,18,21,4,62,7,16,21,4,54,16,22,2,3,12,14,21,0,1,21,4,18,21,4,50,7,16,21,4,54,21,1,4,17,22,1,4,12,25,0,23,21,4,46,21,0,2,17,21,4,50,16,22,0,3,11,21,4,61,21,0,1,17,22,0,4,11,21,3,2,16,22,0,5,11,14,21,0,1,21,0,4,3,2,0,16,21,0,5,17,21,2,3,21,0,2,21,4,49,0,23,17,21,4,54,21,0,5,17,21,4,61,21,0,3,17,17,25,21,0,1,14,0,23,22,2,8,12,14,21,2,4,22,2,7,12,14,21,0,1,22,2,4,12,25]) + new Uint8Array([15,1,22,0,0,11,14,15,2,22,0,1,11,14,15,3,0,20,15,4,8,22,0,2,11,14,15,5,22,0,3,11,14,15,6,22,0,4,11,14,15,7,22,0,5,11,14,15,8,22,0,6,11,14,15,9,22,0,7,11,14,15,10,22,0,8,11,14,15,11,22,0,9,11,14,0,12,21,0,7,0,11,8,0,21,3,2,21,0,0,0,0,8,22,0,10,11,14,0,12,21,0,7,0,11,8,0,8,0,13,21,0,7,0,21,8,19,0,21,3,2,21,0,0,0,0,8,22,0,11,11,14,21,0,4,0,13,7,22,0,12,11,14,21,0,12,0,7,0,22,19,0,20,15,12,8,22,0,13,11,14,0,13,0,7,0,22,19,22,0,14,11,14,15,13,0,16,21,0,14,19,0,20,0,11,8,22,0,15,11,14,15,14,0,16,21,0,13,19,0,20,0,7,21,0,5,21,0,15,21,0,5,0,7,8,8,8,22,0,16,11,14,0,22,0,14,0,16,0,21,19,3,2,21,0,0,0,12,21,0,13,0,21,19,8,22,0,17,11,14,15,15,22,0,18,11,14,21,0,18,22,0,19,11,14,0,0,0,7,0,22,19,21,0,9,21,0,13,8,22,0,20,11,14,0,14,21,0,8,15,16,8,22,0,21,11,14,15,17,22,0,22,11,14,15,18,22,0,23,11,14,15,19,22,0,24,11,14,0,13,0,7,21,0,12,19,22,0,25,11,14,0,22,0,15,0,16,0,21,19,21,0,8,0,13,0,8,0,23,19,0,7,0,22,19,15,20,3,2,21,0,0,21,0,1,21,0,5,0,0,8,8,8,3,2,21,0,0,21,0,1,21,0,5,0,14,8,21,0,19,0,8,7,0,22,19,21,0,13,0,21,19,8,22,0,26,11,14,21,0,25,21,0,26,21,0,4,21,0,26,7,0,7,9,3,2,21,0,0,21,0,2,21,0,5,0,0,8,8,15,21,3,3,21,0,0,0,0,21,0,6,0,6,8,8,22,0,27,11,14,15,22,22,0,28,11,14,15,23,22,0,29,11,14,0,12,21,0,13,0,21,19,21,0,9,15,24,8,22,0,30,11,14,0,12,21,0,13,0,21,19,21,0,9,15,25,8,22,0,31,11,14,15,26,22,0,32,11,14,15,27,22,0,33,11,14,15,28,22,0,34,11,14,15,29,22,0,35,11,14,15,30,22,0,36,11,14,0,0,21,0,6,0,12,8,0,21,3,2,21,0,1,21,0,5,0,0,8,0,12,3,2,0,12,21,0,6,0,12,8,0,21,3,2,0,14,21,0,6,21,0,36,0,12,7,8,21,0,19,0,8,7,0,22,19,0,21,3,2,15,31,3,5,21,0,19,15,32,7,16,22,0,37,11,14,0,21,15,33,3,2,21,0,0,0,0,8,22,0,38,11,14,21,0,37,0,20,21,0,38,8,22,0,39,11,14,21,0,37,0,7,0,22,19,0,20,3,0,0,14,3,2,21,0,0,0,0,8,8,22,0,40,11,14,15,34,22,0,41,11,14,15,35,22,0,42,11,14,0,22,21,0,42,21,0,32,8,21,0,7,21,0,20,8,22,0,43,11,14,21,0,43,0,20,21,0,43,21,0,7,0,21,8,8,22,0,44,11,14,0,0,21,0,9,0,15,21,0,5,21,0,17,8,21,0,13,0,21,19,21,0,9,15,36,8,8,22,0,45,11,14,15,37,22,0,46,11,14,21,0,24,0,9,7,22,0,47,11,14,21,0,24,0,10,7,22,0,48,11,14,21,0,4,21,0,47,21,0,8,21,0,48,8,7,0,20,0,23,21,0,47,16,21,0,8,21,0,48,8,8,22,0,49,11,14,21,0,24,15,38,0,20,0,7,21,0,1,3,2,21,0,0,0,13,21,0,7,0,21,8,8,8,7,22,0,50,11,14,21,0,24,15,39,0,20,21,0,15,8,7,22,0,51,11,14,21,0,24,15,40,0,20,0,7,21,0,5,21,0,51,21,0,5,0,7,8,8,8,7,22,0,52,11,14,21,0,24,0,8,7,0,20,21,0,46,0,21,7,8,22,0,53,11,14,21,0,24,0,8,0,7,0,6,19,7,0,20,21,0,46,0,22,7,8,22,0,54,11,14,21,0,24,0,8,0,20,21,0,14,0,7,21,0,13,19,21,0,7,0,21,8,8,7,22,0,55,11,14,21,0,24,21,0,12,0,7,0,22,19,7,0,20,15,41,8,22,0,56,11,14,21,0,24,0,13,0,7,0,22,19,7,0,20,21,0,45,8,22,0,57,11,14,21,0,24,0,12,0,7,0,22,19,7,0,20,21,0,17,8,22,0,58,11,14,21,0,24,0,12,7,0,20,0,12,8,22,0,59,11,14,21,0,24,21,0,12,7,0,20,21,0,4,0,21,7,0,5,0,46,19,8,22,0,60,11,14,21,0,24,0,13,7,0,20,21,0,4,0,21,7,0,5,0,47,19,8,22,0,61,11,14,21,0,24,0,6,7,22,0,62,11,14,21,0,24,0,7,7,22,0,63,11,14,21,0,63,21,0,62,0,22,19,22,0,64,11,14,21,0,62,0,21,3,2,21,0,63,0,21,3,2,21,0,55,0,22,3,2,21,0,47,0,22,3,2,21,0,48,0,22,3,2,21,0,49,0,22,3,2,21,0,53,0,22,3,2,21,0,54,0,21,3,2,21,0,64,0,22,3,2,21,0,50,0,21,3,2,21,0,51,0,28,3,2,21,0,52,0,29,3,2,21,0,56,0,21,3,2,21,0,61,0,22,3,2,21,0,59,0,22,3,2,21,0,60,0,22,3,2,21,0,57,0,21,3,2,21,0,58,0,21,3,2,3,18,21,0,19,15,42,7,21,0,4,0,21,7,0,5,0,48,19,3,1,0,16,0,21,17,17,22,0,65,11,14,15,43,0,15,3,2,21,0,0,0,0,8,22,0,66,11,14,15,44,22,0,67,11,14,0,15,0,20,21,0,66,8,22,0,68,11,14,15,45,22,0,69,11,14,15,46,0,20,15,47,8,22,0,70,11,14,21,0,70,21,0,5,21,0,57,8,22,0,71,11,14,15,48,22,0,72,11,14,15,49,22,0,73,11,14,21,0,73,22,0,74,11,14,15,50,22,0,75,11,14,21,0,75,22,0,76,11,14,15,51,22,0,77,11,14,21,0,77,22,0,78,11,14,21,0,68,21,0,6,21,0,22,8,15,52,3,2,21,0,0,21,0,59,21,0,56,0,22,19,21,0,6,21,0,54,8,8,22,0,79,11,14,15,53,22,0,80,11,14,15,54,22,0,81,11,14,21,0,80,0,20,21,0,81,8,22,0,82,11,14,15,55,22,0,83,11,14,15,56,22,0,84,11,14,21,0,83,0,20,21,0,84,8,22,0,85,11,14,15,57,22,0,86,11,14,21,0,44,21,0,7,21,0,29,8,22,0,87,11,14,21,0,58,21,0,59,0,21,19,21,0,63,0,22,19,21,0,42,15,58,15,59,3,2,21,0,0,15,60,8,8,22,0,88,11,14,21,0,86,0,20,21,0,69,8,22,0,89,11,14,0,21,21,0,42,21,0,34,8,0,20,21,0,33,8,22,0,90,11,14,21,0,88,0,20,21,0,29,8,22,0,91,11,14,21,0,68,21,0,5,21,0,58,8,21,0,56,0,21,19,21,0,9,15,61,15,62,3,2,21,0,0,0,18,21,0,59,7,21,0,58,0,22,19,21,0,19,21,0,54,7,9,0,22,3,2,21,0,0,21,0,59,21,0,58,0,22,19,8,8,8,22,0,92,11,14,15,63,22,0,93,11,14,15,64,22,0,94,11,14,15,65,22,0,95,11,14,21,0,79,0,20,21,0,92,8,22,0,96,11,14,21,0,95,0,20,21,0,94,8,22,0,97,11,14,15,66,22,0,98,11,14,21,0,98,15,67,3,2,21,0,0,21,0,2,21,0,5,21,0,68,21,0,5,0,18,0,0,7,8,8,21,0,19,21,0,54,7,9,8,22,0,99,11,14,21,0,99,21,0,7,21,0,68,21,0,1,3,2,21,0,0,0,0,8,8,22,0,100,11,14,15,68,22,0,101,11,14,15,69,22,0,102,11,14,15,70,22,0,103,11,14,15,71,22,0,104,11,14,21,0,104,21,0,27,7,0,20,0,21,21,0,28,21,0,27,8,8,22,0,105,11,14,21,0,104,21,0,4,21,0,27,7,7,0,20,0,22,21,0,28,21,0,4,21,0,27,7,8,8,22,0,106,11,14,15,72,22,0,107,11,14,0,4,21,0,7,21,0,36,0,22,7,8,22,0,108,11,14,15,73,22,0,109,11,14,21,0,109,21,0,1,21,0,5,0,19,21,0,62,7,8,21,0,4,21,0,63,7,0,22,19,21,0,4,21,0,44,7,21,0,4,21,0,91,21,0,5,21,0,105,21,0,5,21,0,108,8,8,7,19,7,22,0,110,11,14,15,74,22,0,111,11,14,21,0,107,0,22,7,0,20,21,0,110,8,22,0,112,11,14,21,0,4,21,0,107,0,21,7,7,0,20,21,0,109,21,0,1,7,8,22,0,113,11,14,21,0,111,0,20,21,0,91,21,0,7,21,0,113,8,8,22,0,114,11,14,15,75,22,0,115,11,14,15,76,22,0,116,11,14,15,77,22,0,117,11,14,15,78,22,0,118,11,14,21,0,117,0,20,21,0,30,8,22,0,119,11,14,21,0,105,21,0,5,21,0,105,8,21,0,44,21,0,63,21,0,1,19,21,0,4,21,0,112,7,19,22,0,120,11,14,15,79,22,0,121,11,14,21,0,121,0,20,21,0,120,8,22,0,122,11,14,21,0,100,0,20,21,0,68,0,16,0,21,19,8,22,0,123,11,14,15,80,22,0,124,11,14,0,5,21,0,7,0,94,8,22,0,125,11,14,0,5,21,0,7,0,95,8,22,0,126,11,14,15,81,22,0,127,11,14,15,82,22,0,128,1,11,14,15,83,22,0,129,1,11,14,21,0,62,21,0,4,21,0,63,7,0,20,21,0,62,8,21,0,63,21,0,63,21,0,55,21,0,4,21,0,47,7,0,20,21,0,1,8,21,0,47,21,0,47,21,0,48,21,0,24,0,2,7,21,0,49,21,0,4,21,0,48,7,0,20,0,23,21,0,8,21,0,48,8,8,21,0,53,21,0,4,21,0,47,7,0,20,21,0,53,21,0,127,21,0,1,8,8,21,0,54,21,0,1,21,0,63,0,22,19,21,0,47,21,0,4,21,0,63,7,19,0,20,21,0,54,21,0,127,21,0,1,8,8,21,0,64,21,0,64,21,0,56,0,21,21,0,5,21,0,125,8,0,20,15,84,8,21,0,1,21,0,1,21,0,2,21,0,39,21,0,5,21,0,126,8,21,0,2,21,0,1,19,0,20,21,0,1,8,21,0,96,15,85,0,20,0,21,21,0,5,21,0,125,8,8,21,0,71,15,86,0,20,15,87,8,21,0,82,0,21,21,0,5,21,0,125,8,0,20,21,0,82,21,0,127,21,0,123,21,0,7,0,27,8,8,8,21,0,85,0,21,21,0,5,21,0,125,8,0,20,21,0,85,21,0,127,21,0,123,8,8,21,0,89,0,21,21,0,5,21,0,125,8,0,20,21,0,89,21,0,127,21,0,40,8,8,21,0,90,21,0,90,21,0,7,21,0,63,8,0,20,21,0,90,8,21,0,119,21,0,118,0,20,21,0,31,8,21,0,91,0,21,21,0,5,21,0,125,8,0,20,15,88,8,21,0,97,21,0,129,1,0,20,21,0,128,1,8,3,42,21,0,68,21,0,7,21,0,58,21,0,4,21,0,47,7,0,23,19,21,0,4,21,0,96,7,0,23,19,8,16,21,0,119,16,15,89,16,22,0,130,1,11,14,15,90,22,0,131,1,11,14,15,91,22,0,132,1,11,14,21,0,132,1,22,0,133,1,11,14,21,0,56,21,0,112,21,0,5,21,0,123,8,21,0,5,21,0,51,21,0,90,21,0,82,3,4,19,22,0,134,1,11,14,21,0,67,0,20,21,0,66,8,22,0,135,1,11,14,15,92,22,0,136,1,11,14,21,0,35,22,0,137,1,11,14,21,0,62,21,0,63,21,0,55,21,0,47,21,0,48,21,0,49,21,0,51,21,0,52,21,0,50,21,0,64,21,0,53,21,0,54,21,0,56,21,0,57,21,0,58,21,0,59,21,0,61,21,0,60,21,0,39,21,0,40,21,0,2,21,0,1,21,0,135,1,21,0,96,21,0,71,21,0,82,21,0,85,21,0,89,21,0,90,21,0,119,21,0,91,21,0,105,21,0,106,21,0,44,21,0,123,21,0,112,21,0,122,21,0,113,21,0,114,21,0,97,0,5,21,0,3,21,0,4,21,0,41,21,0,36,21,0,136,1,21,0,131,1,21,0,19,21,0,78,0,19,21,0,5,21,0,6,21,0,7,21,0,8,21,0,137,1,0,20,21,0,124,21,0,76,21,0,74,21,0,133,1,3,60,25,21,0,1,15,93,21,0,5,0,16,21,0,1,21,0,4,21,0,2,17,17,7,21,0,2,17,25,21,0,1,25,21,0,2,25,21,0,1,25,21,0,1,14,21,0,4,25,21,0,1,21,1,2,21,0,2,17,21,0,4,21,0,1,17,25,21,0,1,21,0,5,21,0,2,17,21,0,4,16,25,21,0,1,21,0,5,16,21,0,4,21,0,2,21,0,5,16,17,25,21,0,1,21,0,5,21,0,1,21,1,2,21,0,2,17,21,0,4,16,17,25,21,0,1,21,0,5,16,21,0,4,21,0,1,21,1,2,21,0,2,17,17,25,21,0,1,15,94,21,1,1,21,0,4,3,2,0,16,21,0,1,21,0,5,21,0,2,17,17,7,21,0,2,17,25,21,0,1,3,1,0,15,3,0,17,25,21,0,2,21,0,1,3,2,25,21,0,2,21,0,1,3,2,25,21,0,1,0,12,16,0,12,0,22,17,0,5,0,31,17,14,21,0,1,22,0,5,11,21,1,17,16,22,0,6,11,14,21,0,4,22,0,7,11,14,21,0,1,21,1,2,0,20,15,95,15,96,3,2,21,1,0,21,0,6,21,1,13,0,21,17,8,8,21,0,2,17,22,0,8,11,14,21,0,6,0,17,16,0,18,0,7,21,1,7,0,22,0,7,21,0,6,17,8,7,16,0,18,15,97,7,16,14,21,0,8,25,21,0,2,0,7,21,0,1,21,1,17,16,17,0,17,16,0,18,21,1,4,21,0,1,7,0,16,0,6,21,1,7,21,0,2,8,19,7,16,25,21,0,2,21,1,17,16,22,0,3,11,14,21,0,1,21,1,17,16,0,6,21,0,3,17,0,17,16,0,18,21,0,2,21,1,8,0,16,8,21,1,4,21,0,1,7,0,16,21,0,3,21,1,8,0,7,8,19,3,2,21,1,0,0,13,21,1,7,21,0,3,8,8,7,16,25,15,98,22,0,2,11,14,15,99,22,0,3,11,14,21,0,3,21,0,1,7,21,1,4,21,0,3,21,1,4,21,0,1,7,7,7,3,2,21,1,0,0,12,21,1,6,21,1,14,8,8,21,0,2,21,0,1,7,3,2,21,1,0,0,12,21,1,6,0,12,8,8,25,15,100,21,0,1,7,22,0,2,11,14,21,0,1,15,101,15,102,3,2,21,1,0,0,0,21,1,6,21,1,14,8,8,0,20,0,18,21,0,2,7,8,21,1,23,21,0,2,7,3,3,21,1,0,0,0,21,1,6,0,6,8,8,25,21,0,1,21,1,26,21,0,2,17,25,21,0,1,0,14,21,1,6,21,1,101,8,21,0,2,17,22,0,3,11,14,21,0,3,21,1,19,21,1,102,21,0,1,0,15,16,21,1,8,0,16,8,21,1,8,21,1,27,21,1,7,21,0,2,0,15,16,21,1,8,0,16,8,8,8,7,7,16,22,0,4,11,14,0,21,21,1,4,21,0,4,7,16,25,21,0,1,0,12,16,0,13,0,22,17,0,5,0,34,17,14,21,0,1,21,1,17,16,22,0,6,11,14,21,0,1,21,1,21,0,22,17,21,1,19,0,8,7,0,22,17,22,0,7,11,14,21,0,1,0,15,16,22,0,8,11,14,0,21,22,0,9,11,22,0,10,11,14,21,0,8,0,21,0,18,21,1,10,7,21,1,19,0,8,7,0,22,19,3,2,21,1,0,21,0,6,21,1,13,0,24,17,0,8,0,22,0,12,21,0,7,17,17,8,16,21,1,1,21,1,9,21,0,1,21,1,8,15,103,8,8,16,0,7,0,22,17,22,0,11,11,14,21,0,1,0,18,21,0,10,21,1,8,0,7,8,0,7,21,1,7,21,0,9,8,3,2,0,16,21,0,5,17,7,0,4,21,1,7,0,3,8,9,15,104,21,0,4,7,3,2,21,1,0,21,0,11,8,16,25,21,0,1,0,12,16,0,12,0,22,17,0,5,0,35,17,14,21,0,1,21,1,17,16,22,0,3,11,14,21,0,1,21,0,3,21,1,13,0,21,17,21,1,9,15,105,8,16,25,21,0,1,21,1,17,16,22,0,3,11,14,21,0,1,21,1,21,0,22,17,22,0,4,11,21,1,19,0,8,7,0,22,17,22,0,5,11,14,21,0,3,0,17,16,0,18,21,1,4,21,0,1,0,15,16,7,0,16,0,8,21,1,7,21,0,5,8,21,1,8,0,6,8,19,7,21,0,5,0,17,16,0,15,21,0,4,17,17,25,21,0,1,0,12,16,21,1,4,0,7,7,0,22,17,22,0,3,11,14,21,0,1,0,14,16,22,0,4,11,14,21,0,4,0,16,21,0,3,17,22,0,5,11,14,21,0,3,0,17,16,0,18,21,0,4,21,1,8,0,16,8,7,16,22,0,6,11,14,21,0,6,21,1,19,0,8,7,0,22,17,0,17,16,0,15,21,0,6,17,0,18,21,1,4,21,0,1,0,15,16,7,0,16,0,8,21,1,7,21,0,5,8,21,1,8,0,6,8,19,7,21,0,5,0,17,16,17,25,21,0,2,0,0,16,0,5,0,37,17,14,21,0,2,0,18,21,1,10,7,16,0,15,16,21,1,19,0,8,7,0,22,17,0,5,0,38,17,14,21,0,1,21,1,17,16,22,0,3,11,14,21,0,2,0,18,21,1,14,21,1,7,21,0,3,8,0,8,0,13,21,1,7,21,0,3,0,7,16,8,19,7,16,0,15,16,21,1,19,0,8,7,0,22,17,0,5,0,39,17,14,21,0,1,15,106,15,107,3,2,21,1,0,21,0,1,0,12,16,0,12,0,22,17,8,21,0,2,0,18,21,1,1,21,1,14,0,21,19,0,8,21,0,3,19,0,6,21,1,1,19,7,16,17,25,21,0,1,0,12,16,0,13,0,22,17,0,5,0,40,17,14,21,0,1,21,1,17,16,22,0,3,11,14,21,0,1,21,1,43,21,0,3,0,17,16,0,18,0,7,21,1,7,0,22,0,7,21,0,3,17,8,7,16,17,25,21,0,2,21,1,10,16,0,5,0,41,17,14,21,0,1,21,1,17,16,22,0,3,11,14,21,0,3,0,9,21,0,2,17,21,1,15,16,0,8,21,0,3,17,0,7,22,0,2,13,14,21,0,1,21,1,43,21,0,3,0,17,16,0,18,21,1,1,0,13,21,0,2,0,7,21,0,3,17,19,0,8,21,0,3,19,0,7,21,1,1,19,0,6,21,0,2,19,7,16,17,25,21,0,1,0,14,16,22,0,6,11,21,1,19,0,8,7,0,22,17,22,0,7,11,0,17,16,22,0,8,11,14,21,0,1,21,0,5,21,1,6,21,0,4,8,21,0,2,17,22,0,9,11,14,21,0,8,0,15,21,0,6,17,21,0,5,16,22,0,10,11,14,15,108,0,15,3,2,0,16,21,0,10,0,0,16,17,22,0,11,11,14,21,0,9,21,0,11,16,22,0,9,12,14,21,0,10,21,0,11,16,22,0,10,12,14,21,0,10,0,21,21,1,28,21,1,25,8,16,22,0,12,11,14,21,1,4,21,0,10,7,0,16,21,0,12,21,1,8,0,16,8,19,21,0,7,3,2,21,1,0,0,13,21,1,7,21,0,12,21,1,17,16,8,8,22,0,13,11,14,0,21,22,0,14,11,21,0,13,16,22,0,15,11,14,21,0,8,0,18,21,0,1,0,15,16,21,1,8,0,16,8,15,109,3,2,21,1,0,15,110,8,7,16,0,15,21,0,6,17,25,21,1,20,21,1,6,21,1,23,21,0,1,7,0,20,0,18,21,0,1,7,8,8,25,21,0,1,21,1,36,21,1,37,7,21,0,2,17,0,15,16,21,1,19,0,8,7,0,22,17,25,21,0,2,0,16,0,22,17,21,0,1,3,2,21,1,0,21,0,2,0,16,0,21,17,8,25,21,0,1,0,15,16,0,18,21,1,38,7,16,21,1,19,0,7,0,8,0,13,19,0,7,21,1,2,19,7,0,21,17,0,6,0,22,17,25,0,27,21,1,75,21,0,1,8,25,21,0,1,22,0,3,11,14,15,111,15,112,3,2,21,1,0,21,1,2,21,1,5,21,1,39,21,1,13,21,0,2,19,8,8,25,21,0,1,0,15,16,0,16,0,21,17,21,1,40,16,22,0,3,11,14,21,0,1,0,15,16,0,18,21,1,40,21,1,39,21,0,3,19,7,16,21,1,19,0,8,7,0,22,17,0,5,0,45,17,14,21,0,3,21,1,19,0,8,7,0,22,17,0,17,16,0,15,21,0,3,17,0,18,21,1,4,21,1,66,21,1,8,0,16,8,7,7,21,0,1,17,25,21,1,43,21,1,7,21,0,1,21,1,28,21,1,27,21,1,4,21,1,27,7,3,2,0,16,21,0,1,17,8,8,25,21,0,2,21,1,47,21,0,1,17,21,1,15,16,0,8,21,0,2,17,0,7,21,0,1,17,25,21,0,2,21,0,1,3,2,0,16,21,0,1,21,1,14,21,0,2,17,17,25,21,0,2,21,0,1,3,2,0,16,21,0,1,21,1,13,21,0,2,17,17,25,21,0,1,3,1,0,15,3,0,17,25,21,0,1,21,0,2,0,16,0,22,17,3,2,21,1,0,15,113,21,0,2,0,16,0,21,17,7,8,25,21,0,1,3,1,25,21,0,2,21,1,59,16,21,1,60,0,22,17,0,5,0,49,17,14,21,0,2,21,1,66,16,22,0,3,11,14,21,0,3,0,18,21,1,11,7,16,21,1,64,16,22,0,4,11,21,1,19,21,1,62,7,16,22,0,5,11,14,21,0,5,21,1,60,0,22,17,0,5,0,50,17,14,21,0,1,21,1,66,16,22,0,6,11,21,1,58,16,22,0,7,11,14,21,0,3,21,1,19,21,1,55,7,15,114,3,2,21,1,0,21,0,5,8,16,22,0,8,11,14,21,0,6,21,0,7,21,1,58,21,0,8,17,21,1,9,15,115,8,16,0,15,21,0,3,17,25,15,116,22,0,3,11,14,15,117,22,0,4,11,14,21,0,1,21,0,3,21,0,4,3,2,21,1,0,0,0,8,16,25,21,0,2,21,0,1,3,2,25,21,0,1,3,1,25,21,0,1,21,1,5,21,1,68,8,21,1,1,21,1,5,21,1,56,8,21,1,36,0,16,7,21,1,58,21,1,8,21,1,4,21,1,50,21,1,62,0,22,19,21,1,63,21,1,2,19,7,8,19,0,22,0,21,3,2,0,20,0,23,3,1,8,19,25,21,0,1,21,1,72,21,0,5,7,21,0,2,17,22,0,6,11,21,1,57,0,21,17,22,0,7,11,14,21,0,4,22,0,8,11,14,15,118,22,0,9,11,14,21,0,1,21,0,9,21,0,6,7,21,0,2,17,25,21,0,1,21,1,72,21,0,5,7,21,1,36,21,1,63,21,1,8,21,1,51,8,21,1,63,21,1,52,0,21,19,3,2,21,1,0,21,1,1,21,1,61,0,21,19,8,7,21,1,59,21,1,6,21,1,70,8,19,21,0,2,17,22,0,6,11,14,15,119,22,0,7,11,14,21,1,1,21,1,56,9,21,0,7,21,1,1,0,18,21,1,56,7,9,3,3,21,1,0,21,1,59,21,1,8,21,1,60,8,21,1,62,0,22,19,21,1,55,0,21,21,1,8,21,1,57,8,19,8,22,0,7,12,14,21,0,1,21,0,7,21,0,6,0,16,21,1,7,21,1,58,21,1,4,21,1,63,7,0,22,19,8,16,17,21,1,36,21,0,4,7,21,0,2,21,0,7,21,0,6,0,16,0,21,17,17,17,21,1,57,16,25,21,0,1,21,1,59,16,21,1,61,0,22,17,0,5,0,56,17,14,21,0,1,21,1,41,21,1,56,7,16,21,1,19,21,0,4,7,21,0,2,17,25,21,0,1,21,1,40,21,1,6,21,1,70,8,21,0,2,17,22,0,3,11,14,21,0,3,0,18,21,1,58,7,16,22,0,4,11,21,1,19,21,1,52,7,0,22,17,22,0,5,11,14,21,0,4,21,1,63,21,0,5,17,21,1,60,0,22,17,21,1,19,21,1,53,7,16,0,5,0,57,17,14,21,0,3,21,1,36,21,1,44,21,1,7,0,22,21,1,63,21,0,5,17,0,17,16,21,1,8,21,1,62,8,8,7,21,0,5,21,1,64,21,0,4,17,17,22,0,6,11,14,21,0,6,21,1,19,21,1,39,7,16,0,5,0,58,17,14,21,0,3,21,1,36,0,22,21,1,1,0,16,0,21,19,3,2,21,1,0,21,1,2,8,7,21,0,4,21,1,59,21,0,5,17,17,21,1,19,21,1,62,7,16,22,0,7,11,14,21,0,1,21,1,68,21,1,6,21,1,22,8,21,0,2,17,21,1,68,21,0,6,0,16,0,21,17,21,1,22,21,0,7,3,1,17,17,25,15,120,22,0,3,11,14,21,0,1,21,1,68,21,1,68,21,1,40,21,1,5,21,1,22,21,1,7,21,1,1,21,1,58,21,1,6,21,1,63,8,21,0,2,19,21,1,52,0,21,19,0,17,21,1,5,0,18,0,22,7,8,9,8,8,19,16,0,21,21,1,42,21,0,3,8,21,0,2,17,25,21,0,1,21,1,59,16,21,1,61,0,22,17,0,5,0,60,17,14,21,0,1,21,1,58,16,21,1,62,0,22,17,0,17,16,0,18,21,0,1,21,1,8,21,1,80,8,7,16,25,21,0,1,21,1,40,16,21,1,58,21,1,8,21,1,63,8,21,1,52,0,21,19,0,17,21,1,5,0,18,0,22,7,8,9,21,1,4,21,1,22,7,21,1,1,19,21,1,82,21,1,2,19,21,0,2,21,1,58,16,17,22,0,3,11,14,21,0,1,21,1,82,21,0,2,21,1,51,21,0,3,17,21,1,52,21,0,3,21,1,63,16,17,21,1,62,0,21,21,1,57,21,0,2,17,21,1,48,0,27,17,21,1,55,21,0,3,17,17,17,25,21,0,1,21,1,59,16,21,1,61,0,22,17,0,5,0,61,17,14,21,0,1,21,1,58,16,21,1,62,0,22,17,0,17,16,0,18,21,0,1,21,1,8,21,1,83,8,7,16,25,21,0,1,0,0,16,0,5,0,62,17,14,21,0,2,21,1,59,16,21,1,60,0,22,17,0,5,0,63,17,14,21,0,1,21,1,40,16,21,1,58,21,1,6,21,1,61,8,21,0,2,17,0,5,0,64,17,14,21,0,2,21,1,68,16,0,18,21,1,11,7,16,21,1,19,21,1,53,7,16,0,5,0,65,17,14,21,0,1,21,1,40,16,21,1,82,21,0,2,21,1,58,16,17,22,0,3,11,14,21,0,3,21,1,62,0,22,17,21,1,61,21,0,2,17,21,1,19,21,1,53,7,16,0,5,0,66,17,14,21,0,1,21,0,2,21,1,58,16,21,1,56,0,21,17,21,1,9,15,121,8,21,0,2,17,25,21,0,1,21,1,87,21,1,7,21,1,41,21,0,2,7,8,16,25,21,0,1,21,1,58,21,1,6,21,1,59,8,21,0,2,17,0,5,0,67,17,14,21,0,1,21,1,87,21,0,2,17,25,21,0,2,21,1,59,16,21,1,56,0,21,17,25,0,27,22,0,3,11,22,0,4,11,14,3,0,22,0,5,11,14,21,0,1,22,0,6,11,14,21,0,1,0,18,21,1,58,7,16,21,1,91,16,0,18,15,122,7,16,25,21,1,1,21,1,19,0,18,21,1,22,21,1,7,21,1,68,8,7,7,3,0,21,1,56,16,19,22,0,3,11,14,21,0,1,0,0,16,0,5,0,68,17,14,21,0,1,0,18,21,1,40,7,16,22,0,4,11,14,21,0,4,21,1,68,16,0,16,0,21,17,21,1,58,16,22,0,5,11,14,21,0,4,0,18,21,1,58,7,16,21,1,59,21,0,5,17,21,1,68,16,21,1,19,21,1,53,7,16,0,5,0,69,17,14,21,0,1,21,1,59,16,21,1,60,21,0,5,17,0,5,0,70,17,14,21,0,1,22,0,6,11,21,1,59,16,22,0,7,11,21,1,89,16,22,0,8,11,21,1,36,15,123,7,21,0,1,21,1,40,16,17,22,0,9,11,14,21,0,9,21,0,3,16,21,1,39,21,0,4,0,18,21,1,82,21,1,7,21,0,7,8,7,16,17,0,5,0,71,17,14,21,0,9,0,18,15,124,7,16,21,0,3,16,22,0,10,11,14,21,0,1,21,1,91,21,0,9,17,21,1,36,21,1,44,21,1,7,0,18,21,1,56,7,8,7,21,0,10,17,21,1,57,16,25,21,0,1,21,1,59,16,21,1,59,0,22,17,0,5,0,72,17,14,21,0,1,0,18,21,1,10,7,16,21,1,19,21,1,53,7,16,0,5,0,73,17,14,21,0,1,21,1,61,0,27,17,21,1,19,21,1,53,7,16,0,5,0,74,17,14,21,0,1,0,4,21,0,1,0,3,16,22,0,5,11,17,22,0,6,11,14,0,21,22,0,7,11,14,21,0,5,0,18,21,1,89,21,1,5,0,18,15,125,7,8,21,0,4,9,7,16,25,21,0,1,0,0,16,0,5,0,75,17,14,21,1,93,21,1,1,7,22,0,3,11,14,21,0,1,21,0,3,0,18,21,0,3,7,21,1,19,0,18,0,18,21,1,22,21,1,7,21,1,68,8,7,7,7,3,0,21,1,56,16,21,1,56,16,19,3,2,21,1,0,21,1,39,21,1,56,0,22,19,8,16,25,21,0,1,0,0,16,0,5,0,76,17,14,21,0,2,21,1,39,16,21,1,56,0,22,17,22,0,3,11,14,21,0,2,21,1,58,15,126,3,2,21,1,0,21,0,3,8,16,22,0,4,11,14,21,0,1,21,1,40,16,21,1,58,21,1,6,21,1,61,8,21,0,4,17,0,5,0,78,17,14,21,0,1,21,1,40,16,21,1,82,21,1,7,21,1,58,8,21,0,4,17,21,1,59,21,0,4,17,21,1,19,21,1,53,7,16,0,5,0,79,17,14,21,0,1,21,1,2,21,1,93,21,0,1,21,1,8,21,1,44,8,7,9,15,127,3,2,21,1,0,21,0,3,8,21,0,2,17,25,21,0,2,21,1,59,16,21,1,59,0,22,17,0,5,0,80,17,14,21,0,1,21,1,40,16,22,0,3,11,21,1,58,21,1,6,21,1,59,8,21,0,2,17,0,5,0,81,17,14,21,0,2,0,18,21,1,10,7,16,21,1,19,21,1,53,7,16,0,5,0,82,17,14,21,0,3,21,1,56,21,1,53,21,1,63,21,1,8,21,1,60,8,19,21,0,2,17,21,1,19,21,1,53,7,16,0,5,0,83,17,14,0,21,21,1,56,21,0,2,17,21,1,55,21,0,3,17,21,1,62,21,0,2,17,22,0,2,12,14,21,0,2,21,1,58,16,21,1,64,21,1,7,21,1,89,8,16,21,1,63,16,21,1,19,21,1,1,21,1,55,21,0,3,21,1,8,0,16,8,19,21,1,62,21,0,2,21,1,8,0,16,8,19,7,0,21,17,21,1,4,0,16,7,21,0,1,21,1,68,16,17,25,21,0,2,0,18,21,0,1,21,1,8,21,1,99,8,7,16,25,21,0,1,21,1,59,21,1,7,0,21,8,21,1,19,21,1,54,7,9,21,1,6,21,1,4,21,1,63,7,8,21,0,2,17,22,0,3,11,14,21,0,1,0,21,21,0,3,3,2,15,128,1,3,2,21,1,0,0,21,21,1,59,21,0,3,17,8,21,0,2,17,25,21,0,4,22,0,5,11,14,21,0,2,22,0,6,11,14,21,0,1,22,0,7,11,14,15,129,1,22,0,8,11,14,21,0,4,21,1,59,21,1,7,0,21,8,21,1,9,21,0,1,8,9,21,0,8,3,2,0,16,21,0,6,21,1,58,0,22,17,17,25,21,0,1,22,0,2,11,14,21,1,56,21,1,7,0,21,8,21,1,9,15,130,1,8,25,21,0,2,21,1,59,16,21,1,4,21,1,63,7,0,22,17,22,0,5,11,14,21,0,5,21,1,61,0,21,17,0,5,0,84,17,14,21,0,1,21,1,59,16,21,1,61,21,0,5,17,0,5,0,85,17,14,21,0,2,21,1,21,0,22,17,22,0,6,11,21,1,19,21,1,55,7,16,22,0,7,11,14,0,21,21,1,102,21,0,2,21,1,68,16,21,1,8,0,16,8,21,1,6,21,0,4,8,7,21,0,7,17,22,0,8,11,14,21,0,2,21,1,58,16,0,22,0,22,21,1,8,21,1,63,21,1,5,21,1,89,8,8,21,1,55,21,0,7,19,0,18,21,1,62,21,1,7,21,0,7,8,21,1,8,21,0,8,8,7,9,21,1,4,21,1,61,7,0,21,19,21,1,19,21,1,53,7,9,3,2,21,1,0,21,1,56,21,1,7,0,21,8,8,16,0,5,0,86,17,14,21,0,1,21,1,59,16,21,1,4,21,1,63,7,21,0,5,17,22,0,9,11,14,21,0,1,21,1,21,21,0,9,17,22,0,10,11,14,21,0,10,21,1,101,21,0,6,17,22,0,11,11,14,21,0,11,21,1,19,21,1,102,21,0,1,21,1,68,16,21,1,8,0,16,8,21,1,8,21,0,4,21,1,7,21,0,2,21,1,68,16,21,1,8,0,16,8,8,8,7,7,16,22,0,12,11,14,21,1,4,0,21,7,21,1,61,21,0,12,21,1,7,21,1,55,21,1,7,21,0,6,21,1,19,21,1,55,7,16,8,8,19,22,0,13,11,14,21,0,9,21,1,89,16,0,18,21,0,1,21,1,40,16,21,1,8,0,16,8,7,16,21,1,19,21,1,55,7,21,1,89,9,21,1,8,21,1,68,8,16,21,1,55,21,0,10,21,1,19,21,1,55,7,16,17,0,18,15,131,1,21,1,7,21,0,2,21,1,58,16,8,7,16,25,21,0,1,22,0,2,11,14,21,1,78,21,1,53,7,21,1,64,9,0,19,21,1,53,7,21,1,78,21,1,62,7,9,3,2,0,16,21,0,1,17,22,0,3,11,14,15,132,1,25,21,0,1,21,1,59,16,21,1,61,0,22,17,0,5,0,88,17,14,21,0,1,21,1,105,16,22,0,5,11,14,21,0,1,21,1,58,16,21,1,89,16,0,18,0,22,21,1,1,21,0,1,21,1,59,21,1,56,0,22,19,21,1,9,21,1,41,21,1,56,7,8,16,21,1,44,21,0,5,17,21,1,8,0,16,8,21,1,6,21,1,40,8,0,22,21,1,8,21,1,63,8,19,3,2,21,1,0,21,1,56,21,1,7,0,21,8,8,7,16,21,0,4,21,0,5,17,21,1,44,21,0,5,21,1,108,16,17,25,21,0,2,21,1,59,16,22,0,3,11,14,21,0,1,21,1,59,16,21,1,61,21,0,3,17,0,5,0,89,17,14,21,0,1,21,0,3,21,1,76,21,1,89,8,21,0,2,21,1,40,16,17,21,0,3,21,1,76,21,1,39,8,21,0,2,17,25,21,0,2,21,1,59,16,21,1,60,0,22,17,0,5,0,90,17,14,21,0,1,21,1,40,16,21,1,58,21,1,6,21,1,61,8,21,0,2,17,0,5,0,91,17,14,21,0,2,21,1,68,16,0,18,21,1,11,7,16,21,1,19,21,1,53,7,16,0,5,0,92,17,25,21,0,1,21,1,40,16,21,1,97,21,0,2,17,0,18,21,1,19,21,1,51,7,7,16,21,1,89,16,0,18,21,1,4,21,0,1,7,21,1,100,21,1,44,21,1,7,21,0,2,8,19,7,16,25,21,0,1,21,1,115,21,0,2,17,14,21,0,2,21,1,68,16,22,0,2,12,14,21,0,2,21,1,113,16,21,1,64,16,21,1,19,21,1,62,7,16,21,1,63,21,0,1,21,1,59,16,17,22,0,3,11,14,21,0,3,21,1,56,21,0,2,17,21,1,19,21,1,53,7,16,0,5,0,93,17,14,21,0,1,21,1,116,21,0,3,21,1,89,16,21,1,1,21,1,91,21,1,4,21,1,113,21,1,5,21,1,64,8,7,19,21,0,2,17,21,1,96,21,0,2,17,17,25,21,0,1,21,1,115,21,0,2,17,14,21,0,2,21,1,68,16,22,0,2,12,14,21,0,1,21,1,59,16,22,0,3,11,14,21,0,2,21,0,3,21,1,8,21,1,56,8,21,1,53,21,1,113,19,16,21,1,19,21,1,53,7,16,21,1,125,16,14,21,0,1,21,1,116,21,0,3,21,1,89,16,21,1,1,21,1,91,21,1,4,21,1,113,21,1,5,21,1,64,8,7,19,21,0,2,17,21,1,96,21,0,2,17,21,1,108,16,17,25,21,0,1,21,1,112,21,1,7,21,0,2,8,21,1,120,21,1,8,21,1,41,21,1,71,7,8,9,21,1,6,21,1,112,8,21,0,2,17,25,21,0,1,15,133,1,21,0,5,21,1,123,21,0,1,21,0,4,21,0,2,17,17,7,21,0,2,17,25,21,0,1,21,0,4,21,0,2,17,22,0,6,11,14,21,0,6,21,0,5,21,0,2,17,21,1,39,21,0,1,17,21,1,126,16,14,21,0,6,25,21,0,1,21,1,59,16,21,1,59,0,22,17,21,1,125,16,14,21,0,1,21,1,96,16,22,0,3,11,14,21,0,3,0,18,21,1,11,7,16,21,1,19,21,1,53,7,16,21,1,125,16,14,21,0,3,0,3,16,22,0,4,11,14,0,22,21,1,61,21,0,4,17,21,1,19,21,1,53,7,16,21,1,126,16,14,21,0,4,21,1,64,16,21,1,91,16,22,0,5,11,14,21,0,5,21,1,36,0,27,7,16,21,1,96,21,0,1,21,1,36,21,1,58,7,16,21,1,91,16,17,21,1,44,21,0,5,21,1,96,21,0,3,17,21,1,105,16,17,25,21,0,2,21,1,59,16,21,1,59,0,22,17,21,1,125,16,14,21,0,2,0,18,21,1,11,7,16,21,1,19,21,1,53,7,16,21,1,125,16,14,21,0,1,21,1,96,21,1,6,21,1,44,21,1,7,21,1,105,8,8,21,0,2,21,1,97,16,17,25,21,0,1,0,0,16,21,1,126,16,14,21,0,1,21,1,59,16,21,1,59,0,21,17,21,1,126,16,14,21,0,1,21,1,123,16,25,21,0,2,21,1,59,21,1,6,21,1,63,8,21,0,1,17,22,0,3,11,14,21,0,3,0,22,21,1,8,21,1,61,8,21,1,53,21,1,61,21,1,7,0,21,8,19,16,21,1,126,16,14,21,0,2,0,22,21,1,58,3,2,21,1,124,21,0,3,8,16,22,0,4,11,14,21,0,1,21,1,58,16,21,1,61,21,0,4,17,21,1,126,16,14,21,0,1,21,1,44,21,1,82,21,1,7,21,0,4,8,3,2,21,1,124,21,0,3,8,16,21,1,39,21,0,2,17,21,1,126,16,14,21,0,1,21,1,85,21,0,4,17,25,21,0,1,21,1,58,16,21,1,59,0,23,17,21,1,126,16,14,21,0,1,21,1,44,16,21,1,39,21,0,2,17,21,1,126,16,14,21,0,1,21,1,44,0,22,17,25,21,0,1,21,1,58,16,21,1,59,0,22,17,21,1,126,16,14,21,0,1,21,1,44,16,25,21,0,1,21,1,59,16,21,1,59,0,22,17,21,1,125,16,14,21,0,1,0,18,21,1,11,7,16,21,1,19,21,1,53,7,16,21,1,125,16,14,21,0,1,21,1,85,21,1,7,0,22,8,21,1,61,21,1,85,21,1,7,0,27,8,19,21,1,19,21,1,53,7,9,16,21,1,126,16,14,21,0,1,0,3,16,25,21,1,4,21,1,4,0,21,7,0,5,0,96,19,3,1,21,1,96,21,0,1,21,1,44,0,22,17,17,7,21,1,123,21,1,56,21,1,112,21,0,1,21,1,44,0,21,17,19,21,1,123,9,19,25,21,0,1,21,1,130,1,16,25,21,0,1,21,0,5,21,0,2,17,22,0,6,11,14,0,21,22,0,7,11,22,0,8,11,14,21,0,6,0,21,21,1,74,15,134,1,8,16,14,21,0,1,22,0,9,11,14,15,135,1,22,0,10,11,14,21,0,7,21,0,10,21,1,1,21,0,4,21,0,2,19,7,16,22,0,11,11,14,21,0,8,21,1,63,16,21,0,10,21,1,1,21,1,131,1,21,0,4,7,21,0,2,19,7,16,22,0,12,11,14,21,0,6,0,21,21,1,74,21,1,4,21,0,11,21,0,12,3,2,7,21,1,123,0,21,21,1,8,21,1,56,8,19,21,1,123,21,1,50,19,8,16,25,21,1,20,21,1,6,0,18,21,0,1,7,8,25,21,0,1,25,21,0,1,25,21,0,1,14,21,1,7,21,2,65,16,25,0,22,0,7,21,1,6,17,22,1,6,12,14,21,0,1,0,16,21,1,6,17,25,21,1,8,21,1,7,21,1,5,0,16,21,0,1,17,17,22,1,8,12,25,21,0,2,0,14,16,22,0,5,11,14,21,0,2,0,12,16,0,17,16,21,2,19,0,8,21,2,7,21,0,1,0,14,16,21,2,8,0,16,8,0,12,21,0,5,21,2,8,0,16,8,19,8,7,0,22,17,0,5,0,32,17,14,21,0,5,21,2,19,0,8,7,0,22,17,0,17,16,0,18,21,0,1,0,15,16,21,2,8,0,16,8,21,0,4,21,0,2,0,15,16,21,2,8,0,16,8,19,7,16,0,15,21,0,5,17,25,21,0,2,0,14,16,22,0,5,11,14,21,0,2,0,12,16,22,0,6,11,14,21,0,1,0,14,16,22,0,7,11,14,21,0,6,0,17,16,21,2,19,0,8,21,2,7,21,0,7,21,2,8,0,16,8,0,12,21,0,5,21,2,8,0,16,8,19,8,7,0,22,17,0,5,0,33,17,14,21,0,6,0,7,21,0,1,0,12,16,17,0,17,16,21,2,19,0,8,21,2,7,0,6,21,2,7,21,0,6,8,21,2,4,0,16,7,21,0,7,19,8,7,0,22,17,22,0,8,11,14,21,0,2,0,15,16,22,0,9,11,14,21,0,1,0,15,16,22,0,10,11,14,21,0,8,0,17,21,2,6,0,18,21,2,4,21,0,10,7,0,16,0,6,21,2,7,0,8,21,2,7,21,0,8,8,8,19,21,0,4,21,0,9,21,2,8,0,16,8,19,7,8,21,0,9,21,2,17,16,17,0,15,16,0,15,21,0,7,17,25,21,0,1,21,2,24,21,0,4,7,21,0,2,17,25,21,0,1,0,18,15,136,1,21,0,2,7,7,16,25,21,0,2,0,18,15,137,1,21,0,1,7,7,16,25,21,1,6,0,8,0,23,17,0,13,21,0,1,21,2,19,21,2,15,7,16,22,1,10,12,0,7,21,0,1,21,2,19,21,2,16,7,16,22,1,9,12,17,17,25,21,0,1,14,21,2,4,0,21,7,21,2,14,0,21,21,2,102,21,1,8,21,2,8,0,16,8,21,2,6,21,0,4,8,7,21,1,7,17,19,22,0,5,11,14,21,2,1,21,1,6,3,2,21,2,0,0,13,21,2,7,21,1,6,8,8,22,0,6,11,14,0,21,0,12,21,1,6,17,0,6,21,1,6,17,0,2,0,23,17,21,2,16,16,22,0,7,11,0,17,16,0,18,21,2,1,0,6,0,22,19,0,7,21,0,7,19,0,10,0,23,19,7,16,21,2,19,15,138,1,7,21,1,6,0,17,16,17,25,21,0,1,0,18,21,2,11,7,16,21,2,19,0,8,7,0,22,17,0,5,0,36,17,14,0,22,0,7,21,1,3,17,22,0,3,11,14,21,2,1,0,7,21,0,3,19,21,2,4,0,16,7,21,1,3,0,17,16,0,18,0,7,21,2,7,21,0,3,8,7,16,0,19,21,2,1,21,2,4,0,16,7,21,0,1,19,0,12,0,21,19,0,8,0,7,19,0,6,21,2,1,19,7,16,19,22,0,4,11,14,21,0,1,0,19,0,6,7,16,21,2,8,0,16,8,22,0,5,11,14,0,21,21,0,4,16,22,0,6,11,21,0,5,16,22,0,7,11,14,21,0,3,21,0,5,16,0,17,16,0,18,15,139,1,7,16,25,21,0,1,21,2,21,0,22,17,22,0,3,11,21,2,19,0,8,7,0,22,17,22,0,4,11,14,21,0,4,0,17,16,0,15,21,0,3,17,0,18,0,6,21,2,7,0,8,21,2,7,21,0,4,8,8,21,2,4,0,16,7,21,0,1,0,15,16,19,7,21,0,2,17,25,21,0,2,0,18,21,0,1,21,2,8,0,16,8,7,16,25,21,0,1,3,1,25,21,0,1,14,21,1,9,0,16,21,1,12,0,16,21,1,14,17,17,22,0,3,11,14,21,1,14,0,6,0,22,17,22,1,14,12,21,1,13,16,22,1,15,12,14,21,0,3,25,21,0,1,0,12,21,1,15,17,25,21,0,1,0,12,16,0,13,0,22,17,0,5,0,42,17,14,21,0,1,21,1,3,21,0,2,17,25,21,0,2,0,12,16,21,2,12,0,22,17,0,5,0,43,17,14,21,0,1,21,2,40,16,21,2,17,21,2,6,0,13,8,21,0,2,17,0,5,0,44,17,14,21,0,2,21,2,17,16,22,0,3,11,14,21,0,2,0,15,16,21,2,8,0,16,8,22,0,4,11,14,21,0,1,21,0,3,21,2,13,0,21,17,21,2,9,15,140,1,8,0,21,17,25,21,0,1,21,2,59,21,0,4,17,25,21,0,1,21,2,36,21,2,1,0,22,3,2,21,2,0,21,2,2,8,7,21,1,4,17,21,2,19,21,2,55,7,16,22,0,3,11,14,21,0,3,21,2,56,0,21,17,0,5,0,51,17,14,21,1,4,21,2,58,16,0,17,16,21,2,55,21,1,4,17,21,2,19,21,2,62,7,16,22,0,4,11,14,21,1,3,0,16,21,0,4,17,21,2,134,1,16,22,0,5,11,14,0,30,21,2,56,21,0,5,17,0,5,0,52,17,14,21,2,59,21,2,7,21,2,51,8,0,5,0,53,19,21,2,2,21,2,1,19,22,0,6,11,14,21,0,3,21,2,47,21,1,7,17,21,0,6,21,2,51,21,2,52,3,3,21,2,0,21,0,5,21,2,51,0,23,17,8,16,22,0,7,11,14,21,1,3,21,2,36,21,2,1,21,0,7,3,2,21,2,0,21,2,2,8,7,21,1,4,17,22,1,3,12,14,21,0,7,21,2,55,21,0,3,17,21,0,5,21,2,59,0,25,17,21,2,9,21,2,56,21,2,7,21,1,7,8,21,2,9,15,141,1,8,8,16,25,21,1,8,0,17,16,0,18,21,2,2,7,21,2,7,0,1,8,15,142,1,3,2,21,2,0,21,1,7,21,2,56,0,21,17,8,21,0,1,17,25,21,0,1,21,2,11,16,0,5,0,54,17,14,21,0,1,0,17,16,25,21,0,1,21,2,59,16,21,2,59,0,22,17,0,5,0,55,17,14,21,0,1,0,18,21,1,3,7,16,21,2,19,0,18,21,2,22,21,2,7,21,2,68,8,7,7,3,0,21,2,56,16,17,25,21,1,9,21,1,7,21,2,62,21,0,4,17,7,22,0,5,11,14,21,0,1,21,2,36,21,0,5,7,21,2,2,21,2,5,0,18,21,0,1,21,2,8,21,0,5,8,7,8,21,2,1,21,2,5,0,18,21,2,1,21,0,5,21,0,2,19,7,8,21,1,8,3,4,21,2,0,21,2,39,21,2,6,21,2,70,8,21,2,60,21,0,4,21,2,52,0,21,17,19,21,2,54,0,21,21,2,60,21,0,4,17,21,2,53,21,1,7,17,19,21,2,67,0,23,19,21,2,19,21,2,62,21,2,7,0,23,21,2,8,21,2,55,8,8,7,9,8,21,0,2,17,25,21,0,2,0,17,16,0,18,21,0,1,21,2,40,16,21,2,8,0,16,8,7,16,22,0,3,11,14,21,0,1,21,2,21,21,0,2,17,22,0,4,11,21,2,19,21,2,55,7,16,22,0,5,11,14,21,0,3,21,2,19,21,2,55,7,16,0,17,16,0,18,21,2,1,21,2,55,21,0,5,19,21,2,62,21,0,5,0,17,16,21,2,68,21,0,4,17,19,21,2,5,0,18,21,0,1,21,2,68,16,21,2,8,0,16,8,7,8,7,16,21,2,68,21,0,3,17,25,21,0,2,21,2,10,16,0,5,0,59,17,14,21,0,1,21,2,58,16,22,0,3,11,14,0,21,21,2,56,21,0,2,17,22,0,4,11,14,21,0,2,21,2,50,16,22,0,5,11,21,2,51,21,0,3,17,22,0,6,11,14,21,0,5,3,1,22,0,7,11,14,0,22,22,0,8,11,14,21,0,6,0,17,16,21,0,4,21,2,9,21,2,62,8,21,0,6,21,2,63,21,0,3,17,17,21,0,1,21,2,59,16,21,2,58,0,22,17,21,2,9,15,143,1,8,21,0,1,17,22,0,9,11,14,21,0,9,0,18,21,0,1,21,2,68,16,21,2,8,0,16,8,7,16,21,0,5,21,2,56,21,0,3,17,21,2,9,15,144,1,21,0,1,7,8,16,21,2,68,21,0,7,17,25,21,0,2,21,2,68,16,21,2,1,21,2,69,21,2,6,0,18,21,2,62,7,8,21,2,64,19,21,1,3,17,21,2,36,21,0,1,21,2,8,21,2,44,21,2,7,0,18,21,2,56,7,8,8,7,16,21,2,57,21,2,68,21,2,40,21,2,5,21,0,1,21,2,40,16,21,2,85,21,2,7,21,2,58,8,21,0,2,17,21,2,8,21,2,22,8,8,19,16,25,21,0,1,21,2,58,21,2,7,21,1,4,8,21,2,9,15,145,1,8,16,14,21,1,5,0,16,0,22,21,2,62,21,1,3,17,22,1,3,12,17,25,21,0,2,21,2,89,16,0,18,21,2,55,21,2,7,21,0,1,21,2,59,21,1,8,17,8,21,2,4,21,2,98,7,21,1,6,19,21,2,40,21,2,8,0,16,8,21,0,1,19,7,16,25,21,0,1,21,2,82,16,0,18,21,2,19,21,2,62,7,7,16,22,0,3,11,14,21,0,3,21,2,85,0,27,17,21,2,91,21,0,1,17,21,2,63,21,0,3,21,2,90,16,0,16,0,21,17,21,2,89,16,17,25,21,0,1,14,21,1,6,0,16,21,1,7,17,21,2,1,0,22,21,2,62,21,1,7,17,22,1,7,12,17,25,21,0,1,21,2,59,16,21,2,59,0,22,17,0,5,0,77,17,14,21,0,1,0,18,21,2,58,7,16,25,21,0,2,0,18,21,2,93,21,2,1,7,7,16,21,2,55,21,1,4,21,2,85,0,22,17,21,2,90,16,21,2,22,0,22,3,1,17,0,19,21,2,55,7,16,21,2,90,16,17,21,2,19,0,18,0,18,21,2,62,7,7,7,16,0,18,21,0,1,21,2,21,21,1,4,21,2,58,16,17,21,2,22,21,1,4,21,2,19,21,2,55,7,16,3,1,17,21,2,4,21,2,68,7,21,0,1,17,21,2,8,21,2,44,8,7,16,25,21,0,1,21,2,58,21,2,6,21,2,63,8,21,0,2,17,21,2,55,16,22,0,3,11,14,21,0,1,21,2,58,21,2,6,21,2,51,8,21,0,2,17,22,0,4,11,14,21,0,1,15,146,1,21,2,7,21,2,58,21,2,62,21,0,4,21,2,89,16,21,2,62,0,22,17,21,2,63,16,19,8,21,2,6,15,147,1,8,21,0,2,17,22,0,5,11,14,21,0,5,21,0,3,3,2,25,21,0,2,22,0,3,11,14,21,0,1,22,0,4,11,14,15,148,1,21,1,7,3,2,21,2,0,21,2,59,21,2,7,21,1,6,8,8,22,0,5,11,14,0,21,21,0,5,16,25,15,149,1,22,0,3,11,14,0,27,21,0,3,0,22,21,2,62,21,0,1,17,17,21,2,62,0,22,17,25,21,0,2,21,2,103,21,0,1,21,2,8,21,1,13,8,7,16,25,21,0,2,21,2,59,16,21,2,4,21,2,63,7,0,22,17,22,0,3,11,14,21,0,3,21,2,61,0,21,17,0,5,0,87,17,14,21,0,1,21,2,20,16,21,2,1,21,2,5,21,0,3,21,2,76,0,21,8,8,21,2,1,21,0,3,21,2,76,21,2,56,8,3,2,21,2,0,21,0,3,21,2,56,0,21,17,8,21,2,6,0,18,21,2,40,7,8,21,1,3,9,3,2,21,2,0,21,0,2,21,2,58,16,21,2,56,0,21,17,8,15,150,1,3,2,21,2,0,21,2,68,21,2,5,21,2,58,8,21,2,56,0,26,19,21,2,6,21,2,53,8,8,21,0,2,17,25,21,0,1,25,21,0,1,21,2,10,16,0,5,0,97,17,14,21,0,1,21,2,51,21,1,8,17,22,1,8,12,14,21,0,1,21,2,52,21,1,7,17,22,1,7,12,25,21,0,1,21,2,62,0,21,17,21,2,89,16,21,2,96,21,1,9,3,1,17,0,19,21,2,2,21,2,5,21,0,4,8,7,16,25,21,0,1,21,2,2,21,0,4,17,25,21,0,4,21,2,2,21,0,1,17,25,21,0,2,22,0,3,11,0,7,16,22,0,4,11,14,0,21,22,0,5,11,22,0,6,11,22,0,7,11,14,0,25,22,0,8,11,14,21,0,1,0,22,0,12,21,2,7,17,0,7,0,22,17,21,3,9,0,18,0,8,21,3,7,21,2,7,8,7,8,16,21,3,8,0,16,8,21,3,6,21,1,5,8,22,0,9,11,14,21,0,9,0,21,0,22,0,23,3,4,22,0,10,11,14,0,6,15,151,1,3,2,0,16,21,0,3,0,13,0,26,17,17,22,0,11,11,14,15,152,1,22,0,12,11,14,15,153,1,15,154,1,21,0,12,3,3,21,3,0,15,155,1,8,22,0,13,11,14,21,0,1,0,18,21,0,1,21,3,8,15,156,1,8,7,16,25,21,1,6,21,1,7,0,12,21,0,1,17,21,3,9,15,157,1,8,16,25,21,0,1,0,22,0,7,21,1,3,17,21,3,13,21,0,2,17,21,3,9,21,3,41,21,0,0,21,3,7,21,0,2,0,6,0,22,17,8,7,8,16,21,2,3,21,0,2,21,1,4,16,17,25,21,2,7,21,3,63,21,0,1,17,0,17,16,0,18,21,2,6,0,1,16,7,16,21,3,22,22,2,6,13,14,21,2,7,25,21,0,1,21,3,50,21,2,7,17,0,18,21,2,6,21,3,8,0,16,8,7,16,25,21,0,2,21,3,21,0,22,17,22,0,3,11,21,3,22,22,1,7,13,14,21,0,3,21,3,19,21,3,55,7,16,22,1,8,12,21,3,1,21,3,5,0,17,8,0,18,21,3,62,7,21,3,55,19,21,0,1,17,25,21,1,6,21,3,63,21,1,5,17,21,3,55,21,1,8,17,0,17,16,0,18,21,0,4,0,1,16,21,3,68,16,0,16,0,21,17,7,16,21,3,22,21,3,4,21,3,22,7,3,2,21,3,0,21,1,4,8,21,0,1,21,3,68,16,17,25,21,0,1,22,2,4,12,21,3,4,0,16,7,21,2,6,17,22,2,5,12,14,0,27,22,2,3,12,25,21,0,2,0,18,21,0,1,21,3,8,0,16,8,7,16,25,21,0,1,21,3,59,21,0,2,17,0,19,21,3,53,7,16,21,3,19,21,3,62,7,16,22,0,3,11,14,21,0,3,21,3,89,16,0,18,21,0,2,21,3,8,0,16,8,7,16,21,3,19,21,3,55,7,16,22,0,4,11,14,21,0,3,21,3,57,21,3,7,21,1,4,8,21,3,9,21,0,2,21,0,1,3,2,21,3,8,21,3,36,0,16,7,8,21,3,5,15,158,1,8,8,16,14,21,0,4,25,21,1,4,21,3,62,21,3,7,21,0,1,8,21,3,6,21,2,5,8,21,1,3,17,21,3,59,21,3,7,0,21,8,21,3,9,21,0,1,21,3,62,0,22,17,21,3,5,21,1,5,8,8,16,25,21,0,1,0,22,21,3,8,21,3,57,8,21,3,9,15,159,1,8,21,0,2,17,25,21,0,2,21,3,106,16,21,3,90,16,22,0,3,11,14,21,0,1,21,3,105,21,0,2,21,3,44,21,0,3,17,17,21,3,4,21,3,63,7,0,22,17,21,3,52,0,21,17,21,3,4,21,3,44,7,21,0,3,17,22,0,4,11,14,21,0,1,21,1,3,21,3,76,21,3,39,8,21,0,2,21,3,44,21,0,4,17,17,21,2,2,21,3,9,21,3,55,21,3,7,21,3,63,21,3,7,21,0,4,8,8,21,3,62,21,3,2,19,8,21,0,2,21,3,58,16,17,25,21,0,1,21,1,8,0,7,0,22,17,21,4,9,21,1,9,0,7,0,22,19,21,4,9,15,160,1,8,8,0,22,0,7,21,0,1,17,17,25,21,0,2,0,6,21,1,3,17,22,1,4,12,14,21,0,1,0,6,21,1,3,17,22,1,7,12,21,2,6,16,22,1,6,12,0,6,21,1,3,17,21,2,6,16,22,1,5,12,14,21,1,7,0,13,21,3,6,17,22,1,8,12,14,21,1,6,21,1,11,16,14,21,1,7,21,1,13,21,1,4,17,25,21,0,2,0,6,0,22,17,22,1,4,12,0,12,21,1,6,17,0,8,0,23,17,0,6,22,1,8,13,14,21,0,2,25,21,0,1,0,6,0,22,17,22,1,7,12,0,12,21,1,5,17,0,6,22,1,8,13,14,21,0,1,25,21,0,1,21,1,10,21,4,0,21,1,8,8,21,0,2,17,25,21,0,1,0,16,21,1,7,21,1,13,21,1,4,17,17,25,0,22,0,6,21,0,1,17,21,2,4,16,22,2,6,12,21,2,5,16,22,2,7,12,14,21,2,6,25,21,0,1,21,4,19,21,4,63,7,16,21,4,55,16,22,2,3,12,14,21,0,1,21,4,19,21,4,51,7,16,21,4,55,21,1,4,17,22,1,4,12,25,0,23,21,4,47,21,0,2,17,21,4,51,16,22,0,3,11,21,4,62,21,0,1,17,22,0,4,11,21,3,2,16,22,0,5,11,14,21,0,1,21,0,4,3,2,0,16,21,0,5,17,21,2,3,21,0,2,21,4,50,0,23,17,21,4,55,21,0,5,17,21,4,62,21,0,3,17,17,25,21,0,1,14,0,23,22,2,8,12,14,21,2,4,22,2,7,12,14,21,0,1,22,2,4,12,25]) ,provide.concat([0,1,2,32,3,8,-1,Infinity,-Infinity,4,str("Argument to fold must be a list"),str("Equal-rank argument shapes don\'t agree"),str("Argument shape prefixes don\'t agree"),str("Grade argument must have rank at least 1"),str("Replication argument in Indices or Replicate must have rank 1"),str("Amounts to replicate must be natural numbers"),str("Right argument to Select must be an array"),str("Indices in Select must be integers"),str("Select indices out of range"),str("Reverse argument must have rank at least 1"),str("Amount to rotate must be an integer"),str("First-axis function right argument must have rank at least 1"),str("Left argument must have rank at most 1"),str("Left argument length must be at most right argument rank"),str("Elements in Merge argument must have matching shapes"),str("No monadic form: ≥"),str("No monadic form: ≤"),str("Identity not found"),str("Shape argument to Reshape must have rank at most 1"),str("Shape in Reshape must consist of natural numbers"),str("Can\'t compute axis length in Reshape when rest of shape is empty"),str("Shape in Reshape must be a natural number or ∘ ⌊ ⌽ ↑"),str("Shape must be exact when reshaping with ∘"),str("Range argument must consist of natural numbers"),str("Range argument must be a number or list"),str("Insert argument must have rank at least 1"),str("Rank of joined arguments must differ by at most 1"),str("Cell shapes of joined arguments must match"),str("Left argument to Take or Drop must be an integer"),str("Prefixes argument must have rank at least 1"),str("Suffixes argument must have rank at least 1"),str("Windows right argument must be an array"),str("Windows left argument must have rank at most 1"),str("Windows left argument length must be at most right argument rank"),str("Windows left argument must consist of natural numbers"),str("Window length must be at most axis length plus one"),str("Replicate argument lengths must match"),str("Join argument must be an array"),str("Join argument elements must all have the same rank"),str("Join argument element rank must be at least argument rank"),str("Join argument element shapes must be compatible"),str("Grouping argument must be a list"),str("Grouping argument must consist of integers"),str("Grouping argument values cannot be less than ¯1"),str("Group Indices argument must be an array"),str("Group right argument must be an array"),str("Group left argument must consist of lists"),str("Group left argument length must be at most right argument rank"),str("Group argument lengths must be compatible"),str("Indices in compound Pick must be lists"),str("Pick index length must match right argument rank"),str("Pick indices must consist of integers"),str("Pick index out of range"),str("Bins argument must have rank at least 1"),str("Bins right argument rank is too small"),str("Bins left argument must be sorted"),str("Search principal argument must have rank at least 1"),str("Unique mask argument must have rank at least 1"),str("Find left argument rank cannot exceed right argument rank"),str("Left argument to Reorder Axes must have rank at most 1"),str("Reorder Axes left argument length must not exceed right argument rank"),str("Reorder Axes left argument must consist of natural numbers"),str("No such axis in Reorder Axes"),str("Inverse failed"),str("Inverse does not exist"),str("Inverse not found"),str("Repetition numbers must be integers")]) - ,[[0,1,0,137],[2,0,2923,6],[0,0,2950,3],[0,0,2954,3],[0,0,2958,3],[1,0,2962,5],[2,0,2980,6],[2,0,2995,6],[2,0,3014,6],[2,0,3036,6],[2,0,3058,6],[0,0,3090,3],[0,0,3101,3],[0,0,3110,3],[1,0,3119,9],[0,0,3232,3],[0,0,3272,4],[1,1,3348,4],[1,1,3421,3],[0,0,3485,3],[0,0,3496,5],[2,0,3580,12],[0,0,3786,4],[0,0,3835,6],[0,0,3925,7],[0,0,4054,4],[0,0,4210,4],[0,0,4271,4],[2,0,4373,16],[1,1,4603,2],[0,0,4627,3],[0,0,4654,3],[0,0,4680,3],[1,1,4719,2],[2,1,4729,4],[0,0,4765,4],[1,1,4862,2],[0,0,4895,3],[0,0,4922,3],[0,0,4944,3],[0,0,4966,3],[0,0,4977,3],[0,0,5006,3],[0,0,5012,9],[0,0,5163,5],[0,0,5196,3],[0,0,5205,3],[1,1,5211,2],[2,0,5280,10],[2,0,5339,8],[1,0,5532,5],[0,0,5574,8],[0,0,5810,4],[0,0,5891,3],[0,0,5941,4],[0,0,6062,3],[0,0,6112,4],[0,0,6278,3],[0,0,6297,3],[0,0,6331,3],[0,0,6345,7],[0,0,6392,11],[1,0,6657,8],[0,0,6775,4],[0,0,6859,5],[0,0,7018,4],[0,0,7231,3],[0,0,7249,4],[1,0,7321,9],[1,1,7391,3],[1,0,7416,14],[1,1,7851,4],[1,0,7901,6],[0,0,8040,4],[0,0,8108,3],[0,0,8182,3],[0,0,8237,4],[0,0,8366,4],[0,0,8486,3],[2,0,8526,6],[2,0,8555,7],[0,0,8596,6],[0,0,8746,3],[0,0,8816,3],[0,0,8853,5],[0,0,8997,3],[0,0,9044,3],[0,0,9070,3],[0,0,9157,3],[1,1,9212,2],[2,0,9221,13],[1,1,9375,2],[1,1,9389,2],[1,1,9393,2],[0,0,9397,3],[0,0,9409,3],[0,0,9432,3],[1,0,9453,6],[1,0,9570,11],[1,0,9791,5],[0,0,9806,3],[0,0,9821,3],[0,0,9836,3],[1,0,9881,8],[0,0,10020,8],[0,0,10188,5],[0,0,10263,3],[0,0,10280,3],[0,0,10286,4],[0,0,10335,3],[0,0,10345,3],[0,0,10373,5],[1,0,10469,5],[0,0,10480,8],[0,0,10737,3],[0,0,10778,3],[0,0,10798,3],[1,0,10852,6],[0,0,11005,6],[0,0,11133,10],[0,0,11318,3],[0,0,11418,3],[0,0,11460,3],[0,0,11513,4],[0,0,11573,3],[0,0,11604,3],[0,0,11634,3],[0,0,11752,6],[0,0,11859,6],[0,0,11909,4],[0,0,11939,3],[0,0,11958,4],[1,1,12116,2],[0,0,12120,3],[1,0,12163,5],[1,0,12200,5],[1,0,12211,5],[0,0,12222,14],[0,0,12398,3],[0,0,12419,3],[0,0,12473,3],[0,0,12508,3],[0,0,12532,4],[1,0,12592,5],[0,0,12659,3],[0,0,12688,3],[0,0,12705,5],[0,0,12816,3],[0,0,12871,3],[0,0,12895,5],[0,0,13024,3],[0,0,13064,3],[0,0,13147,3],[0,0,13181,3],[0,0,13210,3],[0,0,13228,3],[0,0,13245,3],[0,0,13274,3],[0,0,13317,6],[0,0,13396,3]] + ,[[0,1,0,138],[2,0,2935,6],[0,0,2962,3],[0,0,2966,3],[0,0,2970,3],[1,0,2974,5],[1,0,2982,5],[2,0,3000,6],[2,0,3015,6],[2,0,3034,6],[2,0,3056,6],[2,0,3078,6],[0,0,3110,3],[0,0,3121,3],[0,0,3130,3],[1,0,3139,9],[0,0,3252,3],[0,0,3292,4],[1,1,3368,4],[1,1,3441,3],[0,0,3505,3],[0,0,3516,5],[2,0,3600,12],[0,0,3806,4],[0,0,3855,6],[0,0,3945,7],[0,0,4074,4],[0,0,4230,4],[0,0,4291,4],[2,0,4393,16],[1,1,4623,2],[0,0,4647,3],[0,0,4674,3],[0,0,4700,3],[1,1,4739,2],[2,1,4749,4],[0,0,4785,4],[1,1,4882,2],[0,0,4915,3],[0,0,4942,3],[0,0,4964,3],[0,0,4986,3],[0,0,4997,3],[0,0,5026,3],[0,0,5032,9],[0,0,5183,5],[0,0,5216,3],[0,0,5225,3],[1,1,5231,2],[2,0,5300,10],[2,0,5359,8],[1,0,5552,5],[0,0,5594,8],[0,0,5830,4],[0,0,5911,3],[0,0,5961,4],[0,0,6082,3],[0,0,6132,4],[0,0,6298,3],[0,0,6317,3],[0,0,6351,3],[0,0,6365,7],[0,0,6412,11],[1,0,6677,8],[0,0,6795,4],[0,0,6879,5],[0,0,7038,4],[0,0,7251,3],[0,0,7269,4],[1,0,7342,9],[1,1,7412,3],[1,0,7437,14],[1,1,7872,4],[1,0,7922,6],[0,0,8061,4],[0,0,8129,3],[0,0,8203,3],[0,0,8258,4],[0,0,8387,4],[0,0,8507,3],[2,0,8547,6],[2,0,8576,7],[0,0,8617,6],[0,0,8767,3],[0,0,8837,3],[0,0,8874,5],[0,0,9018,3],[0,0,9065,3],[0,0,9091,3],[0,0,9178,3],[1,1,9233,2],[2,0,9242,13],[1,1,9396,2],[1,1,9410,2],[1,1,9414,2],[0,0,9418,3],[0,0,9430,3],[0,0,9453,3],[1,0,9474,6],[1,0,9591,11],[1,0,9812,5],[0,0,9827,3],[0,0,9842,3],[0,0,9857,3],[1,0,9902,8],[0,0,10041,8],[0,0,10209,5],[0,0,10284,3],[0,0,10301,3],[0,0,10307,4],[0,0,10356,3],[0,0,10366,3],[0,0,10394,5],[1,0,10490,5],[0,0,10501,8],[0,0,10758,3],[0,0,10799,3],[0,0,10819,3],[1,0,10873,6],[0,0,11026,6],[0,0,11154,10],[0,0,11339,3],[0,0,11439,3],[0,0,11481,3],[0,0,11534,4],[0,0,11594,3],[0,0,11625,3],[0,0,11655,3],[0,0,11773,6],[0,0,11880,6],[0,0,11930,4],[0,0,11960,3],[0,0,11979,4],[1,1,12137,2],[0,0,12141,3],[1,0,12184,5],[1,0,12221,5],[1,0,12232,5],[0,0,12243,14],[0,0,12419,3],[0,0,12440,3],[0,0,12494,3],[0,0,12529,3],[0,0,12553,4],[1,0,12613,5],[0,0,12680,3],[0,0,12709,3],[0,0,12726,5],[0,0,12837,3],[0,0,12892,3],[0,0,12916,5],[0,0,13045,3],[0,0,13085,3],[0,0,13168,3],[0,0,13202,3],[0,0,13231,3],[0,0,13249,3],[0,0,13266,3],[0,0,13295,3],[0,0,13338,6],[0,0,13417,3]] ); runtime.map((r,i) => { - let prims = "+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!˜˘¨⌜⁼´˝`∘○⊸⟜⌾⊘◶⎉⚇⍟"; + let prims = "+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!˙˜˘¨⌜⁼´˝`∘○⊸⟜⌾⊘◶⎉⚇⍟"; r.glyph = prims.charAt(i); // Used to format }); // Compiler let compile = run( new Uint8Array([0,72,22,0,0,11,14,0,73,22,0,1,11,14,0,74,22,0,2,11,14,0,75,22,0,3,11,14,0,76,22,0,4,11,14,0,77,22,0,5,11,0,78,0,79,0,80,0,21,21,0,1,17,0,81,0,82,0,83,0,84,0,85,21,0,2,0,86,0,87,0,21,21,0,3,17,0,21,21,0,4,17,21,0,0,0,21,0,88,17,3,13,22,0,6,11,0,21,16,22,0,7,11,14,15,1,22,0,8,11,14,15,2,21,0,7,7,22,0,9,11,14,21,0,6,0,39,0,13,7,16,0,19,0,21,0,53,19,0,23,0,13,19,0,44,0,0,7,9,0,48,0,37,0,39,0,22,7,7,8,16,22,0,10,22,0,11,22,0,12,22,0,13,22,0,14,22,0,15,22,0,16,22,0,17,22,0,18,22,0,19,22,0,20,22,0,21,22,0,22,4,13,11,14,21,0,21,0,30,16,0,0,0,54,17,22,0,23,11,14,0,30,0,48,0,1,8,0,12,0,9,0,15,0,47,0,53,8,19,0,30,0,47,0,52,8,19,22,0,24,11,14,21,0,6,0,23,0,55,17,0,39,0,13,7,16,0,42,0,0,7,16,22,0,25,11,14,0,53,0,21,0,58,0,25,16,0,26,16,0,27,0,57,17,17,0,21,21,0,6,0,23,0,56,17,0,39,0,13,7,16,0,21,0,53,17,0,27,16,0,23,21,0,18,0,30,0,52,17,0,1,21,0,25,17,17,17,22,0,26,11,14,0,56,0,53,3,2,0,40,0,1,7,0,56,0,57,0,59,3,3,17,0,20,16,22,0,27,11,14,15,3,22,0,28,11,14,15,4,22,0,29,11,14,0,30,0,47,0,52,8,0,24,0,47,0,52,8,21,0,29,3,3,0,50,0,29,0,31,0,91,0,21,0,96,17,19,0,30,9,8,22,0,30,11,14,15,5,22,0,31,11,14,15,6,22,0,32,11,14,15,7,22,0,33,11,14,15,8,22,0,34,11,14,15,9,22,0,35,11,25,21,0,1,0,33,0,90,0,91,3,2,17,0,42,0,10,7,16,0,8,16,0,36,0,89,17,14,0,53,0,36,0,47,0,21,8,0,92,21,0,1,0,13,16,0,11,0,52,17,0,37,0,27,7,0,93,17,0,94,21,0,1,3,4,17,25,21,0,1,0,48,0,29,8,0,48,0,17,0,51,0,18,0,27,0,13,19,0,45,21,1,8,8,8,8,0,18,0,19,19,22,0,2,11,14,21,0,1,0,28,16,22,0,3,11,14,0,19,0,28,21,0,1,0,29,21,0,3,17,19,0,6,0,52,19,0,37,0,1,7,0,52,19,0,37,0,29,7,21,0,3,19,21,0,2,0,19,19,25,0,95,0,14,21,0,1,17,22,0,3,11,14,0,90,0,14,21,0,1,17,0,9,0,47,0,24,0,47,0,58,8,0,23,0,13,19,8,16,0,27,16,22,0,4,11,14,0,91,0,14,21,0,1,17,22,0,5,11,0,27,16,22,0,6,11,14,21,0,4,21,0,6,0,24,0,60,17,21,0,3,0,27,16,3,3,0,21,16,22,0,7,11,0,28,16,22,0,8,11,14,21,0,7,0,29,21,0,8,17,22,0,7,12,14,21,0,4,0,0,0,58,17,21,0,6,0,24,0,52,17,0,52,0,21,21,1,1,0,14,21,0,1,17,17,0,27,16,0,27,0,47,21,0,3,0,44,0,0,7,16,0,21,0,53,17,0,48,0,29,0,45,0,19,0,21,0,53,19,0,24,0,60,19,0,1,0,19,19,8,8,8,16,3,3,0,21,16,0,29,21,0,8,17,22,0,9,11,14,15,10,0,51,15,11,8,22,0,10,11,14,21,0,9,0,28,21,0,7,17,0,13,0,48,0,21,8,16,0,13,0,37,0,23,7,0,52,19,0,48,21,0,10,8,16,0,24,0,60,17,22,0,11,11,14,21,0,9,0,38,0,21,7,21,0,7,17,0,27,21,0,11,17,22,0,12,11,14,0,20,0,37,0,21,7,21,0,1,0,13,16,19,0,41,0,27,7,9,0,24,0,60,19,22,0,13,11,14,21,0,12,21,0,13,16,22,0,14,11,0,44,0,13,7,16,0,8,16,22,0,15,11,14,21,0,5,0,9,0,47,0,19,0,37,0,21,7,0,53,19,0,24,0,52,19,8,16,0,9,21,0,14,17,0,9,21,0,15,17,22,0,16,11,0,8,16,0,9,22,0,15,13,14,21,0,12,0,27,21,0,3,0,29,21,0,7,0,27,21,0,11,17,17,0,8,16,17,22,0,17,11,14,21,0,17,21,0,13,16,0,44,0,13,7,16,0,2,21,0,17,0,38,0,30,7,16,21,0,13,16,0,37,0,1,7,21,0,16,17,0,44,0,0,7,16,17,0,37,0,1,7,0,52,17,0,37,0,35,7,21,0,1,17,22,0,18,11,0,34,16,22,0,19,11,14,21,0,17,0,38,0,26,0,45,0,30,8,7,16,21,0,13,16,0,27,21,0,15,17,22,0,20,11,14,21,0,1,0,27,21,0,15,17,0,27,0,47,21,0,20,0,8,16,8,0,49,21,1,9,8,16,22,0,21,11,14,21,1,19,21,1,20,21,1,21,3,3,0,39,0,30,7,0,52,17,0,42,0,0,7,16,0,22,21,1,19,0,30,16,17,21,1,24,21,0,21,17,22,0,22,11,0,11,0,47,0,19,0,21,0,53,19,0,23,0,13,19,8,16,22,0,23,11,14,21,1,3,0,13,16,22,0,24,11,14,21,1,21,0,42,0,0,7,16,0,0,0,60,17,0,14,21,0,21,17,22,0,25,11,14,21,0,21,0,15,0,47,21,1,21,0,30,16,0,48,0,0,8,8,0,2,0,18,19,0,1,0,19,19,21,0,24,17,0,35,21,0,23,0,44,0,0,7,16,0,2,21,0,22,0,11,21,0,25,17,17,0,37,0,1,7,0,52,17,17,22,0,26,11,14,21,0,21,0,27,21,0,23,17,0,37,0,1,7,21,1,21,0,30,16,17,0,37,0,3,0,45,0,5,8,7,21,0,24,17,22,0,27,11,14,21,0,26,0,31,16,22,0,28,11,0,11,0,47,0,44,0,6,7,0,21,0,60,19,0,23,0,13,19,8,16,22,0,29,11,14,21,0,27,0,27,21,0,29,17,0,12,0,53,17,22,0,30,11,0,13,16,22,0,31,11,14,21,0,27,0,6,0,53,17,0,14,0,47,0,58,8,0,48,0,9,8,0,0,0,19,19,21,0,22,0,11,0,47,0,19,0,37,0,21,7,0,53,19,0,24,0,52,19,8,16,0,37,0,27,7,21,0,25,17,17,22,0,27,12,14,21,0,21,0,27,0,47,21,0,20,8,0,49,21,0,18,0,31,21,0,19,17,0,0,21,0,31,17,0,0,21,1,25,17,8,16,0,27,0,47,21,0,23,8,0,49,21,0,30,0,28,16,0,28,16,0,29,21,0,28,17,0,0,21,1,25,17,8,16,0,27,21,1,22,21,1,24,21,0,21,17,0,10,21,0,22,17,0,8,16,0,10,21,0,23,17,17,22,0,21,12,14,21,1,13,21,1,24,21,0,21,17,0,9,0,47,0,19,0,10,21,1,15,0,30,16,0,0,0,58,0,54,3,2,17,0,33,21,0,21,17,19,0,21,0,52,19,0,23,0,13,19,8,16,0,8,16,0,37,0,27,7,22,0,21,13,14,21,1,13,21,1,24,21,0,21,17,0,9,21,1,15,0,30,16,0,0,0,56,0,57,3,2,17,0,33,21,0,21,17,0,37,0,21,7,0,52,17,0,24,0,52,17,17,0,8,16,0,37,0,27,7,22,0,21,13,14,21,1,25,0,1,21,0,21,17,21,0,31,0,48,0,11,8,0,9,0,15,0,47,0,53,8,19,16,22,0,32,11,14,21,1,26,0,29,21,0,21,0,5,21,1,25,17,17,0,27,0,47,21,0,32,8,0,49,21,0,27,8,16,22,0,33,11,14,21,1,18,0,30,16,0,37,0,22,7,0,57,17,21,1,24,21,0,21,17,0,2,0,57,17,0,0,22,0,21,13,14,21,0,21,21,0,33,21,0,30,0,8,16,0,42,0,0,7,16,21,0,19,0,21,21,0,26,0,29,21,0,29,0,27,16,0,27,21,0,30,17,17,17,3,4,25,21,1,20,0,30,16,0,0,0,47,0,25,8,0,54,17,22,0,3,22,0,4,22,0,5,22,0,6,4,4,11,14,21,1,19,0,30,16,0,48,0,1,8,0,26,0,45,0,42,0,2,0,47,0,61,8,0,48,0,0,8,7,8,9,22,0,7,11,14,21,0,7,0,24,0,47,0,52,8,21,0,7,9,0,1,9,3,2,0,50,0,30,0,14,21,0,3,19,8,22,0,8,11,14,0,24,0,47,0,52,0,48,0,0,8,8,0,53,0,13,0,4,0,61,19,0,3,21,0,7,19,3,2,0,50,0,13,0,11,0,53,19,8,9,0,0,0,23,0,45,21,0,7,8,19,0,47,21,0,4,0,11,16,0,48,0,31,8,8,22,0,9,11,14,0,62,0,63,21,0,9,3,3,0,50,0,29,0,31,21,0,5,21,0,6,3,2,19,0,30,9,8,22,0,10,11,14,21,1,23,0,31,21,0,1,17,0,30,16,22,0,11,11,14,21,0,1,0,23,21,0,11,17,21,0,10,0,24,0,47,0,52,8,21,0,10,9,0,1,9,3,2,0,50,0,30,0,14,21,0,3,19,8,16,22,0,12,11,14,21,0,12,21,0,1,0,13,16,0,11,21,0,11,17,0,51,0,37,0,18,0,24,0,52,0,0,21,0,11,17,19,21,0,8,9,0,4,0,61,19,0,48,0,2,8,7,8,21,0,1,17,25,0,64,22,0,3,11,14,21,0,1,0,6,0,52,17,0,41,0,4,7,21,0,3,17,0,5,16,22,0,4,11,14,21,0,4,0,0,0,52,17,0,44,0,0,7,0,48,0,19,0,21,0,53,19,0,23,0,13,19,0,48,0,27,8,0,1,0,19,0,30,0,60,19,0,25,9,19,8,16,0,28,16,0,28,16,22,0,5,11,14,21,0,1,15,12,21,0,4,17,0,29,21,0,5,17,25,0,40,0,14,7,0,43,15,13,7,0,19,0,45,0,38,0,53,7,8,19,0,30,0,60,19,22,0,3,11,14,15,14,22,0,4,11,14,0,53,21,0,4,0,98,8,0,37,0,52,21,0,4,0,99,8,7,3,2,0,50,0,13,0,46,0,12,8,8,22,0,5,11,14,21,0,1,21,0,5,0,100,3,2,0,50,0,13,0,46,0,5,8,0,11,21,0,3,19,8,21,0,2,17,0,37,0,36,7,0,53,17,25,0,93,0,27,21,0,1,0,13,16,0,11,0,52,17,17,0,21,0,101,17,0,37,0,36,7,0,53,17,25,21,0,2,22,0,3,22,0,4,4,2,11,14,21,1,15,0,30,0,48,0,1,8,0,7,0,58,19,0,4,0,60,19,0,2,21,1,24,19,21,0,1,17,22,0,5,11,0,44,0,0,7,16,22,0,6,11,0,28,16,22,0,7,11,14,21,1,15,0,30,16,0,0,0,58,17,0,37,0,22,7,0,58,17,21,1,24,21,0,1,17,0,2,21,0,5,17,22,0,8,11,14,21,0,1,0,29,0,47,21,0,7,8,0,46,0,27,0,47,0,60,0,48,0,14,8,8,0,37,0,1,7,0,52,19,0,17,0,51,21,1,32,8,0,27,0,47,0,52,0,48,0,14,8,8,19,8,21,0,5,17,14,21,0,6,0,30,21,0,7,0,30,16,17,0,15,0,53,17,0,36,0,102,17,14,21,1,16,21,1,24,21,0,1,17,0,10,0,47,0,26,0,47,0,52,8,8,16,22,0,9,11,14,21,0,9,0,29,0,47,21,0,7,8,0,49,0,26,0,47,0,60,8,8,16,22,0,10,11,14,21,0,10,0,10,21,0,9,17,22,0,11,11,14,21,0,9,0,29,21,0,7,17,0,28,16,0,37,0,29,7,22,0,7,13,14,21,0,11,0,8,16,0,2,22,0,4,13,14,0,53,0,12,21,0,5,17,22,0,12,11,14,21,0,4,0,15,0,52,17,0,10,21,0,4,0,14,0,56,17,0,29,0,47,21,0,7,8,0,49,0,26,0,47,0,60,8,8,16,17,0,19,0,2,0,47,0,13,0,45,0,25,8,0,0,0,52,19,8,0,44,0,6,7,9,0,46,0,14,8,0,10,0,47,0,8,8,19,0,9,0,18,19,21,1,15,0,30,16,0,0,0,52,17,0,14,21,0,1,17,0,11,21,0,11,17,17,0,0,22,0,4,13,14,21,1,13,21,1,24,21,0,1,17,0,10,21,0,9,17,0,10,21,0,12,17,0,29,0,37,0,21,7,0,1,0,21,0,45,0,44,0,0,7,8,19,0,52,19,0,28,0,48,0,28,0,48,0,37,0,29,7,8,0,1,0,37,0,29,7,19,0,29,0,47,0,28,8,0,18,19,8,0,18,0,21,0,60,19,19,21,0,7,17,0,24,0,60,17,0,0,0,52,17,0,44,0,0,7,16,0,28,16,22,0,13,11,14,21,0,8,0,29,21,0,13,17,0,44,0,0,7,16,22,0,14,11,0,28,16,22,0,15,11,14,21,0,15,0,37,0,29,7,22,0,13,13,14,21,0,15,0,37,0,29,7,22,0,14,13,14,21,0,13,0,37,0,29,7,22,0,1,13,14,21,0,8,0,29,21,0,13,17,22,0,16,11,14,0,53,0,11,21,0,16,17,0,27,16,22,0,17,11,14,0,53,0,12,21,0,16,17,22,0,18,11,0,44,0,0,7,16,22,0,19,11,14,0,53,0,48,0,21,8,0,44,0,0,7,9,0,27,0,52,0,21,21,0,18,17,19,0,19,0,21,0,53,19,0,23,0,13,19,0,48,0,1,8,9,22,0,20,11,14,0,14,0,45,21,0,20,8,0,24,0,52,19,0,11,0,53,19,22,0,21,11,14,21,0,1,0,28,21,1,18,0,30,16,0,0,0,57,17,0,0,0,53,0,56,0,54,0,57,3,4,17,17,21,0,21,0,47,0,56,8,0,2,0,58,19,0,6,21,0,21,0,47,0,58,8,19,0,2,0,58,19,0,0,21,0,21,0,47,0,52,8,19,0,21,0,53,19,16,22,0,22,11,14,21,1,27,0,29,21,0,22,17,22,0,23,11,14,21,0,4,0,29,21,0,13,17,0,29,0,47,21,0,17,8,0,49,0,54,0,25,16,0,27,0,47,0,15,0,47,0,58,8,0,0,0,52,19,8,16,0,29,21,0,22,0,24,0,52,17,17,8,16,22,0,4,12,14,21,1,25,0,1,21,0,1,17,22,0,24,11,21,0,3,0,48,0,11,8,0,9,0,15,0,47,0,53,8,19,16,22,0,25,11,0,27,16,22,0,26,11,14,21,0,1,0,29,21,0,26,17,22,0,27,11,14,21,1,18,21,1,24,21,0,1,17,0,27,16,22,0,28,11,14,21,1,14,0,30,16,0,14,21,0,1,17,0,29,21,1,14,21,1,24,21,0,1,17,0,2,0,47,0,13,0,45,0,25,8,8,16,0,44,0,6,7,16,17,22,0,29,11,14,21,0,8,0,1,21,0,5,17,0,29,21,0,13,17,0,44,0,0,7,16,0,28,16,22,0,7,12,14,21,0,13,0,29,21,0,7,17,22,0,30,11,14,21,0,9,0,1,21,0,10,17,0,29,21,0,30,17,0,12,0,27,0,46,0,1,8,0,11,19,0,53,17,0,37,0,3,7,0,58,17,0,0,0,52,17,22,0,31,11,14,21,1,15,0,30,16,0,0,0,57,17,0,14,21,0,1,17,0,29,21,0,7,17,0,27,16,22,0,32,11,14,21,0,9,0,29,21,0,30,17,0,28,16,22,0,33,11,0,37,0,29,7,22,0,7,13,14,21,0,13,0,29,21,0,7,17,22,0,30,12,14,21,0,7,0,37,0,29,7,22,0,1,13,14,21,0,7,0,37,0,29,7,22,0,4,13,14,21,0,30,0,37,0,29,7,22,0,12,13,14,21,0,9,0,12,21,0,10,17,0,29,21,0,30,17,0,27,16,22,0,34,11,14,21,0,7,0,28,16,22,0,35,11,14,21,0,33,0,28,16,0,29,22,0,32,13,14,21,1,13,21,1,24,21,0,1,17,22,0,36,11,14,21,0,9,0,29,21,0,30,17,0,10,21,0,12,17,0,10,21,0,36,17,22,0,37,11,14,21,1,14,0,30,16,0,37,0,22,7,0,58,17,21,1,24,21,0,1,17,22,0,38,11,14,21,0,38,0,10,21,0,37,17,0,1,22,0,4,13,14,0,58,0,16,21,0,4,17,22,0,39,11,14,0,56,0,14,21,0,4,17,0,26,0,52,17,0,10,0,52,0,16,21,0,4,17,17,22,0,40,11,14,21,0,40,0,29,21,0,37,0,26,0,60,17,0,2,0,47,0,13,0,45,0,25,8,8,16,0,44,0,6,7,16,17,22,0,41,11,14,21,0,40,0,26,0,52,17,0,9,21,1,14,0,30,16,0,0,0,52,17,0,14,21,0,1,17,17,0,11,21,0,41,17,22,0,42,11,14,0,56,0,14,21,0,4,17,0,26,0,52,17,0,11,21,0,38,17,0,10,21,0,39,17,22,0,43,11,14,21,0,42,0,10,21,0,43,17,0,8,16,0,26,16,0,2,0,45,0,44,0,6,7,8,0,1,0,18,19,0,47,0,13,0,45,0,25,8,8,16,0,26,16,22,0,44,11,14,21,0,38,0,27,16,21,0,44,0,48,0,29,8,0,0,0,52,19,0,0,0,19,19,16,22,0,45,11,14,0,52,0,1,21,0,45,17,0,37,0,21,7,21,0,1,0,13,16,17,0,41,0,27,7,16,0,24,0,60,17,0,19,0,21,0,53,19,0,23,0,13,19,0,48,0,1,8,16,0,29,21,0,35,17,0,44,0,0,7,16,0,26,0,60,17,22,0,46,11,0,29,21,0,7,17,22,0,47,11,14,21,0,4,0,27,0,47,21,0,47,8,0,49,0,39,0,60,7,8,16,22,0,4,12,14,21,0,43,0,8,16,0,44,0,0,7,0,2,0,45,0,44,0,6,7,8,0,1,0,19,19,21,0,37,19,0,15,0,11,0,7,19,0,58,19,0,9,0,19,19,16,0,9,21,0,37,0,2,0,47,0,13,0,45,0,25,8,0,0,0,52,19,8,0,44,0,6,7,9,0,46,0,15,8,21,0,38,17,17,22,0,48,11,14,21,0,38,0,10,21,0,37,17,0,37,0,21,7,0,53,17,0,24,0,52,17,0,12,21,0,39,17,22,0,49,11,14,21,0,49,0,27,16,0,26,16,22,0,50,11,14,21,0,49,0,26,0,60,17,0,11,21,0,39,17,0,10,0,52,0,14,21,0,4,17,17,0,11,21,0,49,0,26,0,52,17,0,9,21,0,43,17,17,0,9,21,0,41,0,8,16,0,10,21,0,48,17,17,0,11,21,0,47,0,26,0,52,17,17,0,27,16,22,0,51,11,14,0,53,0,14,21,0,4,17,0,11,21,0,43,17,0,10,0,53,0,16,21,0,4,17,0,9,21,0,41,17,17,0,9,21,1,17,0,30,16,0,13,21,0,1,17,17,0,37,0,21,7,0,53,17,0,24,0,52,17,0,29,21,0,51,17,22,0,52,11,14,21,0,3,0,0,21,1,25,17,0,16,21,0,1,17,22,0,53,11,14,21,1,12,0,42,0,0,7,16,0,0,0,60,17,0,15,21,0,1,17,0,10,21,0,53,17,0,27,16,22,0,54,11,14,21,0,1,0,29,21,0,54,17,22,0,55,11,0,34,16,0,9,16,22,0,56,11,14,21,1,15,0,30,16,0,0,0,54,17,0,14,21,0,1,0,27,21,0,12,17,17,22,0,57,11,14,0,52,0,21,21,0,37,17,0,9,21,0,12,0,21,0,52,17,17,0,1,0,53,0,21,21,0,36,17,17,0,44,0,0,7,16,0,27,0,52,0,21,21,0,12,17,17,0,24,0,47,0,1,8,0,1,0,24,19,0,52,17,0,27,21,0,57,17,0,0,0,52,17,22,0,58,11,14,21,0,57,0,21,0,53,17,0,29,0,47,0,44,0,0,7,8,21,0,12,17,0,12,21,0,36,17,0,27,16,22,0,59,11,14,21,1,15,0,30,16,0,0,0,58,17,0,14,21,0,1,17,0,27,16,22,0,60,11,14,21,0,46,0,9,21,0,29,17,0,9,21,0,25,17,22,0,61,11,0,29,21,0,26,17,22,0,62,11,14,21,0,61,21,0,20,16,22,0,63,11,14,21,0,19,0,29,21,0,26,17,0,37,21,0,15,0,29,21,0,17,17,0,21,21,0,1,0,13,16,17,7,0,29,0,27,0,47,21,0,62,8,19,0,21,21,0,15,0,27,21,0,18,17,0,21,0,60,17,0,48,0,29,8,19,16,22,0,64,11,14,21,0,64,0,28,16,0,29,0,47,21,0,27,0,27,0,47,21,0,62,8,0,48,0,21,8,16,22,0,65,11,0,48,0,29,8,0,28,9,8,16,22,0,66,11,14,21,0,64,0,19,0,29,21,0,66,0,27,0,47,0,15,0,47,21,0,26,0,13,16,8,8,16,19,0,13,0,47,0,19,0,21,0,53,19,0,23,0,13,19,8,9,0,46,0,10,8,21,0,65,17,0,42,0,9,7,0,52,17,0,36,0,103,17,14,21,0,66,0,29,0,47,21,0,62,0,37,0,27,7,16,0,1,16,0,21,21,0,62,17,0,48,0,29,0,45,0,44,0,0,7,8,8,0,28,9,8,16,0,27,0,47,21,0,26,0,13,16,0,48,0,11,8,8,16,22,0,66,12,14,21,0,66,0,37,0,29,7,22,0,62,13,14,21,0,27,0,29,21,0,66,17,0,13,0,47,0,19,0,21,0,53,19,0,23,0,13,19,8,0,11,21,0,62,19,0,48,0,19,0,42,0,10,7,0,53,19,0,51,0,37,0,27,0,45,21,1,33,8,7,8,8,16,14,21,0,26,0,29,0,47,21,0,66,8,0,49,0,29,0,47,21,0,62,0,2,0,47,0,13,0,45,0,25,8,8,16,0,44,0,6,7,16,8,8,16,22,0,67,11,14,21,0,24,0,29,21,0,28,17,0,0,0,58,17,0,15,0,47,0,53,8,0,48,0,0,8,16,0,0,21,0,22,0,7,0,58,17,0,2,0,56,17,0,29,21,0,19,0,29,21,0,28,17,17,17,0,21,21,0,61,0,44,0,0,7,16,0,8,0,47,0,2,0,47,21,0,18,8,0,44,0,6,7,9,8,16,0,1,21,0,23,0,29,21,0,19,17,17,0,29,21,0,67,17,17,22,0,68,11,14,21,0,28,0,21,21,0,26,17,22,0,69,11,0,11,16,0,20,0,56,17,0,21,16,22,0,70,11,14,21,0,46,0,29,21,0,69,17,0,0,0,65,17,21,0,28,0,39,0,53,7,16,0,21,21,0,67,21,0,14,0,48,0,29,8,0,46,0,1,8,21,0,26,17,17,21,0,68,3,3,22,0,71,11,14,21,0,35,0,29,22,0,17,13,14,21,0,54,21,0,54,21,0,17,21,0,17,21,0,60,21,0,59,21,0,32,21,0,32,21,0,34,21,0,34,21,0,45,21,0,44,0,29,21,0,50,17,0,6,0,52,17,0,0,21,0,50,17,21,0,52,0,0,21,0,51,17,0,0,0,47,21,0,44,0,48,0,29,8,0,2,21,0,52,19,8,16,3,13,0,21,16,0,37,0,29,7,21,0,7,17,0,21,21,0,70,17,0,28,16,22,0,72,11,14,21,0,54,0,39,0,53,7,16,21,0,55,0,31,21,0,56,17,21,0,17,0,39,0,66,7,16,21,0,17,0,13,16,0,25,16,0,0,0,52,17,3,4,0,21,21,0,71,17,0,21,16,22,0,73,11,14,21,0,60,0,39,0,67,7,16,21,0,59,0,39,0,68,7,16,21,0,47,0,29,21,0,32,17,0,0,0,56,17,21,0,58,21,0,47,0,29,21,0,34,17,0,0,0,56,17,21,0,31,21,0,1,0,0,21,0,42,17,0,27,21,0,38,17,0,0,21,1,14,0,30,16,0,1,0,69,17,17,21,0,4,0,29,21,0,50,17,0,0,0,57,17,21,0,41,0,29,21,0,51,17,0,2,0,71,17,0,1,21,0,52,17,0,0,0,70,17,0,14,0,47,0,61,8,0,2,0,55,19,0,0,0,19,19,16,3,9,0,21,16,0,21,21,0,73,17,0,29,21,0,72,17,22,0,74,11,14,21,0,23,0,0,21,0,63,17,0,39,0,11,0,46,0,22,8,7,21,0,60,0,13,0,46,0,22,8,21,0,73,17,21,1,24,21,0,72,17,0,21,0,52,17,0,27,16,0,37,0,29,7,21,0,74,0,6,0,52,17,0,41,0,4,7,0,64,17,0,5,16,0,0,0,52,17,0,21,0,53,17,0,44,0,0,7,16,17,17,0,39,0,21,7,0,58,0,25,0,46,0,26,0,48,0,40,0,22,7,8,8,0,56,17,0,20,16,0,29,21,0,22,17,17,22,0,75,11,14,0,67,0,21,21,0,74,17,21,1,31,16,21,0,56,21,0,75,3,3,25,21,0,1,21,1,28,16,22,0,3,22,0,4,22,0,5,22,0,6,4,4,11,14,21,0,3,21,1,34,21,0,5,21,0,4,3,2,17,22,0,7,22,0,8,22,0,9,4,3,11,14,21,0,6,0,39,21,1,30,7,16,0,21,21,0,2,17,0,29,21,1,25,0,16,21,0,8,17,0,2,21,0,2,0,13,16,0,1,21,0,5,17,0,0,21,1,25,17,17,0,1,21,0,8,17,17,22,0,10,11,14,21,0,7,21,0,10,21,0,9,3,3,25,21,0,1,0,26,16,0,30,16,0,14,0,53,17,25,21,0,1,0,29,0,47,21,0,2,0,27,21,0,1,17,8,0,49,0,39,0,52,7,8,16,21,1,10,21,0,2,0,37,0,29,7,16,17,25,21,0,2,0,2,16,22,0,3,11,14,21,0,1,21,0,3,0,42,0,10,7,16,0,51,0,27,0,47,21,0,3,8,0,46,21,1,3,0,48,0,3,8,0,5,9,0,48,21,0,0,8,8,0,21,0,7,0,0,21,0,3,0,48,0,2,8,19,0,47,21,1,3,8,19,8,0,52,0,1,21,0,2,17,17,25,21,0,1,0,24,0,52,17,0,37,0,21,7,0,53,17,0,0,21,0,2,17,0,44,0,6,7,16,0,6,21,0,1,17,25,0,32,0,14,0,18,0,45,0,13,8,19,0,37,0,27,7,0,19,19,0,0,21,0,2,19,0,37,0,29,7,21,2,7,19,0,21,0,88,19,0,21,21,0,1,19,0,21,0,97,19,25]) - ,[runtime[0],runtime[1],runtime[2],runtime[3],runtime[4],runtime[6],runtime[7],runtime[8],runtime[9],runtime[10],runtime[11],runtime[12],runtime[13],runtime[14],runtime[15],runtime[16],runtime[17],runtime[19],runtime[20],runtime[21],runtime[22],runtime[23],runtime[24],runtime[25],runtime[26],runtime[27],runtime[28],runtime[30],runtime[31],runtime[33],runtime[34],runtime[35],runtime[36],runtime[37],runtime[38],runtime[39],runtime[40],runtime[41],runtime[42],runtime[43],runtime[44],runtime[45],runtime[46],runtime[47],runtime[48],runtime[49],runtime[50],runtime[51],runtime[52],runtime[53],runtime[55],runtime[58],1,0,4,9,3,5,2,6,-1,10,3.14159265358979,Infinity,128,21,15,25,14,11,16,7,'\t','\n',str("0123456789"),str("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),str("abcdefghijklmnopqrstuvwxyz"),str("+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!"),str("˜˘¨⌜⁼´˝`"),str("∘○⊸⟜⌾⊘◶⎉⚇⍟"),str("⋄,"),str("←↩→"),str("(){}⟨⟩"),str("‿"),str("·"),str("𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕗𝕘"),str("¯.π∞"),str("_"),str(" "),str("Unclosed quote"),'\'','"',str("Unknown character"),str("s"),str(": "),'#',str("'"),str("Missing "),str("opening"),str("closing"),str("Malformed bracket nesting"),str("Undefined identifier"),str("Swapped open and closed brackets"),str("Multiple definitions")] + ,[runtime[0],runtime[1],runtime[2],runtime[3],runtime[4],runtime[6],runtime[7],runtime[8],runtime[9],runtime[10],runtime[11],runtime[12],runtime[13],runtime[14],runtime[15],runtime[16],runtime[17],runtime[19],runtime[20],runtime[21],runtime[22],runtime[23],runtime[24],runtime[25],runtime[26],runtime[27],runtime[28],runtime[30],runtime[31],runtime[33],runtime[34],runtime[35],runtime[36],runtime[37],runtime[38],runtime[39],runtime[40],runtime[42],runtime[43],runtime[44],runtime[45],runtime[46],runtime[47],runtime[48],runtime[49],runtime[50],runtime[51],runtime[52],runtime[53],runtime[54],runtime[56],runtime[59],1,0,4,9,3,5,2,6,-1,10,3.14159265358979,Infinity,128,21,15,25,14,11,16,7,'\t','\n',str("0123456789"),str("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),str("abcdefghijklmnopqrstuvwxyz"),str("+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!"),str("˙˜˘¨⌜⁼´˝`"),str("∘○⊸⟜⌾⊘◶⎉⚇⍟"),str("⋄,"),str("←↩→"),str("(){}⟨⟩"),str("‿"),str("·"),str("𝕊𝕏𝕎𝔽𝔾𝕤𝕩𝕨𝕗𝕘"),str("¯.π∞"),str("_"),str(" "),str("Unclosed quote"),'\'','"',str("Unknown character"),str("s"),str(": "),'#',str("\'"),str("Missing "),str("opening"),str("closing"),str("Malformed bracket nesting"),str("Undefined identifier"),str("Swapped open and closed brackets"),str("Multiple definitions")] ,[[0,1,0,36],[0,0,461,3],[1,1,527,4],[0,0,620,34],[0,0,1889,13],[0,0,2211,6],[0,0,2317,6],[0,0,2430,3],[0,0,2460,76],[0,0,5744,11],[0,0,5867,3],[0,0,5882,3],[0,0,5922,4],[0,0,6008,3],[2,1,6043,3]] ); let bqn = src => run.apply(null,compile(str(src),runtime)); @@ -165,7 +165,7 @@ let fmt0 = x => : ""+x; let fmt1 = run( new Uint8Array([15,1,25,21,0,4,22,0,5,11,14,0,47,22,0,6,11,14,0,48,22,0,7,11,14,0,49,22,0,8,11,14,0,15,0,35,15,2,8,22,0,9,11,14,0,9,0,7,0,44,19,0,39,15,3,8,22,0,10,11,14,15,4,22,0,11,11,14,21,0,10,0,34,21,0,11,8,22,0,12,11,14,15,5,22,0,13,11,14,21,0,13,15,6,3,2,0,37,15,7,8,22,0,14,11,14,0,59,0,17,0,58,17,15,8,15,9,3,2,0,37,0,8,0,9,0,43,19,0,6,0,9,0,8,0,44,19,19,8,3,2,0,37,0,12,0,12,0,43,0,43,3,2,19,8,22,0,15,11,14,15,10,0,36,15,11,8,22,0,16,11,14,15,12,22,0,17,11,14,0,13,0,16,0,16,19,0,33,0,64,8,21,0,5,3,2,0,37,0,41,0,34,0,10,8,8,0,17,9,15,13,21,0,17,3,3,0,37,0,11,0,3,0,44,19,8,22,0,18,11,14,21,0,1,21,0,18,16,0,27,21,0,6,0,34,0,16,8,7,16,0,15,16,0,19,0,40,17,25,21,0,1,0,24,21,1,7,17,22,0,3,11,14,21,0,1,0,21,0,33,21,1,7,0,8,16,0,7,21,0,3,17,8,0,35,0,13,0,26,0,22,7,21,1,8,19,8,21,0,3,17,25,21,0,1,0,12,16,0,19,0,40,17,22,0,3,11,14,0,42,0,28,0,18,7,21,0,3,0,4,0,42,17,0,1,16,17,0,20,0,35,0,32,0,26,0,29,0,2,7,7,7,8,16,0,30,0,40,0,41,3,2,0,38,0,0,8,7,16,0,15,16,22,0,4,11,14,21,0,4,0,23,0,33,0,40,8,0,35,0,43,8,16,22,0,4,12,14,15,14,22,0,5,11,14,21,0,1,0,15,21,0,1,0,12,16,0,23,0,40,17,0,16,21,0,3,0,30,0,2,7,16,17,17,21,0,5,0,18,0,33,0,30,0,0,7,8,3,2,0,37,21,0,3,0,25,0,43,17,0,23,16,8,21,0,4,17,25,21,0,1,0,13,0,42,0,38,0,16,8,0,42,0,38,0,16,8,19,0,50,0,21,21,0,2,17,17,25,0,52,0,16,21,0,1,0,22,16,0,19,0,42,17,0,19,0,40,17,17,0,16,0,51,17,0,17,16,25,21,0,1,0,12,16,0,23,0,40,17,22,0,3,11,14,0,54,21,0,2,0,14,0,3,0,42,19,0,26,0,22,7,0,55,19,0,15,9,21,1,5,3,2,0,37,0,7,0,33,0,45,8,8,16,3,2,0,16,16,0,18,0,42,21,0,3,3,2,17,21,0,1,0,23,0,35,0,56,0,23,0,42,0,1,21,0,2,17,0,4,0,43,17,0,3,0,46,17,17,8,16,0,57,0,18,21,0,3,0,1,16,0,16,0,42,17,17,3,3,0,16,16,25,21,0,1,0,22,16,0,29,0,9,7,0,53,17,0,31,0,1,7,16,0,32,0,0,7,16,0,25,0,44,17,0,23,16,0,6,21,0,1,0,8,16,0,8,0,42,17,17,0,6,21,0,2,0,8,0,42,17,17,25,21,0,1,0,28,0,50,7,16,21,1,11,0,42,17,21,1,14,0,44,17,0,23,0,33,0,43,0,40,3,2,8,0,35,0,60,8,16,25,21,0,1,0,12,16,0,61,0,28,21,1,5,7,0,28,0,63,0,34,0,16,8,7,9,0,16,9,0,23,0,33,0,40,8,0,35,0,62,8,9,3,2,0,37,0,8,0,7,0,42,19,8,16,0,26,0,16,7,0,53,17,0,17,16,25,21,0,1,0,28,0,12,7,16,22,0,3,11,14,21,0,3,0,28,0,23,7,0,42,17,0,15,0,26,0,42,7,0,1,0,9,19,0,39,0,31,0,4,7,8,3,2,0,37,0,9,0,7,0,43,19,8,16,22,0,4,11,14,21,0,3,0,28,0,23,7,16,0,9,0,7,0,43,19,0,39,0,42,0,38,0,31,0,4,7,8,8,16,22,0,5,11,14,21,0,1,0,28,0,18,7,0,42,0,18,21,0,4,0,8,16,0,2,21,0,2,17,0,1,16,17,0,5,21,0,4,17,0,2,21,0,2,17,0,29,0,16,7,21,0,5,17,17,0,9,0,1,0,44,19,0,4,0,43,19,0,39,0,17,8,16,0,44,0,38,0,16,8,16,25,21,0,1,21,1,16,0,42,17,25,21,0,1,0,28,21,1,18,7,16,21,1,16,21,0,2,17,21,1,12,0,44,17,21,1,14,21,0,1,0,9,16,17,25,0,41,0,10,21,0,1,17,22,0,3,11,14,21,0,1,0,9,16,22,0,4,11,14,21,0,1,15,15,15,16,15,17,3,3,0,37,21,0,3,0,15,16,0,30,0,0,7,0,10,0,0,0,7,0,33,0,43,8,19,0,8,19,16,8,16,25,21,0,2,0,0,0,42,17,0,21,16,22,0,3,11,14,0,50,0,15,21,0,1,0,12,16,0,23,0,40,17,17,0,16,21,0,1,17,0,22,21,0,3,0,21,0,33,21,0,3,0,25,16,0,5,16,8,0,35,0,28,0,40,7,8,16,17,25,21,0,1,0,12,16,0,19,0,40,17,22,0,3,11,0,8,16,0,1,16,0,9,0,33,0,43,8,0,39,0,41,8,16,22,0,4,11,14,0,65,22,0,5,11,14,21,0,1,0,21,0,33,0,14,0,9,21,0,5,19,0,0,0,42,19,8,21,2,9,3,2,0,37,0,9,0,8,0,42,19,8,16,22,0,1,12,14,21,0,5,0,18,21,0,3,17,0,15,0,35,0,20,8,16,21,0,4,0,38,0,16,8,21,0,1,17,21,0,4,0,38,0,16,8,21,0,5,0,18,21,0,3,17,17,0,17,16,21,1,4,0,8,0,42,17,0,39,21,2,10,21,2,11,0,42,19,21,2,14,21,1,4,19,8,16,25,21,0,1,21,2,17,21,2,15,3,2,0,37,0,12,0,9,0,43,19,0,30,0,6,7,9,8,16,25,21,0,1,21,2,17,0,40,17,25]) - ,[runtime[0],runtime[1],runtime[2],runtime[6],runtime[7],runtime[9],runtime[11],runtime[12],runtime[14],runtime[15],runtime[16],runtime[18],runtime[19],runtime[20],runtime[21],runtime[22],runtime[23],runtime[24],runtime[25],runtime[26],runtime[28],runtime[30],runtime[33],runtime[34],runtime[35],runtime[37],runtime[41],runtime[42],runtime[43],runtime[44],runtime[46],runtime[47],runtime[48],runtime[51],runtime[52],runtime[53],runtime[54],runtime[55],runtime[56],runtime[58],-1,Infinity,1,0,2,5,4,'\n',str("\t\n \r"),str("␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟␡"),str(" "),str("⟨"),str("⟩"),str("⟨⟩"),str("┌"),str("·─"),str("·╵╎┆┊"),str("┘"),str("┌┐"),str("└┘"),'┐',str(""),'⥊',str("‿"),str("\'"),'"'] + ,[runtime[0],runtime[1],runtime[2],runtime[6],runtime[7],runtime[9],runtime[11],runtime[12],runtime[14],runtime[15],runtime[16],runtime[18],runtime[19],runtime[20],runtime[21],runtime[22],runtime[23],runtime[24],runtime[25],runtime[26],runtime[28],runtime[30],runtime[33],runtime[34],runtime[35],runtime[37],runtime[42],runtime[43],runtime[44],runtime[45],runtime[47],runtime[48],runtime[49],runtime[52],runtime[53],runtime[54],runtime[55],runtime[56],runtime[57],runtime[59],-1,Infinity,1,0,2,5,4,'\n',str("\t\n \r"),str("␀␁␂␃␄␅␆␇␈␉␊␋␌␍␎␏␐␑␒␓␔␕␖␗␘␙␚␛␜␝␞␟␡"),str(" "),str("⟨"),str("⟩"),str("⟨⟩"),str("┌"),str("·─"),str("·╵╎┆┊"),str("┘"),str("┌┐"),str("└┘"),'┐',str(""),'⥊',str("‿"),str("\'"),'"'] ,[[0,1,0,0],[1,0,3,19],[0,0,259,4],[0,0,312,6],[0,0,478,3],[0,0,508,3],[0,0,538,4],[0,0,662,3],[0,0,722,3],[0,0,761,3],[0,0,827,6],[0,0,1002,3],[0,0,1012,3],[0,0,1046,5],[0,0,1113,4],[0,0,1181,6],[0,0,1348,3],[0,0,1377,3]] )(a=>str(fmt0(a))); let fmt = x => fmt1(x).map(c=>c===0?" ":c).join(""); diff --git a/docs/doc/primitive.html b/docs/doc/primitive.html index 9ea5651c..fd393bf0 100644 --- a/docs/doc/primitive.html +++ b/docs/doc/primitive.html @@ -232,6 +232,12 @@ +˙ +Constant +{𝕩𝕗} +Return a function that returns the operand + + ˜ Self/Swap {𝕩𝔽𝕨𝕩} diff --git a/docs/problems.html b/docs/problems.html index 2d9d1981..a1f5dcfb 100644 --- a/docs/problems.html +++ b/docs/problems.html @@ -32,7 +32,7 @@

Can't access array ordering directly

Only ⍋⍒ use array ordering rather than just array equality or numeric ordering. Getting at the actual ordering to just compare two arrays is more difficult than it should be (but not that difficult: < is TAO ).

Syntactic type erasure

-

A programmer can call a modifier on either a syntactic function or subject, but there's no way to know within the modifier which syntax that operand had. Maybe this is a better design, but it doesn't feel quite right that f˜ is f-Swap if f has a function value. The subject syntax suggests it should be Constant.

+

A programmer can call a modifier on either a syntactic function or subject, but there's no way to know within the modifier which syntax that operand had. Maybe this is a better design, but it doesn't feel quite right that f˜ is f-Swap if f has a function value. The subject syntax suggests it should be Constant. Instead the Constant modifier ˙ has been added partially to mitigate this.

Comparison tolerance

Kind of necessary for practical programming, but how should it be invoked or controlled? A system variable like CT? Per-primitive control? Both? Which primitives should use it?

@@ -71,8 +71,6 @@

If you have the normal mix of monads and dyads you'll need a lot of parentheses and might end up abusing . Largely solved with the "nothing" glyph ·, which acts like J's Cap ([:) in a train, but still a minor frustration.

Inverse is not fully specified

So it seems a bit strange to rely on it for core language features like /. On the other hand, this is a good fit for since we are taking an arbitrary branch of a complex function that has many of them. I'm pretty sure it's impossible to solve the issue as stated but it might be possible to move to less hazardous constructs. Structural Under is a start.

-

Converting a function expression to a subject is tricky

-

You can name it, you can write Expr, and if it doesn't use special names you can write {Expr}. All of these are at least a little awkward in reasonable cases. Should there be a dedicated syntax? Note that going the other way, from subject to function, isn't too bad: the modifier {𝔽} does it.

Prefixes/Suffixes add depth and Windows doesn't

It's an awkward inconsistency. Prefixes and Suffixes have to have a nested result, but Windows doesn't have to be flat; it's just that making it nested ignores the fact that it does have an array structure.

At which scope does a block function belong?

@@ -102,6 +100,8 @@

When taking Windows along more than one axis, acting on the resulting array requires the Rank modifier, duplicating either the right argument rank or (negated) left argument length. A nested Windows would only require Each.

Inputs to modifiers are called operands?

"Operand" is derived from "operator". "Modificand" would be better if it weren't both made up and hideous.

+

Converting a function expression to a subject is tricky

+

You can name it, you can write Expr or (Expr)˙0, and if it doesn't use special names you can write {Expr}. All of these are at least a little awkward in reasonable cases. Should there be a dedicated syntax? Note that going the other way, from subject to function, isn't too bad: the modifier {𝔽} does it.

Scan ordering is weird

Scan moves along the array so that it uses results as left arguments, which is opposite to the usual right-to-left order of evaluation. But I think this is still better than scanning the array in reverse. You can always use Swap on the operand, or recover the APL scan ordering by doing a Reduce-Each on Prefixes.

Only errors in functions can be caught

diff --git a/docs/repl.js b/docs/repl.js index f911c8d3..e3baa789 100644 --- a/docs/repl.js +++ b/docs/repl.js @@ -50,7 +50,7 @@ let typeChar = (t, c, ev) => { } let syncls={ v:"Value", f:"Function", m:"Modifier", d:"Modifier2", n:"Number", g:"Gets", p:"Paren", b:"Bracket", k:"Brace", l:"Ligature", n:"Nothing", s:"Separator", c:"Comment" }; -let keydesc='f+Conjugate;Add_f-Negate;Subtract_f×Sign;Multiply_f÷Reciprocal;Divide_f⋆Exponential;Power_f√Square Root;Root_f⌊Floor;Minimum_f⌈Ceiling;Maximum_f∧Sort Up;And_f∨Sort Down;Or_f¬Not;Span_f|Absolute Value;Modulus_f≤Less Than or Equal to_fMerge;Greater Than_f≥Greater Than or Equal to_f=Rank;Equals_f≠Length;Not Equals_f≡Depth;Match_f≢Shape;Not Match_f⊣Identity;Left_f⊢Identity;Right_f⥊Deshape;Reshape_f∾Join;Join to_f≍Solo;Couple_f↑Prefixes;Take_f↓Suffixes;Drop_f↕Range;Windows_f⌽Reverse;Rotate_f⍉Transpose;Reorder axes_f/Indices;Replicate_f⍋Grade Up;Bins Up_f⍒Grade Down;Bins Down_f⊏First Cell;Select_f⊑First;Pick_f⊐Index of_f⊒Occurrence Count;Progressive Index of_f∊Unique Mask;Member of_f⍷Deduplicate;Find_f⊔Group Indices;Group_f!Assert;Assert with message_m˜Self/Swap_d∘Atop_d○Over_d⊸Before/Bind_d⟜After/Bind_d⌾Under_d⊘Valences_d◶Choose_d⎉Rank_m˘Cells_d⚇Depth_m¨Each_m⌜Table_d⍟Repeat_m⁼Undo_m´Fold_m˝Insert_m`Scan_b←Define_b↩Change_b→Return_s⋄Separator_s,Separator_p(Begin expression_p)End expression_k{Begin block_k}End block_b⟨Begin list_b⟩End list_l‿Strand_n·Nothing_v•System_v𝕨Left argument_f𝕎Left argument (as function)_v𝕩Right argument_f𝕏Right argument (as function)_v𝕗Modifier left operand (as subject)_f𝔽Modifier left operand_v𝕘2-modifier right operand (as subject)_f𝔾2-modifier right operand_v𝕤Current function (as subject)_f𝕊Current function_m𝕣Current modifier_n¯Minus_nπPi_n∞Infinity_c#Comment'.split(/[\n_]/); +let keydesc='f+Conjugate;Add_f-Negate;Subtract_f×Sign;Multiply_f÷Reciprocal;Divide_f⋆Exponential;Power_f√Square Root;Root_f⌊Floor;Minimum_f⌈Ceiling;Maximum_f∧Sort Up;And_f∨Sort Down;Or_f¬Not;Span_f|Absolute Value;Modulus_f≤Less Than or Equal to_fMerge;Greater Than_f≥Greater Than or Equal to_f=Rank;Equals_f≠Length;Not Equals_f≡Depth;Match_f≢Shape;Not Match_f⊣Identity;Left_f⊢Identity;Right_f⥊Deshape;Reshape_f∾Join;Join to_f≍Solo;Couple_f↑Prefixes;Take_f↓Suffixes;Drop_f↕Range;Windows_f⌽Reverse;Rotate_f⍉Transpose;Reorder axes_f/Indices;Replicate_f⍋Grade Up;Bins Up_f⍒Grade Down;Bins Down_f⊏First Cell;Select_f⊑First;Pick_f⊐Index of_f⊒Occurrence Count;Progressive Index of_f∊Unique Mask;Member of_f⍷Deduplicate;Find_f⊔Group Indices;Group_f!Assert;Assert with message_m˙Constant_m˜Self/Swap_d∘Atop_d○Over_d⊸Before/Bind_d⟜After/Bind_d⌾Under_d⊘Valences_d◶Choose_d⎉Rank_m˘Cells_d⚇Depth_m¨Each_m⌜Table_d⍟Repeat_m⁼Undo_m´Fold_m˝Insert_m`Scan_b←Define_b↩Change_b→Return_s⋄Separator_s,Separator_p(Begin expression_p)End expression_k{Begin block_k}End block_b⟨Begin list_b⟩End list_l‿Strand_n·Nothing_v•System_v𝕨Left argument_f𝕎Left argument (as function)_v𝕩Right argument_f𝕏Right argument (as function)_v𝕗Modifier left operand (as subject)_f𝔽Modifier left operand_v𝕘2-modifier right operand (as subject)_f𝔾2-modifier right operand_v𝕤Current function (as subject)_f𝕊Current function_m𝕣Current modifier_n¯Minus_nπPi_n∞Infinity_c#Comment'.split(/[\n_]/); let kk=Array.from('`123456890-=~!@#$%^&*()_+qwertuiop[]QWERTIOP{}asdfghjkl;ASFGK:"zxcvbm,./XVBM<> \''); let kv=Array.from('˜˘¨⁼⌜´˝∞¯•÷׬⎉⚇⍟◶⊘⎊⍎⍕⟨⟩√⋆⌽𝕨∊↑∧⊔⊏⊐π←→↙𝕎⍷𝕣⍋⊑⊒⍳⊣⊢⍉𝕤↕𝕗𝕘⊸∘○⟜⋄↖𝕊𝔽𝔾⌾·˙⥊𝕩↓∨⌊≡∾≍≠𝕏⍒⌈≢≤≥‿↩'); let keys={}, revkeys={}; @@ -59,7 +59,7 @@ doc.kb.innerHTML = keydesc.map(d=>{ let s = syncls[d[0]]; let c = Array.from(d)[1]; let t = d.slice(1+c.length).replace(';','\n'); - let k = revkeys[c]; if (k) t += '\n\\ '+k; + let k = revkeys[c]; if (k) t += '\n\\ '+(k==='"'?'"':k); return ''+c+'' }).join("​"); // zero-width space doc.kb.onmousedown = ev => { diff --git a/docs/spec/token.html b/docs/spec/token.html index 3d04a407..87ae06ab 100644 --- a/docs/spec/token.html +++ b/docs/spec/token.html @@ -26,7 +26,7 @@ - + diff --git a/dzref b/dzref index f117ddd4..9194afa9 100755 --- a/dzref +++ b/dzref @@ -1,6 +1,7 @@ #!/usr/bin/env dbqn impl ← " +˙ ← {𝕩⋄𝕗} #⌜ # LAYER 4: Operators @@ -100,7 +101,7 @@ X←Raw←{F:≤4} {v: chrs←⟨ "!∾↕⌽⊐⊒∊⍷" - "" + "˙" "⚇" ⟩ nc ← ≠¨chrs diff --git a/dzref_full b/dzref_full index 995a5851..8fa5d57c 100755 --- a/dzref_full +++ b/dzref_full @@ -11,7 +11,7 @@ X←Raw←{F:≤4} {v: chrs←⟨ "!+-×÷⋆√⌊⌈∧∨¬|=≠≤<>≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔" - "˜˘¨⌜⁼´˝`" + "˙˜˘¨⌜⁼´˝`" "∘⊸⟜○⌾⎉⚇⍟◶⊘" ⟩ nc ← ≠¨chrs diff --git a/editors/kak/autoload/filetype/bqn.kak b/editors/kak/autoload/filetype/bqn.kak index 6882a34f..ea53c812 100644 --- a/editors/kak/autoload/filetype/bqn.kak +++ b/editors/kak/autoload/filetype/bqn.kak @@ -70,7 +70,7 @@ add-highlighter shared/bqn/code/ regex "[𝕗𝕘𝕨𝕩𝕤]" 0:normal add-highlighter shared/bqn/code/ regex "•|•?\b[a-z][A-Z_a-z0-9π∞¯]*|𝕣" 0:normal add-highlighter shared/bqn/code/ regex "[𝔽𝔾𝕎𝕏𝕊+\-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!⍕⍎]" 0:green add-highlighter shared/bqn/code/ regex "•?\b[A-Z][A-Z_a-z0-9π∞¯]*" 0:green -add-highlighter shared/bqn/code/ regex "[˜˘¨⌜⁼´˝`]" 0:magenta +add-highlighter shared/bqn/code/ regex "[˙˜˘¨⌜⁼´˝`]" 0:magenta add-highlighter shared/bqn/code/ regex "•?\b_[A-Za-z][A-Z_a-z0-9π∞¯]*|_𝕣" 0:magenta add-highlighter shared/bqn/code/ regex "[∘○⊸⟜⌾⊘◶⎉⚇⍟⎊]" 0:yellow add-highlighter shared/bqn/code/ regex "•?\b_[A-Za-z][A-Z_a-z0-9π∞¯]*_|_𝕣_" 0:yellow diff --git a/editors/vim/autoload/bqn.txt b/editors/vim/autoload/bqn.txt index ee70b684..27fb10bf 100644 --- a/editors/vim/autoload/bqn.txt +++ b/editors/vim/autoload/bqn.txt @@ -69,6 +69,7 @@ ⍷ Deduplicate ; Find ⊔ Group Indices ; Group ! Assert ; Assert with message +˙ Constant | {𝕩⋄𝕗} | Return a function that returns the operand ˜ Self/Swap | {𝕩𝔽𝕨⊣𝕩} | Duplicate one argument or exchange two ∘ Atop | {𝔽𝕨𝔾𝕩} | Apply 𝔾 to both arguments and 𝔽 to the result ○ Over | {(𝔾𝕨)𝔽𝔾𝕩} | Apply 𝔾 to each argument and 𝔽 to the results diff --git a/editors/vim/syntax/bqn.vim b/editors/vim/syntax/bqn.vim index 63755a3f..b1255028 100644 --- a/editors/vim/syntax/bqn.vim +++ b/editors/vim/syntax/bqn.vim @@ -10,7 +10,7 @@ syn match bqnhed "[:;]" syn match bqnsep "[⋄,]" syn match bqnarw "[←↩→]" syn match bqnchr "'.'" -syn match bqn1md "[˜˘¨⌜⁼´˝`]" +syn match bqn1md "[˙˜˘¨⌜⁼´˝`]" syn match bqn2md "[∘○⊸⟜⌾⊘◶⎉⚇⍟⎊]" syn match bqnfun "[𝔽𝔾𝕎𝕏𝕊+\-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!⍕⍎]" syn match bqnsub "[𝕗𝕘𝕨𝕩𝕤]" diff --git a/md.bqn b/md.bqn index ef85f253..ecb1545a 100644 --- a/md.bqn +++ b/md.bqn @@ -472,7 +472,7 @@ GetHighlights ← { 0 , " "∾•UCS 9‿10 # Should never be highlighted "Value" , ¯1⊏˘5‿2⥊"𝕨𝕩𝕗𝕘𝕤"# Hack around UTF-16 "Function" , "+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!"∾¯1⊏˘5‿2⥊"𝕎𝕏𝔽𝔾𝕊" - "Modifier" , "˜˘¨⌜⁼´˝`" + "Modifier" , "˙˜˘¨⌜⁼´˝`" "Modifier2" , "∘○⊸⟜⌾⊘◶⎉⚇⍟⎊" "Number" , ∾idChars # Will be classified among ↑↑ later "Gets" , "←↩→" diff --git a/problems.md b/problems.md index 6abe62ee..ebae4160 100644 --- a/problems.md +++ b/problems.md @@ -43,7 +43,7 @@ Since `𝕨F⊸G𝕩` is `(F𝕨)G𝕩` and `𝕨F⟜G𝕩` is `𝕨F G𝕩` in Only `⍋⍒` use array ordering rather than just array equality or numeric ordering. Getting at the actual ordering to just compare two arrays is more difficult than it should be (but not *that* difficult: `⥊⊸⍋⌾<` is TAO `≤`). ### Syntactic type erasure -A programmer can call a modifier on either a syntactic function or subject, but there's no way to know within the modifier which syntax that operand had. Maybe this is a better design, but it doesn't feel quite right that `f˜` is `f`-Swap if `f` has a function value. The subject syntax suggests it should be Constant. +A programmer can call a modifier on either a syntactic function or subject, but there's no way to know within the modifier which syntax that operand had. Maybe this is a better design, but it doesn't feel quite right that `f˜` is `f`-Swap if `f` has a function value. The subject syntax suggests it should be Constant. Instead the Constant modifier `˙` has been added partially to mitigate this. ### Comparison tolerance Kind of necessary for practical programming, but how should it be invoked or controlled? A system variable like `⎕CT`? Per-primitive control? Both? Which primitives should use it? @@ -82,9 +82,6 @@ If you have the normal mix of monads and dyads you'll need a lot of parentheses ### Inverse is not fully specified So it seems a bit strange to rely on it for core language features like `/⁼`. On the other hand, this is a good fit for `⋆⁼` since we are taking an arbitrary branch of a complex function that has many of them. I'm pretty sure it's impossible to solve the issue as stated but it might be possible to move to less hazardous constructs. Structural Under is a start. -### Converting a function expression to a subject is tricky -You can name it, you can write `⊑⟨Expr⟩`, and if it doesn't use special names you can write `{Expr}`. All of these are at least a little awkward in reasonable cases. Should there be a dedicated syntax? Note that going the other way, from subject to function, isn't too bad: the modifier `{𝔽}` does it. - ### Prefixes/Suffixes add depth and Windows doesn't It's an awkward inconsistency. Prefixes and Suffixes have to have a nested result, but Windows doesn't have to be flat; it's just that making it nested ignores the fact that it does have an array structure. @@ -130,6 +127,9 @@ When taking Windows along more than one axis, acting on the resulting array requ ### Inputs to modifiers are called operands? "Operand" is derived from "operator". "Modificand" would be better if it weren't both made up and hideous. +### Converting a function expression to a subject is tricky +You can name it, you can write `⊑⟨Expr⟩` or `(Expr)˙0`, and if it doesn't use special names you can write `{Expr}`. All of these are at least a little awkward in reasonable cases. Should there be a dedicated syntax? Note that going the other way, from subject to function, isn't too bad: the modifier `{𝔽}` does it. + ### Scan ordering is weird Scan moves along the array so that it uses results as left arguments, which is opposite to the usual right-to-left order of evaluation. But I think this is still better than scanning the array in reverse. You can always use Swap on the operand, or recover the APL scan ordering by doing a Reduce-Each on Prefixes. diff --git a/spec/reference.bqn b/spec/reference.bqn index 08ead65a..e0f0bc48 100644 --- a/spec/reference.bqn +++ b/spec/reference.bqn @@ -44,7 +44,8 @@ Type # Scalar (enclosed) prototype of 𝕩 # Combinators ◶ ← {𝕨((𝕨𝔽𝕩)⊑𝕘){𝔽}𝕩} # LIMITED to number left operand result -⊘ ← {𝕨((1{𝔽}𝕨)-0)◶𝔽‿𝔾 𝕩} +˙ ← {𝕩⋄𝕗} +⊘ ← {𝕨((1˙𝕨)-0)◶𝔽‿𝔾 𝕩} ⊢ ← {𝕩} ⊣ ← {𝕩}⊘{𝕨} ˜ ← {𝕩𝔽𝕨⊣𝕩} diff --git a/spec/token.md b/spec/token.md index 603abfa7..173756f4 100644 --- a/spec/token.md +++ b/spec/token.md @@ -19,7 +19,7 @@ Otherwise, a single character forms a token. Only the specified set of character | Class | Characters |-----------------------|------------ | Primitive Function | `+-×÷⋆√⌊⌈\|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔` -| Primitive 1-Modifier | `` ˜˘¨⌜⁼´˝` `` +| Primitive 1-Modifier | `` ˙˜˘¨⌜⁼´˝` `` | Primitive 1-Modifier | `∘○⊸⟜⌾⊘◶⎉⚇⍟` | Special name | `𝕨𝕩𝕗𝕘𝕤𝕎𝕏𝔽𝔾𝕊` | Punctuation | `←↩→(){}⟨⟩‿⋄,` and newline diff --git a/src/c.bqn b/src/c.bqn index 3d85f8e8..1951fd54 100644 --- a/src/c.bqn +++ b/src/c.bqn @@ -7,7 +7,7 @@ alph ← "ABCDEFGHIJKLMNOPQRSTUVWXYZ" alow ← "abcdefghijklmnopqrstuvwxyz" charSet←∾charGroups←⟨ chF←"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" # Function - "˜˘¨⌜⁼´˝`" # Modifier + "˙˜˘¨⌜⁼´˝`" # Modifier "∘○⊸⟜⌾⊘◶⎉⚇⍟" # Composition nl∾"⋄," # Separator "←↩→" # Gets diff --git a/src/cjs.bqn b/src/cjs.bqn index b92c3c78..aa69f4b0 100755 --- a/src/cjs.bqn +++ b/src/cjs.bqn @@ -1,7 +1,7 @@ #! /usr/bin/env dbqn compile ← ⟨•path∾"../c.bqn"⋄"DGenFn"⟩ •EX •path∾"../dzref" -Comp ← ((<"runtime["∾⍕∾"]"˜)¨↕59)⊸Compile +Comp ← ((<"runtime["∾⍕∾"]"˜)¨↕60)⊸Compile FP ← ∞⊸=◶⟨⍕,"Infinity"⟩ Esc ← (⟨"\t","\n","\r","\'"⟩∾<∘⥊)⊑˜("'"∾˜•UCS 9‿10‿13)⊑∘⊐⊢ Str ← "str("""∾(∾Esc¨)∾""")"˜ diff --git a/src/pr.bqn b/src/pr.bqn index 4c789a3c..4373b4c3 100755 --- a/src/pr.bqn +++ b/src/pr.bqn @@ -6,7 +6,7 @@ impl ← •LNS •path∾"r.bqn" chrs←⟨ "+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!" - "˜˘¨⌜⁼´˝`" + "˙˜˘¨⌜⁼´˝`" "∘○⊸⟜⌾⊘◶⎉⚇⍟" ⟩ nc ← ≠¨chrs diff --git a/src/r.bqn b/src/r.bqn index b80bfad2..dbd7c6e6 100644 --- a/src/r.bqn +++ b/src/r.bqn @@ -4,6 +4,7 @@ ◶ ← {𝕨((𝕨𝔽𝕩)⊑𝕘){𝔽}𝕩} # LIMITED to number left operand result ⊢ ← {𝕩} ⊣ ← {𝕩}⊘{𝕨} +˙ ← {𝕩⋄𝕗} ˜ ← {𝕩𝔽𝕨⊣𝕩} ∘ ← {𝔽𝕨𝔾𝕩} ○ ← {(𝔾𝕨)𝔽𝔾𝕩} diff --git a/test/cmpref.bqn b/test/cmpref.bqn index a494f55a..afe5f959 100755 --- a/test/cmpref.bqn +++ b/test/cmpref.bqn @@ -8,7 +8,7 @@ drun ← ((<•path∾"../c.bqn")∾<"DRun") •EX •path∾"../dzref" chrs←⟨ "!+-×÷⋆√⌊⌈∧∨¬|=≠≤<>≥≡≢⊣⊢⥊∾≍↑↓↕⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔" - "˜˘¨⌜⁼´˝`" + "˙˜˘¨⌜⁼´˝`" "∘⊸⟜○⌾⎉⚇⍟◶⊘" ⟩ nc ← ≠¨chrs -- cgit v1.2.3
Primitive 1-Modifier˜˘¨⌜⁼´˝`˙˜˘¨⌜⁼´˝`
Primitive 1-Modifier