From fd171227715d90e78f0a27d58aa8913ec8e07566 Mon Sep 17 00:00:00 2001 From: Rafael Vuijk Date: Tue, 29 Sep 2026 10:47:09 +0000 Subject: [PATCH] A quantifier after a connective takes the rest of the line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit P implies forall x in S : Q, and the same after and, &, or, xor and ->, parses as P implies (forall x in S : Q): the quantifier's body runs to the end of the line, as it does at the start of one and as not forall x in S : P already did. It was a parse error, and the brackets were needed; Sullivan and Mackey's §5.5.3 Try 3 reads as they write it. Part of the end-of-line parsing v3 has for every line (#1019), brought forward for the binders. Part of #1409. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura --- BREAKING-CHANGES.md | 12 + Sources/AngouriMath/Core/Antlr/AngouriMath.g | 22 +- .../AngouriMath/Core/Antlr/AngouriMath.interp | 2 +- .../Core/Antlr/AngouriMathParser.cs | 1871 +++++++++-------- Sources/AngouriMath/Docs/Usage/Syntax.md | 6 +- .../Tests/UnitTests/Core/QuantifierTest.cs | 22 + 6 files changed, 1037 insertions(+), 898 deletions(-) diff --git a/BREAKING-CHANGES.md b/BREAKING-CHANGES.md index 2d8c7ac2b..6de7e2673 100644 --- a/BREAKING-CHANGES.md +++ b/BREAKING-CHANGES.md @@ -613,6 +613,18 @@ now, which is the one silent change: a variable spelled `forall` or `exists` no | `forall + 1` | `forall + 1`, a variable named `forall` | `UnhandledParseException` | | `exists(x)` | `exists * x` | `UnhandledParseException` | +### A quantifier after a connective takes the rest of the line + +`P implies forall x in S : Q`, and the same after `and`, `&`, `or`, `xor` and `->`, parses as +`P implies (forall x in S : Q)`: the quantifier's body runs to the end of the line, as it does at +the start of one, and as `not forall x in S : P` already did. It was a parse error, and the brackets +were needed, so Sullivan and Mackey's §5.5.3 Try 3 now reads as they write it +([#1409](https://github.com/asc-community/AngouriMath/issues/1409)). + +| Input | Was (2.5.0) | Now | +|---|---|---| +| `"forall n in ZZ : n >= 2 implies exists a in ZZ* : exists b in ZZ* : n = 2 a + 3 b".ToEntity().Simplify()` | `UnhandledParseException` (a parse error on master too) | `True` | + ### A floor or a ceiling is read with what the quantifiers establish Under a quantifier, the floor and the ceiling of an expression in the bound name are rewritten diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.g b/Sources/AngouriMath/Core/Antlr/AngouriMath.g index 7842b0091..c4c743900 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMath.g +++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.g @@ -242,27 +242,35 @@ negate_expression returns[Entity value] | op = comparison_expression { $value = $op.value; } ; +/* A quantifier may follow a connective, and its body runs to the end of the line there as it + does at the start: `n >= 2 implies exists a in ZZ* : n = 2 a + 1` quantifies `n = 2 a + 1`, + as Sullivan and Mackey write it. Being last, it ends the chain it closes. + https://github.com/asc-community/AngouriMath/issues/1409 */ and_expression returns[Entity value] : m1 = negate_expression { $value = $m1.value; } ('and' m2 = negate_expression { $value = $value & $m2.value; } | - '&' m2 = negate_expression { $value = $value & $m2.value; } + '&' m2 = negate_expression { $value = $value & $m2.value; } | + ('and' | '&') q = quantified_expression { $value = $value & $q.value; } )* ; xor_expression returns[Entity value] : m1 = and_expression { $value = $m1.value; } - ('xor' m2 = and_expression { $value = $value ^ $m2.value; })* + ('xor' m2 = and_expression { $value = $value ^ $m2.value; } | + 'xor' q = quantified_expression { $value = $value ^ $q.value; })* ; or_expression returns[Entity value] : m1 = xor_expression { $value = $m1.value; } - ( 'or' m2 = xor_expression { $value = $value | $m2.value; })* + ( 'or' m2 = xor_expression { $value = $value | $m2.value; } | + 'or' q = quantified_expression { $value = $value | $q.value; })* ; implies_expression returns[Entity value] : m1 = or_expression { $value = $m1.value; } ('implies' m2 = or_expression { $value = $value.Implies($m2.value); } | - '->' m2 = or_expression { $value = $value.Implies($m2.value); })* + '->' m2 = or_expression { $value = $value.Implies($m2.value); } | + ('implies' | '->') q = quantified_expression { $value = $value.Implies($q.value); })* ; /* @@ -332,9 +340,9 @@ expression returns[Entity value] /* A quantified statement: `forall x in S : P`, `exists x in S : P`, `exists! x in S : P`, and `∀`, `∃`, `∃!` for the same three. The body runs to the end of the line, as a lambda's - does, so `forall x in S : P and Q` quantifies `P and Q`, and a quantifier under a - connective is bracketed -- except under `not`, which reads `not forall x in S : P` as the - negation of the whole statement, as it is written. Several names share a set -- + does, so `forall x in S : P and Q` quantifies `P and Q`; after a connective it runs to the + end of the line too, so `P implies forall x in S : Q` is `P implies (forall x in S : Q)`, and + `not forall x in S : P` is the negation of the whole statement, as it is written. Several names share a set -- `forall x, y in S : P` -- and several sets are listed in order -- `forall x in S, y in T : P` -- either way nesting from the left, and a name without a set is an error rather than a quantification over everything, since a statement is quantified over something. diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMath.interp b/Sources/AngouriMath/Core/Antlr/AngouriMath.interp index f40dffad3..e721e835b 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMath.interp +++ b/Sources/AngouriMath/Core/Antlr/AngouriMath.interp @@ -416,4 +416,4 @@ statement atn: -[4, 1, 191, 1125, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 60, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 66, 8, 1, 11, 1, 12, 1, 67, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 74, 8, 1, 11, 1, 12, 1, 75, 3, 1, 78, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 85, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 95, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 105, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 110, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 120, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 130, 8, 4, 10, 4, 12, 4, 133, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 145, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 151, 8, 5, 10, 5, 12, 5, 154, 9, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 168, 8, 6, 10, 6, 12, 6, 171, 9, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 191, 8, 7, 10, 7, 12, 7, 194, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 226, 8, 8, 10, 8, 12, 8, 229, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 247, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 252, 8, 9, 10, 9, 12, 9, 255, 9, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 263, 8, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 282, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 294, 8, 11, 10, 11, 12, 11, 297, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 305, 8, 12, 10, 12, 12, 12, 308, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 316, 8, 13, 10, 13, 12, 13, 319, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 331, 8, 14, 10, 14, 12, 14, 334, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 342, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 350, 8, 16, 1, 16, 1, 16, 1, 16, 3, 16, 355, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 369, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 377, 8, 19, 10, 19, 12, 19, 380, 9, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 390, 8, 20, 10, 20, 12, 20, 393, 9, 20, 3, 20, 395, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 402, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 410, 8, 21, 5, 21, 412, 8, 21, 10, 21, 12, 21, 415, 9, 21, 3, 21, 417, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 1119, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 0, 0, 26, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 0, 4, 1, 0, 6, 7, 1, 0, 42, 43, 1, 0, 44, 45, 1, 0, 46, 47, 1297, 0, 59, 1, 0, 0, 0, 2, 77, 1, 0, 0, 0, 4, 79, 1, 0, 0, 0, 6, 109, 1, 0, 0, 0, 8, 111, 1, 0, 0, 0, 10, 136, 1, 0, 0, 0, 12, 157, 1, 0, 0, 0, 14, 172, 1, 0, 0, 0, 16, 195, 1, 0, 0, 0, 18, 230, 1, 0, 0, 0, 20, 281, 1, 0, 0, 0, 22, 283, 1, 0, 0, 0, 24, 298, 1, 0, 0, 0, 26, 309, 1, 0, 0, 0, 28, 320, 1, 0, 0, 0, 30, 335, 1, 0, 0, 0, 32, 354, 1, 0, 0, 0, 34, 356, 1, 0, 0, 0, 36, 368, 1, 0, 0, 0, 38, 370, 1, 0, 0, 0, 40, 394, 1, 0, 0, 0, 42, 416, 1, 0, 0, 0, 44, 418, 1, 0, 0, 0, 46, 424, 1, 0, 0, 0, 48, 1118, 1, 0, 0, 0, 50, 1120, 1, 0, 0, 0, 52, 53, 3, 48, 24, 0, 53, 54, 5, 1, 0, 0, 54, 55, 6, 0, -1, 0, 55, 60, 1, 0, 0, 0, 56, 57, 3, 48, 24, 0, 57, 58, 6, 0, -1, 0, 58, 60, 1, 0, 0, 0, 59, 52, 1, 0, 0, 0, 59, 56, 1, 0, 0, 0, 60, 1, 1, 0, 0, 0, 61, 62, 5, 2, 0, 0, 62, 63, 3, 0, 0, 0, 63, 64, 6, 1, -1, 0, 64, 66, 1, 0, 0, 0, 65, 61, 1, 0, 0, 0, 66, 67, 1, 0, 0, 0, 67, 65, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 78, 1, 0, 0, 0, 69, 70, 5, 2, 0, 0, 70, 71, 3, 6, 3, 0, 71, 72, 6, 1, -1, 0, 72, 74, 1, 0, 0, 0, 73, 69, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 78, 1, 0, 0, 0, 77, 65, 1, 0, 0, 0, 77, 73, 1, 0, 0, 0, 78, 3, 1, 0, 0, 0, 79, 80, 3, 0, 0, 0, 80, 84, 6, 2, -1, 0, 81, 82, 3, 2, 1, 0, 82, 83, 6, 2, -1, 0, 83, 85, 1, 0, 0, 0, 84, 81, 1, 0, 0, 0, 84, 85, 1, 0, 0, 0, 85, 5, 1, 0, 0, 0, 86, 87, 5, 3, 0, 0, 87, 88, 3, 4, 2, 0, 88, 89, 6, 3, -1, 0, 89, 95, 1, 0, 0, 0, 90, 91, 5, 4, 0, 0, 91, 92, 3, 4, 2, 0, 92, 93, 6, 3, -1, 0, 93, 95, 1, 0, 0, 0, 94, 86, 1, 0, 0, 0, 94, 90, 1, 0, 0, 0, 95, 110, 1, 0, 0, 0, 96, 97, 5, 3, 0, 0, 97, 98, 3, 6, 3, 0, 98, 99, 6, 3, -1, 0, 99, 105, 1, 0, 0, 0, 100, 101, 5, 4, 0, 0, 101, 102, 3, 6, 3, 0, 102, 103, 6, 3, -1, 0, 103, 105, 1, 0, 0, 0, 104, 96, 1, 0, 0, 0, 104, 100, 1, 0, 0, 0, 105, 110, 1, 0, 0, 0, 106, 107, 3, 4, 2, 0, 107, 108, 6, 3, -1, 0, 108, 110, 1, 0, 0, 0, 109, 94, 1, 0, 0, 0, 109, 104, 1, 0, 0, 0, 109, 106, 1, 0, 0, 0, 110, 7, 1, 0, 0, 0, 111, 112, 3, 6, 3, 0, 112, 131, 6, 4, -1, 0, 113, 119, 5, 5, 0, 0, 114, 115, 7, 0, 0, 0, 115, 120, 6, 4, -1, 0, 116, 117, 3, 6, 3, 0, 117, 118, 6, 4, -1, 0, 118, 120, 1, 0, 0, 0, 119, 114, 1, 0, 0, 0, 119, 116, 1, 0, 0, 0, 120, 130, 1, 0, 0, 0, 121, 122, 5, 8, 0, 0, 122, 123, 3, 6, 3, 0, 123, 124, 6, 4, -1, 0, 124, 130, 1, 0, 0, 0, 125, 126, 5, 9, 0, 0, 126, 127, 3, 6, 3, 0, 127, 128, 6, 4, -1, 0, 128, 130, 1, 0, 0, 0, 129, 113, 1, 0, 0, 0, 129, 121, 1, 0, 0, 0, 129, 125, 1, 0, 0, 0, 130, 133, 1, 0, 0, 0, 131, 129, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 134, 1, 0, 0, 0, 133, 131, 1, 0, 0, 0, 134, 135, 6, 4, -1, 0, 135, 9, 1, 0, 0, 0, 136, 137, 3, 8, 4, 0, 137, 152, 6, 5, -1, 0, 138, 144, 5, 4, 0, 0, 139, 140, 7, 0, 0, 0, 140, 145, 6, 5, -1, 0, 141, 142, 3, 8, 4, 0, 142, 143, 6, 5, -1, 0, 143, 145, 1, 0, 0, 0, 144, 139, 1, 0, 0, 0, 144, 141, 1, 0, 0, 0, 145, 151, 1, 0, 0, 0, 146, 147, 5, 3, 0, 0, 147, 148, 3, 8, 4, 0, 148, 149, 6, 5, -1, 0, 149, 151, 1, 0, 0, 0, 150, 138, 1, 0, 0, 0, 150, 146, 1, 0, 0, 0, 151, 154, 1, 0, 0, 0, 152, 150, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 152, 1, 0, 0, 0, 155, 156, 6, 5, -1, 0, 156, 11, 1, 0, 0, 0, 157, 158, 3, 10, 5, 0, 158, 169, 6, 6, -1, 0, 159, 160, 5, 10, 0, 0, 160, 161, 3, 10, 5, 0, 161, 162, 6, 6, -1, 0, 162, 168, 1, 0, 0, 0, 163, 164, 5, 11, 0, 0, 164, 165, 3, 10, 5, 0, 165, 166, 6, 6, -1, 0, 166, 168, 1, 0, 0, 0, 167, 159, 1, 0, 0, 0, 167, 163, 1, 0, 0, 0, 168, 171, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 13, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 172, 173, 3, 12, 6, 0, 173, 192, 6, 7, -1, 0, 174, 175, 5, 12, 0, 0, 175, 176, 3, 12, 6, 0, 176, 177, 6, 7, -1, 0, 177, 191, 1, 0, 0, 0, 178, 179, 5, 13, 0, 0, 179, 180, 3, 12, 6, 0, 180, 181, 6, 7, -1, 0, 181, 191, 1, 0, 0, 0, 182, 183, 5, 14, 0, 0, 183, 184, 3, 12, 6, 0, 184, 185, 6, 7, -1, 0, 185, 191, 1, 0, 0, 0, 186, 187, 5, 15, 0, 0, 187, 188, 3, 12, 6, 0, 188, 189, 6, 7, -1, 0, 189, 191, 1, 0, 0, 0, 190, 174, 1, 0, 0, 0, 190, 178, 1, 0, 0, 0, 190, 182, 1, 0, 0, 0, 190, 186, 1, 0, 0, 0, 191, 194, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 15, 1, 0, 0, 0, 194, 192, 1, 0, 0, 0, 195, 196, 3, 14, 7, 0, 196, 227, 6, 8, -1, 0, 197, 198, 5, 16, 0, 0, 198, 199, 3, 14, 7, 0, 199, 200, 6, 8, -1, 0, 200, 226, 1, 0, 0, 0, 201, 202, 5, 17, 0, 0, 202, 203, 3, 14, 7, 0, 203, 204, 6, 8, -1, 0, 204, 226, 1, 0, 0, 0, 205, 206, 5, 18, 0, 0, 206, 207, 3, 14, 7, 0, 207, 208, 6, 8, -1, 0, 208, 226, 1, 0, 0, 0, 209, 210, 5, 19, 0, 0, 210, 211, 3, 14, 7, 0, 211, 212, 6, 8, -1, 0, 212, 226, 1, 0, 0, 0, 213, 214, 5, 20, 0, 0, 214, 215, 3, 14, 7, 0, 215, 216, 6, 8, -1, 0, 216, 226, 1, 0, 0, 0, 217, 218, 5, 21, 0, 0, 218, 219, 3, 14, 7, 0, 219, 220, 6, 8, -1, 0, 220, 226, 1, 0, 0, 0, 221, 222, 5, 22, 0, 0, 222, 223, 3, 14, 7, 0, 223, 224, 6, 8, -1, 0, 224, 226, 1, 0, 0, 0, 225, 197, 1, 0, 0, 0, 225, 201, 1, 0, 0, 0, 225, 205, 1, 0, 0, 0, 225, 209, 1, 0, 0, 0, 225, 213, 1, 0, 0, 0, 225, 217, 1, 0, 0, 0, 225, 221, 1, 0, 0, 0, 226, 229, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 17, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 230, 231, 3, 16, 8, 0, 231, 253, 6, 9, -1, 0, 232, 233, 5, 23, 0, 0, 233, 247, 6, 9, -1, 0, 234, 235, 5, 24, 0, 0, 235, 247, 6, 9, -1, 0, 236, 237, 5, 25, 0, 0, 237, 247, 6, 9, -1, 0, 238, 239, 5, 26, 0, 0, 239, 247, 6, 9, -1, 0, 240, 241, 5, 27, 0, 0, 241, 247, 6, 9, -1, 0, 242, 243, 5, 28, 0, 0, 243, 247, 6, 9, -1, 0, 244, 245, 5, 29, 0, 0, 245, 247, 6, 9, -1, 0, 246, 232, 1, 0, 0, 0, 246, 234, 1, 0, 0, 0, 246, 236, 1, 0, 0, 0, 246, 238, 1, 0, 0, 0, 246, 240, 1, 0, 0, 0, 246, 242, 1, 0, 0, 0, 246, 244, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 249, 3, 16, 8, 0, 249, 250, 6, 9, -1, 0, 250, 252, 1, 0, 0, 0, 251, 246, 1, 0, 0, 0, 252, 255, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 262, 1, 0, 0, 0, 255, 253, 1, 0, 0, 0, 256, 257, 5, 30, 0, 0, 257, 258, 5, 9, 0, 0, 258, 259, 3, 16, 8, 0, 259, 260, 5, 31, 0, 0, 260, 261, 6, 9, -1, 0, 261, 263, 1, 0, 0, 0, 262, 256, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 265, 6, 9, -1, 0, 265, 19, 1, 0, 0, 0, 266, 267, 5, 32, 0, 0, 267, 268, 3, 18, 9, 0, 268, 269, 6, 10, -1, 0, 269, 282, 1, 0, 0, 0, 270, 271, 5, 32, 0, 0, 271, 272, 3, 20, 10, 0, 272, 273, 6, 10, -1, 0, 273, 282, 1, 0, 0, 0, 274, 275, 5, 32, 0, 0, 275, 276, 3, 34, 17, 0, 276, 277, 6, 10, -1, 0, 277, 282, 1, 0, 0, 0, 278, 279, 3, 18, 9, 0, 279, 280, 6, 10, -1, 0, 280, 282, 1, 0, 0, 0, 281, 266, 1, 0, 0, 0, 281, 270, 1, 0, 0, 0, 281, 274, 1, 0, 0, 0, 281, 278, 1, 0, 0, 0, 282, 21, 1, 0, 0, 0, 283, 284, 3, 20, 10, 0, 284, 295, 6, 11, -1, 0, 285, 286, 5, 33, 0, 0, 286, 287, 3, 20, 10, 0, 287, 288, 6, 11, -1, 0, 288, 294, 1, 0, 0, 0, 289, 290, 5, 34, 0, 0, 290, 291, 3, 20, 10, 0, 291, 292, 6, 11, -1, 0, 292, 294, 1, 0, 0, 0, 293, 285, 1, 0, 0, 0, 293, 289, 1, 0, 0, 0, 294, 297, 1, 0, 0, 0, 295, 293, 1, 0, 0, 0, 295, 296, 1, 0, 0, 0, 296, 23, 1, 0, 0, 0, 297, 295, 1, 0, 0, 0, 298, 299, 3, 22, 11, 0, 299, 306, 6, 12, -1, 0, 300, 301, 5, 35, 0, 0, 301, 302, 3, 22, 11, 0, 302, 303, 6, 12, -1, 0, 303, 305, 1, 0, 0, 0, 304, 300, 1, 0, 0, 0, 305, 308, 1, 0, 0, 0, 306, 304, 1, 0, 0, 0, 306, 307, 1, 0, 0, 0, 307, 25, 1, 0, 0, 0, 308, 306, 1, 0, 0, 0, 309, 310, 3, 24, 12, 0, 310, 317, 6, 13, -1, 0, 311, 312, 5, 36, 0, 0, 312, 313, 3, 24, 12, 0, 313, 314, 6, 13, -1, 0, 314, 316, 1, 0, 0, 0, 315, 311, 1, 0, 0, 0, 316, 319, 1, 0, 0, 0, 317, 315, 1, 0, 0, 0, 317, 318, 1, 0, 0, 0, 318, 27, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 320, 321, 3, 26, 13, 0, 321, 332, 6, 14, -1, 0, 322, 323, 5, 37, 0, 0, 323, 324, 3, 26, 13, 0, 324, 325, 6, 14, -1, 0, 325, 331, 1, 0, 0, 0, 326, 327, 5, 38, 0, 0, 327, 328, 3, 26, 13, 0, 328, 329, 6, 14, -1, 0, 329, 331, 1, 0, 0, 0, 330, 322, 1, 0, 0, 0, 330, 326, 1, 0, 0, 0, 331, 334, 1, 0, 0, 0, 332, 330, 1, 0, 0, 0, 332, 333, 1, 0, 0, 0, 333, 29, 1, 0, 0, 0, 334, 332, 1, 0, 0, 0, 335, 336, 3, 28, 14, 0, 336, 341, 6, 15, -1, 0, 337, 338, 5, 39, 0, 0, 338, 339, 3, 30, 15, 0, 339, 340, 6, 15, -1, 0, 340, 342, 1, 0, 0, 0, 341, 337, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 31, 1, 0, 0, 0, 343, 344, 3, 30, 15, 0, 344, 349, 6, 16, -1, 0, 345, 346, 5, 40, 0, 0, 346, 347, 3, 32, 16, 0, 347, 348, 6, 16, -1, 0, 348, 350, 1, 0, 0, 0, 349, 345, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 355, 1, 0, 0, 0, 351, 352, 3, 34, 17, 0, 352, 353, 6, 16, -1, 0, 353, 355, 1, 0, 0, 0, 354, 343, 1, 0, 0, 0, 354, 351, 1, 0, 0, 0, 355, 33, 1, 0, 0, 0, 356, 357, 3, 36, 18, 0, 357, 358, 3, 38, 19, 0, 358, 359, 5, 41, 0, 0, 359, 360, 3, 32, 16, 0, 360, 361, 6, 17, -1, 0, 361, 35, 1, 0, 0, 0, 362, 363, 7, 1, 0, 0, 363, 369, 6, 18, -1, 0, 364, 365, 7, 2, 0, 0, 365, 369, 6, 18, -1, 0, 366, 367, 7, 3, 0, 0, 367, 369, 6, 18, -1, 0, 368, 362, 1, 0, 0, 0, 368, 364, 1, 0, 0, 0, 368, 366, 1, 0, 0, 0, 369, 37, 1, 0, 0, 0, 370, 371, 3, 16, 8, 0, 371, 378, 6, 19, -1, 0, 372, 373, 5, 48, 0, 0, 373, 374, 3, 16, 8, 0, 374, 375, 6, 19, -1, 0, 375, 377, 1, 0, 0, 0, 376, 372, 1, 0, 0, 0, 377, 380, 1, 0, 0, 0, 378, 376, 1, 0, 0, 0, 378, 379, 1, 0, 0, 0, 379, 381, 1, 0, 0, 0, 380, 378, 1, 0, 0, 0, 381, 382, 6, 19, -1, 0, 382, 39, 1, 0, 0, 0, 383, 384, 3, 32, 16, 0, 384, 391, 6, 20, -1, 0, 385, 386, 5, 48, 0, 0, 386, 387, 3, 32, 16, 0, 387, 388, 6, 20, -1, 0, 388, 390, 1, 0, 0, 0, 389, 385, 1, 0, 0, 0, 390, 393, 1, 0, 0, 0, 391, 389, 1, 0, 0, 0, 391, 392, 1, 0, 0, 0, 392, 395, 1, 0, 0, 0, 393, 391, 1, 0, 0, 0, 394, 383, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 41, 1, 0, 0, 0, 396, 397, 3, 32, 16, 0, 397, 398, 6, 21, -1, 0, 398, 402, 1, 0, 0, 0, 399, 400, 7, 0, 0, 0, 400, 402, 6, 21, -1, 0, 401, 396, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 402, 413, 1, 0, 0, 0, 403, 409, 5, 48, 0, 0, 404, 405, 3, 32, 16, 0, 405, 406, 6, 21, -1, 0, 406, 410, 1, 0, 0, 0, 407, 408, 7, 0, 0, 0, 408, 410, 6, 21, -1, 0, 409, 404, 1, 0, 0, 0, 409, 407, 1, 0, 0, 0, 410, 412, 1, 0, 0, 0, 411, 403, 1, 0, 0, 0, 412, 415, 1, 0, 0, 0, 413, 411, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 417, 1, 0, 0, 0, 415, 413, 1, 0, 0, 0, 416, 401, 1, 0, 0, 0, 416, 417, 1, 0, 0, 0, 417, 43, 1, 0, 0, 0, 418, 419, 3, 32, 16, 0, 419, 420, 6, 22, -1, 0, 420, 421, 5, 49, 0, 0, 421, 422, 3, 32, 16, 0, 422, 423, 6, 22, -1, 0, 423, 45, 1, 0, 0, 0, 424, 425, 3, 32, 16, 0, 425, 426, 6, 23, -1, 0, 426, 427, 5, 41, 0, 0, 427, 428, 3, 32, 16, 0, 428, 429, 6, 23, -1, 0, 429, 47, 1, 0, 0, 0, 430, 431, 5, 50, 0, 0, 431, 1119, 6, 24, -1, 0, 432, 433, 5, 51, 0, 0, 433, 1119, 6, 24, -1, 0, 434, 435, 5, 188, 0, 0, 435, 1119, 6, 24, -1, 0, 436, 437, 5, 185, 0, 0, 437, 1119, 6, 24, -1, 0, 438, 439, 5, 187, 0, 0, 439, 1119, 6, 24, -1, 0, 440, 441, 5, 186, 0, 0, 441, 1119, 6, 24, -1, 0, 442, 443, 5, 189, 0, 0, 443, 1119, 6, 24, -1, 0, 444, 445, 5, 52, 0, 0, 445, 446, 3, 32, 16, 0, 446, 447, 5, 53, 0, 0, 447, 448, 6, 24, -1, 0, 448, 1119, 1, 0, 0, 0, 449, 450, 5, 54, 0, 0, 450, 451, 3, 48, 24, 0, 451, 452, 6, 24, -1, 0, 452, 1119, 1, 0, 0, 0, 453, 454, 5, 55, 0, 0, 454, 455, 3, 40, 20, 0, 455, 456, 5, 56, 0, 0, 456, 457, 6, 24, -1, 0, 457, 1119, 1, 0, 0, 0, 458, 459, 5, 55, 0, 0, 459, 460, 3, 40, 20, 0, 460, 461, 5, 57, 0, 0, 461, 462, 6, 24, -1, 0, 462, 1119, 1, 0, 0, 0, 463, 464, 5, 30, 0, 0, 464, 465, 3, 44, 22, 0, 465, 466, 5, 31, 0, 0, 466, 467, 6, 24, -1, 0, 467, 1119, 1, 0, 0, 0, 468, 469, 5, 55, 0, 0, 469, 470, 3, 44, 22, 0, 470, 471, 5, 31, 0, 0, 471, 472, 6, 24, -1, 0, 472, 1119, 1, 0, 0, 0, 473, 474, 5, 55, 0, 0, 474, 475, 3, 44, 22, 0, 475, 476, 5, 57, 0, 0, 476, 477, 6, 24, -1, 0, 477, 1119, 1, 0, 0, 0, 478, 479, 5, 30, 0, 0, 479, 480, 3, 44, 22, 0, 480, 481, 5, 57, 0, 0, 481, 482, 6, 24, -1, 0, 482, 1119, 1, 0, 0, 0, 483, 484, 5, 30, 0, 0, 484, 485, 3, 32, 16, 0, 485, 486, 5, 31, 0, 0, 486, 487, 6, 24, -1, 0, 487, 1119, 1, 0, 0, 0, 488, 489, 5, 58, 0, 0, 489, 490, 3, 46, 23, 0, 490, 491, 5, 59, 0, 0, 491, 492, 6, 24, -1, 0, 492, 1119, 1, 0, 0, 0, 493, 494, 5, 58, 0, 0, 494, 495, 3, 42, 21, 0, 495, 496, 5, 59, 0, 0, 496, 497, 6, 24, -1, 0, 497, 1119, 1, 0, 0, 0, 498, 499, 5, 60, 0, 0, 499, 500, 3, 40, 20, 0, 500, 501, 5, 31, 0, 0, 501, 502, 6, 24, -1, 0, 502, 1119, 1, 0, 0, 0, 503, 504, 5, 61, 0, 0, 504, 505, 3, 40, 20, 0, 505, 506, 5, 31, 0, 0, 506, 507, 6, 24, -1, 0, 507, 1119, 1, 0, 0, 0, 508, 509, 5, 62, 0, 0, 509, 510, 3, 40, 20, 0, 510, 511, 5, 31, 0, 0, 511, 512, 6, 24, -1, 0, 512, 1119, 1, 0, 0, 0, 513, 514, 5, 63, 0, 0, 514, 515, 3, 40, 20, 0, 515, 516, 5, 31, 0, 0, 516, 517, 6, 24, -1, 0, 517, 1119, 1, 0, 0, 0, 518, 519, 5, 64, 0, 0, 519, 520, 3, 40, 20, 0, 520, 521, 5, 31, 0, 0, 521, 522, 6, 24, -1, 0, 522, 1119, 1, 0, 0, 0, 523, 524, 5, 65, 0, 0, 524, 525, 3, 40, 20, 0, 525, 526, 5, 31, 0, 0, 526, 527, 6, 24, -1, 0, 527, 1119, 1, 0, 0, 0, 528, 529, 5, 66, 0, 0, 529, 530, 3, 40, 20, 0, 530, 531, 5, 31, 0, 0, 531, 532, 6, 24, -1, 0, 532, 1119, 1, 0, 0, 0, 533, 534, 5, 67, 0, 0, 534, 535, 3, 40, 20, 0, 535, 536, 5, 31, 0, 0, 536, 537, 6, 24, -1, 0, 537, 1119, 1, 0, 0, 0, 538, 539, 5, 68, 0, 0, 539, 540, 3, 40, 20, 0, 540, 541, 5, 31, 0, 0, 541, 542, 6, 24, -1, 0, 542, 1119, 1, 0, 0, 0, 543, 544, 5, 69, 0, 0, 544, 545, 3, 40, 20, 0, 545, 546, 5, 31, 0, 0, 546, 547, 6, 24, -1, 0, 547, 1119, 1, 0, 0, 0, 548, 549, 5, 70, 0, 0, 549, 550, 3, 40, 20, 0, 550, 551, 5, 31, 0, 0, 551, 552, 6, 24, -1, 0, 552, 1119, 1, 0, 0, 0, 553, 554, 5, 71, 0, 0, 554, 555, 3, 40, 20, 0, 555, 556, 5, 31, 0, 0, 556, 557, 6, 24, -1, 0, 557, 1119, 1, 0, 0, 0, 558, 559, 5, 72, 0, 0, 559, 560, 3, 40, 20, 0, 560, 561, 5, 31, 0, 0, 561, 562, 6, 24, -1, 0, 562, 1119, 1, 0, 0, 0, 563, 564, 5, 73, 0, 0, 564, 565, 3, 40, 20, 0, 565, 566, 5, 31, 0, 0, 566, 567, 6, 24, -1, 0, 567, 1119, 1, 0, 0, 0, 568, 569, 5, 74, 0, 0, 569, 570, 3, 40, 20, 0, 570, 571, 5, 31, 0, 0, 571, 572, 6, 24, -1, 0, 572, 1119, 1, 0, 0, 0, 573, 574, 5, 75, 0, 0, 574, 575, 3, 40, 20, 0, 575, 576, 5, 31, 0, 0, 576, 577, 6, 24, -1, 0, 577, 1119, 1, 0, 0, 0, 578, 579, 5, 76, 0, 0, 579, 580, 3, 40, 20, 0, 580, 581, 5, 31, 0, 0, 581, 582, 6, 24, -1, 0, 582, 1119, 1, 0, 0, 0, 583, 584, 5, 77, 0, 0, 584, 585, 3, 40, 20, 0, 585, 586, 5, 31, 0, 0, 586, 587, 6, 24, -1, 0, 587, 1119, 1, 0, 0, 0, 588, 589, 5, 78, 0, 0, 589, 590, 3, 40, 20, 0, 590, 591, 5, 31, 0, 0, 591, 592, 6, 24, -1, 0, 592, 1119, 1, 0, 0, 0, 593, 594, 5, 79, 0, 0, 594, 595, 3, 40, 20, 0, 595, 596, 5, 31, 0, 0, 596, 597, 6, 24, -1, 0, 597, 1119, 1, 0, 0, 0, 598, 599, 5, 80, 0, 0, 599, 600, 3, 40, 20, 0, 600, 601, 5, 31, 0, 0, 601, 602, 6, 24, -1, 0, 602, 1119, 1, 0, 0, 0, 603, 604, 5, 81, 0, 0, 604, 605, 3, 40, 20, 0, 605, 606, 5, 31, 0, 0, 606, 607, 6, 24, -1, 0, 607, 1119, 1, 0, 0, 0, 608, 609, 5, 82, 0, 0, 609, 610, 3, 40, 20, 0, 610, 611, 5, 31, 0, 0, 611, 612, 6, 24, -1, 0, 612, 1119, 1, 0, 0, 0, 613, 614, 5, 83, 0, 0, 614, 615, 3, 40, 20, 0, 615, 616, 5, 31, 0, 0, 616, 617, 6, 24, -1, 0, 617, 1119, 1, 0, 0, 0, 618, 619, 5, 84, 0, 0, 619, 620, 3, 40, 20, 0, 620, 621, 5, 31, 0, 0, 621, 622, 6, 24, -1, 0, 622, 1119, 1, 0, 0, 0, 623, 624, 5, 85, 0, 0, 624, 625, 3, 40, 20, 0, 625, 626, 5, 31, 0, 0, 626, 627, 6, 24, -1, 0, 627, 1119, 1, 0, 0, 0, 628, 629, 5, 86, 0, 0, 629, 630, 3, 40, 20, 0, 630, 631, 5, 31, 0, 0, 631, 632, 6, 24, -1, 0, 632, 1119, 1, 0, 0, 0, 633, 634, 5, 87, 0, 0, 634, 635, 3, 40, 20, 0, 635, 636, 5, 31, 0, 0, 636, 637, 6, 24, -1, 0, 637, 1119, 1, 0, 0, 0, 638, 639, 5, 88, 0, 0, 639, 640, 3, 40, 20, 0, 640, 641, 5, 31, 0, 0, 641, 642, 6, 24, -1, 0, 642, 1119, 1, 0, 0, 0, 643, 644, 5, 89, 0, 0, 644, 645, 3, 40, 20, 0, 645, 646, 5, 31, 0, 0, 646, 647, 6, 24, -1, 0, 647, 1119, 1, 0, 0, 0, 648, 649, 5, 90, 0, 0, 649, 650, 3, 40, 20, 0, 650, 651, 5, 31, 0, 0, 651, 652, 6, 24, -1, 0, 652, 1119, 1, 0, 0, 0, 653, 654, 5, 91, 0, 0, 654, 655, 3, 40, 20, 0, 655, 656, 5, 31, 0, 0, 656, 657, 6, 24, -1, 0, 657, 1119, 1, 0, 0, 0, 658, 659, 5, 92, 0, 0, 659, 660, 3, 40, 20, 0, 660, 661, 5, 31, 0, 0, 661, 662, 6, 24, -1, 0, 662, 1119, 1, 0, 0, 0, 663, 664, 5, 93, 0, 0, 664, 665, 3, 40, 20, 0, 665, 666, 5, 31, 0, 0, 666, 667, 6, 24, -1, 0, 667, 1119, 1, 0, 0, 0, 668, 669, 5, 94, 0, 0, 669, 670, 3, 40, 20, 0, 670, 671, 5, 31, 0, 0, 671, 672, 6, 24, -1, 0, 672, 1119, 1, 0, 0, 0, 673, 674, 5, 95, 0, 0, 674, 675, 3, 40, 20, 0, 675, 676, 5, 31, 0, 0, 676, 677, 6, 24, -1, 0, 677, 1119, 1, 0, 0, 0, 678, 679, 5, 96, 0, 0, 679, 680, 3, 40, 20, 0, 680, 681, 5, 31, 0, 0, 681, 682, 6, 24, -1, 0, 682, 1119, 1, 0, 0, 0, 683, 684, 5, 97, 0, 0, 684, 685, 3, 40, 20, 0, 685, 686, 5, 31, 0, 0, 686, 687, 6, 24, -1, 0, 687, 1119, 1, 0, 0, 0, 688, 689, 5, 98, 0, 0, 689, 690, 3, 40, 20, 0, 690, 691, 5, 31, 0, 0, 691, 692, 6, 24, -1, 0, 692, 1119, 1, 0, 0, 0, 693, 694, 5, 99, 0, 0, 694, 695, 3, 40, 20, 0, 695, 696, 5, 31, 0, 0, 696, 697, 6, 24, -1, 0, 697, 1119, 1, 0, 0, 0, 698, 699, 5, 100, 0, 0, 699, 700, 3, 40, 20, 0, 700, 701, 5, 31, 0, 0, 701, 702, 6, 24, -1, 0, 702, 1119, 1, 0, 0, 0, 703, 704, 5, 101, 0, 0, 704, 705, 3, 40, 20, 0, 705, 706, 5, 31, 0, 0, 706, 707, 6, 24, -1, 0, 707, 1119, 1, 0, 0, 0, 708, 709, 5, 102, 0, 0, 709, 710, 3, 40, 20, 0, 710, 711, 5, 31, 0, 0, 711, 712, 6, 24, -1, 0, 712, 1119, 1, 0, 0, 0, 713, 714, 5, 103, 0, 0, 714, 715, 3, 40, 20, 0, 715, 716, 5, 31, 0, 0, 716, 717, 6, 24, -1, 0, 717, 1119, 1, 0, 0, 0, 718, 719, 5, 104, 0, 0, 719, 720, 3, 40, 20, 0, 720, 721, 5, 31, 0, 0, 721, 722, 6, 24, -1, 0, 722, 1119, 1, 0, 0, 0, 723, 724, 5, 105, 0, 0, 724, 725, 3, 40, 20, 0, 725, 726, 5, 31, 0, 0, 726, 727, 6, 24, -1, 0, 727, 1119, 1, 0, 0, 0, 728, 729, 5, 106, 0, 0, 729, 730, 3, 40, 20, 0, 730, 731, 5, 31, 0, 0, 731, 732, 6, 24, -1, 0, 732, 1119, 1, 0, 0, 0, 733, 734, 5, 107, 0, 0, 734, 735, 3, 40, 20, 0, 735, 736, 5, 31, 0, 0, 736, 737, 6, 24, -1, 0, 737, 1119, 1, 0, 0, 0, 738, 739, 5, 108, 0, 0, 739, 740, 3, 40, 20, 0, 740, 741, 5, 31, 0, 0, 741, 742, 6, 24, -1, 0, 742, 1119, 1, 0, 0, 0, 743, 744, 5, 109, 0, 0, 744, 745, 3, 40, 20, 0, 745, 746, 5, 31, 0, 0, 746, 747, 6, 24, -1, 0, 747, 1119, 1, 0, 0, 0, 748, 749, 5, 110, 0, 0, 749, 750, 3, 40, 20, 0, 750, 751, 5, 31, 0, 0, 751, 752, 6, 24, -1, 0, 752, 1119, 1, 0, 0, 0, 753, 754, 5, 111, 0, 0, 754, 755, 3, 40, 20, 0, 755, 756, 5, 31, 0, 0, 756, 757, 6, 24, -1, 0, 757, 1119, 1, 0, 0, 0, 758, 759, 5, 112, 0, 0, 759, 760, 3, 40, 20, 0, 760, 761, 5, 31, 0, 0, 761, 762, 6, 24, -1, 0, 762, 1119, 1, 0, 0, 0, 763, 764, 5, 113, 0, 0, 764, 765, 3, 40, 20, 0, 765, 766, 5, 31, 0, 0, 766, 767, 6, 24, -1, 0, 767, 1119, 1, 0, 0, 0, 768, 769, 5, 114, 0, 0, 769, 770, 3, 40, 20, 0, 770, 771, 5, 31, 0, 0, 771, 772, 6, 24, -1, 0, 772, 1119, 1, 0, 0, 0, 773, 774, 5, 115, 0, 0, 774, 775, 3, 40, 20, 0, 775, 776, 5, 31, 0, 0, 776, 777, 6, 24, -1, 0, 777, 1119, 1, 0, 0, 0, 778, 779, 5, 116, 0, 0, 779, 780, 3, 40, 20, 0, 780, 781, 5, 31, 0, 0, 781, 782, 6, 24, -1, 0, 782, 1119, 1, 0, 0, 0, 783, 784, 5, 117, 0, 0, 784, 785, 3, 40, 20, 0, 785, 786, 5, 31, 0, 0, 786, 787, 6, 24, -1, 0, 787, 1119, 1, 0, 0, 0, 788, 789, 5, 118, 0, 0, 789, 790, 3, 40, 20, 0, 790, 791, 5, 31, 0, 0, 791, 792, 6, 24, -1, 0, 792, 1119, 1, 0, 0, 0, 793, 794, 5, 119, 0, 0, 794, 795, 3, 40, 20, 0, 795, 796, 5, 31, 0, 0, 796, 797, 6, 24, -1, 0, 797, 1119, 1, 0, 0, 0, 798, 799, 5, 120, 0, 0, 799, 800, 3, 40, 20, 0, 800, 801, 5, 31, 0, 0, 801, 802, 6, 24, -1, 0, 802, 1119, 1, 0, 0, 0, 803, 804, 5, 121, 0, 0, 804, 805, 3, 40, 20, 0, 805, 806, 5, 31, 0, 0, 806, 807, 6, 24, -1, 0, 807, 1119, 1, 0, 0, 0, 808, 809, 5, 122, 0, 0, 809, 810, 3, 40, 20, 0, 810, 811, 5, 31, 0, 0, 811, 812, 6, 24, -1, 0, 812, 1119, 1, 0, 0, 0, 813, 814, 5, 123, 0, 0, 814, 815, 3, 40, 20, 0, 815, 816, 5, 31, 0, 0, 816, 817, 6, 24, -1, 0, 817, 1119, 1, 0, 0, 0, 818, 819, 5, 124, 0, 0, 819, 820, 3, 40, 20, 0, 820, 821, 5, 31, 0, 0, 821, 822, 6, 24, -1, 0, 822, 1119, 1, 0, 0, 0, 823, 824, 5, 125, 0, 0, 824, 825, 3, 40, 20, 0, 825, 826, 5, 31, 0, 0, 826, 827, 6, 24, -1, 0, 827, 1119, 1, 0, 0, 0, 828, 829, 5, 126, 0, 0, 829, 830, 3, 40, 20, 0, 830, 831, 5, 31, 0, 0, 831, 832, 6, 24, -1, 0, 832, 1119, 1, 0, 0, 0, 833, 834, 5, 127, 0, 0, 834, 835, 3, 40, 20, 0, 835, 836, 5, 31, 0, 0, 836, 837, 6, 24, -1, 0, 837, 1119, 1, 0, 0, 0, 838, 839, 5, 128, 0, 0, 839, 840, 3, 40, 20, 0, 840, 841, 5, 31, 0, 0, 841, 842, 6, 24, -1, 0, 842, 1119, 1, 0, 0, 0, 843, 844, 5, 129, 0, 0, 844, 845, 3, 40, 20, 0, 845, 846, 5, 31, 0, 0, 846, 847, 6, 24, -1, 0, 847, 1119, 1, 0, 0, 0, 848, 849, 5, 130, 0, 0, 849, 850, 3, 40, 20, 0, 850, 851, 5, 31, 0, 0, 851, 852, 6, 24, -1, 0, 852, 1119, 1, 0, 0, 0, 853, 854, 5, 131, 0, 0, 854, 855, 3, 40, 20, 0, 855, 856, 5, 31, 0, 0, 856, 857, 6, 24, -1, 0, 857, 1119, 1, 0, 0, 0, 858, 859, 5, 132, 0, 0, 859, 860, 3, 40, 20, 0, 860, 861, 5, 31, 0, 0, 861, 862, 6, 24, -1, 0, 862, 1119, 1, 0, 0, 0, 863, 864, 5, 133, 0, 0, 864, 865, 3, 40, 20, 0, 865, 866, 5, 31, 0, 0, 866, 867, 6, 24, -1, 0, 867, 1119, 1, 0, 0, 0, 868, 869, 5, 134, 0, 0, 869, 870, 3, 40, 20, 0, 870, 871, 5, 31, 0, 0, 871, 872, 6, 24, -1, 0, 872, 1119, 1, 0, 0, 0, 873, 874, 5, 135, 0, 0, 874, 875, 3, 40, 20, 0, 875, 876, 5, 31, 0, 0, 876, 877, 6, 24, -1, 0, 877, 1119, 1, 0, 0, 0, 878, 879, 5, 136, 0, 0, 879, 880, 3, 40, 20, 0, 880, 881, 5, 31, 0, 0, 881, 882, 6, 24, -1, 0, 882, 1119, 1, 0, 0, 0, 883, 884, 5, 137, 0, 0, 884, 885, 3, 40, 20, 0, 885, 886, 5, 31, 0, 0, 886, 887, 6, 24, -1, 0, 887, 1119, 1, 0, 0, 0, 888, 889, 5, 138, 0, 0, 889, 890, 3, 40, 20, 0, 890, 891, 5, 31, 0, 0, 891, 892, 6, 24, -1, 0, 892, 1119, 1, 0, 0, 0, 893, 894, 5, 139, 0, 0, 894, 895, 3, 40, 20, 0, 895, 896, 5, 31, 0, 0, 896, 897, 6, 24, -1, 0, 897, 1119, 1, 0, 0, 0, 898, 899, 5, 140, 0, 0, 899, 900, 3, 40, 20, 0, 900, 901, 5, 31, 0, 0, 901, 902, 6, 24, -1, 0, 902, 1119, 1, 0, 0, 0, 903, 904, 5, 141, 0, 0, 904, 905, 3, 40, 20, 0, 905, 906, 5, 31, 0, 0, 906, 907, 6, 24, -1, 0, 907, 1119, 1, 0, 0, 0, 908, 909, 5, 142, 0, 0, 909, 910, 3, 40, 20, 0, 910, 911, 5, 31, 0, 0, 911, 912, 6, 24, -1, 0, 912, 1119, 1, 0, 0, 0, 913, 914, 5, 143, 0, 0, 914, 915, 3, 40, 20, 0, 915, 916, 5, 31, 0, 0, 916, 917, 6, 24, -1, 0, 917, 1119, 1, 0, 0, 0, 918, 919, 5, 144, 0, 0, 919, 920, 3, 40, 20, 0, 920, 921, 5, 31, 0, 0, 921, 922, 6, 24, -1, 0, 922, 1119, 1, 0, 0, 0, 923, 924, 5, 145, 0, 0, 924, 925, 3, 40, 20, 0, 925, 926, 5, 31, 0, 0, 926, 927, 6, 24, -1, 0, 927, 1119, 1, 0, 0, 0, 928, 929, 5, 146, 0, 0, 929, 930, 3, 40, 20, 0, 930, 931, 5, 31, 0, 0, 931, 932, 6, 24, -1, 0, 932, 1119, 1, 0, 0, 0, 933, 934, 5, 147, 0, 0, 934, 935, 3, 40, 20, 0, 935, 936, 5, 31, 0, 0, 936, 937, 6, 24, -1, 0, 937, 1119, 1, 0, 0, 0, 938, 939, 5, 148, 0, 0, 939, 940, 3, 40, 20, 0, 940, 941, 5, 31, 0, 0, 941, 942, 6, 24, -1, 0, 942, 1119, 1, 0, 0, 0, 943, 944, 5, 149, 0, 0, 944, 945, 3, 40, 20, 0, 945, 946, 5, 31, 0, 0, 946, 947, 6, 24, -1, 0, 947, 1119, 1, 0, 0, 0, 948, 949, 5, 150, 0, 0, 949, 950, 3, 40, 20, 0, 950, 951, 5, 31, 0, 0, 951, 952, 6, 24, -1, 0, 952, 1119, 1, 0, 0, 0, 953, 954, 5, 151, 0, 0, 954, 955, 3, 40, 20, 0, 955, 956, 5, 31, 0, 0, 956, 957, 6, 24, -1, 0, 957, 1119, 1, 0, 0, 0, 958, 959, 5, 152, 0, 0, 959, 960, 3, 40, 20, 0, 960, 961, 5, 31, 0, 0, 961, 962, 6, 24, -1, 0, 962, 1119, 1, 0, 0, 0, 963, 964, 5, 153, 0, 0, 964, 965, 3, 40, 20, 0, 965, 966, 5, 31, 0, 0, 966, 967, 6, 24, -1, 0, 967, 1119, 1, 0, 0, 0, 968, 969, 5, 154, 0, 0, 969, 970, 3, 40, 20, 0, 970, 971, 5, 31, 0, 0, 971, 972, 6, 24, -1, 0, 972, 1119, 1, 0, 0, 0, 973, 974, 5, 155, 0, 0, 974, 975, 3, 40, 20, 0, 975, 976, 5, 31, 0, 0, 976, 977, 6, 24, -1, 0, 977, 1119, 1, 0, 0, 0, 978, 979, 5, 156, 0, 0, 979, 980, 3, 40, 20, 0, 980, 981, 5, 31, 0, 0, 981, 982, 6, 24, -1, 0, 982, 1119, 1, 0, 0, 0, 983, 984, 5, 157, 0, 0, 984, 985, 3, 40, 20, 0, 985, 986, 5, 31, 0, 0, 986, 987, 6, 24, -1, 0, 987, 1119, 1, 0, 0, 0, 988, 989, 5, 158, 0, 0, 989, 990, 3, 40, 20, 0, 990, 991, 5, 31, 0, 0, 991, 992, 6, 24, -1, 0, 992, 1119, 1, 0, 0, 0, 993, 994, 5, 159, 0, 0, 994, 995, 3, 40, 20, 0, 995, 996, 5, 31, 0, 0, 996, 997, 6, 24, -1, 0, 997, 1119, 1, 0, 0, 0, 998, 999, 5, 160, 0, 0, 999, 1000, 3, 40, 20, 0, 1000, 1001, 5, 31, 0, 0, 1001, 1002, 6, 24, -1, 0, 1002, 1119, 1, 0, 0, 0, 1003, 1004, 5, 161, 0, 0, 1004, 1005, 3, 40, 20, 0, 1005, 1006, 5, 31, 0, 0, 1006, 1007, 6, 24, -1, 0, 1007, 1119, 1, 0, 0, 0, 1008, 1009, 5, 162, 0, 0, 1009, 1010, 3, 40, 20, 0, 1010, 1011, 5, 31, 0, 0, 1011, 1012, 6, 24, -1, 0, 1012, 1119, 1, 0, 0, 0, 1013, 1014, 5, 163, 0, 0, 1014, 1015, 3, 40, 20, 0, 1015, 1016, 5, 31, 0, 0, 1016, 1017, 6, 24, -1, 0, 1017, 1119, 1, 0, 0, 0, 1018, 1019, 5, 164, 0, 0, 1019, 1020, 3, 40, 20, 0, 1020, 1021, 5, 31, 0, 0, 1021, 1022, 6, 24, -1, 0, 1022, 1119, 1, 0, 0, 0, 1023, 1024, 5, 165, 0, 0, 1024, 1025, 3, 40, 20, 0, 1025, 1026, 5, 31, 0, 0, 1026, 1027, 6, 24, -1, 0, 1027, 1119, 1, 0, 0, 0, 1028, 1029, 5, 166, 0, 0, 1029, 1030, 3, 40, 20, 0, 1030, 1031, 5, 31, 0, 0, 1031, 1032, 6, 24, -1, 0, 1032, 1119, 1, 0, 0, 0, 1033, 1034, 5, 167, 0, 0, 1034, 1035, 3, 40, 20, 0, 1035, 1036, 5, 31, 0, 0, 1036, 1037, 6, 24, -1, 0, 1037, 1119, 1, 0, 0, 0, 1038, 1039, 5, 168, 0, 0, 1039, 1040, 3, 40, 20, 0, 1040, 1041, 5, 31, 0, 0, 1041, 1042, 6, 24, -1, 0, 1042, 1119, 1, 0, 0, 0, 1043, 1044, 5, 169, 0, 0, 1044, 1045, 3, 40, 20, 0, 1045, 1046, 5, 31, 0, 0, 1046, 1047, 6, 24, -1, 0, 1047, 1119, 1, 0, 0, 0, 1048, 1049, 5, 170, 0, 0, 1049, 1050, 3, 40, 20, 0, 1050, 1051, 5, 31, 0, 0, 1051, 1052, 6, 24, -1, 0, 1052, 1119, 1, 0, 0, 0, 1053, 1054, 5, 171, 0, 0, 1054, 1055, 3, 40, 20, 0, 1055, 1056, 5, 31, 0, 0, 1056, 1057, 6, 24, -1, 0, 1057, 1119, 1, 0, 0, 0, 1058, 1059, 5, 172, 0, 0, 1059, 1060, 3, 40, 20, 0, 1060, 1061, 5, 31, 0, 0, 1061, 1062, 6, 24, -1, 0, 1062, 1119, 1, 0, 0, 0, 1063, 1064, 5, 173, 0, 0, 1064, 1065, 3, 40, 20, 0, 1065, 1066, 5, 31, 0, 0, 1066, 1067, 6, 24, -1, 0, 1067, 1119, 1, 0, 0, 0, 1068, 1069, 5, 174, 0, 0, 1069, 1070, 3, 40, 20, 0, 1070, 1071, 5, 31, 0, 0, 1071, 1072, 6, 24, -1, 0, 1072, 1119, 1, 0, 0, 0, 1073, 1074, 5, 175, 0, 0, 1074, 1075, 3, 40, 20, 0, 1075, 1076, 5, 31, 0, 0, 1076, 1077, 6, 24, -1, 0, 1077, 1119, 1, 0, 0, 0, 1078, 1079, 5, 176, 0, 0, 1079, 1080, 3, 40, 20, 0, 1080, 1081, 5, 31, 0, 0, 1081, 1082, 6, 24, -1, 0, 1082, 1119, 1, 0, 0, 0, 1083, 1084, 5, 177, 0, 0, 1084, 1085, 3, 40, 20, 0, 1085, 1086, 5, 31, 0, 0, 1086, 1087, 6, 24, -1, 0, 1087, 1119, 1, 0, 0, 0, 1088, 1089, 5, 178, 0, 0, 1089, 1090, 3, 40, 20, 0, 1090, 1091, 5, 31, 0, 0, 1091, 1092, 6, 24, -1, 0, 1092, 1119, 1, 0, 0, 0, 1093, 1094, 5, 179, 0, 0, 1094, 1095, 3, 40, 20, 0, 1095, 1096, 5, 31, 0, 0, 1096, 1097, 6, 24, -1, 0, 1097, 1119, 1, 0, 0, 0, 1098, 1099, 5, 180, 0, 0, 1099, 1100, 3, 40, 20, 0, 1100, 1101, 5, 31, 0, 0, 1101, 1102, 6, 24, -1, 0, 1102, 1119, 1, 0, 0, 0, 1103, 1104, 5, 181, 0, 0, 1104, 1105, 3, 40, 20, 0, 1105, 1106, 5, 31, 0, 0, 1106, 1107, 6, 24, -1, 0, 1107, 1119, 1, 0, 0, 0, 1108, 1109, 5, 182, 0, 0, 1109, 1110, 3, 40, 20, 0, 1110, 1111, 5, 31, 0, 0, 1111, 1112, 6, 24, -1, 0, 1112, 1119, 1, 0, 0, 0, 1113, 1114, 5, 183, 0, 0, 1114, 1115, 3, 40, 20, 0, 1115, 1116, 5, 31, 0, 0, 1116, 1117, 6, 24, -1, 0, 1117, 1119, 1, 0, 0, 0, 1118, 430, 1, 0, 0, 0, 1118, 432, 1, 0, 0, 0, 1118, 434, 1, 0, 0, 0, 1118, 436, 1, 0, 0, 0, 1118, 438, 1, 0, 0, 0, 1118, 440, 1, 0, 0, 0, 1118, 442, 1, 0, 0, 0, 1118, 444, 1, 0, 0, 0, 1118, 449, 1, 0, 0, 0, 1118, 453, 1, 0, 0, 0, 1118, 458, 1, 0, 0, 0, 1118, 463, 1, 0, 0, 0, 1118, 468, 1, 0, 0, 0, 1118, 473, 1, 0, 0, 0, 1118, 478, 1, 0, 0, 0, 1118, 483, 1, 0, 0, 0, 1118, 488, 1, 0, 0, 0, 1118, 493, 1, 0, 0, 0, 1118, 498, 1, 0, 0, 0, 1118, 503, 1, 0, 0, 0, 1118, 508, 1, 0, 0, 0, 1118, 513, 1, 0, 0, 0, 1118, 518, 1, 0, 0, 0, 1118, 523, 1, 0, 0, 0, 1118, 528, 1, 0, 0, 0, 1118, 533, 1, 0, 0, 0, 1118, 538, 1, 0, 0, 0, 1118, 543, 1, 0, 0, 0, 1118, 548, 1, 0, 0, 0, 1118, 553, 1, 0, 0, 0, 1118, 558, 1, 0, 0, 0, 1118, 563, 1, 0, 0, 0, 1118, 568, 1, 0, 0, 0, 1118, 573, 1, 0, 0, 0, 1118, 578, 1, 0, 0, 0, 1118, 583, 1, 0, 0, 0, 1118, 588, 1, 0, 0, 0, 1118, 593, 1, 0, 0, 0, 1118, 598, 1, 0, 0, 0, 1118, 603, 1, 0, 0, 0, 1118, 608, 1, 0, 0, 0, 1118, 613, 1, 0, 0, 0, 1118, 618, 1, 0, 0, 0, 1118, 623, 1, 0, 0, 0, 1118, 628, 1, 0, 0, 0, 1118, 633, 1, 0, 0, 0, 1118, 638, 1, 0, 0, 0, 1118, 643, 1, 0, 0, 0, 1118, 648, 1, 0, 0, 0, 1118, 653, 1, 0, 0, 0, 1118, 658, 1, 0, 0, 0, 1118, 663, 1, 0, 0, 0, 1118, 668, 1, 0, 0, 0, 1118, 673, 1, 0, 0, 0, 1118, 678, 1, 0, 0, 0, 1118, 683, 1, 0, 0, 0, 1118, 688, 1, 0, 0, 0, 1118, 693, 1, 0, 0, 0, 1118, 698, 1, 0, 0, 0, 1118, 703, 1, 0, 0, 0, 1118, 708, 1, 0, 0, 0, 1118, 713, 1, 0, 0, 0, 1118, 718, 1, 0, 0, 0, 1118, 723, 1, 0, 0, 0, 1118, 728, 1, 0, 0, 0, 1118, 733, 1, 0, 0, 0, 1118, 738, 1, 0, 0, 0, 1118, 743, 1, 0, 0, 0, 1118, 748, 1, 0, 0, 0, 1118, 753, 1, 0, 0, 0, 1118, 758, 1, 0, 0, 0, 1118, 763, 1, 0, 0, 0, 1118, 768, 1, 0, 0, 0, 1118, 773, 1, 0, 0, 0, 1118, 778, 1, 0, 0, 0, 1118, 783, 1, 0, 0, 0, 1118, 788, 1, 0, 0, 0, 1118, 793, 1, 0, 0, 0, 1118, 798, 1, 0, 0, 0, 1118, 803, 1, 0, 0, 0, 1118, 808, 1, 0, 0, 0, 1118, 813, 1, 0, 0, 0, 1118, 818, 1, 0, 0, 0, 1118, 823, 1, 0, 0, 0, 1118, 828, 1, 0, 0, 0, 1118, 833, 1, 0, 0, 0, 1118, 838, 1, 0, 0, 0, 1118, 843, 1, 0, 0, 0, 1118, 848, 1, 0, 0, 0, 1118, 853, 1, 0, 0, 0, 1118, 858, 1, 0, 0, 0, 1118, 863, 1, 0, 0, 0, 1118, 868, 1, 0, 0, 0, 1118, 873, 1, 0, 0, 0, 1118, 878, 1, 0, 0, 0, 1118, 883, 1, 0, 0, 0, 1118, 888, 1, 0, 0, 0, 1118, 893, 1, 0, 0, 0, 1118, 898, 1, 0, 0, 0, 1118, 903, 1, 0, 0, 0, 1118, 908, 1, 0, 0, 0, 1118, 913, 1, 0, 0, 0, 1118, 918, 1, 0, 0, 0, 1118, 923, 1, 0, 0, 0, 1118, 928, 1, 0, 0, 0, 1118, 933, 1, 0, 0, 0, 1118, 938, 1, 0, 0, 0, 1118, 943, 1, 0, 0, 0, 1118, 948, 1, 0, 0, 0, 1118, 953, 1, 0, 0, 0, 1118, 958, 1, 0, 0, 0, 1118, 963, 1, 0, 0, 0, 1118, 968, 1, 0, 0, 0, 1118, 973, 1, 0, 0, 0, 1118, 978, 1, 0, 0, 0, 1118, 983, 1, 0, 0, 0, 1118, 988, 1, 0, 0, 0, 1118, 993, 1, 0, 0, 0, 1118, 998, 1, 0, 0, 0, 1118, 1003, 1, 0, 0, 0, 1118, 1008, 1, 0, 0, 0, 1118, 1013, 1, 0, 0, 0, 1118, 1018, 1, 0, 0, 0, 1118, 1023, 1, 0, 0, 0, 1118, 1028, 1, 0, 0, 0, 1118, 1033, 1, 0, 0, 0, 1118, 1038, 1, 0, 0, 0, 1118, 1043, 1, 0, 0, 0, 1118, 1048, 1, 0, 0, 0, 1118, 1053, 1, 0, 0, 0, 1118, 1058, 1, 0, 0, 0, 1118, 1063, 1, 0, 0, 0, 1118, 1068, 1, 0, 0, 0, 1118, 1073, 1, 0, 0, 0, 1118, 1078, 1, 0, 0, 0, 1118, 1083, 1, 0, 0, 0, 1118, 1088, 1, 0, 0, 0, 1118, 1093, 1, 0, 0, 0, 1118, 1098, 1, 0, 0, 0, 1118, 1103, 1, 0, 0, 0, 1118, 1108, 1, 0, 0, 0, 1118, 1113, 1, 0, 0, 0, 1119, 49, 1, 0, 0, 0, 1120, 1121, 3, 32, 16, 0, 1121, 1122, 5, 0, 0, 1, 1122, 1123, 6, 25, -1, 0, 1123, 51, 1, 0, 0, 0, 42, 59, 67, 75, 77, 84, 94, 104, 109, 119, 129, 131, 144, 150, 152, 167, 169, 190, 192, 225, 227, 246, 253, 262, 281, 293, 295, 306, 317, 330, 332, 341, 349, 354, 368, 378, 391, 394, 401, 409, 413, 416, 1118] \ No newline at end of file +[4, 1, 191, 1141, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 3, 0, 60, 8, 0, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 66, 8, 1, 11, 1, 12, 1, 67, 1, 1, 1, 1, 1, 1, 1, 1, 4, 1, 74, 8, 1, 11, 1, 12, 1, 75, 3, 1, 78, 8, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 85, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 95, 8, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 3, 3, 105, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 110, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 120, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 130, 8, 4, 10, 4, 12, 4, 133, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 145, 8, 5, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 151, 8, 5, 10, 5, 12, 5, 154, 9, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 5, 6, 168, 8, 6, 10, 6, 12, 6, 171, 9, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 191, 8, 7, 10, 7, 12, 7, 194, 9, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 226, 8, 8, 10, 8, 12, 8, 229, 9, 8, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 247, 8, 9, 1, 9, 1, 9, 1, 9, 5, 9, 252, 8, 9, 10, 9, 12, 9, 255, 9, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 1, 9, 3, 9, 263, 8, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 3, 10, 282, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 5, 11, 298, 8, 11, 10, 11, 12, 11, 301, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 5, 12, 313, 8, 12, 10, 12, 12, 12, 316, 9, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 5, 13, 328, 8, 13, 10, 13, 12, 13, 331, 9, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 347, 8, 14, 10, 14, 12, 14, 350, 9, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 358, 8, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 366, 8, 16, 1, 16, 1, 16, 1, 16, 3, 16, 371, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 385, 8, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 5, 19, 393, 8, 19, 10, 19, 12, 19, 396, 9, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 5, 20, 406, 8, 20, 10, 20, 12, 20, 409, 9, 20, 3, 20, 411, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 418, 8, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 426, 8, 21, 5, 21, 428, 8, 21, 10, 21, 12, 21, 431, 9, 21, 3, 21, 433, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 1, 24, 3, 24, 1135, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 0, 0, 26, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 0, 6, 1, 0, 6, 7, 1, 0, 33, 34, 1, 0, 37, 38, 1, 0, 42, 43, 1, 0, 44, 45, 1, 0, 46, 47, 1317, 0, 59, 1, 0, 0, 0, 2, 77, 1, 0, 0, 0, 4, 79, 1, 0, 0, 0, 6, 109, 1, 0, 0, 0, 8, 111, 1, 0, 0, 0, 10, 136, 1, 0, 0, 0, 12, 157, 1, 0, 0, 0, 14, 172, 1, 0, 0, 0, 16, 195, 1, 0, 0, 0, 18, 230, 1, 0, 0, 0, 20, 281, 1, 0, 0, 0, 22, 283, 1, 0, 0, 0, 24, 302, 1, 0, 0, 0, 26, 317, 1, 0, 0, 0, 28, 332, 1, 0, 0, 0, 30, 351, 1, 0, 0, 0, 32, 370, 1, 0, 0, 0, 34, 372, 1, 0, 0, 0, 36, 384, 1, 0, 0, 0, 38, 386, 1, 0, 0, 0, 40, 410, 1, 0, 0, 0, 42, 432, 1, 0, 0, 0, 44, 434, 1, 0, 0, 0, 46, 440, 1, 0, 0, 0, 48, 1134, 1, 0, 0, 0, 50, 1136, 1, 0, 0, 0, 52, 53, 3, 48, 24, 0, 53, 54, 5, 1, 0, 0, 54, 55, 6, 0, -1, 0, 55, 60, 1, 0, 0, 0, 56, 57, 3, 48, 24, 0, 57, 58, 6, 0, -1, 0, 58, 60, 1, 0, 0, 0, 59, 52, 1, 0, 0, 0, 59, 56, 1, 0, 0, 0, 60, 1, 1, 0, 0, 0, 61, 62, 5, 2, 0, 0, 62, 63, 3, 0, 0, 0, 63, 64, 6, 1, -1, 0, 64, 66, 1, 0, 0, 0, 65, 61, 1, 0, 0, 0, 66, 67, 1, 0, 0, 0, 67, 65, 1, 0, 0, 0, 67, 68, 1, 0, 0, 0, 68, 78, 1, 0, 0, 0, 69, 70, 5, 2, 0, 0, 70, 71, 3, 6, 3, 0, 71, 72, 6, 1, -1, 0, 72, 74, 1, 0, 0, 0, 73, 69, 1, 0, 0, 0, 74, 75, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 78, 1, 0, 0, 0, 77, 65, 1, 0, 0, 0, 77, 73, 1, 0, 0, 0, 78, 3, 1, 0, 0, 0, 79, 80, 3, 0, 0, 0, 80, 84, 6, 2, -1, 0, 81, 82, 3, 2, 1, 0, 82, 83, 6, 2, -1, 0, 83, 85, 1, 0, 0, 0, 84, 81, 1, 0, 0, 0, 84, 85, 1, 0, 0, 0, 85, 5, 1, 0, 0, 0, 86, 87, 5, 3, 0, 0, 87, 88, 3, 4, 2, 0, 88, 89, 6, 3, -1, 0, 89, 95, 1, 0, 0, 0, 90, 91, 5, 4, 0, 0, 91, 92, 3, 4, 2, 0, 92, 93, 6, 3, -1, 0, 93, 95, 1, 0, 0, 0, 94, 86, 1, 0, 0, 0, 94, 90, 1, 0, 0, 0, 95, 110, 1, 0, 0, 0, 96, 97, 5, 3, 0, 0, 97, 98, 3, 6, 3, 0, 98, 99, 6, 3, -1, 0, 99, 105, 1, 0, 0, 0, 100, 101, 5, 4, 0, 0, 101, 102, 3, 6, 3, 0, 102, 103, 6, 3, -1, 0, 103, 105, 1, 0, 0, 0, 104, 96, 1, 0, 0, 0, 104, 100, 1, 0, 0, 0, 105, 110, 1, 0, 0, 0, 106, 107, 3, 4, 2, 0, 107, 108, 6, 3, -1, 0, 108, 110, 1, 0, 0, 0, 109, 94, 1, 0, 0, 0, 109, 104, 1, 0, 0, 0, 109, 106, 1, 0, 0, 0, 110, 7, 1, 0, 0, 0, 111, 112, 3, 6, 3, 0, 112, 131, 6, 4, -1, 0, 113, 119, 5, 5, 0, 0, 114, 115, 7, 0, 0, 0, 115, 120, 6, 4, -1, 0, 116, 117, 3, 6, 3, 0, 117, 118, 6, 4, -1, 0, 118, 120, 1, 0, 0, 0, 119, 114, 1, 0, 0, 0, 119, 116, 1, 0, 0, 0, 120, 130, 1, 0, 0, 0, 121, 122, 5, 8, 0, 0, 122, 123, 3, 6, 3, 0, 123, 124, 6, 4, -1, 0, 124, 130, 1, 0, 0, 0, 125, 126, 5, 9, 0, 0, 126, 127, 3, 6, 3, 0, 127, 128, 6, 4, -1, 0, 128, 130, 1, 0, 0, 0, 129, 113, 1, 0, 0, 0, 129, 121, 1, 0, 0, 0, 129, 125, 1, 0, 0, 0, 130, 133, 1, 0, 0, 0, 131, 129, 1, 0, 0, 0, 131, 132, 1, 0, 0, 0, 132, 134, 1, 0, 0, 0, 133, 131, 1, 0, 0, 0, 134, 135, 6, 4, -1, 0, 135, 9, 1, 0, 0, 0, 136, 137, 3, 8, 4, 0, 137, 152, 6, 5, -1, 0, 138, 144, 5, 4, 0, 0, 139, 140, 7, 0, 0, 0, 140, 145, 6, 5, -1, 0, 141, 142, 3, 8, 4, 0, 142, 143, 6, 5, -1, 0, 143, 145, 1, 0, 0, 0, 144, 139, 1, 0, 0, 0, 144, 141, 1, 0, 0, 0, 145, 151, 1, 0, 0, 0, 146, 147, 5, 3, 0, 0, 147, 148, 3, 8, 4, 0, 148, 149, 6, 5, -1, 0, 149, 151, 1, 0, 0, 0, 150, 138, 1, 0, 0, 0, 150, 146, 1, 0, 0, 0, 151, 154, 1, 0, 0, 0, 152, 150, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 152, 1, 0, 0, 0, 155, 156, 6, 5, -1, 0, 156, 11, 1, 0, 0, 0, 157, 158, 3, 10, 5, 0, 158, 169, 6, 6, -1, 0, 159, 160, 5, 10, 0, 0, 160, 161, 3, 10, 5, 0, 161, 162, 6, 6, -1, 0, 162, 168, 1, 0, 0, 0, 163, 164, 5, 11, 0, 0, 164, 165, 3, 10, 5, 0, 165, 166, 6, 6, -1, 0, 166, 168, 1, 0, 0, 0, 167, 159, 1, 0, 0, 0, 167, 163, 1, 0, 0, 0, 168, 171, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 169, 170, 1, 0, 0, 0, 170, 13, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 172, 173, 3, 12, 6, 0, 173, 192, 6, 7, -1, 0, 174, 175, 5, 12, 0, 0, 175, 176, 3, 12, 6, 0, 176, 177, 6, 7, -1, 0, 177, 191, 1, 0, 0, 0, 178, 179, 5, 13, 0, 0, 179, 180, 3, 12, 6, 0, 180, 181, 6, 7, -1, 0, 181, 191, 1, 0, 0, 0, 182, 183, 5, 14, 0, 0, 183, 184, 3, 12, 6, 0, 184, 185, 6, 7, -1, 0, 185, 191, 1, 0, 0, 0, 186, 187, 5, 15, 0, 0, 187, 188, 3, 12, 6, 0, 188, 189, 6, 7, -1, 0, 189, 191, 1, 0, 0, 0, 190, 174, 1, 0, 0, 0, 190, 178, 1, 0, 0, 0, 190, 182, 1, 0, 0, 0, 190, 186, 1, 0, 0, 0, 191, 194, 1, 0, 0, 0, 192, 190, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 15, 1, 0, 0, 0, 194, 192, 1, 0, 0, 0, 195, 196, 3, 14, 7, 0, 196, 227, 6, 8, -1, 0, 197, 198, 5, 16, 0, 0, 198, 199, 3, 14, 7, 0, 199, 200, 6, 8, -1, 0, 200, 226, 1, 0, 0, 0, 201, 202, 5, 17, 0, 0, 202, 203, 3, 14, 7, 0, 203, 204, 6, 8, -1, 0, 204, 226, 1, 0, 0, 0, 205, 206, 5, 18, 0, 0, 206, 207, 3, 14, 7, 0, 207, 208, 6, 8, -1, 0, 208, 226, 1, 0, 0, 0, 209, 210, 5, 19, 0, 0, 210, 211, 3, 14, 7, 0, 211, 212, 6, 8, -1, 0, 212, 226, 1, 0, 0, 0, 213, 214, 5, 20, 0, 0, 214, 215, 3, 14, 7, 0, 215, 216, 6, 8, -1, 0, 216, 226, 1, 0, 0, 0, 217, 218, 5, 21, 0, 0, 218, 219, 3, 14, 7, 0, 219, 220, 6, 8, -1, 0, 220, 226, 1, 0, 0, 0, 221, 222, 5, 22, 0, 0, 222, 223, 3, 14, 7, 0, 223, 224, 6, 8, -1, 0, 224, 226, 1, 0, 0, 0, 225, 197, 1, 0, 0, 0, 225, 201, 1, 0, 0, 0, 225, 205, 1, 0, 0, 0, 225, 209, 1, 0, 0, 0, 225, 213, 1, 0, 0, 0, 225, 217, 1, 0, 0, 0, 225, 221, 1, 0, 0, 0, 226, 229, 1, 0, 0, 0, 227, 225, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 17, 1, 0, 0, 0, 229, 227, 1, 0, 0, 0, 230, 231, 3, 16, 8, 0, 231, 253, 6, 9, -1, 0, 232, 233, 5, 23, 0, 0, 233, 247, 6, 9, -1, 0, 234, 235, 5, 24, 0, 0, 235, 247, 6, 9, -1, 0, 236, 237, 5, 25, 0, 0, 237, 247, 6, 9, -1, 0, 238, 239, 5, 26, 0, 0, 239, 247, 6, 9, -1, 0, 240, 241, 5, 27, 0, 0, 241, 247, 6, 9, -1, 0, 242, 243, 5, 28, 0, 0, 243, 247, 6, 9, -1, 0, 244, 245, 5, 29, 0, 0, 245, 247, 6, 9, -1, 0, 246, 232, 1, 0, 0, 0, 246, 234, 1, 0, 0, 0, 246, 236, 1, 0, 0, 0, 246, 238, 1, 0, 0, 0, 246, 240, 1, 0, 0, 0, 246, 242, 1, 0, 0, 0, 246, 244, 1, 0, 0, 0, 247, 248, 1, 0, 0, 0, 248, 249, 3, 16, 8, 0, 249, 250, 6, 9, -1, 0, 250, 252, 1, 0, 0, 0, 251, 246, 1, 0, 0, 0, 252, 255, 1, 0, 0, 0, 253, 251, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 262, 1, 0, 0, 0, 255, 253, 1, 0, 0, 0, 256, 257, 5, 30, 0, 0, 257, 258, 5, 9, 0, 0, 258, 259, 3, 16, 8, 0, 259, 260, 5, 31, 0, 0, 260, 261, 6, 9, -1, 0, 261, 263, 1, 0, 0, 0, 262, 256, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 264, 1, 0, 0, 0, 264, 265, 6, 9, -1, 0, 265, 19, 1, 0, 0, 0, 266, 267, 5, 32, 0, 0, 267, 268, 3, 18, 9, 0, 268, 269, 6, 10, -1, 0, 269, 282, 1, 0, 0, 0, 270, 271, 5, 32, 0, 0, 271, 272, 3, 20, 10, 0, 272, 273, 6, 10, -1, 0, 273, 282, 1, 0, 0, 0, 274, 275, 5, 32, 0, 0, 275, 276, 3, 34, 17, 0, 276, 277, 6, 10, -1, 0, 277, 282, 1, 0, 0, 0, 278, 279, 3, 18, 9, 0, 279, 280, 6, 10, -1, 0, 280, 282, 1, 0, 0, 0, 281, 266, 1, 0, 0, 0, 281, 270, 1, 0, 0, 0, 281, 274, 1, 0, 0, 0, 281, 278, 1, 0, 0, 0, 282, 21, 1, 0, 0, 0, 283, 284, 3, 20, 10, 0, 284, 299, 6, 11, -1, 0, 285, 286, 5, 33, 0, 0, 286, 287, 3, 20, 10, 0, 287, 288, 6, 11, -1, 0, 288, 298, 1, 0, 0, 0, 289, 290, 5, 34, 0, 0, 290, 291, 3, 20, 10, 0, 291, 292, 6, 11, -1, 0, 292, 298, 1, 0, 0, 0, 293, 294, 7, 1, 0, 0, 294, 295, 3, 34, 17, 0, 295, 296, 6, 11, -1, 0, 296, 298, 1, 0, 0, 0, 297, 285, 1, 0, 0, 0, 297, 289, 1, 0, 0, 0, 297, 293, 1, 0, 0, 0, 298, 301, 1, 0, 0, 0, 299, 297, 1, 0, 0, 0, 299, 300, 1, 0, 0, 0, 300, 23, 1, 0, 0, 0, 301, 299, 1, 0, 0, 0, 302, 303, 3, 22, 11, 0, 303, 314, 6, 12, -1, 0, 304, 305, 5, 35, 0, 0, 305, 306, 3, 22, 11, 0, 306, 307, 6, 12, -1, 0, 307, 313, 1, 0, 0, 0, 308, 309, 5, 35, 0, 0, 309, 310, 3, 34, 17, 0, 310, 311, 6, 12, -1, 0, 311, 313, 1, 0, 0, 0, 312, 304, 1, 0, 0, 0, 312, 308, 1, 0, 0, 0, 313, 316, 1, 0, 0, 0, 314, 312, 1, 0, 0, 0, 314, 315, 1, 0, 0, 0, 315, 25, 1, 0, 0, 0, 316, 314, 1, 0, 0, 0, 317, 318, 3, 24, 12, 0, 318, 329, 6, 13, -1, 0, 319, 320, 5, 36, 0, 0, 320, 321, 3, 24, 12, 0, 321, 322, 6, 13, -1, 0, 322, 328, 1, 0, 0, 0, 323, 324, 5, 36, 0, 0, 324, 325, 3, 34, 17, 0, 325, 326, 6, 13, -1, 0, 326, 328, 1, 0, 0, 0, 327, 319, 1, 0, 0, 0, 327, 323, 1, 0, 0, 0, 328, 331, 1, 0, 0, 0, 329, 327, 1, 0, 0, 0, 329, 330, 1, 0, 0, 0, 330, 27, 1, 0, 0, 0, 331, 329, 1, 0, 0, 0, 332, 333, 3, 26, 13, 0, 333, 348, 6, 14, -1, 0, 334, 335, 5, 37, 0, 0, 335, 336, 3, 26, 13, 0, 336, 337, 6, 14, -1, 0, 337, 347, 1, 0, 0, 0, 338, 339, 5, 38, 0, 0, 339, 340, 3, 26, 13, 0, 340, 341, 6, 14, -1, 0, 341, 347, 1, 0, 0, 0, 342, 343, 7, 2, 0, 0, 343, 344, 3, 34, 17, 0, 344, 345, 6, 14, -1, 0, 345, 347, 1, 0, 0, 0, 346, 334, 1, 0, 0, 0, 346, 338, 1, 0, 0, 0, 346, 342, 1, 0, 0, 0, 347, 350, 1, 0, 0, 0, 348, 346, 1, 0, 0, 0, 348, 349, 1, 0, 0, 0, 349, 29, 1, 0, 0, 0, 350, 348, 1, 0, 0, 0, 351, 352, 3, 28, 14, 0, 352, 357, 6, 15, -1, 0, 353, 354, 5, 39, 0, 0, 354, 355, 3, 30, 15, 0, 355, 356, 6, 15, -1, 0, 356, 358, 1, 0, 0, 0, 357, 353, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 31, 1, 0, 0, 0, 359, 360, 3, 30, 15, 0, 360, 365, 6, 16, -1, 0, 361, 362, 5, 40, 0, 0, 362, 363, 3, 32, 16, 0, 363, 364, 6, 16, -1, 0, 364, 366, 1, 0, 0, 0, 365, 361, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 371, 1, 0, 0, 0, 367, 368, 3, 34, 17, 0, 368, 369, 6, 16, -1, 0, 369, 371, 1, 0, 0, 0, 370, 359, 1, 0, 0, 0, 370, 367, 1, 0, 0, 0, 371, 33, 1, 0, 0, 0, 372, 373, 3, 36, 18, 0, 373, 374, 3, 38, 19, 0, 374, 375, 5, 41, 0, 0, 375, 376, 3, 32, 16, 0, 376, 377, 6, 17, -1, 0, 377, 35, 1, 0, 0, 0, 378, 379, 7, 3, 0, 0, 379, 385, 6, 18, -1, 0, 380, 381, 7, 4, 0, 0, 381, 385, 6, 18, -1, 0, 382, 383, 7, 5, 0, 0, 383, 385, 6, 18, -1, 0, 384, 378, 1, 0, 0, 0, 384, 380, 1, 0, 0, 0, 384, 382, 1, 0, 0, 0, 385, 37, 1, 0, 0, 0, 386, 387, 3, 16, 8, 0, 387, 394, 6, 19, -1, 0, 388, 389, 5, 48, 0, 0, 389, 390, 3, 16, 8, 0, 390, 391, 6, 19, -1, 0, 391, 393, 1, 0, 0, 0, 392, 388, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 397, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 398, 6, 19, -1, 0, 398, 39, 1, 0, 0, 0, 399, 400, 3, 32, 16, 0, 400, 407, 6, 20, -1, 0, 401, 402, 5, 48, 0, 0, 402, 403, 3, 32, 16, 0, 403, 404, 6, 20, -1, 0, 404, 406, 1, 0, 0, 0, 405, 401, 1, 0, 0, 0, 406, 409, 1, 0, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 411, 1, 0, 0, 0, 409, 407, 1, 0, 0, 0, 410, 399, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 41, 1, 0, 0, 0, 412, 413, 3, 32, 16, 0, 413, 414, 6, 21, -1, 0, 414, 418, 1, 0, 0, 0, 415, 416, 7, 0, 0, 0, 416, 418, 6, 21, -1, 0, 417, 412, 1, 0, 0, 0, 417, 415, 1, 0, 0, 0, 418, 429, 1, 0, 0, 0, 419, 425, 5, 48, 0, 0, 420, 421, 3, 32, 16, 0, 421, 422, 6, 21, -1, 0, 422, 426, 1, 0, 0, 0, 423, 424, 7, 0, 0, 0, 424, 426, 6, 21, -1, 0, 425, 420, 1, 0, 0, 0, 425, 423, 1, 0, 0, 0, 426, 428, 1, 0, 0, 0, 427, 419, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 433, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 417, 1, 0, 0, 0, 432, 433, 1, 0, 0, 0, 433, 43, 1, 0, 0, 0, 434, 435, 3, 32, 16, 0, 435, 436, 6, 22, -1, 0, 436, 437, 5, 49, 0, 0, 437, 438, 3, 32, 16, 0, 438, 439, 6, 22, -1, 0, 439, 45, 1, 0, 0, 0, 440, 441, 3, 32, 16, 0, 441, 442, 6, 23, -1, 0, 442, 443, 5, 41, 0, 0, 443, 444, 3, 32, 16, 0, 444, 445, 6, 23, -1, 0, 445, 47, 1, 0, 0, 0, 446, 447, 5, 50, 0, 0, 447, 1135, 6, 24, -1, 0, 448, 449, 5, 51, 0, 0, 449, 1135, 6, 24, -1, 0, 450, 451, 5, 188, 0, 0, 451, 1135, 6, 24, -1, 0, 452, 453, 5, 185, 0, 0, 453, 1135, 6, 24, -1, 0, 454, 455, 5, 187, 0, 0, 455, 1135, 6, 24, -1, 0, 456, 457, 5, 186, 0, 0, 457, 1135, 6, 24, -1, 0, 458, 459, 5, 189, 0, 0, 459, 1135, 6, 24, -1, 0, 460, 461, 5, 52, 0, 0, 461, 462, 3, 32, 16, 0, 462, 463, 5, 53, 0, 0, 463, 464, 6, 24, -1, 0, 464, 1135, 1, 0, 0, 0, 465, 466, 5, 54, 0, 0, 466, 467, 3, 48, 24, 0, 467, 468, 6, 24, -1, 0, 468, 1135, 1, 0, 0, 0, 469, 470, 5, 55, 0, 0, 470, 471, 3, 40, 20, 0, 471, 472, 5, 56, 0, 0, 472, 473, 6, 24, -1, 0, 473, 1135, 1, 0, 0, 0, 474, 475, 5, 55, 0, 0, 475, 476, 3, 40, 20, 0, 476, 477, 5, 57, 0, 0, 477, 478, 6, 24, -1, 0, 478, 1135, 1, 0, 0, 0, 479, 480, 5, 30, 0, 0, 480, 481, 3, 44, 22, 0, 481, 482, 5, 31, 0, 0, 482, 483, 6, 24, -1, 0, 483, 1135, 1, 0, 0, 0, 484, 485, 5, 55, 0, 0, 485, 486, 3, 44, 22, 0, 486, 487, 5, 31, 0, 0, 487, 488, 6, 24, -1, 0, 488, 1135, 1, 0, 0, 0, 489, 490, 5, 55, 0, 0, 490, 491, 3, 44, 22, 0, 491, 492, 5, 57, 0, 0, 492, 493, 6, 24, -1, 0, 493, 1135, 1, 0, 0, 0, 494, 495, 5, 30, 0, 0, 495, 496, 3, 44, 22, 0, 496, 497, 5, 57, 0, 0, 497, 498, 6, 24, -1, 0, 498, 1135, 1, 0, 0, 0, 499, 500, 5, 30, 0, 0, 500, 501, 3, 32, 16, 0, 501, 502, 5, 31, 0, 0, 502, 503, 6, 24, -1, 0, 503, 1135, 1, 0, 0, 0, 504, 505, 5, 58, 0, 0, 505, 506, 3, 46, 23, 0, 506, 507, 5, 59, 0, 0, 507, 508, 6, 24, -1, 0, 508, 1135, 1, 0, 0, 0, 509, 510, 5, 58, 0, 0, 510, 511, 3, 42, 21, 0, 511, 512, 5, 59, 0, 0, 512, 513, 6, 24, -1, 0, 513, 1135, 1, 0, 0, 0, 514, 515, 5, 60, 0, 0, 515, 516, 3, 40, 20, 0, 516, 517, 5, 31, 0, 0, 517, 518, 6, 24, -1, 0, 518, 1135, 1, 0, 0, 0, 519, 520, 5, 61, 0, 0, 520, 521, 3, 40, 20, 0, 521, 522, 5, 31, 0, 0, 522, 523, 6, 24, -1, 0, 523, 1135, 1, 0, 0, 0, 524, 525, 5, 62, 0, 0, 525, 526, 3, 40, 20, 0, 526, 527, 5, 31, 0, 0, 527, 528, 6, 24, -1, 0, 528, 1135, 1, 0, 0, 0, 529, 530, 5, 63, 0, 0, 530, 531, 3, 40, 20, 0, 531, 532, 5, 31, 0, 0, 532, 533, 6, 24, -1, 0, 533, 1135, 1, 0, 0, 0, 534, 535, 5, 64, 0, 0, 535, 536, 3, 40, 20, 0, 536, 537, 5, 31, 0, 0, 537, 538, 6, 24, -1, 0, 538, 1135, 1, 0, 0, 0, 539, 540, 5, 65, 0, 0, 540, 541, 3, 40, 20, 0, 541, 542, 5, 31, 0, 0, 542, 543, 6, 24, -1, 0, 543, 1135, 1, 0, 0, 0, 544, 545, 5, 66, 0, 0, 545, 546, 3, 40, 20, 0, 546, 547, 5, 31, 0, 0, 547, 548, 6, 24, -1, 0, 548, 1135, 1, 0, 0, 0, 549, 550, 5, 67, 0, 0, 550, 551, 3, 40, 20, 0, 551, 552, 5, 31, 0, 0, 552, 553, 6, 24, -1, 0, 553, 1135, 1, 0, 0, 0, 554, 555, 5, 68, 0, 0, 555, 556, 3, 40, 20, 0, 556, 557, 5, 31, 0, 0, 557, 558, 6, 24, -1, 0, 558, 1135, 1, 0, 0, 0, 559, 560, 5, 69, 0, 0, 560, 561, 3, 40, 20, 0, 561, 562, 5, 31, 0, 0, 562, 563, 6, 24, -1, 0, 563, 1135, 1, 0, 0, 0, 564, 565, 5, 70, 0, 0, 565, 566, 3, 40, 20, 0, 566, 567, 5, 31, 0, 0, 567, 568, 6, 24, -1, 0, 568, 1135, 1, 0, 0, 0, 569, 570, 5, 71, 0, 0, 570, 571, 3, 40, 20, 0, 571, 572, 5, 31, 0, 0, 572, 573, 6, 24, -1, 0, 573, 1135, 1, 0, 0, 0, 574, 575, 5, 72, 0, 0, 575, 576, 3, 40, 20, 0, 576, 577, 5, 31, 0, 0, 577, 578, 6, 24, -1, 0, 578, 1135, 1, 0, 0, 0, 579, 580, 5, 73, 0, 0, 580, 581, 3, 40, 20, 0, 581, 582, 5, 31, 0, 0, 582, 583, 6, 24, -1, 0, 583, 1135, 1, 0, 0, 0, 584, 585, 5, 74, 0, 0, 585, 586, 3, 40, 20, 0, 586, 587, 5, 31, 0, 0, 587, 588, 6, 24, -1, 0, 588, 1135, 1, 0, 0, 0, 589, 590, 5, 75, 0, 0, 590, 591, 3, 40, 20, 0, 591, 592, 5, 31, 0, 0, 592, 593, 6, 24, -1, 0, 593, 1135, 1, 0, 0, 0, 594, 595, 5, 76, 0, 0, 595, 596, 3, 40, 20, 0, 596, 597, 5, 31, 0, 0, 597, 598, 6, 24, -1, 0, 598, 1135, 1, 0, 0, 0, 599, 600, 5, 77, 0, 0, 600, 601, 3, 40, 20, 0, 601, 602, 5, 31, 0, 0, 602, 603, 6, 24, -1, 0, 603, 1135, 1, 0, 0, 0, 604, 605, 5, 78, 0, 0, 605, 606, 3, 40, 20, 0, 606, 607, 5, 31, 0, 0, 607, 608, 6, 24, -1, 0, 608, 1135, 1, 0, 0, 0, 609, 610, 5, 79, 0, 0, 610, 611, 3, 40, 20, 0, 611, 612, 5, 31, 0, 0, 612, 613, 6, 24, -1, 0, 613, 1135, 1, 0, 0, 0, 614, 615, 5, 80, 0, 0, 615, 616, 3, 40, 20, 0, 616, 617, 5, 31, 0, 0, 617, 618, 6, 24, -1, 0, 618, 1135, 1, 0, 0, 0, 619, 620, 5, 81, 0, 0, 620, 621, 3, 40, 20, 0, 621, 622, 5, 31, 0, 0, 622, 623, 6, 24, -1, 0, 623, 1135, 1, 0, 0, 0, 624, 625, 5, 82, 0, 0, 625, 626, 3, 40, 20, 0, 626, 627, 5, 31, 0, 0, 627, 628, 6, 24, -1, 0, 628, 1135, 1, 0, 0, 0, 629, 630, 5, 83, 0, 0, 630, 631, 3, 40, 20, 0, 631, 632, 5, 31, 0, 0, 632, 633, 6, 24, -1, 0, 633, 1135, 1, 0, 0, 0, 634, 635, 5, 84, 0, 0, 635, 636, 3, 40, 20, 0, 636, 637, 5, 31, 0, 0, 637, 638, 6, 24, -1, 0, 638, 1135, 1, 0, 0, 0, 639, 640, 5, 85, 0, 0, 640, 641, 3, 40, 20, 0, 641, 642, 5, 31, 0, 0, 642, 643, 6, 24, -1, 0, 643, 1135, 1, 0, 0, 0, 644, 645, 5, 86, 0, 0, 645, 646, 3, 40, 20, 0, 646, 647, 5, 31, 0, 0, 647, 648, 6, 24, -1, 0, 648, 1135, 1, 0, 0, 0, 649, 650, 5, 87, 0, 0, 650, 651, 3, 40, 20, 0, 651, 652, 5, 31, 0, 0, 652, 653, 6, 24, -1, 0, 653, 1135, 1, 0, 0, 0, 654, 655, 5, 88, 0, 0, 655, 656, 3, 40, 20, 0, 656, 657, 5, 31, 0, 0, 657, 658, 6, 24, -1, 0, 658, 1135, 1, 0, 0, 0, 659, 660, 5, 89, 0, 0, 660, 661, 3, 40, 20, 0, 661, 662, 5, 31, 0, 0, 662, 663, 6, 24, -1, 0, 663, 1135, 1, 0, 0, 0, 664, 665, 5, 90, 0, 0, 665, 666, 3, 40, 20, 0, 666, 667, 5, 31, 0, 0, 667, 668, 6, 24, -1, 0, 668, 1135, 1, 0, 0, 0, 669, 670, 5, 91, 0, 0, 670, 671, 3, 40, 20, 0, 671, 672, 5, 31, 0, 0, 672, 673, 6, 24, -1, 0, 673, 1135, 1, 0, 0, 0, 674, 675, 5, 92, 0, 0, 675, 676, 3, 40, 20, 0, 676, 677, 5, 31, 0, 0, 677, 678, 6, 24, -1, 0, 678, 1135, 1, 0, 0, 0, 679, 680, 5, 93, 0, 0, 680, 681, 3, 40, 20, 0, 681, 682, 5, 31, 0, 0, 682, 683, 6, 24, -1, 0, 683, 1135, 1, 0, 0, 0, 684, 685, 5, 94, 0, 0, 685, 686, 3, 40, 20, 0, 686, 687, 5, 31, 0, 0, 687, 688, 6, 24, -1, 0, 688, 1135, 1, 0, 0, 0, 689, 690, 5, 95, 0, 0, 690, 691, 3, 40, 20, 0, 691, 692, 5, 31, 0, 0, 692, 693, 6, 24, -1, 0, 693, 1135, 1, 0, 0, 0, 694, 695, 5, 96, 0, 0, 695, 696, 3, 40, 20, 0, 696, 697, 5, 31, 0, 0, 697, 698, 6, 24, -1, 0, 698, 1135, 1, 0, 0, 0, 699, 700, 5, 97, 0, 0, 700, 701, 3, 40, 20, 0, 701, 702, 5, 31, 0, 0, 702, 703, 6, 24, -1, 0, 703, 1135, 1, 0, 0, 0, 704, 705, 5, 98, 0, 0, 705, 706, 3, 40, 20, 0, 706, 707, 5, 31, 0, 0, 707, 708, 6, 24, -1, 0, 708, 1135, 1, 0, 0, 0, 709, 710, 5, 99, 0, 0, 710, 711, 3, 40, 20, 0, 711, 712, 5, 31, 0, 0, 712, 713, 6, 24, -1, 0, 713, 1135, 1, 0, 0, 0, 714, 715, 5, 100, 0, 0, 715, 716, 3, 40, 20, 0, 716, 717, 5, 31, 0, 0, 717, 718, 6, 24, -1, 0, 718, 1135, 1, 0, 0, 0, 719, 720, 5, 101, 0, 0, 720, 721, 3, 40, 20, 0, 721, 722, 5, 31, 0, 0, 722, 723, 6, 24, -1, 0, 723, 1135, 1, 0, 0, 0, 724, 725, 5, 102, 0, 0, 725, 726, 3, 40, 20, 0, 726, 727, 5, 31, 0, 0, 727, 728, 6, 24, -1, 0, 728, 1135, 1, 0, 0, 0, 729, 730, 5, 103, 0, 0, 730, 731, 3, 40, 20, 0, 731, 732, 5, 31, 0, 0, 732, 733, 6, 24, -1, 0, 733, 1135, 1, 0, 0, 0, 734, 735, 5, 104, 0, 0, 735, 736, 3, 40, 20, 0, 736, 737, 5, 31, 0, 0, 737, 738, 6, 24, -1, 0, 738, 1135, 1, 0, 0, 0, 739, 740, 5, 105, 0, 0, 740, 741, 3, 40, 20, 0, 741, 742, 5, 31, 0, 0, 742, 743, 6, 24, -1, 0, 743, 1135, 1, 0, 0, 0, 744, 745, 5, 106, 0, 0, 745, 746, 3, 40, 20, 0, 746, 747, 5, 31, 0, 0, 747, 748, 6, 24, -1, 0, 748, 1135, 1, 0, 0, 0, 749, 750, 5, 107, 0, 0, 750, 751, 3, 40, 20, 0, 751, 752, 5, 31, 0, 0, 752, 753, 6, 24, -1, 0, 753, 1135, 1, 0, 0, 0, 754, 755, 5, 108, 0, 0, 755, 756, 3, 40, 20, 0, 756, 757, 5, 31, 0, 0, 757, 758, 6, 24, -1, 0, 758, 1135, 1, 0, 0, 0, 759, 760, 5, 109, 0, 0, 760, 761, 3, 40, 20, 0, 761, 762, 5, 31, 0, 0, 762, 763, 6, 24, -1, 0, 763, 1135, 1, 0, 0, 0, 764, 765, 5, 110, 0, 0, 765, 766, 3, 40, 20, 0, 766, 767, 5, 31, 0, 0, 767, 768, 6, 24, -1, 0, 768, 1135, 1, 0, 0, 0, 769, 770, 5, 111, 0, 0, 770, 771, 3, 40, 20, 0, 771, 772, 5, 31, 0, 0, 772, 773, 6, 24, -1, 0, 773, 1135, 1, 0, 0, 0, 774, 775, 5, 112, 0, 0, 775, 776, 3, 40, 20, 0, 776, 777, 5, 31, 0, 0, 777, 778, 6, 24, -1, 0, 778, 1135, 1, 0, 0, 0, 779, 780, 5, 113, 0, 0, 780, 781, 3, 40, 20, 0, 781, 782, 5, 31, 0, 0, 782, 783, 6, 24, -1, 0, 783, 1135, 1, 0, 0, 0, 784, 785, 5, 114, 0, 0, 785, 786, 3, 40, 20, 0, 786, 787, 5, 31, 0, 0, 787, 788, 6, 24, -1, 0, 788, 1135, 1, 0, 0, 0, 789, 790, 5, 115, 0, 0, 790, 791, 3, 40, 20, 0, 791, 792, 5, 31, 0, 0, 792, 793, 6, 24, -1, 0, 793, 1135, 1, 0, 0, 0, 794, 795, 5, 116, 0, 0, 795, 796, 3, 40, 20, 0, 796, 797, 5, 31, 0, 0, 797, 798, 6, 24, -1, 0, 798, 1135, 1, 0, 0, 0, 799, 800, 5, 117, 0, 0, 800, 801, 3, 40, 20, 0, 801, 802, 5, 31, 0, 0, 802, 803, 6, 24, -1, 0, 803, 1135, 1, 0, 0, 0, 804, 805, 5, 118, 0, 0, 805, 806, 3, 40, 20, 0, 806, 807, 5, 31, 0, 0, 807, 808, 6, 24, -1, 0, 808, 1135, 1, 0, 0, 0, 809, 810, 5, 119, 0, 0, 810, 811, 3, 40, 20, 0, 811, 812, 5, 31, 0, 0, 812, 813, 6, 24, -1, 0, 813, 1135, 1, 0, 0, 0, 814, 815, 5, 120, 0, 0, 815, 816, 3, 40, 20, 0, 816, 817, 5, 31, 0, 0, 817, 818, 6, 24, -1, 0, 818, 1135, 1, 0, 0, 0, 819, 820, 5, 121, 0, 0, 820, 821, 3, 40, 20, 0, 821, 822, 5, 31, 0, 0, 822, 823, 6, 24, -1, 0, 823, 1135, 1, 0, 0, 0, 824, 825, 5, 122, 0, 0, 825, 826, 3, 40, 20, 0, 826, 827, 5, 31, 0, 0, 827, 828, 6, 24, -1, 0, 828, 1135, 1, 0, 0, 0, 829, 830, 5, 123, 0, 0, 830, 831, 3, 40, 20, 0, 831, 832, 5, 31, 0, 0, 832, 833, 6, 24, -1, 0, 833, 1135, 1, 0, 0, 0, 834, 835, 5, 124, 0, 0, 835, 836, 3, 40, 20, 0, 836, 837, 5, 31, 0, 0, 837, 838, 6, 24, -1, 0, 838, 1135, 1, 0, 0, 0, 839, 840, 5, 125, 0, 0, 840, 841, 3, 40, 20, 0, 841, 842, 5, 31, 0, 0, 842, 843, 6, 24, -1, 0, 843, 1135, 1, 0, 0, 0, 844, 845, 5, 126, 0, 0, 845, 846, 3, 40, 20, 0, 846, 847, 5, 31, 0, 0, 847, 848, 6, 24, -1, 0, 848, 1135, 1, 0, 0, 0, 849, 850, 5, 127, 0, 0, 850, 851, 3, 40, 20, 0, 851, 852, 5, 31, 0, 0, 852, 853, 6, 24, -1, 0, 853, 1135, 1, 0, 0, 0, 854, 855, 5, 128, 0, 0, 855, 856, 3, 40, 20, 0, 856, 857, 5, 31, 0, 0, 857, 858, 6, 24, -1, 0, 858, 1135, 1, 0, 0, 0, 859, 860, 5, 129, 0, 0, 860, 861, 3, 40, 20, 0, 861, 862, 5, 31, 0, 0, 862, 863, 6, 24, -1, 0, 863, 1135, 1, 0, 0, 0, 864, 865, 5, 130, 0, 0, 865, 866, 3, 40, 20, 0, 866, 867, 5, 31, 0, 0, 867, 868, 6, 24, -1, 0, 868, 1135, 1, 0, 0, 0, 869, 870, 5, 131, 0, 0, 870, 871, 3, 40, 20, 0, 871, 872, 5, 31, 0, 0, 872, 873, 6, 24, -1, 0, 873, 1135, 1, 0, 0, 0, 874, 875, 5, 132, 0, 0, 875, 876, 3, 40, 20, 0, 876, 877, 5, 31, 0, 0, 877, 878, 6, 24, -1, 0, 878, 1135, 1, 0, 0, 0, 879, 880, 5, 133, 0, 0, 880, 881, 3, 40, 20, 0, 881, 882, 5, 31, 0, 0, 882, 883, 6, 24, -1, 0, 883, 1135, 1, 0, 0, 0, 884, 885, 5, 134, 0, 0, 885, 886, 3, 40, 20, 0, 886, 887, 5, 31, 0, 0, 887, 888, 6, 24, -1, 0, 888, 1135, 1, 0, 0, 0, 889, 890, 5, 135, 0, 0, 890, 891, 3, 40, 20, 0, 891, 892, 5, 31, 0, 0, 892, 893, 6, 24, -1, 0, 893, 1135, 1, 0, 0, 0, 894, 895, 5, 136, 0, 0, 895, 896, 3, 40, 20, 0, 896, 897, 5, 31, 0, 0, 897, 898, 6, 24, -1, 0, 898, 1135, 1, 0, 0, 0, 899, 900, 5, 137, 0, 0, 900, 901, 3, 40, 20, 0, 901, 902, 5, 31, 0, 0, 902, 903, 6, 24, -1, 0, 903, 1135, 1, 0, 0, 0, 904, 905, 5, 138, 0, 0, 905, 906, 3, 40, 20, 0, 906, 907, 5, 31, 0, 0, 907, 908, 6, 24, -1, 0, 908, 1135, 1, 0, 0, 0, 909, 910, 5, 139, 0, 0, 910, 911, 3, 40, 20, 0, 911, 912, 5, 31, 0, 0, 912, 913, 6, 24, -1, 0, 913, 1135, 1, 0, 0, 0, 914, 915, 5, 140, 0, 0, 915, 916, 3, 40, 20, 0, 916, 917, 5, 31, 0, 0, 917, 918, 6, 24, -1, 0, 918, 1135, 1, 0, 0, 0, 919, 920, 5, 141, 0, 0, 920, 921, 3, 40, 20, 0, 921, 922, 5, 31, 0, 0, 922, 923, 6, 24, -1, 0, 923, 1135, 1, 0, 0, 0, 924, 925, 5, 142, 0, 0, 925, 926, 3, 40, 20, 0, 926, 927, 5, 31, 0, 0, 927, 928, 6, 24, -1, 0, 928, 1135, 1, 0, 0, 0, 929, 930, 5, 143, 0, 0, 930, 931, 3, 40, 20, 0, 931, 932, 5, 31, 0, 0, 932, 933, 6, 24, -1, 0, 933, 1135, 1, 0, 0, 0, 934, 935, 5, 144, 0, 0, 935, 936, 3, 40, 20, 0, 936, 937, 5, 31, 0, 0, 937, 938, 6, 24, -1, 0, 938, 1135, 1, 0, 0, 0, 939, 940, 5, 145, 0, 0, 940, 941, 3, 40, 20, 0, 941, 942, 5, 31, 0, 0, 942, 943, 6, 24, -1, 0, 943, 1135, 1, 0, 0, 0, 944, 945, 5, 146, 0, 0, 945, 946, 3, 40, 20, 0, 946, 947, 5, 31, 0, 0, 947, 948, 6, 24, -1, 0, 948, 1135, 1, 0, 0, 0, 949, 950, 5, 147, 0, 0, 950, 951, 3, 40, 20, 0, 951, 952, 5, 31, 0, 0, 952, 953, 6, 24, -1, 0, 953, 1135, 1, 0, 0, 0, 954, 955, 5, 148, 0, 0, 955, 956, 3, 40, 20, 0, 956, 957, 5, 31, 0, 0, 957, 958, 6, 24, -1, 0, 958, 1135, 1, 0, 0, 0, 959, 960, 5, 149, 0, 0, 960, 961, 3, 40, 20, 0, 961, 962, 5, 31, 0, 0, 962, 963, 6, 24, -1, 0, 963, 1135, 1, 0, 0, 0, 964, 965, 5, 150, 0, 0, 965, 966, 3, 40, 20, 0, 966, 967, 5, 31, 0, 0, 967, 968, 6, 24, -1, 0, 968, 1135, 1, 0, 0, 0, 969, 970, 5, 151, 0, 0, 970, 971, 3, 40, 20, 0, 971, 972, 5, 31, 0, 0, 972, 973, 6, 24, -1, 0, 973, 1135, 1, 0, 0, 0, 974, 975, 5, 152, 0, 0, 975, 976, 3, 40, 20, 0, 976, 977, 5, 31, 0, 0, 977, 978, 6, 24, -1, 0, 978, 1135, 1, 0, 0, 0, 979, 980, 5, 153, 0, 0, 980, 981, 3, 40, 20, 0, 981, 982, 5, 31, 0, 0, 982, 983, 6, 24, -1, 0, 983, 1135, 1, 0, 0, 0, 984, 985, 5, 154, 0, 0, 985, 986, 3, 40, 20, 0, 986, 987, 5, 31, 0, 0, 987, 988, 6, 24, -1, 0, 988, 1135, 1, 0, 0, 0, 989, 990, 5, 155, 0, 0, 990, 991, 3, 40, 20, 0, 991, 992, 5, 31, 0, 0, 992, 993, 6, 24, -1, 0, 993, 1135, 1, 0, 0, 0, 994, 995, 5, 156, 0, 0, 995, 996, 3, 40, 20, 0, 996, 997, 5, 31, 0, 0, 997, 998, 6, 24, -1, 0, 998, 1135, 1, 0, 0, 0, 999, 1000, 5, 157, 0, 0, 1000, 1001, 3, 40, 20, 0, 1001, 1002, 5, 31, 0, 0, 1002, 1003, 6, 24, -1, 0, 1003, 1135, 1, 0, 0, 0, 1004, 1005, 5, 158, 0, 0, 1005, 1006, 3, 40, 20, 0, 1006, 1007, 5, 31, 0, 0, 1007, 1008, 6, 24, -1, 0, 1008, 1135, 1, 0, 0, 0, 1009, 1010, 5, 159, 0, 0, 1010, 1011, 3, 40, 20, 0, 1011, 1012, 5, 31, 0, 0, 1012, 1013, 6, 24, -1, 0, 1013, 1135, 1, 0, 0, 0, 1014, 1015, 5, 160, 0, 0, 1015, 1016, 3, 40, 20, 0, 1016, 1017, 5, 31, 0, 0, 1017, 1018, 6, 24, -1, 0, 1018, 1135, 1, 0, 0, 0, 1019, 1020, 5, 161, 0, 0, 1020, 1021, 3, 40, 20, 0, 1021, 1022, 5, 31, 0, 0, 1022, 1023, 6, 24, -1, 0, 1023, 1135, 1, 0, 0, 0, 1024, 1025, 5, 162, 0, 0, 1025, 1026, 3, 40, 20, 0, 1026, 1027, 5, 31, 0, 0, 1027, 1028, 6, 24, -1, 0, 1028, 1135, 1, 0, 0, 0, 1029, 1030, 5, 163, 0, 0, 1030, 1031, 3, 40, 20, 0, 1031, 1032, 5, 31, 0, 0, 1032, 1033, 6, 24, -1, 0, 1033, 1135, 1, 0, 0, 0, 1034, 1035, 5, 164, 0, 0, 1035, 1036, 3, 40, 20, 0, 1036, 1037, 5, 31, 0, 0, 1037, 1038, 6, 24, -1, 0, 1038, 1135, 1, 0, 0, 0, 1039, 1040, 5, 165, 0, 0, 1040, 1041, 3, 40, 20, 0, 1041, 1042, 5, 31, 0, 0, 1042, 1043, 6, 24, -1, 0, 1043, 1135, 1, 0, 0, 0, 1044, 1045, 5, 166, 0, 0, 1045, 1046, 3, 40, 20, 0, 1046, 1047, 5, 31, 0, 0, 1047, 1048, 6, 24, -1, 0, 1048, 1135, 1, 0, 0, 0, 1049, 1050, 5, 167, 0, 0, 1050, 1051, 3, 40, 20, 0, 1051, 1052, 5, 31, 0, 0, 1052, 1053, 6, 24, -1, 0, 1053, 1135, 1, 0, 0, 0, 1054, 1055, 5, 168, 0, 0, 1055, 1056, 3, 40, 20, 0, 1056, 1057, 5, 31, 0, 0, 1057, 1058, 6, 24, -1, 0, 1058, 1135, 1, 0, 0, 0, 1059, 1060, 5, 169, 0, 0, 1060, 1061, 3, 40, 20, 0, 1061, 1062, 5, 31, 0, 0, 1062, 1063, 6, 24, -1, 0, 1063, 1135, 1, 0, 0, 0, 1064, 1065, 5, 170, 0, 0, 1065, 1066, 3, 40, 20, 0, 1066, 1067, 5, 31, 0, 0, 1067, 1068, 6, 24, -1, 0, 1068, 1135, 1, 0, 0, 0, 1069, 1070, 5, 171, 0, 0, 1070, 1071, 3, 40, 20, 0, 1071, 1072, 5, 31, 0, 0, 1072, 1073, 6, 24, -1, 0, 1073, 1135, 1, 0, 0, 0, 1074, 1075, 5, 172, 0, 0, 1075, 1076, 3, 40, 20, 0, 1076, 1077, 5, 31, 0, 0, 1077, 1078, 6, 24, -1, 0, 1078, 1135, 1, 0, 0, 0, 1079, 1080, 5, 173, 0, 0, 1080, 1081, 3, 40, 20, 0, 1081, 1082, 5, 31, 0, 0, 1082, 1083, 6, 24, -1, 0, 1083, 1135, 1, 0, 0, 0, 1084, 1085, 5, 174, 0, 0, 1085, 1086, 3, 40, 20, 0, 1086, 1087, 5, 31, 0, 0, 1087, 1088, 6, 24, -1, 0, 1088, 1135, 1, 0, 0, 0, 1089, 1090, 5, 175, 0, 0, 1090, 1091, 3, 40, 20, 0, 1091, 1092, 5, 31, 0, 0, 1092, 1093, 6, 24, -1, 0, 1093, 1135, 1, 0, 0, 0, 1094, 1095, 5, 176, 0, 0, 1095, 1096, 3, 40, 20, 0, 1096, 1097, 5, 31, 0, 0, 1097, 1098, 6, 24, -1, 0, 1098, 1135, 1, 0, 0, 0, 1099, 1100, 5, 177, 0, 0, 1100, 1101, 3, 40, 20, 0, 1101, 1102, 5, 31, 0, 0, 1102, 1103, 6, 24, -1, 0, 1103, 1135, 1, 0, 0, 0, 1104, 1105, 5, 178, 0, 0, 1105, 1106, 3, 40, 20, 0, 1106, 1107, 5, 31, 0, 0, 1107, 1108, 6, 24, -1, 0, 1108, 1135, 1, 0, 0, 0, 1109, 1110, 5, 179, 0, 0, 1110, 1111, 3, 40, 20, 0, 1111, 1112, 5, 31, 0, 0, 1112, 1113, 6, 24, -1, 0, 1113, 1135, 1, 0, 0, 0, 1114, 1115, 5, 180, 0, 0, 1115, 1116, 3, 40, 20, 0, 1116, 1117, 5, 31, 0, 0, 1117, 1118, 6, 24, -1, 0, 1118, 1135, 1, 0, 0, 0, 1119, 1120, 5, 181, 0, 0, 1120, 1121, 3, 40, 20, 0, 1121, 1122, 5, 31, 0, 0, 1122, 1123, 6, 24, -1, 0, 1123, 1135, 1, 0, 0, 0, 1124, 1125, 5, 182, 0, 0, 1125, 1126, 3, 40, 20, 0, 1126, 1127, 5, 31, 0, 0, 1127, 1128, 6, 24, -1, 0, 1128, 1135, 1, 0, 0, 0, 1129, 1130, 5, 183, 0, 0, 1130, 1131, 3, 40, 20, 0, 1131, 1132, 5, 31, 0, 0, 1132, 1133, 6, 24, -1, 0, 1133, 1135, 1, 0, 0, 0, 1134, 446, 1, 0, 0, 0, 1134, 448, 1, 0, 0, 0, 1134, 450, 1, 0, 0, 0, 1134, 452, 1, 0, 0, 0, 1134, 454, 1, 0, 0, 0, 1134, 456, 1, 0, 0, 0, 1134, 458, 1, 0, 0, 0, 1134, 460, 1, 0, 0, 0, 1134, 465, 1, 0, 0, 0, 1134, 469, 1, 0, 0, 0, 1134, 474, 1, 0, 0, 0, 1134, 479, 1, 0, 0, 0, 1134, 484, 1, 0, 0, 0, 1134, 489, 1, 0, 0, 0, 1134, 494, 1, 0, 0, 0, 1134, 499, 1, 0, 0, 0, 1134, 504, 1, 0, 0, 0, 1134, 509, 1, 0, 0, 0, 1134, 514, 1, 0, 0, 0, 1134, 519, 1, 0, 0, 0, 1134, 524, 1, 0, 0, 0, 1134, 529, 1, 0, 0, 0, 1134, 534, 1, 0, 0, 0, 1134, 539, 1, 0, 0, 0, 1134, 544, 1, 0, 0, 0, 1134, 549, 1, 0, 0, 0, 1134, 554, 1, 0, 0, 0, 1134, 559, 1, 0, 0, 0, 1134, 564, 1, 0, 0, 0, 1134, 569, 1, 0, 0, 0, 1134, 574, 1, 0, 0, 0, 1134, 579, 1, 0, 0, 0, 1134, 584, 1, 0, 0, 0, 1134, 589, 1, 0, 0, 0, 1134, 594, 1, 0, 0, 0, 1134, 599, 1, 0, 0, 0, 1134, 604, 1, 0, 0, 0, 1134, 609, 1, 0, 0, 0, 1134, 614, 1, 0, 0, 0, 1134, 619, 1, 0, 0, 0, 1134, 624, 1, 0, 0, 0, 1134, 629, 1, 0, 0, 0, 1134, 634, 1, 0, 0, 0, 1134, 639, 1, 0, 0, 0, 1134, 644, 1, 0, 0, 0, 1134, 649, 1, 0, 0, 0, 1134, 654, 1, 0, 0, 0, 1134, 659, 1, 0, 0, 0, 1134, 664, 1, 0, 0, 0, 1134, 669, 1, 0, 0, 0, 1134, 674, 1, 0, 0, 0, 1134, 679, 1, 0, 0, 0, 1134, 684, 1, 0, 0, 0, 1134, 689, 1, 0, 0, 0, 1134, 694, 1, 0, 0, 0, 1134, 699, 1, 0, 0, 0, 1134, 704, 1, 0, 0, 0, 1134, 709, 1, 0, 0, 0, 1134, 714, 1, 0, 0, 0, 1134, 719, 1, 0, 0, 0, 1134, 724, 1, 0, 0, 0, 1134, 729, 1, 0, 0, 0, 1134, 734, 1, 0, 0, 0, 1134, 739, 1, 0, 0, 0, 1134, 744, 1, 0, 0, 0, 1134, 749, 1, 0, 0, 0, 1134, 754, 1, 0, 0, 0, 1134, 759, 1, 0, 0, 0, 1134, 764, 1, 0, 0, 0, 1134, 769, 1, 0, 0, 0, 1134, 774, 1, 0, 0, 0, 1134, 779, 1, 0, 0, 0, 1134, 784, 1, 0, 0, 0, 1134, 789, 1, 0, 0, 0, 1134, 794, 1, 0, 0, 0, 1134, 799, 1, 0, 0, 0, 1134, 804, 1, 0, 0, 0, 1134, 809, 1, 0, 0, 0, 1134, 814, 1, 0, 0, 0, 1134, 819, 1, 0, 0, 0, 1134, 824, 1, 0, 0, 0, 1134, 829, 1, 0, 0, 0, 1134, 834, 1, 0, 0, 0, 1134, 839, 1, 0, 0, 0, 1134, 844, 1, 0, 0, 0, 1134, 849, 1, 0, 0, 0, 1134, 854, 1, 0, 0, 0, 1134, 859, 1, 0, 0, 0, 1134, 864, 1, 0, 0, 0, 1134, 869, 1, 0, 0, 0, 1134, 874, 1, 0, 0, 0, 1134, 879, 1, 0, 0, 0, 1134, 884, 1, 0, 0, 0, 1134, 889, 1, 0, 0, 0, 1134, 894, 1, 0, 0, 0, 1134, 899, 1, 0, 0, 0, 1134, 904, 1, 0, 0, 0, 1134, 909, 1, 0, 0, 0, 1134, 914, 1, 0, 0, 0, 1134, 919, 1, 0, 0, 0, 1134, 924, 1, 0, 0, 0, 1134, 929, 1, 0, 0, 0, 1134, 934, 1, 0, 0, 0, 1134, 939, 1, 0, 0, 0, 1134, 944, 1, 0, 0, 0, 1134, 949, 1, 0, 0, 0, 1134, 954, 1, 0, 0, 0, 1134, 959, 1, 0, 0, 0, 1134, 964, 1, 0, 0, 0, 1134, 969, 1, 0, 0, 0, 1134, 974, 1, 0, 0, 0, 1134, 979, 1, 0, 0, 0, 1134, 984, 1, 0, 0, 0, 1134, 989, 1, 0, 0, 0, 1134, 994, 1, 0, 0, 0, 1134, 999, 1, 0, 0, 0, 1134, 1004, 1, 0, 0, 0, 1134, 1009, 1, 0, 0, 0, 1134, 1014, 1, 0, 0, 0, 1134, 1019, 1, 0, 0, 0, 1134, 1024, 1, 0, 0, 0, 1134, 1029, 1, 0, 0, 0, 1134, 1034, 1, 0, 0, 0, 1134, 1039, 1, 0, 0, 0, 1134, 1044, 1, 0, 0, 0, 1134, 1049, 1, 0, 0, 0, 1134, 1054, 1, 0, 0, 0, 1134, 1059, 1, 0, 0, 0, 1134, 1064, 1, 0, 0, 0, 1134, 1069, 1, 0, 0, 0, 1134, 1074, 1, 0, 0, 0, 1134, 1079, 1, 0, 0, 0, 1134, 1084, 1, 0, 0, 0, 1134, 1089, 1, 0, 0, 0, 1134, 1094, 1, 0, 0, 0, 1134, 1099, 1, 0, 0, 0, 1134, 1104, 1, 0, 0, 0, 1134, 1109, 1, 0, 0, 0, 1134, 1114, 1, 0, 0, 0, 1134, 1119, 1, 0, 0, 0, 1134, 1124, 1, 0, 0, 0, 1134, 1129, 1, 0, 0, 0, 1135, 49, 1, 0, 0, 0, 1136, 1137, 3, 32, 16, 0, 1137, 1138, 5, 0, 0, 1, 1138, 1139, 6, 25, -1, 0, 1139, 51, 1, 0, 0, 0, 44, 59, 67, 75, 77, 84, 94, 104, 109, 119, 129, 131, 144, 150, 152, 167, 169, 190, 192, 225, 227, 246, 253, 262, 281, 297, 299, 312, 314, 327, 329, 346, 348, 357, 365, 370, 384, 394, 407, 410, 417, 425, 429, 432, 1134] \ No newline at end of file diff --git a/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs b/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs index 615d7ea1a..7fd0ac2a4 100644 --- a/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs +++ b/Sources/AngouriMath/Core/Antlr/AngouriMathParser.cs @@ -1643,12 +1643,19 @@ internal partial class And_expressionContext : ParserRuleContext { public Entity value; public Negate_expressionContext m1; public Negate_expressionContext m2; + public Quantified_expressionContext q; [System.Diagnostics.DebuggerNonUserCode] public Negate_expressionContext[] negate_expression() { return GetRuleContexts(); } [System.Diagnostics.DebuggerNonUserCode] public Negate_expressionContext negate_expression(int i) { return GetRuleContext(i); } + [System.Diagnostics.DebuggerNonUserCode] public Quantified_expressionContext[] quantified_expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public Quantified_expressionContext quantified_expression(int i) { + return GetRuleContext(i); + } public And_expressionContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -1670,6 +1677,7 @@ public override void ExitRule(IParseTreeListener listener) { public And_expressionContext and_expression() { And_expressionContext _localctx = new And_expressionContext(Context, State); EnterRule(_localctx, 22, RULE_and_expression); + int _la; try { int _alt; EnterOuterAlt(_localctx, 1); @@ -1677,16 +1685,16 @@ public And_expressionContext and_expression() { State = 283; _localctx.m1 = negate_expression(); _localctx.value = _localctx.m1.value; - State = 295; + State = 299; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,25,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - State = 293; + State = 297; ErrorHandler.Sync(this); - switch (TokenStream.LA(1)) { - case T__32: + switch ( Interpreter.AdaptivePredict(TokenStream,24,Context) ) { + case 1: { State = 285; Match(T__32); @@ -1695,7 +1703,7 @@ public And_expressionContext and_expression() { _localctx.value = _localctx.value & _localctx.m2.value; } break; - case T__33: + case 2: { State = 289; Match(T__33); @@ -1704,12 +1712,26 @@ public And_expressionContext and_expression() { _localctx.value = _localctx.value & _localctx.m2.value; } break; - default: - throw new NoViableAltException(this); + case 3: + { + State = 293; + _la = TokenStream.LA(1); + if ( !(_la==T__32 || _la==T__33) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + State = 294; + _localctx.q = quantified_expression(); + _localctx.value = _localctx.value & _localctx.q.value; + } + break; } } } - State = 297; + State = 301; ErrorHandler.Sync(this); _alt = Interpreter.AdaptivePredict(TokenStream,25,Context); } @@ -1730,12 +1752,19 @@ internal partial class Xor_expressionContext : ParserRuleContext { public Entity value; public And_expressionContext m1; public And_expressionContext m2; + public Quantified_expressionContext q; [System.Diagnostics.DebuggerNonUserCode] public And_expressionContext[] and_expression() { return GetRuleContexts(); } [System.Diagnostics.DebuggerNonUserCode] public And_expressionContext and_expression(int i) { return GetRuleContext(i); } + [System.Diagnostics.DebuggerNonUserCode] public Quantified_expressionContext[] quantified_expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public Quantified_expressionContext quantified_expression(int i) { + return GetRuleContext(i); + } public Xor_expressionContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -1761,27 +1790,42 @@ public Xor_expressionContext xor_expression() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 298; + State = 302; _localctx.m1 = and_expression(); _localctx.value = _localctx.m1.value; - State = 306; + State = 314; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,26,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,27,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - { - State = 300; - Match(T__34); - State = 301; - _localctx.m2 = and_expression(); - _localctx.value = _localctx.value ^ _localctx.m2.value; + State = 312; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,26,Context) ) { + case 1: + { + State = 304; + Match(T__34); + State = 305; + _localctx.m2 = and_expression(); + _localctx.value = _localctx.value ^ _localctx.m2.value; + } + break; + case 2: + { + State = 308; + Match(T__34); + State = 309; + _localctx.q = quantified_expression(); + _localctx.value = _localctx.value ^ _localctx.q.value; + } + break; } } } - State = 308; + State = 316; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,26,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,27,Context); } } } @@ -1800,12 +1844,19 @@ internal partial class Or_expressionContext : ParserRuleContext { public Entity value; public Xor_expressionContext m1; public Xor_expressionContext m2; + public Quantified_expressionContext q; [System.Diagnostics.DebuggerNonUserCode] public Xor_expressionContext[] xor_expression() { return GetRuleContexts(); } [System.Diagnostics.DebuggerNonUserCode] public Xor_expressionContext xor_expression(int i) { return GetRuleContext(i); } + [System.Diagnostics.DebuggerNonUserCode] public Quantified_expressionContext[] quantified_expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public Quantified_expressionContext quantified_expression(int i) { + return GetRuleContext(i); + } public Or_expressionContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -1831,27 +1882,42 @@ public Or_expressionContext or_expression() { int _alt; EnterOuterAlt(_localctx, 1); { - State = 309; + State = 317; _localctx.m1 = xor_expression(); _localctx.value = _localctx.m1.value; - State = 317; + State = 329; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,27,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,29,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - { - State = 311; - Match(T__35); - State = 312; - _localctx.m2 = xor_expression(); - _localctx.value = _localctx.value | _localctx.m2.value; + State = 327; + ErrorHandler.Sync(this); + switch ( Interpreter.AdaptivePredict(TokenStream,28,Context) ) { + case 1: + { + State = 319; + Match(T__35); + State = 320; + _localctx.m2 = xor_expression(); + _localctx.value = _localctx.value | _localctx.m2.value; + } + break; + case 2: + { + State = 323; + Match(T__35); + State = 324; + _localctx.q = quantified_expression(); + _localctx.value = _localctx.value | _localctx.q.value; + } + break; } } } - State = 319; + State = 331; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,27,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,29,Context); } } } @@ -1870,12 +1936,19 @@ internal partial class Implies_expressionContext : ParserRuleContext { public Entity value; public Or_expressionContext m1; public Or_expressionContext m2; + public Quantified_expressionContext q; [System.Diagnostics.DebuggerNonUserCode] public Or_expressionContext[] or_expression() { return GetRuleContexts(); } [System.Diagnostics.DebuggerNonUserCode] public Or_expressionContext or_expression(int i) { return GetRuleContext(i); } + [System.Diagnostics.DebuggerNonUserCode] public Quantified_expressionContext[] quantified_expression() { + return GetRuleContexts(); + } + [System.Diagnostics.DebuggerNonUserCode] public Quantified_expressionContext quantified_expression(int i) { + return GetRuleContext(i); + } public Implies_expressionContext(ParserRuleContext parent, int invokingState) : base(parent, invokingState) { @@ -1897,48 +1970,63 @@ public override void ExitRule(IParseTreeListener listener) { public Implies_expressionContext implies_expression() { Implies_expressionContext _localctx = new Implies_expressionContext(Context, State); EnterRule(_localctx, 28, RULE_implies_expression); + int _la; try { int _alt; EnterOuterAlt(_localctx, 1); { - State = 320; + State = 332; _localctx.m1 = or_expression(); _localctx.value = _localctx.m1.value; - State = 332; + State = 348; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,29,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,31,Context); while ( _alt!=2 && _alt!=global::Antlr4.Runtime.Atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { - State = 330; + State = 346; ErrorHandler.Sync(this); - switch (TokenStream.LA(1)) { - case T__36: + switch ( Interpreter.AdaptivePredict(TokenStream,30,Context) ) { + case 1: { - State = 322; + State = 334; Match(T__36); - State = 323; + State = 335; _localctx.m2 = or_expression(); _localctx.value = _localctx.value.Implies(_localctx.m2.value); } break; - case T__37: + case 2: { - State = 326; + State = 338; Match(T__37); - State = 327; + State = 339; _localctx.m2 = or_expression(); _localctx.value = _localctx.value.Implies(_localctx.m2.value); } break; - default: - throw new NoViableAltException(this); + case 3: + { + State = 342; + _la = TokenStream.LA(1); + if ( !(_la==T__36 || _la==T__37) ) { + ErrorHandler.RecoverInline(this); + } + else { + ErrorHandler.ReportMatch(this); + Consume(); + } + State = 343; + _localctx.q = quantified_expression(); + _localctx.value = _localctx.value.Implies(_localctx.q.value); + } + break; } } } - State = 334; + State = 350; ErrorHandler.Sync(this); - _alt = Interpreter.AdaptivePredict(TokenStream,29,Context); + _alt = Interpreter.AdaptivePredict(TokenStream,31,Context); } } } @@ -1987,17 +2075,17 @@ public Provided_expressionContext provided_expression() { try { EnterOuterAlt(_localctx, 1); { - State = 335; + State = 351; _localctx.expr = implies_expression(); _localctx.value = _localctx.expr.value; - State = 341; + State = 357; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,30,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,32,Context) ) { case 1: { - State = 337; + State = 353; Match(T__38); - State = 338; + State = 354; _localctx.pred = provided_expression(); _localctx.value = _localctx.value.Provided(_localctx.pred.value); } @@ -2052,7 +2140,7 @@ public ExpressionContext expression() { ExpressionContext _localctx = new ExpressionContext(Context, State); EnterRule(_localctx, 32, RULE_expression); try { - State = 354; + State = 370; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__2: @@ -2196,17 +2284,17 @@ public ExpressionContext expression() { case VARIABLE: EnterOuterAlt(_localctx, 1); { - State = 343; + State = 359; _localctx.s = provided_expression(); _localctx.value = _localctx.s.value; - State = 349; + State = 365; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,31,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,33,Context) ) { case 1: { - State = 345; + State = 361; Match(T__39); - State = 346; + State = 362; _localctx.b = expression(); /* The parameters are read back out of an ordinary expression rather than matched as @@ -2249,7 +2337,7 @@ therefore never arrive as a Variable token at all. case T__46: EnterOuterAlt(_localctx, 2); { - State = 351; + State = 367; _localctx.q = quantified_expression(); _localctx.value = _localctx.q.value; } @@ -2307,13 +2395,13 @@ public Quantified_expressionContext quantified_expression() { try { EnterOuterAlt(_localctx, 1); { - State = 356; + State = 372; _localctx.q = quantifier_keyword(); - State = 357; + State = 373; _localctx.names = quantified_names(); - State = 358; + State = 374; Match(T__40); - State = 359; + State = 375; _localctx.b = expression(); Entity quantified = _localctx.b.value; @@ -2365,14 +2453,14 @@ public Quantifier_keywordContext quantifier_keyword() { EnterRule(_localctx, 36, RULE_quantifier_keyword); int _la; try { - State = 368; + State = 384; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__41: case T__42: EnterOuterAlt(_localctx, 1); { - State = 362; + State = 378; _la = TokenStream.LA(1); if ( !(_la==T__41 || _la==T__42) ) { ErrorHandler.RecoverInline(this); @@ -2388,7 +2476,7 @@ public Quantifier_keywordContext quantifier_keyword() { case T__44: EnterOuterAlt(_localctx, 2); { - State = 364; + State = 380; _la = TokenStream.LA(1); if ( !(_la==T__43 || _la==T__44) ) { ErrorHandler.RecoverInline(this); @@ -2404,7 +2492,7 @@ public Quantifier_keywordContext quantifier_keyword() { case T__46: EnterOuterAlt(_localctx, 3); { - State = 366; + State = 382; _la = TokenStream.LA(1); if ( !(_la==T__45 || _la==T__46) ) { ErrorHandler.RecoverInline(this); @@ -2466,23 +2554,23 @@ public Quantified_namesContext quantified_names() { try { EnterOuterAlt(_localctx, 1); { - State = 370; + State = 386; _localctx.e = in_operator(); items.Add(_localctx.e.value); - State = 378; + State = 394; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__47) { { { - State = 372; + State = 388; Match(T__47); - State = 373; + State = 389; _localctx.e = in_operator(); items.Add(_localctx.e.value); } } - State = 380; + State = 396; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -2551,28 +2639,28 @@ public Function_argumentsContext function_arguments() { try { EnterOuterAlt(_localctx, 1); { - State = 394; + State = 410; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -802489551279882216L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & 4539628424389459967L) != 0)) { { - State = 383; + State = 399; _localctx.e = expression(); _localctx.list.Add(_localctx.e.value); - State = 391; + State = 407; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__47) { { { - State = 385; + State = 401; Match(T__47); - State = 386; + State = 402; _localctx.e = expression(); _localctx.list.Add(_localctx.e.value); } } - State = 393; + State = 409; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -2627,12 +2715,12 @@ public Set_itemsContext set_items() { try { EnterOuterAlt(_localctx, 1); { - State = 416; + State = 432; ErrorHandler.Sync(this); _la = TokenStream.LA(1); if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -802489551279882024L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & 4539628424389459967L) != 0)) { { - State = 401; + State = 417; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__2: @@ -2781,7 +2869,7 @@ public Set_itemsContext set_items() { case NAN: case VARIABLE: { - State = 396; + State = 412; _localctx.e = expression(); _localctx.list.Add(_localctx.e.value); } @@ -2789,7 +2877,7 @@ public Set_itemsContext set_items() { case T__5: case T__6: { - State = 399; + State = 415; _la = TokenStream.LA(1); if ( !(_la==T__5 || _la==T__6) ) { ErrorHandler.RecoverInline(this); @@ -2804,15 +2892,15 @@ public Set_itemsContext set_items() { default: throw new NoViableAltException(this); } - State = 413; + State = 429; ErrorHandler.Sync(this); _la = TokenStream.LA(1); while (_la==T__47) { { { - State = 403; + State = 419; Match(T__47); - State = 409; + State = 425; ErrorHandler.Sync(this); switch (TokenStream.LA(1)) { case T__2: @@ -2961,7 +3049,7 @@ public Set_itemsContext set_items() { case NAN: case VARIABLE: { - State = 404; + State = 420; _localctx.e = expression(); _localctx.list.Add(_localctx.e.value); } @@ -2969,7 +3057,7 @@ public Set_itemsContext set_items() { case T__5: case T__6: { - State = 407; + State = 423; _la = TokenStream.LA(1); if ( !(_la==T__5 || _la==T__6) ) { ErrorHandler.RecoverInline(this); @@ -2986,7 +3074,7 @@ public Set_itemsContext set_items() { } } } - State = 415; + State = 431; ErrorHandler.Sync(this); _la = TokenStream.LA(1); } @@ -3040,12 +3128,12 @@ public Interval_argumentsContext interval_arguments() { try { EnterOuterAlt(_localctx, 1); { - State = 418; + State = 434; _localctx.from = expression(); _localctx.couple.from = _localctx.from.value; - State = 420; + State = 436; Match(T__48); - State = 421; + State = 437; _localctx.to = expression(); _localctx.couple.to = _localctx.to.value; } @@ -3095,12 +3183,12 @@ public Cset_argumentsContext cset_arguments() { try { EnterOuterAlt(_localctx, 1); { - State = 424; + State = 440; _localctx.variable = expression(); _localctx.couple.variable = _localctx.variable.value; - State = 426; + State = 442; Match(T__40); - State = 427; + State = 443; _localctx.predicate = expression(); _localctx.couple.predicate = _localctx.predicate.value; } @@ -3174,13 +3262,13 @@ public AtomContext atom() { AtomContext _localctx = new AtomContext(Context, State); EnterRule(_localctx, 48, RULE_atom); try { - State = 1118; + State = 1134; ErrorHandler.Sync(this); - switch ( Interpreter.AdaptivePredict(TokenStream,41,Context) ) { + switch ( Interpreter.AdaptivePredict(TokenStream,43,Context) ) { case 1: EnterOuterAlt(_localctx, 1); { - State = 430; + State = 446; Match(T__49); _localctx.value = Entity.Number.Real.PositiveInfinity; } @@ -3188,7 +3276,7 @@ public AtomContext atom() { case 2: EnterOuterAlt(_localctx, 2); { - State = 432; + State = 448; Match(T__50); _localctx.value = Entity.Number.Real.NegativeInfinity; } @@ -3196,7 +3284,7 @@ public AtomContext atom() { case 3: EnterOuterAlt(_localctx, 3); { - State = 434; + State = 450; Match(NAN); _localctx.value = Entity.Number.Real.NaN; } @@ -3204,7 +3292,7 @@ public AtomContext atom() { case 4: EnterOuterAlt(_localctx, 4); { - State = 436; + State = 452; _localctx._NUMBER = Match(NUMBER); _localctx.value = Entity.Number.Complex.Parse((_localctx._NUMBER!=null?_localctx._NUMBER.Text:null)); } @@ -3212,7 +3300,7 @@ public AtomContext atom() { case 5: EnterOuterAlt(_localctx, 5); { - State = 438; + State = 454; _localctx._BOOLEAN = Match(BOOLEAN); _localctx.value = Entity.Boolean.Parse((_localctx._BOOLEAN!=null?_localctx._BOOLEAN.Text:null)); } @@ -3220,7 +3308,7 @@ public AtomContext atom() { case 6: EnterOuterAlt(_localctx, 6); { - State = 440; + State = 456; _localctx._SPECIALSET = Match(SPECIALSET); _localctx.value = Entity.Set.SpecialSet.Create((_localctx._SPECIALSET!=null?_localctx._SPECIALSET.Text:null)); } @@ -3228,7 +3316,7 @@ public AtomContext atom() { case 7: EnterOuterAlt(_localctx, 7); { - State = 442; + State = 458; _localctx._VARIABLE = Match(VARIABLE); // There is no set of natural numbers here, because the name means {0, 1, 2, ...} to @@ -3245,11 +3333,11 @@ public AtomContext atom() { case 8: EnterOuterAlt(_localctx, 8); { - State = 444; + State = 460; Match(T__51); - State = 445; + State = 461; _localctx._expression = expression(); - State = 446; + State = 462; Match(T__52); _localctx.value = _localctx._expression.value.Abs(); } @@ -3257,9 +3345,9 @@ public AtomContext atom() { case 9: EnterOuterAlt(_localctx, 9); { - State = 449; + State = 465; Match(T__53); - State = 450; + State = 466; _localctx.p = atom(); _localctx.value = MathS.Sets.Card(_localctx.p.value); } @@ -3267,11 +3355,11 @@ public AtomContext atom() { case 10: EnterOuterAlt(_localctx, 10); { - State = 453; + State = 469; Match(T__54); - State = 454; + State = 470; _localctx._function_arguments = function_arguments(); - State = 455; + State = 471; Match(T__55); _localctx.value = ParsingHelpers.TryBuildingMatrix(_localctx._function_arguments.list).T; } @@ -3279,11 +3367,11 @@ public AtomContext atom() { case 11: EnterOuterAlt(_localctx, 11); { - State = 458; + State = 474; Match(T__54); - State = 459; + State = 475; _localctx._function_arguments = function_arguments(); - State = 460; + State = 476; Match(T__56); _localctx.value = ParsingHelpers.TryBuildingMatrix(_localctx._function_arguments.list); } @@ -3291,11 +3379,11 @@ public AtomContext atom() { case 12: EnterOuterAlt(_localctx, 12); { - State = 463; + State = 479; Match(T__29); - State = 464; + State = 480; _localctx._interval_arguments = interval_arguments(); - State = 465; + State = 481; Match(T__30); _localctx.value = new Entity.Set.Interval(_localctx._interval_arguments.couple.from, false, _localctx._interval_arguments.couple.to, false); } @@ -3303,11 +3391,11 @@ public AtomContext atom() { case 13: EnterOuterAlt(_localctx, 13); { - State = 468; + State = 484; Match(T__54); - State = 469; + State = 485; _localctx._interval_arguments = interval_arguments(); - State = 470; + State = 486; Match(T__30); _localctx.value = new Entity.Set.Interval(_localctx._interval_arguments.couple.from, true, _localctx._interval_arguments.couple.to, false); } @@ -3315,11 +3403,11 @@ public AtomContext atom() { case 14: EnterOuterAlt(_localctx, 14); { - State = 473; + State = 489; Match(T__54); - State = 474; + State = 490; _localctx._interval_arguments = interval_arguments(); - State = 475; + State = 491; Match(T__56); _localctx.value = new Entity.Set.Interval(_localctx._interval_arguments.couple.from, true, _localctx._interval_arguments.couple.to, true); } @@ -3327,11 +3415,11 @@ public AtomContext atom() { case 15: EnterOuterAlt(_localctx, 15); { - State = 478; + State = 494; Match(T__29); - State = 479; + State = 495; _localctx._interval_arguments = interval_arguments(); - State = 480; + State = 496; Match(T__56); _localctx.value = new Entity.Set.Interval(_localctx._interval_arguments.couple.from, false, _localctx._interval_arguments.couple.to, true); } @@ -3339,11 +3427,11 @@ public AtomContext atom() { case 16: EnterOuterAlt(_localctx, 16); { - State = 483; + State = 499; Match(T__29); - State = 484; + State = 500; _localctx._expression = expression(); - State = 485; + State = 501; Match(T__30); _localctx.value = _localctx._expression.value; } @@ -3351,11 +3439,11 @@ public AtomContext atom() { case 17: EnterOuterAlt(_localctx, 17); { - State = 488; + State = 504; Match(T__57); - State = 489; + State = 505; _localctx.cset_args = cset_arguments(); - State = 490; + State = 506; Match(T__58); _localctx.value = new ConditionalSet(_localctx.cset_args.couple.variable, _localctx.cset_args.couple.predicate); } @@ -3363,11 +3451,11 @@ public AtomContext atom() { case 18: EnterOuterAlt(_localctx, 18); { - State = 493; + State = 509; Match(T__57); - State = 494; + State = 510; _localctx.items = set_items(); - State = 495; + State = 511; Match(T__58); _localctx.value = _localctx.items.list.Contains(null) ? AngouriMath.Core.PatternOperator.Set(_localctx.items.list) : new FiniteSet(_localctx.items.list.Cast()); } @@ -3375,11 +3463,11 @@ public AtomContext atom() { case 19: EnterOuterAlt(_localctx, 19); { - State = 498; + State = 514; Match(T__59); - State = 499; + State = 515; _localctx.args = function_arguments(); - State = 500; + State = 516; Match(T__30); _localctx.value = Assert("log", (1, 2), _localctx.args.list.Count) ? MathS.Log(10, _localctx.args.list[0]) : MathS.Log(_localctx.args.list[0], _localctx.args.list[1]); } @@ -3387,11 +3475,11 @@ public AtomContext atom() { case 20: EnterOuterAlt(_localctx, 20); { - State = 503; + State = 519; Match(T__60); - State = 504; + State = 520; _localctx.args = function_arguments(); - State = 505; + State = 521; Match(T__30); Assert("log10", 1, _localctx.args.list.Count); _localctx.value = MathS.Log(10, _localctx.args.list[0]); } @@ -3399,11 +3487,11 @@ public AtomContext atom() { case 21: EnterOuterAlt(_localctx, 21); { - State = 508; + State = 524; Match(T__61); - State = 509; + State = 525; _localctx.args = function_arguments(); - State = 510; + State = 526; Match(T__30); Assert("log2", 1, _localctx.args.list.Count); _localctx.value = MathS.Log(2, _localctx.args.list[0]); } @@ -3411,11 +3499,11 @@ public AtomContext atom() { case 22: EnterOuterAlt(_localctx, 22); { - State = 513; + State = 529; Match(T__62); - State = 514; + State = 530; _localctx.args = function_arguments(); - State = 515; + State = 531; Match(T__30); Assert("pow", 2, _localctx.args.list.Count); _localctx.value = MathS.Pow(_localctx.args.list[0], _localctx.args.list[1]); } @@ -3423,11 +3511,11 @@ public AtomContext atom() { case 23: EnterOuterAlt(_localctx, 23); { - State = 518; + State = 534; Match(T__63); - State = 519; + State = 535; _localctx.args = function_arguments(); - State = 520; + State = 536; Match(T__30); Assert("sqrt", 1, _localctx.args.list.Count); _localctx.value = MathS.Sqrt(_localctx.args.list[0]); } @@ -3435,11 +3523,11 @@ public AtomContext atom() { case 24: EnterOuterAlt(_localctx, 24); { - State = 523; + State = 539; Match(T__64); - State = 524; + State = 540; _localctx.args = function_arguments(); - State = 525; + State = 541; Match(T__30); Assert("cbrt", 1, _localctx.args.list.Count); _localctx.value = MathS.Cbrt(_localctx.args.list[0]); } @@ -3447,11 +3535,11 @@ public AtomContext atom() { case 25: EnterOuterAlt(_localctx, 25); { - State = 528; + State = 544; Match(T__65); - State = 529; + State = 545; _localctx.args = function_arguments(); - State = 530; + State = 546; Match(T__30); Assert("sqr", 1, _localctx.args.list.Count); _localctx.value = MathS.Sqr(_localctx.args.list[0]); } @@ -3459,11 +3547,11 @@ public AtomContext atom() { case 26: EnterOuterAlt(_localctx, 26); { - State = 533; + State = 549; Match(T__66); - State = 534; + State = 550; _localctx.args = function_arguments(); - State = 535; + State = 551; Match(T__30); Assert("ln", 1, _localctx.args.list.Count); _localctx.value = MathS.Ln(_localctx.args.list[0]); } @@ -3471,11 +3559,11 @@ public AtomContext atom() { case 27: EnterOuterAlt(_localctx, 27); { - State = 538; + State = 554; Match(T__67); - State = 539; + State = 555; _localctx.args = function_arguments(); - State = 540; + State = 556; Match(T__30); Assert("exp", 1, _localctx.args.list.Count); _localctx.value = MathS.Pow(Entity.Constant.EulerIntrinsic, _localctx.args.list[0]); } @@ -3483,11 +3571,11 @@ public AtomContext atom() { case 28: EnterOuterAlt(_localctx, 28); { - State = 543; + State = 559; Match(T__68); - State = 544; + State = 560; _localctx.args = function_arguments(); - State = 545; + State = 561; Match(T__30); Assert("sin", 1, _localctx.args.list.Count); _localctx.value = MathS.Sin(_localctx.args.list[0]); } @@ -3495,11 +3583,11 @@ public AtomContext atom() { case 29: EnterOuterAlt(_localctx, 29); { - State = 548; + State = 564; Match(T__69); - State = 549; + State = 565; _localctx.args = function_arguments(); - State = 550; + State = 566; Match(T__30); Assert("cos", 1, _localctx.args.list.Count); _localctx.value = MathS.Cos(_localctx.args.list[0]); } @@ -3507,11 +3595,11 @@ public AtomContext atom() { case 30: EnterOuterAlt(_localctx, 30); { - State = 553; + State = 569; Match(T__70); - State = 554; + State = 570; _localctx.args = function_arguments(); - State = 555; + State = 571; Match(T__30); Assert("tan", 1, _localctx.args.list.Count); _localctx.value = MathS.Tan(_localctx.args.list[0]); } @@ -3519,11 +3607,11 @@ public AtomContext atom() { case 31: EnterOuterAlt(_localctx, 31); { - State = 558; + State = 574; Match(T__71); - State = 559; + State = 575; _localctx.args = function_arguments(); - State = 560; + State = 576; Match(T__30); Assert("cotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Cotan(_localctx.args.list[0]); } @@ -3531,11 +3619,11 @@ public AtomContext atom() { case 32: EnterOuterAlt(_localctx, 32); { - State = 563; + State = 579; Match(T__72); - State = 564; + State = 580; _localctx.args = function_arguments(); - State = 565; + State = 581; Match(T__30); Assert("cotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Cotan(_localctx.args.list[0]); } @@ -3543,11 +3631,11 @@ public AtomContext atom() { case 33: EnterOuterAlt(_localctx, 33); { - State = 568; + State = 584; Match(T__73); - State = 569; + State = 585; _localctx.args = function_arguments(); - State = 570; + State = 586; Match(T__30); Assert("sec", 1, _localctx.args.list.Count); _localctx.value = MathS.Sec(_localctx.args.list[0]); } @@ -3555,11 +3643,11 @@ public AtomContext atom() { case 34: EnterOuterAlt(_localctx, 34); { - State = 573; + State = 589; Match(T__74); - State = 574; + State = 590; _localctx.args = function_arguments(); - State = 575; + State = 591; Match(T__30); Assert("cosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Cosec(_localctx.args.list[0]); } @@ -3567,11 +3655,11 @@ public AtomContext atom() { case 35: EnterOuterAlt(_localctx, 35); { - State = 578; + State = 594; Match(T__75); - State = 579; + State = 595; _localctx.args = function_arguments(); - State = 580; + State = 596; Match(T__30); Assert("cosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Cosec(_localctx.args.list[0]); } @@ -3579,11 +3667,11 @@ public AtomContext atom() { case 36: EnterOuterAlt(_localctx, 36); { - State = 583; + State = 599; Match(T__76); - State = 584; + State = 600; _localctx.args = function_arguments(); - State = 585; + State = 601; Match(T__30); Assert("arcsin", 1, _localctx.args.list.Count); _localctx.value = MathS.Arcsin(_localctx.args.list[0]); } @@ -3591,11 +3679,11 @@ public AtomContext atom() { case 37: EnterOuterAlt(_localctx, 37); { - State = 588; + State = 604; Match(T__77); - State = 589; + State = 605; _localctx.args = function_arguments(); - State = 590; + State = 606; Match(T__30); Assert("arccos", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccos(_localctx.args.list[0]); } @@ -3603,11 +3691,11 @@ public AtomContext atom() { case 38: EnterOuterAlt(_localctx, 38); { - State = 593; + State = 609; Match(T__78); - State = 594; + State = 610; _localctx.args = function_arguments(); - State = 595; + State = 611; Match(T__30); Assert("arctan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arctan(_localctx.args.list[0]); } @@ -3615,11 +3703,11 @@ public AtomContext atom() { case 39: EnterOuterAlt(_localctx, 39); { - State = 598; + State = 614; Match(T__79); - State = 599; + State = 615; _localctx.args = function_arguments(); - State = 600; + State = 616; Match(T__30); Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccotan(_localctx.args.list[0]); } @@ -3627,11 +3715,11 @@ public AtomContext atom() { case 40: EnterOuterAlt(_localctx, 40); { - State = 603; + State = 619; Match(T__80); - State = 604; + State = 620; _localctx.args = function_arguments(); - State = 605; + State = 621; Match(T__30); Assert("arcsec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arcsec(_localctx.args.list[0]); } @@ -3639,11 +3727,11 @@ public AtomContext atom() { case 41: EnterOuterAlt(_localctx, 41); { - State = 608; + State = 624; Match(T__81); - State = 609; + State = 625; _localctx.args = function_arguments(); - State = 610; + State = 626; Match(T__30); Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccosec(_localctx.args.list[0]); } @@ -3651,11 +3739,11 @@ public AtomContext atom() { case 42: EnterOuterAlt(_localctx, 42); { - State = 613; + State = 629; Match(T__82); - State = 614; + State = 630; _localctx.args = function_arguments(); - State = 615; + State = 631; Match(T__30); Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccosec(_localctx.args.list[0]); } @@ -3663,11 +3751,11 @@ public AtomContext atom() { case 43: EnterOuterAlt(_localctx, 43); { - State = 618; + State = 634; Match(T__83); - State = 619; + State = 635; _localctx.args = function_arguments(); - State = 620; + State = 636; Match(T__30); Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccosec(_localctx.args.list[0]); } @@ -3675,11 +3763,11 @@ public AtomContext atom() { case 44: EnterOuterAlt(_localctx, 44); { - State = 623; + State = 639; Match(T__84); - State = 624; + State = 640; _localctx.args = function_arguments(); - State = 625; + State = 641; Match(T__30); Assert("arcsin", 1, _localctx.args.list.Count); _localctx.value = MathS.Arcsin(_localctx.args.list[0]); } @@ -3687,11 +3775,11 @@ public AtomContext atom() { case 45: EnterOuterAlt(_localctx, 45); { - State = 628; + State = 644; Match(T__85); - State = 629; + State = 645; _localctx.args = function_arguments(); - State = 630; + State = 646; Match(T__30); Assert("arccos", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccos(_localctx.args.list[0]); } @@ -3699,11 +3787,11 @@ public AtomContext atom() { case 46: EnterOuterAlt(_localctx, 46); { - State = 633; + State = 649; Match(T__86); - State = 634; + State = 650; _localctx.args = function_arguments(); - State = 635; + State = 651; Match(T__30); Assert("arctan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arctan(_localctx.args.list[0]); } @@ -3711,11 +3799,11 @@ public AtomContext atom() { case 47: EnterOuterAlt(_localctx, 47); { - State = 638; + State = 654; Match(T__87); - State = 639; + State = 655; _localctx.args = function_arguments(); - State = 640; + State = 656; Match(T__30); Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccotan(_localctx.args.list[0]); } @@ -3723,11 +3811,11 @@ public AtomContext atom() { case 48: EnterOuterAlt(_localctx, 48); { - State = 643; + State = 659; Match(T__88); - State = 644; + State = 660; _localctx.args = function_arguments(); - State = 645; + State = 661; Match(T__30); Assert("arcsec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arcsec(_localctx.args.list[0]); } @@ -3735,11 +3823,11 @@ public AtomContext atom() { case 49: EnterOuterAlt(_localctx, 49); { - State = 648; + State = 664; Match(T__89); - State = 649; + State = 665; _localctx.args = function_arguments(); - State = 650; + State = 666; Match(T__30); Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccosec(_localctx.args.list[0]); } @@ -3747,11 +3835,11 @@ public AtomContext atom() { case 50: EnterOuterAlt(_localctx, 50); { - State = 653; + State = 669; Match(T__90); - State = 654; + State = 670; _localctx.args = function_arguments(); - State = 655; + State = 671; Match(T__30); Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccotan(_localctx.args.list[0]); } @@ -3759,11 +3847,11 @@ public AtomContext atom() { case 51: EnterOuterAlt(_localctx, 51); { - State = 658; + State = 674; Match(T__91); - State = 659; + State = 675; _localctx.args = function_arguments(); - State = 660; + State = 676; Match(T__30); Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Arccotan(_localctx.args.list[0]); } @@ -3771,11 +3859,11 @@ public AtomContext atom() { case 52: EnterOuterAlt(_localctx, 52); { - State = 663; + State = 679; Match(T__92); - State = 664; + State = 680; _localctx.args = function_arguments(); - State = 665; + State = 681; Match(T__30); Assert("sin", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Sinh(_localctx.args.list[0]); } @@ -3783,11 +3871,11 @@ public AtomContext atom() { case 53: EnterOuterAlt(_localctx, 53); { - State = 668; + State = 684; Match(T__93); - State = 669; + State = 685; _localctx.args = function_arguments(); - State = 670; + State = 686; Match(T__30); Assert("sin", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Sinh(_localctx.args.list[0]); } @@ -3795,11 +3883,11 @@ public AtomContext atom() { case 54: EnterOuterAlt(_localctx, 54); { - State = 673; + State = 689; Match(T__94); - State = 674; + State = 690; _localctx.args = function_arguments(); - State = 675; + State = 691; Match(T__30); Assert("cos", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cosh(_localctx.args.list[0]); } @@ -3807,11 +3895,11 @@ public AtomContext atom() { case 55: EnterOuterAlt(_localctx, 55); { - State = 678; + State = 694; Match(T__95); - State = 679; + State = 695; _localctx.args = function_arguments(); - State = 680; + State = 696; Match(T__30); Assert("cos", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cosh(_localctx.args.list[0]); } @@ -3819,11 +3907,11 @@ public AtomContext atom() { case 56: EnterOuterAlt(_localctx, 56); { - State = 683; + State = 699; Match(T__96); - State = 684; + State = 700; _localctx.args = function_arguments(); - State = 685; + State = 701; Match(T__30); Assert("tan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Tanh(_localctx.args.list[0]); } @@ -3831,11 +3919,11 @@ public AtomContext atom() { case 57: EnterOuterAlt(_localctx, 57); { - State = 688; + State = 704; Match(T__97); - State = 689; + State = 705; _localctx.args = function_arguments(); - State = 690; + State = 706; Match(T__30); Assert("tan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Tanh(_localctx.args.list[0]); } @@ -3843,11 +3931,11 @@ public AtomContext atom() { case 58: EnterOuterAlt(_localctx, 58); { - State = 693; + State = 709; Match(T__98); - State = 694; + State = 710; _localctx.args = function_arguments(); - State = 695; + State = 711; Match(T__30); Assert("cotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cotanh(_localctx.args.list[0]); } @@ -3855,11 +3943,11 @@ public AtomContext atom() { case 59: EnterOuterAlt(_localctx, 59); { - State = 698; + State = 714; Match(T__99); - State = 699; + State = 715; _localctx.args = function_arguments(); - State = 700; + State = 716; Match(T__30); Assert("cotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cotanh(_localctx.args.list[0]); } @@ -3867,11 +3955,11 @@ public AtomContext atom() { case 60: EnterOuterAlt(_localctx, 60); { - State = 703; + State = 719; Match(T__100); - State = 704; + State = 720; _localctx.args = function_arguments(); - State = 705; + State = 721; Match(T__30); Assert("cotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cotanh(_localctx.args.list[0]); } @@ -3879,11 +3967,11 @@ public AtomContext atom() { case 61: EnterOuterAlt(_localctx, 61); { - State = 708; + State = 724; Match(T__101); - State = 709; + State = 725; _localctx.args = function_arguments(); - State = 710; + State = 726; Match(T__30); Assert("sec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Sech(_localctx.args.list[0]); } @@ -3891,11 +3979,11 @@ public AtomContext atom() { case 62: EnterOuterAlt(_localctx, 62); { - State = 713; + State = 729; Match(T__102); - State = 714; + State = 730; _localctx.args = function_arguments(); - State = 715; + State = 731; Match(T__30); Assert("sec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Sech(_localctx.args.list[0]); } @@ -3903,11 +3991,11 @@ public AtomContext atom() { case 63: EnterOuterAlt(_localctx, 63); { - State = 718; + State = 734; Match(T__103); - State = 719; + State = 735; _localctx.args = function_arguments(); - State = 720; + State = 736; Match(T__30); Assert("cosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cosech(_localctx.args.list[0]); } @@ -3915,11 +4003,11 @@ public AtomContext atom() { case 64: EnterOuterAlt(_localctx, 64); { - State = 723; + State = 739; Match(T__104); - State = 724; + State = 740; _localctx.args = function_arguments(); - State = 725; + State = 741; Match(T__30); Assert("cosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Cosech(_localctx.args.list[0]); } @@ -3927,11 +4015,11 @@ public AtomContext atom() { case 65: EnterOuterAlt(_localctx, 65); { - State = 728; + State = 744; Match(T__105); - State = 729; + State = 745; _localctx.args = function_arguments(); - State = 730; + State = 746; Match(T__30); Assert("arcsin", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsinh(_localctx.args.list[0]); } @@ -3939,11 +4027,11 @@ public AtomContext atom() { case 66: EnterOuterAlt(_localctx, 66); { - State = 733; + State = 749; Match(T__106); - State = 734; + State = 750; _localctx.args = function_arguments(); - State = 735; + State = 751; Match(T__30); Assert("arcsin", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsinh(_localctx.args.list[0]); } @@ -3951,11 +4039,11 @@ public AtomContext atom() { case 67: EnterOuterAlt(_localctx, 67); { - State = 738; + State = 754; Match(T__107); - State = 739; + State = 755; _localctx.args = function_arguments(); - State = 740; + State = 756; Match(T__30); Assert("arcsin", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsinh(_localctx.args.list[0]); } @@ -3963,11 +4051,11 @@ public AtomContext atom() { case 68: EnterOuterAlt(_localctx, 68); { - State = 743; + State = 759; Match(T__108); - State = 744; + State = 760; _localctx.args = function_arguments(); - State = 745; + State = 761; Match(T__30); throw new UnrecognizedFunctionParseException("there is no function arcsinh: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic sine is arsinh, asinh or arsh"); } @@ -3975,11 +4063,11 @@ public AtomContext atom() { case 69: EnterOuterAlt(_localctx, 69); { - State = 748; + State = 764; Match(T__109); - State = 749; + State = 765; _localctx.args = function_arguments(); - State = 750; + State = 766; Match(T__30); Assert("arccos", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosh(_localctx.args.list[0]); } @@ -3987,11 +4075,11 @@ public AtomContext atom() { case 70: EnterOuterAlt(_localctx, 70); { - State = 753; + State = 769; Match(T__110); - State = 754; + State = 770; _localctx.args = function_arguments(); - State = 755; + State = 771; Match(T__30); Assert("arccos", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosh(_localctx.args.list[0]); } @@ -3999,11 +4087,11 @@ public AtomContext atom() { case 71: EnterOuterAlt(_localctx, 71); { - State = 758; + State = 774; Match(T__111); - State = 759; + State = 775; _localctx.args = function_arguments(); - State = 760; + State = 776; Match(T__30); Assert("arccos", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosh(_localctx.args.list[0]); } @@ -4011,11 +4099,11 @@ public AtomContext atom() { case 72: EnterOuterAlt(_localctx, 72); { - State = 763; + State = 779; Match(T__112); - State = 764; + State = 780; _localctx.args = function_arguments(); - State = 765; + State = 781; Match(T__30); throw new UnrecognizedFunctionParseException("there is no function arccosh: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic cosine is arcosh, acosh or arch"); } @@ -4023,11 +4111,11 @@ public AtomContext atom() { case 73: EnterOuterAlt(_localctx, 73); { - State = 768; + State = 784; Match(T__113); - State = 769; + State = 785; _localctx.args = function_arguments(); - State = 770; + State = 786; Match(T__30); Assert("arctan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Artanh(_localctx.args.list[0]); } @@ -4035,11 +4123,11 @@ public AtomContext atom() { case 74: EnterOuterAlt(_localctx, 74); { - State = 773; + State = 789; Match(T__114); - State = 774; + State = 790; _localctx.args = function_arguments(); - State = 775; + State = 791; Match(T__30); Assert("arctan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Artanh(_localctx.args.list[0]); } @@ -4047,11 +4135,11 @@ public AtomContext atom() { case 75: EnterOuterAlt(_localctx, 75); { - State = 778; + State = 794; Match(T__115); - State = 779; + State = 795; _localctx.args = function_arguments(); - State = 780; + State = 796; Match(T__30); Assert("arctan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Artanh(_localctx.args.list[0]); } @@ -4059,11 +4147,11 @@ public AtomContext atom() { case 76: EnterOuterAlt(_localctx, 76); { - State = 783; + State = 799; Match(T__116); - State = 784; + State = 800; _localctx.args = function_arguments(); - State = 785; + State = 801; Match(T__30); throw new UnrecognizedFunctionParseException("there is no function arctanh: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic tangent is artanh, atanh or arth"); } @@ -4071,11 +4159,11 @@ public AtomContext atom() { case 77: EnterOuterAlt(_localctx, 77); { - State = 788; + State = 804; Match(T__117); - State = 789; + State = 805; _localctx.args = function_arguments(); - State = 790; + State = 806; Match(T__30); Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcotanh(_localctx.args.list[0]); } @@ -4083,11 +4171,11 @@ public AtomContext atom() { case 78: EnterOuterAlt(_localctx, 78); { - State = 793; + State = 809; Match(T__118); - State = 794; + State = 810; _localctx.args = function_arguments(); - State = 795; + State = 811; Match(T__30); Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcotanh(_localctx.args.list[0]); } @@ -4095,11 +4183,11 @@ public AtomContext atom() { case 79: EnterOuterAlt(_localctx, 79); { - State = 798; + State = 814; Match(T__119); - State = 799; + State = 815; _localctx.args = function_arguments(); - State = 800; + State = 816; Match(T__30); Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcotanh(_localctx.args.list[0]); } @@ -4107,11 +4195,11 @@ public AtomContext atom() { case 80: EnterOuterAlt(_localctx, 80); { - State = 803; + State = 819; Match(T__120); - State = 804; + State = 820; _localctx.args = function_arguments(); - State = 805; + State = 821; Match(T__30); Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcotanh(_localctx.args.list[0]); } @@ -4119,11 +4207,11 @@ public AtomContext atom() { case 81: EnterOuterAlt(_localctx, 81); { - State = 808; + State = 824; Match(T__121); - State = 809; + State = 825; _localctx.args = function_arguments(); - State = 810; + State = 826; Match(T__30); Assert("arccotan", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcotanh(_localctx.args.list[0]); } @@ -4131,11 +4219,11 @@ public AtomContext atom() { case 82: EnterOuterAlt(_localctx, 82); { - State = 813; + State = 829; Match(T__122); - State = 814; + State = 830; _localctx.args = function_arguments(); - State = 815; + State = 831; Match(T__30); throw new UnrecognizedFunctionParseException("there is no function arccotanh: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic cotangent is arcotanh, acotanh, arcoth, acoth or arcth"); } @@ -4143,11 +4231,11 @@ public AtomContext atom() { case 83: EnterOuterAlt(_localctx, 83); { - State = 818; + State = 834; Match(T__123); - State = 819; + State = 835; _localctx.args = function_arguments(); - State = 820; + State = 836; Match(T__30); Assert("arcsec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsech(_localctx.args.list[0]); } @@ -4155,11 +4243,11 @@ public AtomContext atom() { case 84: EnterOuterAlt(_localctx, 84); { - State = 823; + State = 839; Match(T__124); - State = 824; + State = 840; _localctx.args = function_arguments(); - State = 825; + State = 841; Match(T__30); Assert("arcsec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsech(_localctx.args.list[0]); } @@ -4167,11 +4255,11 @@ public AtomContext atom() { case 85: EnterOuterAlt(_localctx, 85); { - State = 828; + State = 844; Match(T__125); - State = 829; + State = 845; _localctx.args = function_arguments(); - State = 830; + State = 846; Match(T__30); Assert("arcsec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arsech(_localctx.args.list[0]); } @@ -4179,11 +4267,11 @@ public AtomContext atom() { case 86: EnterOuterAlt(_localctx, 86); { - State = 833; + State = 849; Match(T__126); - State = 834; + State = 850; _localctx.args = function_arguments(); - State = 835; + State = 851; Match(T__30); throw new UnrecognizedFunctionParseException("there is no function arcsech: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic secant is arsech, asech or arsch"); } @@ -4191,11 +4279,11 @@ public AtomContext atom() { case 87: EnterOuterAlt(_localctx, 87); { - State = 838; + State = 854; Match(T__127); - State = 839; + State = 855; _localctx.args = function_arguments(); - State = 840; + State = 856; Match(T__30); Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosech(_localctx.args.list[0]); } @@ -4203,11 +4291,11 @@ public AtomContext atom() { case 88: EnterOuterAlt(_localctx, 88); { - State = 843; + State = 859; Match(T__128); - State = 844; + State = 860; _localctx.args = function_arguments(); - State = 845; + State = 861; Match(T__30); Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosech(_localctx.args.list[0]); } @@ -4215,11 +4303,11 @@ public AtomContext atom() { case 89: EnterOuterAlt(_localctx, 89); { - State = 848; + State = 864; Match(T__129); - State = 849; + State = 865; _localctx.args = function_arguments(); - State = 850; + State = 866; Match(T__30); Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosech(_localctx.args.list[0]); } @@ -4227,11 +4315,11 @@ public AtomContext atom() { case 90: EnterOuterAlt(_localctx, 90); { - State = 853; + State = 869; Match(T__130); - State = 854; + State = 870; _localctx.args = function_arguments(); - State = 855; + State = 871; Match(T__30); throw new UnrecognizedFunctionParseException("there is no function arccosech: the inverse hyperbolic functions are area functions, not arc functions, so the inverse hyperbolic cosecant is arcosech, acosech, arcsch or acsch"); } @@ -4239,11 +4327,11 @@ public AtomContext atom() { case 91: EnterOuterAlt(_localctx, 91); { - State = 858; + State = 874; Match(T__131); - State = 859; + State = 875; _localctx.args = function_arguments(); - State = 860; + State = 876; Match(T__30); Assert("arccosec", 1, _localctx.args.list.Count); _localctx.value = MathS.Hyperbolic.Arcosech(_localctx.args.list[0]); } @@ -4251,11 +4339,11 @@ public AtomContext atom() { case 92: EnterOuterAlt(_localctx, 92); { - State = 863; + State = 879; Match(T__132); - State = 864; + State = 880; _localctx.args = function_arguments(); - State = 865; + State = 881; Match(T__30); Assert("factorial", 1, _localctx.args.list.Count); _localctx.value = MathS.Factorial(_localctx.args.list[0]); } @@ -4263,11 +4351,11 @@ public AtomContext atom() { case 93: EnterOuterAlt(_localctx, 93); { - State = 868; + State = 884; Match(T__133); - State = 869; + State = 885; _localctx.args = function_arguments(); - State = 870; + State = 886; Match(T__30); Assert("gamma", 1, _localctx.args.list.Count); _localctx.value = MathS.Gamma(_localctx.args.list[0]); } @@ -4275,11 +4363,11 @@ public AtomContext atom() { case 94: EnterOuterAlt(_localctx, 94); { - State = 873; + State = 889; Match(T__134); - State = 874; + State = 890; _localctx.args = function_arguments(); - State = 875; + State = 891; Match(T__30); if (Assert("derivative", (3, 2), _localctx.args.list.Count)) @@ -4297,11 +4385,11 @@ public AtomContext atom() { case 95: EnterOuterAlt(_localctx, 95); { - State = 878; + State = 894; Match(T__135); - State = 879; + State = 895; _localctx.args = function_arguments(); - State = 880; + State = 896; Match(T__30); if (Assert("integral", (4, 2), _localctx.args.list.Count)) @@ -4319,11 +4407,11 @@ public AtomContext atom() { case 96: EnterOuterAlt(_localctx, 96); { - State = 883; + State = 899; Match(T__136); - State = 884; + State = 900; _localctx.args = function_arguments(); - State = 885; + State = 901; Match(T__30); Assert("limit", 3, _localctx.args.list.Count); _localctx.value = MathS.Limit(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2]); } @@ -4331,11 +4419,11 @@ public AtomContext atom() { case 97: EnterOuterAlt(_localctx, 97); { - State = 888; + State = 904; Match(T__137); - State = 889; + State = 905; _localctx.args = function_arguments(); - State = 890; + State = 906; Match(T__30); Assert("limitleft", 3, _localctx.args.list.Count); _localctx.value = MathS.Limit(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2], AngouriMath.Core.ApproachFrom.Left); } @@ -4343,11 +4431,11 @@ public AtomContext atom() { case 98: EnterOuterAlt(_localctx, 98); { - State = 893; + State = 909; Match(T__138); - State = 894; + State = 910; _localctx.args = function_arguments(); - State = 895; + State = 911; Match(T__30); Assert("limitright", 3, _localctx.args.list.Count); _localctx.value = MathS.Limit(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2], AngouriMath.Core.ApproachFrom.Right); } @@ -4355,11 +4443,11 @@ public AtomContext atom() { case 99: EnterOuterAlt(_localctx, 99); { - State = 898; + State = 914; Match(T__139); - State = 899; + State = 915; _localctx.args = function_arguments(); - State = 900; + State = 916; Match(T__30); Assert("sum", 4, _localctx.args.list.Count); _localctx.value = MathS.Sum(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2], _localctx.args.list[3]); } @@ -4367,11 +4455,11 @@ public AtomContext atom() { case 100: EnterOuterAlt(_localctx, 100); { - State = 903; + State = 919; Match(T__140); - State = 904; + State = 920; _localctx.args = function_arguments(); - State = 905; + State = 921; Match(T__30); Assert("product", 4, _localctx.args.list.Count); _localctx.value = MathS.Product(_localctx.args.list[0], _localctx.args.list[1], _localctx.args.list[2], _localctx.args.list[3]); } @@ -4379,11 +4467,11 @@ public AtomContext atom() { case 101: EnterOuterAlt(_localctx, 101); { - State = 908; + State = 924; Match(T__141); - State = 909; + State = 925; _localctx.args = function_arguments(); - State = 910; + State = 926; Match(T__30); Assert("signum", 1, _localctx.args.list.Count); _localctx.value = MathS.Signum(_localctx.args.list[0]); } @@ -4391,11 +4479,11 @@ public AtomContext atom() { case 102: EnterOuterAlt(_localctx, 102); { - State = 913; + State = 929; Match(T__142); - State = 914; + State = 930; _localctx.args = function_arguments(); - State = 915; + State = 931; Match(T__30); Assert("sgn", 1, _localctx.args.list.Count); _localctx.value = MathS.Signum(_localctx.args.list[0]); } @@ -4403,11 +4491,11 @@ public AtomContext atom() { case 103: EnterOuterAlt(_localctx, 103); { - State = 918; + State = 934; Match(T__143); - State = 919; + State = 935; _localctx.args = function_arguments(); - State = 920; + State = 936; Match(T__30); Assert("sign", 1, _localctx.args.list.Count); _localctx.value = MathS.Signum(_localctx.args.list[0]); } @@ -4415,11 +4503,11 @@ public AtomContext atom() { case 104: EnterOuterAlt(_localctx, 104); { - State = 923; + State = 939; Match(T__144); - State = 924; + State = 940; _localctx.args = function_arguments(); - State = 925; + State = 941; Match(T__30); Assert("abs", 1, _localctx.args.list.Count); _localctx.value = MathS.Abs(_localctx.args.list[0]); } @@ -4427,11 +4515,11 @@ public AtomContext atom() { case 105: EnterOuterAlt(_localctx, 105); { - State = 928; + State = 944; Match(T__145); - State = 929; + State = 945; _localctx.args = function_arguments(); - State = 930; + State = 946; Match(T__30); Assert("phi", 1, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.Phi(_localctx.args.list[0]); } @@ -4439,11 +4527,11 @@ public AtomContext atom() { case 106: EnterOuterAlt(_localctx, 106); { - State = 933; + State = 949; Match(T__146); - State = 934; + State = 950; _localctx.args = function_arguments(); - State = 935; + State = 951; Match(T__30); Assert("prime", 1, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.Prime(_localctx.args.list[0]); } @@ -4451,11 +4539,11 @@ public AtomContext atom() { case 107: EnterOuterAlt(_localctx, 107); { - State = 938; + State = 954; Match(T__147); - State = 939; + State = 955; _localctx.args = function_arguments(); - State = 940; + State = 956; Match(T__30); Assert("valuation", 2, _localctx.args.list.Count); _localctx.value = MathS.NumberTheory.Valuation(_localctx.args.list[0], _localctx.args.list[1]); } @@ -4463,11 +4551,11 @@ public AtomContext atom() { case 108: EnterOuterAlt(_localctx, 108); { - State = 943; + State = 959; Match(T__148); - State = 944; + State = 960; _localctx.args = function_arguments(); - State = 945; + State = 961; Match(T__30); Assert("card", 1, _localctx.args.list.Count); _localctx.value = MathS.Sets.Card(_localctx.args.list[0]); } @@ -4475,11 +4563,11 @@ public AtomContext atom() { case 109: EnterOuterAlt(_localctx, 109); { - State = 948; + State = 964; Match(T__149); - State = 949; + State = 965; _localctx.args = function_arguments(); - State = 950; + State = 966; Match(T__30); Assert("powerset", 1, _localctx.args.list.Count); _localctx.value = MathS.Sets.PowerSet(_localctx.args.list[0]); } @@ -4487,11 +4575,11 @@ public AtomContext atom() { case 110: EnterOuterAlt(_localctx, 110); { - State = 953; + State = 969; Match(T__150); - State = 954; + State = 970; _localctx.args = function_arguments(); - State = 955; + State = 971; Match(T__30); Assert("union", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } unionRange ? MathS.Sets.IndexedUnion(_localctx.args.list[0], unionRange.Element, unionRange.SupSet) : throw new InvalidArgumentParseException("union expects its second argument to say which name ranges over which set, as in union(A_i, i in I)"); } @@ -4499,11 +4587,11 @@ public AtomContext atom() { case 111: EnterOuterAlt(_localctx, 111); { - State = 958; + State = 974; Match(T__151); - State = 959; + State = 975; _localctx.args = function_arguments(); - State = 960; + State = 976; Match(T__30); Assert("intersection", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } intersectionRange ? MathS.Sets.IndexedIntersection(_localctx.args.list[0], intersectionRange.Element, intersectionRange.SupSet) : throw new InvalidArgumentParseException("intersection expects its second argument to say which name ranges over which set, as in intersection(A_i, i in I)"); } @@ -4511,11 +4599,11 @@ public AtomContext atom() { case 112: EnterOuterAlt(_localctx, 112); { - State = 963; + State = 979; Match(T__152); - State = 964; + State = 980; _localctx.args = function_arguments(); - State = 965; + State = 981; Match(T__30); Assert("complement", 2, _localctx.args.list.Count); _localctx.value = MathS.Sets.Complement(_localctx.args.list[0], _localctx.args.list[1]); } @@ -4523,11 +4611,11 @@ public AtomContext atom() { case 113: EnterOuterAlt(_localctx, 113); { - State = 968; + State = 984; Match(T__153); - State = 969; + State = 985; _localctx.args = function_arguments(); - State = 970; + State = 986; Match(T__30); Assert("image", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } imageRange ? MathS.Sets.Image(_localctx.args.list[0], imageRange.Element, imageRange.SupSet) : throw new InvalidArgumentParseException("image expects its second argument to say which name ranges over which set, as in image(f(x), x in A)"); } @@ -4535,11 +4623,11 @@ public AtomContext atom() { case 114: EnterOuterAlt(_localctx, 114); { - State = 973; + State = 989; Match(T__154); - State = 974; + State = 990; _localctx.args = function_arguments(); - State = 975; + State = 991; Match(T__30); Assert("preimage", 3, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } preimageRange ? MathS.Sets.PreImage(_localctx.args.list[0], preimageRange.Element, preimageRange.SupSet, _localctx.args.list[2]) : throw new InvalidArgumentParseException("preimage expects its second argument to say which name ranges over which set, as in preimage(f(x), x in A, Y)"); } @@ -4547,11 +4635,11 @@ public AtomContext atom() { case 115: EnterOuterAlt(_localctx, 115); { - State = 978; + State = 994; Match(T__155); - State = 979; + State = 995; _localctx.args = function_arguments(); - State = 980; + State = 996; Match(T__30); Assert("floor", 1, _localctx.args.list.Count); _localctx.value = MathS.Floor(_localctx.args.list[0]); } @@ -4559,11 +4647,11 @@ public AtomContext atom() { case 116: EnterOuterAlt(_localctx, 116); { - State = 983; + State = 999; Match(T__156); - State = 984; + State = 1000; _localctx.args = function_arguments(); - State = 985; + State = 1001; Match(T__30); Assert("ceil", 1, _localctx.args.list.Count); _localctx.value = MathS.Ceil(_localctx.args.list[0]); } @@ -4571,11 +4659,11 @@ public AtomContext atom() { case 117: EnterOuterAlt(_localctx, 117); { - State = 988; + State = 1004; Match(T__157); - State = 989; + State = 1005; _localctx.args = function_arguments(); - State = 990; + State = 1006; Match(T__30); Assert("ceiling", 1, _localctx.args.list.Count); _localctx.value = MathS.Ceil(_localctx.args.list[0]); } @@ -4583,11 +4671,11 @@ public AtomContext atom() { case 118: EnterOuterAlt(_localctx, 118); { - State = 993; + State = 1009; Match(T__158); - State = 994; + State = 1010; _localctx.args = function_arguments(); - State = 995; + State = 1011; Match(T__30); Assert("round", 1, _localctx.args.list.Count); _localctx.value = MathS.Round(_localctx.args.list[0]); } @@ -4595,11 +4683,11 @@ public AtomContext atom() { case 119: EnterOuterAlt(_localctx, 119); { - State = 998; + State = 1014; Match(T__159); - State = 999; + State = 1015; _localctx.args = function_arguments(); - State = 1000; + State = 1016; Match(T__30); AssertAtLeast("min", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Count == 1 && _localctx.args.list[0] is Entity.Set minSet ? MathS.Minimum(Variable.CreateUnique(minSet, "x"), Variable.CreateUnique(minSet, "x"), minSet) : _localctx.args.list.Count == 2 && AngouriMath.Functions.ExtremumOverSet.AsRange(_localctx.args.list[1]) is var (minVar, minOver) ? MathS.Minimum(_localctx.args.list[0], minVar, minOver) : _localctx.args.list.Aggregate((a, b) => MathS.Min(a, b)); } @@ -4607,11 +4695,11 @@ public AtomContext atom() { case 120: EnterOuterAlt(_localctx, 120); { - State = 1003; + State = 1019; Match(T__160); - State = 1004; + State = 1020; _localctx.args = function_arguments(); - State = 1005; + State = 1021; Match(T__30); AssertAtLeast("max", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Count == 1 && _localctx.args.list[0] is Entity.Set maxSet ? MathS.Maximum(Variable.CreateUnique(maxSet, "x"), Variable.CreateUnique(maxSet, "x"), maxSet) : _localctx.args.list.Count == 2 && AngouriMath.Functions.ExtremumOverSet.AsRange(_localctx.args.list[1]) is var (maxVar, maxOver) ? MathS.Maximum(_localctx.args.list[0], maxVar, maxOver) : _localctx.args.list.Aggregate((a, b) => MathS.Max(a, b)); } @@ -4619,11 +4707,11 @@ public AtomContext atom() { case 121: EnterOuterAlt(_localctx, 121); { - State = 1008; + State = 1024; Match(T__161); - State = 1009; + State = 1025; _localctx.args = function_arguments(); - State = 1010; + State = 1026; Match(T__30); Assert("argmax", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } argmaxRange ? MathS.Argmax(_localctx.args.list[0], argmaxRange.Element, argmaxRange.SupSet) : throw new InvalidArgumentParseException("argmax expects its second argument to say which variable ranges over which set, as in argmax(f(t), t in S)"); } @@ -4631,11 +4719,11 @@ public AtomContext atom() { case 122: EnterOuterAlt(_localctx, 122); { - State = 1013; + State = 1029; Match(T__162); - State = 1014; + State = 1030; _localctx.args = function_arguments(); - State = 1015; + State = 1031; Match(T__30); Assert("argmin", 2, _localctx.args.list.Count); _localctx.value = _localctx.args.list[1] is Entity.Set.Inf { Element: Variable } argminRange ? MathS.Argmin(_localctx.args.list[0], argminRange.Element, argminRange.SupSet) : throw new InvalidArgumentParseException("argmin expects its second argument to say which variable ranges over which set, as in argmin(f(t), t in S)"); } @@ -4643,11 +4731,11 @@ public AtomContext atom() { case 123: EnterOuterAlt(_localctx, 123); { - State = 1018; + State = 1034; Match(T__163); - State = 1019; + State = 1035; _localctx.args = function_arguments(); - State = 1020; + State = 1036; Match(T__30); AssertAtLeast("gcd", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Aggregate((a, b) => MathS.Gcd(a, b)); } @@ -4655,11 +4743,11 @@ public AtomContext atom() { case 124: EnterOuterAlt(_localctx, 124); { - State = 1023; + State = 1039; Match(T__164); - State = 1024; + State = 1040; _localctx.args = function_arguments(); - State = 1025; + State = 1041; Match(T__30); AssertAtLeast("lcm", 1, _localctx.args.list.Count); _localctx.value = _localctx.args.list.Aggregate((a, b) => MathS.Lcm(a, b)); } @@ -4667,11 +4755,11 @@ public AtomContext atom() { case 125: EnterOuterAlt(_localctx, 125); { - State = 1028; + State = 1044; Match(T__165); - State = 1029; + State = 1045; _localctx.args = function_arguments(); - State = 1030; + State = 1046; Match(T__30); Assert("binomial", 2, _localctx.args.list.Count); _localctx.value = MathS.Binomial(_localctx.args.list[0], _localctx.args.list[1]); } @@ -4679,11 +4767,11 @@ public AtomContext atom() { case 126: EnterOuterAlt(_localctx, 126); { - State = 1033; + State = 1049; Match(T__166); - State = 1034; + State = 1050; _localctx.args = function_arguments(); - State = 1035; + State = 1051; Match(T__30); Assert("iverson", 1, _localctx.args.list.Count); _localctx.value = MathS.Iverson(_localctx.args.list[0]); } @@ -4691,11 +4779,11 @@ public AtomContext atom() { case 127: EnterOuterAlt(_localctx, 127); { - State = 1038; + State = 1054; Match(T__167); - State = 1039; + State = 1055; _localctx.args = function_arguments(); - State = 1040; + State = 1056; Match(T__30); Assert("aleph", 1, _localctx.args.list.Count); _localctx.value = MathS.Aleph(_localctx.args.list[0]); } @@ -4703,11 +4791,11 @@ public AtomContext atom() { case 128: EnterOuterAlt(_localctx, 128); { - State = 1043; + State = 1059; Match(T__168); - State = 1044; + State = 1060; _localctx.args = function_arguments(); - State = 1045; + State = 1061; Match(T__30); Assert("erf", 1, _localctx.args.list.Count); _localctx.value = MathS.Erf(_localctx.args.list[0]); } @@ -4715,11 +4803,11 @@ public AtomContext atom() { case 129: EnterOuterAlt(_localctx, 129); { - State = 1048; + State = 1064; Match(T__169); - State = 1049; + State = 1065; _localctx.args = function_arguments(); - State = 1050; + State = 1066; Match(T__30); Assert("erfc", 1, _localctx.args.list.Count); _localctx.value = MathS.Erfc(_localctx.args.list[0]); } @@ -4727,11 +4815,11 @@ public AtomContext atom() { case 130: EnterOuterAlt(_localctx, 130); { - State = 1053; + State = 1069; Match(T__170); - State = 1054; + State = 1070; _localctx.args = function_arguments(); - State = 1055; + State = 1071; Match(T__30); Assert("erfi", 1, _localctx.args.list.Count); _localctx.value = MathS.Erfi(_localctx.args.list[0]); } @@ -4739,11 +4827,11 @@ public AtomContext atom() { case 131: EnterOuterAlt(_localctx, 131); { - State = 1058; + State = 1074; Match(T__171); - State = 1059; + State = 1075; _localctx.args = function_arguments(); - State = 1060; + State = 1076; Match(T__30); Assert("Ei", 1, _localctx.args.list.Count); _localctx.value = MathS.Ei(_localctx.args.list[0]); } @@ -4751,11 +4839,11 @@ public AtomContext atom() { case 132: EnterOuterAlt(_localctx, 132); { - State = 1063; + State = 1079; Match(T__172); - State = 1064; + State = 1080; _localctx.args = function_arguments(); - State = 1065; + State = 1081; Match(T__30); Assert("li", 1, _localctx.args.list.Count); _localctx.value = MathS.Li(_localctx.args.list[0]); } @@ -4763,11 +4851,11 @@ public AtomContext atom() { case 133: EnterOuterAlt(_localctx, 133); { - State = 1068; + State = 1084; Match(T__173); - State = 1069; + State = 1085; _localctx.args = function_arguments(); - State = 1070; + State = 1086; Match(T__30); Assert("Si", 1, _localctx.args.list.Count); _localctx.value = MathS.Si(_localctx.args.list[0]); } @@ -4775,11 +4863,11 @@ public AtomContext atom() { case 134: EnterOuterAlt(_localctx, 134); { - State = 1073; + State = 1089; Match(T__174); - State = 1074; + State = 1090; _localctx.args = function_arguments(); - State = 1075; + State = 1091; Match(T__30); Assert("Ci", 1, _localctx.args.list.Count); _localctx.value = MathS.Ci(_localctx.args.list[0]); } @@ -4787,11 +4875,11 @@ public AtomContext atom() { case 135: EnterOuterAlt(_localctx, 135); { - State = 1078; + State = 1094; Match(T__175); - State = 1079; + State = 1095; _localctx.args = function_arguments(); - State = 1080; + State = 1096; Match(T__30); Assert("Shi", 1, _localctx.args.list.Count); _localctx.value = MathS.Shi(_localctx.args.list[0]); } @@ -4799,11 +4887,11 @@ public AtomContext atom() { case 136: EnterOuterAlt(_localctx, 136); { - State = 1083; + State = 1099; Match(T__176); - State = 1084; + State = 1100; _localctx.args = function_arguments(); - State = 1085; + State = 1101; Match(T__30); Assert("Chi", 1, _localctx.args.list.Count); _localctx.value = MathS.Chi(_localctx.args.list[0]); } @@ -4811,11 +4899,11 @@ public AtomContext atom() { case 137: EnterOuterAlt(_localctx, 137); { - State = 1088; + State = 1104; Match(T__177); - State = 1089; + State = 1105; _localctx.args = function_arguments(); - State = 1090; + State = 1106; Match(T__30); _localctx.value = NotImplementedFunction("trunc", "rounding functions"); } @@ -4823,11 +4911,11 @@ public AtomContext atom() { case 138: EnterOuterAlt(_localctx, 138); { - State = 1093; + State = 1109; Match(T__178); - State = 1094; + State = 1110; _localctx.args = function_arguments(); - State = 1095; + State = 1111; Match(T__30); _localctx.value = NotImplementedFunction("conjugate", "complex conjugate as a symbolic function"); } @@ -4835,11 +4923,11 @@ public AtomContext atom() { case 139: EnterOuterAlt(_localctx, 139); { - State = 1098; + State = 1114; Match(T__179); - State = 1099; + State = 1115; _localctx.args = function_arguments(); - State = 1100; + State = 1116; Match(T__30); Assert("domain", 2, _localctx.args.list.Count); @@ -4869,11 +4957,11 @@ public AtomContext atom() { case 140: EnterOuterAlt(_localctx, 140); { - State = 1103; + State = 1119; Match(T__180); - State = 1104; + State = 1120; _localctx.args = function_arguments(); - State = 1105; + State = 1121; Match(T__30); var cases = new List(); @@ -4889,11 +4977,11 @@ public AtomContext atom() { case 141: EnterOuterAlt(_localctx, 141); { - State = 1108; + State = 1124; Match(T__181); - State = 1109; + State = 1125; _localctx.args = function_arguments(); - State = 1110; + State = 1126; Match(T__30); if (_localctx.args.list.Count < 2) @@ -4905,11 +4993,11 @@ public AtomContext atom() { case 142: EnterOuterAlt(_localctx, 142); { - State = 1113; + State = 1129; Match(T__182); - State = 1114; + State = 1130; _localctx.args = function_arguments(); - State = 1115; + State = 1131; Match(T__30); if (_localctx.args.list.Count < 2) @@ -4972,9 +5060,9 @@ public StatementContext statement() { try { EnterOuterAlt(_localctx, 1); { - State = 1120; + State = 1136; _localctx._expression = expression(); - State = 1121; + State = 1137; Match(Eof); Result = _localctx._expression.value; } @@ -4991,7 +5079,7 @@ public StatementContext statement() { } private static int[] _serializedATN = { - 4,1,191,1125,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2, + 4,1,191,1141,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7,6,2, 7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13,2,14,7,14, 2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7,19,2,20,7,20,2,21,7,21, 2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,1,0,1,0,1,0,1,0,1,0,1,0,1,0,3, @@ -5010,386 +5098,393 @@ public StatementContext statement() { 247,8,9,1,9,1,9,1,9,5,9,252,8,9,10,9,12,9,255,9,9,1,9,1,9,1,9,1,9,1,9, 1,9,3,9,263,8,9,1,9,1,9,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1,10,1, 10,1,10,1,10,1,10,1,10,1,10,3,10,282,8,10,1,11,1,11,1,11,1,11,1,11,1,11, - 1,11,1,11,1,11,1,11,5,11,294,8,11,10,11,12,11,297,9,11,1,12,1,12,1,12, - 1,12,1,12,1,12,5,12,305,8,12,10,12,12,12,308,9,12,1,13,1,13,1,13,1,13, - 1,13,1,13,5,13,316,8,13,10,13,12,13,319,9,13,1,14,1,14,1,14,1,14,1,14, - 1,14,1,14,1,14,1,14,1,14,5,14,331,8,14,10,14,12,14,334,9,14,1,15,1,15, - 1,15,1,15,1,15,1,15,3,15,342,8,15,1,16,1,16,1,16,1,16,1,16,1,16,3,16,350, - 8,16,1,16,1,16,1,16,3,16,355,8,16,1,17,1,17,1,17,1,17,1,17,1,17,1,18,1, - 18,1,18,1,18,1,18,1,18,3,18,369,8,18,1,19,1,19,1,19,1,19,1,19,1,19,5,19, - 377,8,19,10,19,12,19,380,9,19,1,19,1,19,1,20,1,20,1,20,1,20,1,20,1,20, - 5,20,390,8,20,10,20,12,20,393,9,20,3,20,395,8,20,1,21,1,21,1,21,1,21,1, - 21,3,21,402,8,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21,410,8,21,5,21,412, - 8,21,10,21,12,21,415,9,21,3,21,417,8,21,1,22,1,22,1,22,1,22,1,22,1,22, - 1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24, - 1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,1119,8,24,1,25,1,25,1,25, - 1,25,1,25,0,0,26,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38, - 40,42,44,46,48,50,0,4,1,0,6,7,1,0,42,43,1,0,44,45,1,0,46,47,1297,0,59, - 1,0,0,0,2,77,1,0,0,0,4,79,1,0,0,0,6,109,1,0,0,0,8,111,1,0,0,0,10,136,1, - 0,0,0,12,157,1,0,0,0,14,172,1,0,0,0,16,195,1,0,0,0,18,230,1,0,0,0,20,281, - 1,0,0,0,22,283,1,0,0,0,24,298,1,0,0,0,26,309,1,0,0,0,28,320,1,0,0,0,30, - 335,1,0,0,0,32,354,1,0,0,0,34,356,1,0,0,0,36,368,1,0,0,0,38,370,1,0,0, - 0,40,394,1,0,0,0,42,416,1,0,0,0,44,418,1,0,0,0,46,424,1,0,0,0,48,1118, - 1,0,0,0,50,1120,1,0,0,0,52,53,3,48,24,0,53,54,5,1,0,0,54,55,6,0,-1,0,55, - 60,1,0,0,0,56,57,3,48,24,0,57,58,6,0,-1,0,58,60,1,0,0,0,59,52,1,0,0,0, - 59,56,1,0,0,0,60,1,1,0,0,0,61,62,5,2,0,0,62,63,3,0,0,0,63,64,6,1,-1,0, - 64,66,1,0,0,0,65,61,1,0,0,0,66,67,1,0,0,0,67,65,1,0,0,0,67,68,1,0,0,0, - 68,78,1,0,0,0,69,70,5,2,0,0,70,71,3,6,3,0,71,72,6,1,-1,0,72,74,1,0,0,0, - 73,69,1,0,0,0,74,75,1,0,0,0,75,73,1,0,0,0,75,76,1,0,0,0,76,78,1,0,0,0, - 77,65,1,0,0,0,77,73,1,0,0,0,78,3,1,0,0,0,79,80,3,0,0,0,80,84,6,2,-1,0, - 81,82,3,2,1,0,82,83,6,2,-1,0,83,85,1,0,0,0,84,81,1,0,0,0,84,85,1,0,0,0, - 85,5,1,0,0,0,86,87,5,3,0,0,87,88,3,4,2,0,88,89,6,3,-1,0,89,95,1,0,0,0, - 90,91,5,4,0,0,91,92,3,4,2,0,92,93,6,3,-1,0,93,95,1,0,0,0,94,86,1,0,0,0, - 94,90,1,0,0,0,95,110,1,0,0,0,96,97,5,3,0,0,97,98,3,6,3,0,98,99,6,3,-1, - 0,99,105,1,0,0,0,100,101,5,4,0,0,101,102,3,6,3,0,102,103,6,3,-1,0,103, - 105,1,0,0,0,104,96,1,0,0,0,104,100,1,0,0,0,105,110,1,0,0,0,106,107,3,4, - 2,0,107,108,6,3,-1,0,108,110,1,0,0,0,109,94,1,0,0,0,109,104,1,0,0,0,109, - 106,1,0,0,0,110,7,1,0,0,0,111,112,3,6,3,0,112,131,6,4,-1,0,113,119,5,5, - 0,0,114,115,7,0,0,0,115,120,6,4,-1,0,116,117,3,6,3,0,117,118,6,4,-1,0, - 118,120,1,0,0,0,119,114,1,0,0,0,119,116,1,0,0,0,120,130,1,0,0,0,121,122, - 5,8,0,0,122,123,3,6,3,0,123,124,6,4,-1,0,124,130,1,0,0,0,125,126,5,9,0, - 0,126,127,3,6,3,0,127,128,6,4,-1,0,128,130,1,0,0,0,129,113,1,0,0,0,129, - 121,1,0,0,0,129,125,1,0,0,0,130,133,1,0,0,0,131,129,1,0,0,0,131,132,1, - 0,0,0,132,134,1,0,0,0,133,131,1,0,0,0,134,135,6,4,-1,0,135,9,1,0,0,0,136, - 137,3,8,4,0,137,152,6,5,-1,0,138,144,5,4,0,0,139,140,7,0,0,0,140,145,6, - 5,-1,0,141,142,3,8,4,0,142,143,6,5,-1,0,143,145,1,0,0,0,144,139,1,0,0, - 0,144,141,1,0,0,0,145,151,1,0,0,0,146,147,5,3,0,0,147,148,3,8,4,0,148, - 149,6,5,-1,0,149,151,1,0,0,0,150,138,1,0,0,0,150,146,1,0,0,0,151,154,1, - 0,0,0,152,150,1,0,0,0,152,153,1,0,0,0,153,155,1,0,0,0,154,152,1,0,0,0, - 155,156,6,5,-1,0,156,11,1,0,0,0,157,158,3,10,5,0,158,169,6,6,-1,0,159, - 160,5,10,0,0,160,161,3,10,5,0,161,162,6,6,-1,0,162,168,1,0,0,0,163,164, - 5,11,0,0,164,165,3,10,5,0,165,166,6,6,-1,0,166,168,1,0,0,0,167,159,1,0, - 0,0,167,163,1,0,0,0,168,171,1,0,0,0,169,167,1,0,0,0,169,170,1,0,0,0,170, - 13,1,0,0,0,171,169,1,0,0,0,172,173,3,12,6,0,173,192,6,7,-1,0,174,175,5, - 12,0,0,175,176,3,12,6,0,176,177,6,7,-1,0,177,191,1,0,0,0,178,179,5,13, - 0,0,179,180,3,12,6,0,180,181,6,7,-1,0,181,191,1,0,0,0,182,183,5,14,0,0, - 183,184,3,12,6,0,184,185,6,7,-1,0,185,191,1,0,0,0,186,187,5,15,0,0,187, - 188,3,12,6,0,188,189,6,7,-1,0,189,191,1,0,0,0,190,174,1,0,0,0,190,178, - 1,0,0,0,190,182,1,0,0,0,190,186,1,0,0,0,191,194,1,0,0,0,192,190,1,0,0, - 0,192,193,1,0,0,0,193,15,1,0,0,0,194,192,1,0,0,0,195,196,3,14,7,0,196, - 227,6,8,-1,0,197,198,5,16,0,0,198,199,3,14,7,0,199,200,6,8,-1,0,200,226, - 1,0,0,0,201,202,5,17,0,0,202,203,3,14,7,0,203,204,6,8,-1,0,204,226,1,0, - 0,0,205,206,5,18,0,0,206,207,3,14,7,0,207,208,6,8,-1,0,208,226,1,0,0,0, - 209,210,5,19,0,0,210,211,3,14,7,0,211,212,6,8,-1,0,212,226,1,0,0,0,213, - 214,5,20,0,0,214,215,3,14,7,0,215,216,6,8,-1,0,216,226,1,0,0,0,217,218, - 5,21,0,0,218,219,3,14,7,0,219,220,6,8,-1,0,220,226,1,0,0,0,221,222,5,22, - 0,0,222,223,3,14,7,0,223,224,6,8,-1,0,224,226,1,0,0,0,225,197,1,0,0,0, - 225,201,1,0,0,0,225,205,1,0,0,0,225,209,1,0,0,0,225,213,1,0,0,0,225,217, - 1,0,0,0,225,221,1,0,0,0,226,229,1,0,0,0,227,225,1,0,0,0,227,228,1,0,0, - 0,228,17,1,0,0,0,229,227,1,0,0,0,230,231,3,16,8,0,231,253,6,9,-1,0,232, - 233,5,23,0,0,233,247,6,9,-1,0,234,235,5,24,0,0,235,247,6,9,-1,0,236,237, - 5,25,0,0,237,247,6,9,-1,0,238,239,5,26,0,0,239,247,6,9,-1,0,240,241,5, - 27,0,0,241,247,6,9,-1,0,242,243,5,28,0,0,243,247,6,9,-1,0,244,245,5,29, - 0,0,245,247,6,9,-1,0,246,232,1,0,0,0,246,234,1,0,0,0,246,236,1,0,0,0,246, - 238,1,0,0,0,246,240,1,0,0,0,246,242,1,0,0,0,246,244,1,0,0,0,247,248,1, - 0,0,0,248,249,3,16,8,0,249,250,6,9,-1,0,250,252,1,0,0,0,251,246,1,0,0, - 0,252,255,1,0,0,0,253,251,1,0,0,0,253,254,1,0,0,0,254,262,1,0,0,0,255, - 253,1,0,0,0,256,257,5,30,0,0,257,258,5,9,0,0,258,259,3,16,8,0,259,260, - 5,31,0,0,260,261,6,9,-1,0,261,263,1,0,0,0,262,256,1,0,0,0,262,263,1,0, - 0,0,263,264,1,0,0,0,264,265,6,9,-1,0,265,19,1,0,0,0,266,267,5,32,0,0,267, - 268,3,18,9,0,268,269,6,10,-1,0,269,282,1,0,0,0,270,271,5,32,0,0,271,272, - 3,20,10,0,272,273,6,10,-1,0,273,282,1,0,0,0,274,275,5,32,0,0,275,276,3, - 34,17,0,276,277,6,10,-1,0,277,282,1,0,0,0,278,279,3,18,9,0,279,280,6,10, - -1,0,280,282,1,0,0,0,281,266,1,0,0,0,281,270,1,0,0,0,281,274,1,0,0,0,281, - 278,1,0,0,0,282,21,1,0,0,0,283,284,3,20,10,0,284,295,6,11,-1,0,285,286, - 5,33,0,0,286,287,3,20,10,0,287,288,6,11,-1,0,288,294,1,0,0,0,289,290,5, - 34,0,0,290,291,3,20,10,0,291,292,6,11,-1,0,292,294,1,0,0,0,293,285,1,0, - 0,0,293,289,1,0,0,0,294,297,1,0,0,0,295,293,1,0,0,0,295,296,1,0,0,0,296, - 23,1,0,0,0,297,295,1,0,0,0,298,299,3,22,11,0,299,306,6,12,-1,0,300,301, - 5,35,0,0,301,302,3,22,11,0,302,303,6,12,-1,0,303,305,1,0,0,0,304,300,1, - 0,0,0,305,308,1,0,0,0,306,304,1,0,0,0,306,307,1,0,0,0,307,25,1,0,0,0,308, - 306,1,0,0,0,309,310,3,24,12,0,310,317,6,13,-1,0,311,312,5,36,0,0,312,313, - 3,24,12,0,313,314,6,13,-1,0,314,316,1,0,0,0,315,311,1,0,0,0,316,319,1, - 0,0,0,317,315,1,0,0,0,317,318,1,0,0,0,318,27,1,0,0,0,319,317,1,0,0,0,320, - 321,3,26,13,0,321,332,6,14,-1,0,322,323,5,37,0,0,323,324,3,26,13,0,324, - 325,6,14,-1,0,325,331,1,0,0,0,326,327,5,38,0,0,327,328,3,26,13,0,328,329, - 6,14,-1,0,329,331,1,0,0,0,330,322,1,0,0,0,330,326,1,0,0,0,331,334,1,0, - 0,0,332,330,1,0,0,0,332,333,1,0,0,0,333,29,1,0,0,0,334,332,1,0,0,0,335, - 336,3,28,14,0,336,341,6,15,-1,0,337,338,5,39,0,0,338,339,3,30,15,0,339, - 340,6,15,-1,0,340,342,1,0,0,0,341,337,1,0,0,0,341,342,1,0,0,0,342,31,1, - 0,0,0,343,344,3,30,15,0,344,349,6,16,-1,0,345,346,5,40,0,0,346,347,3,32, - 16,0,347,348,6,16,-1,0,348,350,1,0,0,0,349,345,1,0,0,0,349,350,1,0,0,0, - 350,355,1,0,0,0,351,352,3,34,17,0,352,353,6,16,-1,0,353,355,1,0,0,0,354, - 343,1,0,0,0,354,351,1,0,0,0,355,33,1,0,0,0,356,357,3,36,18,0,357,358,3, - 38,19,0,358,359,5,41,0,0,359,360,3,32,16,0,360,361,6,17,-1,0,361,35,1, - 0,0,0,362,363,7,1,0,0,363,369,6,18,-1,0,364,365,7,2,0,0,365,369,6,18,-1, - 0,366,367,7,3,0,0,367,369,6,18,-1,0,368,362,1,0,0,0,368,364,1,0,0,0,368, - 366,1,0,0,0,369,37,1,0,0,0,370,371,3,16,8,0,371,378,6,19,-1,0,372,373, - 5,48,0,0,373,374,3,16,8,0,374,375,6,19,-1,0,375,377,1,0,0,0,376,372,1, - 0,0,0,377,380,1,0,0,0,378,376,1,0,0,0,378,379,1,0,0,0,379,381,1,0,0,0, - 380,378,1,0,0,0,381,382,6,19,-1,0,382,39,1,0,0,0,383,384,3,32,16,0,384, - 391,6,20,-1,0,385,386,5,48,0,0,386,387,3,32,16,0,387,388,6,20,-1,0,388, - 390,1,0,0,0,389,385,1,0,0,0,390,393,1,0,0,0,391,389,1,0,0,0,391,392,1, - 0,0,0,392,395,1,0,0,0,393,391,1,0,0,0,394,383,1,0,0,0,394,395,1,0,0,0, - 395,41,1,0,0,0,396,397,3,32,16,0,397,398,6,21,-1,0,398,402,1,0,0,0,399, - 400,7,0,0,0,400,402,6,21,-1,0,401,396,1,0,0,0,401,399,1,0,0,0,402,413, - 1,0,0,0,403,409,5,48,0,0,404,405,3,32,16,0,405,406,6,21,-1,0,406,410,1, - 0,0,0,407,408,7,0,0,0,408,410,6,21,-1,0,409,404,1,0,0,0,409,407,1,0,0, - 0,410,412,1,0,0,0,411,403,1,0,0,0,412,415,1,0,0,0,413,411,1,0,0,0,413, - 414,1,0,0,0,414,417,1,0,0,0,415,413,1,0,0,0,416,401,1,0,0,0,416,417,1, - 0,0,0,417,43,1,0,0,0,418,419,3,32,16,0,419,420,6,22,-1,0,420,421,5,49, - 0,0,421,422,3,32,16,0,422,423,6,22,-1,0,423,45,1,0,0,0,424,425,3,32,16, - 0,425,426,6,23,-1,0,426,427,5,41,0,0,427,428,3,32,16,0,428,429,6,23,-1, - 0,429,47,1,0,0,0,430,431,5,50,0,0,431,1119,6,24,-1,0,432,433,5,51,0,0, - 433,1119,6,24,-1,0,434,435,5,188,0,0,435,1119,6,24,-1,0,436,437,5,185, - 0,0,437,1119,6,24,-1,0,438,439,5,187,0,0,439,1119,6,24,-1,0,440,441,5, - 186,0,0,441,1119,6,24,-1,0,442,443,5,189,0,0,443,1119,6,24,-1,0,444,445, - 5,52,0,0,445,446,3,32,16,0,446,447,5,53,0,0,447,448,6,24,-1,0,448,1119, - 1,0,0,0,449,450,5,54,0,0,450,451,3,48,24,0,451,452,6,24,-1,0,452,1119, - 1,0,0,0,453,454,5,55,0,0,454,455,3,40,20,0,455,456,5,56,0,0,456,457,6, - 24,-1,0,457,1119,1,0,0,0,458,459,5,55,0,0,459,460,3,40,20,0,460,461,5, - 57,0,0,461,462,6,24,-1,0,462,1119,1,0,0,0,463,464,5,30,0,0,464,465,3,44, - 22,0,465,466,5,31,0,0,466,467,6,24,-1,0,467,1119,1,0,0,0,468,469,5,55, - 0,0,469,470,3,44,22,0,470,471,5,31,0,0,471,472,6,24,-1,0,472,1119,1,0, - 0,0,473,474,5,55,0,0,474,475,3,44,22,0,475,476,5,57,0,0,476,477,6,24,-1, - 0,477,1119,1,0,0,0,478,479,5,30,0,0,479,480,3,44,22,0,480,481,5,57,0,0, - 481,482,6,24,-1,0,482,1119,1,0,0,0,483,484,5,30,0,0,484,485,3,32,16,0, - 485,486,5,31,0,0,486,487,6,24,-1,0,487,1119,1,0,0,0,488,489,5,58,0,0,489, - 490,3,46,23,0,490,491,5,59,0,0,491,492,6,24,-1,0,492,1119,1,0,0,0,493, - 494,5,58,0,0,494,495,3,42,21,0,495,496,5,59,0,0,496,497,6,24,-1,0,497, - 1119,1,0,0,0,498,499,5,60,0,0,499,500,3,40,20,0,500,501,5,31,0,0,501,502, - 6,24,-1,0,502,1119,1,0,0,0,503,504,5,61,0,0,504,505,3,40,20,0,505,506, - 5,31,0,0,506,507,6,24,-1,0,507,1119,1,0,0,0,508,509,5,62,0,0,509,510,3, - 40,20,0,510,511,5,31,0,0,511,512,6,24,-1,0,512,1119,1,0,0,0,513,514,5, - 63,0,0,514,515,3,40,20,0,515,516,5,31,0,0,516,517,6,24,-1,0,517,1119,1, - 0,0,0,518,519,5,64,0,0,519,520,3,40,20,0,520,521,5,31,0,0,521,522,6,24, - -1,0,522,1119,1,0,0,0,523,524,5,65,0,0,524,525,3,40,20,0,525,526,5,31, - 0,0,526,527,6,24,-1,0,527,1119,1,0,0,0,528,529,5,66,0,0,529,530,3,40,20, - 0,530,531,5,31,0,0,531,532,6,24,-1,0,532,1119,1,0,0,0,533,534,5,67,0,0, - 534,535,3,40,20,0,535,536,5,31,0,0,536,537,6,24,-1,0,537,1119,1,0,0,0, - 538,539,5,68,0,0,539,540,3,40,20,0,540,541,5,31,0,0,541,542,6,24,-1,0, - 542,1119,1,0,0,0,543,544,5,69,0,0,544,545,3,40,20,0,545,546,5,31,0,0,546, - 547,6,24,-1,0,547,1119,1,0,0,0,548,549,5,70,0,0,549,550,3,40,20,0,550, - 551,5,31,0,0,551,552,6,24,-1,0,552,1119,1,0,0,0,553,554,5,71,0,0,554,555, - 3,40,20,0,555,556,5,31,0,0,556,557,6,24,-1,0,557,1119,1,0,0,0,558,559, - 5,72,0,0,559,560,3,40,20,0,560,561,5,31,0,0,561,562,6,24,-1,0,562,1119, - 1,0,0,0,563,564,5,73,0,0,564,565,3,40,20,0,565,566,5,31,0,0,566,567,6, - 24,-1,0,567,1119,1,0,0,0,568,569,5,74,0,0,569,570,3,40,20,0,570,571,5, - 31,0,0,571,572,6,24,-1,0,572,1119,1,0,0,0,573,574,5,75,0,0,574,575,3,40, - 20,0,575,576,5,31,0,0,576,577,6,24,-1,0,577,1119,1,0,0,0,578,579,5,76, - 0,0,579,580,3,40,20,0,580,581,5,31,0,0,581,582,6,24,-1,0,582,1119,1,0, - 0,0,583,584,5,77,0,0,584,585,3,40,20,0,585,586,5,31,0,0,586,587,6,24,-1, - 0,587,1119,1,0,0,0,588,589,5,78,0,0,589,590,3,40,20,0,590,591,5,31,0,0, - 591,592,6,24,-1,0,592,1119,1,0,0,0,593,594,5,79,0,0,594,595,3,40,20,0, - 595,596,5,31,0,0,596,597,6,24,-1,0,597,1119,1,0,0,0,598,599,5,80,0,0,599, - 600,3,40,20,0,600,601,5,31,0,0,601,602,6,24,-1,0,602,1119,1,0,0,0,603, - 604,5,81,0,0,604,605,3,40,20,0,605,606,5,31,0,0,606,607,6,24,-1,0,607, - 1119,1,0,0,0,608,609,5,82,0,0,609,610,3,40,20,0,610,611,5,31,0,0,611,612, - 6,24,-1,0,612,1119,1,0,0,0,613,614,5,83,0,0,614,615,3,40,20,0,615,616, - 5,31,0,0,616,617,6,24,-1,0,617,1119,1,0,0,0,618,619,5,84,0,0,619,620,3, - 40,20,0,620,621,5,31,0,0,621,622,6,24,-1,0,622,1119,1,0,0,0,623,624,5, - 85,0,0,624,625,3,40,20,0,625,626,5,31,0,0,626,627,6,24,-1,0,627,1119,1, - 0,0,0,628,629,5,86,0,0,629,630,3,40,20,0,630,631,5,31,0,0,631,632,6,24, - -1,0,632,1119,1,0,0,0,633,634,5,87,0,0,634,635,3,40,20,0,635,636,5,31, - 0,0,636,637,6,24,-1,0,637,1119,1,0,0,0,638,639,5,88,0,0,639,640,3,40,20, - 0,640,641,5,31,0,0,641,642,6,24,-1,0,642,1119,1,0,0,0,643,644,5,89,0,0, - 644,645,3,40,20,0,645,646,5,31,0,0,646,647,6,24,-1,0,647,1119,1,0,0,0, - 648,649,5,90,0,0,649,650,3,40,20,0,650,651,5,31,0,0,651,652,6,24,-1,0, - 652,1119,1,0,0,0,653,654,5,91,0,0,654,655,3,40,20,0,655,656,5,31,0,0,656, - 657,6,24,-1,0,657,1119,1,0,0,0,658,659,5,92,0,0,659,660,3,40,20,0,660, - 661,5,31,0,0,661,662,6,24,-1,0,662,1119,1,0,0,0,663,664,5,93,0,0,664,665, - 3,40,20,0,665,666,5,31,0,0,666,667,6,24,-1,0,667,1119,1,0,0,0,668,669, - 5,94,0,0,669,670,3,40,20,0,670,671,5,31,0,0,671,672,6,24,-1,0,672,1119, - 1,0,0,0,673,674,5,95,0,0,674,675,3,40,20,0,675,676,5,31,0,0,676,677,6, - 24,-1,0,677,1119,1,0,0,0,678,679,5,96,0,0,679,680,3,40,20,0,680,681,5, - 31,0,0,681,682,6,24,-1,0,682,1119,1,0,0,0,683,684,5,97,0,0,684,685,3,40, - 20,0,685,686,5,31,0,0,686,687,6,24,-1,0,687,1119,1,0,0,0,688,689,5,98, - 0,0,689,690,3,40,20,0,690,691,5,31,0,0,691,692,6,24,-1,0,692,1119,1,0, - 0,0,693,694,5,99,0,0,694,695,3,40,20,0,695,696,5,31,0,0,696,697,6,24,-1, - 0,697,1119,1,0,0,0,698,699,5,100,0,0,699,700,3,40,20,0,700,701,5,31,0, - 0,701,702,6,24,-1,0,702,1119,1,0,0,0,703,704,5,101,0,0,704,705,3,40,20, - 0,705,706,5,31,0,0,706,707,6,24,-1,0,707,1119,1,0,0,0,708,709,5,102,0, - 0,709,710,3,40,20,0,710,711,5,31,0,0,711,712,6,24,-1,0,712,1119,1,0,0, - 0,713,714,5,103,0,0,714,715,3,40,20,0,715,716,5,31,0,0,716,717,6,24,-1, - 0,717,1119,1,0,0,0,718,719,5,104,0,0,719,720,3,40,20,0,720,721,5,31,0, - 0,721,722,6,24,-1,0,722,1119,1,0,0,0,723,724,5,105,0,0,724,725,3,40,20, - 0,725,726,5,31,0,0,726,727,6,24,-1,0,727,1119,1,0,0,0,728,729,5,106,0, - 0,729,730,3,40,20,0,730,731,5,31,0,0,731,732,6,24,-1,0,732,1119,1,0,0, - 0,733,734,5,107,0,0,734,735,3,40,20,0,735,736,5,31,0,0,736,737,6,24,-1, - 0,737,1119,1,0,0,0,738,739,5,108,0,0,739,740,3,40,20,0,740,741,5,31,0, - 0,741,742,6,24,-1,0,742,1119,1,0,0,0,743,744,5,109,0,0,744,745,3,40,20, - 0,745,746,5,31,0,0,746,747,6,24,-1,0,747,1119,1,0,0,0,748,749,5,110,0, - 0,749,750,3,40,20,0,750,751,5,31,0,0,751,752,6,24,-1,0,752,1119,1,0,0, - 0,753,754,5,111,0,0,754,755,3,40,20,0,755,756,5,31,0,0,756,757,6,24,-1, - 0,757,1119,1,0,0,0,758,759,5,112,0,0,759,760,3,40,20,0,760,761,5,31,0, - 0,761,762,6,24,-1,0,762,1119,1,0,0,0,763,764,5,113,0,0,764,765,3,40,20, - 0,765,766,5,31,0,0,766,767,6,24,-1,0,767,1119,1,0,0,0,768,769,5,114,0, - 0,769,770,3,40,20,0,770,771,5,31,0,0,771,772,6,24,-1,0,772,1119,1,0,0, - 0,773,774,5,115,0,0,774,775,3,40,20,0,775,776,5,31,0,0,776,777,6,24,-1, - 0,777,1119,1,0,0,0,778,779,5,116,0,0,779,780,3,40,20,0,780,781,5,31,0, - 0,781,782,6,24,-1,0,782,1119,1,0,0,0,783,784,5,117,0,0,784,785,3,40,20, - 0,785,786,5,31,0,0,786,787,6,24,-1,0,787,1119,1,0,0,0,788,789,5,118,0, - 0,789,790,3,40,20,0,790,791,5,31,0,0,791,792,6,24,-1,0,792,1119,1,0,0, - 0,793,794,5,119,0,0,794,795,3,40,20,0,795,796,5,31,0,0,796,797,6,24,-1, - 0,797,1119,1,0,0,0,798,799,5,120,0,0,799,800,3,40,20,0,800,801,5,31,0, - 0,801,802,6,24,-1,0,802,1119,1,0,0,0,803,804,5,121,0,0,804,805,3,40,20, - 0,805,806,5,31,0,0,806,807,6,24,-1,0,807,1119,1,0,0,0,808,809,5,122,0, - 0,809,810,3,40,20,0,810,811,5,31,0,0,811,812,6,24,-1,0,812,1119,1,0,0, - 0,813,814,5,123,0,0,814,815,3,40,20,0,815,816,5,31,0,0,816,817,6,24,-1, - 0,817,1119,1,0,0,0,818,819,5,124,0,0,819,820,3,40,20,0,820,821,5,31,0, - 0,821,822,6,24,-1,0,822,1119,1,0,0,0,823,824,5,125,0,0,824,825,3,40,20, - 0,825,826,5,31,0,0,826,827,6,24,-1,0,827,1119,1,0,0,0,828,829,5,126,0, - 0,829,830,3,40,20,0,830,831,5,31,0,0,831,832,6,24,-1,0,832,1119,1,0,0, - 0,833,834,5,127,0,0,834,835,3,40,20,0,835,836,5,31,0,0,836,837,6,24,-1, - 0,837,1119,1,0,0,0,838,839,5,128,0,0,839,840,3,40,20,0,840,841,5,31,0, - 0,841,842,6,24,-1,0,842,1119,1,0,0,0,843,844,5,129,0,0,844,845,3,40,20, - 0,845,846,5,31,0,0,846,847,6,24,-1,0,847,1119,1,0,0,0,848,849,5,130,0, - 0,849,850,3,40,20,0,850,851,5,31,0,0,851,852,6,24,-1,0,852,1119,1,0,0, - 0,853,854,5,131,0,0,854,855,3,40,20,0,855,856,5,31,0,0,856,857,6,24,-1, - 0,857,1119,1,0,0,0,858,859,5,132,0,0,859,860,3,40,20,0,860,861,5,31,0, - 0,861,862,6,24,-1,0,862,1119,1,0,0,0,863,864,5,133,0,0,864,865,3,40,20, - 0,865,866,5,31,0,0,866,867,6,24,-1,0,867,1119,1,0,0,0,868,869,5,134,0, - 0,869,870,3,40,20,0,870,871,5,31,0,0,871,872,6,24,-1,0,872,1119,1,0,0, - 0,873,874,5,135,0,0,874,875,3,40,20,0,875,876,5,31,0,0,876,877,6,24,-1, - 0,877,1119,1,0,0,0,878,879,5,136,0,0,879,880,3,40,20,0,880,881,5,31,0, - 0,881,882,6,24,-1,0,882,1119,1,0,0,0,883,884,5,137,0,0,884,885,3,40,20, - 0,885,886,5,31,0,0,886,887,6,24,-1,0,887,1119,1,0,0,0,888,889,5,138,0, - 0,889,890,3,40,20,0,890,891,5,31,0,0,891,892,6,24,-1,0,892,1119,1,0,0, - 0,893,894,5,139,0,0,894,895,3,40,20,0,895,896,5,31,0,0,896,897,6,24,-1, - 0,897,1119,1,0,0,0,898,899,5,140,0,0,899,900,3,40,20,0,900,901,5,31,0, - 0,901,902,6,24,-1,0,902,1119,1,0,0,0,903,904,5,141,0,0,904,905,3,40,20, - 0,905,906,5,31,0,0,906,907,6,24,-1,0,907,1119,1,0,0,0,908,909,5,142,0, - 0,909,910,3,40,20,0,910,911,5,31,0,0,911,912,6,24,-1,0,912,1119,1,0,0, - 0,913,914,5,143,0,0,914,915,3,40,20,0,915,916,5,31,0,0,916,917,6,24,-1, - 0,917,1119,1,0,0,0,918,919,5,144,0,0,919,920,3,40,20,0,920,921,5,31,0, - 0,921,922,6,24,-1,0,922,1119,1,0,0,0,923,924,5,145,0,0,924,925,3,40,20, - 0,925,926,5,31,0,0,926,927,6,24,-1,0,927,1119,1,0,0,0,928,929,5,146,0, - 0,929,930,3,40,20,0,930,931,5,31,0,0,931,932,6,24,-1,0,932,1119,1,0,0, - 0,933,934,5,147,0,0,934,935,3,40,20,0,935,936,5,31,0,0,936,937,6,24,-1, - 0,937,1119,1,0,0,0,938,939,5,148,0,0,939,940,3,40,20,0,940,941,5,31,0, - 0,941,942,6,24,-1,0,942,1119,1,0,0,0,943,944,5,149,0,0,944,945,3,40,20, - 0,945,946,5,31,0,0,946,947,6,24,-1,0,947,1119,1,0,0,0,948,949,5,150,0, - 0,949,950,3,40,20,0,950,951,5,31,0,0,951,952,6,24,-1,0,952,1119,1,0,0, - 0,953,954,5,151,0,0,954,955,3,40,20,0,955,956,5,31,0,0,956,957,6,24,-1, - 0,957,1119,1,0,0,0,958,959,5,152,0,0,959,960,3,40,20,0,960,961,5,31,0, - 0,961,962,6,24,-1,0,962,1119,1,0,0,0,963,964,5,153,0,0,964,965,3,40,20, - 0,965,966,5,31,0,0,966,967,6,24,-1,0,967,1119,1,0,0,0,968,969,5,154,0, - 0,969,970,3,40,20,0,970,971,5,31,0,0,971,972,6,24,-1,0,972,1119,1,0,0, - 0,973,974,5,155,0,0,974,975,3,40,20,0,975,976,5,31,0,0,976,977,6,24,-1, - 0,977,1119,1,0,0,0,978,979,5,156,0,0,979,980,3,40,20,0,980,981,5,31,0, - 0,981,982,6,24,-1,0,982,1119,1,0,0,0,983,984,5,157,0,0,984,985,3,40,20, - 0,985,986,5,31,0,0,986,987,6,24,-1,0,987,1119,1,0,0,0,988,989,5,158,0, - 0,989,990,3,40,20,0,990,991,5,31,0,0,991,992,6,24,-1,0,992,1119,1,0,0, - 0,993,994,5,159,0,0,994,995,3,40,20,0,995,996,5,31,0,0,996,997,6,24,-1, - 0,997,1119,1,0,0,0,998,999,5,160,0,0,999,1000,3,40,20,0,1000,1001,5,31, - 0,0,1001,1002,6,24,-1,0,1002,1119,1,0,0,0,1003,1004,5,161,0,0,1004,1005, - 3,40,20,0,1005,1006,5,31,0,0,1006,1007,6,24,-1,0,1007,1119,1,0,0,0,1008, - 1009,5,162,0,0,1009,1010,3,40,20,0,1010,1011,5,31,0,0,1011,1012,6,24,-1, - 0,1012,1119,1,0,0,0,1013,1014,5,163,0,0,1014,1015,3,40,20,0,1015,1016, - 5,31,0,0,1016,1017,6,24,-1,0,1017,1119,1,0,0,0,1018,1019,5,164,0,0,1019, - 1020,3,40,20,0,1020,1021,5,31,0,0,1021,1022,6,24,-1,0,1022,1119,1,0,0, - 0,1023,1024,5,165,0,0,1024,1025,3,40,20,0,1025,1026,5,31,0,0,1026,1027, - 6,24,-1,0,1027,1119,1,0,0,0,1028,1029,5,166,0,0,1029,1030,3,40,20,0,1030, - 1031,5,31,0,0,1031,1032,6,24,-1,0,1032,1119,1,0,0,0,1033,1034,5,167,0, - 0,1034,1035,3,40,20,0,1035,1036,5,31,0,0,1036,1037,6,24,-1,0,1037,1119, - 1,0,0,0,1038,1039,5,168,0,0,1039,1040,3,40,20,0,1040,1041,5,31,0,0,1041, - 1042,6,24,-1,0,1042,1119,1,0,0,0,1043,1044,5,169,0,0,1044,1045,3,40,20, - 0,1045,1046,5,31,0,0,1046,1047,6,24,-1,0,1047,1119,1,0,0,0,1048,1049,5, - 170,0,0,1049,1050,3,40,20,0,1050,1051,5,31,0,0,1051,1052,6,24,-1,0,1052, - 1119,1,0,0,0,1053,1054,5,171,0,0,1054,1055,3,40,20,0,1055,1056,5,31,0, - 0,1056,1057,6,24,-1,0,1057,1119,1,0,0,0,1058,1059,5,172,0,0,1059,1060, - 3,40,20,0,1060,1061,5,31,0,0,1061,1062,6,24,-1,0,1062,1119,1,0,0,0,1063, - 1064,5,173,0,0,1064,1065,3,40,20,0,1065,1066,5,31,0,0,1066,1067,6,24,-1, - 0,1067,1119,1,0,0,0,1068,1069,5,174,0,0,1069,1070,3,40,20,0,1070,1071, - 5,31,0,0,1071,1072,6,24,-1,0,1072,1119,1,0,0,0,1073,1074,5,175,0,0,1074, - 1075,3,40,20,0,1075,1076,5,31,0,0,1076,1077,6,24,-1,0,1077,1119,1,0,0, - 0,1078,1079,5,176,0,0,1079,1080,3,40,20,0,1080,1081,5,31,0,0,1081,1082, - 6,24,-1,0,1082,1119,1,0,0,0,1083,1084,5,177,0,0,1084,1085,3,40,20,0,1085, - 1086,5,31,0,0,1086,1087,6,24,-1,0,1087,1119,1,0,0,0,1088,1089,5,178,0, - 0,1089,1090,3,40,20,0,1090,1091,5,31,0,0,1091,1092,6,24,-1,0,1092,1119, - 1,0,0,0,1093,1094,5,179,0,0,1094,1095,3,40,20,0,1095,1096,5,31,0,0,1096, - 1097,6,24,-1,0,1097,1119,1,0,0,0,1098,1099,5,180,0,0,1099,1100,3,40,20, - 0,1100,1101,5,31,0,0,1101,1102,6,24,-1,0,1102,1119,1,0,0,0,1103,1104,5, - 181,0,0,1104,1105,3,40,20,0,1105,1106,5,31,0,0,1106,1107,6,24,-1,0,1107, - 1119,1,0,0,0,1108,1109,5,182,0,0,1109,1110,3,40,20,0,1110,1111,5,31,0, - 0,1111,1112,6,24,-1,0,1112,1119,1,0,0,0,1113,1114,5,183,0,0,1114,1115, - 3,40,20,0,1115,1116,5,31,0,0,1116,1117,6,24,-1,0,1117,1119,1,0,0,0,1118, - 430,1,0,0,0,1118,432,1,0,0,0,1118,434,1,0,0,0,1118,436,1,0,0,0,1118,438, - 1,0,0,0,1118,440,1,0,0,0,1118,442,1,0,0,0,1118,444,1,0,0,0,1118,449,1, - 0,0,0,1118,453,1,0,0,0,1118,458,1,0,0,0,1118,463,1,0,0,0,1118,468,1,0, - 0,0,1118,473,1,0,0,0,1118,478,1,0,0,0,1118,483,1,0,0,0,1118,488,1,0,0, - 0,1118,493,1,0,0,0,1118,498,1,0,0,0,1118,503,1,0,0,0,1118,508,1,0,0,0, - 1118,513,1,0,0,0,1118,518,1,0,0,0,1118,523,1,0,0,0,1118,528,1,0,0,0,1118, - 533,1,0,0,0,1118,538,1,0,0,0,1118,543,1,0,0,0,1118,548,1,0,0,0,1118,553, - 1,0,0,0,1118,558,1,0,0,0,1118,563,1,0,0,0,1118,568,1,0,0,0,1118,573,1, - 0,0,0,1118,578,1,0,0,0,1118,583,1,0,0,0,1118,588,1,0,0,0,1118,593,1,0, - 0,0,1118,598,1,0,0,0,1118,603,1,0,0,0,1118,608,1,0,0,0,1118,613,1,0,0, - 0,1118,618,1,0,0,0,1118,623,1,0,0,0,1118,628,1,0,0,0,1118,633,1,0,0,0, - 1118,638,1,0,0,0,1118,643,1,0,0,0,1118,648,1,0,0,0,1118,653,1,0,0,0,1118, - 658,1,0,0,0,1118,663,1,0,0,0,1118,668,1,0,0,0,1118,673,1,0,0,0,1118,678, - 1,0,0,0,1118,683,1,0,0,0,1118,688,1,0,0,0,1118,693,1,0,0,0,1118,698,1, - 0,0,0,1118,703,1,0,0,0,1118,708,1,0,0,0,1118,713,1,0,0,0,1118,718,1,0, - 0,0,1118,723,1,0,0,0,1118,728,1,0,0,0,1118,733,1,0,0,0,1118,738,1,0,0, - 0,1118,743,1,0,0,0,1118,748,1,0,0,0,1118,753,1,0,0,0,1118,758,1,0,0,0, - 1118,763,1,0,0,0,1118,768,1,0,0,0,1118,773,1,0,0,0,1118,778,1,0,0,0,1118, - 783,1,0,0,0,1118,788,1,0,0,0,1118,793,1,0,0,0,1118,798,1,0,0,0,1118,803, - 1,0,0,0,1118,808,1,0,0,0,1118,813,1,0,0,0,1118,818,1,0,0,0,1118,823,1, - 0,0,0,1118,828,1,0,0,0,1118,833,1,0,0,0,1118,838,1,0,0,0,1118,843,1,0, - 0,0,1118,848,1,0,0,0,1118,853,1,0,0,0,1118,858,1,0,0,0,1118,863,1,0,0, - 0,1118,868,1,0,0,0,1118,873,1,0,0,0,1118,878,1,0,0,0,1118,883,1,0,0,0, - 1118,888,1,0,0,0,1118,893,1,0,0,0,1118,898,1,0,0,0,1118,903,1,0,0,0,1118, - 908,1,0,0,0,1118,913,1,0,0,0,1118,918,1,0,0,0,1118,923,1,0,0,0,1118,928, - 1,0,0,0,1118,933,1,0,0,0,1118,938,1,0,0,0,1118,943,1,0,0,0,1118,948,1, - 0,0,0,1118,953,1,0,0,0,1118,958,1,0,0,0,1118,963,1,0,0,0,1118,968,1,0, - 0,0,1118,973,1,0,0,0,1118,978,1,0,0,0,1118,983,1,0,0,0,1118,988,1,0,0, - 0,1118,993,1,0,0,0,1118,998,1,0,0,0,1118,1003,1,0,0,0,1118,1008,1,0,0, - 0,1118,1013,1,0,0,0,1118,1018,1,0,0,0,1118,1023,1,0,0,0,1118,1028,1,0, - 0,0,1118,1033,1,0,0,0,1118,1038,1,0,0,0,1118,1043,1,0,0,0,1118,1048,1, - 0,0,0,1118,1053,1,0,0,0,1118,1058,1,0,0,0,1118,1063,1,0,0,0,1118,1068, - 1,0,0,0,1118,1073,1,0,0,0,1118,1078,1,0,0,0,1118,1083,1,0,0,0,1118,1088, - 1,0,0,0,1118,1093,1,0,0,0,1118,1098,1,0,0,0,1118,1103,1,0,0,0,1118,1108, - 1,0,0,0,1118,1113,1,0,0,0,1119,49,1,0,0,0,1120,1121,3,32,16,0,1121,1122, - 5,0,0,1,1122,1123,6,25,-1,0,1123,51,1,0,0,0,42,59,67,75,77,84,94,104,109, - 119,129,131,144,150,152,167,169,190,192,225,227,246,253,262,281,293,295, - 306,317,330,332,341,349,354,368,378,391,394,401,409,413,416,1118 + 1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,5,11,298,8,11,10,11,12,11,301, + 9,11,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,1,12,5,12,313,8,12,10, + 12,12,12,316,9,12,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,1,13,5, + 13,328,8,13,10,13,12,13,331,9,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1, + 14,1,14,1,14,1,14,1,14,1,14,1,14,5,14,347,8,14,10,14,12,14,350,9,14,1, + 15,1,15,1,15,1,15,1,15,1,15,3,15,358,8,15,1,16,1,16,1,16,1,16,1,16,1,16, + 3,16,366,8,16,1,16,1,16,1,16,3,16,371,8,16,1,17,1,17,1,17,1,17,1,17,1, + 17,1,18,1,18,1,18,1,18,1,18,1,18,3,18,385,8,18,1,19,1,19,1,19,1,19,1,19, + 1,19,5,19,393,8,19,10,19,12,19,396,9,19,1,19,1,19,1,20,1,20,1,20,1,20, + 1,20,1,20,5,20,406,8,20,10,20,12,20,409,9,20,3,20,411,8,20,1,21,1,21,1, + 21,1,21,1,21,3,21,418,8,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21,426,8,21, + 5,21,428,8,21,10,21,12,21,431,9,21,3,21,433,8,21,1,22,1,22,1,22,1,22,1, + 22,1,22,1,23,1,23,1,23,1,23,1,23,1,23,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1, + 24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,1,24,3,24,1135,8,24,1,25,1, + 25,1,25,1,25,1,25,0,0,26,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32, + 34,36,38,40,42,44,46,48,50,0,6,1,0,6,7,1,0,33,34,1,0,37,38,1,0,42,43,1, + 0,44,45,1,0,46,47,1317,0,59,1,0,0,0,2,77,1,0,0,0,4,79,1,0,0,0,6,109,1, + 0,0,0,8,111,1,0,0,0,10,136,1,0,0,0,12,157,1,0,0,0,14,172,1,0,0,0,16,195, + 1,0,0,0,18,230,1,0,0,0,20,281,1,0,0,0,22,283,1,0,0,0,24,302,1,0,0,0,26, + 317,1,0,0,0,28,332,1,0,0,0,30,351,1,0,0,0,32,370,1,0,0,0,34,372,1,0,0, + 0,36,384,1,0,0,0,38,386,1,0,0,0,40,410,1,0,0,0,42,432,1,0,0,0,44,434,1, + 0,0,0,46,440,1,0,0,0,48,1134,1,0,0,0,50,1136,1,0,0,0,52,53,3,48,24,0,53, + 54,5,1,0,0,54,55,6,0,-1,0,55,60,1,0,0,0,56,57,3,48,24,0,57,58,6,0,-1,0, + 58,60,1,0,0,0,59,52,1,0,0,0,59,56,1,0,0,0,60,1,1,0,0,0,61,62,5,2,0,0,62, + 63,3,0,0,0,63,64,6,1,-1,0,64,66,1,0,0,0,65,61,1,0,0,0,66,67,1,0,0,0,67, + 65,1,0,0,0,67,68,1,0,0,0,68,78,1,0,0,0,69,70,5,2,0,0,70,71,3,6,3,0,71, + 72,6,1,-1,0,72,74,1,0,0,0,73,69,1,0,0,0,74,75,1,0,0,0,75,73,1,0,0,0,75, + 76,1,0,0,0,76,78,1,0,0,0,77,65,1,0,0,0,77,73,1,0,0,0,78,3,1,0,0,0,79,80, + 3,0,0,0,80,84,6,2,-1,0,81,82,3,2,1,0,82,83,6,2,-1,0,83,85,1,0,0,0,84,81, + 1,0,0,0,84,85,1,0,0,0,85,5,1,0,0,0,86,87,5,3,0,0,87,88,3,4,2,0,88,89,6, + 3,-1,0,89,95,1,0,0,0,90,91,5,4,0,0,91,92,3,4,2,0,92,93,6,3,-1,0,93,95, + 1,0,0,0,94,86,1,0,0,0,94,90,1,0,0,0,95,110,1,0,0,0,96,97,5,3,0,0,97,98, + 3,6,3,0,98,99,6,3,-1,0,99,105,1,0,0,0,100,101,5,4,0,0,101,102,3,6,3,0, + 102,103,6,3,-1,0,103,105,1,0,0,0,104,96,1,0,0,0,104,100,1,0,0,0,105,110, + 1,0,0,0,106,107,3,4,2,0,107,108,6,3,-1,0,108,110,1,0,0,0,109,94,1,0,0, + 0,109,104,1,0,0,0,109,106,1,0,0,0,110,7,1,0,0,0,111,112,3,6,3,0,112,131, + 6,4,-1,0,113,119,5,5,0,0,114,115,7,0,0,0,115,120,6,4,-1,0,116,117,3,6, + 3,0,117,118,6,4,-1,0,118,120,1,0,0,0,119,114,1,0,0,0,119,116,1,0,0,0,120, + 130,1,0,0,0,121,122,5,8,0,0,122,123,3,6,3,0,123,124,6,4,-1,0,124,130,1, + 0,0,0,125,126,5,9,0,0,126,127,3,6,3,0,127,128,6,4,-1,0,128,130,1,0,0,0, + 129,113,1,0,0,0,129,121,1,0,0,0,129,125,1,0,0,0,130,133,1,0,0,0,131,129, + 1,0,0,0,131,132,1,0,0,0,132,134,1,0,0,0,133,131,1,0,0,0,134,135,6,4,-1, + 0,135,9,1,0,0,0,136,137,3,8,4,0,137,152,6,5,-1,0,138,144,5,4,0,0,139,140, + 7,0,0,0,140,145,6,5,-1,0,141,142,3,8,4,0,142,143,6,5,-1,0,143,145,1,0, + 0,0,144,139,1,0,0,0,144,141,1,0,0,0,145,151,1,0,0,0,146,147,5,3,0,0,147, + 148,3,8,4,0,148,149,6,5,-1,0,149,151,1,0,0,0,150,138,1,0,0,0,150,146,1, + 0,0,0,151,154,1,0,0,0,152,150,1,0,0,0,152,153,1,0,0,0,153,155,1,0,0,0, + 154,152,1,0,0,0,155,156,6,5,-1,0,156,11,1,0,0,0,157,158,3,10,5,0,158,169, + 6,6,-1,0,159,160,5,10,0,0,160,161,3,10,5,0,161,162,6,6,-1,0,162,168,1, + 0,0,0,163,164,5,11,0,0,164,165,3,10,5,0,165,166,6,6,-1,0,166,168,1,0,0, + 0,167,159,1,0,0,0,167,163,1,0,0,0,168,171,1,0,0,0,169,167,1,0,0,0,169, + 170,1,0,0,0,170,13,1,0,0,0,171,169,1,0,0,0,172,173,3,12,6,0,173,192,6, + 7,-1,0,174,175,5,12,0,0,175,176,3,12,6,0,176,177,6,7,-1,0,177,191,1,0, + 0,0,178,179,5,13,0,0,179,180,3,12,6,0,180,181,6,7,-1,0,181,191,1,0,0,0, + 182,183,5,14,0,0,183,184,3,12,6,0,184,185,6,7,-1,0,185,191,1,0,0,0,186, + 187,5,15,0,0,187,188,3,12,6,0,188,189,6,7,-1,0,189,191,1,0,0,0,190,174, + 1,0,0,0,190,178,1,0,0,0,190,182,1,0,0,0,190,186,1,0,0,0,191,194,1,0,0, + 0,192,190,1,0,0,0,192,193,1,0,0,0,193,15,1,0,0,0,194,192,1,0,0,0,195,196, + 3,14,7,0,196,227,6,8,-1,0,197,198,5,16,0,0,198,199,3,14,7,0,199,200,6, + 8,-1,0,200,226,1,0,0,0,201,202,5,17,0,0,202,203,3,14,7,0,203,204,6,8,-1, + 0,204,226,1,0,0,0,205,206,5,18,0,0,206,207,3,14,7,0,207,208,6,8,-1,0,208, + 226,1,0,0,0,209,210,5,19,0,0,210,211,3,14,7,0,211,212,6,8,-1,0,212,226, + 1,0,0,0,213,214,5,20,0,0,214,215,3,14,7,0,215,216,6,8,-1,0,216,226,1,0, + 0,0,217,218,5,21,0,0,218,219,3,14,7,0,219,220,6,8,-1,0,220,226,1,0,0,0, + 221,222,5,22,0,0,222,223,3,14,7,0,223,224,6,8,-1,0,224,226,1,0,0,0,225, + 197,1,0,0,0,225,201,1,0,0,0,225,205,1,0,0,0,225,209,1,0,0,0,225,213,1, + 0,0,0,225,217,1,0,0,0,225,221,1,0,0,0,226,229,1,0,0,0,227,225,1,0,0,0, + 227,228,1,0,0,0,228,17,1,0,0,0,229,227,1,0,0,0,230,231,3,16,8,0,231,253, + 6,9,-1,0,232,233,5,23,0,0,233,247,6,9,-1,0,234,235,5,24,0,0,235,247,6, + 9,-1,0,236,237,5,25,0,0,237,247,6,9,-1,0,238,239,5,26,0,0,239,247,6,9, + -1,0,240,241,5,27,0,0,241,247,6,9,-1,0,242,243,5,28,0,0,243,247,6,9,-1, + 0,244,245,5,29,0,0,245,247,6,9,-1,0,246,232,1,0,0,0,246,234,1,0,0,0,246, + 236,1,0,0,0,246,238,1,0,0,0,246,240,1,0,0,0,246,242,1,0,0,0,246,244,1, + 0,0,0,247,248,1,0,0,0,248,249,3,16,8,0,249,250,6,9,-1,0,250,252,1,0,0, + 0,251,246,1,0,0,0,252,255,1,0,0,0,253,251,1,0,0,0,253,254,1,0,0,0,254, + 262,1,0,0,0,255,253,1,0,0,0,256,257,5,30,0,0,257,258,5,9,0,0,258,259,3, + 16,8,0,259,260,5,31,0,0,260,261,6,9,-1,0,261,263,1,0,0,0,262,256,1,0,0, + 0,262,263,1,0,0,0,263,264,1,0,0,0,264,265,6,9,-1,0,265,19,1,0,0,0,266, + 267,5,32,0,0,267,268,3,18,9,0,268,269,6,10,-1,0,269,282,1,0,0,0,270,271, + 5,32,0,0,271,272,3,20,10,0,272,273,6,10,-1,0,273,282,1,0,0,0,274,275,5, + 32,0,0,275,276,3,34,17,0,276,277,6,10,-1,0,277,282,1,0,0,0,278,279,3,18, + 9,0,279,280,6,10,-1,0,280,282,1,0,0,0,281,266,1,0,0,0,281,270,1,0,0,0, + 281,274,1,0,0,0,281,278,1,0,0,0,282,21,1,0,0,0,283,284,3,20,10,0,284,299, + 6,11,-1,0,285,286,5,33,0,0,286,287,3,20,10,0,287,288,6,11,-1,0,288,298, + 1,0,0,0,289,290,5,34,0,0,290,291,3,20,10,0,291,292,6,11,-1,0,292,298,1, + 0,0,0,293,294,7,1,0,0,294,295,3,34,17,0,295,296,6,11,-1,0,296,298,1,0, + 0,0,297,285,1,0,0,0,297,289,1,0,0,0,297,293,1,0,0,0,298,301,1,0,0,0,299, + 297,1,0,0,0,299,300,1,0,0,0,300,23,1,0,0,0,301,299,1,0,0,0,302,303,3,22, + 11,0,303,314,6,12,-1,0,304,305,5,35,0,0,305,306,3,22,11,0,306,307,6,12, + -1,0,307,313,1,0,0,0,308,309,5,35,0,0,309,310,3,34,17,0,310,311,6,12,-1, + 0,311,313,1,0,0,0,312,304,1,0,0,0,312,308,1,0,0,0,313,316,1,0,0,0,314, + 312,1,0,0,0,314,315,1,0,0,0,315,25,1,0,0,0,316,314,1,0,0,0,317,318,3,24, + 12,0,318,329,6,13,-1,0,319,320,5,36,0,0,320,321,3,24,12,0,321,322,6,13, + -1,0,322,328,1,0,0,0,323,324,5,36,0,0,324,325,3,34,17,0,325,326,6,13,-1, + 0,326,328,1,0,0,0,327,319,1,0,0,0,327,323,1,0,0,0,328,331,1,0,0,0,329, + 327,1,0,0,0,329,330,1,0,0,0,330,27,1,0,0,0,331,329,1,0,0,0,332,333,3,26, + 13,0,333,348,6,14,-1,0,334,335,5,37,0,0,335,336,3,26,13,0,336,337,6,14, + -1,0,337,347,1,0,0,0,338,339,5,38,0,0,339,340,3,26,13,0,340,341,6,14,-1, + 0,341,347,1,0,0,0,342,343,7,2,0,0,343,344,3,34,17,0,344,345,6,14,-1,0, + 345,347,1,0,0,0,346,334,1,0,0,0,346,338,1,0,0,0,346,342,1,0,0,0,347,350, + 1,0,0,0,348,346,1,0,0,0,348,349,1,0,0,0,349,29,1,0,0,0,350,348,1,0,0,0, + 351,352,3,28,14,0,352,357,6,15,-1,0,353,354,5,39,0,0,354,355,3,30,15,0, + 355,356,6,15,-1,0,356,358,1,0,0,0,357,353,1,0,0,0,357,358,1,0,0,0,358, + 31,1,0,0,0,359,360,3,30,15,0,360,365,6,16,-1,0,361,362,5,40,0,0,362,363, + 3,32,16,0,363,364,6,16,-1,0,364,366,1,0,0,0,365,361,1,0,0,0,365,366,1, + 0,0,0,366,371,1,0,0,0,367,368,3,34,17,0,368,369,6,16,-1,0,369,371,1,0, + 0,0,370,359,1,0,0,0,370,367,1,0,0,0,371,33,1,0,0,0,372,373,3,36,18,0,373, + 374,3,38,19,0,374,375,5,41,0,0,375,376,3,32,16,0,376,377,6,17,-1,0,377, + 35,1,0,0,0,378,379,7,3,0,0,379,385,6,18,-1,0,380,381,7,4,0,0,381,385,6, + 18,-1,0,382,383,7,5,0,0,383,385,6,18,-1,0,384,378,1,0,0,0,384,380,1,0, + 0,0,384,382,1,0,0,0,385,37,1,0,0,0,386,387,3,16,8,0,387,394,6,19,-1,0, + 388,389,5,48,0,0,389,390,3,16,8,0,390,391,6,19,-1,0,391,393,1,0,0,0,392, + 388,1,0,0,0,393,396,1,0,0,0,394,392,1,0,0,0,394,395,1,0,0,0,395,397,1, + 0,0,0,396,394,1,0,0,0,397,398,6,19,-1,0,398,39,1,0,0,0,399,400,3,32,16, + 0,400,407,6,20,-1,0,401,402,5,48,0,0,402,403,3,32,16,0,403,404,6,20,-1, + 0,404,406,1,0,0,0,405,401,1,0,0,0,406,409,1,0,0,0,407,405,1,0,0,0,407, + 408,1,0,0,0,408,411,1,0,0,0,409,407,1,0,0,0,410,399,1,0,0,0,410,411,1, + 0,0,0,411,41,1,0,0,0,412,413,3,32,16,0,413,414,6,21,-1,0,414,418,1,0,0, + 0,415,416,7,0,0,0,416,418,6,21,-1,0,417,412,1,0,0,0,417,415,1,0,0,0,418, + 429,1,0,0,0,419,425,5,48,0,0,420,421,3,32,16,0,421,422,6,21,-1,0,422,426, + 1,0,0,0,423,424,7,0,0,0,424,426,6,21,-1,0,425,420,1,0,0,0,425,423,1,0, + 0,0,426,428,1,0,0,0,427,419,1,0,0,0,428,431,1,0,0,0,429,427,1,0,0,0,429, + 430,1,0,0,0,430,433,1,0,0,0,431,429,1,0,0,0,432,417,1,0,0,0,432,433,1, + 0,0,0,433,43,1,0,0,0,434,435,3,32,16,0,435,436,6,22,-1,0,436,437,5,49, + 0,0,437,438,3,32,16,0,438,439,6,22,-1,0,439,45,1,0,0,0,440,441,3,32,16, + 0,441,442,6,23,-1,0,442,443,5,41,0,0,443,444,3,32,16,0,444,445,6,23,-1, + 0,445,47,1,0,0,0,446,447,5,50,0,0,447,1135,6,24,-1,0,448,449,5,51,0,0, + 449,1135,6,24,-1,0,450,451,5,188,0,0,451,1135,6,24,-1,0,452,453,5,185, + 0,0,453,1135,6,24,-1,0,454,455,5,187,0,0,455,1135,6,24,-1,0,456,457,5, + 186,0,0,457,1135,6,24,-1,0,458,459,5,189,0,0,459,1135,6,24,-1,0,460,461, + 5,52,0,0,461,462,3,32,16,0,462,463,5,53,0,0,463,464,6,24,-1,0,464,1135, + 1,0,0,0,465,466,5,54,0,0,466,467,3,48,24,0,467,468,6,24,-1,0,468,1135, + 1,0,0,0,469,470,5,55,0,0,470,471,3,40,20,0,471,472,5,56,0,0,472,473,6, + 24,-1,0,473,1135,1,0,0,0,474,475,5,55,0,0,475,476,3,40,20,0,476,477,5, + 57,0,0,477,478,6,24,-1,0,478,1135,1,0,0,0,479,480,5,30,0,0,480,481,3,44, + 22,0,481,482,5,31,0,0,482,483,6,24,-1,0,483,1135,1,0,0,0,484,485,5,55, + 0,0,485,486,3,44,22,0,486,487,5,31,0,0,487,488,6,24,-1,0,488,1135,1,0, + 0,0,489,490,5,55,0,0,490,491,3,44,22,0,491,492,5,57,0,0,492,493,6,24,-1, + 0,493,1135,1,0,0,0,494,495,5,30,0,0,495,496,3,44,22,0,496,497,5,57,0,0, + 497,498,6,24,-1,0,498,1135,1,0,0,0,499,500,5,30,0,0,500,501,3,32,16,0, + 501,502,5,31,0,0,502,503,6,24,-1,0,503,1135,1,0,0,0,504,505,5,58,0,0,505, + 506,3,46,23,0,506,507,5,59,0,0,507,508,6,24,-1,0,508,1135,1,0,0,0,509, + 510,5,58,0,0,510,511,3,42,21,0,511,512,5,59,0,0,512,513,6,24,-1,0,513, + 1135,1,0,0,0,514,515,5,60,0,0,515,516,3,40,20,0,516,517,5,31,0,0,517,518, + 6,24,-1,0,518,1135,1,0,0,0,519,520,5,61,0,0,520,521,3,40,20,0,521,522, + 5,31,0,0,522,523,6,24,-1,0,523,1135,1,0,0,0,524,525,5,62,0,0,525,526,3, + 40,20,0,526,527,5,31,0,0,527,528,6,24,-1,0,528,1135,1,0,0,0,529,530,5, + 63,0,0,530,531,3,40,20,0,531,532,5,31,0,0,532,533,6,24,-1,0,533,1135,1, + 0,0,0,534,535,5,64,0,0,535,536,3,40,20,0,536,537,5,31,0,0,537,538,6,24, + -1,0,538,1135,1,0,0,0,539,540,5,65,0,0,540,541,3,40,20,0,541,542,5,31, + 0,0,542,543,6,24,-1,0,543,1135,1,0,0,0,544,545,5,66,0,0,545,546,3,40,20, + 0,546,547,5,31,0,0,547,548,6,24,-1,0,548,1135,1,0,0,0,549,550,5,67,0,0, + 550,551,3,40,20,0,551,552,5,31,0,0,552,553,6,24,-1,0,553,1135,1,0,0,0, + 554,555,5,68,0,0,555,556,3,40,20,0,556,557,5,31,0,0,557,558,6,24,-1,0, + 558,1135,1,0,0,0,559,560,5,69,0,0,560,561,3,40,20,0,561,562,5,31,0,0,562, + 563,6,24,-1,0,563,1135,1,0,0,0,564,565,5,70,0,0,565,566,3,40,20,0,566, + 567,5,31,0,0,567,568,6,24,-1,0,568,1135,1,0,0,0,569,570,5,71,0,0,570,571, + 3,40,20,0,571,572,5,31,0,0,572,573,6,24,-1,0,573,1135,1,0,0,0,574,575, + 5,72,0,0,575,576,3,40,20,0,576,577,5,31,0,0,577,578,6,24,-1,0,578,1135, + 1,0,0,0,579,580,5,73,0,0,580,581,3,40,20,0,581,582,5,31,0,0,582,583,6, + 24,-1,0,583,1135,1,0,0,0,584,585,5,74,0,0,585,586,3,40,20,0,586,587,5, + 31,0,0,587,588,6,24,-1,0,588,1135,1,0,0,0,589,590,5,75,0,0,590,591,3,40, + 20,0,591,592,5,31,0,0,592,593,6,24,-1,0,593,1135,1,0,0,0,594,595,5,76, + 0,0,595,596,3,40,20,0,596,597,5,31,0,0,597,598,6,24,-1,0,598,1135,1,0, + 0,0,599,600,5,77,0,0,600,601,3,40,20,0,601,602,5,31,0,0,602,603,6,24,-1, + 0,603,1135,1,0,0,0,604,605,5,78,0,0,605,606,3,40,20,0,606,607,5,31,0,0, + 607,608,6,24,-1,0,608,1135,1,0,0,0,609,610,5,79,0,0,610,611,3,40,20,0, + 611,612,5,31,0,0,612,613,6,24,-1,0,613,1135,1,0,0,0,614,615,5,80,0,0,615, + 616,3,40,20,0,616,617,5,31,0,0,617,618,6,24,-1,0,618,1135,1,0,0,0,619, + 620,5,81,0,0,620,621,3,40,20,0,621,622,5,31,0,0,622,623,6,24,-1,0,623, + 1135,1,0,0,0,624,625,5,82,0,0,625,626,3,40,20,0,626,627,5,31,0,0,627,628, + 6,24,-1,0,628,1135,1,0,0,0,629,630,5,83,0,0,630,631,3,40,20,0,631,632, + 5,31,0,0,632,633,6,24,-1,0,633,1135,1,0,0,0,634,635,5,84,0,0,635,636,3, + 40,20,0,636,637,5,31,0,0,637,638,6,24,-1,0,638,1135,1,0,0,0,639,640,5, + 85,0,0,640,641,3,40,20,0,641,642,5,31,0,0,642,643,6,24,-1,0,643,1135,1, + 0,0,0,644,645,5,86,0,0,645,646,3,40,20,0,646,647,5,31,0,0,647,648,6,24, + -1,0,648,1135,1,0,0,0,649,650,5,87,0,0,650,651,3,40,20,0,651,652,5,31, + 0,0,652,653,6,24,-1,0,653,1135,1,0,0,0,654,655,5,88,0,0,655,656,3,40,20, + 0,656,657,5,31,0,0,657,658,6,24,-1,0,658,1135,1,0,0,0,659,660,5,89,0,0, + 660,661,3,40,20,0,661,662,5,31,0,0,662,663,6,24,-1,0,663,1135,1,0,0,0, + 664,665,5,90,0,0,665,666,3,40,20,0,666,667,5,31,0,0,667,668,6,24,-1,0, + 668,1135,1,0,0,0,669,670,5,91,0,0,670,671,3,40,20,0,671,672,5,31,0,0,672, + 673,6,24,-1,0,673,1135,1,0,0,0,674,675,5,92,0,0,675,676,3,40,20,0,676, + 677,5,31,0,0,677,678,6,24,-1,0,678,1135,1,0,0,0,679,680,5,93,0,0,680,681, + 3,40,20,0,681,682,5,31,0,0,682,683,6,24,-1,0,683,1135,1,0,0,0,684,685, + 5,94,0,0,685,686,3,40,20,0,686,687,5,31,0,0,687,688,6,24,-1,0,688,1135, + 1,0,0,0,689,690,5,95,0,0,690,691,3,40,20,0,691,692,5,31,0,0,692,693,6, + 24,-1,0,693,1135,1,0,0,0,694,695,5,96,0,0,695,696,3,40,20,0,696,697,5, + 31,0,0,697,698,6,24,-1,0,698,1135,1,0,0,0,699,700,5,97,0,0,700,701,3,40, + 20,0,701,702,5,31,0,0,702,703,6,24,-1,0,703,1135,1,0,0,0,704,705,5,98, + 0,0,705,706,3,40,20,0,706,707,5,31,0,0,707,708,6,24,-1,0,708,1135,1,0, + 0,0,709,710,5,99,0,0,710,711,3,40,20,0,711,712,5,31,0,0,712,713,6,24,-1, + 0,713,1135,1,0,0,0,714,715,5,100,0,0,715,716,3,40,20,0,716,717,5,31,0, + 0,717,718,6,24,-1,0,718,1135,1,0,0,0,719,720,5,101,0,0,720,721,3,40,20, + 0,721,722,5,31,0,0,722,723,6,24,-1,0,723,1135,1,0,0,0,724,725,5,102,0, + 0,725,726,3,40,20,0,726,727,5,31,0,0,727,728,6,24,-1,0,728,1135,1,0,0, + 0,729,730,5,103,0,0,730,731,3,40,20,0,731,732,5,31,0,0,732,733,6,24,-1, + 0,733,1135,1,0,0,0,734,735,5,104,0,0,735,736,3,40,20,0,736,737,5,31,0, + 0,737,738,6,24,-1,0,738,1135,1,0,0,0,739,740,5,105,0,0,740,741,3,40,20, + 0,741,742,5,31,0,0,742,743,6,24,-1,0,743,1135,1,0,0,0,744,745,5,106,0, + 0,745,746,3,40,20,0,746,747,5,31,0,0,747,748,6,24,-1,0,748,1135,1,0,0, + 0,749,750,5,107,0,0,750,751,3,40,20,0,751,752,5,31,0,0,752,753,6,24,-1, + 0,753,1135,1,0,0,0,754,755,5,108,0,0,755,756,3,40,20,0,756,757,5,31,0, + 0,757,758,6,24,-1,0,758,1135,1,0,0,0,759,760,5,109,0,0,760,761,3,40,20, + 0,761,762,5,31,0,0,762,763,6,24,-1,0,763,1135,1,0,0,0,764,765,5,110,0, + 0,765,766,3,40,20,0,766,767,5,31,0,0,767,768,6,24,-1,0,768,1135,1,0,0, + 0,769,770,5,111,0,0,770,771,3,40,20,0,771,772,5,31,0,0,772,773,6,24,-1, + 0,773,1135,1,0,0,0,774,775,5,112,0,0,775,776,3,40,20,0,776,777,5,31,0, + 0,777,778,6,24,-1,0,778,1135,1,0,0,0,779,780,5,113,0,0,780,781,3,40,20, + 0,781,782,5,31,0,0,782,783,6,24,-1,0,783,1135,1,0,0,0,784,785,5,114,0, + 0,785,786,3,40,20,0,786,787,5,31,0,0,787,788,6,24,-1,0,788,1135,1,0,0, + 0,789,790,5,115,0,0,790,791,3,40,20,0,791,792,5,31,0,0,792,793,6,24,-1, + 0,793,1135,1,0,0,0,794,795,5,116,0,0,795,796,3,40,20,0,796,797,5,31,0, + 0,797,798,6,24,-1,0,798,1135,1,0,0,0,799,800,5,117,0,0,800,801,3,40,20, + 0,801,802,5,31,0,0,802,803,6,24,-1,0,803,1135,1,0,0,0,804,805,5,118,0, + 0,805,806,3,40,20,0,806,807,5,31,0,0,807,808,6,24,-1,0,808,1135,1,0,0, + 0,809,810,5,119,0,0,810,811,3,40,20,0,811,812,5,31,0,0,812,813,6,24,-1, + 0,813,1135,1,0,0,0,814,815,5,120,0,0,815,816,3,40,20,0,816,817,5,31,0, + 0,817,818,6,24,-1,0,818,1135,1,0,0,0,819,820,5,121,0,0,820,821,3,40,20, + 0,821,822,5,31,0,0,822,823,6,24,-1,0,823,1135,1,0,0,0,824,825,5,122,0, + 0,825,826,3,40,20,0,826,827,5,31,0,0,827,828,6,24,-1,0,828,1135,1,0,0, + 0,829,830,5,123,0,0,830,831,3,40,20,0,831,832,5,31,0,0,832,833,6,24,-1, + 0,833,1135,1,0,0,0,834,835,5,124,0,0,835,836,3,40,20,0,836,837,5,31,0, + 0,837,838,6,24,-1,0,838,1135,1,0,0,0,839,840,5,125,0,0,840,841,3,40,20, + 0,841,842,5,31,0,0,842,843,6,24,-1,0,843,1135,1,0,0,0,844,845,5,126,0, + 0,845,846,3,40,20,0,846,847,5,31,0,0,847,848,6,24,-1,0,848,1135,1,0,0, + 0,849,850,5,127,0,0,850,851,3,40,20,0,851,852,5,31,0,0,852,853,6,24,-1, + 0,853,1135,1,0,0,0,854,855,5,128,0,0,855,856,3,40,20,0,856,857,5,31,0, + 0,857,858,6,24,-1,0,858,1135,1,0,0,0,859,860,5,129,0,0,860,861,3,40,20, + 0,861,862,5,31,0,0,862,863,6,24,-1,0,863,1135,1,0,0,0,864,865,5,130,0, + 0,865,866,3,40,20,0,866,867,5,31,0,0,867,868,6,24,-1,0,868,1135,1,0,0, + 0,869,870,5,131,0,0,870,871,3,40,20,0,871,872,5,31,0,0,872,873,6,24,-1, + 0,873,1135,1,0,0,0,874,875,5,132,0,0,875,876,3,40,20,0,876,877,5,31,0, + 0,877,878,6,24,-1,0,878,1135,1,0,0,0,879,880,5,133,0,0,880,881,3,40,20, + 0,881,882,5,31,0,0,882,883,6,24,-1,0,883,1135,1,0,0,0,884,885,5,134,0, + 0,885,886,3,40,20,0,886,887,5,31,0,0,887,888,6,24,-1,0,888,1135,1,0,0, + 0,889,890,5,135,0,0,890,891,3,40,20,0,891,892,5,31,0,0,892,893,6,24,-1, + 0,893,1135,1,0,0,0,894,895,5,136,0,0,895,896,3,40,20,0,896,897,5,31,0, + 0,897,898,6,24,-1,0,898,1135,1,0,0,0,899,900,5,137,0,0,900,901,3,40,20, + 0,901,902,5,31,0,0,902,903,6,24,-1,0,903,1135,1,0,0,0,904,905,5,138,0, + 0,905,906,3,40,20,0,906,907,5,31,0,0,907,908,6,24,-1,0,908,1135,1,0,0, + 0,909,910,5,139,0,0,910,911,3,40,20,0,911,912,5,31,0,0,912,913,6,24,-1, + 0,913,1135,1,0,0,0,914,915,5,140,0,0,915,916,3,40,20,0,916,917,5,31,0, + 0,917,918,6,24,-1,0,918,1135,1,0,0,0,919,920,5,141,0,0,920,921,3,40,20, + 0,921,922,5,31,0,0,922,923,6,24,-1,0,923,1135,1,0,0,0,924,925,5,142,0, + 0,925,926,3,40,20,0,926,927,5,31,0,0,927,928,6,24,-1,0,928,1135,1,0,0, + 0,929,930,5,143,0,0,930,931,3,40,20,0,931,932,5,31,0,0,932,933,6,24,-1, + 0,933,1135,1,0,0,0,934,935,5,144,0,0,935,936,3,40,20,0,936,937,5,31,0, + 0,937,938,6,24,-1,0,938,1135,1,0,0,0,939,940,5,145,0,0,940,941,3,40,20, + 0,941,942,5,31,0,0,942,943,6,24,-1,0,943,1135,1,0,0,0,944,945,5,146,0, + 0,945,946,3,40,20,0,946,947,5,31,0,0,947,948,6,24,-1,0,948,1135,1,0,0, + 0,949,950,5,147,0,0,950,951,3,40,20,0,951,952,5,31,0,0,952,953,6,24,-1, + 0,953,1135,1,0,0,0,954,955,5,148,0,0,955,956,3,40,20,0,956,957,5,31,0, + 0,957,958,6,24,-1,0,958,1135,1,0,0,0,959,960,5,149,0,0,960,961,3,40,20, + 0,961,962,5,31,0,0,962,963,6,24,-1,0,963,1135,1,0,0,0,964,965,5,150,0, + 0,965,966,3,40,20,0,966,967,5,31,0,0,967,968,6,24,-1,0,968,1135,1,0,0, + 0,969,970,5,151,0,0,970,971,3,40,20,0,971,972,5,31,0,0,972,973,6,24,-1, + 0,973,1135,1,0,0,0,974,975,5,152,0,0,975,976,3,40,20,0,976,977,5,31,0, + 0,977,978,6,24,-1,0,978,1135,1,0,0,0,979,980,5,153,0,0,980,981,3,40,20, + 0,981,982,5,31,0,0,982,983,6,24,-1,0,983,1135,1,0,0,0,984,985,5,154,0, + 0,985,986,3,40,20,0,986,987,5,31,0,0,987,988,6,24,-1,0,988,1135,1,0,0, + 0,989,990,5,155,0,0,990,991,3,40,20,0,991,992,5,31,0,0,992,993,6,24,-1, + 0,993,1135,1,0,0,0,994,995,5,156,0,0,995,996,3,40,20,0,996,997,5,31,0, + 0,997,998,6,24,-1,0,998,1135,1,0,0,0,999,1000,5,157,0,0,1000,1001,3,40, + 20,0,1001,1002,5,31,0,0,1002,1003,6,24,-1,0,1003,1135,1,0,0,0,1004,1005, + 5,158,0,0,1005,1006,3,40,20,0,1006,1007,5,31,0,0,1007,1008,6,24,-1,0,1008, + 1135,1,0,0,0,1009,1010,5,159,0,0,1010,1011,3,40,20,0,1011,1012,5,31,0, + 0,1012,1013,6,24,-1,0,1013,1135,1,0,0,0,1014,1015,5,160,0,0,1015,1016, + 3,40,20,0,1016,1017,5,31,0,0,1017,1018,6,24,-1,0,1018,1135,1,0,0,0,1019, + 1020,5,161,0,0,1020,1021,3,40,20,0,1021,1022,5,31,0,0,1022,1023,6,24,-1, + 0,1023,1135,1,0,0,0,1024,1025,5,162,0,0,1025,1026,3,40,20,0,1026,1027, + 5,31,0,0,1027,1028,6,24,-1,0,1028,1135,1,0,0,0,1029,1030,5,163,0,0,1030, + 1031,3,40,20,0,1031,1032,5,31,0,0,1032,1033,6,24,-1,0,1033,1135,1,0,0, + 0,1034,1035,5,164,0,0,1035,1036,3,40,20,0,1036,1037,5,31,0,0,1037,1038, + 6,24,-1,0,1038,1135,1,0,0,0,1039,1040,5,165,0,0,1040,1041,3,40,20,0,1041, + 1042,5,31,0,0,1042,1043,6,24,-1,0,1043,1135,1,0,0,0,1044,1045,5,166,0, + 0,1045,1046,3,40,20,0,1046,1047,5,31,0,0,1047,1048,6,24,-1,0,1048,1135, + 1,0,0,0,1049,1050,5,167,0,0,1050,1051,3,40,20,0,1051,1052,5,31,0,0,1052, + 1053,6,24,-1,0,1053,1135,1,0,0,0,1054,1055,5,168,0,0,1055,1056,3,40,20, + 0,1056,1057,5,31,0,0,1057,1058,6,24,-1,0,1058,1135,1,0,0,0,1059,1060,5, + 169,0,0,1060,1061,3,40,20,0,1061,1062,5,31,0,0,1062,1063,6,24,-1,0,1063, + 1135,1,0,0,0,1064,1065,5,170,0,0,1065,1066,3,40,20,0,1066,1067,5,31,0, + 0,1067,1068,6,24,-1,0,1068,1135,1,0,0,0,1069,1070,5,171,0,0,1070,1071, + 3,40,20,0,1071,1072,5,31,0,0,1072,1073,6,24,-1,0,1073,1135,1,0,0,0,1074, + 1075,5,172,0,0,1075,1076,3,40,20,0,1076,1077,5,31,0,0,1077,1078,6,24,-1, + 0,1078,1135,1,0,0,0,1079,1080,5,173,0,0,1080,1081,3,40,20,0,1081,1082, + 5,31,0,0,1082,1083,6,24,-1,0,1083,1135,1,0,0,0,1084,1085,5,174,0,0,1085, + 1086,3,40,20,0,1086,1087,5,31,0,0,1087,1088,6,24,-1,0,1088,1135,1,0,0, + 0,1089,1090,5,175,0,0,1090,1091,3,40,20,0,1091,1092,5,31,0,0,1092,1093, + 6,24,-1,0,1093,1135,1,0,0,0,1094,1095,5,176,0,0,1095,1096,3,40,20,0,1096, + 1097,5,31,0,0,1097,1098,6,24,-1,0,1098,1135,1,0,0,0,1099,1100,5,177,0, + 0,1100,1101,3,40,20,0,1101,1102,5,31,0,0,1102,1103,6,24,-1,0,1103,1135, + 1,0,0,0,1104,1105,5,178,0,0,1105,1106,3,40,20,0,1106,1107,5,31,0,0,1107, + 1108,6,24,-1,0,1108,1135,1,0,0,0,1109,1110,5,179,0,0,1110,1111,3,40,20, + 0,1111,1112,5,31,0,0,1112,1113,6,24,-1,0,1113,1135,1,0,0,0,1114,1115,5, + 180,0,0,1115,1116,3,40,20,0,1116,1117,5,31,0,0,1117,1118,6,24,-1,0,1118, + 1135,1,0,0,0,1119,1120,5,181,0,0,1120,1121,3,40,20,0,1121,1122,5,31,0, + 0,1122,1123,6,24,-1,0,1123,1135,1,0,0,0,1124,1125,5,182,0,0,1125,1126, + 3,40,20,0,1126,1127,5,31,0,0,1127,1128,6,24,-1,0,1128,1135,1,0,0,0,1129, + 1130,5,183,0,0,1130,1131,3,40,20,0,1131,1132,5,31,0,0,1132,1133,6,24,-1, + 0,1133,1135,1,0,0,0,1134,446,1,0,0,0,1134,448,1,0,0,0,1134,450,1,0,0,0, + 1134,452,1,0,0,0,1134,454,1,0,0,0,1134,456,1,0,0,0,1134,458,1,0,0,0,1134, + 460,1,0,0,0,1134,465,1,0,0,0,1134,469,1,0,0,0,1134,474,1,0,0,0,1134,479, + 1,0,0,0,1134,484,1,0,0,0,1134,489,1,0,0,0,1134,494,1,0,0,0,1134,499,1, + 0,0,0,1134,504,1,0,0,0,1134,509,1,0,0,0,1134,514,1,0,0,0,1134,519,1,0, + 0,0,1134,524,1,0,0,0,1134,529,1,0,0,0,1134,534,1,0,0,0,1134,539,1,0,0, + 0,1134,544,1,0,0,0,1134,549,1,0,0,0,1134,554,1,0,0,0,1134,559,1,0,0,0, + 1134,564,1,0,0,0,1134,569,1,0,0,0,1134,574,1,0,0,0,1134,579,1,0,0,0,1134, + 584,1,0,0,0,1134,589,1,0,0,0,1134,594,1,0,0,0,1134,599,1,0,0,0,1134,604, + 1,0,0,0,1134,609,1,0,0,0,1134,614,1,0,0,0,1134,619,1,0,0,0,1134,624,1, + 0,0,0,1134,629,1,0,0,0,1134,634,1,0,0,0,1134,639,1,0,0,0,1134,644,1,0, + 0,0,1134,649,1,0,0,0,1134,654,1,0,0,0,1134,659,1,0,0,0,1134,664,1,0,0, + 0,1134,669,1,0,0,0,1134,674,1,0,0,0,1134,679,1,0,0,0,1134,684,1,0,0,0, + 1134,689,1,0,0,0,1134,694,1,0,0,0,1134,699,1,0,0,0,1134,704,1,0,0,0,1134, + 709,1,0,0,0,1134,714,1,0,0,0,1134,719,1,0,0,0,1134,724,1,0,0,0,1134,729, + 1,0,0,0,1134,734,1,0,0,0,1134,739,1,0,0,0,1134,744,1,0,0,0,1134,749,1, + 0,0,0,1134,754,1,0,0,0,1134,759,1,0,0,0,1134,764,1,0,0,0,1134,769,1,0, + 0,0,1134,774,1,0,0,0,1134,779,1,0,0,0,1134,784,1,0,0,0,1134,789,1,0,0, + 0,1134,794,1,0,0,0,1134,799,1,0,0,0,1134,804,1,0,0,0,1134,809,1,0,0,0, + 1134,814,1,0,0,0,1134,819,1,0,0,0,1134,824,1,0,0,0,1134,829,1,0,0,0,1134, + 834,1,0,0,0,1134,839,1,0,0,0,1134,844,1,0,0,0,1134,849,1,0,0,0,1134,854, + 1,0,0,0,1134,859,1,0,0,0,1134,864,1,0,0,0,1134,869,1,0,0,0,1134,874,1, + 0,0,0,1134,879,1,0,0,0,1134,884,1,0,0,0,1134,889,1,0,0,0,1134,894,1,0, + 0,0,1134,899,1,0,0,0,1134,904,1,0,0,0,1134,909,1,0,0,0,1134,914,1,0,0, + 0,1134,919,1,0,0,0,1134,924,1,0,0,0,1134,929,1,0,0,0,1134,934,1,0,0,0, + 1134,939,1,0,0,0,1134,944,1,0,0,0,1134,949,1,0,0,0,1134,954,1,0,0,0,1134, + 959,1,0,0,0,1134,964,1,0,0,0,1134,969,1,0,0,0,1134,974,1,0,0,0,1134,979, + 1,0,0,0,1134,984,1,0,0,0,1134,989,1,0,0,0,1134,994,1,0,0,0,1134,999,1, + 0,0,0,1134,1004,1,0,0,0,1134,1009,1,0,0,0,1134,1014,1,0,0,0,1134,1019, + 1,0,0,0,1134,1024,1,0,0,0,1134,1029,1,0,0,0,1134,1034,1,0,0,0,1134,1039, + 1,0,0,0,1134,1044,1,0,0,0,1134,1049,1,0,0,0,1134,1054,1,0,0,0,1134,1059, + 1,0,0,0,1134,1064,1,0,0,0,1134,1069,1,0,0,0,1134,1074,1,0,0,0,1134,1079, + 1,0,0,0,1134,1084,1,0,0,0,1134,1089,1,0,0,0,1134,1094,1,0,0,0,1134,1099, + 1,0,0,0,1134,1104,1,0,0,0,1134,1109,1,0,0,0,1134,1114,1,0,0,0,1134,1119, + 1,0,0,0,1134,1124,1,0,0,0,1134,1129,1,0,0,0,1135,49,1,0,0,0,1136,1137, + 3,32,16,0,1137,1138,5,0,0,1,1138,1139,6,25,-1,0,1139,51,1,0,0,0,44,59, + 67,75,77,84,94,104,109,119,129,131,144,150,152,167,169,190,192,225,227, + 246,253,262,281,297,299,312,314,327,329,346,348,357,365,370,384,394,407, + 410,417,425,429,432,1134 }; public static readonly ATN _ATN = diff --git a/Sources/AngouriMath/Docs/Usage/Syntax.md b/Sources/AngouriMath/Docs/Usage/Syntax.md index 41a93deab..d53d09cd1 100644 --- a/Sources/AngouriMath/Docs/Usage/Syntax.md +++ b/Sources/AngouriMath/Docs/Usage/Syntax.md @@ -353,8 +353,10 @@ of `S` satisfies `P`. The set is mandatory, because a statement is quantified ov `forall x : P` is refused. Several names may share a set, `forall x, y in RR : 2 x y <= x^2 + y^2`, and several sets may be listed, `forall a in ZZ, b in ZZ+ : ...`; either way the quantifiers nest from the left and print nested. The body runs to the end of the line, as a lambda arrow's does, so -a quantifier under a connective is bracketed: `(forall x in RR : x^2 >= 0) and Q`. The one -exception is `not`, which reads `not forall x in S : P` as the negation of the whole statement. +a quantifier before a connective is bracketed: `(forall x in RR : x^2 >= 0) and Q`. After one — +`and`, `or`, `xor`, `implies`, `not` — it needs no brackets and takes the rest of the line there +too: `n >= 2 implies exists a in ZZ* : n = 2 a + 1` is `n >= 2 implies (exists a in ZZ* : n = 2 a + 1)`, +and `not forall x in S : P` is the negation of the whole statement. The name is bound throughout the body and the set, so `forall x in RR : x < y` is a statement about `y`. Decided over a finite set by evaluating the body at every member (`forall x in {1, 2, 3, 4} : exists y in {3, 4, 5, 6, 7, 8} : x + y = 7` is `True`), over `BB` as over `{True, diff --git a/Sources/Tests/UnitTests/Core/QuantifierTest.cs b/Sources/Tests/UnitTests/Core/QuantifierTest.cs index b8e9f2100..f83eec87a 100644 --- a/Sources/Tests/UnitTests/Core/QuantifierTest.cs +++ b/Sources/Tests/UnitTests/Core/QuantifierTest.cs @@ -236,6 +236,28 @@ public void PrintsAndReadsBack(string input, string printed) Assert.Equal(entity, printed.ToEntity()); } + /// + /// A quantifier after a connective takes the rest of the line, as it does at the start of + /// one, so the brackets it needed there are optional: Sullivan and Mackey's §5.5.3 Try 3 as + /// they write it. https://github.com/asc-community/AngouriMath/issues/1409 + /// + [Theory] + [InlineData("p implies forall x in S : x > 0", "p implies (forall x in S : x > 0)")] + [InlineData("p -> exists x in S : x > 0 and x < 1", "p -> (exists x in S : x > 0 and x < 1)")] + [InlineData("p and exists x in S : x > 0 or x < 1", "p and (exists x in S : x > 0 or x < 1)")] + [InlineData("p & forall x in S : x > 0", "p & (forall x in S : x > 0)")] + [InlineData("p or exists! x in S : x = 0", "p or (exists! x in S : x = 0)")] + [InlineData("p xor forall x in S : x > 0", "p xor (forall x in S : x > 0)")] + [InlineData("forall n in ZZ : n >= 2 implies exists a in ZZ* : exists b in ZZ* : n = 2 a + 3 b", + "forall n in ZZ : n >= 2 implies (exists a in ZZ* : exists b in ZZ* : n = 2 a + 3 b)")] + public void AQuantifierAfterAConnectiveTakesTheRestOfTheLine(string written, string bracketed) + => Assert.Equal(bracketed.ToEntity(), written.ToEntity()); + + [Fact] + public void TheCoinsReadAsTheBookWritesThem() + => Assert.Equal(Entity.Boolean.True, + "forall n in ZZ : n >= 2 implies exists a in ZZ* : exists b in ZZ* : n = 2 a + 3 b".ToEntity().Simplify()); + [Fact] public void Latex() => Assert.Equal(@"\forall x \in \mathbb{R} : {x}^{2} \geq 0", "forall x in RR : x^2 >= 0".ToEntity().Latexize());