From 15e3e851ad4029c2973f970e3246fe0590c4f094 Mon Sep 17 00:00:00 2001 From: Marius Andra Date: Thu, 26 Oct 2023 14:22:22 +0200 Subject: [PATCH] feat(hogql): HogQLX (#18097) --- hogql_parser/HogQLLexer.cpp | 872 +++---- hogql_parser/HogQLLexer.h | 22 +- hogql_parser/HogQLLexer.interp | 10 +- hogql_parser/HogQLLexer.tokens | 16 +- hogql_parser/HogQLParser.cpp | 2297 ++++++++++-------- hogql_parser/HogQLParser.h | 116 +- hogql_parser/HogQLParser.interp | 9 +- hogql_parser/HogQLParser.tokens | 16 +- hogql_parser/HogQLParserBaseVisitor.h | 20 + hogql_parser/HogQLParserVisitor.h | 10 + hogql_parser/parser.cpp | 73 +- hogql_parser/setup.py | 2 +- posthog/hogql/ast.py | 20 +- posthog/hogql/base.py | 2 + posthog/hogql/grammar/HogQLLexer.g4 | 21 +- posthog/hogql/grammar/HogQLLexer.interp | 10 +- posthog/hogql/grammar/HogQLLexer.py | 1531 ++++++------ posthog/hogql/grammar/HogQLLexer.tokens | 16 +- posthog/hogql/grammar/HogQLParser.g4 | 20 +- posthog/hogql/grammar/HogQLParser.interp | 9 +- posthog/hogql/grammar/HogQLParser.py | 2408 +++++++++++-------- posthog/hogql/grammar/HogQLParser.tokens | 16 +- posthog/hogql/grammar/HogQLParserVisitor.py | 25 + posthog/hogql/parser.py | 36 +- posthog/hogql/resolver.py | 8 +- posthog/hogql/resolver_utils.py | 37 +- posthog/hogql/test/_test_parser.py | 70 +- posthog/hogql/test/test_metadata.py | 2 +- posthog/hogql/test/test_resolver.py | 38 +- posthog/hogql/visitor.py | 13 + requirements.in | 2 +- requirements.txt | 2 +- 32 files changed, 4398 insertions(+), 3351 deletions(-) diff --git a/hogql_parser/HogQLLexer.cpp b/hogql_parser/HogQLLexer.cpp index 1331605dd768e..86f7a804f5d7b 100644 --- a/hogql_parser/HogQLLexer.cpp +++ b/hogql_parser/HogQLLexer.cpp @@ -83,8 +83,8 @@ void hogqllexerLexerInitialize() { "TRIM", "TRUNCATE", "TTL", "TYPE", "UNBOUNDED", "UNION", "UPDATE", "USE", "USING", "UUID", "VALUES", "VIEW", "VOLUME", "WATCH", "WEEK", "WHEN", "WHERE", "WINDOW", "WITH", "YEAR", "JSON_FALSE", "JSON_TRUE", - "ESCAPE_CHAR", "IDENTIFIER", "FLOATING_LITERAL", "OCTAL_LITERAL", - "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", "PLACEHOLDER", + "ESCAPE_CHAR_SINGLE", "ESCAPE_CHAR_DOUBLE", "IDENTIFIER", "FLOATING_LITERAL", + "OCTAL_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "LETTER", "OCT_DIGIT", "DEC_DIGIT", "HEX_DIGIT", "ARROW", "ASTERISK", "BACKQUOTE", @@ -149,8 +149,8 @@ void hogqllexerLexerInitialize() { "TRIM", "TRUNCATE", "TTL", "TYPE", "UNBOUNDED", "UNION", "UPDATE", "USE", "USING", "UUID", "VALUES", "VIEW", "VOLUME", "WATCH", "WEEK", "WHEN", "WHERE", "WINDOW", "WITH", "YEAR", "JSON_FALSE", "JSON_TRUE", - "ESCAPE_CHAR", "IDENTIFIER", "FLOATING_LITERAL", "OCTAL_LITERAL", - "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", "PLACEHOLDER", + "ESCAPE_CHAR_SINGLE", "ESCAPE_CHAR_DOUBLE", "IDENTIFIER", "FLOATING_LITERAL", + "OCTAL_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", "ARROW", "ASTERISK", "BACKQUOTE", "BACKSLASH", "COLON", "COMMA", "CONCAT", "DASH", "DOLLAR", "DOT", "EQ_DOUBLE", "EQ_SINGLE", "GT_EQ", "GT", "HASH", "IREGEX_SINGLE", "IREGEX_DOUBLE", "LBRACE", "LBRACKET", "LPAREN", @@ -161,7 +161,7 @@ void hogqllexerLexerInitialize() { } ); static const int32_t serializedATNSegment[] = { - 4,0,242,2222,6,-1,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, + 4,0,242,2241,6,-1,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,2,26,7,26,2,27,7,27,2, @@ -306,323 +306,324 @@ void hogqllexerLexerInitialize() { 1,191,1,191,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192, 1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192, 1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,3,192,1870,8,192,1,193, - 1,193,1,193,3,193,1875,8,193,1,193,1,193,1,193,1,193,5,193,1881,8,193, - 10,193,12,193,1884,9,193,1,193,1,193,1,193,1,193,1,193,1,193,5,193,1892, - 8,193,10,193,12,193,1895,9,193,1,193,1,193,1,193,1,193,1,193,1,193,1, - 193,1,193,5,193,1905,8,193,10,193,12,193,1908,9,193,1,193,1,193,3,193, - 1912,8,193,1,194,1,194,1,194,5,194,1917,8,194,10,194,12,194,1920,9,194, - 1,194,1,194,3,194,1924,8,194,1,194,1,194,3,194,1928,8,194,1,194,4,194, - 1931,8,194,11,194,12,194,1932,1,194,1,194,1,194,3,194,1938,8,194,1,194, - 1,194,3,194,1942,8,194,1,194,4,194,1945,8,194,11,194,12,194,1946,1,194, - 1,194,1,194,5,194,1952,8,194,10,194,12,194,1955,9,194,1,194,1,194,1,194, - 3,194,1960,8,194,1,194,4,194,1963,8,194,11,194,12,194,1964,1,194,1,194, - 1,194,1,194,1,194,3,194,1972,8,194,1,194,4,194,1975,8,194,11,194,12,194, - 1976,1,194,1,194,1,194,1,194,3,194,1983,8,194,1,194,4,194,1986,8,194, - 11,194,12,194,1987,3,194,1990,8,194,1,195,1,195,4,195,1994,8,195,11,195, - 12,195,1995,1,196,4,196,1999,8,196,11,196,12,196,2000,1,197,1,197,1,197, - 4,197,2006,8,197,11,197,12,197,2007,1,198,1,198,1,198,1,198,1,198,1,198, - 5,198,2016,8,198,10,198,12,198,2019,9,198,1,198,1,198,1,199,1,199,1,199, - 1,199,1,199,1,199,5,199,2029,8,199,10,199,12,199,2032,9,199,1,199,1,199, - 1,200,1,200,1,201,1,201,1,202,1,202,1,203,1,203,1,204,1,204,1,205,1,205, - 1,206,1,206,1,207,1,207,1,208,1,208,1,209,1,209,1,210,1,210,1,211,1,211, - 1,212,1,212,1,213,1,213,1,214,1,214,1,215,1,215,1,216,1,216,1,217,1,217, - 1,218,1,218,1,219,1,219,1,220,1,220,1,221,1,221,1,222,1,222,1,223,1,223, - 1,224,1,224,1,225,1,225,1,226,1,226,1,227,1,227,1,228,1,228,1,229,1,229, - 1,230,1,230,1,230,1,231,1,231,1,232,1,232,1,233,1,233,1,234,1,234,1,235, - 1,235,1,236,1,236,1,236,1,237,1,237,1,238,1,238,1,239,1,239,1,240,1,240, - 1,240,1,241,1,241,1,242,1,242,1,242,1,243,1,243,1,244,1,244,1,245,1,245, - 1,245,1,246,1,246,1,246,1,246,1,247,1,247,1,248,1,248,1,249,1,249,1,250, - 1,250,1,250,1,251,1,251,1,252,1,252,1,252,1,252,3,252,2152,8,252,1,253, - 1,253,1,253,1,253,1,254,1,254,1,254,1,255,1,255,1,255,1,256,1,256,1,257, - 1,257,1,258,1,258,1,259,1,259,1,260,1,260,1,261,1,261,1,262,1,262,1,262, - 1,263,1,263,1,264,1,264,1,265,1,265,1,266,1,266,1,267,1,267,1,268,1,268, - 1,269,1,269,1,269,1,269,5,269,2195,8,269,10,269,12,269,2198,9,269,1,269, - 1,269,1,269,1,269,1,269,1,270,1,270,1,270,1,270,5,270,2209,8,270,10,270, - 12,270,2212,9,270,1,270,3,270,2215,8,270,1,270,1,270,1,271,1,271,1,271, - 1,271,1,2196,0,272,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11, - 23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45, - 23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32,65,33,67,34, - 69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43,87,44,89,45,91, - 46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107,54,109,55,111,56, - 113,57,115,58,117,59,119,60,121,61,123,62,125,63,127,64,129,65,131,66, - 133,67,135,68,137,69,139,70,141,71,143,72,145,73,147,74,149,75,151,76, - 153,77,155,78,157,79,159,80,161,81,163,82,165,83,167,84,169,85,171,86, - 173,87,175,88,177,89,179,90,181,91,183,92,185,93,187,94,189,95,191,96, - 193,97,195,98,197,99,199,100,201,101,203,102,205,103,207,104,209,105, - 211,106,213,107,215,108,217,109,219,110,221,111,223,112,225,113,227,114, - 229,115,231,116,233,117,235,118,237,119,239,120,241,121,243,122,245,123, - 247,124,249,125,251,126,253,127,255,128,257,129,259,130,261,131,263,132, - 265,133,267,134,269,135,271,136,273,137,275,138,277,139,279,140,281,141, - 283,142,285,143,287,144,289,145,291,146,293,147,295,148,297,149,299,150, - 301,151,303,152,305,153,307,154,309,155,311,156,313,157,315,158,317,159, - 319,160,321,161,323,162,325,163,327,164,329,165,331,166,333,167,335,168, - 337,169,339,170,341,171,343,172,345,173,347,174,349,175,351,176,353,177, - 355,178,357,179,359,180,361,181,363,182,365,183,367,184,369,185,371,186, - 373,187,375,188,377,189,379,190,381,191,383,192,385,193,387,194,389,195, - 391,196,393,197,395,198,397,199,399,200,401,0,403,0,405,0,407,0,409,0, - 411,0,413,0,415,0,417,0,419,0,421,0,423,0,425,0,427,0,429,0,431,0,433, - 0,435,0,437,0,439,0,441,0,443,0,445,0,447,0,449,0,451,0,453,0,455,0,457, - 0,459,0,461,201,463,202,465,203,467,204,469,205,471,206,473,207,475,208, - 477,209,479,210,481,211,483,212,485,213,487,214,489,215,491,216,493,217, - 495,218,497,219,499,220,501,221,503,222,505,223,507,224,509,225,511,226, - 513,227,515,228,517,229,519,230,521,231,523,232,525,233,527,234,529,235, - 531,236,533,237,535,238,537,239,539,240,541,241,543,242,1,0,37,2,0,92, - 92,96,96,2,0,34,34,92,92,2,0,39,39,92,92,2,0,92,92,125,125,2,0,65,65, - 97,97,2,0,66,66,98,98,2,0,67,67,99,99,2,0,68,68,100,100,2,0,69,69,101, - 101,2,0,70,70,102,102,2,0,71,71,103,103,2,0,72,72,104,104,2,0,73,73,105, - 105,2,0,74,74,106,106,2,0,75,75,107,107,2,0,76,76,108,108,2,0,77,77,109, - 109,2,0,78,78,110,110,2,0,79,79,111,111,2,0,80,80,112,112,2,0,81,81,113, - 113,2,0,82,82,114,114,2,0,83,83,115,115,2,0,84,84,116,116,2,0,85,85,117, - 117,2,0,86,86,118,118,2,0,87,87,119,119,2,0,88,88,120,120,2,0,89,89,121, - 121,2,0,90,90,122,122,2,0,65,90,97,122,1,0,48,55,1,0,48,57,3,0,48,57, - 65,70,97,102,2,0,10,10,13,13,2,1,10,10,13,13,2,0,9,13,32,32,2252,0,1, - 1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0, - 0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23, - 1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0, - 0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0, - 0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55, - 1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0, - 0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0, - 0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87, - 1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0, - 0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0, - 0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0, - 0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0, - 0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0, - 0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0, - 0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0, - 0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,0, - 0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,1,0, - 0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0, - 0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0, - 0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,0, - 0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0, - 0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0, - 0,0,0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1,0, - 0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0, - 0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0, - 0,0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1,0, - 0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0,277,1,0, - 0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0,0,0,0,287,1,0, - 0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295,1,0,0,0,0,297,1,0, - 0,0,0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0, - 0,0,0,309,1,0,0,0,0,311,1,0,0,0,0,313,1,0,0,0,0,315,1,0,0,0,0,317,1,0, - 0,0,0,319,1,0,0,0,0,321,1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0,0,327,1,0, - 0,0,0,329,1,0,0,0,0,331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0, - 0,0,0,339,1,0,0,0,0,341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0, - 0,0,0,349,1,0,0,0,0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0, - 0,0,0,359,1,0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0, - 0,0,0,369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,377,1,0, - 0,0,0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0,385,1,0,0,0,0,387,1,0, - 0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393,1,0,0,0,0,395,1,0,0,0,0,397,1,0, - 0,0,0,399,1,0,0,0,0,461,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0,0,467,1,0, - 0,0,0,469,1,0,0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0,0,0,0,477,1,0, - 0,0,0,479,1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485,1,0,0,0,0,487,1,0, - 0,0,0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,0,495,1,0,0,0,0,497,1,0, - 0,0,0,499,1,0,0,0,0,501,1,0,0,0,0,503,1,0,0,0,0,505,1,0,0,0,0,507,1,0, - 0,0,0,509,1,0,0,0,0,511,1,0,0,0,0,513,1,0,0,0,0,515,1,0,0,0,0,517,1,0, - 0,0,0,519,1,0,0,0,0,521,1,0,0,0,0,523,1,0,0,0,0,525,1,0,0,0,0,527,1,0, - 0,0,0,529,1,0,0,0,0,531,1,0,0,0,0,533,1,0,0,0,0,535,1,0,0,0,0,537,1,0, - 0,0,0,539,1,0,0,0,0,541,1,0,0,0,0,543,1,0,0,0,1,545,1,0,0,0,3,549,1,0, - 0,0,5,555,1,0,0,0,7,561,1,0,0,0,9,565,1,0,0,0,11,571,1,0,0,0,13,575,1, - 0,0,0,15,580,1,0,0,0,17,584,1,0,0,0,19,590,1,0,0,0,21,607,1,0,0,0,23, - 609,1,0,0,0,25,614,1,0,0,0,27,618,1,0,0,0,29,624,1,0,0,0,31,631,1,0,0, - 0,33,639,1,0,0,0,35,644,1,0,0,0,37,647,1,0,0,0,39,652,1,0,0,0,41,657, - 1,0,0,0,43,663,1,0,0,0,45,669,1,0,0,0,47,677,1,0,0,0,49,683,1,0,0,0,51, - 690,1,0,0,0,53,698,1,0,0,0,55,705,1,0,0,0,57,713,1,0,0,0,59,724,1,0,0, - 0,61,731,1,0,0,0,63,737,1,0,0,0,65,742,1,0,0,0,67,750,1,0,0,0,69,759, - 1,0,0,0,71,769,1,0,0,0,73,774,1,0,0,0,75,778,1,0,0,0,77,790,1,0,0,0,79, - 798,1,0,0,0,81,804,1,0,0,0,83,811,1,0,0,0,85,816,1,0,0,0,87,827,1,0,0, - 0,89,836,1,0,0,0,91,843,1,0,0,0,93,856,1,0,0,0,95,867,1,0,0,0,97,872, - 1,0,0,0,99,881,1,0,0,0,101,893,1,0,0,0,103,898,1,0,0,0,105,903,1,0,0, - 0,107,907,1,0,0,0,109,914,1,0,0,0,111,921,1,0,0,0,113,928,1,0,0,0,115, - 936,1,0,0,0,117,947,1,0,0,0,119,955,1,0,0,0,121,963,1,0,0,0,123,969,1, - 0,0,0,125,975,1,0,0,0,127,981,1,0,0,0,129,991,1,0,0,0,131,995,1,0,0,0, - 133,1002,1,0,0,0,135,1009,1,0,0,0,137,1014,1,0,0,0,139,1019,1,0,0,0,141, - 1028,1,0,0,0,143,1035,1,0,0,0,145,1047,1,0,0,0,147,1053,1,0,0,0,149,1060, - 1,0,0,0,151,1073,1,0,0,0,153,1078,1,0,0,0,155,1081,1,0,0,0,157,1084,1, - 0,0,0,159,1090,1,0,0,0,161,1093,1,0,0,0,163,1112,1,0,0,0,165,1114,1,0, - 0,0,167,1124,1,0,0,0,169,1130,1,0,0,0,171,1137,1,0,0,0,173,1146,1,0,0, - 0,175,1151,1,0,0,0,177,1154,1,0,0,0,179,1167,1,0,0,0,181,1172,1,0,0,0, - 183,1176,1,0,0,0,185,1181,1,0,0,0,187,1186,1,0,0,0,189,1193,1,0,0,0,191, - 1201,1,0,0,0,193,1206,1,0,0,0,195,1215,1,0,0,0,197,1220,1,0,0,0,199,1226, - 1,0,0,0,201,1231,1,0,0,0,203,1237,1,0,0,0,205,1242,1,0,0,0,207,1254,1, - 0,0,0,209,1267,1,0,0,0,211,1271,1,0,0,0,213,1278,1,0,0,0,215,1282,1,0, - 0,0,217,1289,1,0,0,0,219,1296,1,0,0,0,221,1302,1,0,0,0,223,1307,1,0,0, - 0,225,1316,1,0,0,0,227,1320,1,0,0,0,229,1323,1,0,0,0,231,1327,1,0,0,0, - 233,1332,1,0,0,0,235,1338,1,0,0,0,237,1345,1,0,0,0,239,1348,1,0,0,0,241, - 1357,1,0,0,0,243,1360,1,0,0,0,245,1366,1,0,0,0,247,1372,1,0,0,0,249,1380, - 1,0,0,0,251,1385,1,0,0,0,253,1395,1,0,0,0,255,1404,1,0,0,0,257,1414,1, - 0,0,0,259,1423,1,0,0,0,261,1431,1,0,0,0,263,1442,1,0,0,0,265,1450,1,0, - 0,0,267,1456,1,0,0,0,269,1463,1,0,0,0,271,1470,1,0,0,0,273,1477,1,0,0, - 0,275,1485,1,0,0,0,277,1493,1,0,0,0,279,1504,1,0,0,0,281,1510,1,0,0,0, - 283,1517,1,0,0,0,285,1521,1,0,0,0,287,1526,1,0,0,0,289,1533,1,0,0,0,291, - 1540,1,0,0,0,293,1547,1,0,0,0,295,1552,1,0,0,0,297,1558,1,0,0,0,299,1562, - 1,0,0,0,301,1571,1,0,0,0,303,1576,1,0,0,0,305,1583,1,0,0,0,307,1589,1, - 0,0,0,309,1594,1,0,0,0,311,1604,1,0,0,0,313,1609,1,0,0,0,315,1616,1,0, - 0,0,317,1623,1,0,0,0,319,1629,1,0,0,0,321,1636,1,0,0,0,323,1646,1,0,0, - 0,325,1651,1,0,0,0,327,1656,1,0,0,0,329,1661,1,0,0,0,331,1669,1,0,0,0, - 333,1679,1,0,0,0,335,1682,1,0,0,0,337,1686,1,0,0,0,339,1693,1,0,0,0,341, - 1702,1,0,0,0,343,1707,1,0,0,0,345,1716,1,0,0,0,347,1720,1,0,0,0,349,1725, - 1,0,0,0,351,1735,1,0,0,0,353,1741,1,0,0,0,355,1748,1,0,0,0,357,1752,1, - 0,0,0,359,1758,1,0,0,0,361,1763,1,0,0,0,363,1770,1,0,0,0,365,1775,1,0, - 0,0,367,1782,1,0,0,0,369,1788,1,0,0,0,371,1793,1,0,0,0,373,1798,1,0,0, - 0,375,1804,1,0,0,0,377,1811,1,0,0,0,379,1826,1,0,0,0,381,1828,1,0,0,0, - 383,1834,1,0,0,0,385,1869,1,0,0,0,387,1911,1,0,0,0,389,1989,1,0,0,0,391, - 1991,1,0,0,0,393,1998,1,0,0,0,395,2002,1,0,0,0,397,2009,1,0,0,0,399,2022, - 1,0,0,0,401,2035,1,0,0,0,403,2037,1,0,0,0,405,2039,1,0,0,0,407,2041,1, - 0,0,0,409,2043,1,0,0,0,411,2045,1,0,0,0,413,2047,1,0,0,0,415,2049,1,0, - 0,0,417,2051,1,0,0,0,419,2053,1,0,0,0,421,2055,1,0,0,0,423,2057,1,0,0, - 0,425,2059,1,0,0,0,427,2061,1,0,0,0,429,2063,1,0,0,0,431,2065,1,0,0,0, - 433,2067,1,0,0,0,435,2069,1,0,0,0,437,2071,1,0,0,0,439,2073,1,0,0,0,441, - 2075,1,0,0,0,443,2077,1,0,0,0,445,2079,1,0,0,0,447,2081,1,0,0,0,449,2083, - 1,0,0,0,451,2085,1,0,0,0,453,2087,1,0,0,0,455,2089,1,0,0,0,457,2091,1, - 0,0,0,459,2093,1,0,0,0,461,2095,1,0,0,0,463,2098,1,0,0,0,465,2100,1,0, - 0,0,467,2102,1,0,0,0,469,2104,1,0,0,0,471,2106,1,0,0,0,473,2108,1,0,0, - 0,475,2111,1,0,0,0,477,2113,1,0,0,0,479,2115,1,0,0,0,481,2117,1,0,0,0, - 483,2120,1,0,0,0,485,2122,1,0,0,0,487,2125,1,0,0,0,489,2127,1,0,0,0,491, - 2129,1,0,0,0,493,2132,1,0,0,0,495,2136,1,0,0,0,497,2138,1,0,0,0,499,2140, - 1,0,0,0,501,2142,1,0,0,0,503,2145,1,0,0,0,505,2151,1,0,0,0,507,2153,1, - 0,0,0,509,2157,1,0,0,0,511,2160,1,0,0,0,513,2163,1,0,0,0,515,2165,1,0, - 0,0,517,2167,1,0,0,0,519,2169,1,0,0,0,521,2171,1,0,0,0,523,2173,1,0,0, - 0,525,2175,1,0,0,0,527,2178,1,0,0,0,529,2180,1,0,0,0,531,2182,1,0,0,0, - 533,2184,1,0,0,0,535,2186,1,0,0,0,537,2188,1,0,0,0,539,2190,1,0,0,0,541, - 2204,1,0,0,0,543,2218,1,0,0,0,545,546,3,401,200,0,546,547,3,407,203,0, - 547,548,3,407,203,0,548,2,1,0,0,0,549,550,3,401,200,0,550,551,3,411,205, - 0,551,552,3,439,219,0,552,553,3,409,204,0,553,554,3,435,217,0,554,4,1, - 0,0,0,555,556,3,401,200,0,556,557,3,423,211,0,557,558,3,417,208,0,558, - 559,3,401,200,0,559,560,3,437,218,0,560,6,1,0,0,0,561,562,3,401,200,0, - 562,563,3,423,211,0,563,564,3,423,211,0,564,8,1,0,0,0,565,566,3,401,200, - 0,566,567,3,423,211,0,567,568,3,439,219,0,568,569,3,409,204,0,569,570, - 3,435,217,0,570,10,1,0,0,0,571,572,3,401,200,0,572,573,3,427,213,0,573, - 574,3,407,203,0,574,12,1,0,0,0,575,576,3,401,200,0,576,577,3,427,213, - 0,577,578,3,439,219,0,578,579,3,417,208,0,579,14,1,0,0,0,580,581,3,401, - 200,0,581,582,3,427,213,0,582,583,3,449,224,0,583,16,1,0,0,0,584,585, - 3,401,200,0,585,586,3,435,217,0,586,587,3,435,217,0,587,588,3,401,200, - 0,588,589,3,449,224,0,589,18,1,0,0,0,590,591,3,401,200,0,591,592,3,437, - 218,0,592,20,1,0,0,0,593,594,3,401,200,0,594,595,3,437,218,0,595,596, - 3,405,202,0,596,608,1,0,0,0,597,598,3,401,200,0,598,599,3,437,218,0,599, - 600,3,405,202,0,600,601,3,409,204,0,601,602,3,427,213,0,602,603,3,407, - 203,0,603,604,3,417,208,0,604,605,3,427,213,0,605,606,3,413,206,0,606, - 608,1,0,0,0,607,593,1,0,0,0,607,597,1,0,0,0,608,22,1,0,0,0,609,610,3, - 401,200,0,610,611,3,437,218,0,611,612,3,429,214,0,612,613,3,411,205,0, - 613,24,1,0,0,0,614,615,3,401,200,0,615,616,3,437,218,0,616,617,3,439, - 219,0,617,26,1,0,0,0,618,619,3,401,200,0,619,620,3,437,218,0,620,621, - 3,449,224,0,621,622,3,427,213,0,622,623,3,405,202,0,623,28,1,0,0,0,624, - 625,3,401,200,0,625,626,3,439,219,0,626,627,3,439,219,0,627,628,3,401, - 200,0,628,629,3,405,202,0,629,630,3,415,207,0,630,30,1,0,0,0,631,632, - 3,403,201,0,632,633,3,409,204,0,633,634,3,439,219,0,634,635,3,445,222, - 0,635,636,3,409,204,0,636,637,3,409,204,0,637,638,3,427,213,0,638,32, - 1,0,0,0,639,640,3,403,201,0,640,641,3,429,214,0,641,642,3,439,219,0,642, - 643,3,415,207,0,643,34,1,0,0,0,644,645,3,403,201,0,645,646,3,449,224, - 0,646,36,1,0,0,0,647,648,3,405,202,0,648,649,3,401,200,0,649,650,3,437, - 218,0,650,651,3,409,204,0,651,38,1,0,0,0,652,653,3,405,202,0,653,654, - 3,401,200,0,654,655,3,437,218,0,655,656,3,439,219,0,656,40,1,0,0,0,657, - 658,3,405,202,0,658,659,3,415,207,0,659,660,3,409,204,0,660,661,3,405, - 202,0,661,662,3,421,210,0,662,42,1,0,0,0,663,664,3,405,202,0,664,665, - 3,423,211,0,665,666,3,409,204,0,666,667,3,401,200,0,667,668,3,435,217, - 0,668,44,1,0,0,0,669,670,3,405,202,0,670,671,3,423,211,0,671,672,3,441, - 220,0,672,673,3,437,218,0,673,674,3,439,219,0,674,675,3,409,204,0,675, - 676,3,435,217,0,676,46,1,0,0,0,677,678,3,405,202,0,678,679,3,429,214, - 0,679,680,3,407,203,0,680,681,3,409,204,0,681,682,3,405,202,0,682,48, - 1,0,0,0,683,684,3,405,202,0,684,685,3,429,214,0,685,686,3,415,207,0,686, - 687,3,429,214,0,687,688,3,435,217,0,688,689,3,439,219,0,689,50,1,0,0, - 0,690,691,3,405,202,0,691,692,3,429,214,0,692,693,3,423,211,0,693,694, - 3,423,211,0,694,695,3,401,200,0,695,696,3,439,219,0,696,697,3,409,204, - 0,697,52,1,0,0,0,698,699,3,405,202,0,699,700,3,429,214,0,700,701,3,423, - 211,0,701,702,3,441,220,0,702,703,3,425,212,0,703,704,3,427,213,0,704, - 54,1,0,0,0,705,706,3,405,202,0,706,707,3,429,214,0,707,708,3,425,212, - 0,708,709,3,425,212,0,709,710,3,409,204,0,710,711,3,427,213,0,711,712, - 3,439,219,0,712,56,1,0,0,0,713,714,3,405,202,0,714,715,3,429,214,0,715, - 716,3,427,213,0,716,717,3,437,218,0,717,718,3,439,219,0,718,719,3,435, - 217,0,719,720,3,401,200,0,720,721,3,417,208,0,721,722,3,427,213,0,722, - 723,3,439,219,0,723,58,1,0,0,0,724,725,3,405,202,0,725,726,3,435,217, - 0,726,727,3,409,204,0,727,728,3,401,200,0,728,729,3,439,219,0,729,730, - 3,409,204,0,730,60,1,0,0,0,731,732,3,405,202,0,732,733,3,435,217,0,733, - 734,3,429,214,0,734,735,3,437,218,0,735,736,3,437,218,0,736,62,1,0,0, - 0,737,738,3,405,202,0,738,739,3,441,220,0,739,740,3,403,201,0,740,741, - 3,409,204,0,741,64,1,0,0,0,742,743,3,405,202,0,743,744,3,441,220,0,744, - 745,3,435,217,0,745,746,3,435,217,0,746,747,3,409,204,0,747,748,3,427, - 213,0,748,749,3,439,219,0,749,66,1,0,0,0,750,751,3,407,203,0,751,752, - 3,401,200,0,752,753,3,439,219,0,753,754,3,401,200,0,754,755,3,403,201, - 0,755,756,3,401,200,0,756,757,3,437,218,0,757,758,3,409,204,0,758,68, - 1,0,0,0,759,760,3,407,203,0,760,761,3,401,200,0,761,762,3,439,219,0,762, - 763,3,401,200,0,763,764,3,403,201,0,764,765,3,401,200,0,765,766,3,437, - 218,0,766,767,3,409,204,0,767,768,3,437,218,0,768,70,1,0,0,0,769,770, - 3,407,203,0,770,771,3,401,200,0,771,772,3,439,219,0,772,773,3,409,204, - 0,773,72,1,0,0,0,774,775,3,407,203,0,775,776,3,401,200,0,776,777,3,449, - 224,0,777,74,1,0,0,0,778,779,3,407,203,0,779,780,3,409,204,0,780,781, - 3,407,203,0,781,782,3,441,220,0,782,783,3,431,215,0,783,784,3,423,211, - 0,784,785,3,417,208,0,785,786,3,405,202,0,786,787,3,401,200,0,787,788, - 3,439,219,0,788,789,3,409,204,0,789,76,1,0,0,0,790,791,3,407,203,0,791, - 792,3,409,204,0,792,793,3,411,205,0,793,794,3,401,200,0,794,795,3,441, - 220,0,795,796,3,423,211,0,796,797,3,439,219,0,797,78,1,0,0,0,798,799, - 3,407,203,0,799,800,3,409,204,0,800,801,3,423,211,0,801,802,3,401,200, - 0,802,803,3,449,224,0,803,80,1,0,0,0,804,805,3,407,203,0,805,806,3,409, - 204,0,806,807,3,423,211,0,807,808,3,409,204,0,808,809,3,439,219,0,809, - 810,3,409,204,0,810,82,1,0,0,0,811,812,3,407,203,0,812,813,3,409,204, - 0,813,814,3,437,218,0,814,815,3,405,202,0,815,84,1,0,0,0,816,817,3,407, - 203,0,817,818,3,409,204,0,818,819,3,437,218,0,819,820,3,405,202,0,820, - 821,3,409,204,0,821,822,3,427,213,0,822,823,3,407,203,0,823,824,3,417, - 208,0,824,825,3,427,213,0,825,826,3,413,206,0,826,86,1,0,0,0,827,828, - 3,407,203,0,828,829,3,409,204,0,829,830,3,437,218,0,830,831,3,405,202, - 0,831,832,3,435,217,0,832,833,3,417,208,0,833,834,3,403,201,0,834,835, - 3,409,204,0,835,88,1,0,0,0,836,837,3,407,203,0,837,838,3,409,204,0,838, - 839,3,439,219,0,839,840,3,401,200,0,840,841,3,405,202,0,841,842,3,415, - 207,0,842,90,1,0,0,0,843,844,3,407,203,0,844,845,3,417,208,0,845,846, - 3,405,202,0,846,847,3,439,219,0,847,848,3,417,208,0,848,849,3,429,214, - 0,849,850,3,427,213,0,850,851,3,401,200,0,851,852,3,435,217,0,852,853, - 3,417,208,0,853,854,3,409,204,0,854,855,3,437,218,0,855,92,1,0,0,0,856, - 857,3,407,203,0,857,858,3,417,208,0,858,859,3,405,202,0,859,860,3,439, - 219,0,860,861,3,417,208,0,861,862,3,429,214,0,862,863,3,427,213,0,863, - 864,3,401,200,0,864,865,3,435,217,0,865,866,3,449,224,0,866,94,1,0,0, - 0,867,868,3,407,203,0,868,869,3,417,208,0,869,870,3,437,218,0,870,871, - 3,421,210,0,871,96,1,0,0,0,872,873,3,407,203,0,873,874,3,417,208,0,874, - 875,3,437,218,0,875,876,3,439,219,0,876,877,3,417,208,0,877,878,3,427, - 213,0,878,879,3,405,202,0,879,880,3,439,219,0,880,98,1,0,0,0,881,882, - 3,407,203,0,882,883,3,417,208,0,883,884,3,437,218,0,884,885,3,439,219, - 0,885,886,3,435,217,0,886,887,3,417,208,0,887,888,3,403,201,0,888,889, - 3,441,220,0,889,890,3,439,219,0,890,891,3,409,204,0,891,892,3,407,203, - 0,892,100,1,0,0,0,893,894,3,407,203,0,894,895,3,435,217,0,895,896,3,429, - 214,0,896,897,3,431,215,0,897,102,1,0,0,0,898,899,3,409,204,0,899,900, - 3,423,211,0,900,901,3,437,218,0,901,902,3,409,204,0,902,104,1,0,0,0,903, - 904,3,409,204,0,904,905,3,427,213,0,905,906,3,407,203,0,906,106,1,0,0, - 0,907,908,3,409,204,0,908,909,3,427,213,0,909,910,3,413,206,0,910,911, - 3,417,208,0,911,912,3,427,213,0,912,913,3,409,204,0,913,108,1,0,0,0,914, - 915,3,409,204,0,915,916,3,443,221,0,916,917,3,409,204,0,917,918,3,427, - 213,0,918,919,3,439,219,0,919,920,3,437,218,0,920,110,1,0,0,0,921,922, - 3,409,204,0,922,923,3,447,223,0,923,924,3,417,208,0,924,925,3,437,218, - 0,925,926,3,439,219,0,926,927,3,437,218,0,927,112,1,0,0,0,928,929,3,409, - 204,0,929,930,3,447,223,0,930,931,3,431,215,0,931,932,3,423,211,0,932, - 933,3,401,200,0,933,934,3,417,208,0,934,935,3,427,213,0,935,114,1,0,0, - 0,936,937,3,409,204,0,937,938,3,447,223,0,938,939,3,431,215,0,939,940, - 3,435,217,0,940,941,3,409,204,0,941,942,3,437,218,0,942,943,3,437,218, - 0,943,944,3,417,208,0,944,945,3,429,214,0,945,946,3,427,213,0,946,116, - 1,0,0,0,947,948,3,409,204,0,948,949,3,447,223,0,949,950,3,439,219,0,950, - 951,3,435,217,0,951,952,3,401,200,0,952,953,3,405,202,0,953,954,3,439, - 219,0,954,118,1,0,0,0,955,956,3,411,205,0,956,957,3,409,204,0,957,958, - 3,439,219,0,958,959,3,405,202,0,959,960,3,415,207,0,960,961,3,409,204, - 0,961,962,3,437,218,0,962,120,1,0,0,0,963,964,3,411,205,0,964,965,3,417, - 208,0,965,966,3,427,213,0,966,967,3,401,200,0,967,968,3,423,211,0,968, - 122,1,0,0,0,969,970,3,411,205,0,970,971,3,417,208,0,971,972,3,435,217, - 0,972,973,3,437,218,0,973,974,3,439,219,0,974,124,1,0,0,0,975,976,3,411, - 205,0,976,977,3,423,211,0,977,978,3,441,220,0,978,979,3,437,218,0,979, - 980,3,415,207,0,980,126,1,0,0,0,981,982,3,411,205,0,982,983,3,429,214, - 0,983,984,3,423,211,0,984,985,3,423,211,0,985,986,3,429,214,0,986,987, - 3,445,222,0,987,988,3,417,208,0,988,989,3,427,213,0,989,990,3,413,206, - 0,990,128,1,0,0,0,991,992,3,411,205,0,992,993,3,429,214,0,993,994,3,435, - 217,0,994,130,1,0,0,0,995,996,3,411,205,0,996,997,3,429,214,0,997,998, - 3,435,217,0,998,999,3,425,212,0,999,1000,3,401,200,0,1000,1001,3,439, - 219,0,1001,132,1,0,0,0,1002,1003,3,411,205,0,1003,1004,3,435,217,0,1004, - 1005,3,409,204,0,1005,1006,3,409,204,0,1006,1007,3,451,225,0,1007,1008, - 3,409,204,0,1008,134,1,0,0,0,1009,1010,3,411,205,0,1010,1011,3,435,217, - 0,1011,1012,3,429,214,0,1012,1013,3,425,212,0,1013,136,1,0,0,0,1014,1015, - 3,411,205,0,1015,1016,3,441,220,0,1016,1017,3,423,211,0,1017,1018,3,423, - 211,0,1018,138,1,0,0,0,1019,1020,3,411,205,0,1020,1021,3,441,220,0,1021, - 1022,3,427,213,0,1022,1023,3,405,202,0,1023,1024,3,439,219,0,1024,1025, - 3,417,208,0,1025,1026,3,429,214,0,1026,1027,3,427,213,0,1027,140,1,0, - 0,0,1028,1029,3,413,206,0,1029,1030,3,423,211,0,1030,1031,3,429,214,0, - 1031,1032,3,403,201,0,1032,1033,3,401,200,0,1033,1034,3,423,211,0,1034, + 1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193, + 1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193, + 1,193,1,193,1,193,1,193,1,193,3,193,1902,8,193,1,194,1,194,1,194,3,194, + 1907,8,194,1,194,1,194,1,194,1,194,5,194,1913,8,194,10,194,12,194,1916, + 9,194,1,194,1,194,1,194,1,194,1,194,1,194,5,194,1924,8,194,10,194,12, + 194,1927,9,194,1,194,1,194,1,194,1,194,1,194,1,194,1,194,1,194,5,194, + 1937,8,194,10,194,12,194,1940,9,194,1,194,1,194,3,194,1944,8,194,1,195, + 1,195,1,195,5,195,1949,8,195,10,195,12,195,1952,9,195,1,195,1,195,3,195, + 1956,8,195,1,195,1,195,3,195,1960,8,195,1,195,4,195,1963,8,195,11,195, + 12,195,1964,1,195,1,195,1,195,3,195,1970,8,195,1,195,1,195,3,195,1974, + 8,195,1,195,4,195,1977,8,195,11,195,12,195,1978,1,195,1,195,1,195,5,195, + 1984,8,195,10,195,12,195,1987,9,195,1,195,1,195,1,195,3,195,1992,8,195, + 1,195,4,195,1995,8,195,11,195,12,195,1996,1,195,1,195,1,195,1,195,1,195, + 3,195,2004,8,195,1,195,4,195,2007,8,195,11,195,12,195,2008,1,195,1,195, + 1,195,1,195,3,195,2015,8,195,1,195,4,195,2018,8,195,11,195,12,195,2019, + 3,195,2022,8,195,1,196,1,196,4,196,2026,8,196,11,196,12,196,2027,1,197, + 4,197,2031,8,197,11,197,12,197,2032,1,198,1,198,1,198,4,198,2038,8,198, + 11,198,12,198,2039,1,199,1,199,1,199,1,199,1,199,1,199,5,199,2048,8,199, + 10,199,12,199,2051,9,199,1,199,1,199,1,200,1,200,1,201,1,201,1,202,1, + 202,1,203,1,203,1,204,1,204,1,205,1,205,1,206,1,206,1,207,1,207,1,208, + 1,208,1,209,1,209,1,210,1,210,1,211,1,211,1,212,1,212,1,213,1,213,1,214, + 1,214,1,215,1,215,1,216,1,216,1,217,1,217,1,218,1,218,1,219,1,219,1,220, + 1,220,1,221,1,221,1,222,1,222,1,223,1,223,1,224,1,224,1,225,1,225,1,226, + 1,226,1,227,1,227,1,228,1,228,1,229,1,229,1,230,1,230,1,230,1,231,1,231, + 1,232,1,232,1,233,1,233,1,234,1,234,1,235,1,235,1,236,1,236,1,236,1,237, + 1,237,1,238,1,238,1,239,1,239,1,240,1,240,1,240,1,241,1,241,1,242,1,242, + 1,242,1,243,1,243,1,244,1,244,1,245,1,245,1,245,1,246,1,246,1,246,1,246, + 1,247,1,247,1,248,1,248,1,249,1,249,1,250,1,250,1,250,1,251,1,251,1,252, + 1,252,1,252,1,252,3,252,2171,8,252,1,253,1,253,1,253,1,253,1,254,1,254, + 1,254,1,255,1,255,1,255,1,256,1,256,1,257,1,257,1,258,1,258,1,259,1,259, + 1,260,1,260,1,261,1,261,1,262,1,262,1,262,1,263,1,263,1,264,1,264,1,265, + 1,265,1,266,1,266,1,267,1,267,1,268,1,268,1,269,1,269,1,269,1,269,5,269, + 2214,8,269,10,269,12,269,2217,9,269,1,269,1,269,1,269,1,269,1,269,1,270, + 1,270,1,270,1,270,5,270,2228,8,270,10,270,12,270,2231,9,270,1,270,3,270, + 2234,8,270,1,270,1,270,1,271,1,271,1,271,1,271,1,2215,0,272,1,1,3,2,5, + 3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31, + 16,33,17,35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27, + 55,28,57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77, + 39,79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50, + 101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119,60, + 121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69,139,70, + 141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157,79,159,80, + 161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88,177,89,179,90, + 181,91,183,92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199,100, + 201,101,203,102,205,103,207,104,209,105,211,106,213,107,215,108,217,109, + 219,110,221,111,223,112,225,113,227,114,229,115,231,116,233,117,235,118, + 237,119,239,120,241,121,243,122,245,123,247,124,249,125,251,126,253,127, + 255,128,257,129,259,130,261,131,263,132,265,133,267,134,269,135,271,136, + 273,137,275,138,277,139,279,140,281,141,283,142,285,143,287,144,289,145, + 291,146,293,147,295,148,297,149,299,150,301,151,303,152,305,153,307,154, + 309,155,311,156,313,157,315,158,317,159,319,160,321,161,323,162,325,163, + 327,164,329,165,331,166,333,167,335,168,337,169,339,170,341,171,343,172, + 345,173,347,174,349,175,351,176,353,177,355,178,357,179,359,180,361,181, + 363,182,365,183,367,184,369,185,371,186,373,187,375,188,377,189,379,190, + 381,191,383,192,385,193,387,194,389,195,391,196,393,197,395,198,397,199, + 399,200,401,0,403,0,405,0,407,0,409,0,411,0,413,0,415,0,417,0,419,0,421, + 0,423,0,425,0,427,0,429,0,431,0,433,0,435,0,437,0,439,0,441,0,443,0,445, + 0,447,0,449,0,451,0,453,0,455,0,457,0,459,0,461,201,463,202,465,203,467, + 204,469,205,471,206,473,207,475,208,477,209,479,210,481,211,483,212,485, + 213,487,214,489,215,491,216,493,217,495,218,497,219,499,220,501,221,503, + 222,505,223,507,224,509,225,511,226,513,227,515,228,517,229,519,230,521, + 231,523,232,525,233,527,234,529,235,531,236,533,237,535,238,537,239,539, + 240,541,241,543,242,1,0,36,2,0,92,92,96,96,2,0,34,34,92,92,2,0,39,39, + 92,92,2,0,65,65,97,97,2,0,66,66,98,98,2,0,67,67,99,99,2,0,68,68,100,100, + 2,0,69,69,101,101,2,0,70,70,102,102,2,0,71,71,103,103,2,0,72,72,104,104, + 2,0,73,73,105,105,2,0,74,74,106,106,2,0,75,75,107,107,2,0,76,76,108,108, + 2,0,77,77,109,109,2,0,78,78,110,110,2,0,79,79,111,111,2,0,80,80,112,112, + 2,0,81,81,113,113,2,0,82,82,114,114,2,0,83,83,115,115,2,0,84,84,116,116, + 2,0,85,85,117,117,2,0,86,86,118,118,2,0,87,87,119,119,2,0,88,88,120,120, + 2,0,89,89,121,121,2,0,90,90,122,122,2,0,65,90,97,122,1,0,48,55,1,0,48, + 57,3,0,48,57,65,70,97,102,2,0,10,10,13,13,2,1,10,10,13,13,2,0,9,13,32, + 32,2277,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0, + 11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1, + 0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0, + 0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0, + 43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1, + 0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0, + 0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0, + 75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1, + 0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0, + 0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0, + 0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0, + 0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0, + 0,127,1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0, + 0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0, + 0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0, + 0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0, + 0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0, + 0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0, + 0,187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0,0,0, + 0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0, + 0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0, + 0,217,1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0, + 0,227,1,0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0, + 0,237,1,0,0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0, + 0,247,1,0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0, + 0,257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0, + 0,267,1,0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0, + 0,277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0,0,0, + 0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295,1,0,0,0, + 0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0,0,305,1,0,0,0, + 0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0,313,1,0,0,0,0,315,1,0,0,0, + 0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0, + 0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0, + 0,337,1,0,0,0,0,339,1,0,0,0,0,341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0, + 0,347,1,0,0,0,0,349,1,0,0,0,0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0, + 0,357,1,0,0,0,0,359,1,0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0, + 0,367,1,0,0,0,0,369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0, + 0,377,1,0,0,0,0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0,385,1,0,0,0, + 0,387,1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393,1,0,0,0,0,395,1,0,0,0, + 0,397,1,0,0,0,0,399,1,0,0,0,0,461,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0, + 0,467,1,0,0,0,0,469,1,0,0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0,0,0, + 0,477,1,0,0,0,0,479,1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485,1,0,0,0, + 0,487,1,0,0,0,0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,0,495,1,0,0,0, + 0,497,1,0,0,0,0,499,1,0,0,0,0,501,1,0,0,0,0,503,1,0,0,0,0,505,1,0,0,0, + 0,507,1,0,0,0,0,509,1,0,0,0,0,511,1,0,0,0,0,513,1,0,0,0,0,515,1,0,0,0, + 0,517,1,0,0,0,0,519,1,0,0,0,0,521,1,0,0,0,0,523,1,0,0,0,0,525,1,0,0,0, + 0,527,1,0,0,0,0,529,1,0,0,0,0,531,1,0,0,0,0,533,1,0,0,0,0,535,1,0,0,0, + 0,537,1,0,0,0,0,539,1,0,0,0,0,541,1,0,0,0,0,543,1,0,0,0,1,545,1,0,0,0, + 3,549,1,0,0,0,5,555,1,0,0,0,7,561,1,0,0,0,9,565,1,0,0,0,11,571,1,0,0, + 0,13,575,1,0,0,0,15,580,1,0,0,0,17,584,1,0,0,0,19,590,1,0,0,0,21,607, + 1,0,0,0,23,609,1,0,0,0,25,614,1,0,0,0,27,618,1,0,0,0,29,624,1,0,0,0,31, + 631,1,0,0,0,33,639,1,0,0,0,35,644,1,0,0,0,37,647,1,0,0,0,39,652,1,0,0, + 0,41,657,1,0,0,0,43,663,1,0,0,0,45,669,1,0,0,0,47,677,1,0,0,0,49,683, + 1,0,0,0,51,690,1,0,0,0,53,698,1,0,0,0,55,705,1,0,0,0,57,713,1,0,0,0,59, + 724,1,0,0,0,61,731,1,0,0,0,63,737,1,0,0,0,65,742,1,0,0,0,67,750,1,0,0, + 0,69,759,1,0,0,0,71,769,1,0,0,0,73,774,1,0,0,0,75,778,1,0,0,0,77,790, + 1,0,0,0,79,798,1,0,0,0,81,804,1,0,0,0,83,811,1,0,0,0,85,816,1,0,0,0,87, + 827,1,0,0,0,89,836,1,0,0,0,91,843,1,0,0,0,93,856,1,0,0,0,95,867,1,0,0, + 0,97,872,1,0,0,0,99,881,1,0,0,0,101,893,1,0,0,0,103,898,1,0,0,0,105,903, + 1,0,0,0,107,907,1,0,0,0,109,914,1,0,0,0,111,921,1,0,0,0,113,928,1,0,0, + 0,115,936,1,0,0,0,117,947,1,0,0,0,119,955,1,0,0,0,121,963,1,0,0,0,123, + 969,1,0,0,0,125,975,1,0,0,0,127,981,1,0,0,0,129,991,1,0,0,0,131,995,1, + 0,0,0,133,1002,1,0,0,0,135,1009,1,0,0,0,137,1014,1,0,0,0,139,1019,1,0, + 0,0,141,1028,1,0,0,0,143,1035,1,0,0,0,145,1047,1,0,0,0,147,1053,1,0,0, + 0,149,1060,1,0,0,0,151,1073,1,0,0,0,153,1078,1,0,0,0,155,1081,1,0,0,0, + 157,1084,1,0,0,0,159,1090,1,0,0,0,161,1093,1,0,0,0,163,1112,1,0,0,0,165, + 1114,1,0,0,0,167,1124,1,0,0,0,169,1130,1,0,0,0,171,1137,1,0,0,0,173,1146, + 1,0,0,0,175,1151,1,0,0,0,177,1154,1,0,0,0,179,1167,1,0,0,0,181,1172,1, + 0,0,0,183,1176,1,0,0,0,185,1181,1,0,0,0,187,1186,1,0,0,0,189,1193,1,0, + 0,0,191,1201,1,0,0,0,193,1206,1,0,0,0,195,1215,1,0,0,0,197,1220,1,0,0, + 0,199,1226,1,0,0,0,201,1231,1,0,0,0,203,1237,1,0,0,0,205,1242,1,0,0,0, + 207,1254,1,0,0,0,209,1267,1,0,0,0,211,1271,1,0,0,0,213,1278,1,0,0,0,215, + 1282,1,0,0,0,217,1289,1,0,0,0,219,1296,1,0,0,0,221,1302,1,0,0,0,223,1307, + 1,0,0,0,225,1316,1,0,0,0,227,1320,1,0,0,0,229,1323,1,0,0,0,231,1327,1, + 0,0,0,233,1332,1,0,0,0,235,1338,1,0,0,0,237,1345,1,0,0,0,239,1348,1,0, + 0,0,241,1357,1,0,0,0,243,1360,1,0,0,0,245,1366,1,0,0,0,247,1372,1,0,0, + 0,249,1380,1,0,0,0,251,1385,1,0,0,0,253,1395,1,0,0,0,255,1404,1,0,0,0, + 257,1414,1,0,0,0,259,1423,1,0,0,0,261,1431,1,0,0,0,263,1442,1,0,0,0,265, + 1450,1,0,0,0,267,1456,1,0,0,0,269,1463,1,0,0,0,271,1470,1,0,0,0,273,1477, + 1,0,0,0,275,1485,1,0,0,0,277,1493,1,0,0,0,279,1504,1,0,0,0,281,1510,1, + 0,0,0,283,1517,1,0,0,0,285,1521,1,0,0,0,287,1526,1,0,0,0,289,1533,1,0, + 0,0,291,1540,1,0,0,0,293,1547,1,0,0,0,295,1552,1,0,0,0,297,1558,1,0,0, + 0,299,1562,1,0,0,0,301,1571,1,0,0,0,303,1576,1,0,0,0,305,1583,1,0,0,0, + 307,1589,1,0,0,0,309,1594,1,0,0,0,311,1604,1,0,0,0,313,1609,1,0,0,0,315, + 1616,1,0,0,0,317,1623,1,0,0,0,319,1629,1,0,0,0,321,1636,1,0,0,0,323,1646, + 1,0,0,0,325,1651,1,0,0,0,327,1656,1,0,0,0,329,1661,1,0,0,0,331,1669,1, + 0,0,0,333,1679,1,0,0,0,335,1682,1,0,0,0,337,1686,1,0,0,0,339,1693,1,0, + 0,0,341,1702,1,0,0,0,343,1707,1,0,0,0,345,1716,1,0,0,0,347,1720,1,0,0, + 0,349,1725,1,0,0,0,351,1735,1,0,0,0,353,1741,1,0,0,0,355,1748,1,0,0,0, + 357,1752,1,0,0,0,359,1758,1,0,0,0,361,1763,1,0,0,0,363,1770,1,0,0,0,365, + 1775,1,0,0,0,367,1782,1,0,0,0,369,1788,1,0,0,0,371,1793,1,0,0,0,373,1798, + 1,0,0,0,375,1804,1,0,0,0,377,1811,1,0,0,0,379,1826,1,0,0,0,381,1828,1, + 0,0,0,383,1834,1,0,0,0,385,1869,1,0,0,0,387,1901,1,0,0,0,389,1943,1,0, + 0,0,391,2021,1,0,0,0,393,2023,1,0,0,0,395,2030,1,0,0,0,397,2034,1,0,0, + 0,399,2041,1,0,0,0,401,2054,1,0,0,0,403,2056,1,0,0,0,405,2058,1,0,0,0, + 407,2060,1,0,0,0,409,2062,1,0,0,0,411,2064,1,0,0,0,413,2066,1,0,0,0,415, + 2068,1,0,0,0,417,2070,1,0,0,0,419,2072,1,0,0,0,421,2074,1,0,0,0,423,2076, + 1,0,0,0,425,2078,1,0,0,0,427,2080,1,0,0,0,429,2082,1,0,0,0,431,2084,1, + 0,0,0,433,2086,1,0,0,0,435,2088,1,0,0,0,437,2090,1,0,0,0,439,2092,1,0, + 0,0,441,2094,1,0,0,0,443,2096,1,0,0,0,445,2098,1,0,0,0,447,2100,1,0,0, + 0,449,2102,1,0,0,0,451,2104,1,0,0,0,453,2106,1,0,0,0,455,2108,1,0,0,0, + 457,2110,1,0,0,0,459,2112,1,0,0,0,461,2114,1,0,0,0,463,2117,1,0,0,0,465, + 2119,1,0,0,0,467,2121,1,0,0,0,469,2123,1,0,0,0,471,2125,1,0,0,0,473,2127, + 1,0,0,0,475,2130,1,0,0,0,477,2132,1,0,0,0,479,2134,1,0,0,0,481,2136,1, + 0,0,0,483,2139,1,0,0,0,485,2141,1,0,0,0,487,2144,1,0,0,0,489,2146,1,0, + 0,0,491,2148,1,0,0,0,493,2151,1,0,0,0,495,2155,1,0,0,0,497,2157,1,0,0, + 0,499,2159,1,0,0,0,501,2161,1,0,0,0,503,2164,1,0,0,0,505,2170,1,0,0,0, + 507,2172,1,0,0,0,509,2176,1,0,0,0,511,2179,1,0,0,0,513,2182,1,0,0,0,515, + 2184,1,0,0,0,517,2186,1,0,0,0,519,2188,1,0,0,0,521,2190,1,0,0,0,523,2192, + 1,0,0,0,525,2194,1,0,0,0,527,2197,1,0,0,0,529,2199,1,0,0,0,531,2201,1, + 0,0,0,533,2203,1,0,0,0,535,2205,1,0,0,0,537,2207,1,0,0,0,539,2209,1,0, + 0,0,541,2223,1,0,0,0,543,2237,1,0,0,0,545,546,3,401,200,0,546,547,3,407, + 203,0,547,548,3,407,203,0,548,2,1,0,0,0,549,550,3,401,200,0,550,551,3, + 411,205,0,551,552,3,439,219,0,552,553,3,409,204,0,553,554,3,435,217,0, + 554,4,1,0,0,0,555,556,3,401,200,0,556,557,3,423,211,0,557,558,3,417,208, + 0,558,559,3,401,200,0,559,560,3,437,218,0,560,6,1,0,0,0,561,562,3,401, + 200,0,562,563,3,423,211,0,563,564,3,423,211,0,564,8,1,0,0,0,565,566,3, + 401,200,0,566,567,3,423,211,0,567,568,3,439,219,0,568,569,3,409,204,0, + 569,570,3,435,217,0,570,10,1,0,0,0,571,572,3,401,200,0,572,573,3,427, + 213,0,573,574,3,407,203,0,574,12,1,0,0,0,575,576,3,401,200,0,576,577, + 3,427,213,0,577,578,3,439,219,0,578,579,3,417,208,0,579,14,1,0,0,0,580, + 581,3,401,200,0,581,582,3,427,213,0,582,583,3,449,224,0,583,16,1,0,0, + 0,584,585,3,401,200,0,585,586,3,435,217,0,586,587,3,435,217,0,587,588, + 3,401,200,0,588,589,3,449,224,0,589,18,1,0,0,0,590,591,3,401,200,0,591, + 592,3,437,218,0,592,20,1,0,0,0,593,594,3,401,200,0,594,595,3,437,218, + 0,595,596,3,405,202,0,596,608,1,0,0,0,597,598,3,401,200,0,598,599,3,437, + 218,0,599,600,3,405,202,0,600,601,3,409,204,0,601,602,3,427,213,0,602, + 603,3,407,203,0,603,604,3,417,208,0,604,605,3,427,213,0,605,606,3,413, + 206,0,606,608,1,0,0,0,607,593,1,0,0,0,607,597,1,0,0,0,608,22,1,0,0,0, + 609,610,3,401,200,0,610,611,3,437,218,0,611,612,3,429,214,0,612,613,3, + 411,205,0,613,24,1,0,0,0,614,615,3,401,200,0,615,616,3,437,218,0,616, + 617,3,439,219,0,617,26,1,0,0,0,618,619,3,401,200,0,619,620,3,437,218, + 0,620,621,3,449,224,0,621,622,3,427,213,0,622,623,3,405,202,0,623,28, + 1,0,0,0,624,625,3,401,200,0,625,626,3,439,219,0,626,627,3,439,219,0,627, + 628,3,401,200,0,628,629,3,405,202,0,629,630,3,415,207,0,630,30,1,0,0, + 0,631,632,3,403,201,0,632,633,3,409,204,0,633,634,3,439,219,0,634,635, + 3,445,222,0,635,636,3,409,204,0,636,637,3,409,204,0,637,638,3,427,213, + 0,638,32,1,0,0,0,639,640,3,403,201,0,640,641,3,429,214,0,641,642,3,439, + 219,0,642,643,3,415,207,0,643,34,1,0,0,0,644,645,3,403,201,0,645,646, + 3,449,224,0,646,36,1,0,0,0,647,648,3,405,202,0,648,649,3,401,200,0,649, + 650,3,437,218,0,650,651,3,409,204,0,651,38,1,0,0,0,652,653,3,405,202, + 0,653,654,3,401,200,0,654,655,3,437,218,0,655,656,3,439,219,0,656,40, + 1,0,0,0,657,658,3,405,202,0,658,659,3,415,207,0,659,660,3,409,204,0,660, + 661,3,405,202,0,661,662,3,421,210,0,662,42,1,0,0,0,663,664,3,405,202, + 0,664,665,3,423,211,0,665,666,3,409,204,0,666,667,3,401,200,0,667,668, + 3,435,217,0,668,44,1,0,0,0,669,670,3,405,202,0,670,671,3,423,211,0,671, + 672,3,441,220,0,672,673,3,437,218,0,673,674,3,439,219,0,674,675,3,409, + 204,0,675,676,3,435,217,0,676,46,1,0,0,0,677,678,3,405,202,0,678,679, + 3,429,214,0,679,680,3,407,203,0,680,681,3,409,204,0,681,682,3,405,202, + 0,682,48,1,0,0,0,683,684,3,405,202,0,684,685,3,429,214,0,685,686,3,415, + 207,0,686,687,3,429,214,0,687,688,3,435,217,0,688,689,3,439,219,0,689, + 50,1,0,0,0,690,691,3,405,202,0,691,692,3,429,214,0,692,693,3,423,211, + 0,693,694,3,423,211,0,694,695,3,401,200,0,695,696,3,439,219,0,696,697, + 3,409,204,0,697,52,1,0,0,0,698,699,3,405,202,0,699,700,3,429,214,0,700, + 701,3,423,211,0,701,702,3,441,220,0,702,703,3,425,212,0,703,704,3,427, + 213,0,704,54,1,0,0,0,705,706,3,405,202,0,706,707,3,429,214,0,707,708, + 3,425,212,0,708,709,3,425,212,0,709,710,3,409,204,0,710,711,3,427,213, + 0,711,712,3,439,219,0,712,56,1,0,0,0,713,714,3,405,202,0,714,715,3,429, + 214,0,715,716,3,427,213,0,716,717,3,437,218,0,717,718,3,439,219,0,718, + 719,3,435,217,0,719,720,3,401,200,0,720,721,3,417,208,0,721,722,3,427, + 213,0,722,723,3,439,219,0,723,58,1,0,0,0,724,725,3,405,202,0,725,726, + 3,435,217,0,726,727,3,409,204,0,727,728,3,401,200,0,728,729,3,439,219, + 0,729,730,3,409,204,0,730,60,1,0,0,0,731,732,3,405,202,0,732,733,3,435, + 217,0,733,734,3,429,214,0,734,735,3,437,218,0,735,736,3,437,218,0,736, + 62,1,0,0,0,737,738,3,405,202,0,738,739,3,441,220,0,739,740,3,403,201, + 0,740,741,3,409,204,0,741,64,1,0,0,0,742,743,3,405,202,0,743,744,3,441, + 220,0,744,745,3,435,217,0,745,746,3,435,217,0,746,747,3,409,204,0,747, + 748,3,427,213,0,748,749,3,439,219,0,749,66,1,0,0,0,750,751,3,407,203, + 0,751,752,3,401,200,0,752,753,3,439,219,0,753,754,3,401,200,0,754,755, + 3,403,201,0,755,756,3,401,200,0,756,757,3,437,218,0,757,758,3,409,204, + 0,758,68,1,0,0,0,759,760,3,407,203,0,760,761,3,401,200,0,761,762,3,439, + 219,0,762,763,3,401,200,0,763,764,3,403,201,0,764,765,3,401,200,0,765, + 766,3,437,218,0,766,767,3,409,204,0,767,768,3,437,218,0,768,70,1,0,0, + 0,769,770,3,407,203,0,770,771,3,401,200,0,771,772,3,439,219,0,772,773, + 3,409,204,0,773,72,1,0,0,0,774,775,3,407,203,0,775,776,3,401,200,0,776, + 777,3,449,224,0,777,74,1,0,0,0,778,779,3,407,203,0,779,780,3,409,204, + 0,780,781,3,407,203,0,781,782,3,441,220,0,782,783,3,431,215,0,783,784, + 3,423,211,0,784,785,3,417,208,0,785,786,3,405,202,0,786,787,3,401,200, + 0,787,788,3,439,219,0,788,789,3,409,204,0,789,76,1,0,0,0,790,791,3,407, + 203,0,791,792,3,409,204,0,792,793,3,411,205,0,793,794,3,401,200,0,794, + 795,3,441,220,0,795,796,3,423,211,0,796,797,3,439,219,0,797,78,1,0,0, + 0,798,799,3,407,203,0,799,800,3,409,204,0,800,801,3,423,211,0,801,802, + 3,401,200,0,802,803,3,449,224,0,803,80,1,0,0,0,804,805,3,407,203,0,805, + 806,3,409,204,0,806,807,3,423,211,0,807,808,3,409,204,0,808,809,3,439, + 219,0,809,810,3,409,204,0,810,82,1,0,0,0,811,812,3,407,203,0,812,813, + 3,409,204,0,813,814,3,437,218,0,814,815,3,405,202,0,815,84,1,0,0,0,816, + 817,3,407,203,0,817,818,3,409,204,0,818,819,3,437,218,0,819,820,3,405, + 202,0,820,821,3,409,204,0,821,822,3,427,213,0,822,823,3,407,203,0,823, + 824,3,417,208,0,824,825,3,427,213,0,825,826,3,413,206,0,826,86,1,0,0, + 0,827,828,3,407,203,0,828,829,3,409,204,0,829,830,3,437,218,0,830,831, + 3,405,202,0,831,832,3,435,217,0,832,833,3,417,208,0,833,834,3,403,201, + 0,834,835,3,409,204,0,835,88,1,0,0,0,836,837,3,407,203,0,837,838,3,409, + 204,0,838,839,3,439,219,0,839,840,3,401,200,0,840,841,3,405,202,0,841, + 842,3,415,207,0,842,90,1,0,0,0,843,844,3,407,203,0,844,845,3,417,208, + 0,845,846,3,405,202,0,846,847,3,439,219,0,847,848,3,417,208,0,848,849, + 3,429,214,0,849,850,3,427,213,0,850,851,3,401,200,0,851,852,3,435,217, + 0,852,853,3,417,208,0,853,854,3,409,204,0,854,855,3,437,218,0,855,92, + 1,0,0,0,856,857,3,407,203,0,857,858,3,417,208,0,858,859,3,405,202,0,859, + 860,3,439,219,0,860,861,3,417,208,0,861,862,3,429,214,0,862,863,3,427, + 213,0,863,864,3,401,200,0,864,865,3,435,217,0,865,866,3,449,224,0,866, + 94,1,0,0,0,867,868,3,407,203,0,868,869,3,417,208,0,869,870,3,437,218, + 0,870,871,3,421,210,0,871,96,1,0,0,0,872,873,3,407,203,0,873,874,3,417, + 208,0,874,875,3,437,218,0,875,876,3,439,219,0,876,877,3,417,208,0,877, + 878,3,427,213,0,878,879,3,405,202,0,879,880,3,439,219,0,880,98,1,0,0, + 0,881,882,3,407,203,0,882,883,3,417,208,0,883,884,3,437,218,0,884,885, + 3,439,219,0,885,886,3,435,217,0,886,887,3,417,208,0,887,888,3,403,201, + 0,888,889,3,441,220,0,889,890,3,439,219,0,890,891,3,409,204,0,891,892, + 3,407,203,0,892,100,1,0,0,0,893,894,3,407,203,0,894,895,3,435,217,0,895, + 896,3,429,214,0,896,897,3,431,215,0,897,102,1,0,0,0,898,899,3,409,204, + 0,899,900,3,423,211,0,900,901,3,437,218,0,901,902,3,409,204,0,902,104, + 1,0,0,0,903,904,3,409,204,0,904,905,3,427,213,0,905,906,3,407,203,0,906, + 106,1,0,0,0,907,908,3,409,204,0,908,909,3,427,213,0,909,910,3,413,206, + 0,910,911,3,417,208,0,911,912,3,427,213,0,912,913,3,409,204,0,913,108, + 1,0,0,0,914,915,3,409,204,0,915,916,3,443,221,0,916,917,3,409,204,0,917, + 918,3,427,213,0,918,919,3,439,219,0,919,920,3,437,218,0,920,110,1,0,0, + 0,921,922,3,409,204,0,922,923,3,447,223,0,923,924,3,417,208,0,924,925, + 3,437,218,0,925,926,3,439,219,0,926,927,3,437,218,0,927,112,1,0,0,0,928, + 929,3,409,204,0,929,930,3,447,223,0,930,931,3,431,215,0,931,932,3,423, + 211,0,932,933,3,401,200,0,933,934,3,417,208,0,934,935,3,427,213,0,935, + 114,1,0,0,0,936,937,3,409,204,0,937,938,3,447,223,0,938,939,3,431,215, + 0,939,940,3,435,217,0,940,941,3,409,204,0,941,942,3,437,218,0,942,943, + 3,437,218,0,943,944,3,417,208,0,944,945,3,429,214,0,945,946,3,427,213, + 0,946,116,1,0,0,0,947,948,3,409,204,0,948,949,3,447,223,0,949,950,3,439, + 219,0,950,951,3,435,217,0,951,952,3,401,200,0,952,953,3,405,202,0,953, + 954,3,439,219,0,954,118,1,0,0,0,955,956,3,411,205,0,956,957,3,409,204, + 0,957,958,3,439,219,0,958,959,3,405,202,0,959,960,3,415,207,0,960,961, + 3,409,204,0,961,962,3,437,218,0,962,120,1,0,0,0,963,964,3,411,205,0,964, + 965,3,417,208,0,965,966,3,427,213,0,966,967,3,401,200,0,967,968,3,423, + 211,0,968,122,1,0,0,0,969,970,3,411,205,0,970,971,3,417,208,0,971,972, + 3,435,217,0,972,973,3,437,218,0,973,974,3,439,219,0,974,124,1,0,0,0,975, + 976,3,411,205,0,976,977,3,423,211,0,977,978,3,441,220,0,978,979,3,437, + 218,0,979,980,3,415,207,0,980,126,1,0,0,0,981,982,3,411,205,0,982,983, + 3,429,214,0,983,984,3,423,211,0,984,985,3,423,211,0,985,986,3,429,214, + 0,986,987,3,445,222,0,987,988,3,417,208,0,988,989,3,427,213,0,989,990, + 3,413,206,0,990,128,1,0,0,0,991,992,3,411,205,0,992,993,3,429,214,0,993, + 994,3,435,217,0,994,130,1,0,0,0,995,996,3,411,205,0,996,997,3,429,214, + 0,997,998,3,435,217,0,998,999,3,425,212,0,999,1000,3,401,200,0,1000,1001, + 3,439,219,0,1001,132,1,0,0,0,1002,1003,3,411,205,0,1003,1004,3,435,217, + 0,1004,1005,3,409,204,0,1005,1006,3,409,204,0,1006,1007,3,451,225,0,1007, + 1008,3,409,204,0,1008,134,1,0,0,0,1009,1010,3,411,205,0,1010,1011,3,435, + 217,0,1011,1012,3,429,214,0,1012,1013,3,425,212,0,1013,136,1,0,0,0,1014, + 1015,3,411,205,0,1015,1016,3,441,220,0,1016,1017,3,423,211,0,1017,1018, + 3,423,211,0,1018,138,1,0,0,0,1019,1020,3,411,205,0,1020,1021,3,441,220, + 0,1021,1022,3,427,213,0,1022,1023,3,405,202,0,1023,1024,3,439,219,0,1024, + 1025,3,417,208,0,1025,1026,3,429,214,0,1026,1027,3,427,213,0,1027,140, + 1,0,0,0,1028,1029,3,413,206,0,1029,1030,3,423,211,0,1030,1031,3,429,214, + 0,1031,1032,3,403,201,0,1032,1033,3,401,200,0,1033,1034,3,423,211,0,1034, 142,1,0,0,0,1035,1036,3,413,206,0,1036,1037,3,435,217,0,1037,1038,3,401, 200,0,1038,1039,3,427,213,0,1039,1040,3,441,220,0,1040,1041,3,423,211, 0,1041,1042,3,401,200,0,1042,1043,3,435,217,0,1043,1044,3,417,208,0,1044, @@ -873,116 +874,123 @@ void hogqllexerLexerInitialize() { 1868,3,521,260,0,1868,1870,1,0,0,0,1869,1839,1,0,0,0,1869,1842,1,0,0, 0,1869,1845,1,0,0,0,1869,1848,1,0,0,0,1869,1851,1,0,0,0,1869,1854,1,0, 0,0,1869,1857,1,0,0,0,1869,1860,1,0,0,0,1869,1863,1,0,0,0,1869,1866,1, - 0,0,0,1870,386,1,0,0,0,1871,1875,3,453,226,0,1872,1875,3,537,268,0,1873, - 1875,3,477,238,0,1874,1871,1,0,0,0,1874,1872,1,0,0,0,1874,1873,1,0,0, - 0,1875,1882,1,0,0,0,1876,1881,3,453,226,0,1877,1881,3,537,268,0,1878, - 1881,3,457,228,0,1879,1881,3,477,238,0,1880,1876,1,0,0,0,1880,1877,1, - 0,0,0,1880,1878,1,0,0,0,1880,1879,1,0,0,0,1881,1884,1,0,0,0,1882,1880, - 1,0,0,0,1882,1883,1,0,0,0,1883,1912,1,0,0,0,1884,1882,1,0,0,0,1885,1893, - 3,465,232,0,1886,1892,8,0,0,0,1887,1892,3,385,192,0,1888,1889,3,465,232, - 0,1889,1890,3,465,232,0,1890,1892,1,0,0,0,1891,1886,1,0,0,0,1891,1887, - 1,0,0,0,1891,1888,1,0,0,0,1892,1895,1,0,0,0,1893,1891,1,0,0,0,1893,1894, - 1,0,0,0,1894,1896,1,0,0,0,1895,1893,1,0,0,0,1896,1897,3,465,232,0,1897, - 1912,1,0,0,0,1898,1906,3,519,259,0,1899,1905,8,1,0,0,1900,1905,3,385, - 192,0,1901,1902,3,519,259,0,1902,1903,3,519,259,0,1903,1905,1,0,0,0,1904, - 1899,1,0,0,0,1904,1900,1,0,0,0,1904,1901,1,0,0,0,1905,1908,1,0,0,0,1906, - 1904,1,0,0,0,1906,1907,1,0,0,0,1907,1909,1,0,0,0,1908,1906,1,0,0,0,1909, - 1910,3,519,259,0,1910,1912,1,0,0,0,1911,1874,1,0,0,0,1911,1885,1,0,0, - 0,1911,1898,1,0,0,0,1912,388,1,0,0,0,1913,1914,3,395,197,0,1914,1918, - 3,479,239,0,1915,1917,3,459,229,0,1916,1915,1,0,0,0,1917,1920,1,0,0,0, - 1918,1916,1,0,0,0,1918,1919,1,0,0,0,1919,1923,1,0,0,0,1920,1918,1,0,0, - 0,1921,1924,3,431,215,0,1922,1924,3,409,204,0,1923,1921,1,0,0,0,1923, - 1922,1,0,0,0,1924,1927,1,0,0,0,1925,1928,3,515,257,0,1926,1928,3,475, - 237,0,1927,1925,1,0,0,0,1927,1926,1,0,0,0,1927,1928,1,0,0,0,1928,1930, - 1,0,0,0,1929,1931,3,457,228,0,1930,1929,1,0,0,0,1931,1932,1,0,0,0,1932, - 1930,1,0,0,0,1932,1933,1,0,0,0,1933,1990,1,0,0,0,1934,1937,3,395,197, - 0,1935,1938,3,431,215,0,1936,1938,3,409,204,0,1937,1935,1,0,0,0,1937, - 1936,1,0,0,0,1938,1941,1,0,0,0,1939,1942,3,515,257,0,1940,1942,3,475, - 237,0,1941,1939,1,0,0,0,1941,1940,1,0,0,0,1941,1942,1,0,0,0,1942,1944, - 1,0,0,0,1943,1945,3,457,228,0,1944,1943,1,0,0,0,1945,1946,1,0,0,0,1946, - 1944,1,0,0,0,1946,1947,1,0,0,0,1947,1990,1,0,0,0,1948,1949,3,393,196, - 0,1949,1953,3,479,239,0,1950,1952,3,457,228,0,1951,1950,1,0,0,0,1952, - 1955,1,0,0,0,1953,1951,1,0,0,0,1953,1954,1,0,0,0,1954,1956,1,0,0,0,1955, - 1953,1,0,0,0,1956,1959,3,409,204,0,1957,1960,3,515,257,0,1958,1960,3, - 475,237,0,1959,1957,1,0,0,0,1959,1958,1,0,0,0,1959,1960,1,0,0,0,1960, - 1962,1,0,0,0,1961,1963,3,457,228,0,1962,1961,1,0,0,0,1963,1964,1,0,0, - 0,1964,1962,1,0,0,0,1964,1965,1,0,0,0,1965,1990,1,0,0,0,1966,1967,3,479, - 239,0,1967,1968,3,393,196,0,1968,1971,3,409,204,0,1969,1972,3,515,257, - 0,1970,1972,3,475,237,0,1971,1969,1,0,0,0,1971,1970,1,0,0,0,1971,1972, - 1,0,0,0,1972,1974,1,0,0,0,1973,1975,3,457,228,0,1974,1973,1,0,0,0,1975, - 1976,1,0,0,0,1976,1974,1,0,0,0,1976,1977,1,0,0,0,1977,1990,1,0,0,0,1978, - 1979,3,393,196,0,1979,1982,3,409,204,0,1980,1983,3,515,257,0,1981,1983, - 3,475,237,0,1982,1980,1,0,0,0,1982,1981,1,0,0,0,1982,1983,1,0,0,0,1983, - 1985,1,0,0,0,1984,1986,3,457,228,0,1985,1984,1,0,0,0,1986,1987,1,0,0, - 0,1987,1985,1,0,0,0,1987,1988,1,0,0,0,1988,1990,1,0,0,0,1989,1913,1,0, - 0,0,1989,1934,1,0,0,0,1989,1948,1,0,0,0,1989,1966,1,0,0,0,1989,1978,1, - 0,0,0,1990,390,1,0,0,0,1991,1993,5,48,0,0,1992,1994,3,455,227,0,1993, - 1992,1,0,0,0,1994,1995,1,0,0,0,1995,1993,1,0,0,0,1995,1996,1,0,0,0,1996, - 392,1,0,0,0,1997,1999,3,457,228,0,1998,1997,1,0,0,0,1999,2000,1,0,0,0, - 2000,1998,1,0,0,0,2000,2001,1,0,0,0,2001,394,1,0,0,0,2002,2003,5,48,0, - 0,2003,2005,3,447,223,0,2004,2006,3,459,229,0,2005,2004,1,0,0,0,2006, - 2007,1,0,0,0,2007,2005,1,0,0,0,2007,2008,1,0,0,0,2008,396,1,0,0,0,2009, - 2017,3,521,260,0,2010,2016,8,2,0,0,2011,2016,3,385,192,0,2012,2013,3, - 521,260,0,2013,2014,3,521,260,0,2014,2016,1,0,0,0,2015,2010,1,0,0,0,2015, - 2011,1,0,0,0,2015,2012,1,0,0,0,2016,2019,1,0,0,0,2017,2015,1,0,0,0,2017, - 2018,1,0,0,0,2018,2020,1,0,0,0,2019,2017,1,0,0,0,2020,2021,3,521,260, - 0,2021,398,1,0,0,0,2022,2030,3,495,247,0,2023,2029,8,3,0,0,2024,2029, - 3,385,192,0,2025,2026,3,495,247,0,2026,2027,3,495,247,0,2027,2029,1,0, - 0,0,2028,2023,1,0,0,0,2028,2024,1,0,0,0,2028,2025,1,0,0,0,2029,2032,1, - 0,0,0,2030,2028,1,0,0,0,2030,2031,1,0,0,0,2031,2033,1,0,0,0,2032,2030, - 1,0,0,0,2033,2034,3,527,263,0,2034,400,1,0,0,0,2035,2036,7,4,0,0,2036, - 402,1,0,0,0,2037,2038,7,5,0,0,2038,404,1,0,0,0,2039,2040,7,6,0,0,2040, - 406,1,0,0,0,2041,2042,7,7,0,0,2042,408,1,0,0,0,2043,2044,7,8,0,0,2044, - 410,1,0,0,0,2045,2046,7,9,0,0,2046,412,1,0,0,0,2047,2048,7,10,0,0,2048, - 414,1,0,0,0,2049,2050,7,11,0,0,2050,416,1,0,0,0,2051,2052,7,12,0,0,2052, - 418,1,0,0,0,2053,2054,7,13,0,0,2054,420,1,0,0,0,2055,2056,7,14,0,0,2056, - 422,1,0,0,0,2057,2058,7,15,0,0,2058,424,1,0,0,0,2059,2060,7,16,0,0,2060, - 426,1,0,0,0,2061,2062,7,17,0,0,2062,428,1,0,0,0,2063,2064,7,18,0,0,2064, - 430,1,0,0,0,2065,2066,7,19,0,0,2066,432,1,0,0,0,2067,2068,7,20,0,0,2068, - 434,1,0,0,0,2069,2070,7,21,0,0,2070,436,1,0,0,0,2071,2072,7,22,0,0,2072, - 438,1,0,0,0,2073,2074,7,23,0,0,2074,440,1,0,0,0,2075,2076,7,24,0,0,2076, - 442,1,0,0,0,2077,2078,7,25,0,0,2078,444,1,0,0,0,2079,2080,7,26,0,0,2080, - 446,1,0,0,0,2081,2082,7,27,0,0,2082,448,1,0,0,0,2083,2084,7,28,0,0,2084, - 450,1,0,0,0,2085,2086,7,29,0,0,2086,452,1,0,0,0,2087,2088,7,30,0,0,2088, - 454,1,0,0,0,2089,2090,7,31,0,0,2090,456,1,0,0,0,2091,2092,7,32,0,0,2092, - 458,1,0,0,0,2093,2094,7,33,0,0,2094,460,1,0,0,0,2095,2096,5,45,0,0,2096, - 2097,5,62,0,0,2097,462,1,0,0,0,2098,2099,5,42,0,0,2099,464,1,0,0,0,2100, - 2101,5,96,0,0,2101,466,1,0,0,0,2102,2103,5,92,0,0,2103,468,1,0,0,0,2104, - 2105,5,58,0,0,2105,470,1,0,0,0,2106,2107,5,44,0,0,2107,472,1,0,0,0,2108, - 2109,5,124,0,0,2109,2110,5,124,0,0,2110,474,1,0,0,0,2111,2112,5,45,0, - 0,2112,476,1,0,0,0,2113,2114,5,36,0,0,2114,478,1,0,0,0,2115,2116,5,46, - 0,0,2116,480,1,0,0,0,2117,2118,5,61,0,0,2118,2119,5,61,0,0,2119,482,1, - 0,0,0,2120,2121,5,61,0,0,2121,484,1,0,0,0,2122,2123,5,62,0,0,2123,2124, - 5,61,0,0,2124,486,1,0,0,0,2125,2126,5,62,0,0,2126,488,1,0,0,0,2127,2128, - 5,35,0,0,2128,490,1,0,0,0,2129,2130,5,126,0,0,2130,2131,5,42,0,0,2131, - 492,1,0,0,0,2132,2133,5,61,0,0,2133,2134,5,126,0,0,2134,2135,5,42,0,0, - 2135,494,1,0,0,0,2136,2137,5,123,0,0,2137,496,1,0,0,0,2138,2139,5,91, - 0,0,2139,498,1,0,0,0,2140,2141,5,40,0,0,2141,500,1,0,0,0,2142,2143,5, - 60,0,0,2143,2144,5,61,0,0,2144,502,1,0,0,0,2145,2146,5,60,0,0,2146,504, - 1,0,0,0,2147,2148,5,33,0,0,2148,2152,5,61,0,0,2149,2150,5,60,0,0,2150, - 2152,5,62,0,0,2151,2147,1,0,0,0,2151,2149,1,0,0,0,2152,506,1,0,0,0,2153, - 2154,5,33,0,0,2154,2155,5,126,0,0,2155,2156,5,42,0,0,2156,508,1,0,0,0, - 2157,2158,5,33,0,0,2158,2159,5,126,0,0,2159,510,1,0,0,0,2160,2161,5,63, - 0,0,2161,2162,5,63,0,0,2162,512,1,0,0,0,2163,2164,5,37,0,0,2164,514,1, - 0,0,0,2165,2166,5,43,0,0,2166,516,1,0,0,0,2167,2168,5,63,0,0,2168,518, - 1,0,0,0,2169,2170,5,34,0,0,2170,520,1,0,0,0,2171,2172,5,39,0,0,2172,522, - 1,0,0,0,2173,2174,5,126,0,0,2174,524,1,0,0,0,2175,2176,5,61,0,0,2176, - 2177,5,126,0,0,2177,526,1,0,0,0,2178,2179,5,125,0,0,2179,528,1,0,0,0, - 2180,2181,5,93,0,0,2181,530,1,0,0,0,2182,2183,5,41,0,0,2183,532,1,0,0, - 0,2184,2185,5,59,0,0,2185,534,1,0,0,0,2186,2187,5,47,0,0,2187,536,1,0, - 0,0,2188,2189,5,95,0,0,2189,538,1,0,0,0,2190,2191,5,47,0,0,2191,2192, - 5,42,0,0,2192,2196,1,0,0,0,2193,2195,9,0,0,0,2194,2193,1,0,0,0,2195,2198, - 1,0,0,0,2196,2197,1,0,0,0,2196,2194,1,0,0,0,2197,2199,1,0,0,0,2198,2196, - 1,0,0,0,2199,2200,5,42,0,0,2200,2201,5,47,0,0,2201,2202,1,0,0,0,2202, - 2203,6,269,0,0,2203,540,1,0,0,0,2204,2205,5,45,0,0,2205,2206,5,45,0,0, - 2206,2210,1,0,0,0,2207,2209,8,34,0,0,2208,2207,1,0,0,0,2209,2212,1,0, - 0,0,2210,2208,1,0,0,0,2210,2211,1,0,0,0,2211,2214,1,0,0,0,2212,2210,1, - 0,0,0,2213,2215,7,35,0,0,2214,2213,1,0,0,0,2215,2216,1,0,0,0,2216,2217, - 6,270,0,0,2217,542,1,0,0,0,2218,2219,7,36,0,0,2219,2220,1,0,0,0,2220, - 2221,6,271,1,0,2221,544,1,0,0,0,39,0,607,1112,1826,1869,1874,1880,1882, - 1891,1893,1904,1906,1911,1918,1923,1927,1932,1937,1941,1946,1953,1959, - 1964,1971,1976,1982,1987,1989,1995,2000,2007,2015,2017,2028,2030,2151, - 2196,2210,2214,2,6,0,0,0,1,0 + 0,0,0,1870,386,1,0,0,0,1871,1872,3,467,233,0,1872,1873,3,403,201,0,1873, + 1902,1,0,0,0,1874,1875,3,467,233,0,1875,1876,3,411,205,0,1876,1902,1, + 0,0,0,1877,1878,3,467,233,0,1878,1879,3,435,217,0,1879,1902,1,0,0,0,1880, + 1881,3,467,233,0,1881,1882,3,427,213,0,1882,1902,1,0,0,0,1883,1884,3, + 467,233,0,1884,1885,3,439,219,0,1885,1902,1,0,0,0,1886,1887,3,467,233, + 0,1887,1888,5,48,0,0,1888,1902,1,0,0,0,1889,1890,3,467,233,0,1890,1891, + 3,401,200,0,1891,1902,1,0,0,0,1892,1893,3,467,233,0,1893,1894,3,443,221, + 0,1894,1902,1,0,0,0,1895,1896,3,467,233,0,1896,1897,3,467,233,0,1897, + 1902,1,0,0,0,1898,1899,3,467,233,0,1899,1900,3,519,259,0,1900,1902,1, + 0,0,0,1901,1871,1,0,0,0,1901,1874,1,0,0,0,1901,1877,1,0,0,0,1901,1880, + 1,0,0,0,1901,1883,1,0,0,0,1901,1886,1,0,0,0,1901,1889,1,0,0,0,1901,1892, + 1,0,0,0,1901,1895,1,0,0,0,1901,1898,1,0,0,0,1902,388,1,0,0,0,1903,1907, + 3,453,226,0,1904,1907,3,537,268,0,1905,1907,3,477,238,0,1906,1903,1,0, + 0,0,1906,1904,1,0,0,0,1906,1905,1,0,0,0,1907,1914,1,0,0,0,1908,1913,3, + 453,226,0,1909,1913,3,537,268,0,1910,1913,3,457,228,0,1911,1913,3,477, + 238,0,1912,1908,1,0,0,0,1912,1909,1,0,0,0,1912,1910,1,0,0,0,1912,1911, + 1,0,0,0,1913,1916,1,0,0,0,1914,1912,1,0,0,0,1914,1915,1,0,0,0,1915,1944, + 1,0,0,0,1916,1914,1,0,0,0,1917,1925,3,465,232,0,1918,1924,8,0,0,0,1919, + 1924,3,385,192,0,1920,1921,3,465,232,0,1921,1922,3,465,232,0,1922,1924, + 1,0,0,0,1923,1918,1,0,0,0,1923,1919,1,0,0,0,1923,1920,1,0,0,0,1924,1927, + 1,0,0,0,1925,1923,1,0,0,0,1925,1926,1,0,0,0,1926,1928,1,0,0,0,1927,1925, + 1,0,0,0,1928,1929,3,465,232,0,1929,1944,1,0,0,0,1930,1938,3,519,259,0, + 1931,1937,8,1,0,0,1932,1937,3,387,193,0,1933,1934,3,519,259,0,1934,1935, + 3,519,259,0,1935,1937,1,0,0,0,1936,1931,1,0,0,0,1936,1932,1,0,0,0,1936, + 1933,1,0,0,0,1937,1940,1,0,0,0,1938,1936,1,0,0,0,1938,1939,1,0,0,0,1939, + 1941,1,0,0,0,1940,1938,1,0,0,0,1941,1942,3,519,259,0,1942,1944,1,0,0, + 0,1943,1906,1,0,0,0,1943,1917,1,0,0,0,1943,1930,1,0,0,0,1944,390,1,0, + 0,0,1945,1946,3,397,198,0,1946,1950,3,479,239,0,1947,1949,3,459,229,0, + 1948,1947,1,0,0,0,1949,1952,1,0,0,0,1950,1948,1,0,0,0,1950,1951,1,0,0, + 0,1951,1955,1,0,0,0,1952,1950,1,0,0,0,1953,1956,3,431,215,0,1954,1956, + 3,409,204,0,1955,1953,1,0,0,0,1955,1954,1,0,0,0,1956,1959,1,0,0,0,1957, + 1960,3,515,257,0,1958,1960,3,475,237,0,1959,1957,1,0,0,0,1959,1958,1, + 0,0,0,1959,1960,1,0,0,0,1960,1962,1,0,0,0,1961,1963,3,457,228,0,1962, + 1961,1,0,0,0,1963,1964,1,0,0,0,1964,1962,1,0,0,0,1964,1965,1,0,0,0,1965, + 2022,1,0,0,0,1966,1969,3,397,198,0,1967,1970,3,431,215,0,1968,1970,3, + 409,204,0,1969,1967,1,0,0,0,1969,1968,1,0,0,0,1970,1973,1,0,0,0,1971, + 1974,3,515,257,0,1972,1974,3,475,237,0,1973,1971,1,0,0,0,1973,1972,1, + 0,0,0,1973,1974,1,0,0,0,1974,1976,1,0,0,0,1975,1977,3,457,228,0,1976, + 1975,1,0,0,0,1977,1978,1,0,0,0,1978,1976,1,0,0,0,1978,1979,1,0,0,0,1979, + 2022,1,0,0,0,1980,1981,3,395,197,0,1981,1985,3,479,239,0,1982,1984,3, + 457,228,0,1983,1982,1,0,0,0,1984,1987,1,0,0,0,1985,1983,1,0,0,0,1985, + 1986,1,0,0,0,1986,1988,1,0,0,0,1987,1985,1,0,0,0,1988,1991,3,409,204, + 0,1989,1992,3,515,257,0,1990,1992,3,475,237,0,1991,1989,1,0,0,0,1991, + 1990,1,0,0,0,1991,1992,1,0,0,0,1992,1994,1,0,0,0,1993,1995,3,457,228, + 0,1994,1993,1,0,0,0,1995,1996,1,0,0,0,1996,1994,1,0,0,0,1996,1997,1,0, + 0,0,1997,2022,1,0,0,0,1998,1999,3,479,239,0,1999,2000,3,395,197,0,2000, + 2003,3,409,204,0,2001,2004,3,515,257,0,2002,2004,3,475,237,0,2003,2001, + 1,0,0,0,2003,2002,1,0,0,0,2003,2004,1,0,0,0,2004,2006,1,0,0,0,2005,2007, + 3,457,228,0,2006,2005,1,0,0,0,2007,2008,1,0,0,0,2008,2006,1,0,0,0,2008, + 2009,1,0,0,0,2009,2022,1,0,0,0,2010,2011,3,395,197,0,2011,2014,3,409, + 204,0,2012,2015,3,515,257,0,2013,2015,3,475,237,0,2014,2012,1,0,0,0,2014, + 2013,1,0,0,0,2014,2015,1,0,0,0,2015,2017,1,0,0,0,2016,2018,3,457,228, + 0,2017,2016,1,0,0,0,2018,2019,1,0,0,0,2019,2017,1,0,0,0,2019,2020,1,0, + 0,0,2020,2022,1,0,0,0,2021,1945,1,0,0,0,2021,1966,1,0,0,0,2021,1980,1, + 0,0,0,2021,1998,1,0,0,0,2021,2010,1,0,0,0,2022,392,1,0,0,0,2023,2025, + 5,48,0,0,2024,2026,3,455,227,0,2025,2024,1,0,0,0,2026,2027,1,0,0,0,2027, + 2025,1,0,0,0,2027,2028,1,0,0,0,2028,394,1,0,0,0,2029,2031,3,457,228,0, + 2030,2029,1,0,0,0,2031,2032,1,0,0,0,2032,2030,1,0,0,0,2032,2033,1,0,0, + 0,2033,396,1,0,0,0,2034,2035,5,48,0,0,2035,2037,3,447,223,0,2036,2038, + 3,459,229,0,2037,2036,1,0,0,0,2038,2039,1,0,0,0,2039,2037,1,0,0,0,2039, + 2040,1,0,0,0,2040,398,1,0,0,0,2041,2049,3,521,260,0,2042,2048,8,2,0,0, + 2043,2048,3,385,192,0,2044,2045,3,521,260,0,2045,2046,3,521,260,0,2046, + 2048,1,0,0,0,2047,2042,1,0,0,0,2047,2043,1,0,0,0,2047,2044,1,0,0,0,2048, + 2051,1,0,0,0,2049,2047,1,0,0,0,2049,2050,1,0,0,0,2050,2052,1,0,0,0,2051, + 2049,1,0,0,0,2052,2053,3,521,260,0,2053,400,1,0,0,0,2054,2055,7,3,0,0, + 2055,402,1,0,0,0,2056,2057,7,4,0,0,2057,404,1,0,0,0,2058,2059,7,5,0,0, + 2059,406,1,0,0,0,2060,2061,7,6,0,0,2061,408,1,0,0,0,2062,2063,7,7,0,0, + 2063,410,1,0,0,0,2064,2065,7,8,0,0,2065,412,1,0,0,0,2066,2067,7,9,0,0, + 2067,414,1,0,0,0,2068,2069,7,10,0,0,2069,416,1,0,0,0,2070,2071,7,11,0, + 0,2071,418,1,0,0,0,2072,2073,7,12,0,0,2073,420,1,0,0,0,2074,2075,7,13, + 0,0,2075,422,1,0,0,0,2076,2077,7,14,0,0,2077,424,1,0,0,0,2078,2079,7, + 15,0,0,2079,426,1,0,0,0,2080,2081,7,16,0,0,2081,428,1,0,0,0,2082,2083, + 7,17,0,0,2083,430,1,0,0,0,2084,2085,7,18,0,0,2085,432,1,0,0,0,2086,2087, + 7,19,0,0,2087,434,1,0,0,0,2088,2089,7,20,0,0,2089,436,1,0,0,0,2090,2091, + 7,21,0,0,2091,438,1,0,0,0,2092,2093,7,22,0,0,2093,440,1,0,0,0,2094,2095, + 7,23,0,0,2095,442,1,0,0,0,2096,2097,7,24,0,0,2097,444,1,0,0,0,2098,2099, + 7,25,0,0,2099,446,1,0,0,0,2100,2101,7,26,0,0,2101,448,1,0,0,0,2102,2103, + 7,27,0,0,2103,450,1,0,0,0,2104,2105,7,28,0,0,2105,452,1,0,0,0,2106,2107, + 7,29,0,0,2107,454,1,0,0,0,2108,2109,7,30,0,0,2109,456,1,0,0,0,2110,2111, + 7,31,0,0,2111,458,1,0,0,0,2112,2113,7,32,0,0,2113,460,1,0,0,0,2114,2115, + 5,45,0,0,2115,2116,5,62,0,0,2116,462,1,0,0,0,2117,2118,5,42,0,0,2118, + 464,1,0,0,0,2119,2120,5,96,0,0,2120,466,1,0,0,0,2121,2122,5,92,0,0,2122, + 468,1,0,0,0,2123,2124,5,58,0,0,2124,470,1,0,0,0,2125,2126,5,44,0,0,2126, + 472,1,0,0,0,2127,2128,5,124,0,0,2128,2129,5,124,0,0,2129,474,1,0,0,0, + 2130,2131,5,45,0,0,2131,476,1,0,0,0,2132,2133,5,36,0,0,2133,478,1,0,0, + 0,2134,2135,5,46,0,0,2135,480,1,0,0,0,2136,2137,5,61,0,0,2137,2138,5, + 61,0,0,2138,482,1,0,0,0,2139,2140,5,61,0,0,2140,484,1,0,0,0,2141,2142, + 5,62,0,0,2142,2143,5,61,0,0,2143,486,1,0,0,0,2144,2145,5,62,0,0,2145, + 488,1,0,0,0,2146,2147,5,35,0,0,2147,490,1,0,0,0,2148,2149,5,126,0,0,2149, + 2150,5,42,0,0,2150,492,1,0,0,0,2151,2152,5,61,0,0,2152,2153,5,126,0,0, + 2153,2154,5,42,0,0,2154,494,1,0,0,0,2155,2156,5,123,0,0,2156,496,1,0, + 0,0,2157,2158,5,91,0,0,2158,498,1,0,0,0,2159,2160,5,40,0,0,2160,500,1, + 0,0,0,2161,2162,5,60,0,0,2162,2163,5,61,0,0,2163,502,1,0,0,0,2164,2165, + 5,60,0,0,2165,504,1,0,0,0,2166,2167,5,33,0,0,2167,2171,5,61,0,0,2168, + 2169,5,60,0,0,2169,2171,5,62,0,0,2170,2166,1,0,0,0,2170,2168,1,0,0,0, + 2171,506,1,0,0,0,2172,2173,5,33,0,0,2173,2174,5,126,0,0,2174,2175,5,42, + 0,0,2175,508,1,0,0,0,2176,2177,5,33,0,0,2177,2178,5,126,0,0,2178,510, + 1,0,0,0,2179,2180,5,63,0,0,2180,2181,5,63,0,0,2181,512,1,0,0,0,2182,2183, + 5,37,0,0,2183,514,1,0,0,0,2184,2185,5,43,0,0,2185,516,1,0,0,0,2186,2187, + 5,63,0,0,2187,518,1,0,0,0,2188,2189,5,34,0,0,2189,520,1,0,0,0,2190,2191, + 5,39,0,0,2191,522,1,0,0,0,2192,2193,5,126,0,0,2193,524,1,0,0,0,2194,2195, + 5,61,0,0,2195,2196,5,126,0,0,2196,526,1,0,0,0,2197,2198,5,125,0,0,2198, + 528,1,0,0,0,2199,2200,5,93,0,0,2200,530,1,0,0,0,2201,2202,5,41,0,0,2202, + 532,1,0,0,0,2203,2204,5,59,0,0,2204,534,1,0,0,0,2205,2206,5,47,0,0,2206, + 536,1,0,0,0,2207,2208,5,95,0,0,2208,538,1,0,0,0,2209,2210,5,47,0,0,2210, + 2211,5,42,0,0,2211,2215,1,0,0,0,2212,2214,9,0,0,0,2213,2212,1,0,0,0,2214, + 2217,1,0,0,0,2215,2216,1,0,0,0,2215,2213,1,0,0,0,2216,2218,1,0,0,0,2217, + 2215,1,0,0,0,2218,2219,5,42,0,0,2219,2220,5,47,0,0,2220,2221,1,0,0,0, + 2221,2222,6,269,0,0,2222,540,1,0,0,0,2223,2224,5,45,0,0,2224,2225,5,45, + 0,0,2225,2229,1,0,0,0,2226,2228,8,33,0,0,2227,2226,1,0,0,0,2228,2231, + 1,0,0,0,2229,2227,1,0,0,0,2229,2230,1,0,0,0,2230,2233,1,0,0,0,2231,2229, + 1,0,0,0,2232,2234,7,34,0,0,2233,2232,1,0,0,0,2234,2235,1,0,0,0,2235,2236, + 6,270,0,0,2236,542,1,0,0,0,2237,2238,7,35,0,0,2238,2239,1,0,0,0,2239, + 2240,6,271,1,0,2240,544,1,0,0,0,38,0,607,1112,1826,1869,1901,1906,1912, + 1914,1923,1925,1936,1938,1943,1950,1955,1959,1964,1969,1973,1978,1985, + 1991,1996,2003,2008,2014,2019,2021,2027,2032,2039,2047,2049,2170,2215, + 2229,2233,2,6,0,0,0,1,0 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); diff --git a/hogql_parser/HogQLLexer.h b/hogql_parser/HogQLLexer.h index 3584bf43b4ff9..f79a2ce9a7602 100644 --- a/hogql_parser/HogQLLexer.h +++ b/hogql_parser/HogQLLexer.h @@ -46,17 +46,17 @@ class HogQLLexer : public antlr4::Lexer { UNION = 176, UPDATE = 177, USE = 178, USING = 179, UUID = 180, VALUES = 181, VIEW = 182, VOLUME = 183, WATCH = 184, WEEK = 185, WHEN = 186, WHERE = 187, WINDOW = 188, WITH = 189, YEAR = 190, JSON_FALSE = 191, JSON_TRUE = 192, - ESCAPE_CHAR = 193, IDENTIFIER = 194, FLOATING_LITERAL = 195, OCTAL_LITERAL = 196, - DECIMAL_LITERAL = 197, HEXADECIMAL_LITERAL = 198, STRING_LITERAL = 199, - PLACEHOLDER = 200, ARROW = 201, ASTERISK = 202, BACKQUOTE = 203, BACKSLASH = 204, - COLON = 205, COMMA = 206, CONCAT = 207, DASH = 208, DOLLAR = 209, DOT = 210, - EQ_DOUBLE = 211, EQ_SINGLE = 212, GT_EQ = 213, GT = 214, HASH = 215, - IREGEX_SINGLE = 216, IREGEX_DOUBLE = 217, LBRACE = 218, LBRACKET = 219, - LPAREN = 220, LT_EQ = 221, LT = 222, NOT_EQ = 223, NOT_IREGEX = 224, - NOT_REGEX = 225, NULLISH = 226, PERCENT = 227, PLUS = 228, QUERY = 229, - QUOTE_DOUBLE = 230, QUOTE_SINGLE = 231, REGEX_SINGLE = 232, REGEX_DOUBLE = 233, - RBRACE = 234, RBRACKET = 235, RPAREN = 236, SEMICOLON = 237, SLASH = 238, - UNDERSCORE = 239, MULTI_LINE_COMMENT = 240, SINGLE_LINE_COMMENT = 241, + ESCAPE_CHAR_SINGLE = 193, ESCAPE_CHAR_DOUBLE = 194, IDENTIFIER = 195, + FLOATING_LITERAL = 196, OCTAL_LITERAL = 197, DECIMAL_LITERAL = 198, + HEXADECIMAL_LITERAL = 199, STRING_LITERAL = 200, ARROW = 201, ASTERISK = 202, + BACKQUOTE = 203, BACKSLASH = 204, COLON = 205, COMMA = 206, CONCAT = 207, + DASH = 208, DOLLAR = 209, DOT = 210, EQ_DOUBLE = 211, EQ_SINGLE = 212, + GT_EQ = 213, GT = 214, HASH = 215, IREGEX_SINGLE = 216, IREGEX_DOUBLE = 217, + LBRACE = 218, LBRACKET = 219, LPAREN = 220, LT_EQ = 221, LT = 222, NOT_EQ = 223, + NOT_IREGEX = 224, NOT_REGEX = 225, NULLISH = 226, PERCENT = 227, PLUS = 228, + QUERY = 229, QUOTE_DOUBLE = 230, QUOTE_SINGLE = 231, REGEX_SINGLE = 232, + REGEX_DOUBLE = 233, RBRACE = 234, RBRACKET = 235, RPAREN = 236, SEMICOLON = 237, + SLASH = 238, UNDERSCORE = 239, MULTI_LINE_COMMENT = 240, SINGLE_LINE_COMMENT = 241, WHITESPACE = 242 }; diff --git a/hogql_parser/HogQLLexer.interp b/hogql_parser/HogQLLexer.interp index 3e078ad307c5d..d9736c1e31fea 100644 --- a/hogql_parser/HogQLLexer.interp +++ b/hogql_parser/HogQLLexer.interp @@ -437,14 +437,14 @@ WITH YEAR JSON_FALSE JSON_TRUE -ESCAPE_CHAR +ESCAPE_CHAR_SINGLE +ESCAPE_CHAR_DOUBLE IDENTIFIER FLOATING_LITERAL OCTAL_LITERAL DECIMAL_LITERAL HEXADECIMAL_LITERAL STRING_LITERAL -PLACEHOLDER ARROW ASTERISK BACKQUOTE @@ -681,14 +681,14 @@ WITH YEAR JSON_FALSE JSON_TRUE -ESCAPE_CHAR +ESCAPE_CHAR_SINGLE +ESCAPE_CHAR_DOUBLE IDENTIFIER FLOATING_LITERAL OCTAL_LITERAL DECIMAL_LITERAL HEXADECIMAL_LITERAL STRING_LITERAL -PLACEHOLDER A B C @@ -770,4 +770,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 242, 2222, 6, -1, 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, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 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, 3, 10, 608, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 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, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 1113, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 1827, 8, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 3, 192, 1870, 8, 192, 1, 193, 1, 193, 1, 193, 3, 193, 1875, 8, 193, 1, 193, 1, 193, 1, 193, 1, 193, 5, 193, 1881, 8, 193, 10, 193, 12, 193, 1884, 9, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 5, 193, 1892, 8, 193, 10, 193, 12, 193, 1895, 9, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 5, 193, 1905, 8, 193, 10, 193, 12, 193, 1908, 9, 193, 1, 193, 1, 193, 3, 193, 1912, 8, 193, 1, 194, 1, 194, 1, 194, 5, 194, 1917, 8, 194, 10, 194, 12, 194, 1920, 9, 194, 1, 194, 1, 194, 3, 194, 1924, 8, 194, 1, 194, 1, 194, 3, 194, 1928, 8, 194, 1, 194, 4, 194, 1931, 8, 194, 11, 194, 12, 194, 1932, 1, 194, 1, 194, 1, 194, 3, 194, 1938, 8, 194, 1, 194, 1, 194, 3, 194, 1942, 8, 194, 1, 194, 4, 194, 1945, 8, 194, 11, 194, 12, 194, 1946, 1, 194, 1, 194, 1, 194, 5, 194, 1952, 8, 194, 10, 194, 12, 194, 1955, 9, 194, 1, 194, 1, 194, 1, 194, 3, 194, 1960, 8, 194, 1, 194, 4, 194, 1963, 8, 194, 11, 194, 12, 194, 1964, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 3, 194, 1972, 8, 194, 1, 194, 4, 194, 1975, 8, 194, 11, 194, 12, 194, 1976, 1, 194, 1, 194, 1, 194, 1, 194, 3, 194, 1983, 8, 194, 1, 194, 4, 194, 1986, 8, 194, 11, 194, 12, 194, 1987, 3, 194, 1990, 8, 194, 1, 195, 1, 195, 4, 195, 1994, 8, 195, 11, 195, 12, 195, 1995, 1, 196, 4, 196, 1999, 8, 196, 11, 196, 12, 196, 2000, 1, 197, 1, 197, 1, 197, 4, 197, 2006, 8, 197, 11, 197, 12, 197, 2007, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 5, 198, 2016, 8, 198, 10, 198, 12, 198, 2019, 9, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 5, 199, 2029, 8, 199, 10, 199, 12, 199, 2032, 9, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 201, 1, 201, 1, 202, 1, 202, 1, 203, 1, 203, 1, 204, 1, 204, 1, 205, 1, 205, 1, 206, 1, 206, 1, 207, 1, 207, 1, 208, 1, 208, 1, 209, 1, 209, 1, 210, 1, 210, 1, 211, 1, 211, 1, 212, 1, 212, 1, 213, 1, 213, 1, 214, 1, 214, 1, 215, 1, 215, 1, 216, 1, 216, 1, 217, 1, 217, 1, 218, 1, 218, 1, 219, 1, 219, 1, 220, 1, 220, 1, 221, 1, 221, 1, 222, 1, 222, 1, 223, 1, 223, 1, 224, 1, 224, 1, 225, 1, 225, 1, 226, 1, 226, 1, 227, 1, 227, 1, 228, 1, 228, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 232, 1, 232, 1, 233, 1, 233, 1, 234, 1, 234, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 238, 1, 238, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 248, 1, 248, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, 3, 252, 2152, 8, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 257, 1, 257, 1, 258, 1, 258, 1, 259, 1, 259, 1, 260, 1, 260, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 264, 1, 264, 1, 265, 1, 265, 1, 266, 1, 266, 1, 267, 1, 267, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 5, 269, 2195, 8, 269, 10, 269, 12, 269, 2198, 9, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 5, 270, 2209, 8, 270, 10, 270, 12, 270, 2212, 9, 270, 1, 270, 3, 270, 2215, 8, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 2196, 0, 272, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 0, 403, 0, 405, 0, 407, 0, 409, 0, 411, 0, 413, 0, 415, 0, 417, 0, 419, 0, 421, 0, 423, 0, 425, 0, 427, 0, 429, 0, 431, 0, 433, 0, 435, 0, 437, 0, 439, 0, 441, 0, 443, 0, 445, 0, 447, 0, 449, 0, 451, 0, 453, 0, 455, 0, 457, 0, 459, 0, 461, 201, 463, 202, 465, 203, 467, 204, 469, 205, 471, 206, 473, 207, 475, 208, 477, 209, 479, 210, 481, 211, 483, 212, 485, 213, 487, 214, 489, 215, 491, 216, 493, 217, 495, 218, 497, 219, 499, 220, 501, 221, 503, 222, 505, 223, 507, 224, 509, 225, 511, 226, 513, 227, 515, 228, 517, 229, 519, 230, 521, 231, 523, 232, 525, 233, 527, 234, 529, 235, 531, 236, 533, 237, 535, 238, 537, 239, 539, 240, 541, 241, 543, 242, 1, 0, 37, 2, 0, 92, 92, 96, 96, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 92, 92, 125, 125, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 1, 0, 48, 55, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 10, 10, 13, 13, 2, 1, 10, 10, 13, 13, 2, 0, 9, 13, 32, 32, 2252, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 1, 545, 1, 0, 0, 0, 3, 549, 1, 0, 0, 0, 5, 555, 1, 0, 0, 0, 7, 561, 1, 0, 0, 0, 9, 565, 1, 0, 0, 0, 11, 571, 1, 0, 0, 0, 13, 575, 1, 0, 0, 0, 15, 580, 1, 0, 0, 0, 17, 584, 1, 0, 0, 0, 19, 590, 1, 0, 0, 0, 21, 607, 1, 0, 0, 0, 23, 609, 1, 0, 0, 0, 25, 614, 1, 0, 0, 0, 27, 618, 1, 0, 0, 0, 29, 624, 1, 0, 0, 0, 31, 631, 1, 0, 0, 0, 33, 639, 1, 0, 0, 0, 35, 644, 1, 0, 0, 0, 37, 647, 1, 0, 0, 0, 39, 652, 1, 0, 0, 0, 41, 657, 1, 0, 0, 0, 43, 663, 1, 0, 0, 0, 45, 669, 1, 0, 0, 0, 47, 677, 1, 0, 0, 0, 49, 683, 1, 0, 0, 0, 51, 690, 1, 0, 0, 0, 53, 698, 1, 0, 0, 0, 55, 705, 1, 0, 0, 0, 57, 713, 1, 0, 0, 0, 59, 724, 1, 0, 0, 0, 61, 731, 1, 0, 0, 0, 63, 737, 1, 0, 0, 0, 65, 742, 1, 0, 0, 0, 67, 750, 1, 0, 0, 0, 69, 759, 1, 0, 0, 0, 71, 769, 1, 0, 0, 0, 73, 774, 1, 0, 0, 0, 75, 778, 1, 0, 0, 0, 77, 790, 1, 0, 0, 0, 79, 798, 1, 0, 0, 0, 81, 804, 1, 0, 0, 0, 83, 811, 1, 0, 0, 0, 85, 816, 1, 0, 0, 0, 87, 827, 1, 0, 0, 0, 89, 836, 1, 0, 0, 0, 91, 843, 1, 0, 0, 0, 93, 856, 1, 0, 0, 0, 95, 867, 1, 0, 0, 0, 97, 872, 1, 0, 0, 0, 99, 881, 1, 0, 0, 0, 101, 893, 1, 0, 0, 0, 103, 898, 1, 0, 0, 0, 105, 903, 1, 0, 0, 0, 107, 907, 1, 0, 0, 0, 109, 914, 1, 0, 0, 0, 111, 921, 1, 0, 0, 0, 113, 928, 1, 0, 0, 0, 115, 936, 1, 0, 0, 0, 117, 947, 1, 0, 0, 0, 119, 955, 1, 0, 0, 0, 121, 963, 1, 0, 0, 0, 123, 969, 1, 0, 0, 0, 125, 975, 1, 0, 0, 0, 127, 981, 1, 0, 0, 0, 129, 991, 1, 0, 0, 0, 131, 995, 1, 0, 0, 0, 133, 1002, 1, 0, 0, 0, 135, 1009, 1, 0, 0, 0, 137, 1014, 1, 0, 0, 0, 139, 1019, 1, 0, 0, 0, 141, 1028, 1, 0, 0, 0, 143, 1035, 1, 0, 0, 0, 145, 1047, 1, 0, 0, 0, 147, 1053, 1, 0, 0, 0, 149, 1060, 1, 0, 0, 0, 151, 1073, 1, 0, 0, 0, 153, 1078, 1, 0, 0, 0, 155, 1081, 1, 0, 0, 0, 157, 1084, 1, 0, 0, 0, 159, 1090, 1, 0, 0, 0, 161, 1093, 1, 0, 0, 0, 163, 1112, 1, 0, 0, 0, 165, 1114, 1, 0, 0, 0, 167, 1124, 1, 0, 0, 0, 169, 1130, 1, 0, 0, 0, 171, 1137, 1, 0, 0, 0, 173, 1146, 1, 0, 0, 0, 175, 1151, 1, 0, 0, 0, 177, 1154, 1, 0, 0, 0, 179, 1167, 1, 0, 0, 0, 181, 1172, 1, 0, 0, 0, 183, 1176, 1, 0, 0, 0, 185, 1181, 1, 0, 0, 0, 187, 1186, 1, 0, 0, 0, 189, 1193, 1, 0, 0, 0, 191, 1201, 1, 0, 0, 0, 193, 1206, 1, 0, 0, 0, 195, 1215, 1, 0, 0, 0, 197, 1220, 1, 0, 0, 0, 199, 1226, 1, 0, 0, 0, 201, 1231, 1, 0, 0, 0, 203, 1237, 1, 0, 0, 0, 205, 1242, 1, 0, 0, 0, 207, 1254, 1, 0, 0, 0, 209, 1267, 1, 0, 0, 0, 211, 1271, 1, 0, 0, 0, 213, 1278, 1, 0, 0, 0, 215, 1282, 1, 0, 0, 0, 217, 1289, 1, 0, 0, 0, 219, 1296, 1, 0, 0, 0, 221, 1302, 1, 0, 0, 0, 223, 1307, 1, 0, 0, 0, 225, 1316, 1, 0, 0, 0, 227, 1320, 1, 0, 0, 0, 229, 1323, 1, 0, 0, 0, 231, 1327, 1, 0, 0, 0, 233, 1332, 1, 0, 0, 0, 235, 1338, 1, 0, 0, 0, 237, 1345, 1, 0, 0, 0, 239, 1348, 1, 0, 0, 0, 241, 1357, 1, 0, 0, 0, 243, 1360, 1, 0, 0, 0, 245, 1366, 1, 0, 0, 0, 247, 1372, 1, 0, 0, 0, 249, 1380, 1, 0, 0, 0, 251, 1385, 1, 0, 0, 0, 253, 1395, 1, 0, 0, 0, 255, 1404, 1, 0, 0, 0, 257, 1414, 1, 0, 0, 0, 259, 1423, 1, 0, 0, 0, 261, 1431, 1, 0, 0, 0, 263, 1442, 1, 0, 0, 0, 265, 1450, 1, 0, 0, 0, 267, 1456, 1, 0, 0, 0, 269, 1463, 1, 0, 0, 0, 271, 1470, 1, 0, 0, 0, 273, 1477, 1, 0, 0, 0, 275, 1485, 1, 0, 0, 0, 277, 1493, 1, 0, 0, 0, 279, 1504, 1, 0, 0, 0, 281, 1510, 1, 0, 0, 0, 283, 1517, 1, 0, 0, 0, 285, 1521, 1, 0, 0, 0, 287, 1526, 1, 0, 0, 0, 289, 1533, 1, 0, 0, 0, 291, 1540, 1, 0, 0, 0, 293, 1547, 1, 0, 0, 0, 295, 1552, 1, 0, 0, 0, 297, 1558, 1, 0, 0, 0, 299, 1562, 1, 0, 0, 0, 301, 1571, 1, 0, 0, 0, 303, 1576, 1, 0, 0, 0, 305, 1583, 1, 0, 0, 0, 307, 1589, 1, 0, 0, 0, 309, 1594, 1, 0, 0, 0, 311, 1604, 1, 0, 0, 0, 313, 1609, 1, 0, 0, 0, 315, 1616, 1, 0, 0, 0, 317, 1623, 1, 0, 0, 0, 319, 1629, 1, 0, 0, 0, 321, 1636, 1, 0, 0, 0, 323, 1646, 1, 0, 0, 0, 325, 1651, 1, 0, 0, 0, 327, 1656, 1, 0, 0, 0, 329, 1661, 1, 0, 0, 0, 331, 1669, 1, 0, 0, 0, 333, 1679, 1, 0, 0, 0, 335, 1682, 1, 0, 0, 0, 337, 1686, 1, 0, 0, 0, 339, 1693, 1, 0, 0, 0, 341, 1702, 1, 0, 0, 0, 343, 1707, 1, 0, 0, 0, 345, 1716, 1, 0, 0, 0, 347, 1720, 1, 0, 0, 0, 349, 1725, 1, 0, 0, 0, 351, 1735, 1, 0, 0, 0, 353, 1741, 1, 0, 0, 0, 355, 1748, 1, 0, 0, 0, 357, 1752, 1, 0, 0, 0, 359, 1758, 1, 0, 0, 0, 361, 1763, 1, 0, 0, 0, 363, 1770, 1, 0, 0, 0, 365, 1775, 1, 0, 0, 0, 367, 1782, 1, 0, 0, 0, 369, 1788, 1, 0, 0, 0, 371, 1793, 1, 0, 0, 0, 373, 1798, 1, 0, 0, 0, 375, 1804, 1, 0, 0, 0, 377, 1811, 1, 0, 0, 0, 379, 1826, 1, 0, 0, 0, 381, 1828, 1, 0, 0, 0, 383, 1834, 1, 0, 0, 0, 385, 1869, 1, 0, 0, 0, 387, 1911, 1, 0, 0, 0, 389, 1989, 1, 0, 0, 0, 391, 1991, 1, 0, 0, 0, 393, 1998, 1, 0, 0, 0, 395, 2002, 1, 0, 0, 0, 397, 2009, 1, 0, 0, 0, 399, 2022, 1, 0, 0, 0, 401, 2035, 1, 0, 0, 0, 403, 2037, 1, 0, 0, 0, 405, 2039, 1, 0, 0, 0, 407, 2041, 1, 0, 0, 0, 409, 2043, 1, 0, 0, 0, 411, 2045, 1, 0, 0, 0, 413, 2047, 1, 0, 0, 0, 415, 2049, 1, 0, 0, 0, 417, 2051, 1, 0, 0, 0, 419, 2053, 1, 0, 0, 0, 421, 2055, 1, 0, 0, 0, 423, 2057, 1, 0, 0, 0, 425, 2059, 1, 0, 0, 0, 427, 2061, 1, 0, 0, 0, 429, 2063, 1, 0, 0, 0, 431, 2065, 1, 0, 0, 0, 433, 2067, 1, 0, 0, 0, 435, 2069, 1, 0, 0, 0, 437, 2071, 1, 0, 0, 0, 439, 2073, 1, 0, 0, 0, 441, 2075, 1, 0, 0, 0, 443, 2077, 1, 0, 0, 0, 445, 2079, 1, 0, 0, 0, 447, 2081, 1, 0, 0, 0, 449, 2083, 1, 0, 0, 0, 451, 2085, 1, 0, 0, 0, 453, 2087, 1, 0, 0, 0, 455, 2089, 1, 0, 0, 0, 457, 2091, 1, 0, 0, 0, 459, 2093, 1, 0, 0, 0, 461, 2095, 1, 0, 0, 0, 463, 2098, 1, 0, 0, 0, 465, 2100, 1, 0, 0, 0, 467, 2102, 1, 0, 0, 0, 469, 2104, 1, 0, 0, 0, 471, 2106, 1, 0, 0, 0, 473, 2108, 1, 0, 0, 0, 475, 2111, 1, 0, 0, 0, 477, 2113, 1, 0, 0, 0, 479, 2115, 1, 0, 0, 0, 481, 2117, 1, 0, 0, 0, 483, 2120, 1, 0, 0, 0, 485, 2122, 1, 0, 0, 0, 487, 2125, 1, 0, 0, 0, 489, 2127, 1, 0, 0, 0, 491, 2129, 1, 0, 0, 0, 493, 2132, 1, 0, 0, 0, 495, 2136, 1, 0, 0, 0, 497, 2138, 1, 0, 0, 0, 499, 2140, 1, 0, 0, 0, 501, 2142, 1, 0, 0, 0, 503, 2145, 1, 0, 0, 0, 505, 2151, 1, 0, 0, 0, 507, 2153, 1, 0, 0, 0, 509, 2157, 1, 0, 0, 0, 511, 2160, 1, 0, 0, 0, 513, 2163, 1, 0, 0, 0, 515, 2165, 1, 0, 0, 0, 517, 2167, 1, 0, 0, 0, 519, 2169, 1, 0, 0, 0, 521, 2171, 1, 0, 0, 0, 523, 2173, 1, 0, 0, 0, 525, 2175, 1, 0, 0, 0, 527, 2178, 1, 0, 0, 0, 529, 2180, 1, 0, 0, 0, 531, 2182, 1, 0, 0, 0, 533, 2184, 1, 0, 0, 0, 535, 2186, 1, 0, 0, 0, 537, 2188, 1, 0, 0, 0, 539, 2190, 1, 0, 0, 0, 541, 2204, 1, 0, 0, 0, 543, 2218, 1, 0, 0, 0, 545, 546, 3, 401, 200, 0, 546, 547, 3, 407, 203, 0, 547, 548, 3, 407, 203, 0, 548, 2, 1, 0, 0, 0, 549, 550, 3, 401, 200, 0, 550, 551, 3, 411, 205, 0, 551, 552, 3, 439, 219, 0, 552, 553, 3, 409, 204, 0, 553, 554, 3, 435, 217, 0, 554, 4, 1, 0, 0, 0, 555, 556, 3, 401, 200, 0, 556, 557, 3, 423, 211, 0, 557, 558, 3, 417, 208, 0, 558, 559, 3, 401, 200, 0, 559, 560, 3, 437, 218, 0, 560, 6, 1, 0, 0, 0, 561, 562, 3, 401, 200, 0, 562, 563, 3, 423, 211, 0, 563, 564, 3, 423, 211, 0, 564, 8, 1, 0, 0, 0, 565, 566, 3, 401, 200, 0, 566, 567, 3, 423, 211, 0, 567, 568, 3, 439, 219, 0, 568, 569, 3, 409, 204, 0, 569, 570, 3, 435, 217, 0, 570, 10, 1, 0, 0, 0, 571, 572, 3, 401, 200, 0, 572, 573, 3, 427, 213, 0, 573, 574, 3, 407, 203, 0, 574, 12, 1, 0, 0, 0, 575, 576, 3, 401, 200, 0, 576, 577, 3, 427, 213, 0, 577, 578, 3, 439, 219, 0, 578, 579, 3, 417, 208, 0, 579, 14, 1, 0, 0, 0, 580, 581, 3, 401, 200, 0, 581, 582, 3, 427, 213, 0, 582, 583, 3, 449, 224, 0, 583, 16, 1, 0, 0, 0, 584, 585, 3, 401, 200, 0, 585, 586, 3, 435, 217, 0, 586, 587, 3, 435, 217, 0, 587, 588, 3, 401, 200, 0, 588, 589, 3, 449, 224, 0, 589, 18, 1, 0, 0, 0, 590, 591, 3, 401, 200, 0, 591, 592, 3, 437, 218, 0, 592, 20, 1, 0, 0, 0, 593, 594, 3, 401, 200, 0, 594, 595, 3, 437, 218, 0, 595, 596, 3, 405, 202, 0, 596, 608, 1, 0, 0, 0, 597, 598, 3, 401, 200, 0, 598, 599, 3, 437, 218, 0, 599, 600, 3, 405, 202, 0, 600, 601, 3, 409, 204, 0, 601, 602, 3, 427, 213, 0, 602, 603, 3, 407, 203, 0, 603, 604, 3, 417, 208, 0, 604, 605, 3, 427, 213, 0, 605, 606, 3, 413, 206, 0, 606, 608, 1, 0, 0, 0, 607, 593, 1, 0, 0, 0, 607, 597, 1, 0, 0, 0, 608, 22, 1, 0, 0, 0, 609, 610, 3, 401, 200, 0, 610, 611, 3, 437, 218, 0, 611, 612, 3, 429, 214, 0, 612, 613, 3, 411, 205, 0, 613, 24, 1, 0, 0, 0, 614, 615, 3, 401, 200, 0, 615, 616, 3, 437, 218, 0, 616, 617, 3, 439, 219, 0, 617, 26, 1, 0, 0, 0, 618, 619, 3, 401, 200, 0, 619, 620, 3, 437, 218, 0, 620, 621, 3, 449, 224, 0, 621, 622, 3, 427, 213, 0, 622, 623, 3, 405, 202, 0, 623, 28, 1, 0, 0, 0, 624, 625, 3, 401, 200, 0, 625, 626, 3, 439, 219, 0, 626, 627, 3, 439, 219, 0, 627, 628, 3, 401, 200, 0, 628, 629, 3, 405, 202, 0, 629, 630, 3, 415, 207, 0, 630, 30, 1, 0, 0, 0, 631, 632, 3, 403, 201, 0, 632, 633, 3, 409, 204, 0, 633, 634, 3, 439, 219, 0, 634, 635, 3, 445, 222, 0, 635, 636, 3, 409, 204, 0, 636, 637, 3, 409, 204, 0, 637, 638, 3, 427, 213, 0, 638, 32, 1, 0, 0, 0, 639, 640, 3, 403, 201, 0, 640, 641, 3, 429, 214, 0, 641, 642, 3, 439, 219, 0, 642, 643, 3, 415, 207, 0, 643, 34, 1, 0, 0, 0, 644, 645, 3, 403, 201, 0, 645, 646, 3, 449, 224, 0, 646, 36, 1, 0, 0, 0, 647, 648, 3, 405, 202, 0, 648, 649, 3, 401, 200, 0, 649, 650, 3, 437, 218, 0, 650, 651, 3, 409, 204, 0, 651, 38, 1, 0, 0, 0, 652, 653, 3, 405, 202, 0, 653, 654, 3, 401, 200, 0, 654, 655, 3, 437, 218, 0, 655, 656, 3, 439, 219, 0, 656, 40, 1, 0, 0, 0, 657, 658, 3, 405, 202, 0, 658, 659, 3, 415, 207, 0, 659, 660, 3, 409, 204, 0, 660, 661, 3, 405, 202, 0, 661, 662, 3, 421, 210, 0, 662, 42, 1, 0, 0, 0, 663, 664, 3, 405, 202, 0, 664, 665, 3, 423, 211, 0, 665, 666, 3, 409, 204, 0, 666, 667, 3, 401, 200, 0, 667, 668, 3, 435, 217, 0, 668, 44, 1, 0, 0, 0, 669, 670, 3, 405, 202, 0, 670, 671, 3, 423, 211, 0, 671, 672, 3, 441, 220, 0, 672, 673, 3, 437, 218, 0, 673, 674, 3, 439, 219, 0, 674, 675, 3, 409, 204, 0, 675, 676, 3, 435, 217, 0, 676, 46, 1, 0, 0, 0, 677, 678, 3, 405, 202, 0, 678, 679, 3, 429, 214, 0, 679, 680, 3, 407, 203, 0, 680, 681, 3, 409, 204, 0, 681, 682, 3, 405, 202, 0, 682, 48, 1, 0, 0, 0, 683, 684, 3, 405, 202, 0, 684, 685, 3, 429, 214, 0, 685, 686, 3, 415, 207, 0, 686, 687, 3, 429, 214, 0, 687, 688, 3, 435, 217, 0, 688, 689, 3, 439, 219, 0, 689, 50, 1, 0, 0, 0, 690, 691, 3, 405, 202, 0, 691, 692, 3, 429, 214, 0, 692, 693, 3, 423, 211, 0, 693, 694, 3, 423, 211, 0, 694, 695, 3, 401, 200, 0, 695, 696, 3, 439, 219, 0, 696, 697, 3, 409, 204, 0, 697, 52, 1, 0, 0, 0, 698, 699, 3, 405, 202, 0, 699, 700, 3, 429, 214, 0, 700, 701, 3, 423, 211, 0, 701, 702, 3, 441, 220, 0, 702, 703, 3, 425, 212, 0, 703, 704, 3, 427, 213, 0, 704, 54, 1, 0, 0, 0, 705, 706, 3, 405, 202, 0, 706, 707, 3, 429, 214, 0, 707, 708, 3, 425, 212, 0, 708, 709, 3, 425, 212, 0, 709, 710, 3, 409, 204, 0, 710, 711, 3, 427, 213, 0, 711, 712, 3, 439, 219, 0, 712, 56, 1, 0, 0, 0, 713, 714, 3, 405, 202, 0, 714, 715, 3, 429, 214, 0, 715, 716, 3, 427, 213, 0, 716, 717, 3, 437, 218, 0, 717, 718, 3, 439, 219, 0, 718, 719, 3, 435, 217, 0, 719, 720, 3, 401, 200, 0, 720, 721, 3, 417, 208, 0, 721, 722, 3, 427, 213, 0, 722, 723, 3, 439, 219, 0, 723, 58, 1, 0, 0, 0, 724, 725, 3, 405, 202, 0, 725, 726, 3, 435, 217, 0, 726, 727, 3, 409, 204, 0, 727, 728, 3, 401, 200, 0, 728, 729, 3, 439, 219, 0, 729, 730, 3, 409, 204, 0, 730, 60, 1, 0, 0, 0, 731, 732, 3, 405, 202, 0, 732, 733, 3, 435, 217, 0, 733, 734, 3, 429, 214, 0, 734, 735, 3, 437, 218, 0, 735, 736, 3, 437, 218, 0, 736, 62, 1, 0, 0, 0, 737, 738, 3, 405, 202, 0, 738, 739, 3, 441, 220, 0, 739, 740, 3, 403, 201, 0, 740, 741, 3, 409, 204, 0, 741, 64, 1, 0, 0, 0, 742, 743, 3, 405, 202, 0, 743, 744, 3, 441, 220, 0, 744, 745, 3, 435, 217, 0, 745, 746, 3, 435, 217, 0, 746, 747, 3, 409, 204, 0, 747, 748, 3, 427, 213, 0, 748, 749, 3, 439, 219, 0, 749, 66, 1, 0, 0, 0, 750, 751, 3, 407, 203, 0, 751, 752, 3, 401, 200, 0, 752, 753, 3, 439, 219, 0, 753, 754, 3, 401, 200, 0, 754, 755, 3, 403, 201, 0, 755, 756, 3, 401, 200, 0, 756, 757, 3, 437, 218, 0, 757, 758, 3, 409, 204, 0, 758, 68, 1, 0, 0, 0, 759, 760, 3, 407, 203, 0, 760, 761, 3, 401, 200, 0, 761, 762, 3, 439, 219, 0, 762, 763, 3, 401, 200, 0, 763, 764, 3, 403, 201, 0, 764, 765, 3, 401, 200, 0, 765, 766, 3, 437, 218, 0, 766, 767, 3, 409, 204, 0, 767, 768, 3, 437, 218, 0, 768, 70, 1, 0, 0, 0, 769, 770, 3, 407, 203, 0, 770, 771, 3, 401, 200, 0, 771, 772, 3, 439, 219, 0, 772, 773, 3, 409, 204, 0, 773, 72, 1, 0, 0, 0, 774, 775, 3, 407, 203, 0, 775, 776, 3, 401, 200, 0, 776, 777, 3, 449, 224, 0, 777, 74, 1, 0, 0, 0, 778, 779, 3, 407, 203, 0, 779, 780, 3, 409, 204, 0, 780, 781, 3, 407, 203, 0, 781, 782, 3, 441, 220, 0, 782, 783, 3, 431, 215, 0, 783, 784, 3, 423, 211, 0, 784, 785, 3, 417, 208, 0, 785, 786, 3, 405, 202, 0, 786, 787, 3, 401, 200, 0, 787, 788, 3, 439, 219, 0, 788, 789, 3, 409, 204, 0, 789, 76, 1, 0, 0, 0, 790, 791, 3, 407, 203, 0, 791, 792, 3, 409, 204, 0, 792, 793, 3, 411, 205, 0, 793, 794, 3, 401, 200, 0, 794, 795, 3, 441, 220, 0, 795, 796, 3, 423, 211, 0, 796, 797, 3, 439, 219, 0, 797, 78, 1, 0, 0, 0, 798, 799, 3, 407, 203, 0, 799, 800, 3, 409, 204, 0, 800, 801, 3, 423, 211, 0, 801, 802, 3, 401, 200, 0, 802, 803, 3, 449, 224, 0, 803, 80, 1, 0, 0, 0, 804, 805, 3, 407, 203, 0, 805, 806, 3, 409, 204, 0, 806, 807, 3, 423, 211, 0, 807, 808, 3, 409, 204, 0, 808, 809, 3, 439, 219, 0, 809, 810, 3, 409, 204, 0, 810, 82, 1, 0, 0, 0, 811, 812, 3, 407, 203, 0, 812, 813, 3, 409, 204, 0, 813, 814, 3, 437, 218, 0, 814, 815, 3, 405, 202, 0, 815, 84, 1, 0, 0, 0, 816, 817, 3, 407, 203, 0, 817, 818, 3, 409, 204, 0, 818, 819, 3, 437, 218, 0, 819, 820, 3, 405, 202, 0, 820, 821, 3, 409, 204, 0, 821, 822, 3, 427, 213, 0, 822, 823, 3, 407, 203, 0, 823, 824, 3, 417, 208, 0, 824, 825, 3, 427, 213, 0, 825, 826, 3, 413, 206, 0, 826, 86, 1, 0, 0, 0, 827, 828, 3, 407, 203, 0, 828, 829, 3, 409, 204, 0, 829, 830, 3, 437, 218, 0, 830, 831, 3, 405, 202, 0, 831, 832, 3, 435, 217, 0, 832, 833, 3, 417, 208, 0, 833, 834, 3, 403, 201, 0, 834, 835, 3, 409, 204, 0, 835, 88, 1, 0, 0, 0, 836, 837, 3, 407, 203, 0, 837, 838, 3, 409, 204, 0, 838, 839, 3, 439, 219, 0, 839, 840, 3, 401, 200, 0, 840, 841, 3, 405, 202, 0, 841, 842, 3, 415, 207, 0, 842, 90, 1, 0, 0, 0, 843, 844, 3, 407, 203, 0, 844, 845, 3, 417, 208, 0, 845, 846, 3, 405, 202, 0, 846, 847, 3, 439, 219, 0, 847, 848, 3, 417, 208, 0, 848, 849, 3, 429, 214, 0, 849, 850, 3, 427, 213, 0, 850, 851, 3, 401, 200, 0, 851, 852, 3, 435, 217, 0, 852, 853, 3, 417, 208, 0, 853, 854, 3, 409, 204, 0, 854, 855, 3, 437, 218, 0, 855, 92, 1, 0, 0, 0, 856, 857, 3, 407, 203, 0, 857, 858, 3, 417, 208, 0, 858, 859, 3, 405, 202, 0, 859, 860, 3, 439, 219, 0, 860, 861, 3, 417, 208, 0, 861, 862, 3, 429, 214, 0, 862, 863, 3, 427, 213, 0, 863, 864, 3, 401, 200, 0, 864, 865, 3, 435, 217, 0, 865, 866, 3, 449, 224, 0, 866, 94, 1, 0, 0, 0, 867, 868, 3, 407, 203, 0, 868, 869, 3, 417, 208, 0, 869, 870, 3, 437, 218, 0, 870, 871, 3, 421, 210, 0, 871, 96, 1, 0, 0, 0, 872, 873, 3, 407, 203, 0, 873, 874, 3, 417, 208, 0, 874, 875, 3, 437, 218, 0, 875, 876, 3, 439, 219, 0, 876, 877, 3, 417, 208, 0, 877, 878, 3, 427, 213, 0, 878, 879, 3, 405, 202, 0, 879, 880, 3, 439, 219, 0, 880, 98, 1, 0, 0, 0, 881, 882, 3, 407, 203, 0, 882, 883, 3, 417, 208, 0, 883, 884, 3, 437, 218, 0, 884, 885, 3, 439, 219, 0, 885, 886, 3, 435, 217, 0, 886, 887, 3, 417, 208, 0, 887, 888, 3, 403, 201, 0, 888, 889, 3, 441, 220, 0, 889, 890, 3, 439, 219, 0, 890, 891, 3, 409, 204, 0, 891, 892, 3, 407, 203, 0, 892, 100, 1, 0, 0, 0, 893, 894, 3, 407, 203, 0, 894, 895, 3, 435, 217, 0, 895, 896, 3, 429, 214, 0, 896, 897, 3, 431, 215, 0, 897, 102, 1, 0, 0, 0, 898, 899, 3, 409, 204, 0, 899, 900, 3, 423, 211, 0, 900, 901, 3, 437, 218, 0, 901, 902, 3, 409, 204, 0, 902, 104, 1, 0, 0, 0, 903, 904, 3, 409, 204, 0, 904, 905, 3, 427, 213, 0, 905, 906, 3, 407, 203, 0, 906, 106, 1, 0, 0, 0, 907, 908, 3, 409, 204, 0, 908, 909, 3, 427, 213, 0, 909, 910, 3, 413, 206, 0, 910, 911, 3, 417, 208, 0, 911, 912, 3, 427, 213, 0, 912, 913, 3, 409, 204, 0, 913, 108, 1, 0, 0, 0, 914, 915, 3, 409, 204, 0, 915, 916, 3, 443, 221, 0, 916, 917, 3, 409, 204, 0, 917, 918, 3, 427, 213, 0, 918, 919, 3, 439, 219, 0, 919, 920, 3, 437, 218, 0, 920, 110, 1, 0, 0, 0, 921, 922, 3, 409, 204, 0, 922, 923, 3, 447, 223, 0, 923, 924, 3, 417, 208, 0, 924, 925, 3, 437, 218, 0, 925, 926, 3, 439, 219, 0, 926, 927, 3, 437, 218, 0, 927, 112, 1, 0, 0, 0, 928, 929, 3, 409, 204, 0, 929, 930, 3, 447, 223, 0, 930, 931, 3, 431, 215, 0, 931, 932, 3, 423, 211, 0, 932, 933, 3, 401, 200, 0, 933, 934, 3, 417, 208, 0, 934, 935, 3, 427, 213, 0, 935, 114, 1, 0, 0, 0, 936, 937, 3, 409, 204, 0, 937, 938, 3, 447, 223, 0, 938, 939, 3, 431, 215, 0, 939, 940, 3, 435, 217, 0, 940, 941, 3, 409, 204, 0, 941, 942, 3, 437, 218, 0, 942, 943, 3, 437, 218, 0, 943, 944, 3, 417, 208, 0, 944, 945, 3, 429, 214, 0, 945, 946, 3, 427, 213, 0, 946, 116, 1, 0, 0, 0, 947, 948, 3, 409, 204, 0, 948, 949, 3, 447, 223, 0, 949, 950, 3, 439, 219, 0, 950, 951, 3, 435, 217, 0, 951, 952, 3, 401, 200, 0, 952, 953, 3, 405, 202, 0, 953, 954, 3, 439, 219, 0, 954, 118, 1, 0, 0, 0, 955, 956, 3, 411, 205, 0, 956, 957, 3, 409, 204, 0, 957, 958, 3, 439, 219, 0, 958, 959, 3, 405, 202, 0, 959, 960, 3, 415, 207, 0, 960, 961, 3, 409, 204, 0, 961, 962, 3, 437, 218, 0, 962, 120, 1, 0, 0, 0, 963, 964, 3, 411, 205, 0, 964, 965, 3, 417, 208, 0, 965, 966, 3, 427, 213, 0, 966, 967, 3, 401, 200, 0, 967, 968, 3, 423, 211, 0, 968, 122, 1, 0, 0, 0, 969, 970, 3, 411, 205, 0, 970, 971, 3, 417, 208, 0, 971, 972, 3, 435, 217, 0, 972, 973, 3, 437, 218, 0, 973, 974, 3, 439, 219, 0, 974, 124, 1, 0, 0, 0, 975, 976, 3, 411, 205, 0, 976, 977, 3, 423, 211, 0, 977, 978, 3, 441, 220, 0, 978, 979, 3, 437, 218, 0, 979, 980, 3, 415, 207, 0, 980, 126, 1, 0, 0, 0, 981, 982, 3, 411, 205, 0, 982, 983, 3, 429, 214, 0, 983, 984, 3, 423, 211, 0, 984, 985, 3, 423, 211, 0, 985, 986, 3, 429, 214, 0, 986, 987, 3, 445, 222, 0, 987, 988, 3, 417, 208, 0, 988, 989, 3, 427, 213, 0, 989, 990, 3, 413, 206, 0, 990, 128, 1, 0, 0, 0, 991, 992, 3, 411, 205, 0, 992, 993, 3, 429, 214, 0, 993, 994, 3, 435, 217, 0, 994, 130, 1, 0, 0, 0, 995, 996, 3, 411, 205, 0, 996, 997, 3, 429, 214, 0, 997, 998, 3, 435, 217, 0, 998, 999, 3, 425, 212, 0, 999, 1000, 3, 401, 200, 0, 1000, 1001, 3, 439, 219, 0, 1001, 132, 1, 0, 0, 0, 1002, 1003, 3, 411, 205, 0, 1003, 1004, 3, 435, 217, 0, 1004, 1005, 3, 409, 204, 0, 1005, 1006, 3, 409, 204, 0, 1006, 1007, 3, 451, 225, 0, 1007, 1008, 3, 409, 204, 0, 1008, 134, 1, 0, 0, 0, 1009, 1010, 3, 411, 205, 0, 1010, 1011, 3, 435, 217, 0, 1011, 1012, 3, 429, 214, 0, 1012, 1013, 3, 425, 212, 0, 1013, 136, 1, 0, 0, 0, 1014, 1015, 3, 411, 205, 0, 1015, 1016, 3, 441, 220, 0, 1016, 1017, 3, 423, 211, 0, 1017, 1018, 3, 423, 211, 0, 1018, 138, 1, 0, 0, 0, 1019, 1020, 3, 411, 205, 0, 1020, 1021, 3, 441, 220, 0, 1021, 1022, 3, 427, 213, 0, 1022, 1023, 3, 405, 202, 0, 1023, 1024, 3, 439, 219, 0, 1024, 1025, 3, 417, 208, 0, 1025, 1026, 3, 429, 214, 0, 1026, 1027, 3, 427, 213, 0, 1027, 140, 1, 0, 0, 0, 1028, 1029, 3, 413, 206, 0, 1029, 1030, 3, 423, 211, 0, 1030, 1031, 3, 429, 214, 0, 1031, 1032, 3, 403, 201, 0, 1032, 1033, 3, 401, 200, 0, 1033, 1034, 3, 423, 211, 0, 1034, 142, 1, 0, 0, 0, 1035, 1036, 3, 413, 206, 0, 1036, 1037, 3, 435, 217, 0, 1037, 1038, 3, 401, 200, 0, 1038, 1039, 3, 427, 213, 0, 1039, 1040, 3, 441, 220, 0, 1040, 1041, 3, 423, 211, 0, 1041, 1042, 3, 401, 200, 0, 1042, 1043, 3, 435, 217, 0, 1043, 1044, 3, 417, 208, 0, 1044, 1045, 3, 439, 219, 0, 1045, 1046, 3, 449, 224, 0, 1046, 144, 1, 0, 0, 0, 1047, 1048, 3, 413, 206, 0, 1048, 1049, 3, 435, 217, 0, 1049, 1050, 3, 429, 214, 0, 1050, 1051, 3, 441, 220, 0, 1051, 1052, 3, 431, 215, 0, 1052, 146, 1, 0, 0, 0, 1053, 1054, 3, 415, 207, 0, 1054, 1055, 3, 401, 200, 0, 1055, 1056, 3, 443, 221, 0, 1056, 1057, 3, 417, 208, 0, 1057, 1058, 3, 427, 213, 0, 1058, 1059, 3, 413, 206, 0, 1059, 148, 1, 0, 0, 0, 1060, 1061, 3, 415, 207, 0, 1061, 1062, 3, 417, 208, 0, 1062, 1063, 3, 409, 204, 0, 1063, 1064, 3, 435, 217, 0, 1064, 1065, 3, 401, 200, 0, 1065, 1066, 3, 435, 217, 0, 1066, 1067, 3, 405, 202, 0, 1067, 1068, 3, 415, 207, 0, 1068, 1069, 3, 417, 208, 0, 1069, 1070, 3, 405, 202, 0, 1070, 1071, 3, 401, 200, 0, 1071, 1072, 3, 423, 211, 0, 1072, 150, 1, 0, 0, 0, 1073, 1074, 3, 415, 207, 0, 1074, 1075, 3, 429, 214, 0, 1075, 1076, 3, 441, 220, 0, 1076, 1077, 3, 435, 217, 0, 1077, 152, 1, 0, 0, 0, 1078, 1079, 3, 417, 208, 0, 1079, 1080, 3, 407, 203, 0, 1080, 154, 1, 0, 0, 0, 1081, 1082, 3, 417, 208, 0, 1082, 1083, 3, 411, 205, 0, 1083, 156, 1, 0, 0, 0, 1084, 1085, 3, 417, 208, 0, 1085, 1086, 3, 423, 211, 0, 1086, 1087, 3, 417, 208, 0, 1087, 1088, 3, 421, 210, 0, 1088, 1089, 3, 409, 204, 0, 1089, 158, 1, 0, 0, 0, 1090, 1091, 3, 417, 208, 0, 1091, 1092, 3, 427, 213, 0, 1092, 160, 1, 0, 0, 0, 1093, 1094, 3, 417, 208, 0, 1094, 1095, 3, 427, 213, 0, 1095, 1096, 3, 407, 203, 0, 1096, 1097, 3, 409, 204, 0, 1097, 1098, 3, 447, 223, 0, 1098, 162, 1, 0, 0, 0, 1099, 1100, 3, 417, 208, 0, 1100, 1101, 3, 427, 213, 0, 1101, 1102, 3, 411, 205, 0, 1102, 1113, 1, 0, 0, 0, 1103, 1104, 3, 417, 208, 0, 1104, 1105, 3, 427, 213, 0, 1105, 1106, 3, 411, 205, 0, 1106, 1107, 3, 417, 208, 0, 1107, 1108, 3, 427, 213, 0, 1108, 1109, 3, 417, 208, 0, 1109, 1110, 3, 439, 219, 0, 1110, 1111, 3, 449, 224, 0, 1111, 1113, 1, 0, 0, 0, 1112, 1099, 1, 0, 0, 0, 1112, 1103, 1, 0, 0, 0, 1113, 164, 1, 0, 0, 0, 1114, 1115, 3, 417, 208, 0, 1115, 1116, 3, 427, 213, 0, 1116, 1117, 3, 419, 209, 0, 1117, 1118, 3, 409, 204, 0, 1118, 1119, 3, 405, 202, 0, 1119, 1120, 3, 439, 219, 0, 1120, 1121, 3, 417, 208, 0, 1121, 1122, 3, 443, 221, 0, 1122, 1123, 3, 409, 204, 0, 1123, 166, 1, 0, 0, 0, 1124, 1125, 3, 417, 208, 0, 1125, 1126, 3, 427, 213, 0, 1126, 1127, 3, 427, 213, 0, 1127, 1128, 3, 409, 204, 0, 1128, 1129, 3, 435, 217, 0, 1129, 168, 1, 0, 0, 0, 1130, 1131, 3, 417, 208, 0, 1131, 1132, 3, 427, 213, 0, 1132, 1133, 3, 437, 218, 0, 1133, 1134, 3, 409, 204, 0, 1134, 1135, 3, 435, 217, 0, 1135, 1136, 3, 439, 219, 0, 1136, 170, 1, 0, 0, 0, 1137, 1138, 3, 417, 208, 0, 1138, 1139, 3, 427, 213, 0, 1139, 1140, 3, 439, 219, 0, 1140, 1141, 3, 409, 204, 0, 1141, 1142, 3, 435, 217, 0, 1142, 1143, 3, 443, 221, 0, 1143, 1144, 3, 401, 200, 0, 1144, 1145, 3, 423, 211, 0, 1145, 172, 1, 0, 0, 0, 1146, 1147, 3, 417, 208, 0, 1147, 1148, 3, 427, 213, 0, 1148, 1149, 3, 439, 219, 0, 1149, 1150, 3, 429, 214, 0, 1150, 174, 1, 0, 0, 0, 1151, 1152, 3, 417, 208, 0, 1152, 1153, 3, 437, 218, 0, 1153, 176, 1, 0, 0, 0, 1154, 1155, 3, 417, 208, 0, 1155, 1156, 3, 437, 218, 0, 1156, 1157, 3, 537, 268, 0, 1157, 1158, 3, 429, 214, 0, 1158, 1159, 3, 403, 201, 0, 1159, 1160, 3, 419, 209, 0, 1160, 1161, 3, 409, 204, 0, 1161, 1162, 3, 405, 202, 0, 1162, 1163, 3, 439, 219, 0, 1163, 1164, 3, 537, 268, 0, 1164, 1165, 3, 417, 208, 0, 1165, 1166, 3, 407, 203, 0, 1166, 178, 1, 0, 0, 0, 1167, 1168, 3, 419, 209, 0, 1168, 1169, 3, 429, 214, 0, 1169, 1170, 3, 417, 208, 0, 1170, 1171, 3, 427, 213, 0, 1171, 180, 1, 0, 0, 0, 1172, 1173, 3, 421, 210, 0, 1173, 1174, 3, 409, 204, 0, 1174, 1175, 3, 449, 224, 0, 1175, 182, 1, 0, 0, 0, 1176, 1177, 3, 421, 210, 0, 1177, 1178, 3, 417, 208, 0, 1178, 1179, 3, 423, 211, 0, 1179, 1180, 3, 423, 211, 0, 1180, 184, 1, 0, 0, 0, 1181, 1182, 3, 423, 211, 0, 1182, 1183, 3, 401, 200, 0, 1183, 1184, 3, 437, 218, 0, 1184, 1185, 3, 439, 219, 0, 1185, 186, 1, 0, 0, 0, 1186, 1187, 3, 423, 211, 0, 1187, 1188, 3, 401, 200, 0, 1188, 1189, 3, 449, 224, 0, 1189, 1190, 3, 429, 214, 0, 1190, 1191, 3, 441, 220, 0, 1191, 1192, 3, 439, 219, 0, 1192, 188, 1, 0, 0, 0, 1193, 1194, 3, 423, 211, 0, 1194, 1195, 3, 409, 204, 0, 1195, 1196, 3, 401, 200, 0, 1196, 1197, 3, 407, 203, 0, 1197, 1198, 3, 417, 208, 0, 1198, 1199, 3, 427, 213, 0, 1199, 1200, 3, 413, 206, 0, 1200, 190, 1, 0, 0, 0, 1201, 1202, 3, 423, 211, 0, 1202, 1203, 3, 409, 204, 0, 1203, 1204, 3, 411, 205, 0, 1204, 1205, 3, 439, 219, 0, 1205, 192, 1, 0, 0, 0, 1206, 1207, 3, 423, 211, 0, 1207, 1208, 3, 417, 208, 0, 1208, 1209, 3, 411, 205, 0, 1209, 1210, 3, 409, 204, 0, 1210, 1211, 3, 439, 219, 0, 1211, 1212, 3, 417, 208, 0, 1212, 1213, 3, 425, 212, 0, 1213, 1214, 3, 409, 204, 0, 1214, 194, 1, 0, 0, 0, 1215, 1216, 3, 423, 211, 0, 1216, 1217, 3, 417, 208, 0, 1217, 1218, 3, 421, 210, 0, 1218, 1219, 3, 409, 204, 0, 1219, 196, 1, 0, 0, 0, 1220, 1221, 3, 423, 211, 0, 1221, 1222, 3, 417, 208, 0, 1222, 1223, 3, 425, 212, 0, 1223, 1224, 3, 417, 208, 0, 1224, 1225, 3, 439, 219, 0, 1225, 198, 1, 0, 0, 0, 1226, 1227, 3, 423, 211, 0, 1227, 1228, 3, 417, 208, 0, 1228, 1229, 3, 443, 221, 0, 1229, 1230, 3, 409, 204, 0, 1230, 200, 1, 0, 0, 0, 1231, 1232, 3, 423, 211, 0, 1232, 1233, 3, 429, 214, 0, 1233, 1234, 3, 405, 202, 0, 1234, 1235, 3, 401, 200, 0, 1235, 1236, 3, 423, 211, 0, 1236, 202, 1, 0, 0, 0, 1237, 1238, 3, 423, 211, 0, 1238, 1239, 3, 429, 214, 0, 1239, 1240, 3, 413, 206, 0, 1240, 1241, 3, 437, 218, 0, 1241, 204, 1, 0, 0, 0, 1242, 1243, 3, 425, 212, 0, 1243, 1244, 3, 401, 200, 0, 1244, 1245, 3, 439, 219, 0, 1245, 1246, 3, 409, 204, 0, 1246, 1247, 3, 435, 217, 0, 1247, 1248, 3, 417, 208, 0, 1248, 1249, 3, 401, 200, 0, 1249, 1250, 3, 423, 211, 0, 1250, 1251, 3, 417, 208, 0, 1251, 1252, 3, 451, 225, 0, 1252, 1253, 3, 409, 204, 0, 1253, 206, 1, 0, 0, 0, 1254, 1255, 3, 425, 212, 0, 1255, 1256, 3, 401, 200, 0, 1256, 1257, 3, 439, 219, 0, 1257, 1258, 3, 409, 204, 0, 1258, 1259, 3, 435, 217, 0, 1259, 1260, 3, 417, 208, 0, 1260, 1261, 3, 401, 200, 0, 1261, 1262, 3, 423, 211, 0, 1262, 1263, 3, 417, 208, 0, 1263, 1264, 3, 451, 225, 0, 1264, 1265, 3, 409, 204, 0, 1265, 1266, 3, 407, 203, 0, 1266, 208, 1, 0, 0, 0, 1267, 1268, 3, 425, 212, 0, 1268, 1269, 3, 401, 200, 0, 1269, 1270, 3, 447, 223, 0, 1270, 210, 1, 0, 0, 0, 1271, 1272, 3, 425, 212, 0, 1272, 1273, 3, 409, 204, 0, 1273, 1274, 3, 435, 217, 0, 1274, 1275, 3, 413, 206, 0, 1275, 1276, 3, 409, 204, 0, 1276, 1277, 3, 437, 218, 0, 1277, 212, 1, 0, 0, 0, 1278, 1279, 3, 425, 212, 0, 1279, 1280, 3, 417, 208, 0, 1280, 1281, 3, 427, 213, 0, 1281, 214, 1, 0, 0, 0, 1282, 1283, 3, 425, 212, 0, 1283, 1284, 3, 417, 208, 0, 1284, 1285, 3, 427, 213, 0, 1285, 1286, 3, 441, 220, 0, 1286, 1287, 3, 439, 219, 0, 1287, 1288, 3, 409, 204, 0, 1288, 216, 1, 0, 0, 0, 1289, 1290, 3, 425, 212, 0, 1290, 1291, 3, 429, 214, 0, 1291, 1292, 3, 407, 203, 0, 1292, 1293, 3, 417, 208, 0, 1293, 1294, 3, 411, 205, 0, 1294, 1295, 3, 449, 224, 0, 1295, 218, 1, 0, 0, 0, 1296, 1297, 3, 425, 212, 0, 1297, 1298, 3, 429, 214, 0, 1298, 1299, 3, 427, 213, 0, 1299, 1300, 3, 439, 219, 0, 1300, 1301, 3, 415, 207, 0, 1301, 220, 1, 0, 0, 0, 1302, 1303, 3, 425, 212, 0, 1303, 1304, 3, 429, 214, 0, 1304, 1305, 3, 443, 221, 0, 1305, 1306, 3, 409, 204, 0, 1306, 222, 1, 0, 0, 0, 1307, 1308, 3, 425, 212, 0, 1308, 1309, 3, 441, 220, 0, 1309, 1310, 3, 439, 219, 0, 1310, 1311, 3, 401, 200, 0, 1311, 1312, 3, 439, 219, 0, 1312, 1313, 3, 417, 208, 0, 1313, 1314, 3, 429, 214, 0, 1314, 1315, 3, 427, 213, 0, 1315, 224, 1, 0, 0, 0, 1316, 1317, 3, 427, 213, 0, 1317, 1318, 3, 401, 200, 0, 1318, 1319, 3, 427, 213, 0, 1319, 226, 1, 0, 0, 0, 1320, 1321, 3, 427, 213, 0, 1321, 1322, 3, 429, 214, 0, 1322, 228, 1, 0, 0, 0, 1323, 1324, 3, 427, 213, 0, 1324, 1325, 3, 429, 214, 0, 1325, 1326, 3, 439, 219, 0, 1326, 230, 1, 0, 0, 0, 1327, 1328, 3, 427, 213, 0, 1328, 1329, 3, 441, 220, 0, 1329, 1330, 3, 423, 211, 0, 1330, 1331, 3, 423, 211, 0, 1331, 232, 1, 0, 0, 0, 1332, 1333, 3, 427, 213, 0, 1333, 1334, 3, 441, 220, 0, 1334, 1335, 3, 423, 211, 0, 1335, 1336, 3, 423, 211, 0, 1336, 1337, 3, 437, 218, 0, 1337, 234, 1, 0, 0, 0, 1338, 1339, 3, 429, 214, 0, 1339, 1340, 3, 411, 205, 0, 1340, 1341, 3, 411, 205, 0, 1341, 1342, 3, 437, 218, 0, 1342, 1343, 3, 409, 204, 0, 1343, 1344, 3, 439, 219, 0, 1344, 236, 1, 0, 0, 0, 1345, 1346, 3, 429, 214, 0, 1346, 1347, 3, 427, 213, 0, 1347, 238, 1, 0, 0, 0, 1348, 1349, 3, 429, 214, 0, 1349, 1350, 3, 431, 215, 0, 1350, 1351, 3, 439, 219, 0, 1351, 1352, 3, 417, 208, 0, 1352, 1353, 3, 425, 212, 0, 1353, 1354, 3, 417, 208, 0, 1354, 1355, 3, 451, 225, 0, 1355, 1356, 3, 409, 204, 0, 1356, 240, 1, 0, 0, 0, 1357, 1358, 3, 429, 214, 0, 1358, 1359, 3, 435, 217, 0, 1359, 242, 1, 0, 0, 0, 1360, 1361, 3, 429, 214, 0, 1361, 1362, 3, 435, 217, 0, 1362, 1363, 3, 407, 203, 0, 1363, 1364, 3, 409, 204, 0, 1364, 1365, 3, 435, 217, 0, 1365, 244, 1, 0, 0, 0, 1366, 1367, 3, 429, 214, 0, 1367, 1368, 3, 441, 220, 0, 1368, 1369, 3, 439, 219, 0, 1369, 1370, 3, 409, 204, 0, 1370, 1371, 3, 435, 217, 0, 1371, 246, 1, 0, 0, 0, 1372, 1373, 3, 429, 214, 0, 1373, 1374, 3, 441, 220, 0, 1374, 1375, 3, 439, 219, 0, 1375, 1376, 3, 411, 205, 0, 1376, 1377, 3, 417, 208, 0, 1377, 1378, 3, 423, 211, 0, 1378, 1379, 3, 409, 204, 0, 1379, 248, 1, 0, 0, 0, 1380, 1381, 3, 429, 214, 0, 1381, 1382, 3, 443, 221, 0, 1382, 1383, 3, 409, 204, 0, 1383, 1384, 3, 435, 217, 0, 1384, 250, 1, 0, 0, 0, 1385, 1386, 3, 431, 215, 0, 1386, 1387, 3, 401, 200, 0, 1387, 1388, 3, 435, 217, 0, 1388, 1389, 3, 439, 219, 0, 1389, 1390, 3, 417, 208, 0, 1390, 1391, 3, 439, 219, 0, 1391, 1392, 3, 417, 208, 0, 1392, 1393, 3, 429, 214, 0, 1393, 1394, 3, 427, 213, 0, 1394, 252, 1, 0, 0, 0, 1395, 1396, 3, 431, 215, 0, 1396, 1397, 3, 429, 214, 0, 1397, 1398, 3, 431, 215, 0, 1398, 1399, 3, 441, 220, 0, 1399, 1400, 3, 423, 211, 0, 1400, 1401, 3, 401, 200, 0, 1401, 1402, 3, 439, 219, 0, 1402, 1403, 3, 409, 204, 0, 1403, 254, 1, 0, 0, 0, 1404, 1405, 3, 431, 215, 0, 1405, 1406, 3, 435, 217, 0, 1406, 1407, 3, 409, 204, 0, 1407, 1408, 3, 405, 202, 0, 1408, 1409, 3, 409, 204, 0, 1409, 1410, 3, 407, 203, 0, 1410, 1411, 3, 417, 208, 0, 1411, 1412, 3, 427, 213, 0, 1412, 1413, 3, 413, 206, 0, 1413, 256, 1, 0, 0, 0, 1414, 1415, 3, 431, 215, 0, 1415, 1416, 3, 435, 217, 0, 1416, 1417, 3, 409, 204, 0, 1417, 1418, 3, 445, 222, 0, 1418, 1419, 3, 415, 207, 0, 1419, 1420, 3, 409, 204, 0, 1420, 1421, 3, 435, 217, 0, 1421, 1422, 3, 409, 204, 0, 1422, 258, 1, 0, 0, 0, 1423, 1424, 3, 431, 215, 0, 1424, 1425, 3, 435, 217, 0, 1425, 1426, 3, 417, 208, 0, 1426, 1427, 3, 425, 212, 0, 1427, 1428, 3, 401, 200, 0, 1428, 1429, 3, 435, 217, 0, 1429, 1430, 3, 449, 224, 0, 1430, 260, 1, 0, 0, 0, 1431, 1432, 3, 431, 215, 0, 1432, 1433, 3, 435, 217, 0, 1433, 1434, 3, 429, 214, 0, 1434, 1435, 3, 419, 209, 0, 1435, 1436, 3, 409, 204, 0, 1436, 1437, 3, 405, 202, 0, 1437, 1438, 3, 439, 219, 0, 1438, 1439, 3, 417, 208, 0, 1439, 1440, 3, 429, 214, 0, 1440, 1441, 3, 427, 213, 0, 1441, 262, 1, 0, 0, 0, 1442, 1443, 3, 433, 216, 0, 1443, 1444, 3, 441, 220, 0, 1444, 1445, 3, 401, 200, 0, 1445, 1446, 3, 435, 217, 0, 1446, 1447, 3, 439, 219, 0, 1447, 1448, 3, 409, 204, 0, 1448, 1449, 3, 435, 217, 0, 1449, 264, 1, 0, 0, 0, 1450, 1451, 3, 435, 217, 0, 1451, 1452, 3, 401, 200, 0, 1452, 1453, 3, 427, 213, 0, 1453, 1454, 3, 413, 206, 0, 1454, 1455, 3, 409, 204, 0, 1455, 266, 1, 0, 0, 0, 1456, 1457, 3, 435, 217, 0, 1457, 1458, 3, 409, 204, 0, 1458, 1459, 3, 423, 211, 0, 1459, 1460, 3, 429, 214, 0, 1460, 1461, 3, 401, 200, 0, 1461, 1462, 3, 407, 203, 0, 1462, 268, 1, 0, 0, 0, 1463, 1464, 3, 435, 217, 0, 1464, 1465, 3, 409, 204, 0, 1465, 1466, 3, 425, 212, 0, 1466, 1467, 3, 429, 214, 0, 1467, 1468, 3, 443, 221, 0, 1468, 1469, 3, 409, 204, 0, 1469, 270, 1, 0, 0, 0, 1470, 1471, 3, 435, 217, 0, 1471, 1472, 3, 409, 204, 0, 1472, 1473, 3, 427, 213, 0, 1473, 1474, 3, 401, 200, 0, 1474, 1475, 3, 425, 212, 0, 1475, 1476, 3, 409, 204, 0, 1476, 272, 1, 0, 0, 0, 1477, 1478, 3, 435, 217, 0, 1478, 1479, 3, 409, 204, 0, 1479, 1480, 3, 431, 215, 0, 1480, 1481, 3, 423, 211, 0, 1481, 1482, 3, 401, 200, 0, 1482, 1483, 3, 405, 202, 0, 1483, 1484, 3, 409, 204, 0, 1484, 274, 1, 0, 0, 0, 1485, 1486, 3, 435, 217, 0, 1486, 1487, 3, 409, 204, 0, 1487, 1488, 3, 431, 215, 0, 1488, 1489, 3, 423, 211, 0, 1489, 1490, 3, 417, 208, 0, 1490, 1491, 3, 405, 202, 0, 1491, 1492, 3, 401, 200, 0, 1492, 276, 1, 0, 0, 0, 1493, 1494, 3, 435, 217, 0, 1494, 1495, 3, 409, 204, 0, 1495, 1496, 3, 431, 215, 0, 1496, 1497, 3, 423, 211, 0, 1497, 1498, 3, 417, 208, 0, 1498, 1499, 3, 405, 202, 0, 1499, 1500, 3, 401, 200, 0, 1500, 1501, 3, 439, 219, 0, 1501, 1502, 3, 409, 204, 0, 1502, 1503, 3, 407, 203, 0, 1503, 278, 1, 0, 0, 0, 1504, 1505, 3, 435, 217, 0, 1505, 1506, 3, 417, 208, 0, 1506, 1507, 3, 413, 206, 0, 1507, 1508, 3, 415, 207, 0, 1508, 1509, 3, 439, 219, 0, 1509, 280, 1, 0, 0, 0, 1510, 1511, 3, 435, 217, 0, 1511, 1512, 3, 429, 214, 0, 1512, 1513, 3, 423, 211, 0, 1513, 1514, 3, 423, 211, 0, 1514, 1515, 3, 441, 220, 0, 1515, 1516, 3, 431, 215, 0, 1516, 282, 1, 0, 0, 0, 1517, 1518, 3, 435, 217, 0, 1518, 1519, 3, 429, 214, 0, 1519, 1520, 3, 445, 222, 0, 1520, 284, 1, 0, 0, 0, 1521, 1522, 3, 435, 217, 0, 1522, 1523, 3, 429, 214, 0, 1523, 1524, 3, 445, 222, 0, 1524, 1525, 3, 437, 218, 0, 1525, 286, 1, 0, 0, 0, 1526, 1527, 3, 437, 218, 0, 1527, 1528, 3, 401, 200, 0, 1528, 1529, 3, 425, 212, 0, 1529, 1530, 3, 431, 215, 0, 1530, 1531, 3, 423, 211, 0, 1531, 1532, 3, 409, 204, 0, 1532, 288, 1, 0, 0, 0, 1533, 1534, 3, 437, 218, 0, 1534, 1535, 3, 409, 204, 0, 1535, 1536, 3, 405, 202, 0, 1536, 1537, 3, 429, 214, 0, 1537, 1538, 3, 427, 213, 0, 1538, 1539, 3, 407, 203, 0, 1539, 290, 1, 0, 0, 0, 1540, 1541, 3, 437, 218, 0, 1541, 1542, 3, 409, 204, 0, 1542, 1543, 3, 423, 211, 0, 1543, 1544, 3, 409, 204, 0, 1544, 1545, 3, 405, 202, 0, 1545, 1546, 3, 439, 219, 0, 1546, 292, 1, 0, 0, 0, 1547, 1548, 3, 437, 218, 0, 1548, 1549, 3, 409, 204, 0, 1549, 1550, 3, 425, 212, 0, 1550, 1551, 3, 417, 208, 0, 1551, 294, 1, 0, 0, 0, 1552, 1553, 3, 437, 218, 0, 1553, 1554, 3, 409, 204, 0, 1554, 1555, 3, 427, 213, 0, 1555, 1556, 3, 407, 203, 0, 1556, 1557, 3, 437, 218, 0, 1557, 296, 1, 0, 0, 0, 1558, 1559, 3, 437, 218, 0, 1559, 1560, 3, 409, 204, 0, 1560, 1561, 3, 439, 219, 0, 1561, 298, 1, 0, 0, 0, 1562, 1563, 3, 437, 218, 0, 1563, 1564, 3, 409, 204, 0, 1564, 1565, 3, 439, 219, 0, 1565, 1566, 3, 439, 219, 0, 1566, 1567, 3, 417, 208, 0, 1567, 1568, 3, 427, 213, 0, 1568, 1569, 3, 413, 206, 0, 1569, 1570, 3, 437, 218, 0, 1570, 300, 1, 0, 0, 0, 1571, 1572, 3, 437, 218, 0, 1572, 1573, 3, 415, 207, 0, 1573, 1574, 3, 429, 214, 0, 1574, 1575, 3, 445, 222, 0, 1575, 302, 1, 0, 0, 0, 1576, 1577, 3, 437, 218, 0, 1577, 1578, 3, 429, 214, 0, 1578, 1579, 3, 441, 220, 0, 1579, 1580, 3, 435, 217, 0, 1580, 1581, 3, 405, 202, 0, 1581, 1582, 3, 409, 204, 0, 1582, 304, 1, 0, 0, 0, 1583, 1584, 3, 437, 218, 0, 1584, 1585, 3, 439, 219, 0, 1585, 1586, 3, 401, 200, 0, 1586, 1587, 3, 435, 217, 0, 1587, 1588, 3, 439, 219, 0, 1588, 306, 1, 0, 0, 0, 1589, 1590, 3, 437, 218, 0, 1590, 1591, 3, 439, 219, 0, 1591, 1592, 3, 429, 214, 0, 1592, 1593, 3, 431, 215, 0, 1593, 308, 1, 0, 0, 0, 1594, 1595, 3, 437, 218, 0, 1595, 1596, 3, 441, 220, 0, 1596, 1597, 3, 403, 201, 0, 1597, 1598, 3, 437, 218, 0, 1598, 1599, 3, 439, 219, 0, 1599, 1600, 3, 435, 217, 0, 1600, 1601, 3, 417, 208, 0, 1601, 1602, 3, 427, 213, 0, 1602, 1603, 3, 413, 206, 0, 1603, 310, 1, 0, 0, 0, 1604, 1605, 3, 437, 218, 0, 1605, 1606, 3, 449, 224, 0, 1606, 1607, 3, 427, 213, 0, 1607, 1608, 3, 405, 202, 0, 1608, 312, 1, 0, 0, 0, 1609, 1610, 3, 437, 218, 0, 1610, 1611, 3, 449, 224, 0, 1611, 1612, 3, 427, 213, 0, 1612, 1613, 3, 439, 219, 0, 1613, 1614, 3, 401, 200, 0, 1614, 1615, 3, 447, 223, 0, 1615, 314, 1, 0, 0, 0, 1616, 1617, 3, 437, 218, 0, 1617, 1618, 3, 449, 224, 0, 1618, 1619, 3, 437, 218, 0, 1619, 1620, 3, 439, 219, 0, 1620, 1621, 3, 409, 204, 0, 1621, 1622, 3, 425, 212, 0, 1622, 316, 1, 0, 0, 0, 1623, 1624, 3, 439, 219, 0, 1624, 1625, 3, 401, 200, 0, 1625, 1626, 3, 403, 201, 0, 1626, 1627, 3, 423, 211, 0, 1627, 1628, 3, 409, 204, 0, 1628, 318, 1, 0, 0, 0, 1629, 1630, 3, 439, 219, 0, 1630, 1631, 3, 401, 200, 0, 1631, 1632, 3, 403, 201, 0, 1632, 1633, 3, 423, 211, 0, 1633, 1634, 3, 409, 204, 0, 1634, 1635, 3, 437, 218, 0, 1635, 320, 1, 0, 0, 0, 1636, 1637, 3, 439, 219, 0, 1637, 1638, 3, 409, 204, 0, 1638, 1639, 3, 425, 212, 0, 1639, 1640, 3, 431, 215, 0, 1640, 1641, 3, 429, 214, 0, 1641, 1642, 3, 435, 217, 0, 1642, 1643, 3, 401, 200, 0, 1643, 1644, 3, 435, 217, 0, 1644, 1645, 3, 449, 224, 0, 1645, 322, 1, 0, 0, 0, 1646, 1647, 3, 439, 219, 0, 1647, 1648, 3, 409, 204, 0, 1648, 1649, 3, 437, 218, 0, 1649, 1650, 3, 439, 219, 0, 1650, 324, 1, 0, 0, 0, 1651, 1652, 3, 439, 219, 0, 1652, 1653, 3, 415, 207, 0, 1653, 1654, 3, 409, 204, 0, 1654, 1655, 3, 427, 213, 0, 1655, 326, 1, 0, 0, 0, 1656, 1657, 3, 439, 219, 0, 1657, 1658, 3, 417, 208, 0, 1658, 1659, 3, 409, 204, 0, 1659, 1660, 3, 437, 218, 0, 1660, 328, 1, 0, 0, 0, 1661, 1662, 3, 439, 219, 0, 1662, 1663, 3, 417, 208, 0, 1663, 1664, 3, 425, 212, 0, 1664, 1665, 3, 409, 204, 0, 1665, 1666, 3, 429, 214, 0, 1666, 1667, 3, 441, 220, 0, 1667, 1668, 3, 439, 219, 0, 1668, 330, 1, 0, 0, 0, 1669, 1670, 3, 439, 219, 0, 1670, 1671, 3, 417, 208, 0, 1671, 1672, 3, 425, 212, 0, 1672, 1673, 3, 409, 204, 0, 1673, 1674, 3, 437, 218, 0, 1674, 1675, 3, 439, 219, 0, 1675, 1676, 3, 401, 200, 0, 1676, 1677, 3, 425, 212, 0, 1677, 1678, 3, 431, 215, 0, 1678, 332, 1, 0, 0, 0, 1679, 1680, 3, 439, 219, 0, 1680, 1681, 3, 429, 214, 0, 1681, 334, 1, 0, 0, 0, 1682, 1683, 3, 439, 219, 0, 1683, 1684, 3, 429, 214, 0, 1684, 1685, 3, 431, 215, 0, 1685, 336, 1, 0, 0, 0, 1686, 1687, 3, 439, 219, 0, 1687, 1688, 3, 429, 214, 0, 1688, 1689, 3, 439, 219, 0, 1689, 1690, 3, 401, 200, 0, 1690, 1691, 3, 423, 211, 0, 1691, 1692, 3, 437, 218, 0, 1692, 338, 1, 0, 0, 0, 1693, 1694, 3, 439, 219, 0, 1694, 1695, 3, 435, 217, 0, 1695, 1696, 3, 401, 200, 0, 1696, 1697, 3, 417, 208, 0, 1697, 1698, 3, 423, 211, 0, 1698, 1699, 3, 417, 208, 0, 1699, 1700, 3, 427, 213, 0, 1700, 1701, 3, 413, 206, 0, 1701, 340, 1, 0, 0, 0, 1702, 1703, 3, 439, 219, 0, 1703, 1704, 3, 435, 217, 0, 1704, 1705, 3, 417, 208, 0, 1705, 1706, 3, 425, 212, 0, 1706, 342, 1, 0, 0, 0, 1707, 1708, 3, 439, 219, 0, 1708, 1709, 3, 435, 217, 0, 1709, 1710, 3, 441, 220, 0, 1710, 1711, 3, 427, 213, 0, 1711, 1712, 3, 405, 202, 0, 1712, 1713, 3, 401, 200, 0, 1713, 1714, 3, 439, 219, 0, 1714, 1715, 3, 409, 204, 0, 1715, 344, 1, 0, 0, 0, 1716, 1717, 3, 439, 219, 0, 1717, 1718, 3, 439, 219, 0, 1718, 1719, 3, 423, 211, 0, 1719, 346, 1, 0, 0, 0, 1720, 1721, 3, 439, 219, 0, 1721, 1722, 3, 449, 224, 0, 1722, 1723, 3, 431, 215, 0, 1723, 1724, 3, 409, 204, 0, 1724, 348, 1, 0, 0, 0, 1725, 1726, 3, 441, 220, 0, 1726, 1727, 3, 427, 213, 0, 1727, 1728, 3, 403, 201, 0, 1728, 1729, 3, 429, 214, 0, 1729, 1730, 3, 441, 220, 0, 1730, 1731, 3, 427, 213, 0, 1731, 1732, 3, 407, 203, 0, 1732, 1733, 3, 409, 204, 0, 1733, 1734, 3, 407, 203, 0, 1734, 350, 1, 0, 0, 0, 1735, 1736, 3, 441, 220, 0, 1736, 1737, 3, 427, 213, 0, 1737, 1738, 3, 417, 208, 0, 1738, 1739, 3, 429, 214, 0, 1739, 1740, 3, 427, 213, 0, 1740, 352, 1, 0, 0, 0, 1741, 1742, 3, 441, 220, 0, 1742, 1743, 3, 431, 215, 0, 1743, 1744, 3, 407, 203, 0, 1744, 1745, 3, 401, 200, 0, 1745, 1746, 3, 439, 219, 0, 1746, 1747, 3, 409, 204, 0, 1747, 354, 1, 0, 0, 0, 1748, 1749, 3, 441, 220, 0, 1749, 1750, 3, 437, 218, 0, 1750, 1751, 3, 409, 204, 0, 1751, 356, 1, 0, 0, 0, 1752, 1753, 3, 441, 220, 0, 1753, 1754, 3, 437, 218, 0, 1754, 1755, 3, 417, 208, 0, 1755, 1756, 3, 427, 213, 0, 1756, 1757, 3, 413, 206, 0, 1757, 358, 1, 0, 0, 0, 1758, 1759, 3, 441, 220, 0, 1759, 1760, 3, 441, 220, 0, 1760, 1761, 3, 417, 208, 0, 1761, 1762, 3, 407, 203, 0, 1762, 360, 1, 0, 0, 0, 1763, 1764, 3, 443, 221, 0, 1764, 1765, 3, 401, 200, 0, 1765, 1766, 3, 423, 211, 0, 1766, 1767, 3, 441, 220, 0, 1767, 1768, 3, 409, 204, 0, 1768, 1769, 3, 437, 218, 0, 1769, 362, 1, 0, 0, 0, 1770, 1771, 3, 443, 221, 0, 1771, 1772, 3, 417, 208, 0, 1772, 1773, 3, 409, 204, 0, 1773, 1774, 3, 445, 222, 0, 1774, 364, 1, 0, 0, 0, 1775, 1776, 3, 443, 221, 0, 1776, 1777, 3, 429, 214, 0, 1777, 1778, 3, 423, 211, 0, 1778, 1779, 3, 441, 220, 0, 1779, 1780, 3, 425, 212, 0, 1780, 1781, 3, 409, 204, 0, 1781, 366, 1, 0, 0, 0, 1782, 1783, 3, 445, 222, 0, 1783, 1784, 3, 401, 200, 0, 1784, 1785, 3, 439, 219, 0, 1785, 1786, 3, 405, 202, 0, 1786, 1787, 3, 415, 207, 0, 1787, 368, 1, 0, 0, 0, 1788, 1789, 3, 445, 222, 0, 1789, 1790, 3, 409, 204, 0, 1790, 1791, 3, 409, 204, 0, 1791, 1792, 3, 421, 210, 0, 1792, 370, 1, 0, 0, 0, 1793, 1794, 3, 445, 222, 0, 1794, 1795, 3, 415, 207, 0, 1795, 1796, 3, 409, 204, 0, 1796, 1797, 3, 427, 213, 0, 1797, 372, 1, 0, 0, 0, 1798, 1799, 3, 445, 222, 0, 1799, 1800, 3, 415, 207, 0, 1800, 1801, 3, 409, 204, 0, 1801, 1802, 3, 435, 217, 0, 1802, 1803, 3, 409, 204, 0, 1803, 374, 1, 0, 0, 0, 1804, 1805, 3, 445, 222, 0, 1805, 1806, 3, 417, 208, 0, 1806, 1807, 3, 427, 213, 0, 1807, 1808, 3, 407, 203, 0, 1808, 1809, 3, 429, 214, 0, 1809, 1810, 3, 445, 222, 0, 1810, 376, 1, 0, 0, 0, 1811, 1812, 3, 445, 222, 0, 1812, 1813, 3, 417, 208, 0, 1813, 1814, 3, 439, 219, 0, 1814, 1815, 3, 415, 207, 0, 1815, 378, 1, 0, 0, 0, 1816, 1817, 3, 449, 224, 0, 1817, 1818, 3, 409, 204, 0, 1818, 1819, 3, 401, 200, 0, 1819, 1820, 3, 435, 217, 0, 1820, 1827, 1, 0, 0, 0, 1821, 1822, 3, 449, 224, 0, 1822, 1823, 3, 449, 224, 0, 1823, 1824, 3, 449, 224, 0, 1824, 1825, 3, 449, 224, 0, 1825, 1827, 1, 0, 0, 0, 1826, 1816, 1, 0, 0, 0, 1826, 1821, 1, 0, 0, 0, 1827, 380, 1, 0, 0, 0, 1828, 1829, 5, 102, 0, 0, 1829, 1830, 5, 97, 0, 0, 1830, 1831, 5, 108, 0, 0, 1831, 1832, 5, 115, 0, 0, 1832, 1833, 5, 101, 0, 0, 1833, 382, 1, 0, 0, 0, 1834, 1835, 5, 116, 0, 0, 1835, 1836, 5, 114, 0, 0, 1836, 1837, 5, 117, 0, 0, 1837, 1838, 5, 101, 0, 0, 1838, 384, 1, 0, 0, 0, 1839, 1840, 3, 467, 233, 0, 1840, 1841, 3, 403, 201, 0, 1841, 1870, 1, 0, 0, 0, 1842, 1843, 3, 467, 233, 0, 1843, 1844, 3, 411, 205, 0, 1844, 1870, 1, 0, 0, 0, 1845, 1846, 3, 467, 233, 0, 1846, 1847, 3, 435, 217, 0, 1847, 1870, 1, 0, 0, 0, 1848, 1849, 3, 467, 233, 0, 1849, 1850, 3, 427, 213, 0, 1850, 1870, 1, 0, 0, 0, 1851, 1852, 3, 467, 233, 0, 1852, 1853, 3, 439, 219, 0, 1853, 1870, 1, 0, 0, 0, 1854, 1855, 3, 467, 233, 0, 1855, 1856, 5, 48, 0, 0, 1856, 1870, 1, 0, 0, 0, 1857, 1858, 3, 467, 233, 0, 1858, 1859, 3, 401, 200, 0, 1859, 1870, 1, 0, 0, 0, 1860, 1861, 3, 467, 233, 0, 1861, 1862, 3, 443, 221, 0, 1862, 1870, 1, 0, 0, 0, 1863, 1864, 3, 467, 233, 0, 1864, 1865, 3, 467, 233, 0, 1865, 1870, 1, 0, 0, 0, 1866, 1867, 3, 467, 233, 0, 1867, 1868, 3, 521, 260, 0, 1868, 1870, 1, 0, 0, 0, 1869, 1839, 1, 0, 0, 0, 1869, 1842, 1, 0, 0, 0, 1869, 1845, 1, 0, 0, 0, 1869, 1848, 1, 0, 0, 0, 1869, 1851, 1, 0, 0, 0, 1869, 1854, 1, 0, 0, 0, 1869, 1857, 1, 0, 0, 0, 1869, 1860, 1, 0, 0, 0, 1869, 1863, 1, 0, 0, 0, 1869, 1866, 1, 0, 0, 0, 1870, 386, 1, 0, 0, 0, 1871, 1875, 3, 453, 226, 0, 1872, 1875, 3, 537, 268, 0, 1873, 1875, 3, 477, 238, 0, 1874, 1871, 1, 0, 0, 0, 1874, 1872, 1, 0, 0, 0, 1874, 1873, 1, 0, 0, 0, 1875, 1882, 1, 0, 0, 0, 1876, 1881, 3, 453, 226, 0, 1877, 1881, 3, 537, 268, 0, 1878, 1881, 3, 457, 228, 0, 1879, 1881, 3, 477, 238, 0, 1880, 1876, 1, 0, 0, 0, 1880, 1877, 1, 0, 0, 0, 1880, 1878, 1, 0, 0, 0, 1880, 1879, 1, 0, 0, 0, 1881, 1884, 1, 0, 0, 0, 1882, 1880, 1, 0, 0, 0, 1882, 1883, 1, 0, 0, 0, 1883, 1912, 1, 0, 0, 0, 1884, 1882, 1, 0, 0, 0, 1885, 1893, 3, 465, 232, 0, 1886, 1892, 8, 0, 0, 0, 1887, 1892, 3, 385, 192, 0, 1888, 1889, 3, 465, 232, 0, 1889, 1890, 3, 465, 232, 0, 1890, 1892, 1, 0, 0, 0, 1891, 1886, 1, 0, 0, 0, 1891, 1887, 1, 0, 0, 0, 1891, 1888, 1, 0, 0, 0, 1892, 1895, 1, 0, 0, 0, 1893, 1891, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 1896, 1, 0, 0, 0, 1895, 1893, 1, 0, 0, 0, 1896, 1897, 3, 465, 232, 0, 1897, 1912, 1, 0, 0, 0, 1898, 1906, 3, 519, 259, 0, 1899, 1905, 8, 1, 0, 0, 1900, 1905, 3, 385, 192, 0, 1901, 1902, 3, 519, 259, 0, 1902, 1903, 3, 519, 259, 0, 1903, 1905, 1, 0, 0, 0, 1904, 1899, 1, 0, 0, 0, 1904, 1900, 1, 0, 0, 0, 1904, 1901, 1, 0, 0, 0, 1905, 1908, 1, 0, 0, 0, 1906, 1904, 1, 0, 0, 0, 1906, 1907, 1, 0, 0, 0, 1907, 1909, 1, 0, 0, 0, 1908, 1906, 1, 0, 0, 0, 1909, 1910, 3, 519, 259, 0, 1910, 1912, 1, 0, 0, 0, 1911, 1874, 1, 0, 0, 0, 1911, 1885, 1, 0, 0, 0, 1911, 1898, 1, 0, 0, 0, 1912, 388, 1, 0, 0, 0, 1913, 1914, 3, 395, 197, 0, 1914, 1918, 3, 479, 239, 0, 1915, 1917, 3, 459, 229, 0, 1916, 1915, 1, 0, 0, 0, 1917, 1920, 1, 0, 0, 0, 1918, 1916, 1, 0, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1923, 1, 0, 0, 0, 1920, 1918, 1, 0, 0, 0, 1921, 1924, 3, 431, 215, 0, 1922, 1924, 3, 409, 204, 0, 1923, 1921, 1, 0, 0, 0, 1923, 1922, 1, 0, 0, 0, 1924, 1927, 1, 0, 0, 0, 1925, 1928, 3, 515, 257, 0, 1926, 1928, 3, 475, 237, 0, 1927, 1925, 1, 0, 0, 0, 1927, 1926, 1, 0, 0, 0, 1927, 1928, 1, 0, 0, 0, 1928, 1930, 1, 0, 0, 0, 1929, 1931, 3, 457, 228, 0, 1930, 1929, 1, 0, 0, 0, 1931, 1932, 1, 0, 0, 0, 1932, 1930, 1, 0, 0, 0, 1932, 1933, 1, 0, 0, 0, 1933, 1990, 1, 0, 0, 0, 1934, 1937, 3, 395, 197, 0, 1935, 1938, 3, 431, 215, 0, 1936, 1938, 3, 409, 204, 0, 1937, 1935, 1, 0, 0, 0, 1937, 1936, 1, 0, 0, 0, 1938, 1941, 1, 0, 0, 0, 1939, 1942, 3, 515, 257, 0, 1940, 1942, 3, 475, 237, 0, 1941, 1939, 1, 0, 0, 0, 1941, 1940, 1, 0, 0, 0, 1941, 1942, 1, 0, 0, 0, 1942, 1944, 1, 0, 0, 0, 1943, 1945, 3, 457, 228, 0, 1944, 1943, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1944, 1, 0, 0, 0, 1946, 1947, 1, 0, 0, 0, 1947, 1990, 1, 0, 0, 0, 1948, 1949, 3, 393, 196, 0, 1949, 1953, 3, 479, 239, 0, 1950, 1952, 3, 457, 228, 0, 1951, 1950, 1, 0, 0, 0, 1952, 1955, 1, 0, 0, 0, 1953, 1951, 1, 0, 0, 0, 1953, 1954, 1, 0, 0, 0, 1954, 1956, 1, 0, 0, 0, 1955, 1953, 1, 0, 0, 0, 1956, 1959, 3, 409, 204, 0, 1957, 1960, 3, 515, 257, 0, 1958, 1960, 3, 475, 237, 0, 1959, 1957, 1, 0, 0, 0, 1959, 1958, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1962, 1, 0, 0, 0, 1961, 1963, 3, 457, 228, 0, 1962, 1961, 1, 0, 0, 0, 1963, 1964, 1, 0, 0, 0, 1964, 1962, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1990, 1, 0, 0, 0, 1966, 1967, 3, 479, 239, 0, 1967, 1968, 3, 393, 196, 0, 1968, 1971, 3, 409, 204, 0, 1969, 1972, 3, 515, 257, 0, 1970, 1972, 3, 475, 237, 0, 1971, 1969, 1, 0, 0, 0, 1971, 1970, 1, 0, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1974, 1, 0, 0, 0, 1973, 1975, 3, 457, 228, 0, 1974, 1973, 1, 0, 0, 0, 1975, 1976, 1, 0, 0, 0, 1976, 1974, 1, 0, 0, 0, 1976, 1977, 1, 0, 0, 0, 1977, 1990, 1, 0, 0, 0, 1978, 1979, 3, 393, 196, 0, 1979, 1982, 3, 409, 204, 0, 1980, 1983, 3, 515, 257, 0, 1981, 1983, 3, 475, 237, 0, 1982, 1980, 1, 0, 0, 0, 1982, 1981, 1, 0, 0, 0, 1982, 1983, 1, 0, 0, 0, 1983, 1985, 1, 0, 0, 0, 1984, 1986, 3, 457, 228, 0, 1985, 1984, 1, 0, 0, 0, 1986, 1987, 1, 0, 0, 0, 1987, 1985, 1, 0, 0, 0, 1987, 1988, 1, 0, 0, 0, 1988, 1990, 1, 0, 0, 0, 1989, 1913, 1, 0, 0, 0, 1989, 1934, 1, 0, 0, 0, 1989, 1948, 1, 0, 0, 0, 1989, 1966, 1, 0, 0, 0, 1989, 1978, 1, 0, 0, 0, 1990, 390, 1, 0, 0, 0, 1991, 1993, 5, 48, 0, 0, 1992, 1994, 3, 455, 227, 0, 1993, 1992, 1, 0, 0, 0, 1994, 1995, 1, 0, 0, 0, 1995, 1993, 1, 0, 0, 0, 1995, 1996, 1, 0, 0, 0, 1996, 392, 1, 0, 0, 0, 1997, 1999, 3, 457, 228, 0, 1998, 1997, 1, 0, 0, 0, 1999, 2000, 1, 0, 0, 0, 2000, 1998, 1, 0, 0, 0, 2000, 2001, 1, 0, 0, 0, 2001, 394, 1, 0, 0, 0, 2002, 2003, 5, 48, 0, 0, 2003, 2005, 3, 447, 223, 0, 2004, 2006, 3, 459, 229, 0, 2005, 2004, 1, 0, 0, 0, 2006, 2007, 1, 0, 0, 0, 2007, 2005, 1, 0, 0, 0, 2007, 2008, 1, 0, 0, 0, 2008, 396, 1, 0, 0, 0, 2009, 2017, 3, 521, 260, 0, 2010, 2016, 8, 2, 0, 0, 2011, 2016, 3, 385, 192, 0, 2012, 2013, 3, 521, 260, 0, 2013, 2014, 3, 521, 260, 0, 2014, 2016, 1, 0, 0, 0, 2015, 2010, 1, 0, 0, 0, 2015, 2011, 1, 0, 0, 0, 2015, 2012, 1, 0, 0, 0, 2016, 2019, 1, 0, 0, 0, 2017, 2015, 1, 0, 0, 0, 2017, 2018, 1, 0, 0, 0, 2018, 2020, 1, 0, 0, 0, 2019, 2017, 1, 0, 0, 0, 2020, 2021, 3, 521, 260, 0, 2021, 398, 1, 0, 0, 0, 2022, 2030, 3, 495, 247, 0, 2023, 2029, 8, 3, 0, 0, 2024, 2029, 3, 385, 192, 0, 2025, 2026, 3, 495, 247, 0, 2026, 2027, 3, 495, 247, 0, 2027, 2029, 1, 0, 0, 0, 2028, 2023, 1, 0, 0, 0, 2028, 2024, 1, 0, 0, 0, 2028, 2025, 1, 0, 0, 0, 2029, 2032, 1, 0, 0, 0, 2030, 2028, 1, 0, 0, 0, 2030, 2031, 1, 0, 0, 0, 2031, 2033, 1, 0, 0, 0, 2032, 2030, 1, 0, 0, 0, 2033, 2034, 3, 527, 263, 0, 2034, 400, 1, 0, 0, 0, 2035, 2036, 7, 4, 0, 0, 2036, 402, 1, 0, 0, 0, 2037, 2038, 7, 5, 0, 0, 2038, 404, 1, 0, 0, 0, 2039, 2040, 7, 6, 0, 0, 2040, 406, 1, 0, 0, 0, 2041, 2042, 7, 7, 0, 0, 2042, 408, 1, 0, 0, 0, 2043, 2044, 7, 8, 0, 0, 2044, 410, 1, 0, 0, 0, 2045, 2046, 7, 9, 0, 0, 2046, 412, 1, 0, 0, 0, 2047, 2048, 7, 10, 0, 0, 2048, 414, 1, 0, 0, 0, 2049, 2050, 7, 11, 0, 0, 2050, 416, 1, 0, 0, 0, 2051, 2052, 7, 12, 0, 0, 2052, 418, 1, 0, 0, 0, 2053, 2054, 7, 13, 0, 0, 2054, 420, 1, 0, 0, 0, 2055, 2056, 7, 14, 0, 0, 2056, 422, 1, 0, 0, 0, 2057, 2058, 7, 15, 0, 0, 2058, 424, 1, 0, 0, 0, 2059, 2060, 7, 16, 0, 0, 2060, 426, 1, 0, 0, 0, 2061, 2062, 7, 17, 0, 0, 2062, 428, 1, 0, 0, 0, 2063, 2064, 7, 18, 0, 0, 2064, 430, 1, 0, 0, 0, 2065, 2066, 7, 19, 0, 0, 2066, 432, 1, 0, 0, 0, 2067, 2068, 7, 20, 0, 0, 2068, 434, 1, 0, 0, 0, 2069, 2070, 7, 21, 0, 0, 2070, 436, 1, 0, 0, 0, 2071, 2072, 7, 22, 0, 0, 2072, 438, 1, 0, 0, 0, 2073, 2074, 7, 23, 0, 0, 2074, 440, 1, 0, 0, 0, 2075, 2076, 7, 24, 0, 0, 2076, 442, 1, 0, 0, 0, 2077, 2078, 7, 25, 0, 0, 2078, 444, 1, 0, 0, 0, 2079, 2080, 7, 26, 0, 0, 2080, 446, 1, 0, 0, 0, 2081, 2082, 7, 27, 0, 0, 2082, 448, 1, 0, 0, 0, 2083, 2084, 7, 28, 0, 0, 2084, 450, 1, 0, 0, 0, 2085, 2086, 7, 29, 0, 0, 2086, 452, 1, 0, 0, 0, 2087, 2088, 7, 30, 0, 0, 2088, 454, 1, 0, 0, 0, 2089, 2090, 7, 31, 0, 0, 2090, 456, 1, 0, 0, 0, 2091, 2092, 7, 32, 0, 0, 2092, 458, 1, 0, 0, 0, 2093, 2094, 7, 33, 0, 0, 2094, 460, 1, 0, 0, 0, 2095, 2096, 5, 45, 0, 0, 2096, 2097, 5, 62, 0, 0, 2097, 462, 1, 0, 0, 0, 2098, 2099, 5, 42, 0, 0, 2099, 464, 1, 0, 0, 0, 2100, 2101, 5, 96, 0, 0, 2101, 466, 1, 0, 0, 0, 2102, 2103, 5, 92, 0, 0, 2103, 468, 1, 0, 0, 0, 2104, 2105, 5, 58, 0, 0, 2105, 470, 1, 0, 0, 0, 2106, 2107, 5, 44, 0, 0, 2107, 472, 1, 0, 0, 0, 2108, 2109, 5, 124, 0, 0, 2109, 2110, 5, 124, 0, 0, 2110, 474, 1, 0, 0, 0, 2111, 2112, 5, 45, 0, 0, 2112, 476, 1, 0, 0, 0, 2113, 2114, 5, 36, 0, 0, 2114, 478, 1, 0, 0, 0, 2115, 2116, 5, 46, 0, 0, 2116, 480, 1, 0, 0, 0, 2117, 2118, 5, 61, 0, 0, 2118, 2119, 5, 61, 0, 0, 2119, 482, 1, 0, 0, 0, 2120, 2121, 5, 61, 0, 0, 2121, 484, 1, 0, 0, 0, 2122, 2123, 5, 62, 0, 0, 2123, 2124, 5, 61, 0, 0, 2124, 486, 1, 0, 0, 0, 2125, 2126, 5, 62, 0, 0, 2126, 488, 1, 0, 0, 0, 2127, 2128, 5, 35, 0, 0, 2128, 490, 1, 0, 0, 0, 2129, 2130, 5, 126, 0, 0, 2130, 2131, 5, 42, 0, 0, 2131, 492, 1, 0, 0, 0, 2132, 2133, 5, 61, 0, 0, 2133, 2134, 5, 126, 0, 0, 2134, 2135, 5, 42, 0, 0, 2135, 494, 1, 0, 0, 0, 2136, 2137, 5, 123, 0, 0, 2137, 496, 1, 0, 0, 0, 2138, 2139, 5, 91, 0, 0, 2139, 498, 1, 0, 0, 0, 2140, 2141, 5, 40, 0, 0, 2141, 500, 1, 0, 0, 0, 2142, 2143, 5, 60, 0, 0, 2143, 2144, 5, 61, 0, 0, 2144, 502, 1, 0, 0, 0, 2145, 2146, 5, 60, 0, 0, 2146, 504, 1, 0, 0, 0, 2147, 2148, 5, 33, 0, 0, 2148, 2152, 5, 61, 0, 0, 2149, 2150, 5, 60, 0, 0, 2150, 2152, 5, 62, 0, 0, 2151, 2147, 1, 0, 0, 0, 2151, 2149, 1, 0, 0, 0, 2152, 506, 1, 0, 0, 0, 2153, 2154, 5, 33, 0, 0, 2154, 2155, 5, 126, 0, 0, 2155, 2156, 5, 42, 0, 0, 2156, 508, 1, 0, 0, 0, 2157, 2158, 5, 33, 0, 0, 2158, 2159, 5, 126, 0, 0, 2159, 510, 1, 0, 0, 0, 2160, 2161, 5, 63, 0, 0, 2161, 2162, 5, 63, 0, 0, 2162, 512, 1, 0, 0, 0, 2163, 2164, 5, 37, 0, 0, 2164, 514, 1, 0, 0, 0, 2165, 2166, 5, 43, 0, 0, 2166, 516, 1, 0, 0, 0, 2167, 2168, 5, 63, 0, 0, 2168, 518, 1, 0, 0, 0, 2169, 2170, 5, 34, 0, 0, 2170, 520, 1, 0, 0, 0, 2171, 2172, 5, 39, 0, 0, 2172, 522, 1, 0, 0, 0, 2173, 2174, 5, 126, 0, 0, 2174, 524, 1, 0, 0, 0, 2175, 2176, 5, 61, 0, 0, 2176, 2177, 5, 126, 0, 0, 2177, 526, 1, 0, 0, 0, 2178, 2179, 5, 125, 0, 0, 2179, 528, 1, 0, 0, 0, 2180, 2181, 5, 93, 0, 0, 2181, 530, 1, 0, 0, 0, 2182, 2183, 5, 41, 0, 0, 2183, 532, 1, 0, 0, 0, 2184, 2185, 5, 59, 0, 0, 2185, 534, 1, 0, 0, 0, 2186, 2187, 5, 47, 0, 0, 2187, 536, 1, 0, 0, 0, 2188, 2189, 5, 95, 0, 0, 2189, 538, 1, 0, 0, 0, 2190, 2191, 5, 47, 0, 0, 2191, 2192, 5, 42, 0, 0, 2192, 2196, 1, 0, 0, 0, 2193, 2195, 9, 0, 0, 0, 2194, 2193, 1, 0, 0, 0, 2195, 2198, 1, 0, 0, 0, 2196, 2197, 1, 0, 0, 0, 2196, 2194, 1, 0, 0, 0, 2197, 2199, 1, 0, 0, 0, 2198, 2196, 1, 0, 0, 0, 2199, 2200, 5, 42, 0, 0, 2200, 2201, 5, 47, 0, 0, 2201, 2202, 1, 0, 0, 0, 2202, 2203, 6, 269, 0, 0, 2203, 540, 1, 0, 0, 0, 2204, 2205, 5, 45, 0, 0, 2205, 2206, 5, 45, 0, 0, 2206, 2210, 1, 0, 0, 0, 2207, 2209, 8, 34, 0, 0, 2208, 2207, 1, 0, 0, 0, 2209, 2212, 1, 0, 0, 0, 2210, 2208, 1, 0, 0, 0, 2210, 2211, 1, 0, 0, 0, 2211, 2214, 1, 0, 0, 0, 2212, 2210, 1, 0, 0, 0, 2213, 2215, 7, 35, 0, 0, 2214, 2213, 1, 0, 0, 0, 2215, 2216, 1, 0, 0, 0, 2216, 2217, 6, 270, 0, 0, 2217, 542, 1, 0, 0, 0, 2218, 2219, 7, 36, 0, 0, 2219, 2220, 1, 0, 0, 0, 2220, 2221, 6, 271, 1, 0, 2221, 544, 1, 0, 0, 0, 39, 0, 607, 1112, 1826, 1869, 1874, 1880, 1882, 1891, 1893, 1904, 1906, 1911, 1918, 1923, 1927, 1932, 1937, 1941, 1946, 1953, 1959, 1964, 1971, 1976, 1982, 1987, 1989, 1995, 2000, 2007, 2015, 2017, 2028, 2030, 2151, 2196, 2210, 2214, 2, 6, 0, 0, 0, 1, 0] \ No newline at end of file +[4, 0, 242, 2241, 6, -1, 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, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 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, 3, 10, 608, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 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, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 1113, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 1827, 8, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 3, 192, 1870, 8, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 3, 193, 1902, 8, 193, 1, 194, 1, 194, 1, 194, 3, 194, 1907, 8, 194, 1, 194, 1, 194, 1, 194, 1, 194, 5, 194, 1913, 8, 194, 10, 194, 12, 194, 1916, 9, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 5, 194, 1924, 8, 194, 10, 194, 12, 194, 1927, 9, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 5, 194, 1937, 8, 194, 10, 194, 12, 194, 1940, 9, 194, 1, 194, 1, 194, 3, 194, 1944, 8, 194, 1, 195, 1, 195, 1, 195, 5, 195, 1949, 8, 195, 10, 195, 12, 195, 1952, 9, 195, 1, 195, 1, 195, 3, 195, 1956, 8, 195, 1, 195, 1, 195, 3, 195, 1960, 8, 195, 1, 195, 4, 195, 1963, 8, 195, 11, 195, 12, 195, 1964, 1, 195, 1, 195, 1, 195, 3, 195, 1970, 8, 195, 1, 195, 1, 195, 3, 195, 1974, 8, 195, 1, 195, 4, 195, 1977, 8, 195, 11, 195, 12, 195, 1978, 1, 195, 1, 195, 1, 195, 5, 195, 1984, 8, 195, 10, 195, 12, 195, 1987, 9, 195, 1, 195, 1, 195, 1, 195, 3, 195, 1992, 8, 195, 1, 195, 4, 195, 1995, 8, 195, 11, 195, 12, 195, 1996, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 3, 195, 2004, 8, 195, 1, 195, 4, 195, 2007, 8, 195, 11, 195, 12, 195, 2008, 1, 195, 1, 195, 1, 195, 1, 195, 3, 195, 2015, 8, 195, 1, 195, 4, 195, 2018, 8, 195, 11, 195, 12, 195, 2019, 3, 195, 2022, 8, 195, 1, 196, 1, 196, 4, 196, 2026, 8, 196, 11, 196, 12, 196, 2027, 1, 197, 4, 197, 2031, 8, 197, 11, 197, 12, 197, 2032, 1, 198, 1, 198, 1, 198, 4, 198, 2038, 8, 198, 11, 198, 12, 198, 2039, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 5, 199, 2048, 8, 199, 10, 199, 12, 199, 2051, 9, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 201, 1, 201, 1, 202, 1, 202, 1, 203, 1, 203, 1, 204, 1, 204, 1, 205, 1, 205, 1, 206, 1, 206, 1, 207, 1, 207, 1, 208, 1, 208, 1, 209, 1, 209, 1, 210, 1, 210, 1, 211, 1, 211, 1, 212, 1, 212, 1, 213, 1, 213, 1, 214, 1, 214, 1, 215, 1, 215, 1, 216, 1, 216, 1, 217, 1, 217, 1, 218, 1, 218, 1, 219, 1, 219, 1, 220, 1, 220, 1, 221, 1, 221, 1, 222, 1, 222, 1, 223, 1, 223, 1, 224, 1, 224, 1, 225, 1, 225, 1, 226, 1, 226, 1, 227, 1, 227, 1, 228, 1, 228, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 232, 1, 232, 1, 233, 1, 233, 1, 234, 1, 234, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 238, 1, 238, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 248, 1, 248, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, 3, 252, 2171, 8, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 257, 1, 257, 1, 258, 1, 258, 1, 259, 1, 259, 1, 260, 1, 260, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 264, 1, 264, 1, 265, 1, 265, 1, 266, 1, 266, 1, 267, 1, 267, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 5, 269, 2214, 8, 269, 10, 269, 12, 269, 2217, 9, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 5, 270, 2228, 8, 270, 10, 270, 12, 270, 2231, 9, 270, 1, 270, 3, 270, 2234, 8, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 2215, 0, 272, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 0, 403, 0, 405, 0, 407, 0, 409, 0, 411, 0, 413, 0, 415, 0, 417, 0, 419, 0, 421, 0, 423, 0, 425, 0, 427, 0, 429, 0, 431, 0, 433, 0, 435, 0, 437, 0, 439, 0, 441, 0, 443, 0, 445, 0, 447, 0, 449, 0, 451, 0, 453, 0, 455, 0, 457, 0, 459, 0, 461, 201, 463, 202, 465, 203, 467, 204, 469, 205, 471, 206, 473, 207, 475, 208, 477, 209, 479, 210, 481, 211, 483, 212, 485, 213, 487, 214, 489, 215, 491, 216, 493, 217, 495, 218, 497, 219, 499, 220, 501, 221, 503, 222, 505, 223, 507, 224, 509, 225, 511, 226, 513, 227, 515, 228, 517, 229, 519, 230, 521, 231, 523, 232, 525, 233, 527, 234, 529, 235, 531, 236, 533, 237, 535, 238, 537, 239, 539, 240, 541, 241, 543, 242, 1, 0, 36, 2, 0, 92, 92, 96, 96, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 1, 0, 48, 55, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 10, 10, 13, 13, 2, 1, 10, 10, 13, 13, 2, 0, 9, 13, 32, 32, 2277, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 1, 545, 1, 0, 0, 0, 3, 549, 1, 0, 0, 0, 5, 555, 1, 0, 0, 0, 7, 561, 1, 0, 0, 0, 9, 565, 1, 0, 0, 0, 11, 571, 1, 0, 0, 0, 13, 575, 1, 0, 0, 0, 15, 580, 1, 0, 0, 0, 17, 584, 1, 0, 0, 0, 19, 590, 1, 0, 0, 0, 21, 607, 1, 0, 0, 0, 23, 609, 1, 0, 0, 0, 25, 614, 1, 0, 0, 0, 27, 618, 1, 0, 0, 0, 29, 624, 1, 0, 0, 0, 31, 631, 1, 0, 0, 0, 33, 639, 1, 0, 0, 0, 35, 644, 1, 0, 0, 0, 37, 647, 1, 0, 0, 0, 39, 652, 1, 0, 0, 0, 41, 657, 1, 0, 0, 0, 43, 663, 1, 0, 0, 0, 45, 669, 1, 0, 0, 0, 47, 677, 1, 0, 0, 0, 49, 683, 1, 0, 0, 0, 51, 690, 1, 0, 0, 0, 53, 698, 1, 0, 0, 0, 55, 705, 1, 0, 0, 0, 57, 713, 1, 0, 0, 0, 59, 724, 1, 0, 0, 0, 61, 731, 1, 0, 0, 0, 63, 737, 1, 0, 0, 0, 65, 742, 1, 0, 0, 0, 67, 750, 1, 0, 0, 0, 69, 759, 1, 0, 0, 0, 71, 769, 1, 0, 0, 0, 73, 774, 1, 0, 0, 0, 75, 778, 1, 0, 0, 0, 77, 790, 1, 0, 0, 0, 79, 798, 1, 0, 0, 0, 81, 804, 1, 0, 0, 0, 83, 811, 1, 0, 0, 0, 85, 816, 1, 0, 0, 0, 87, 827, 1, 0, 0, 0, 89, 836, 1, 0, 0, 0, 91, 843, 1, 0, 0, 0, 93, 856, 1, 0, 0, 0, 95, 867, 1, 0, 0, 0, 97, 872, 1, 0, 0, 0, 99, 881, 1, 0, 0, 0, 101, 893, 1, 0, 0, 0, 103, 898, 1, 0, 0, 0, 105, 903, 1, 0, 0, 0, 107, 907, 1, 0, 0, 0, 109, 914, 1, 0, 0, 0, 111, 921, 1, 0, 0, 0, 113, 928, 1, 0, 0, 0, 115, 936, 1, 0, 0, 0, 117, 947, 1, 0, 0, 0, 119, 955, 1, 0, 0, 0, 121, 963, 1, 0, 0, 0, 123, 969, 1, 0, 0, 0, 125, 975, 1, 0, 0, 0, 127, 981, 1, 0, 0, 0, 129, 991, 1, 0, 0, 0, 131, 995, 1, 0, 0, 0, 133, 1002, 1, 0, 0, 0, 135, 1009, 1, 0, 0, 0, 137, 1014, 1, 0, 0, 0, 139, 1019, 1, 0, 0, 0, 141, 1028, 1, 0, 0, 0, 143, 1035, 1, 0, 0, 0, 145, 1047, 1, 0, 0, 0, 147, 1053, 1, 0, 0, 0, 149, 1060, 1, 0, 0, 0, 151, 1073, 1, 0, 0, 0, 153, 1078, 1, 0, 0, 0, 155, 1081, 1, 0, 0, 0, 157, 1084, 1, 0, 0, 0, 159, 1090, 1, 0, 0, 0, 161, 1093, 1, 0, 0, 0, 163, 1112, 1, 0, 0, 0, 165, 1114, 1, 0, 0, 0, 167, 1124, 1, 0, 0, 0, 169, 1130, 1, 0, 0, 0, 171, 1137, 1, 0, 0, 0, 173, 1146, 1, 0, 0, 0, 175, 1151, 1, 0, 0, 0, 177, 1154, 1, 0, 0, 0, 179, 1167, 1, 0, 0, 0, 181, 1172, 1, 0, 0, 0, 183, 1176, 1, 0, 0, 0, 185, 1181, 1, 0, 0, 0, 187, 1186, 1, 0, 0, 0, 189, 1193, 1, 0, 0, 0, 191, 1201, 1, 0, 0, 0, 193, 1206, 1, 0, 0, 0, 195, 1215, 1, 0, 0, 0, 197, 1220, 1, 0, 0, 0, 199, 1226, 1, 0, 0, 0, 201, 1231, 1, 0, 0, 0, 203, 1237, 1, 0, 0, 0, 205, 1242, 1, 0, 0, 0, 207, 1254, 1, 0, 0, 0, 209, 1267, 1, 0, 0, 0, 211, 1271, 1, 0, 0, 0, 213, 1278, 1, 0, 0, 0, 215, 1282, 1, 0, 0, 0, 217, 1289, 1, 0, 0, 0, 219, 1296, 1, 0, 0, 0, 221, 1302, 1, 0, 0, 0, 223, 1307, 1, 0, 0, 0, 225, 1316, 1, 0, 0, 0, 227, 1320, 1, 0, 0, 0, 229, 1323, 1, 0, 0, 0, 231, 1327, 1, 0, 0, 0, 233, 1332, 1, 0, 0, 0, 235, 1338, 1, 0, 0, 0, 237, 1345, 1, 0, 0, 0, 239, 1348, 1, 0, 0, 0, 241, 1357, 1, 0, 0, 0, 243, 1360, 1, 0, 0, 0, 245, 1366, 1, 0, 0, 0, 247, 1372, 1, 0, 0, 0, 249, 1380, 1, 0, 0, 0, 251, 1385, 1, 0, 0, 0, 253, 1395, 1, 0, 0, 0, 255, 1404, 1, 0, 0, 0, 257, 1414, 1, 0, 0, 0, 259, 1423, 1, 0, 0, 0, 261, 1431, 1, 0, 0, 0, 263, 1442, 1, 0, 0, 0, 265, 1450, 1, 0, 0, 0, 267, 1456, 1, 0, 0, 0, 269, 1463, 1, 0, 0, 0, 271, 1470, 1, 0, 0, 0, 273, 1477, 1, 0, 0, 0, 275, 1485, 1, 0, 0, 0, 277, 1493, 1, 0, 0, 0, 279, 1504, 1, 0, 0, 0, 281, 1510, 1, 0, 0, 0, 283, 1517, 1, 0, 0, 0, 285, 1521, 1, 0, 0, 0, 287, 1526, 1, 0, 0, 0, 289, 1533, 1, 0, 0, 0, 291, 1540, 1, 0, 0, 0, 293, 1547, 1, 0, 0, 0, 295, 1552, 1, 0, 0, 0, 297, 1558, 1, 0, 0, 0, 299, 1562, 1, 0, 0, 0, 301, 1571, 1, 0, 0, 0, 303, 1576, 1, 0, 0, 0, 305, 1583, 1, 0, 0, 0, 307, 1589, 1, 0, 0, 0, 309, 1594, 1, 0, 0, 0, 311, 1604, 1, 0, 0, 0, 313, 1609, 1, 0, 0, 0, 315, 1616, 1, 0, 0, 0, 317, 1623, 1, 0, 0, 0, 319, 1629, 1, 0, 0, 0, 321, 1636, 1, 0, 0, 0, 323, 1646, 1, 0, 0, 0, 325, 1651, 1, 0, 0, 0, 327, 1656, 1, 0, 0, 0, 329, 1661, 1, 0, 0, 0, 331, 1669, 1, 0, 0, 0, 333, 1679, 1, 0, 0, 0, 335, 1682, 1, 0, 0, 0, 337, 1686, 1, 0, 0, 0, 339, 1693, 1, 0, 0, 0, 341, 1702, 1, 0, 0, 0, 343, 1707, 1, 0, 0, 0, 345, 1716, 1, 0, 0, 0, 347, 1720, 1, 0, 0, 0, 349, 1725, 1, 0, 0, 0, 351, 1735, 1, 0, 0, 0, 353, 1741, 1, 0, 0, 0, 355, 1748, 1, 0, 0, 0, 357, 1752, 1, 0, 0, 0, 359, 1758, 1, 0, 0, 0, 361, 1763, 1, 0, 0, 0, 363, 1770, 1, 0, 0, 0, 365, 1775, 1, 0, 0, 0, 367, 1782, 1, 0, 0, 0, 369, 1788, 1, 0, 0, 0, 371, 1793, 1, 0, 0, 0, 373, 1798, 1, 0, 0, 0, 375, 1804, 1, 0, 0, 0, 377, 1811, 1, 0, 0, 0, 379, 1826, 1, 0, 0, 0, 381, 1828, 1, 0, 0, 0, 383, 1834, 1, 0, 0, 0, 385, 1869, 1, 0, 0, 0, 387, 1901, 1, 0, 0, 0, 389, 1943, 1, 0, 0, 0, 391, 2021, 1, 0, 0, 0, 393, 2023, 1, 0, 0, 0, 395, 2030, 1, 0, 0, 0, 397, 2034, 1, 0, 0, 0, 399, 2041, 1, 0, 0, 0, 401, 2054, 1, 0, 0, 0, 403, 2056, 1, 0, 0, 0, 405, 2058, 1, 0, 0, 0, 407, 2060, 1, 0, 0, 0, 409, 2062, 1, 0, 0, 0, 411, 2064, 1, 0, 0, 0, 413, 2066, 1, 0, 0, 0, 415, 2068, 1, 0, 0, 0, 417, 2070, 1, 0, 0, 0, 419, 2072, 1, 0, 0, 0, 421, 2074, 1, 0, 0, 0, 423, 2076, 1, 0, 0, 0, 425, 2078, 1, 0, 0, 0, 427, 2080, 1, 0, 0, 0, 429, 2082, 1, 0, 0, 0, 431, 2084, 1, 0, 0, 0, 433, 2086, 1, 0, 0, 0, 435, 2088, 1, 0, 0, 0, 437, 2090, 1, 0, 0, 0, 439, 2092, 1, 0, 0, 0, 441, 2094, 1, 0, 0, 0, 443, 2096, 1, 0, 0, 0, 445, 2098, 1, 0, 0, 0, 447, 2100, 1, 0, 0, 0, 449, 2102, 1, 0, 0, 0, 451, 2104, 1, 0, 0, 0, 453, 2106, 1, 0, 0, 0, 455, 2108, 1, 0, 0, 0, 457, 2110, 1, 0, 0, 0, 459, 2112, 1, 0, 0, 0, 461, 2114, 1, 0, 0, 0, 463, 2117, 1, 0, 0, 0, 465, 2119, 1, 0, 0, 0, 467, 2121, 1, 0, 0, 0, 469, 2123, 1, 0, 0, 0, 471, 2125, 1, 0, 0, 0, 473, 2127, 1, 0, 0, 0, 475, 2130, 1, 0, 0, 0, 477, 2132, 1, 0, 0, 0, 479, 2134, 1, 0, 0, 0, 481, 2136, 1, 0, 0, 0, 483, 2139, 1, 0, 0, 0, 485, 2141, 1, 0, 0, 0, 487, 2144, 1, 0, 0, 0, 489, 2146, 1, 0, 0, 0, 491, 2148, 1, 0, 0, 0, 493, 2151, 1, 0, 0, 0, 495, 2155, 1, 0, 0, 0, 497, 2157, 1, 0, 0, 0, 499, 2159, 1, 0, 0, 0, 501, 2161, 1, 0, 0, 0, 503, 2164, 1, 0, 0, 0, 505, 2170, 1, 0, 0, 0, 507, 2172, 1, 0, 0, 0, 509, 2176, 1, 0, 0, 0, 511, 2179, 1, 0, 0, 0, 513, 2182, 1, 0, 0, 0, 515, 2184, 1, 0, 0, 0, 517, 2186, 1, 0, 0, 0, 519, 2188, 1, 0, 0, 0, 521, 2190, 1, 0, 0, 0, 523, 2192, 1, 0, 0, 0, 525, 2194, 1, 0, 0, 0, 527, 2197, 1, 0, 0, 0, 529, 2199, 1, 0, 0, 0, 531, 2201, 1, 0, 0, 0, 533, 2203, 1, 0, 0, 0, 535, 2205, 1, 0, 0, 0, 537, 2207, 1, 0, 0, 0, 539, 2209, 1, 0, 0, 0, 541, 2223, 1, 0, 0, 0, 543, 2237, 1, 0, 0, 0, 545, 546, 3, 401, 200, 0, 546, 547, 3, 407, 203, 0, 547, 548, 3, 407, 203, 0, 548, 2, 1, 0, 0, 0, 549, 550, 3, 401, 200, 0, 550, 551, 3, 411, 205, 0, 551, 552, 3, 439, 219, 0, 552, 553, 3, 409, 204, 0, 553, 554, 3, 435, 217, 0, 554, 4, 1, 0, 0, 0, 555, 556, 3, 401, 200, 0, 556, 557, 3, 423, 211, 0, 557, 558, 3, 417, 208, 0, 558, 559, 3, 401, 200, 0, 559, 560, 3, 437, 218, 0, 560, 6, 1, 0, 0, 0, 561, 562, 3, 401, 200, 0, 562, 563, 3, 423, 211, 0, 563, 564, 3, 423, 211, 0, 564, 8, 1, 0, 0, 0, 565, 566, 3, 401, 200, 0, 566, 567, 3, 423, 211, 0, 567, 568, 3, 439, 219, 0, 568, 569, 3, 409, 204, 0, 569, 570, 3, 435, 217, 0, 570, 10, 1, 0, 0, 0, 571, 572, 3, 401, 200, 0, 572, 573, 3, 427, 213, 0, 573, 574, 3, 407, 203, 0, 574, 12, 1, 0, 0, 0, 575, 576, 3, 401, 200, 0, 576, 577, 3, 427, 213, 0, 577, 578, 3, 439, 219, 0, 578, 579, 3, 417, 208, 0, 579, 14, 1, 0, 0, 0, 580, 581, 3, 401, 200, 0, 581, 582, 3, 427, 213, 0, 582, 583, 3, 449, 224, 0, 583, 16, 1, 0, 0, 0, 584, 585, 3, 401, 200, 0, 585, 586, 3, 435, 217, 0, 586, 587, 3, 435, 217, 0, 587, 588, 3, 401, 200, 0, 588, 589, 3, 449, 224, 0, 589, 18, 1, 0, 0, 0, 590, 591, 3, 401, 200, 0, 591, 592, 3, 437, 218, 0, 592, 20, 1, 0, 0, 0, 593, 594, 3, 401, 200, 0, 594, 595, 3, 437, 218, 0, 595, 596, 3, 405, 202, 0, 596, 608, 1, 0, 0, 0, 597, 598, 3, 401, 200, 0, 598, 599, 3, 437, 218, 0, 599, 600, 3, 405, 202, 0, 600, 601, 3, 409, 204, 0, 601, 602, 3, 427, 213, 0, 602, 603, 3, 407, 203, 0, 603, 604, 3, 417, 208, 0, 604, 605, 3, 427, 213, 0, 605, 606, 3, 413, 206, 0, 606, 608, 1, 0, 0, 0, 607, 593, 1, 0, 0, 0, 607, 597, 1, 0, 0, 0, 608, 22, 1, 0, 0, 0, 609, 610, 3, 401, 200, 0, 610, 611, 3, 437, 218, 0, 611, 612, 3, 429, 214, 0, 612, 613, 3, 411, 205, 0, 613, 24, 1, 0, 0, 0, 614, 615, 3, 401, 200, 0, 615, 616, 3, 437, 218, 0, 616, 617, 3, 439, 219, 0, 617, 26, 1, 0, 0, 0, 618, 619, 3, 401, 200, 0, 619, 620, 3, 437, 218, 0, 620, 621, 3, 449, 224, 0, 621, 622, 3, 427, 213, 0, 622, 623, 3, 405, 202, 0, 623, 28, 1, 0, 0, 0, 624, 625, 3, 401, 200, 0, 625, 626, 3, 439, 219, 0, 626, 627, 3, 439, 219, 0, 627, 628, 3, 401, 200, 0, 628, 629, 3, 405, 202, 0, 629, 630, 3, 415, 207, 0, 630, 30, 1, 0, 0, 0, 631, 632, 3, 403, 201, 0, 632, 633, 3, 409, 204, 0, 633, 634, 3, 439, 219, 0, 634, 635, 3, 445, 222, 0, 635, 636, 3, 409, 204, 0, 636, 637, 3, 409, 204, 0, 637, 638, 3, 427, 213, 0, 638, 32, 1, 0, 0, 0, 639, 640, 3, 403, 201, 0, 640, 641, 3, 429, 214, 0, 641, 642, 3, 439, 219, 0, 642, 643, 3, 415, 207, 0, 643, 34, 1, 0, 0, 0, 644, 645, 3, 403, 201, 0, 645, 646, 3, 449, 224, 0, 646, 36, 1, 0, 0, 0, 647, 648, 3, 405, 202, 0, 648, 649, 3, 401, 200, 0, 649, 650, 3, 437, 218, 0, 650, 651, 3, 409, 204, 0, 651, 38, 1, 0, 0, 0, 652, 653, 3, 405, 202, 0, 653, 654, 3, 401, 200, 0, 654, 655, 3, 437, 218, 0, 655, 656, 3, 439, 219, 0, 656, 40, 1, 0, 0, 0, 657, 658, 3, 405, 202, 0, 658, 659, 3, 415, 207, 0, 659, 660, 3, 409, 204, 0, 660, 661, 3, 405, 202, 0, 661, 662, 3, 421, 210, 0, 662, 42, 1, 0, 0, 0, 663, 664, 3, 405, 202, 0, 664, 665, 3, 423, 211, 0, 665, 666, 3, 409, 204, 0, 666, 667, 3, 401, 200, 0, 667, 668, 3, 435, 217, 0, 668, 44, 1, 0, 0, 0, 669, 670, 3, 405, 202, 0, 670, 671, 3, 423, 211, 0, 671, 672, 3, 441, 220, 0, 672, 673, 3, 437, 218, 0, 673, 674, 3, 439, 219, 0, 674, 675, 3, 409, 204, 0, 675, 676, 3, 435, 217, 0, 676, 46, 1, 0, 0, 0, 677, 678, 3, 405, 202, 0, 678, 679, 3, 429, 214, 0, 679, 680, 3, 407, 203, 0, 680, 681, 3, 409, 204, 0, 681, 682, 3, 405, 202, 0, 682, 48, 1, 0, 0, 0, 683, 684, 3, 405, 202, 0, 684, 685, 3, 429, 214, 0, 685, 686, 3, 415, 207, 0, 686, 687, 3, 429, 214, 0, 687, 688, 3, 435, 217, 0, 688, 689, 3, 439, 219, 0, 689, 50, 1, 0, 0, 0, 690, 691, 3, 405, 202, 0, 691, 692, 3, 429, 214, 0, 692, 693, 3, 423, 211, 0, 693, 694, 3, 423, 211, 0, 694, 695, 3, 401, 200, 0, 695, 696, 3, 439, 219, 0, 696, 697, 3, 409, 204, 0, 697, 52, 1, 0, 0, 0, 698, 699, 3, 405, 202, 0, 699, 700, 3, 429, 214, 0, 700, 701, 3, 423, 211, 0, 701, 702, 3, 441, 220, 0, 702, 703, 3, 425, 212, 0, 703, 704, 3, 427, 213, 0, 704, 54, 1, 0, 0, 0, 705, 706, 3, 405, 202, 0, 706, 707, 3, 429, 214, 0, 707, 708, 3, 425, 212, 0, 708, 709, 3, 425, 212, 0, 709, 710, 3, 409, 204, 0, 710, 711, 3, 427, 213, 0, 711, 712, 3, 439, 219, 0, 712, 56, 1, 0, 0, 0, 713, 714, 3, 405, 202, 0, 714, 715, 3, 429, 214, 0, 715, 716, 3, 427, 213, 0, 716, 717, 3, 437, 218, 0, 717, 718, 3, 439, 219, 0, 718, 719, 3, 435, 217, 0, 719, 720, 3, 401, 200, 0, 720, 721, 3, 417, 208, 0, 721, 722, 3, 427, 213, 0, 722, 723, 3, 439, 219, 0, 723, 58, 1, 0, 0, 0, 724, 725, 3, 405, 202, 0, 725, 726, 3, 435, 217, 0, 726, 727, 3, 409, 204, 0, 727, 728, 3, 401, 200, 0, 728, 729, 3, 439, 219, 0, 729, 730, 3, 409, 204, 0, 730, 60, 1, 0, 0, 0, 731, 732, 3, 405, 202, 0, 732, 733, 3, 435, 217, 0, 733, 734, 3, 429, 214, 0, 734, 735, 3, 437, 218, 0, 735, 736, 3, 437, 218, 0, 736, 62, 1, 0, 0, 0, 737, 738, 3, 405, 202, 0, 738, 739, 3, 441, 220, 0, 739, 740, 3, 403, 201, 0, 740, 741, 3, 409, 204, 0, 741, 64, 1, 0, 0, 0, 742, 743, 3, 405, 202, 0, 743, 744, 3, 441, 220, 0, 744, 745, 3, 435, 217, 0, 745, 746, 3, 435, 217, 0, 746, 747, 3, 409, 204, 0, 747, 748, 3, 427, 213, 0, 748, 749, 3, 439, 219, 0, 749, 66, 1, 0, 0, 0, 750, 751, 3, 407, 203, 0, 751, 752, 3, 401, 200, 0, 752, 753, 3, 439, 219, 0, 753, 754, 3, 401, 200, 0, 754, 755, 3, 403, 201, 0, 755, 756, 3, 401, 200, 0, 756, 757, 3, 437, 218, 0, 757, 758, 3, 409, 204, 0, 758, 68, 1, 0, 0, 0, 759, 760, 3, 407, 203, 0, 760, 761, 3, 401, 200, 0, 761, 762, 3, 439, 219, 0, 762, 763, 3, 401, 200, 0, 763, 764, 3, 403, 201, 0, 764, 765, 3, 401, 200, 0, 765, 766, 3, 437, 218, 0, 766, 767, 3, 409, 204, 0, 767, 768, 3, 437, 218, 0, 768, 70, 1, 0, 0, 0, 769, 770, 3, 407, 203, 0, 770, 771, 3, 401, 200, 0, 771, 772, 3, 439, 219, 0, 772, 773, 3, 409, 204, 0, 773, 72, 1, 0, 0, 0, 774, 775, 3, 407, 203, 0, 775, 776, 3, 401, 200, 0, 776, 777, 3, 449, 224, 0, 777, 74, 1, 0, 0, 0, 778, 779, 3, 407, 203, 0, 779, 780, 3, 409, 204, 0, 780, 781, 3, 407, 203, 0, 781, 782, 3, 441, 220, 0, 782, 783, 3, 431, 215, 0, 783, 784, 3, 423, 211, 0, 784, 785, 3, 417, 208, 0, 785, 786, 3, 405, 202, 0, 786, 787, 3, 401, 200, 0, 787, 788, 3, 439, 219, 0, 788, 789, 3, 409, 204, 0, 789, 76, 1, 0, 0, 0, 790, 791, 3, 407, 203, 0, 791, 792, 3, 409, 204, 0, 792, 793, 3, 411, 205, 0, 793, 794, 3, 401, 200, 0, 794, 795, 3, 441, 220, 0, 795, 796, 3, 423, 211, 0, 796, 797, 3, 439, 219, 0, 797, 78, 1, 0, 0, 0, 798, 799, 3, 407, 203, 0, 799, 800, 3, 409, 204, 0, 800, 801, 3, 423, 211, 0, 801, 802, 3, 401, 200, 0, 802, 803, 3, 449, 224, 0, 803, 80, 1, 0, 0, 0, 804, 805, 3, 407, 203, 0, 805, 806, 3, 409, 204, 0, 806, 807, 3, 423, 211, 0, 807, 808, 3, 409, 204, 0, 808, 809, 3, 439, 219, 0, 809, 810, 3, 409, 204, 0, 810, 82, 1, 0, 0, 0, 811, 812, 3, 407, 203, 0, 812, 813, 3, 409, 204, 0, 813, 814, 3, 437, 218, 0, 814, 815, 3, 405, 202, 0, 815, 84, 1, 0, 0, 0, 816, 817, 3, 407, 203, 0, 817, 818, 3, 409, 204, 0, 818, 819, 3, 437, 218, 0, 819, 820, 3, 405, 202, 0, 820, 821, 3, 409, 204, 0, 821, 822, 3, 427, 213, 0, 822, 823, 3, 407, 203, 0, 823, 824, 3, 417, 208, 0, 824, 825, 3, 427, 213, 0, 825, 826, 3, 413, 206, 0, 826, 86, 1, 0, 0, 0, 827, 828, 3, 407, 203, 0, 828, 829, 3, 409, 204, 0, 829, 830, 3, 437, 218, 0, 830, 831, 3, 405, 202, 0, 831, 832, 3, 435, 217, 0, 832, 833, 3, 417, 208, 0, 833, 834, 3, 403, 201, 0, 834, 835, 3, 409, 204, 0, 835, 88, 1, 0, 0, 0, 836, 837, 3, 407, 203, 0, 837, 838, 3, 409, 204, 0, 838, 839, 3, 439, 219, 0, 839, 840, 3, 401, 200, 0, 840, 841, 3, 405, 202, 0, 841, 842, 3, 415, 207, 0, 842, 90, 1, 0, 0, 0, 843, 844, 3, 407, 203, 0, 844, 845, 3, 417, 208, 0, 845, 846, 3, 405, 202, 0, 846, 847, 3, 439, 219, 0, 847, 848, 3, 417, 208, 0, 848, 849, 3, 429, 214, 0, 849, 850, 3, 427, 213, 0, 850, 851, 3, 401, 200, 0, 851, 852, 3, 435, 217, 0, 852, 853, 3, 417, 208, 0, 853, 854, 3, 409, 204, 0, 854, 855, 3, 437, 218, 0, 855, 92, 1, 0, 0, 0, 856, 857, 3, 407, 203, 0, 857, 858, 3, 417, 208, 0, 858, 859, 3, 405, 202, 0, 859, 860, 3, 439, 219, 0, 860, 861, 3, 417, 208, 0, 861, 862, 3, 429, 214, 0, 862, 863, 3, 427, 213, 0, 863, 864, 3, 401, 200, 0, 864, 865, 3, 435, 217, 0, 865, 866, 3, 449, 224, 0, 866, 94, 1, 0, 0, 0, 867, 868, 3, 407, 203, 0, 868, 869, 3, 417, 208, 0, 869, 870, 3, 437, 218, 0, 870, 871, 3, 421, 210, 0, 871, 96, 1, 0, 0, 0, 872, 873, 3, 407, 203, 0, 873, 874, 3, 417, 208, 0, 874, 875, 3, 437, 218, 0, 875, 876, 3, 439, 219, 0, 876, 877, 3, 417, 208, 0, 877, 878, 3, 427, 213, 0, 878, 879, 3, 405, 202, 0, 879, 880, 3, 439, 219, 0, 880, 98, 1, 0, 0, 0, 881, 882, 3, 407, 203, 0, 882, 883, 3, 417, 208, 0, 883, 884, 3, 437, 218, 0, 884, 885, 3, 439, 219, 0, 885, 886, 3, 435, 217, 0, 886, 887, 3, 417, 208, 0, 887, 888, 3, 403, 201, 0, 888, 889, 3, 441, 220, 0, 889, 890, 3, 439, 219, 0, 890, 891, 3, 409, 204, 0, 891, 892, 3, 407, 203, 0, 892, 100, 1, 0, 0, 0, 893, 894, 3, 407, 203, 0, 894, 895, 3, 435, 217, 0, 895, 896, 3, 429, 214, 0, 896, 897, 3, 431, 215, 0, 897, 102, 1, 0, 0, 0, 898, 899, 3, 409, 204, 0, 899, 900, 3, 423, 211, 0, 900, 901, 3, 437, 218, 0, 901, 902, 3, 409, 204, 0, 902, 104, 1, 0, 0, 0, 903, 904, 3, 409, 204, 0, 904, 905, 3, 427, 213, 0, 905, 906, 3, 407, 203, 0, 906, 106, 1, 0, 0, 0, 907, 908, 3, 409, 204, 0, 908, 909, 3, 427, 213, 0, 909, 910, 3, 413, 206, 0, 910, 911, 3, 417, 208, 0, 911, 912, 3, 427, 213, 0, 912, 913, 3, 409, 204, 0, 913, 108, 1, 0, 0, 0, 914, 915, 3, 409, 204, 0, 915, 916, 3, 443, 221, 0, 916, 917, 3, 409, 204, 0, 917, 918, 3, 427, 213, 0, 918, 919, 3, 439, 219, 0, 919, 920, 3, 437, 218, 0, 920, 110, 1, 0, 0, 0, 921, 922, 3, 409, 204, 0, 922, 923, 3, 447, 223, 0, 923, 924, 3, 417, 208, 0, 924, 925, 3, 437, 218, 0, 925, 926, 3, 439, 219, 0, 926, 927, 3, 437, 218, 0, 927, 112, 1, 0, 0, 0, 928, 929, 3, 409, 204, 0, 929, 930, 3, 447, 223, 0, 930, 931, 3, 431, 215, 0, 931, 932, 3, 423, 211, 0, 932, 933, 3, 401, 200, 0, 933, 934, 3, 417, 208, 0, 934, 935, 3, 427, 213, 0, 935, 114, 1, 0, 0, 0, 936, 937, 3, 409, 204, 0, 937, 938, 3, 447, 223, 0, 938, 939, 3, 431, 215, 0, 939, 940, 3, 435, 217, 0, 940, 941, 3, 409, 204, 0, 941, 942, 3, 437, 218, 0, 942, 943, 3, 437, 218, 0, 943, 944, 3, 417, 208, 0, 944, 945, 3, 429, 214, 0, 945, 946, 3, 427, 213, 0, 946, 116, 1, 0, 0, 0, 947, 948, 3, 409, 204, 0, 948, 949, 3, 447, 223, 0, 949, 950, 3, 439, 219, 0, 950, 951, 3, 435, 217, 0, 951, 952, 3, 401, 200, 0, 952, 953, 3, 405, 202, 0, 953, 954, 3, 439, 219, 0, 954, 118, 1, 0, 0, 0, 955, 956, 3, 411, 205, 0, 956, 957, 3, 409, 204, 0, 957, 958, 3, 439, 219, 0, 958, 959, 3, 405, 202, 0, 959, 960, 3, 415, 207, 0, 960, 961, 3, 409, 204, 0, 961, 962, 3, 437, 218, 0, 962, 120, 1, 0, 0, 0, 963, 964, 3, 411, 205, 0, 964, 965, 3, 417, 208, 0, 965, 966, 3, 427, 213, 0, 966, 967, 3, 401, 200, 0, 967, 968, 3, 423, 211, 0, 968, 122, 1, 0, 0, 0, 969, 970, 3, 411, 205, 0, 970, 971, 3, 417, 208, 0, 971, 972, 3, 435, 217, 0, 972, 973, 3, 437, 218, 0, 973, 974, 3, 439, 219, 0, 974, 124, 1, 0, 0, 0, 975, 976, 3, 411, 205, 0, 976, 977, 3, 423, 211, 0, 977, 978, 3, 441, 220, 0, 978, 979, 3, 437, 218, 0, 979, 980, 3, 415, 207, 0, 980, 126, 1, 0, 0, 0, 981, 982, 3, 411, 205, 0, 982, 983, 3, 429, 214, 0, 983, 984, 3, 423, 211, 0, 984, 985, 3, 423, 211, 0, 985, 986, 3, 429, 214, 0, 986, 987, 3, 445, 222, 0, 987, 988, 3, 417, 208, 0, 988, 989, 3, 427, 213, 0, 989, 990, 3, 413, 206, 0, 990, 128, 1, 0, 0, 0, 991, 992, 3, 411, 205, 0, 992, 993, 3, 429, 214, 0, 993, 994, 3, 435, 217, 0, 994, 130, 1, 0, 0, 0, 995, 996, 3, 411, 205, 0, 996, 997, 3, 429, 214, 0, 997, 998, 3, 435, 217, 0, 998, 999, 3, 425, 212, 0, 999, 1000, 3, 401, 200, 0, 1000, 1001, 3, 439, 219, 0, 1001, 132, 1, 0, 0, 0, 1002, 1003, 3, 411, 205, 0, 1003, 1004, 3, 435, 217, 0, 1004, 1005, 3, 409, 204, 0, 1005, 1006, 3, 409, 204, 0, 1006, 1007, 3, 451, 225, 0, 1007, 1008, 3, 409, 204, 0, 1008, 134, 1, 0, 0, 0, 1009, 1010, 3, 411, 205, 0, 1010, 1011, 3, 435, 217, 0, 1011, 1012, 3, 429, 214, 0, 1012, 1013, 3, 425, 212, 0, 1013, 136, 1, 0, 0, 0, 1014, 1015, 3, 411, 205, 0, 1015, 1016, 3, 441, 220, 0, 1016, 1017, 3, 423, 211, 0, 1017, 1018, 3, 423, 211, 0, 1018, 138, 1, 0, 0, 0, 1019, 1020, 3, 411, 205, 0, 1020, 1021, 3, 441, 220, 0, 1021, 1022, 3, 427, 213, 0, 1022, 1023, 3, 405, 202, 0, 1023, 1024, 3, 439, 219, 0, 1024, 1025, 3, 417, 208, 0, 1025, 1026, 3, 429, 214, 0, 1026, 1027, 3, 427, 213, 0, 1027, 140, 1, 0, 0, 0, 1028, 1029, 3, 413, 206, 0, 1029, 1030, 3, 423, 211, 0, 1030, 1031, 3, 429, 214, 0, 1031, 1032, 3, 403, 201, 0, 1032, 1033, 3, 401, 200, 0, 1033, 1034, 3, 423, 211, 0, 1034, 142, 1, 0, 0, 0, 1035, 1036, 3, 413, 206, 0, 1036, 1037, 3, 435, 217, 0, 1037, 1038, 3, 401, 200, 0, 1038, 1039, 3, 427, 213, 0, 1039, 1040, 3, 441, 220, 0, 1040, 1041, 3, 423, 211, 0, 1041, 1042, 3, 401, 200, 0, 1042, 1043, 3, 435, 217, 0, 1043, 1044, 3, 417, 208, 0, 1044, 1045, 3, 439, 219, 0, 1045, 1046, 3, 449, 224, 0, 1046, 144, 1, 0, 0, 0, 1047, 1048, 3, 413, 206, 0, 1048, 1049, 3, 435, 217, 0, 1049, 1050, 3, 429, 214, 0, 1050, 1051, 3, 441, 220, 0, 1051, 1052, 3, 431, 215, 0, 1052, 146, 1, 0, 0, 0, 1053, 1054, 3, 415, 207, 0, 1054, 1055, 3, 401, 200, 0, 1055, 1056, 3, 443, 221, 0, 1056, 1057, 3, 417, 208, 0, 1057, 1058, 3, 427, 213, 0, 1058, 1059, 3, 413, 206, 0, 1059, 148, 1, 0, 0, 0, 1060, 1061, 3, 415, 207, 0, 1061, 1062, 3, 417, 208, 0, 1062, 1063, 3, 409, 204, 0, 1063, 1064, 3, 435, 217, 0, 1064, 1065, 3, 401, 200, 0, 1065, 1066, 3, 435, 217, 0, 1066, 1067, 3, 405, 202, 0, 1067, 1068, 3, 415, 207, 0, 1068, 1069, 3, 417, 208, 0, 1069, 1070, 3, 405, 202, 0, 1070, 1071, 3, 401, 200, 0, 1071, 1072, 3, 423, 211, 0, 1072, 150, 1, 0, 0, 0, 1073, 1074, 3, 415, 207, 0, 1074, 1075, 3, 429, 214, 0, 1075, 1076, 3, 441, 220, 0, 1076, 1077, 3, 435, 217, 0, 1077, 152, 1, 0, 0, 0, 1078, 1079, 3, 417, 208, 0, 1079, 1080, 3, 407, 203, 0, 1080, 154, 1, 0, 0, 0, 1081, 1082, 3, 417, 208, 0, 1082, 1083, 3, 411, 205, 0, 1083, 156, 1, 0, 0, 0, 1084, 1085, 3, 417, 208, 0, 1085, 1086, 3, 423, 211, 0, 1086, 1087, 3, 417, 208, 0, 1087, 1088, 3, 421, 210, 0, 1088, 1089, 3, 409, 204, 0, 1089, 158, 1, 0, 0, 0, 1090, 1091, 3, 417, 208, 0, 1091, 1092, 3, 427, 213, 0, 1092, 160, 1, 0, 0, 0, 1093, 1094, 3, 417, 208, 0, 1094, 1095, 3, 427, 213, 0, 1095, 1096, 3, 407, 203, 0, 1096, 1097, 3, 409, 204, 0, 1097, 1098, 3, 447, 223, 0, 1098, 162, 1, 0, 0, 0, 1099, 1100, 3, 417, 208, 0, 1100, 1101, 3, 427, 213, 0, 1101, 1102, 3, 411, 205, 0, 1102, 1113, 1, 0, 0, 0, 1103, 1104, 3, 417, 208, 0, 1104, 1105, 3, 427, 213, 0, 1105, 1106, 3, 411, 205, 0, 1106, 1107, 3, 417, 208, 0, 1107, 1108, 3, 427, 213, 0, 1108, 1109, 3, 417, 208, 0, 1109, 1110, 3, 439, 219, 0, 1110, 1111, 3, 449, 224, 0, 1111, 1113, 1, 0, 0, 0, 1112, 1099, 1, 0, 0, 0, 1112, 1103, 1, 0, 0, 0, 1113, 164, 1, 0, 0, 0, 1114, 1115, 3, 417, 208, 0, 1115, 1116, 3, 427, 213, 0, 1116, 1117, 3, 419, 209, 0, 1117, 1118, 3, 409, 204, 0, 1118, 1119, 3, 405, 202, 0, 1119, 1120, 3, 439, 219, 0, 1120, 1121, 3, 417, 208, 0, 1121, 1122, 3, 443, 221, 0, 1122, 1123, 3, 409, 204, 0, 1123, 166, 1, 0, 0, 0, 1124, 1125, 3, 417, 208, 0, 1125, 1126, 3, 427, 213, 0, 1126, 1127, 3, 427, 213, 0, 1127, 1128, 3, 409, 204, 0, 1128, 1129, 3, 435, 217, 0, 1129, 168, 1, 0, 0, 0, 1130, 1131, 3, 417, 208, 0, 1131, 1132, 3, 427, 213, 0, 1132, 1133, 3, 437, 218, 0, 1133, 1134, 3, 409, 204, 0, 1134, 1135, 3, 435, 217, 0, 1135, 1136, 3, 439, 219, 0, 1136, 170, 1, 0, 0, 0, 1137, 1138, 3, 417, 208, 0, 1138, 1139, 3, 427, 213, 0, 1139, 1140, 3, 439, 219, 0, 1140, 1141, 3, 409, 204, 0, 1141, 1142, 3, 435, 217, 0, 1142, 1143, 3, 443, 221, 0, 1143, 1144, 3, 401, 200, 0, 1144, 1145, 3, 423, 211, 0, 1145, 172, 1, 0, 0, 0, 1146, 1147, 3, 417, 208, 0, 1147, 1148, 3, 427, 213, 0, 1148, 1149, 3, 439, 219, 0, 1149, 1150, 3, 429, 214, 0, 1150, 174, 1, 0, 0, 0, 1151, 1152, 3, 417, 208, 0, 1152, 1153, 3, 437, 218, 0, 1153, 176, 1, 0, 0, 0, 1154, 1155, 3, 417, 208, 0, 1155, 1156, 3, 437, 218, 0, 1156, 1157, 3, 537, 268, 0, 1157, 1158, 3, 429, 214, 0, 1158, 1159, 3, 403, 201, 0, 1159, 1160, 3, 419, 209, 0, 1160, 1161, 3, 409, 204, 0, 1161, 1162, 3, 405, 202, 0, 1162, 1163, 3, 439, 219, 0, 1163, 1164, 3, 537, 268, 0, 1164, 1165, 3, 417, 208, 0, 1165, 1166, 3, 407, 203, 0, 1166, 178, 1, 0, 0, 0, 1167, 1168, 3, 419, 209, 0, 1168, 1169, 3, 429, 214, 0, 1169, 1170, 3, 417, 208, 0, 1170, 1171, 3, 427, 213, 0, 1171, 180, 1, 0, 0, 0, 1172, 1173, 3, 421, 210, 0, 1173, 1174, 3, 409, 204, 0, 1174, 1175, 3, 449, 224, 0, 1175, 182, 1, 0, 0, 0, 1176, 1177, 3, 421, 210, 0, 1177, 1178, 3, 417, 208, 0, 1178, 1179, 3, 423, 211, 0, 1179, 1180, 3, 423, 211, 0, 1180, 184, 1, 0, 0, 0, 1181, 1182, 3, 423, 211, 0, 1182, 1183, 3, 401, 200, 0, 1183, 1184, 3, 437, 218, 0, 1184, 1185, 3, 439, 219, 0, 1185, 186, 1, 0, 0, 0, 1186, 1187, 3, 423, 211, 0, 1187, 1188, 3, 401, 200, 0, 1188, 1189, 3, 449, 224, 0, 1189, 1190, 3, 429, 214, 0, 1190, 1191, 3, 441, 220, 0, 1191, 1192, 3, 439, 219, 0, 1192, 188, 1, 0, 0, 0, 1193, 1194, 3, 423, 211, 0, 1194, 1195, 3, 409, 204, 0, 1195, 1196, 3, 401, 200, 0, 1196, 1197, 3, 407, 203, 0, 1197, 1198, 3, 417, 208, 0, 1198, 1199, 3, 427, 213, 0, 1199, 1200, 3, 413, 206, 0, 1200, 190, 1, 0, 0, 0, 1201, 1202, 3, 423, 211, 0, 1202, 1203, 3, 409, 204, 0, 1203, 1204, 3, 411, 205, 0, 1204, 1205, 3, 439, 219, 0, 1205, 192, 1, 0, 0, 0, 1206, 1207, 3, 423, 211, 0, 1207, 1208, 3, 417, 208, 0, 1208, 1209, 3, 411, 205, 0, 1209, 1210, 3, 409, 204, 0, 1210, 1211, 3, 439, 219, 0, 1211, 1212, 3, 417, 208, 0, 1212, 1213, 3, 425, 212, 0, 1213, 1214, 3, 409, 204, 0, 1214, 194, 1, 0, 0, 0, 1215, 1216, 3, 423, 211, 0, 1216, 1217, 3, 417, 208, 0, 1217, 1218, 3, 421, 210, 0, 1218, 1219, 3, 409, 204, 0, 1219, 196, 1, 0, 0, 0, 1220, 1221, 3, 423, 211, 0, 1221, 1222, 3, 417, 208, 0, 1222, 1223, 3, 425, 212, 0, 1223, 1224, 3, 417, 208, 0, 1224, 1225, 3, 439, 219, 0, 1225, 198, 1, 0, 0, 0, 1226, 1227, 3, 423, 211, 0, 1227, 1228, 3, 417, 208, 0, 1228, 1229, 3, 443, 221, 0, 1229, 1230, 3, 409, 204, 0, 1230, 200, 1, 0, 0, 0, 1231, 1232, 3, 423, 211, 0, 1232, 1233, 3, 429, 214, 0, 1233, 1234, 3, 405, 202, 0, 1234, 1235, 3, 401, 200, 0, 1235, 1236, 3, 423, 211, 0, 1236, 202, 1, 0, 0, 0, 1237, 1238, 3, 423, 211, 0, 1238, 1239, 3, 429, 214, 0, 1239, 1240, 3, 413, 206, 0, 1240, 1241, 3, 437, 218, 0, 1241, 204, 1, 0, 0, 0, 1242, 1243, 3, 425, 212, 0, 1243, 1244, 3, 401, 200, 0, 1244, 1245, 3, 439, 219, 0, 1245, 1246, 3, 409, 204, 0, 1246, 1247, 3, 435, 217, 0, 1247, 1248, 3, 417, 208, 0, 1248, 1249, 3, 401, 200, 0, 1249, 1250, 3, 423, 211, 0, 1250, 1251, 3, 417, 208, 0, 1251, 1252, 3, 451, 225, 0, 1252, 1253, 3, 409, 204, 0, 1253, 206, 1, 0, 0, 0, 1254, 1255, 3, 425, 212, 0, 1255, 1256, 3, 401, 200, 0, 1256, 1257, 3, 439, 219, 0, 1257, 1258, 3, 409, 204, 0, 1258, 1259, 3, 435, 217, 0, 1259, 1260, 3, 417, 208, 0, 1260, 1261, 3, 401, 200, 0, 1261, 1262, 3, 423, 211, 0, 1262, 1263, 3, 417, 208, 0, 1263, 1264, 3, 451, 225, 0, 1264, 1265, 3, 409, 204, 0, 1265, 1266, 3, 407, 203, 0, 1266, 208, 1, 0, 0, 0, 1267, 1268, 3, 425, 212, 0, 1268, 1269, 3, 401, 200, 0, 1269, 1270, 3, 447, 223, 0, 1270, 210, 1, 0, 0, 0, 1271, 1272, 3, 425, 212, 0, 1272, 1273, 3, 409, 204, 0, 1273, 1274, 3, 435, 217, 0, 1274, 1275, 3, 413, 206, 0, 1275, 1276, 3, 409, 204, 0, 1276, 1277, 3, 437, 218, 0, 1277, 212, 1, 0, 0, 0, 1278, 1279, 3, 425, 212, 0, 1279, 1280, 3, 417, 208, 0, 1280, 1281, 3, 427, 213, 0, 1281, 214, 1, 0, 0, 0, 1282, 1283, 3, 425, 212, 0, 1283, 1284, 3, 417, 208, 0, 1284, 1285, 3, 427, 213, 0, 1285, 1286, 3, 441, 220, 0, 1286, 1287, 3, 439, 219, 0, 1287, 1288, 3, 409, 204, 0, 1288, 216, 1, 0, 0, 0, 1289, 1290, 3, 425, 212, 0, 1290, 1291, 3, 429, 214, 0, 1291, 1292, 3, 407, 203, 0, 1292, 1293, 3, 417, 208, 0, 1293, 1294, 3, 411, 205, 0, 1294, 1295, 3, 449, 224, 0, 1295, 218, 1, 0, 0, 0, 1296, 1297, 3, 425, 212, 0, 1297, 1298, 3, 429, 214, 0, 1298, 1299, 3, 427, 213, 0, 1299, 1300, 3, 439, 219, 0, 1300, 1301, 3, 415, 207, 0, 1301, 220, 1, 0, 0, 0, 1302, 1303, 3, 425, 212, 0, 1303, 1304, 3, 429, 214, 0, 1304, 1305, 3, 443, 221, 0, 1305, 1306, 3, 409, 204, 0, 1306, 222, 1, 0, 0, 0, 1307, 1308, 3, 425, 212, 0, 1308, 1309, 3, 441, 220, 0, 1309, 1310, 3, 439, 219, 0, 1310, 1311, 3, 401, 200, 0, 1311, 1312, 3, 439, 219, 0, 1312, 1313, 3, 417, 208, 0, 1313, 1314, 3, 429, 214, 0, 1314, 1315, 3, 427, 213, 0, 1315, 224, 1, 0, 0, 0, 1316, 1317, 3, 427, 213, 0, 1317, 1318, 3, 401, 200, 0, 1318, 1319, 3, 427, 213, 0, 1319, 226, 1, 0, 0, 0, 1320, 1321, 3, 427, 213, 0, 1321, 1322, 3, 429, 214, 0, 1322, 228, 1, 0, 0, 0, 1323, 1324, 3, 427, 213, 0, 1324, 1325, 3, 429, 214, 0, 1325, 1326, 3, 439, 219, 0, 1326, 230, 1, 0, 0, 0, 1327, 1328, 3, 427, 213, 0, 1328, 1329, 3, 441, 220, 0, 1329, 1330, 3, 423, 211, 0, 1330, 1331, 3, 423, 211, 0, 1331, 232, 1, 0, 0, 0, 1332, 1333, 3, 427, 213, 0, 1333, 1334, 3, 441, 220, 0, 1334, 1335, 3, 423, 211, 0, 1335, 1336, 3, 423, 211, 0, 1336, 1337, 3, 437, 218, 0, 1337, 234, 1, 0, 0, 0, 1338, 1339, 3, 429, 214, 0, 1339, 1340, 3, 411, 205, 0, 1340, 1341, 3, 411, 205, 0, 1341, 1342, 3, 437, 218, 0, 1342, 1343, 3, 409, 204, 0, 1343, 1344, 3, 439, 219, 0, 1344, 236, 1, 0, 0, 0, 1345, 1346, 3, 429, 214, 0, 1346, 1347, 3, 427, 213, 0, 1347, 238, 1, 0, 0, 0, 1348, 1349, 3, 429, 214, 0, 1349, 1350, 3, 431, 215, 0, 1350, 1351, 3, 439, 219, 0, 1351, 1352, 3, 417, 208, 0, 1352, 1353, 3, 425, 212, 0, 1353, 1354, 3, 417, 208, 0, 1354, 1355, 3, 451, 225, 0, 1355, 1356, 3, 409, 204, 0, 1356, 240, 1, 0, 0, 0, 1357, 1358, 3, 429, 214, 0, 1358, 1359, 3, 435, 217, 0, 1359, 242, 1, 0, 0, 0, 1360, 1361, 3, 429, 214, 0, 1361, 1362, 3, 435, 217, 0, 1362, 1363, 3, 407, 203, 0, 1363, 1364, 3, 409, 204, 0, 1364, 1365, 3, 435, 217, 0, 1365, 244, 1, 0, 0, 0, 1366, 1367, 3, 429, 214, 0, 1367, 1368, 3, 441, 220, 0, 1368, 1369, 3, 439, 219, 0, 1369, 1370, 3, 409, 204, 0, 1370, 1371, 3, 435, 217, 0, 1371, 246, 1, 0, 0, 0, 1372, 1373, 3, 429, 214, 0, 1373, 1374, 3, 441, 220, 0, 1374, 1375, 3, 439, 219, 0, 1375, 1376, 3, 411, 205, 0, 1376, 1377, 3, 417, 208, 0, 1377, 1378, 3, 423, 211, 0, 1378, 1379, 3, 409, 204, 0, 1379, 248, 1, 0, 0, 0, 1380, 1381, 3, 429, 214, 0, 1381, 1382, 3, 443, 221, 0, 1382, 1383, 3, 409, 204, 0, 1383, 1384, 3, 435, 217, 0, 1384, 250, 1, 0, 0, 0, 1385, 1386, 3, 431, 215, 0, 1386, 1387, 3, 401, 200, 0, 1387, 1388, 3, 435, 217, 0, 1388, 1389, 3, 439, 219, 0, 1389, 1390, 3, 417, 208, 0, 1390, 1391, 3, 439, 219, 0, 1391, 1392, 3, 417, 208, 0, 1392, 1393, 3, 429, 214, 0, 1393, 1394, 3, 427, 213, 0, 1394, 252, 1, 0, 0, 0, 1395, 1396, 3, 431, 215, 0, 1396, 1397, 3, 429, 214, 0, 1397, 1398, 3, 431, 215, 0, 1398, 1399, 3, 441, 220, 0, 1399, 1400, 3, 423, 211, 0, 1400, 1401, 3, 401, 200, 0, 1401, 1402, 3, 439, 219, 0, 1402, 1403, 3, 409, 204, 0, 1403, 254, 1, 0, 0, 0, 1404, 1405, 3, 431, 215, 0, 1405, 1406, 3, 435, 217, 0, 1406, 1407, 3, 409, 204, 0, 1407, 1408, 3, 405, 202, 0, 1408, 1409, 3, 409, 204, 0, 1409, 1410, 3, 407, 203, 0, 1410, 1411, 3, 417, 208, 0, 1411, 1412, 3, 427, 213, 0, 1412, 1413, 3, 413, 206, 0, 1413, 256, 1, 0, 0, 0, 1414, 1415, 3, 431, 215, 0, 1415, 1416, 3, 435, 217, 0, 1416, 1417, 3, 409, 204, 0, 1417, 1418, 3, 445, 222, 0, 1418, 1419, 3, 415, 207, 0, 1419, 1420, 3, 409, 204, 0, 1420, 1421, 3, 435, 217, 0, 1421, 1422, 3, 409, 204, 0, 1422, 258, 1, 0, 0, 0, 1423, 1424, 3, 431, 215, 0, 1424, 1425, 3, 435, 217, 0, 1425, 1426, 3, 417, 208, 0, 1426, 1427, 3, 425, 212, 0, 1427, 1428, 3, 401, 200, 0, 1428, 1429, 3, 435, 217, 0, 1429, 1430, 3, 449, 224, 0, 1430, 260, 1, 0, 0, 0, 1431, 1432, 3, 431, 215, 0, 1432, 1433, 3, 435, 217, 0, 1433, 1434, 3, 429, 214, 0, 1434, 1435, 3, 419, 209, 0, 1435, 1436, 3, 409, 204, 0, 1436, 1437, 3, 405, 202, 0, 1437, 1438, 3, 439, 219, 0, 1438, 1439, 3, 417, 208, 0, 1439, 1440, 3, 429, 214, 0, 1440, 1441, 3, 427, 213, 0, 1441, 262, 1, 0, 0, 0, 1442, 1443, 3, 433, 216, 0, 1443, 1444, 3, 441, 220, 0, 1444, 1445, 3, 401, 200, 0, 1445, 1446, 3, 435, 217, 0, 1446, 1447, 3, 439, 219, 0, 1447, 1448, 3, 409, 204, 0, 1448, 1449, 3, 435, 217, 0, 1449, 264, 1, 0, 0, 0, 1450, 1451, 3, 435, 217, 0, 1451, 1452, 3, 401, 200, 0, 1452, 1453, 3, 427, 213, 0, 1453, 1454, 3, 413, 206, 0, 1454, 1455, 3, 409, 204, 0, 1455, 266, 1, 0, 0, 0, 1456, 1457, 3, 435, 217, 0, 1457, 1458, 3, 409, 204, 0, 1458, 1459, 3, 423, 211, 0, 1459, 1460, 3, 429, 214, 0, 1460, 1461, 3, 401, 200, 0, 1461, 1462, 3, 407, 203, 0, 1462, 268, 1, 0, 0, 0, 1463, 1464, 3, 435, 217, 0, 1464, 1465, 3, 409, 204, 0, 1465, 1466, 3, 425, 212, 0, 1466, 1467, 3, 429, 214, 0, 1467, 1468, 3, 443, 221, 0, 1468, 1469, 3, 409, 204, 0, 1469, 270, 1, 0, 0, 0, 1470, 1471, 3, 435, 217, 0, 1471, 1472, 3, 409, 204, 0, 1472, 1473, 3, 427, 213, 0, 1473, 1474, 3, 401, 200, 0, 1474, 1475, 3, 425, 212, 0, 1475, 1476, 3, 409, 204, 0, 1476, 272, 1, 0, 0, 0, 1477, 1478, 3, 435, 217, 0, 1478, 1479, 3, 409, 204, 0, 1479, 1480, 3, 431, 215, 0, 1480, 1481, 3, 423, 211, 0, 1481, 1482, 3, 401, 200, 0, 1482, 1483, 3, 405, 202, 0, 1483, 1484, 3, 409, 204, 0, 1484, 274, 1, 0, 0, 0, 1485, 1486, 3, 435, 217, 0, 1486, 1487, 3, 409, 204, 0, 1487, 1488, 3, 431, 215, 0, 1488, 1489, 3, 423, 211, 0, 1489, 1490, 3, 417, 208, 0, 1490, 1491, 3, 405, 202, 0, 1491, 1492, 3, 401, 200, 0, 1492, 276, 1, 0, 0, 0, 1493, 1494, 3, 435, 217, 0, 1494, 1495, 3, 409, 204, 0, 1495, 1496, 3, 431, 215, 0, 1496, 1497, 3, 423, 211, 0, 1497, 1498, 3, 417, 208, 0, 1498, 1499, 3, 405, 202, 0, 1499, 1500, 3, 401, 200, 0, 1500, 1501, 3, 439, 219, 0, 1501, 1502, 3, 409, 204, 0, 1502, 1503, 3, 407, 203, 0, 1503, 278, 1, 0, 0, 0, 1504, 1505, 3, 435, 217, 0, 1505, 1506, 3, 417, 208, 0, 1506, 1507, 3, 413, 206, 0, 1507, 1508, 3, 415, 207, 0, 1508, 1509, 3, 439, 219, 0, 1509, 280, 1, 0, 0, 0, 1510, 1511, 3, 435, 217, 0, 1511, 1512, 3, 429, 214, 0, 1512, 1513, 3, 423, 211, 0, 1513, 1514, 3, 423, 211, 0, 1514, 1515, 3, 441, 220, 0, 1515, 1516, 3, 431, 215, 0, 1516, 282, 1, 0, 0, 0, 1517, 1518, 3, 435, 217, 0, 1518, 1519, 3, 429, 214, 0, 1519, 1520, 3, 445, 222, 0, 1520, 284, 1, 0, 0, 0, 1521, 1522, 3, 435, 217, 0, 1522, 1523, 3, 429, 214, 0, 1523, 1524, 3, 445, 222, 0, 1524, 1525, 3, 437, 218, 0, 1525, 286, 1, 0, 0, 0, 1526, 1527, 3, 437, 218, 0, 1527, 1528, 3, 401, 200, 0, 1528, 1529, 3, 425, 212, 0, 1529, 1530, 3, 431, 215, 0, 1530, 1531, 3, 423, 211, 0, 1531, 1532, 3, 409, 204, 0, 1532, 288, 1, 0, 0, 0, 1533, 1534, 3, 437, 218, 0, 1534, 1535, 3, 409, 204, 0, 1535, 1536, 3, 405, 202, 0, 1536, 1537, 3, 429, 214, 0, 1537, 1538, 3, 427, 213, 0, 1538, 1539, 3, 407, 203, 0, 1539, 290, 1, 0, 0, 0, 1540, 1541, 3, 437, 218, 0, 1541, 1542, 3, 409, 204, 0, 1542, 1543, 3, 423, 211, 0, 1543, 1544, 3, 409, 204, 0, 1544, 1545, 3, 405, 202, 0, 1545, 1546, 3, 439, 219, 0, 1546, 292, 1, 0, 0, 0, 1547, 1548, 3, 437, 218, 0, 1548, 1549, 3, 409, 204, 0, 1549, 1550, 3, 425, 212, 0, 1550, 1551, 3, 417, 208, 0, 1551, 294, 1, 0, 0, 0, 1552, 1553, 3, 437, 218, 0, 1553, 1554, 3, 409, 204, 0, 1554, 1555, 3, 427, 213, 0, 1555, 1556, 3, 407, 203, 0, 1556, 1557, 3, 437, 218, 0, 1557, 296, 1, 0, 0, 0, 1558, 1559, 3, 437, 218, 0, 1559, 1560, 3, 409, 204, 0, 1560, 1561, 3, 439, 219, 0, 1561, 298, 1, 0, 0, 0, 1562, 1563, 3, 437, 218, 0, 1563, 1564, 3, 409, 204, 0, 1564, 1565, 3, 439, 219, 0, 1565, 1566, 3, 439, 219, 0, 1566, 1567, 3, 417, 208, 0, 1567, 1568, 3, 427, 213, 0, 1568, 1569, 3, 413, 206, 0, 1569, 1570, 3, 437, 218, 0, 1570, 300, 1, 0, 0, 0, 1571, 1572, 3, 437, 218, 0, 1572, 1573, 3, 415, 207, 0, 1573, 1574, 3, 429, 214, 0, 1574, 1575, 3, 445, 222, 0, 1575, 302, 1, 0, 0, 0, 1576, 1577, 3, 437, 218, 0, 1577, 1578, 3, 429, 214, 0, 1578, 1579, 3, 441, 220, 0, 1579, 1580, 3, 435, 217, 0, 1580, 1581, 3, 405, 202, 0, 1581, 1582, 3, 409, 204, 0, 1582, 304, 1, 0, 0, 0, 1583, 1584, 3, 437, 218, 0, 1584, 1585, 3, 439, 219, 0, 1585, 1586, 3, 401, 200, 0, 1586, 1587, 3, 435, 217, 0, 1587, 1588, 3, 439, 219, 0, 1588, 306, 1, 0, 0, 0, 1589, 1590, 3, 437, 218, 0, 1590, 1591, 3, 439, 219, 0, 1591, 1592, 3, 429, 214, 0, 1592, 1593, 3, 431, 215, 0, 1593, 308, 1, 0, 0, 0, 1594, 1595, 3, 437, 218, 0, 1595, 1596, 3, 441, 220, 0, 1596, 1597, 3, 403, 201, 0, 1597, 1598, 3, 437, 218, 0, 1598, 1599, 3, 439, 219, 0, 1599, 1600, 3, 435, 217, 0, 1600, 1601, 3, 417, 208, 0, 1601, 1602, 3, 427, 213, 0, 1602, 1603, 3, 413, 206, 0, 1603, 310, 1, 0, 0, 0, 1604, 1605, 3, 437, 218, 0, 1605, 1606, 3, 449, 224, 0, 1606, 1607, 3, 427, 213, 0, 1607, 1608, 3, 405, 202, 0, 1608, 312, 1, 0, 0, 0, 1609, 1610, 3, 437, 218, 0, 1610, 1611, 3, 449, 224, 0, 1611, 1612, 3, 427, 213, 0, 1612, 1613, 3, 439, 219, 0, 1613, 1614, 3, 401, 200, 0, 1614, 1615, 3, 447, 223, 0, 1615, 314, 1, 0, 0, 0, 1616, 1617, 3, 437, 218, 0, 1617, 1618, 3, 449, 224, 0, 1618, 1619, 3, 437, 218, 0, 1619, 1620, 3, 439, 219, 0, 1620, 1621, 3, 409, 204, 0, 1621, 1622, 3, 425, 212, 0, 1622, 316, 1, 0, 0, 0, 1623, 1624, 3, 439, 219, 0, 1624, 1625, 3, 401, 200, 0, 1625, 1626, 3, 403, 201, 0, 1626, 1627, 3, 423, 211, 0, 1627, 1628, 3, 409, 204, 0, 1628, 318, 1, 0, 0, 0, 1629, 1630, 3, 439, 219, 0, 1630, 1631, 3, 401, 200, 0, 1631, 1632, 3, 403, 201, 0, 1632, 1633, 3, 423, 211, 0, 1633, 1634, 3, 409, 204, 0, 1634, 1635, 3, 437, 218, 0, 1635, 320, 1, 0, 0, 0, 1636, 1637, 3, 439, 219, 0, 1637, 1638, 3, 409, 204, 0, 1638, 1639, 3, 425, 212, 0, 1639, 1640, 3, 431, 215, 0, 1640, 1641, 3, 429, 214, 0, 1641, 1642, 3, 435, 217, 0, 1642, 1643, 3, 401, 200, 0, 1643, 1644, 3, 435, 217, 0, 1644, 1645, 3, 449, 224, 0, 1645, 322, 1, 0, 0, 0, 1646, 1647, 3, 439, 219, 0, 1647, 1648, 3, 409, 204, 0, 1648, 1649, 3, 437, 218, 0, 1649, 1650, 3, 439, 219, 0, 1650, 324, 1, 0, 0, 0, 1651, 1652, 3, 439, 219, 0, 1652, 1653, 3, 415, 207, 0, 1653, 1654, 3, 409, 204, 0, 1654, 1655, 3, 427, 213, 0, 1655, 326, 1, 0, 0, 0, 1656, 1657, 3, 439, 219, 0, 1657, 1658, 3, 417, 208, 0, 1658, 1659, 3, 409, 204, 0, 1659, 1660, 3, 437, 218, 0, 1660, 328, 1, 0, 0, 0, 1661, 1662, 3, 439, 219, 0, 1662, 1663, 3, 417, 208, 0, 1663, 1664, 3, 425, 212, 0, 1664, 1665, 3, 409, 204, 0, 1665, 1666, 3, 429, 214, 0, 1666, 1667, 3, 441, 220, 0, 1667, 1668, 3, 439, 219, 0, 1668, 330, 1, 0, 0, 0, 1669, 1670, 3, 439, 219, 0, 1670, 1671, 3, 417, 208, 0, 1671, 1672, 3, 425, 212, 0, 1672, 1673, 3, 409, 204, 0, 1673, 1674, 3, 437, 218, 0, 1674, 1675, 3, 439, 219, 0, 1675, 1676, 3, 401, 200, 0, 1676, 1677, 3, 425, 212, 0, 1677, 1678, 3, 431, 215, 0, 1678, 332, 1, 0, 0, 0, 1679, 1680, 3, 439, 219, 0, 1680, 1681, 3, 429, 214, 0, 1681, 334, 1, 0, 0, 0, 1682, 1683, 3, 439, 219, 0, 1683, 1684, 3, 429, 214, 0, 1684, 1685, 3, 431, 215, 0, 1685, 336, 1, 0, 0, 0, 1686, 1687, 3, 439, 219, 0, 1687, 1688, 3, 429, 214, 0, 1688, 1689, 3, 439, 219, 0, 1689, 1690, 3, 401, 200, 0, 1690, 1691, 3, 423, 211, 0, 1691, 1692, 3, 437, 218, 0, 1692, 338, 1, 0, 0, 0, 1693, 1694, 3, 439, 219, 0, 1694, 1695, 3, 435, 217, 0, 1695, 1696, 3, 401, 200, 0, 1696, 1697, 3, 417, 208, 0, 1697, 1698, 3, 423, 211, 0, 1698, 1699, 3, 417, 208, 0, 1699, 1700, 3, 427, 213, 0, 1700, 1701, 3, 413, 206, 0, 1701, 340, 1, 0, 0, 0, 1702, 1703, 3, 439, 219, 0, 1703, 1704, 3, 435, 217, 0, 1704, 1705, 3, 417, 208, 0, 1705, 1706, 3, 425, 212, 0, 1706, 342, 1, 0, 0, 0, 1707, 1708, 3, 439, 219, 0, 1708, 1709, 3, 435, 217, 0, 1709, 1710, 3, 441, 220, 0, 1710, 1711, 3, 427, 213, 0, 1711, 1712, 3, 405, 202, 0, 1712, 1713, 3, 401, 200, 0, 1713, 1714, 3, 439, 219, 0, 1714, 1715, 3, 409, 204, 0, 1715, 344, 1, 0, 0, 0, 1716, 1717, 3, 439, 219, 0, 1717, 1718, 3, 439, 219, 0, 1718, 1719, 3, 423, 211, 0, 1719, 346, 1, 0, 0, 0, 1720, 1721, 3, 439, 219, 0, 1721, 1722, 3, 449, 224, 0, 1722, 1723, 3, 431, 215, 0, 1723, 1724, 3, 409, 204, 0, 1724, 348, 1, 0, 0, 0, 1725, 1726, 3, 441, 220, 0, 1726, 1727, 3, 427, 213, 0, 1727, 1728, 3, 403, 201, 0, 1728, 1729, 3, 429, 214, 0, 1729, 1730, 3, 441, 220, 0, 1730, 1731, 3, 427, 213, 0, 1731, 1732, 3, 407, 203, 0, 1732, 1733, 3, 409, 204, 0, 1733, 1734, 3, 407, 203, 0, 1734, 350, 1, 0, 0, 0, 1735, 1736, 3, 441, 220, 0, 1736, 1737, 3, 427, 213, 0, 1737, 1738, 3, 417, 208, 0, 1738, 1739, 3, 429, 214, 0, 1739, 1740, 3, 427, 213, 0, 1740, 352, 1, 0, 0, 0, 1741, 1742, 3, 441, 220, 0, 1742, 1743, 3, 431, 215, 0, 1743, 1744, 3, 407, 203, 0, 1744, 1745, 3, 401, 200, 0, 1745, 1746, 3, 439, 219, 0, 1746, 1747, 3, 409, 204, 0, 1747, 354, 1, 0, 0, 0, 1748, 1749, 3, 441, 220, 0, 1749, 1750, 3, 437, 218, 0, 1750, 1751, 3, 409, 204, 0, 1751, 356, 1, 0, 0, 0, 1752, 1753, 3, 441, 220, 0, 1753, 1754, 3, 437, 218, 0, 1754, 1755, 3, 417, 208, 0, 1755, 1756, 3, 427, 213, 0, 1756, 1757, 3, 413, 206, 0, 1757, 358, 1, 0, 0, 0, 1758, 1759, 3, 441, 220, 0, 1759, 1760, 3, 441, 220, 0, 1760, 1761, 3, 417, 208, 0, 1761, 1762, 3, 407, 203, 0, 1762, 360, 1, 0, 0, 0, 1763, 1764, 3, 443, 221, 0, 1764, 1765, 3, 401, 200, 0, 1765, 1766, 3, 423, 211, 0, 1766, 1767, 3, 441, 220, 0, 1767, 1768, 3, 409, 204, 0, 1768, 1769, 3, 437, 218, 0, 1769, 362, 1, 0, 0, 0, 1770, 1771, 3, 443, 221, 0, 1771, 1772, 3, 417, 208, 0, 1772, 1773, 3, 409, 204, 0, 1773, 1774, 3, 445, 222, 0, 1774, 364, 1, 0, 0, 0, 1775, 1776, 3, 443, 221, 0, 1776, 1777, 3, 429, 214, 0, 1777, 1778, 3, 423, 211, 0, 1778, 1779, 3, 441, 220, 0, 1779, 1780, 3, 425, 212, 0, 1780, 1781, 3, 409, 204, 0, 1781, 366, 1, 0, 0, 0, 1782, 1783, 3, 445, 222, 0, 1783, 1784, 3, 401, 200, 0, 1784, 1785, 3, 439, 219, 0, 1785, 1786, 3, 405, 202, 0, 1786, 1787, 3, 415, 207, 0, 1787, 368, 1, 0, 0, 0, 1788, 1789, 3, 445, 222, 0, 1789, 1790, 3, 409, 204, 0, 1790, 1791, 3, 409, 204, 0, 1791, 1792, 3, 421, 210, 0, 1792, 370, 1, 0, 0, 0, 1793, 1794, 3, 445, 222, 0, 1794, 1795, 3, 415, 207, 0, 1795, 1796, 3, 409, 204, 0, 1796, 1797, 3, 427, 213, 0, 1797, 372, 1, 0, 0, 0, 1798, 1799, 3, 445, 222, 0, 1799, 1800, 3, 415, 207, 0, 1800, 1801, 3, 409, 204, 0, 1801, 1802, 3, 435, 217, 0, 1802, 1803, 3, 409, 204, 0, 1803, 374, 1, 0, 0, 0, 1804, 1805, 3, 445, 222, 0, 1805, 1806, 3, 417, 208, 0, 1806, 1807, 3, 427, 213, 0, 1807, 1808, 3, 407, 203, 0, 1808, 1809, 3, 429, 214, 0, 1809, 1810, 3, 445, 222, 0, 1810, 376, 1, 0, 0, 0, 1811, 1812, 3, 445, 222, 0, 1812, 1813, 3, 417, 208, 0, 1813, 1814, 3, 439, 219, 0, 1814, 1815, 3, 415, 207, 0, 1815, 378, 1, 0, 0, 0, 1816, 1817, 3, 449, 224, 0, 1817, 1818, 3, 409, 204, 0, 1818, 1819, 3, 401, 200, 0, 1819, 1820, 3, 435, 217, 0, 1820, 1827, 1, 0, 0, 0, 1821, 1822, 3, 449, 224, 0, 1822, 1823, 3, 449, 224, 0, 1823, 1824, 3, 449, 224, 0, 1824, 1825, 3, 449, 224, 0, 1825, 1827, 1, 0, 0, 0, 1826, 1816, 1, 0, 0, 0, 1826, 1821, 1, 0, 0, 0, 1827, 380, 1, 0, 0, 0, 1828, 1829, 5, 102, 0, 0, 1829, 1830, 5, 97, 0, 0, 1830, 1831, 5, 108, 0, 0, 1831, 1832, 5, 115, 0, 0, 1832, 1833, 5, 101, 0, 0, 1833, 382, 1, 0, 0, 0, 1834, 1835, 5, 116, 0, 0, 1835, 1836, 5, 114, 0, 0, 1836, 1837, 5, 117, 0, 0, 1837, 1838, 5, 101, 0, 0, 1838, 384, 1, 0, 0, 0, 1839, 1840, 3, 467, 233, 0, 1840, 1841, 3, 403, 201, 0, 1841, 1870, 1, 0, 0, 0, 1842, 1843, 3, 467, 233, 0, 1843, 1844, 3, 411, 205, 0, 1844, 1870, 1, 0, 0, 0, 1845, 1846, 3, 467, 233, 0, 1846, 1847, 3, 435, 217, 0, 1847, 1870, 1, 0, 0, 0, 1848, 1849, 3, 467, 233, 0, 1849, 1850, 3, 427, 213, 0, 1850, 1870, 1, 0, 0, 0, 1851, 1852, 3, 467, 233, 0, 1852, 1853, 3, 439, 219, 0, 1853, 1870, 1, 0, 0, 0, 1854, 1855, 3, 467, 233, 0, 1855, 1856, 5, 48, 0, 0, 1856, 1870, 1, 0, 0, 0, 1857, 1858, 3, 467, 233, 0, 1858, 1859, 3, 401, 200, 0, 1859, 1870, 1, 0, 0, 0, 1860, 1861, 3, 467, 233, 0, 1861, 1862, 3, 443, 221, 0, 1862, 1870, 1, 0, 0, 0, 1863, 1864, 3, 467, 233, 0, 1864, 1865, 3, 467, 233, 0, 1865, 1870, 1, 0, 0, 0, 1866, 1867, 3, 467, 233, 0, 1867, 1868, 3, 521, 260, 0, 1868, 1870, 1, 0, 0, 0, 1869, 1839, 1, 0, 0, 0, 1869, 1842, 1, 0, 0, 0, 1869, 1845, 1, 0, 0, 0, 1869, 1848, 1, 0, 0, 0, 1869, 1851, 1, 0, 0, 0, 1869, 1854, 1, 0, 0, 0, 1869, 1857, 1, 0, 0, 0, 1869, 1860, 1, 0, 0, 0, 1869, 1863, 1, 0, 0, 0, 1869, 1866, 1, 0, 0, 0, 1870, 386, 1, 0, 0, 0, 1871, 1872, 3, 467, 233, 0, 1872, 1873, 3, 403, 201, 0, 1873, 1902, 1, 0, 0, 0, 1874, 1875, 3, 467, 233, 0, 1875, 1876, 3, 411, 205, 0, 1876, 1902, 1, 0, 0, 0, 1877, 1878, 3, 467, 233, 0, 1878, 1879, 3, 435, 217, 0, 1879, 1902, 1, 0, 0, 0, 1880, 1881, 3, 467, 233, 0, 1881, 1882, 3, 427, 213, 0, 1882, 1902, 1, 0, 0, 0, 1883, 1884, 3, 467, 233, 0, 1884, 1885, 3, 439, 219, 0, 1885, 1902, 1, 0, 0, 0, 1886, 1887, 3, 467, 233, 0, 1887, 1888, 5, 48, 0, 0, 1888, 1902, 1, 0, 0, 0, 1889, 1890, 3, 467, 233, 0, 1890, 1891, 3, 401, 200, 0, 1891, 1902, 1, 0, 0, 0, 1892, 1893, 3, 467, 233, 0, 1893, 1894, 3, 443, 221, 0, 1894, 1902, 1, 0, 0, 0, 1895, 1896, 3, 467, 233, 0, 1896, 1897, 3, 467, 233, 0, 1897, 1902, 1, 0, 0, 0, 1898, 1899, 3, 467, 233, 0, 1899, 1900, 3, 519, 259, 0, 1900, 1902, 1, 0, 0, 0, 1901, 1871, 1, 0, 0, 0, 1901, 1874, 1, 0, 0, 0, 1901, 1877, 1, 0, 0, 0, 1901, 1880, 1, 0, 0, 0, 1901, 1883, 1, 0, 0, 0, 1901, 1886, 1, 0, 0, 0, 1901, 1889, 1, 0, 0, 0, 1901, 1892, 1, 0, 0, 0, 1901, 1895, 1, 0, 0, 0, 1901, 1898, 1, 0, 0, 0, 1902, 388, 1, 0, 0, 0, 1903, 1907, 3, 453, 226, 0, 1904, 1907, 3, 537, 268, 0, 1905, 1907, 3, 477, 238, 0, 1906, 1903, 1, 0, 0, 0, 1906, 1904, 1, 0, 0, 0, 1906, 1905, 1, 0, 0, 0, 1907, 1914, 1, 0, 0, 0, 1908, 1913, 3, 453, 226, 0, 1909, 1913, 3, 537, 268, 0, 1910, 1913, 3, 457, 228, 0, 1911, 1913, 3, 477, 238, 0, 1912, 1908, 1, 0, 0, 0, 1912, 1909, 1, 0, 0, 0, 1912, 1910, 1, 0, 0, 0, 1912, 1911, 1, 0, 0, 0, 1913, 1916, 1, 0, 0, 0, 1914, 1912, 1, 0, 0, 0, 1914, 1915, 1, 0, 0, 0, 1915, 1944, 1, 0, 0, 0, 1916, 1914, 1, 0, 0, 0, 1917, 1925, 3, 465, 232, 0, 1918, 1924, 8, 0, 0, 0, 1919, 1924, 3, 385, 192, 0, 1920, 1921, 3, 465, 232, 0, 1921, 1922, 3, 465, 232, 0, 1922, 1924, 1, 0, 0, 0, 1923, 1918, 1, 0, 0, 0, 1923, 1919, 1, 0, 0, 0, 1923, 1920, 1, 0, 0, 0, 1924, 1927, 1, 0, 0, 0, 1925, 1923, 1, 0, 0, 0, 1925, 1926, 1, 0, 0, 0, 1926, 1928, 1, 0, 0, 0, 1927, 1925, 1, 0, 0, 0, 1928, 1929, 3, 465, 232, 0, 1929, 1944, 1, 0, 0, 0, 1930, 1938, 3, 519, 259, 0, 1931, 1937, 8, 1, 0, 0, 1932, 1937, 3, 387, 193, 0, 1933, 1934, 3, 519, 259, 0, 1934, 1935, 3, 519, 259, 0, 1935, 1937, 1, 0, 0, 0, 1936, 1931, 1, 0, 0, 0, 1936, 1932, 1, 0, 0, 0, 1936, 1933, 1, 0, 0, 0, 1937, 1940, 1, 0, 0, 0, 1938, 1936, 1, 0, 0, 0, 1938, 1939, 1, 0, 0, 0, 1939, 1941, 1, 0, 0, 0, 1940, 1938, 1, 0, 0, 0, 1941, 1942, 3, 519, 259, 0, 1942, 1944, 1, 0, 0, 0, 1943, 1906, 1, 0, 0, 0, 1943, 1917, 1, 0, 0, 0, 1943, 1930, 1, 0, 0, 0, 1944, 390, 1, 0, 0, 0, 1945, 1946, 3, 397, 198, 0, 1946, 1950, 3, 479, 239, 0, 1947, 1949, 3, 459, 229, 0, 1948, 1947, 1, 0, 0, 0, 1949, 1952, 1, 0, 0, 0, 1950, 1948, 1, 0, 0, 0, 1950, 1951, 1, 0, 0, 0, 1951, 1955, 1, 0, 0, 0, 1952, 1950, 1, 0, 0, 0, 1953, 1956, 3, 431, 215, 0, 1954, 1956, 3, 409, 204, 0, 1955, 1953, 1, 0, 0, 0, 1955, 1954, 1, 0, 0, 0, 1956, 1959, 1, 0, 0, 0, 1957, 1960, 3, 515, 257, 0, 1958, 1960, 3, 475, 237, 0, 1959, 1957, 1, 0, 0, 0, 1959, 1958, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1962, 1, 0, 0, 0, 1961, 1963, 3, 457, 228, 0, 1962, 1961, 1, 0, 0, 0, 1963, 1964, 1, 0, 0, 0, 1964, 1962, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 2022, 1, 0, 0, 0, 1966, 1969, 3, 397, 198, 0, 1967, 1970, 3, 431, 215, 0, 1968, 1970, 3, 409, 204, 0, 1969, 1967, 1, 0, 0, 0, 1969, 1968, 1, 0, 0, 0, 1970, 1973, 1, 0, 0, 0, 1971, 1974, 3, 515, 257, 0, 1972, 1974, 3, 475, 237, 0, 1973, 1971, 1, 0, 0, 0, 1973, 1972, 1, 0, 0, 0, 1973, 1974, 1, 0, 0, 0, 1974, 1976, 1, 0, 0, 0, 1975, 1977, 3, 457, 228, 0, 1976, 1975, 1, 0, 0, 0, 1977, 1978, 1, 0, 0, 0, 1978, 1976, 1, 0, 0, 0, 1978, 1979, 1, 0, 0, 0, 1979, 2022, 1, 0, 0, 0, 1980, 1981, 3, 395, 197, 0, 1981, 1985, 3, 479, 239, 0, 1982, 1984, 3, 457, 228, 0, 1983, 1982, 1, 0, 0, 0, 1984, 1987, 1, 0, 0, 0, 1985, 1983, 1, 0, 0, 0, 1985, 1986, 1, 0, 0, 0, 1986, 1988, 1, 0, 0, 0, 1987, 1985, 1, 0, 0, 0, 1988, 1991, 3, 409, 204, 0, 1989, 1992, 3, 515, 257, 0, 1990, 1992, 3, 475, 237, 0, 1991, 1989, 1, 0, 0, 0, 1991, 1990, 1, 0, 0, 0, 1991, 1992, 1, 0, 0, 0, 1992, 1994, 1, 0, 0, 0, 1993, 1995, 3, 457, 228, 0, 1994, 1993, 1, 0, 0, 0, 1995, 1996, 1, 0, 0, 0, 1996, 1994, 1, 0, 0, 0, 1996, 1997, 1, 0, 0, 0, 1997, 2022, 1, 0, 0, 0, 1998, 1999, 3, 479, 239, 0, 1999, 2000, 3, 395, 197, 0, 2000, 2003, 3, 409, 204, 0, 2001, 2004, 3, 515, 257, 0, 2002, 2004, 3, 475, 237, 0, 2003, 2001, 1, 0, 0, 0, 2003, 2002, 1, 0, 0, 0, 2003, 2004, 1, 0, 0, 0, 2004, 2006, 1, 0, 0, 0, 2005, 2007, 3, 457, 228, 0, 2006, 2005, 1, 0, 0, 0, 2007, 2008, 1, 0, 0, 0, 2008, 2006, 1, 0, 0, 0, 2008, 2009, 1, 0, 0, 0, 2009, 2022, 1, 0, 0, 0, 2010, 2011, 3, 395, 197, 0, 2011, 2014, 3, 409, 204, 0, 2012, 2015, 3, 515, 257, 0, 2013, 2015, 3, 475, 237, 0, 2014, 2012, 1, 0, 0, 0, 2014, 2013, 1, 0, 0, 0, 2014, 2015, 1, 0, 0, 0, 2015, 2017, 1, 0, 0, 0, 2016, 2018, 3, 457, 228, 0, 2017, 2016, 1, 0, 0, 0, 2018, 2019, 1, 0, 0, 0, 2019, 2017, 1, 0, 0, 0, 2019, 2020, 1, 0, 0, 0, 2020, 2022, 1, 0, 0, 0, 2021, 1945, 1, 0, 0, 0, 2021, 1966, 1, 0, 0, 0, 2021, 1980, 1, 0, 0, 0, 2021, 1998, 1, 0, 0, 0, 2021, 2010, 1, 0, 0, 0, 2022, 392, 1, 0, 0, 0, 2023, 2025, 5, 48, 0, 0, 2024, 2026, 3, 455, 227, 0, 2025, 2024, 1, 0, 0, 0, 2026, 2027, 1, 0, 0, 0, 2027, 2025, 1, 0, 0, 0, 2027, 2028, 1, 0, 0, 0, 2028, 394, 1, 0, 0, 0, 2029, 2031, 3, 457, 228, 0, 2030, 2029, 1, 0, 0, 0, 2031, 2032, 1, 0, 0, 0, 2032, 2030, 1, 0, 0, 0, 2032, 2033, 1, 0, 0, 0, 2033, 396, 1, 0, 0, 0, 2034, 2035, 5, 48, 0, 0, 2035, 2037, 3, 447, 223, 0, 2036, 2038, 3, 459, 229, 0, 2037, 2036, 1, 0, 0, 0, 2038, 2039, 1, 0, 0, 0, 2039, 2037, 1, 0, 0, 0, 2039, 2040, 1, 0, 0, 0, 2040, 398, 1, 0, 0, 0, 2041, 2049, 3, 521, 260, 0, 2042, 2048, 8, 2, 0, 0, 2043, 2048, 3, 385, 192, 0, 2044, 2045, 3, 521, 260, 0, 2045, 2046, 3, 521, 260, 0, 2046, 2048, 1, 0, 0, 0, 2047, 2042, 1, 0, 0, 0, 2047, 2043, 1, 0, 0, 0, 2047, 2044, 1, 0, 0, 0, 2048, 2051, 1, 0, 0, 0, 2049, 2047, 1, 0, 0, 0, 2049, 2050, 1, 0, 0, 0, 2050, 2052, 1, 0, 0, 0, 2051, 2049, 1, 0, 0, 0, 2052, 2053, 3, 521, 260, 0, 2053, 400, 1, 0, 0, 0, 2054, 2055, 7, 3, 0, 0, 2055, 402, 1, 0, 0, 0, 2056, 2057, 7, 4, 0, 0, 2057, 404, 1, 0, 0, 0, 2058, 2059, 7, 5, 0, 0, 2059, 406, 1, 0, 0, 0, 2060, 2061, 7, 6, 0, 0, 2061, 408, 1, 0, 0, 0, 2062, 2063, 7, 7, 0, 0, 2063, 410, 1, 0, 0, 0, 2064, 2065, 7, 8, 0, 0, 2065, 412, 1, 0, 0, 0, 2066, 2067, 7, 9, 0, 0, 2067, 414, 1, 0, 0, 0, 2068, 2069, 7, 10, 0, 0, 2069, 416, 1, 0, 0, 0, 2070, 2071, 7, 11, 0, 0, 2071, 418, 1, 0, 0, 0, 2072, 2073, 7, 12, 0, 0, 2073, 420, 1, 0, 0, 0, 2074, 2075, 7, 13, 0, 0, 2075, 422, 1, 0, 0, 0, 2076, 2077, 7, 14, 0, 0, 2077, 424, 1, 0, 0, 0, 2078, 2079, 7, 15, 0, 0, 2079, 426, 1, 0, 0, 0, 2080, 2081, 7, 16, 0, 0, 2081, 428, 1, 0, 0, 0, 2082, 2083, 7, 17, 0, 0, 2083, 430, 1, 0, 0, 0, 2084, 2085, 7, 18, 0, 0, 2085, 432, 1, 0, 0, 0, 2086, 2087, 7, 19, 0, 0, 2087, 434, 1, 0, 0, 0, 2088, 2089, 7, 20, 0, 0, 2089, 436, 1, 0, 0, 0, 2090, 2091, 7, 21, 0, 0, 2091, 438, 1, 0, 0, 0, 2092, 2093, 7, 22, 0, 0, 2093, 440, 1, 0, 0, 0, 2094, 2095, 7, 23, 0, 0, 2095, 442, 1, 0, 0, 0, 2096, 2097, 7, 24, 0, 0, 2097, 444, 1, 0, 0, 0, 2098, 2099, 7, 25, 0, 0, 2099, 446, 1, 0, 0, 0, 2100, 2101, 7, 26, 0, 0, 2101, 448, 1, 0, 0, 0, 2102, 2103, 7, 27, 0, 0, 2103, 450, 1, 0, 0, 0, 2104, 2105, 7, 28, 0, 0, 2105, 452, 1, 0, 0, 0, 2106, 2107, 7, 29, 0, 0, 2107, 454, 1, 0, 0, 0, 2108, 2109, 7, 30, 0, 0, 2109, 456, 1, 0, 0, 0, 2110, 2111, 7, 31, 0, 0, 2111, 458, 1, 0, 0, 0, 2112, 2113, 7, 32, 0, 0, 2113, 460, 1, 0, 0, 0, 2114, 2115, 5, 45, 0, 0, 2115, 2116, 5, 62, 0, 0, 2116, 462, 1, 0, 0, 0, 2117, 2118, 5, 42, 0, 0, 2118, 464, 1, 0, 0, 0, 2119, 2120, 5, 96, 0, 0, 2120, 466, 1, 0, 0, 0, 2121, 2122, 5, 92, 0, 0, 2122, 468, 1, 0, 0, 0, 2123, 2124, 5, 58, 0, 0, 2124, 470, 1, 0, 0, 0, 2125, 2126, 5, 44, 0, 0, 2126, 472, 1, 0, 0, 0, 2127, 2128, 5, 124, 0, 0, 2128, 2129, 5, 124, 0, 0, 2129, 474, 1, 0, 0, 0, 2130, 2131, 5, 45, 0, 0, 2131, 476, 1, 0, 0, 0, 2132, 2133, 5, 36, 0, 0, 2133, 478, 1, 0, 0, 0, 2134, 2135, 5, 46, 0, 0, 2135, 480, 1, 0, 0, 0, 2136, 2137, 5, 61, 0, 0, 2137, 2138, 5, 61, 0, 0, 2138, 482, 1, 0, 0, 0, 2139, 2140, 5, 61, 0, 0, 2140, 484, 1, 0, 0, 0, 2141, 2142, 5, 62, 0, 0, 2142, 2143, 5, 61, 0, 0, 2143, 486, 1, 0, 0, 0, 2144, 2145, 5, 62, 0, 0, 2145, 488, 1, 0, 0, 0, 2146, 2147, 5, 35, 0, 0, 2147, 490, 1, 0, 0, 0, 2148, 2149, 5, 126, 0, 0, 2149, 2150, 5, 42, 0, 0, 2150, 492, 1, 0, 0, 0, 2151, 2152, 5, 61, 0, 0, 2152, 2153, 5, 126, 0, 0, 2153, 2154, 5, 42, 0, 0, 2154, 494, 1, 0, 0, 0, 2155, 2156, 5, 123, 0, 0, 2156, 496, 1, 0, 0, 0, 2157, 2158, 5, 91, 0, 0, 2158, 498, 1, 0, 0, 0, 2159, 2160, 5, 40, 0, 0, 2160, 500, 1, 0, 0, 0, 2161, 2162, 5, 60, 0, 0, 2162, 2163, 5, 61, 0, 0, 2163, 502, 1, 0, 0, 0, 2164, 2165, 5, 60, 0, 0, 2165, 504, 1, 0, 0, 0, 2166, 2167, 5, 33, 0, 0, 2167, 2171, 5, 61, 0, 0, 2168, 2169, 5, 60, 0, 0, 2169, 2171, 5, 62, 0, 0, 2170, 2166, 1, 0, 0, 0, 2170, 2168, 1, 0, 0, 0, 2171, 506, 1, 0, 0, 0, 2172, 2173, 5, 33, 0, 0, 2173, 2174, 5, 126, 0, 0, 2174, 2175, 5, 42, 0, 0, 2175, 508, 1, 0, 0, 0, 2176, 2177, 5, 33, 0, 0, 2177, 2178, 5, 126, 0, 0, 2178, 510, 1, 0, 0, 0, 2179, 2180, 5, 63, 0, 0, 2180, 2181, 5, 63, 0, 0, 2181, 512, 1, 0, 0, 0, 2182, 2183, 5, 37, 0, 0, 2183, 514, 1, 0, 0, 0, 2184, 2185, 5, 43, 0, 0, 2185, 516, 1, 0, 0, 0, 2186, 2187, 5, 63, 0, 0, 2187, 518, 1, 0, 0, 0, 2188, 2189, 5, 34, 0, 0, 2189, 520, 1, 0, 0, 0, 2190, 2191, 5, 39, 0, 0, 2191, 522, 1, 0, 0, 0, 2192, 2193, 5, 126, 0, 0, 2193, 524, 1, 0, 0, 0, 2194, 2195, 5, 61, 0, 0, 2195, 2196, 5, 126, 0, 0, 2196, 526, 1, 0, 0, 0, 2197, 2198, 5, 125, 0, 0, 2198, 528, 1, 0, 0, 0, 2199, 2200, 5, 93, 0, 0, 2200, 530, 1, 0, 0, 0, 2201, 2202, 5, 41, 0, 0, 2202, 532, 1, 0, 0, 0, 2203, 2204, 5, 59, 0, 0, 2204, 534, 1, 0, 0, 0, 2205, 2206, 5, 47, 0, 0, 2206, 536, 1, 0, 0, 0, 2207, 2208, 5, 95, 0, 0, 2208, 538, 1, 0, 0, 0, 2209, 2210, 5, 47, 0, 0, 2210, 2211, 5, 42, 0, 0, 2211, 2215, 1, 0, 0, 0, 2212, 2214, 9, 0, 0, 0, 2213, 2212, 1, 0, 0, 0, 2214, 2217, 1, 0, 0, 0, 2215, 2216, 1, 0, 0, 0, 2215, 2213, 1, 0, 0, 0, 2216, 2218, 1, 0, 0, 0, 2217, 2215, 1, 0, 0, 0, 2218, 2219, 5, 42, 0, 0, 2219, 2220, 5, 47, 0, 0, 2220, 2221, 1, 0, 0, 0, 2221, 2222, 6, 269, 0, 0, 2222, 540, 1, 0, 0, 0, 2223, 2224, 5, 45, 0, 0, 2224, 2225, 5, 45, 0, 0, 2225, 2229, 1, 0, 0, 0, 2226, 2228, 8, 33, 0, 0, 2227, 2226, 1, 0, 0, 0, 2228, 2231, 1, 0, 0, 0, 2229, 2227, 1, 0, 0, 0, 2229, 2230, 1, 0, 0, 0, 2230, 2233, 1, 0, 0, 0, 2231, 2229, 1, 0, 0, 0, 2232, 2234, 7, 34, 0, 0, 2233, 2232, 1, 0, 0, 0, 2234, 2235, 1, 0, 0, 0, 2235, 2236, 6, 270, 0, 0, 2236, 542, 1, 0, 0, 0, 2237, 2238, 7, 35, 0, 0, 2238, 2239, 1, 0, 0, 0, 2239, 2240, 6, 271, 1, 0, 2240, 544, 1, 0, 0, 0, 38, 0, 607, 1112, 1826, 1869, 1901, 1906, 1912, 1914, 1923, 1925, 1936, 1938, 1943, 1950, 1955, 1959, 1964, 1969, 1973, 1978, 1985, 1991, 1996, 2003, 2008, 2014, 2019, 2021, 2027, 2032, 2039, 2047, 2049, 2170, 2215, 2229, 2233, 2, 6, 0, 0, 0, 1, 0] \ No newline at end of file diff --git a/hogql_parser/HogQLLexer.tokens b/hogql_parser/HogQLLexer.tokens index 10fd925b09195..18c9b75ec7548 100644 --- a/hogql_parser/HogQLLexer.tokens +++ b/hogql_parser/HogQLLexer.tokens @@ -190,14 +190,14 @@ WITH=189 YEAR=190 JSON_FALSE=191 JSON_TRUE=192 -ESCAPE_CHAR=193 -IDENTIFIER=194 -FLOATING_LITERAL=195 -OCTAL_LITERAL=196 -DECIMAL_LITERAL=197 -HEXADECIMAL_LITERAL=198 -STRING_LITERAL=199 -PLACEHOLDER=200 +ESCAPE_CHAR_SINGLE=193 +ESCAPE_CHAR_DOUBLE=194 +IDENTIFIER=195 +FLOATING_LITERAL=196 +OCTAL_LITERAL=197 +DECIMAL_LITERAL=198 +HEXADECIMAL_LITERAL=199 +STRING_LITERAL=200 ARROW=201 ASTERISK=202 BACKQUOTE=203 diff --git a/hogql_parser/HogQLParser.cpp b/hogql_parser/HogQLParser.cpp index 60b83b24ed537..c2f987e39256d 100644 --- a/hogql_parser/HogQLParser.cpp +++ b/hogql_parser/HogQLParser.cpp @@ -61,11 +61,12 @@ void hogqlparserParserInitialize() { "ratioExpr", "settingExprList", "settingExpr", "windowExpr", "winPartitionByClause", "winOrderByClause", "winFrameClause", "winFrameExtend", "winFrameBound", "expr", "columnTypeExpr", "columnExprList", "columnExpr", "columnArgList", - "columnArgExpr", "columnLambdaExpr", "withExprList", "withExpr", "columnIdentifier", - "nestedIdentifier", "tableExpr", "tableFunctionExpr", "tableIdentifier", - "tableArgList", "databaseIdentifier", "floatingLiteral", "numberLiteral", - "literal", "interval", "keyword", "keywordForAlias", "alias", "identifier", - "enumValue" + "columnArgExpr", "columnLambdaExpr", "hogqlxTagElement", "hogqlxTagAttribute", + "withExprList", "withExpr", "columnIdentifier", "nestedIdentifier", + "tableExpr", "tableFunctionExpr", "tableIdentifier", "tableArgList", + "databaseIdentifier", "floatingLiteral", "numberLiteral", "literal", + "interval", "keyword", "keywordForAlias", "alias", "identifier", "enumValue", + "placeholder" }, std::vector{ "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", @@ -114,8 +115,8 @@ void hogqlparserParserInitialize() { "TRIM", "TRUNCATE", "TTL", "TYPE", "UNBOUNDED", "UNION", "UPDATE", "USE", "USING", "UUID", "VALUES", "VIEW", "VOLUME", "WATCH", "WEEK", "WHEN", "WHERE", "WINDOW", "WITH", "YEAR", "JSON_FALSE", "JSON_TRUE", - "ESCAPE_CHAR", "IDENTIFIER", "FLOATING_LITERAL", "OCTAL_LITERAL", - "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", "PLACEHOLDER", + "ESCAPE_CHAR_SINGLE", "ESCAPE_CHAR_DOUBLE", "IDENTIFIER", "FLOATING_LITERAL", + "OCTAL_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", "ARROW", "ASTERISK", "BACKQUOTE", "BACKSLASH", "COLON", "COMMA", "CONCAT", "DASH", "DOLLAR", "DOT", "EQ_DOUBLE", "EQ_SINGLE", "GT_EQ", "GT", "HASH", "IREGEX_SINGLE", "IREGEX_DOUBLE", "LBRACE", "LBRACKET", "LPAREN", @@ -126,7 +127,7 @@ void hogqlparserParserInitialize() { } ); static const int32_t serializedATNSegment[] = { - 4,1,242,922,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,242,959,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,2,26,7,26,2,27,7,27,2,28,7, @@ -134,335 +135,348 @@ void hogqlparserParserInitialize() { 35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7,39,2,40,7,40,2,41,7,41,2,42,7, 42,2,43,7,43,2,44,7,44,2,45,7,45,2,46,7,46,2,47,7,47,2,48,7,48,2,49,7, 49,2,50,7,50,2,51,7,51,2,52,7,52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7, - 56,2,57,7,57,2,58,7,58,1,0,1,0,3,0,121,8,0,1,0,1,0,1,1,1,1,1,1,1,1,5, - 1,129,8,1,10,1,12,1,132,9,1,1,2,1,2,1,2,1,2,1,2,3,2,139,8,2,1,3,3,3,142, - 8,3,1,3,1,3,3,3,146,8,3,1,3,3,3,149,8,3,1,3,1,3,3,3,153,8,3,1,3,3,3,156, - 8,3,1,3,3,3,159,8,3,1,3,3,3,162,8,3,1,3,3,3,165,8,3,1,3,1,3,3,3,169,8, - 3,1,3,1,3,3,3,173,8,3,1,3,3,3,176,8,3,1,3,3,3,179,8,3,1,3,3,3,182,8,3, - 1,3,1,3,3,3,186,8,3,1,3,3,3,189,8,3,1,4,1,4,1,4,1,5,1,5,1,5,1,5,3,5,198, - 8,5,1,6,1,6,1,6,1,7,3,7,204,8,7,1,7,1,7,1,7,1,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,5,8,223,8,8,10,8,12,8,226,9,8,1,9,1,9,1, - 9,1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,3,11,242,8,11, - 1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,15,1,15,1,15, - 1,15,3,15,259,8,15,1,15,1,15,1,15,1,15,3,15,265,8,15,1,15,1,15,1,15,1, - 15,3,15,271,8,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,282, - 8,15,3,15,284,8,15,1,16,1,16,1,16,1,17,1,17,1,17,1,18,1,18,1,18,3,18, - 295,8,18,1,18,3,18,298,8,18,1,18,1,18,1,18,1,18,3,18,304,8,18,1,18,1, - 18,1,18,1,18,1,18,1,18,3,18,312,8,18,1,18,1,18,1,18,1,18,5,18,318,8,18, - 10,18,12,18,321,9,18,1,19,3,19,324,8,19,1,19,1,19,1,19,3,19,329,8,19, - 1,19,3,19,332,8,19,1,19,3,19,335,8,19,1,19,1,19,3,19,339,8,19,1,19,1, - 19,3,19,343,8,19,1,19,3,19,346,8,19,3,19,348,8,19,1,19,3,19,351,8,19, - 1,19,1,19,3,19,355,8,19,1,19,1,19,3,19,359,8,19,1,19,3,19,362,8,19,3, - 19,364,8,19,3,19,366,8,19,1,20,1,20,1,20,3,20,371,8,20,1,21,1,21,1,21, - 1,21,1,21,1,21,1,21,1,21,1,21,3,21,382,8,21,1,22,1,22,1,22,1,22,3,22, - 388,8,22,1,23,1,23,1,23,5,23,393,8,23,10,23,12,23,396,9,23,1,24,1,24, - 3,24,400,8,24,1,24,1,24,3,24,404,8,24,1,24,1,24,3,24,408,8,24,1,25,1, - 25,1,25,1,25,3,25,414,8,25,3,25,416,8,25,1,26,1,26,1,26,5,26,421,8,26, - 10,26,12,26,424,9,26,1,27,1,27,1,27,1,27,1,28,3,28,431,8,28,1,28,3,28, - 434,8,28,1,28,3,28,437,8,28,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1, - 31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,3,32,456,8,32,1,33,1,33,1, - 33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,3,33,470,8,33,1,34,1, - 34,1,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,484,8,35,10, - 35,12,35,487,9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,496,8,35,10, - 35,12,35,499,9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,508,8,35,10, - 35,12,35,511,9,35,1,35,1,35,1,35,1,35,1,35,3,35,518,8,35,1,35,1,35,3, - 35,522,8,35,1,36,1,36,1,36,5,36,527,8,36,10,36,12,36,530,9,36,1,37,1, - 37,1,37,3,37,535,8,37,1,37,1,37,1,37,1,37,1,37,4,37,542,8,37,11,37,12, - 37,543,1,37,1,37,3,37,548,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 56,2,57,7,57,2,58,7,58,2,59,7,59,2,60,7,60,2,61,7,61,1,0,1,0,1,0,3,0, + 128,8,0,1,0,1,0,1,1,1,1,1,1,1,1,5,1,136,8,1,10,1,12,1,139,9,1,1,2,1,2, + 1,2,1,2,1,2,3,2,146,8,2,1,3,3,3,149,8,3,1,3,1,3,3,3,153,8,3,1,3,3,3,156, + 8,3,1,3,1,3,3,3,160,8,3,1,3,3,3,163,8,3,1,3,3,3,166,8,3,1,3,3,3,169,8, + 3,1,3,3,3,172,8,3,1,3,1,3,3,3,176,8,3,1,3,1,3,3,3,180,8,3,1,3,3,3,183, + 8,3,1,3,3,3,186,8,3,1,3,3,3,189,8,3,1,3,1,3,3,3,193,8,3,1,3,3,3,196,8, + 3,1,4,1,4,1,4,1,5,1,5,1,5,1,5,3,5,205,8,5,1,6,1,6,1,6,1,7,3,7,211,8,7, + 1,7,1,7,1,7,1,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,5, + 8,230,8,8,10,8,12,8,233,9,8,1,9,1,9,1,9,1,10,1,10,1,10,1,11,1,11,1,11, + 1,11,1,11,1,11,1,11,1,11,3,11,249,8,11,1,12,1,12,1,12,1,13,1,13,1,13, + 1,13,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,3,15,266,8,15,1,15,1,15, + 1,15,1,15,3,15,272,8,15,1,15,1,15,1,15,1,15,3,15,278,8,15,1,15,1,15,1, + 15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,289,8,15,3,15,291,8,15,1,16,1,16, + 1,16,1,17,1,17,1,17,1,18,1,18,1,18,3,18,302,8,18,1,18,3,18,305,8,18,1, + 18,1,18,1,18,1,18,3,18,311,8,18,1,18,1,18,1,18,1,18,1,18,1,18,3,18,319, + 8,18,1,18,1,18,1,18,1,18,5,18,325,8,18,10,18,12,18,328,9,18,1,19,3,19, + 331,8,19,1,19,1,19,1,19,3,19,336,8,19,1,19,3,19,339,8,19,1,19,3,19,342, + 8,19,1,19,1,19,3,19,346,8,19,1,19,1,19,3,19,350,8,19,1,19,3,19,353,8, + 19,3,19,355,8,19,1,19,3,19,358,8,19,1,19,1,19,3,19,362,8,19,1,19,1,19, + 3,19,366,8,19,1,19,3,19,369,8,19,3,19,371,8,19,3,19,373,8,19,1,20,1,20, + 1,20,3,20,378,8,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21, + 389,8,21,1,22,1,22,1,22,1,22,3,22,395,8,22,1,23,1,23,1,23,5,23,400,8, + 23,10,23,12,23,403,9,23,1,24,1,24,3,24,407,8,24,1,24,1,24,3,24,411,8, + 24,1,24,1,24,3,24,415,8,24,1,25,1,25,1,25,1,25,3,25,421,8,25,3,25,423, + 8,25,1,26,1,26,1,26,5,26,428,8,26,10,26,12,26,431,9,26,1,27,1,27,1,27, + 1,27,1,28,3,28,438,8,28,1,28,3,28,441,8,28,1,28,3,28,444,8,28,1,29,1, + 29,1,29,1,29,1,30,1,30,1,30,1,30,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1, + 32,1,32,3,32,463,8,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1, + 33,1,33,1,33,3,33,477,8,33,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,1, + 35,1,35,1,35,1,35,5,35,491,8,35,10,35,12,35,494,9,35,1,35,1,35,1,35,1, + 35,1,35,1,35,1,35,5,35,503,8,35,10,35,12,35,506,9,35,1,35,1,35,1,35,1, + 35,1,35,1,35,1,35,5,35,515,8,35,10,35,12,35,518,9,35,1,35,1,35,1,35,1, + 35,1,35,3,35,525,8,35,1,35,1,35,3,35,529,8,35,1,36,1,36,1,36,5,36,534, + 8,36,10,36,12,36,537,9,36,1,37,1,37,1,37,3,37,542,8,37,1,37,1,37,1,37, + 1,37,1,37,4,37,549,8,37,11,37,12,37,550,1,37,1,37,3,37,555,8,37,1,37, 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,579,8,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,596,8,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,608,8,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,618,8,37,1,37,3,37,621,8,37,1, - 37,1,37,3,37,625,8,37,1,37,3,37,628,8,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,3,37,640,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,657,8,37,1,37,1,37,3,37, - 661,8,37,1,37,1,37,1,37,1,37,3,37,667,8,37,1,37,1,37,1,37,1,37,1,37,3, - 37,674,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,686, - 8,37,1,37,1,37,3,37,690,8,37,1,37,3,37,693,8,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,3,37,702,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,3,37,716,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,1,37,3,37,743,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3, - 37,752,8,37,5,37,754,8,37,10,37,12,37,757,9,37,1,38,1,38,1,38,5,38,762, - 8,38,10,38,12,38,765,9,38,1,39,1,39,3,39,769,8,39,1,40,1,40,1,40,1,40, - 5,40,775,8,40,10,40,12,40,778,9,40,1,40,1,40,1,40,1,40,1,40,5,40,785, - 8,40,10,40,12,40,788,9,40,3,40,790,8,40,1,40,1,40,1,40,1,41,1,41,1,41, - 5,41,798,8,41,10,41,12,41,801,9,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,42,1,42,3,42,813,8,42,1,43,1,43,1,43,1,43,3,43,819,8,43,1,43,3, - 43,822,8,43,1,44,1,44,1,44,5,44,827,8,44,10,44,12,44,830,9,44,1,45,1, - 45,1,45,1,45,1,45,1,45,1,45,1,45,3,45,840,8,45,1,45,1,45,1,45,1,45,3, - 45,846,8,45,5,45,848,8,45,10,45,12,45,851,9,45,1,46,1,46,1,46,3,46,856, - 8,46,1,46,1,46,1,47,1,47,1,47,3,47,863,8,47,1,47,1,47,1,48,1,48,1,48, - 5,48,870,8,48,10,48,12,48,873,9,48,1,49,1,49,1,50,1,50,1,50,1,50,1,50, - 1,50,3,50,883,8,50,3,50,885,8,50,1,51,3,51,888,8,51,1,51,1,51,1,51,1, - 51,1,51,1,51,3,51,896,8,51,1,52,1,52,1,52,3,52,901,8,52,1,53,1,53,1,54, - 1,54,1,55,1,55,1,56,1,56,3,56,911,8,56,1,57,1,57,1,57,3,57,916,8,57,1, - 58,1,58,1,58,1,58,1,58,0,3,36,74,90,59,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,52,54,56,58,60,62,64,66,68, - 70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110, - 112,114,116,0,16,2,0,32,32,141,141,2,0,84,84,96,96,3,0,4,4,8,8,12,12, - 4,0,4,4,7,8,12,12,147,147,2,0,96,96,140,140,2,0,4,4,8,8,2,0,11,11,42, - 43,2,0,62,62,93,93,2,0,133,133,143,143,3,0,17,17,95,95,170,170,2,0,79, - 79,98,98,1,0,196,197,2,0,208,208,228,228,8,0,37,37,76,76,108,108,110, - 110,132,132,145,145,185,185,190,190,13,0,2,24,26,36,38,75,77,81,83,107, - 109,109,111,112,114,115,117,130,133,144,146,184,186,189,191,192,4,0,36, - 36,62,62,77,77,91,91,1043,0,120,1,0,0,0,2,124,1,0,0,0,4,138,1,0,0,0,6, - 141,1,0,0,0,8,190,1,0,0,0,10,193,1,0,0,0,12,199,1,0,0,0,14,203,1,0,0, - 0,16,209,1,0,0,0,18,227,1,0,0,0,20,230,1,0,0,0,22,233,1,0,0,0,24,243, - 1,0,0,0,26,246,1,0,0,0,28,250,1,0,0,0,30,283,1,0,0,0,32,285,1,0,0,0,34, - 288,1,0,0,0,36,303,1,0,0,0,38,365,1,0,0,0,40,370,1,0,0,0,42,381,1,0,0, - 0,44,383,1,0,0,0,46,389,1,0,0,0,48,397,1,0,0,0,50,415,1,0,0,0,52,417, - 1,0,0,0,54,425,1,0,0,0,56,430,1,0,0,0,58,438,1,0,0,0,60,442,1,0,0,0,62, - 446,1,0,0,0,64,455,1,0,0,0,66,469,1,0,0,0,68,471,1,0,0,0,70,521,1,0,0, - 0,72,523,1,0,0,0,74,660,1,0,0,0,76,758,1,0,0,0,78,768,1,0,0,0,80,789, - 1,0,0,0,82,794,1,0,0,0,84,812,1,0,0,0,86,821,1,0,0,0,88,823,1,0,0,0,90, - 839,1,0,0,0,92,852,1,0,0,0,94,862,1,0,0,0,96,866,1,0,0,0,98,874,1,0,0, - 0,100,884,1,0,0,0,102,887,1,0,0,0,104,900,1,0,0,0,106,902,1,0,0,0,108, - 904,1,0,0,0,110,906,1,0,0,0,112,910,1,0,0,0,114,915,1,0,0,0,116,917,1, - 0,0,0,118,121,3,2,1,0,119,121,3,6,3,0,120,118,1,0,0,0,120,119,1,0,0,0, - 121,122,1,0,0,0,122,123,5,0,0,1,123,1,1,0,0,0,124,130,3,4,2,0,125,126, - 5,176,0,0,126,127,5,4,0,0,127,129,3,4,2,0,128,125,1,0,0,0,129,132,1,0, - 0,0,130,128,1,0,0,0,130,131,1,0,0,0,131,3,1,0,0,0,132,130,1,0,0,0,133, - 139,3,6,3,0,134,135,5,220,0,0,135,136,3,2,1,0,136,137,5,236,0,0,137,139, - 1,0,0,0,138,133,1,0,0,0,138,134,1,0,0,0,139,5,1,0,0,0,140,142,3,8,4,0, - 141,140,1,0,0,0,141,142,1,0,0,0,142,143,1,0,0,0,143,145,5,146,0,0,144, - 146,5,49,0,0,145,144,1,0,0,0,145,146,1,0,0,0,146,148,1,0,0,0,147,149, - 3,10,5,0,148,147,1,0,0,0,148,149,1,0,0,0,149,150,1,0,0,0,150,152,3,72, - 36,0,151,153,3,12,6,0,152,151,1,0,0,0,152,153,1,0,0,0,153,155,1,0,0,0, - 154,156,3,14,7,0,155,154,1,0,0,0,155,156,1,0,0,0,156,158,1,0,0,0,157, - 159,3,18,9,0,158,157,1,0,0,0,158,159,1,0,0,0,159,161,1,0,0,0,160,162, - 3,20,10,0,161,160,1,0,0,0,161,162,1,0,0,0,162,164,1,0,0,0,163,165,3,22, - 11,0,164,163,1,0,0,0,164,165,1,0,0,0,165,168,1,0,0,0,166,167,5,189,0, - 0,167,169,7,0,0,0,168,166,1,0,0,0,168,169,1,0,0,0,169,172,1,0,0,0,170, - 171,5,189,0,0,171,173,5,169,0,0,172,170,1,0,0,0,172,173,1,0,0,0,173,175, - 1,0,0,0,174,176,3,24,12,0,175,174,1,0,0,0,175,176,1,0,0,0,176,178,1,0, - 0,0,177,179,3,16,8,0,178,177,1,0,0,0,178,179,1,0,0,0,179,181,1,0,0,0, - 180,182,3,26,13,0,181,180,1,0,0,0,181,182,1,0,0,0,182,185,1,0,0,0,183, - 186,3,30,15,0,184,186,3,32,16,0,185,183,1,0,0,0,185,184,1,0,0,0,185,186, - 1,0,0,0,186,188,1,0,0,0,187,189,3,34,17,0,188,187,1,0,0,0,188,189,1,0, - 0,0,189,7,1,0,0,0,190,191,5,189,0,0,191,192,3,82,41,0,192,9,1,0,0,0,193, - 194,5,168,0,0,194,197,5,197,0,0,195,196,5,189,0,0,196,198,5,164,0,0,197, - 195,1,0,0,0,197,198,1,0,0,0,198,11,1,0,0,0,199,200,5,68,0,0,200,201,3, - 36,18,0,201,13,1,0,0,0,202,204,7,1,0,0,203,202,1,0,0,0,203,204,1,0,0, - 0,204,205,1,0,0,0,205,206,5,9,0,0,206,207,5,90,0,0,207,208,3,72,36,0, - 208,15,1,0,0,0,209,210,5,188,0,0,210,211,3,114,57,0,211,212,5,10,0,0, - 212,213,5,220,0,0,213,214,3,56,28,0,214,224,5,236,0,0,215,216,5,206,0, - 0,216,217,3,114,57,0,217,218,5,10,0,0,218,219,5,220,0,0,219,220,3,56, - 28,0,220,221,5,236,0,0,221,223,1,0,0,0,222,215,1,0,0,0,223,226,1,0,0, - 0,224,222,1,0,0,0,224,225,1,0,0,0,225,17,1,0,0,0,226,224,1,0,0,0,227, - 228,5,129,0,0,228,229,3,74,37,0,229,19,1,0,0,0,230,231,5,187,0,0,231, - 232,3,74,37,0,232,21,1,0,0,0,233,234,5,73,0,0,234,241,5,18,0,0,235,236, - 7,0,0,0,236,237,5,220,0,0,237,238,3,72,36,0,238,239,5,236,0,0,239,242, - 1,0,0,0,240,242,3,72,36,0,241,235,1,0,0,0,241,240,1,0,0,0,242,23,1,0, - 0,0,243,244,5,74,0,0,244,245,3,74,37,0,245,25,1,0,0,0,246,247,5,122,0, - 0,247,248,5,18,0,0,248,249,3,46,23,0,249,27,1,0,0,0,250,251,5,122,0,0, - 251,252,5,18,0,0,252,253,3,72,36,0,253,29,1,0,0,0,254,255,5,99,0,0,255, - 258,3,74,37,0,256,257,5,206,0,0,257,259,3,74,37,0,258,256,1,0,0,0,258, - 259,1,0,0,0,259,264,1,0,0,0,260,261,5,189,0,0,261,265,5,164,0,0,262,263, - 5,18,0,0,263,265,3,72,36,0,264,260,1,0,0,0,264,262,1,0,0,0,264,265,1, - 0,0,0,265,284,1,0,0,0,266,267,5,99,0,0,267,270,3,74,37,0,268,269,5,189, - 0,0,269,271,5,164,0,0,270,268,1,0,0,0,270,271,1,0,0,0,271,272,1,0,0,0, - 272,273,5,118,0,0,273,274,3,74,37,0,274,284,1,0,0,0,275,276,5,99,0,0, - 276,277,3,74,37,0,277,278,5,118,0,0,278,281,3,74,37,0,279,280,5,18,0, - 0,280,282,3,72,36,0,281,279,1,0,0,0,281,282,1,0,0,0,282,284,1,0,0,0,283, - 254,1,0,0,0,283,266,1,0,0,0,283,275,1,0,0,0,284,31,1,0,0,0,285,286,5, - 118,0,0,286,287,3,74,37,0,287,33,1,0,0,0,288,289,5,150,0,0,289,290,3, - 52,26,0,290,35,1,0,0,0,291,292,6,18,-1,0,292,294,3,90,45,0,293,295,5, - 61,0,0,294,293,1,0,0,0,294,295,1,0,0,0,295,297,1,0,0,0,296,298,3,44,22, - 0,297,296,1,0,0,0,297,298,1,0,0,0,298,304,1,0,0,0,299,300,5,220,0,0,300, - 301,3,36,18,0,301,302,5,236,0,0,302,304,1,0,0,0,303,291,1,0,0,0,303,299, - 1,0,0,0,304,319,1,0,0,0,305,306,10,3,0,0,306,307,3,40,20,0,307,308,3, - 36,18,4,308,318,1,0,0,0,309,311,10,4,0,0,310,312,3,38,19,0,311,310,1, - 0,0,0,311,312,1,0,0,0,312,313,1,0,0,0,313,314,5,90,0,0,314,315,3,36,18, - 0,315,316,3,42,21,0,316,318,1,0,0,0,317,305,1,0,0,0,317,309,1,0,0,0,318, - 321,1,0,0,0,319,317,1,0,0,0,319,320,1,0,0,0,320,37,1,0,0,0,321,319,1, - 0,0,0,322,324,7,2,0,0,323,322,1,0,0,0,323,324,1,0,0,0,324,325,1,0,0,0, - 325,332,5,84,0,0,326,328,5,84,0,0,327,329,7,2,0,0,328,327,1,0,0,0,328, - 329,1,0,0,0,329,332,1,0,0,0,330,332,7,2,0,0,331,323,1,0,0,0,331,326,1, - 0,0,0,331,330,1,0,0,0,332,366,1,0,0,0,333,335,7,3,0,0,334,333,1,0,0,0, - 334,335,1,0,0,0,335,336,1,0,0,0,336,338,7,4,0,0,337,339,5,123,0,0,338, - 337,1,0,0,0,338,339,1,0,0,0,339,348,1,0,0,0,340,342,7,4,0,0,341,343,5, - 123,0,0,342,341,1,0,0,0,342,343,1,0,0,0,343,345,1,0,0,0,344,346,7,3,0, - 0,345,344,1,0,0,0,345,346,1,0,0,0,346,348,1,0,0,0,347,334,1,0,0,0,347, - 340,1,0,0,0,348,366,1,0,0,0,349,351,7,5,0,0,350,349,1,0,0,0,350,351,1, - 0,0,0,351,352,1,0,0,0,352,354,5,69,0,0,353,355,5,123,0,0,354,353,1,0, - 0,0,354,355,1,0,0,0,355,364,1,0,0,0,356,358,5,69,0,0,357,359,5,123,0, - 0,358,357,1,0,0,0,358,359,1,0,0,0,359,361,1,0,0,0,360,362,7,5,0,0,361, - 360,1,0,0,0,361,362,1,0,0,0,362,364,1,0,0,0,363,350,1,0,0,0,363,356,1, - 0,0,0,364,366,1,0,0,0,365,331,1,0,0,0,365,347,1,0,0,0,365,363,1,0,0,0, - 366,39,1,0,0,0,367,368,5,31,0,0,368,371,5,90,0,0,369,371,5,206,0,0,370, - 367,1,0,0,0,370,369,1,0,0,0,371,41,1,0,0,0,372,373,5,119,0,0,373,382, - 3,72,36,0,374,375,5,179,0,0,375,376,5,220,0,0,376,377,3,72,36,0,377,378, - 5,236,0,0,378,382,1,0,0,0,379,380,5,179,0,0,380,382,3,72,36,0,381,372, - 1,0,0,0,381,374,1,0,0,0,381,379,1,0,0,0,382,43,1,0,0,0,383,384,5,144, - 0,0,384,387,3,50,25,0,385,386,5,118,0,0,386,388,3,50,25,0,387,385,1,0, - 0,0,387,388,1,0,0,0,388,45,1,0,0,0,389,394,3,48,24,0,390,391,5,206,0, - 0,391,393,3,48,24,0,392,390,1,0,0,0,393,396,1,0,0,0,394,392,1,0,0,0,394, - 395,1,0,0,0,395,47,1,0,0,0,396,394,1,0,0,0,397,399,3,74,37,0,398,400, - 7,6,0,0,399,398,1,0,0,0,399,400,1,0,0,0,400,403,1,0,0,0,401,402,5,117, - 0,0,402,404,7,7,0,0,403,401,1,0,0,0,403,404,1,0,0,0,404,407,1,0,0,0,405, - 406,5,26,0,0,406,408,5,199,0,0,407,405,1,0,0,0,407,408,1,0,0,0,408,49, - 1,0,0,0,409,416,5,200,0,0,410,413,3,102,51,0,411,412,5,238,0,0,412,414, - 3,102,51,0,413,411,1,0,0,0,413,414,1,0,0,0,414,416,1,0,0,0,415,409,1, - 0,0,0,415,410,1,0,0,0,416,51,1,0,0,0,417,422,3,54,27,0,418,419,5,206, - 0,0,419,421,3,54,27,0,420,418,1,0,0,0,421,424,1,0,0,0,422,420,1,0,0,0, - 422,423,1,0,0,0,423,53,1,0,0,0,424,422,1,0,0,0,425,426,3,114,57,0,426, - 427,5,212,0,0,427,428,3,104,52,0,428,55,1,0,0,0,429,431,3,58,29,0,430, - 429,1,0,0,0,430,431,1,0,0,0,431,433,1,0,0,0,432,434,3,60,30,0,433,432, - 1,0,0,0,433,434,1,0,0,0,434,436,1,0,0,0,435,437,3,62,31,0,436,435,1,0, - 0,0,436,437,1,0,0,0,437,57,1,0,0,0,438,439,5,126,0,0,439,440,5,18,0,0, - 440,441,3,72,36,0,441,59,1,0,0,0,442,443,5,122,0,0,443,444,5,18,0,0,444, - 445,3,46,23,0,445,61,1,0,0,0,446,447,7,8,0,0,447,448,3,64,32,0,448,63, - 1,0,0,0,449,456,3,66,33,0,450,451,5,16,0,0,451,452,3,66,33,0,452,453, - 5,6,0,0,453,454,3,66,33,0,454,456,1,0,0,0,455,449,1,0,0,0,455,450,1,0, - 0,0,456,65,1,0,0,0,457,458,5,33,0,0,458,470,5,142,0,0,459,460,5,175,0, - 0,460,470,5,128,0,0,461,462,5,175,0,0,462,470,5,64,0,0,463,464,3,102, - 51,0,464,465,5,128,0,0,465,470,1,0,0,0,466,467,3,102,51,0,467,468,5,64, - 0,0,468,470,1,0,0,0,469,457,1,0,0,0,469,459,1,0,0,0,469,461,1,0,0,0,469, - 463,1,0,0,0,469,466,1,0,0,0,470,67,1,0,0,0,471,472,3,74,37,0,472,473, - 5,0,0,1,473,69,1,0,0,0,474,522,3,114,57,0,475,476,3,114,57,0,476,477, - 5,220,0,0,477,478,3,114,57,0,478,485,3,70,35,0,479,480,5,206,0,0,480, - 481,3,114,57,0,481,482,3,70,35,0,482,484,1,0,0,0,483,479,1,0,0,0,484, - 487,1,0,0,0,485,483,1,0,0,0,485,486,1,0,0,0,486,488,1,0,0,0,487,485,1, - 0,0,0,488,489,5,236,0,0,489,522,1,0,0,0,490,491,3,114,57,0,491,492,5, - 220,0,0,492,497,3,116,58,0,493,494,5,206,0,0,494,496,3,116,58,0,495,493, - 1,0,0,0,496,499,1,0,0,0,497,495,1,0,0,0,497,498,1,0,0,0,498,500,1,0,0, - 0,499,497,1,0,0,0,500,501,5,236,0,0,501,522,1,0,0,0,502,503,3,114,57, - 0,503,504,5,220,0,0,504,509,3,70,35,0,505,506,5,206,0,0,506,508,3,70, - 35,0,507,505,1,0,0,0,508,511,1,0,0,0,509,507,1,0,0,0,509,510,1,0,0,0, - 510,512,1,0,0,0,511,509,1,0,0,0,512,513,5,236,0,0,513,522,1,0,0,0,514, - 515,3,114,57,0,515,517,5,220,0,0,516,518,3,72,36,0,517,516,1,0,0,0,517, - 518,1,0,0,0,518,519,1,0,0,0,519,520,5,236,0,0,520,522,1,0,0,0,521,474, - 1,0,0,0,521,475,1,0,0,0,521,490,1,0,0,0,521,502,1,0,0,0,521,514,1,0,0, - 0,522,71,1,0,0,0,523,528,3,74,37,0,524,525,5,206,0,0,525,527,3,74,37, - 0,526,524,1,0,0,0,527,530,1,0,0,0,528,526,1,0,0,0,528,529,1,0,0,0,529, - 73,1,0,0,0,530,528,1,0,0,0,531,532,6,37,-1,0,532,534,5,19,0,0,533,535, - 3,74,37,0,534,533,1,0,0,0,534,535,1,0,0,0,535,541,1,0,0,0,536,537,5,186, - 0,0,537,538,3,74,37,0,538,539,5,163,0,0,539,540,3,74,37,0,540,542,1,0, - 0,0,541,536,1,0,0,0,542,543,1,0,0,0,543,541,1,0,0,0,543,544,1,0,0,0,544, - 547,1,0,0,0,545,546,5,52,0,0,546,548,3,74,37,0,547,545,1,0,0,0,547,548, - 1,0,0,0,548,549,1,0,0,0,549,550,5,53,0,0,550,661,1,0,0,0,551,552,5,20, - 0,0,552,553,5,220,0,0,553,554,3,74,37,0,554,555,5,10,0,0,555,556,3,70, - 35,0,556,557,5,236,0,0,557,661,1,0,0,0,558,559,5,36,0,0,559,661,5,199, - 0,0,560,561,5,59,0,0,561,562,5,220,0,0,562,563,3,106,53,0,563,564,5,68, - 0,0,564,565,3,74,37,0,565,566,5,236,0,0,566,661,1,0,0,0,567,568,5,86, - 0,0,568,569,3,74,37,0,569,570,3,106,53,0,570,661,1,0,0,0,571,572,5,155, - 0,0,572,573,5,220,0,0,573,574,3,74,37,0,574,575,5,68,0,0,575,578,3,74, - 37,0,576,577,5,65,0,0,577,579,3,74,37,0,578,576,1,0,0,0,578,579,1,0,0, - 0,579,580,1,0,0,0,580,581,5,236,0,0,581,661,1,0,0,0,582,583,5,166,0,0, - 583,661,5,199,0,0,584,585,5,171,0,0,585,586,5,220,0,0,586,587,7,9,0,0, - 587,588,5,199,0,0,588,589,5,68,0,0,589,590,3,74,37,0,590,591,5,236,0, - 0,591,661,1,0,0,0,592,593,3,114,57,0,593,595,5,220,0,0,594,596,3,72,36, - 0,595,594,1,0,0,0,595,596,1,0,0,0,596,597,1,0,0,0,597,598,5,236,0,0,598, - 599,1,0,0,0,599,600,5,125,0,0,600,601,5,220,0,0,601,602,3,56,28,0,602, - 603,5,236,0,0,603,661,1,0,0,0,604,605,3,114,57,0,605,607,5,220,0,0,606, - 608,3,72,36,0,607,606,1,0,0,0,607,608,1,0,0,0,608,609,1,0,0,0,609,610, - 5,236,0,0,610,611,1,0,0,0,611,612,5,125,0,0,612,613,3,114,57,0,613,661, - 1,0,0,0,614,620,3,114,57,0,615,617,5,220,0,0,616,618,3,72,36,0,617,616, - 1,0,0,0,617,618,1,0,0,0,618,619,1,0,0,0,619,621,5,236,0,0,620,615,1,0, - 0,0,620,621,1,0,0,0,621,622,1,0,0,0,622,624,5,220,0,0,623,625,5,49,0, - 0,624,623,1,0,0,0,624,625,1,0,0,0,625,627,1,0,0,0,626,628,3,76,38,0,627, - 626,1,0,0,0,627,628,1,0,0,0,628,629,1,0,0,0,629,630,5,236,0,0,630,661, - 1,0,0,0,631,661,3,104,52,0,632,633,5,208,0,0,633,661,3,74,37,18,634,635, - 5,115,0,0,635,661,3,74,37,12,636,637,3,94,47,0,637,638,5,210,0,0,638, - 640,1,0,0,0,639,636,1,0,0,0,639,640,1,0,0,0,640,641,1,0,0,0,641,661,5, - 202,0,0,642,643,5,220,0,0,643,644,3,2,1,0,644,645,5,236,0,0,645,661,1, - 0,0,0,646,647,5,220,0,0,647,648,3,74,37,0,648,649,5,236,0,0,649,661,1, - 0,0,0,650,651,5,220,0,0,651,652,3,72,36,0,652,653,5,236,0,0,653,661,1, - 0,0,0,654,656,5,219,0,0,655,657,3,72,36,0,656,655,1,0,0,0,656,657,1,0, - 0,0,657,658,1,0,0,0,658,661,5,235,0,0,659,661,3,86,43,0,660,531,1,0,0, - 0,660,551,1,0,0,0,660,558,1,0,0,0,660,560,1,0,0,0,660,567,1,0,0,0,660, - 571,1,0,0,0,660,582,1,0,0,0,660,584,1,0,0,0,660,592,1,0,0,0,660,604,1, - 0,0,0,660,614,1,0,0,0,660,631,1,0,0,0,660,632,1,0,0,0,660,634,1,0,0,0, - 660,639,1,0,0,0,660,642,1,0,0,0,660,646,1,0,0,0,660,650,1,0,0,0,660,654, - 1,0,0,0,660,659,1,0,0,0,661,755,1,0,0,0,662,666,10,17,0,0,663,667,5,202, - 0,0,664,667,5,238,0,0,665,667,5,227,0,0,666,663,1,0,0,0,666,664,1,0,0, - 0,666,665,1,0,0,0,667,668,1,0,0,0,668,754,3,74,37,18,669,673,10,16,0, - 0,670,674,5,228,0,0,671,674,5,208,0,0,672,674,5,207,0,0,673,670,1,0,0, - 0,673,671,1,0,0,0,673,672,1,0,0,0,674,675,1,0,0,0,675,754,3,74,37,17, - 676,701,10,15,0,0,677,702,5,211,0,0,678,702,5,212,0,0,679,702,5,223,0, - 0,680,702,5,221,0,0,681,702,5,222,0,0,682,702,5,213,0,0,683,702,5,214, - 0,0,684,686,5,115,0,0,685,684,1,0,0,0,685,686,1,0,0,0,686,687,1,0,0,0, - 687,689,5,80,0,0,688,690,5,25,0,0,689,688,1,0,0,0,689,690,1,0,0,0,690, - 702,1,0,0,0,691,693,5,115,0,0,692,691,1,0,0,0,692,693,1,0,0,0,693,694, - 1,0,0,0,694,702,7,10,0,0,695,702,5,232,0,0,696,702,5,233,0,0,697,702, - 5,225,0,0,698,702,5,216,0,0,699,702,5,217,0,0,700,702,5,224,0,0,701,677, - 1,0,0,0,701,678,1,0,0,0,701,679,1,0,0,0,701,680,1,0,0,0,701,681,1,0,0, - 0,701,682,1,0,0,0,701,683,1,0,0,0,701,685,1,0,0,0,701,692,1,0,0,0,701, - 695,1,0,0,0,701,696,1,0,0,0,701,697,1,0,0,0,701,698,1,0,0,0,701,699,1, - 0,0,0,701,700,1,0,0,0,702,703,1,0,0,0,703,754,3,74,37,16,704,705,10,13, - 0,0,705,706,5,226,0,0,706,754,3,74,37,14,707,708,10,11,0,0,708,709,5, - 6,0,0,709,754,3,74,37,12,710,711,10,10,0,0,711,712,5,121,0,0,712,754, - 3,74,37,11,713,715,10,9,0,0,714,716,5,115,0,0,715,714,1,0,0,0,715,716, - 1,0,0,0,716,717,1,0,0,0,717,718,5,16,0,0,718,719,3,74,37,0,719,720,5, - 6,0,0,720,721,3,74,37,10,721,754,1,0,0,0,722,723,10,8,0,0,723,724,5,229, - 0,0,724,725,3,74,37,0,725,726,5,205,0,0,726,727,3,74,37,8,727,754,1,0, - 0,0,728,729,10,21,0,0,729,730,5,219,0,0,730,731,3,74,37,0,731,732,5,235, - 0,0,732,754,1,0,0,0,733,734,10,20,0,0,734,735,5,210,0,0,735,754,5,197, - 0,0,736,737,10,19,0,0,737,738,5,210,0,0,738,754,3,114,57,0,739,740,10, - 14,0,0,740,742,5,88,0,0,741,743,5,115,0,0,742,741,1,0,0,0,742,743,1,0, - 0,0,743,744,1,0,0,0,744,754,5,116,0,0,745,751,10,7,0,0,746,752,3,112, - 56,0,747,748,5,10,0,0,748,752,3,114,57,0,749,750,5,10,0,0,750,752,5,199, - 0,0,751,746,1,0,0,0,751,747,1,0,0,0,751,749,1,0,0,0,752,754,1,0,0,0,753, - 662,1,0,0,0,753,669,1,0,0,0,753,676,1,0,0,0,753,704,1,0,0,0,753,707,1, - 0,0,0,753,710,1,0,0,0,753,713,1,0,0,0,753,722,1,0,0,0,753,728,1,0,0,0, - 753,733,1,0,0,0,753,736,1,0,0,0,753,739,1,0,0,0,753,745,1,0,0,0,754,757, - 1,0,0,0,755,753,1,0,0,0,755,756,1,0,0,0,756,75,1,0,0,0,757,755,1,0,0, - 0,758,763,3,78,39,0,759,760,5,206,0,0,760,762,3,78,39,0,761,759,1,0,0, - 0,762,765,1,0,0,0,763,761,1,0,0,0,763,764,1,0,0,0,764,77,1,0,0,0,765, - 763,1,0,0,0,766,769,3,80,40,0,767,769,3,74,37,0,768,766,1,0,0,0,768,767, - 1,0,0,0,769,79,1,0,0,0,770,771,5,220,0,0,771,776,3,114,57,0,772,773,5, - 206,0,0,773,775,3,114,57,0,774,772,1,0,0,0,775,778,1,0,0,0,776,774,1, - 0,0,0,776,777,1,0,0,0,777,779,1,0,0,0,778,776,1,0,0,0,779,780,5,236,0, - 0,780,790,1,0,0,0,781,786,3,114,57,0,782,783,5,206,0,0,783,785,3,114, - 57,0,784,782,1,0,0,0,785,788,1,0,0,0,786,784,1,0,0,0,786,787,1,0,0,0, - 787,790,1,0,0,0,788,786,1,0,0,0,789,770,1,0,0,0,789,781,1,0,0,0,790,791, - 1,0,0,0,791,792,5,201,0,0,792,793,3,74,37,0,793,81,1,0,0,0,794,799,3, - 84,42,0,795,796,5,206,0,0,796,798,3,84,42,0,797,795,1,0,0,0,798,801,1, - 0,0,0,799,797,1,0,0,0,799,800,1,0,0,0,800,83,1,0,0,0,801,799,1,0,0,0, - 802,803,3,114,57,0,803,804,5,10,0,0,804,805,5,220,0,0,805,806,3,2,1,0, - 806,807,5,236,0,0,807,813,1,0,0,0,808,809,3,74,37,0,809,810,5,10,0,0, - 810,811,3,114,57,0,811,813,1,0,0,0,812,802,1,0,0,0,812,808,1,0,0,0,813, - 85,1,0,0,0,814,822,5,200,0,0,815,816,3,94,47,0,816,817,5,210,0,0,817, - 819,1,0,0,0,818,815,1,0,0,0,818,819,1,0,0,0,819,820,1,0,0,0,820,822,3, - 88,44,0,821,814,1,0,0,0,821,818,1,0,0,0,822,87,1,0,0,0,823,828,3,114, - 57,0,824,825,5,210,0,0,825,827,3,114,57,0,826,824,1,0,0,0,827,830,1,0, - 0,0,828,826,1,0,0,0,828,829,1,0,0,0,829,89,1,0,0,0,830,828,1,0,0,0,831, - 832,6,45,-1,0,832,840,3,94,47,0,833,840,3,92,46,0,834,835,5,220,0,0,835, - 836,3,2,1,0,836,837,5,236,0,0,837,840,1,0,0,0,838,840,5,200,0,0,839,831, - 1,0,0,0,839,833,1,0,0,0,839,834,1,0,0,0,839,838,1,0,0,0,840,849,1,0,0, - 0,841,845,10,2,0,0,842,846,3,112,56,0,843,844,5,10,0,0,844,846,3,114, - 57,0,845,842,1,0,0,0,845,843,1,0,0,0,846,848,1,0,0,0,847,841,1,0,0,0, - 848,851,1,0,0,0,849,847,1,0,0,0,849,850,1,0,0,0,850,91,1,0,0,0,851,849, - 1,0,0,0,852,853,3,114,57,0,853,855,5,220,0,0,854,856,3,96,48,0,855,854, - 1,0,0,0,855,856,1,0,0,0,856,857,1,0,0,0,857,858,5,236,0,0,858,93,1,0, - 0,0,859,860,3,98,49,0,860,861,5,210,0,0,861,863,1,0,0,0,862,859,1,0,0, - 0,862,863,1,0,0,0,863,864,1,0,0,0,864,865,3,114,57,0,865,95,1,0,0,0,866, - 871,3,74,37,0,867,868,5,206,0,0,868,870,3,74,37,0,869,867,1,0,0,0,870, - 873,1,0,0,0,871,869,1,0,0,0,871,872,1,0,0,0,872,97,1,0,0,0,873,871,1, - 0,0,0,874,875,3,114,57,0,875,99,1,0,0,0,876,885,5,195,0,0,877,878,5,210, - 0,0,878,885,7,11,0,0,879,880,5,197,0,0,880,882,5,210,0,0,881,883,7,11, - 0,0,882,881,1,0,0,0,882,883,1,0,0,0,883,885,1,0,0,0,884,876,1,0,0,0,884, - 877,1,0,0,0,884,879,1,0,0,0,885,101,1,0,0,0,886,888,7,12,0,0,887,886, - 1,0,0,0,887,888,1,0,0,0,888,895,1,0,0,0,889,896,3,100,50,0,890,896,5, - 196,0,0,891,896,5,197,0,0,892,896,5,198,0,0,893,896,5,82,0,0,894,896, - 5,113,0,0,895,889,1,0,0,0,895,890,1,0,0,0,895,891,1,0,0,0,895,892,1,0, - 0,0,895,893,1,0,0,0,895,894,1,0,0,0,896,103,1,0,0,0,897,901,3,102,51, - 0,898,901,5,199,0,0,899,901,5,116,0,0,900,897,1,0,0,0,900,898,1,0,0,0, - 900,899,1,0,0,0,901,105,1,0,0,0,902,903,7,13,0,0,903,107,1,0,0,0,904, - 905,7,14,0,0,905,109,1,0,0,0,906,907,7,15,0,0,907,111,1,0,0,0,908,911, - 5,194,0,0,909,911,3,110,55,0,910,908,1,0,0,0,910,909,1,0,0,0,911,113, - 1,0,0,0,912,916,5,194,0,0,913,916,3,106,53,0,914,916,3,108,54,0,915,912, - 1,0,0,0,915,913,1,0,0,0,915,914,1,0,0,0,916,115,1,0,0,0,917,918,5,199, - 0,0,918,919,5,212,0,0,919,920,3,102,51,0,920,117,1,0,0,0,115,120,130, - 138,141,145,148,152,155,158,161,164,168,172,175,178,181,185,188,197,203, - 224,241,258,264,270,281,283,294,297,303,311,317,319,323,328,331,334,338, - 342,345,347,350,354,358,361,363,365,370,381,387,394,399,403,407,413,415, - 422,430,433,436,455,469,485,497,509,517,521,528,534,543,547,578,595,607, - 617,620,624,627,639,656,660,666,673,685,689,692,701,715,742,751,753,755, - 763,768,776,786,789,799,812,818,821,828,839,845,849,855,862,871,882,884, - 887,895,900,910,915 + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 3,37,586,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,3,37,603,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,3,37,615,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 3,37,625,8,37,1,37,3,37,628,8,37,1,37,1,37,3,37,632,8,37,1,37,3,37,635, + 8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,648, + 8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,3,37,665,8,37,1,37,1,37,3,37,669,8,37,1,37,1,37,1,37,1,37,3, + 37,675,8,37,1,37,1,37,1,37,1,37,1,37,3,37,682,8,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,3,37,694,8,37,1,37,1,37,3,37,698,8,37,1, + 37,3,37,701,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,710,8,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,724,8,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,751,8,37, + 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,760,8,37,5,37,762,8,37,10,37, + 12,37,765,9,37,1,38,1,38,1,38,5,38,770,8,38,10,38,12,38,773,9,38,1,39, + 1,39,3,39,777,8,39,1,40,1,40,1,40,1,40,5,40,783,8,40,10,40,12,40,786, + 9,40,1,40,1,40,1,40,1,40,1,40,5,40,793,8,40,10,40,12,40,796,9,40,3,40, + 798,8,40,1,40,1,40,1,40,1,41,1,41,1,41,5,41,806,8,41,10,41,12,41,809, + 9,41,1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, + 1,42,3,42,825,8,42,1,43,1,43,1,43,5,43,830,8,43,10,43,12,43,833,9,43, + 1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,3,44,845,8,44,1,45, + 1,45,1,45,1,45,3,45,851,8,45,1,45,3,45,854,8,45,1,46,1,46,1,46,5,46,859, + 8,46,10,46,12,46,862,9,46,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47,1,47, + 3,47,873,8,47,1,47,1,47,1,47,1,47,3,47,879,8,47,5,47,881,8,47,10,47,12, + 47,884,9,47,1,48,1,48,1,48,3,48,889,8,48,1,48,1,48,1,49,1,49,1,49,3,49, + 896,8,49,1,49,1,49,1,50,1,50,1,50,5,50,903,8,50,10,50,12,50,906,9,50, + 1,51,1,51,1,52,1,52,1,52,1,52,1,52,1,52,3,52,916,8,52,3,52,918,8,52,1, + 53,3,53,921,8,53,1,53,1,53,1,53,1,53,1,53,1,53,3,53,929,8,53,1,54,1,54, + 1,54,3,54,934,8,54,1,55,1,55,1,56,1,56,1,57,1,57,1,58,1,58,3,58,944,8, + 58,1,59,1,59,1,59,3,59,949,8,59,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1, + 61,1,61,0,3,36,74,94,62,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,52,54,56,58,60,62,64,66,68,70,72,74,76,78, + 80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118, + 120,122,0,16,2,0,32,32,141,141,2,0,84,84,96,96,3,0,4,4,8,8,12,12,4,0, + 4,4,7,8,12,12,147,147,2,0,96,96,140,140,2,0,4,4,8,8,2,0,11,11,42,43,2, + 0,62,62,93,93,2,0,133,133,143,143,3,0,17,17,95,95,170,170,2,0,79,79,98, + 98,1,0,197,198,2,0,208,208,228,228,8,0,37,37,76,76,108,108,110,110,132, + 132,145,145,185,185,190,190,13,0,2,24,26,36,38,75,77,81,83,107,109,109, + 111,112,114,115,117,130,133,144,146,184,186,189,191,192,4,0,36,36,62, + 62,77,77,91,91,1083,0,127,1,0,0,0,2,131,1,0,0,0,4,145,1,0,0,0,6,148,1, + 0,0,0,8,197,1,0,0,0,10,200,1,0,0,0,12,206,1,0,0,0,14,210,1,0,0,0,16,216, + 1,0,0,0,18,234,1,0,0,0,20,237,1,0,0,0,22,240,1,0,0,0,24,250,1,0,0,0,26, + 253,1,0,0,0,28,257,1,0,0,0,30,290,1,0,0,0,32,292,1,0,0,0,34,295,1,0,0, + 0,36,310,1,0,0,0,38,372,1,0,0,0,40,377,1,0,0,0,42,388,1,0,0,0,44,390, + 1,0,0,0,46,396,1,0,0,0,48,404,1,0,0,0,50,422,1,0,0,0,52,424,1,0,0,0,54, + 432,1,0,0,0,56,437,1,0,0,0,58,445,1,0,0,0,60,449,1,0,0,0,62,453,1,0,0, + 0,64,462,1,0,0,0,66,476,1,0,0,0,68,478,1,0,0,0,70,528,1,0,0,0,72,530, + 1,0,0,0,74,668,1,0,0,0,76,766,1,0,0,0,78,776,1,0,0,0,80,797,1,0,0,0,82, + 802,1,0,0,0,84,824,1,0,0,0,86,826,1,0,0,0,88,844,1,0,0,0,90,853,1,0,0, + 0,92,855,1,0,0,0,94,872,1,0,0,0,96,885,1,0,0,0,98,895,1,0,0,0,100,899, + 1,0,0,0,102,907,1,0,0,0,104,917,1,0,0,0,106,920,1,0,0,0,108,933,1,0,0, + 0,110,935,1,0,0,0,112,937,1,0,0,0,114,939,1,0,0,0,116,943,1,0,0,0,118, + 948,1,0,0,0,120,950,1,0,0,0,122,954,1,0,0,0,124,128,3,2,1,0,125,128,3, + 6,3,0,126,128,3,82,41,0,127,124,1,0,0,0,127,125,1,0,0,0,127,126,1,0,0, + 0,128,129,1,0,0,0,129,130,5,0,0,1,130,1,1,0,0,0,131,137,3,4,2,0,132,133, + 5,176,0,0,133,134,5,4,0,0,134,136,3,4,2,0,135,132,1,0,0,0,136,139,1,0, + 0,0,137,135,1,0,0,0,137,138,1,0,0,0,138,3,1,0,0,0,139,137,1,0,0,0,140, + 146,3,6,3,0,141,142,5,220,0,0,142,143,3,2,1,0,143,144,5,236,0,0,144,146, + 1,0,0,0,145,140,1,0,0,0,145,141,1,0,0,0,146,5,1,0,0,0,147,149,3,8,4,0, + 148,147,1,0,0,0,148,149,1,0,0,0,149,150,1,0,0,0,150,152,5,146,0,0,151, + 153,5,49,0,0,152,151,1,0,0,0,152,153,1,0,0,0,153,155,1,0,0,0,154,156, + 3,10,5,0,155,154,1,0,0,0,155,156,1,0,0,0,156,157,1,0,0,0,157,159,3,72, + 36,0,158,160,3,12,6,0,159,158,1,0,0,0,159,160,1,0,0,0,160,162,1,0,0,0, + 161,163,3,14,7,0,162,161,1,0,0,0,162,163,1,0,0,0,163,165,1,0,0,0,164, + 166,3,18,9,0,165,164,1,0,0,0,165,166,1,0,0,0,166,168,1,0,0,0,167,169, + 3,20,10,0,168,167,1,0,0,0,168,169,1,0,0,0,169,171,1,0,0,0,170,172,3,22, + 11,0,171,170,1,0,0,0,171,172,1,0,0,0,172,175,1,0,0,0,173,174,5,189,0, + 0,174,176,7,0,0,0,175,173,1,0,0,0,175,176,1,0,0,0,176,179,1,0,0,0,177, + 178,5,189,0,0,178,180,5,169,0,0,179,177,1,0,0,0,179,180,1,0,0,0,180,182, + 1,0,0,0,181,183,3,24,12,0,182,181,1,0,0,0,182,183,1,0,0,0,183,185,1,0, + 0,0,184,186,3,16,8,0,185,184,1,0,0,0,185,186,1,0,0,0,186,188,1,0,0,0, + 187,189,3,26,13,0,188,187,1,0,0,0,188,189,1,0,0,0,189,192,1,0,0,0,190, + 193,3,30,15,0,191,193,3,32,16,0,192,190,1,0,0,0,192,191,1,0,0,0,192,193, + 1,0,0,0,193,195,1,0,0,0,194,196,3,34,17,0,195,194,1,0,0,0,195,196,1,0, + 0,0,196,7,1,0,0,0,197,198,5,189,0,0,198,199,3,86,43,0,199,9,1,0,0,0,200, + 201,5,168,0,0,201,204,5,198,0,0,202,203,5,189,0,0,203,205,5,164,0,0,204, + 202,1,0,0,0,204,205,1,0,0,0,205,11,1,0,0,0,206,207,5,68,0,0,207,208,3, + 36,18,0,208,13,1,0,0,0,209,211,7,1,0,0,210,209,1,0,0,0,210,211,1,0,0, + 0,211,212,1,0,0,0,212,213,5,9,0,0,213,214,5,90,0,0,214,215,3,72,36,0, + 215,15,1,0,0,0,216,217,5,188,0,0,217,218,3,118,59,0,218,219,5,10,0,0, + 219,220,5,220,0,0,220,221,3,56,28,0,221,231,5,236,0,0,222,223,5,206,0, + 0,223,224,3,118,59,0,224,225,5,10,0,0,225,226,5,220,0,0,226,227,3,56, + 28,0,227,228,5,236,0,0,228,230,1,0,0,0,229,222,1,0,0,0,230,233,1,0,0, + 0,231,229,1,0,0,0,231,232,1,0,0,0,232,17,1,0,0,0,233,231,1,0,0,0,234, + 235,5,129,0,0,235,236,3,74,37,0,236,19,1,0,0,0,237,238,5,187,0,0,238, + 239,3,74,37,0,239,21,1,0,0,0,240,241,5,73,0,0,241,248,5,18,0,0,242,243, + 7,0,0,0,243,244,5,220,0,0,244,245,3,72,36,0,245,246,5,236,0,0,246,249, + 1,0,0,0,247,249,3,72,36,0,248,242,1,0,0,0,248,247,1,0,0,0,249,23,1,0, + 0,0,250,251,5,74,0,0,251,252,3,74,37,0,252,25,1,0,0,0,253,254,5,122,0, + 0,254,255,5,18,0,0,255,256,3,46,23,0,256,27,1,0,0,0,257,258,5,122,0,0, + 258,259,5,18,0,0,259,260,3,72,36,0,260,29,1,0,0,0,261,262,5,99,0,0,262, + 265,3,74,37,0,263,264,5,206,0,0,264,266,3,74,37,0,265,263,1,0,0,0,265, + 266,1,0,0,0,266,271,1,0,0,0,267,268,5,189,0,0,268,272,5,164,0,0,269,270, + 5,18,0,0,270,272,3,72,36,0,271,267,1,0,0,0,271,269,1,0,0,0,271,272,1, + 0,0,0,272,291,1,0,0,0,273,274,5,99,0,0,274,277,3,74,37,0,275,276,5,189, + 0,0,276,278,5,164,0,0,277,275,1,0,0,0,277,278,1,0,0,0,278,279,1,0,0,0, + 279,280,5,118,0,0,280,281,3,74,37,0,281,291,1,0,0,0,282,283,5,99,0,0, + 283,284,3,74,37,0,284,285,5,118,0,0,285,288,3,74,37,0,286,287,5,18,0, + 0,287,289,3,72,36,0,288,286,1,0,0,0,288,289,1,0,0,0,289,291,1,0,0,0,290, + 261,1,0,0,0,290,273,1,0,0,0,290,282,1,0,0,0,291,31,1,0,0,0,292,293,5, + 118,0,0,293,294,3,74,37,0,294,33,1,0,0,0,295,296,5,150,0,0,296,297,3, + 52,26,0,297,35,1,0,0,0,298,299,6,18,-1,0,299,301,3,94,47,0,300,302,5, + 61,0,0,301,300,1,0,0,0,301,302,1,0,0,0,302,304,1,0,0,0,303,305,3,44,22, + 0,304,303,1,0,0,0,304,305,1,0,0,0,305,311,1,0,0,0,306,307,5,220,0,0,307, + 308,3,36,18,0,308,309,5,236,0,0,309,311,1,0,0,0,310,298,1,0,0,0,310,306, + 1,0,0,0,311,326,1,0,0,0,312,313,10,3,0,0,313,314,3,40,20,0,314,315,3, + 36,18,4,315,325,1,0,0,0,316,318,10,4,0,0,317,319,3,38,19,0,318,317,1, + 0,0,0,318,319,1,0,0,0,319,320,1,0,0,0,320,321,5,90,0,0,321,322,3,36,18, + 0,322,323,3,42,21,0,323,325,1,0,0,0,324,312,1,0,0,0,324,316,1,0,0,0,325, + 328,1,0,0,0,326,324,1,0,0,0,326,327,1,0,0,0,327,37,1,0,0,0,328,326,1, + 0,0,0,329,331,7,2,0,0,330,329,1,0,0,0,330,331,1,0,0,0,331,332,1,0,0,0, + 332,339,5,84,0,0,333,335,5,84,0,0,334,336,7,2,0,0,335,334,1,0,0,0,335, + 336,1,0,0,0,336,339,1,0,0,0,337,339,7,2,0,0,338,330,1,0,0,0,338,333,1, + 0,0,0,338,337,1,0,0,0,339,373,1,0,0,0,340,342,7,3,0,0,341,340,1,0,0,0, + 341,342,1,0,0,0,342,343,1,0,0,0,343,345,7,4,0,0,344,346,5,123,0,0,345, + 344,1,0,0,0,345,346,1,0,0,0,346,355,1,0,0,0,347,349,7,4,0,0,348,350,5, + 123,0,0,349,348,1,0,0,0,349,350,1,0,0,0,350,352,1,0,0,0,351,353,7,3,0, + 0,352,351,1,0,0,0,352,353,1,0,0,0,353,355,1,0,0,0,354,341,1,0,0,0,354, + 347,1,0,0,0,355,373,1,0,0,0,356,358,7,5,0,0,357,356,1,0,0,0,357,358,1, + 0,0,0,358,359,1,0,0,0,359,361,5,69,0,0,360,362,5,123,0,0,361,360,1,0, + 0,0,361,362,1,0,0,0,362,371,1,0,0,0,363,365,5,69,0,0,364,366,5,123,0, + 0,365,364,1,0,0,0,365,366,1,0,0,0,366,368,1,0,0,0,367,369,7,5,0,0,368, + 367,1,0,0,0,368,369,1,0,0,0,369,371,1,0,0,0,370,357,1,0,0,0,370,363,1, + 0,0,0,371,373,1,0,0,0,372,338,1,0,0,0,372,354,1,0,0,0,372,370,1,0,0,0, + 373,39,1,0,0,0,374,375,5,31,0,0,375,378,5,90,0,0,376,378,5,206,0,0,377, + 374,1,0,0,0,377,376,1,0,0,0,378,41,1,0,0,0,379,380,5,119,0,0,380,389, + 3,72,36,0,381,382,5,179,0,0,382,383,5,220,0,0,383,384,3,72,36,0,384,385, + 5,236,0,0,385,389,1,0,0,0,386,387,5,179,0,0,387,389,3,72,36,0,388,379, + 1,0,0,0,388,381,1,0,0,0,388,386,1,0,0,0,389,43,1,0,0,0,390,391,5,144, + 0,0,391,394,3,50,25,0,392,393,5,118,0,0,393,395,3,50,25,0,394,392,1,0, + 0,0,394,395,1,0,0,0,395,45,1,0,0,0,396,401,3,48,24,0,397,398,5,206,0, + 0,398,400,3,48,24,0,399,397,1,0,0,0,400,403,1,0,0,0,401,399,1,0,0,0,401, + 402,1,0,0,0,402,47,1,0,0,0,403,401,1,0,0,0,404,406,3,74,37,0,405,407, + 7,6,0,0,406,405,1,0,0,0,406,407,1,0,0,0,407,410,1,0,0,0,408,409,5,117, + 0,0,409,411,7,7,0,0,410,408,1,0,0,0,410,411,1,0,0,0,411,414,1,0,0,0,412, + 413,5,26,0,0,413,415,5,200,0,0,414,412,1,0,0,0,414,415,1,0,0,0,415,49, + 1,0,0,0,416,423,3,122,61,0,417,420,3,106,53,0,418,419,5,238,0,0,419,421, + 3,106,53,0,420,418,1,0,0,0,420,421,1,0,0,0,421,423,1,0,0,0,422,416,1, + 0,0,0,422,417,1,0,0,0,423,51,1,0,0,0,424,429,3,54,27,0,425,426,5,206, + 0,0,426,428,3,54,27,0,427,425,1,0,0,0,428,431,1,0,0,0,429,427,1,0,0,0, + 429,430,1,0,0,0,430,53,1,0,0,0,431,429,1,0,0,0,432,433,3,118,59,0,433, + 434,5,212,0,0,434,435,3,108,54,0,435,55,1,0,0,0,436,438,3,58,29,0,437, + 436,1,0,0,0,437,438,1,0,0,0,438,440,1,0,0,0,439,441,3,60,30,0,440,439, + 1,0,0,0,440,441,1,0,0,0,441,443,1,0,0,0,442,444,3,62,31,0,443,442,1,0, + 0,0,443,444,1,0,0,0,444,57,1,0,0,0,445,446,5,126,0,0,446,447,5,18,0,0, + 447,448,3,72,36,0,448,59,1,0,0,0,449,450,5,122,0,0,450,451,5,18,0,0,451, + 452,3,46,23,0,452,61,1,0,0,0,453,454,7,8,0,0,454,455,3,64,32,0,455,63, + 1,0,0,0,456,463,3,66,33,0,457,458,5,16,0,0,458,459,3,66,33,0,459,460, + 5,6,0,0,460,461,3,66,33,0,461,463,1,0,0,0,462,456,1,0,0,0,462,457,1,0, + 0,0,463,65,1,0,0,0,464,465,5,33,0,0,465,477,5,142,0,0,466,467,5,175,0, + 0,467,477,5,128,0,0,468,469,5,175,0,0,469,477,5,64,0,0,470,471,3,106, + 53,0,471,472,5,128,0,0,472,477,1,0,0,0,473,474,3,106,53,0,474,475,5,64, + 0,0,475,477,1,0,0,0,476,464,1,0,0,0,476,466,1,0,0,0,476,468,1,0,0,0,476, + 470,1,0,0,0,476,473,1,0,0,0,477,67,1,0,0,0,478,479,3,74,37,0,479,480, + 5,0,0,1,480,69,1,0,0,0,481,529,3,118,59,0,482,483,3,118,59,0,483,484, + 5,220,0,0,484,485,3,118,59,0,485,492,3,70,35,0,486,487,5,206,0,0,487, + 488,3,118,59,0,488,489,3,70,35,0,489,491,1,0,0,0,490,486,1,0,0,0,491, + 494,1,0,0,0,492,490,1,0,0,0,492,493,1,0,0,0,493,495,1,0,0,0,494,492,1, + 0,0,0,495,496,5,236,0,0,496,529,1,0,0,0,497,498,3,118,59,0,498,499,5, + 220,0,0,499,504,3,120,60,0,500,501,5,206,0,0,501,503,3,120,60,0,502,500, + 1,0,0,0,503,506,1,0,0,0,504,502,1,0,0,0,504,505,1,0,0,0,505,507,1,0,0, + 0,506,504,1,0,0,0,507,508,5,236,0,0,508,529,1,0,0,0,509,510,3,118,59, + 0,510,511,5,220,0,0,511,516,3,70,35,0,512,513,5,206,0,0,513,515,3,70, + 35,0,514,512,1,0,0,0,515,518,1,0,0,0,516,514,1,0,0,0,516,517,1,0,0,0, + 517,519,1,0,0,0,518,516,1,0,0,0,519,520,5,236,0,0,520,529,1,0,0,0,521, + 522,3,118,59,0,522,524,5,220,0,0,523,525,3,72,36,0,524,523,1,0,0,0,524, + 525,1,0,0,0,525,526,1,0,0,0,526,527,5,236,0,0,527,529,1,0,0,0,528,481, + 1,0,0,0,528,482,1,0,0,0,528,497,1,0,0,0,528,509,1,0,0,0,528,521,1,0,0, + 0,529,71,1,0,0,0,530,535,3,74,37,0,531,532,5,206,0,0,532,534,3,74,37, + 0,533,531,1,0,0,0,534,537,1,0,0,0,535,533,1,0,0,0,535,536,1,0,0,0,536, + 73,1,0,0,0,537,535,1,0,0,0,538,539,6,37,-1,0,539,541,5,19,0,0,540,542, + 3,74,37,0,541,540,1,0,0,0,541,542,1,0,0,0,542,548,1,0,0,0,543,544,5,186, + 0,0,544,545,3,74,37,0,545,546,5,163,0,0,546,547,3,74,37,0,547,549,1,0, + 0,0,548,543,1,0,0,0,549,550,1,0,0,0,550,548,1,0,0,0,550,551,1,0,0,0,551, + 554,1,0,0,0,552,553,5,52,0,0,553,555,3,74,37,0,554,552,1,0,0,0,554,555, + 1,0,0,0,555,556,1,0,0,0,556,557,5,53,0,0,557,669,1,0,0,0,558,559,5,20, + 0,0,559,560,5,220,0,0,560,561,3,74,37,0,561,562,5,10,0,0,562,563,3,70, + 35,0,563,564,5,236,0,0,564,669,1,0,0,0,565,566,5,36,0,0,566,669,5,200, + 0,0,567,568,5,59,0,0,568,569,5,220,0,0,569,570,3,110,55,0,570,571,5,68, + 0,0,571,572,3,74,37,0,572,573,5,236,0,0,573,669,1,0,0,0,574,575,5,86, + 0,0,575,576,3,74,37,0,576,577,3,110,55,0,577,669,1,0,0,0,578,579,5,155, + 0,0,579,580,5,220,0,0,580,581,3,74,37,0,581,582,5,68,0,0,582,585,3,74, + 37,0,583,584,5,65,0,0,584,586,3,74,37,0,585,583,1,0,0,0,585,586,1,0,0, + 0,586,587,1,0,0,0,587,588,5,236,0,0,588,669,1,0,0,0,589,590,5,166,0,0, + 590,669,5,200,0,0,591,592,5,171,0,0,592,593,5,220,0,0,593,594,7,9,0,0, + 594,595,5,200,0,0,595,596,5,68,0,0,596,597,3,74,37,0,597,598,5,236,0, + 0,598,669,1,0,0,0,599,600,3,118,59,0,600,602,5,220,0,0,601,603,3,72,36, + 0,602,601,1,0,0,0,602,603,1,0,0,0,603,604,1,0,0,0,604,605,5,236,0,0,605, + 606,1,0,0,0,606,607,5,125,0,0,607,608,5,220,0,0,608,609,3,56,28,0,609, + 610,5,236,0,0,610,669,1,0,0,0,611,612,3,118,59,0,612,614,5,220,0,0,613, + 615,3,72,36,0,614,613,1,0,0,0,614,615,1,0,0,0,615,616,1,0,0,0,616,617, + 5,236,0,0,617,618,1,0,0,0,618,619,5,125,0,0,619,620,3,118,59,0,620,669, + 1,0,0,0,621,627,3,118,59,0,622,624,5,220,0,0,623,625,3,72,36,0,624,623, + 1,0,0,0,624,625,1,0,0,0,625,626,1,0,0,0,626,628,5,236,0,0,627,622,1,0, + 0,0,627,628,1,0,0,0,628,629,1,0,0,0,629,631,5,220,0,0,630,632,5,49,0, + 0,631,630,1,0,0,0,631,632,1,0,0,0,632,634,1,0,0,0,633,635,3,76,38,0,634, + 633,1,0,0,0,634,635,1,0,0,0,635,636,1,0,0,0,636,637,5,236,0,0,637,669, + 1,0,0,0,638,669,3,82,41,0,639,669,3,108,54,0,640,641,5,208,0,0,641,669, + 3,74,37,18,642,643,5,115,0,0,643,669,3,74,37,12,644,645,3,98,49,0,645, + 646,5,210,0,0,646,648,1,0,0,0,647,644,1,0,0,0,647,648,1,0,0,0,648,649, + 1,0,0,0,649,669,5,202,0,0,650,651,5,220,0,0,651,652,3,2,1,0,652,653,5, + 236,0,0,653,669,1,0,0,0,654,655,5,220,0,0,655,656,3,74,37,0,656,657,5, + 236,0,0,657,669,1,0,0,0,658,659,5,220,0,0,659,660,3,72,36,0,660,661,5, + 236,0,0,661,669,1,0,0,0,662,664,5,219,0,0,663,665,3,72,36,0,664,663,1, + 0,0,0,664,665,1,0,0,0,665,666,1,0,0,0,666,669,5,235,0,0,667,669,3,90, + 45,0,668,538,1,0,0,0,668,558,1,0,0,0,668,565,1,0,0,0,668,567,1,0,0,0, + 668,574,1,0,0,0,668,578,1,0,0,0,668,589,1,0,0,0,668,591,1,0,0,0,668,599, + 1,0,0,0,668,611,1,0,0,0,668,621,1,0,0,0,668,638,1,0,0,0,668,639,1,0,0, + 0,668,640,1,0,0,0,668,642,1,0,0,0,668,647,1,0,0,0,668,650,1,0,0,0,668, + 654,1,0,0,0,668,658,1,0,0,0,668,662,1,0,0,0,668,667,1,0,0,0,669,763,1, + 0,0,0,670,674,10,17,0,0,671,675,5,202,0,0,672,675,5,238,0,0,673,675,5, + 227,0,0,674,671,1,0,0,0,674,672,1,0,0,0,674,673,1,0,0,0,675,676,1,0,0, + 0,676,762,3,74,37,18,677,681,10,16,0,0,678,682,5,228,0,0,679,682,5,208, + 0,0,680,682,5,207,0,0,681,678,1,0,0,0,681,679,1,0,0,0,681,680,1,0,0,0, + 682,683,1,0,0,0,683,762,3,74,37,17,684,709,10,15,0,0,685,710,5,211,0, + 0,686,710,5,212,0,0,687,710,5,223,0,0,688,710,5,221,0,0,689,710,5,222, + 0,0,690,710,5,213,0,0,691,710,5,214,0,0,692,694,5,115,0,0,693,692,1,0, + 0,0,693,694,1,0,0,0,694,695,1,0,0,0,695,697,5,80,0,0,696,698,5,25,0,0, + 697,696,1,0,0,0,697,698,1,0,0,0,698,710,1,0,0,0,699,701,5,115,0,0,700, + 699,1,0,0,0,700,701,1,0,0,0,701,702,1,0,0,0,702,710,7,10,0,0,703,710, + 5,232,0,0,704,710,5,233,0,0,705,710,5,225,0,0,706,710,5,216,0,0,707,710, + 5,217,0,0,708,710,5,224,0,0,709,685,1,0,0,0,709,686,1,0,0,0,709,687,1, + 0,0,0,709,688,1,0,0,0,709,689,1,0,0,0,709,690,1,0,0,0,709,691,1,0,0,0, + 709,693,1,0,0,0,709,700,1,0,0,0,709,703,1,0,0,0,709,704,1,0,0,0,709,705, + 1,0,0,0,709,706,1,0,0,0,709,707,1,0,0,0,709,708,1,0,0,0,710,711,1,0,0, + 0,711,762,3,74,37,16,712,713,10,13,0,0,713,714,5,226,0,0,714,762,3,74, + 37,14,715,716,10,11,0,0,716,717,5,6,0,0,717,762,3,74,37,12,718,719,10, + 10,0,0,719,720,5,121,0,0,720,762,3,74,37,11,721,723,10,9,0,0,722,724, + 5,115,0,0,723,722,1,0,0,0,723,724,1,0,0,0,724,725,1,0,0,0,725,726,5,16, + 0,0,726,727,3,74,37,0,727,728,5,6,0,0,728,729,3,74,37,10,729,762,1,0, + 0,0,730,731,10,8,0,0,731,732,5,229,0,0,732,733,3,74,37,0,733,734,5,205, + 0,0,734,735,3,74,37,8,735,762,1,0,0,0,736,737,10,21,0,0,737,738,5,219, + 0,0,738,739,3,74,37,0,739,740,5,235,0,0,740,762,1,0,0,0,741,742,10,20, + 0,0,742,743,5,210,0,0,743,762,5,198,0,0,744,745,10,19,0,0,745,746,5,210, + 0,0,746,762,3,118,59,0,747,748,10,14,0,0,748,750,5,88,0,0,749,751,5,115, + 0,0,750,749,1,0,0,0,750,751,1,0,0,0,751,752,1,0,0,0,752,762,5,116,0,0, + 753,759,10,7,0,0,754,760,3,116,58,0,755,756,5,10,0,0,756,760,3,118,59, + 0,757,758,5,10,0,0,758,760,5,200,0,0,759,754,1,0,0,0,759,755,1,0,0,0, + 759,757,1,0,0,0,760,762,1,0,0,0,761,670,1,0,0,0,761,677,1,0,0,0,761,684, + 1,0,0,0,761,712,1,0,0,0,761,715,1,0,0,0,761,718,1,0,0,0,761,721,1,0,0, + 0,761,730,1,0,0,0,761,736,1,0,0,0,761,741,1,0,0,0,761,744,1,0,0,0,761, + 747,1,0,0,0,761,753,1,0,0,0,762,765,1,0,0,0,763,761,1,0,0,0,763,764,1, + 0,0,0,764,75,1,0,0,0,765,763,1,0,0,0,766,771,3,78,39,0,767,768,5,206, + 0,0,768,770,3,78,39,0,769,767,1,0,0,0,770,773,1,0,0,0,771,769,1,0,0,0, + 771,772,1,0,0,0,772,77,1,0,0,0,773,771,1,0,0,0,774,777,3,80,40,0,775, + 777,3,74,37,0,776,774,1,0,0,0,776,775,1,0,0,0,777,79,1,0,0,0,778,779, + 5,220,0,0,779,784,3,118,59,0,780,781,5,206,0,0,781,783,3,118,59,0,782, + 780,1,0,0,0,783,786,1,0,0,0,784,782,1,0,0,0,784,785,1,0,0,0,785,787,1, + 0,0,0,786,784,1,0,0,0,787,788,5,236,0,0,788,798,1,0,0,0,789,794,3,118, + 59,0,790,791,5,206,0,0,791,793,3,118,59,0,792,790,1,0,0,0,793,796,1,0, + 0,0,794,792,1,0,0,0,794,795,1,0,0,0,795,798,1,0,0,0,796,794,1,0,0,0,797, + 778,1,0,0,0,797,789,1,0,0,0,798,799,1,0,0,0,799,800,5,201,0,0,800,801, + 3,74,37,0,801,81,1,0,0,0,802,803,5,222,0,0,803,807,3,118,59,0,804,806, + 3,84,42,0,805,804,1,0,0,0,806,809,1,0,0,0,807,805,1,0,0,0,807,808,1,0, + 0,0,808,810,1,0,0,0,809,807,1,0,0,0,810,811,5,238,0,0,811,812,5,214,0, + 0,812,83,1,0,0,0,813,814,3,118,59,0,814,815,5,212,0,0,815,816,5,200,0, + 0,816,825,1,0,0,0,817,818,3,118,59,0,818,819,5,212,0,0,819,820,5,218, + 0,0,820,821,3,74,37,0,821,822,5,234,0,0,822,825,1,0,0,0,823,825,3,118, + 59,0,824,813,1,0,0,0,824,817,1,0,0,0,824,823,1,0,0,0,825,85,1,0,0,0,826, + 831,3,88,44,0,827,828,5,206,0,0,828,830,3,88,44,0,829,827,1,0,0,0,830, + 833,1,0,0,0,831,829,1,0,0,0,831,832,1,0,0,0,832,87,1,0,0,0,833,831,1, + 0,0,0,834,835,3,118,59,0,835,836,5,10,0,0,836,837,5,220,0,0,837,838,3, + 2,1,0,838,839,5,236,0,0,839,845,1,0,0,0,840,841,3,74,37,0,841,842,5,10, + 0,0,842,843,3,118,59,0,843,845,1,0,0,0,844,834,1,0,0,0,844,840,1,0,0, + 0,845,89,1,0,0,0,846,854,3,122,61,0,847,848,3,98,49,0,848,849,5,210,0, + 0,849,851,1,0,0,0,850,847,1,0,0,0,850,851,1,0,0,0,851,852,1,0,0,0,852, + 854,3,92,46,0,853,846,1,0,0,0,853,850,1,0,0,0,854,91,1,0,0,0,855,860, + 3,118,59,0,856,857,5,210,0,0,857,859,3,118,59,0,858,856,1,0,0,0,859,862, + 1,0,0,0,860,858,1,0,0,0,860,861,1,0,0,0,861,93,1,0,0,0,862,860,1,0,0, + 0,863,864,6,47,-1,0,864,873,3,98,49,0,865,873,3,96,48,0,866,867,5,220, + 0,0,867,868,3,2,1,0,868,869,5,236,0,0,869,873,1,0,0,0,870,873,3,82,41, + 0,871,873,3,122,61,0,872,863,1,0,0,0,872,865,1,0,0,0,872,866,1,0,0,0, + 872,870,1,0,0,0,872,871,1,0,0,0,873,882,1,0,0,0,874,878,10,3,0,0,875, + 879,3,116,58,0,876,877,5,10,0,0,877,879,3,118,59,0,878,875,1,0,0,0,878, + 876,1,0,0,0,879,881,1,0,0,0,880,874,1,0,0,0,881,884,1,0,0,0,882,880,1, + 0,0,0,882,883,1,0,0,0,883,95,1,0,0,0,884,882,1,0,0,0,885,886,3,118,59, + 0,886,888,5,220,0,0,887,889,3,100,50,0,888,887,1,0,0,0,888,889,1,0,0, + 0,889,890,1,0,0,0,890,891,5,236,0,0,891,97,1,0,0,0,892,893,3,102,51,0, + 893,894,5,210,0,0,894,896,1,0,0,0,895,892,1,0,0,0,895,896,1,0,0,0,896, + 897,1,0,0,0,897,898,3,118,59,0,898,99,1,0,0,0,899,904,3,74,37,0,900,901, + 5,206,0,0,901,903,3,74,37,0,902,900,1,0,0,0,903,906,1,0,0,0,904,902,1, + 0,0,0,904,905,1,0,0,0,905,101,1,0,0,0,906,904,1,0,0,0,907,908,3,118,59, + 0,908,103,1,0,0,0,909,918,5,196,0,0,910,911,5,210,0,0,911,918,7,11,0, + 0,912,913,5,198,0,0,913,915,5,210,0,0,914,916,7,11,0,0,915,914,1,0,0, + 0,915,916,1,0,0,0,916,918,1,0,0,0,917,909,1,0,0,0,917,910,1,0,0,0,917, + 912,1,0,0,0,918,105,1,0,0,0,919,921,7,12,0,0,920,919,1,0,0,0,920,921, + 1,0,0,0,921,928,1,0,0,0,922,929,3,104,52,0,923,929,5,197,0,0,924,929, + 5,198,0,0,925,929,5,199,0,0,926,929,5,82,0,0,927,929,5,113,0,0,928,922, + 1,0,0,0,928,923,1,0,0,0,928,924,1,0,0,0,928,925,1,0,0,0,928,926,1,0,0, + 0,928,927,1,0,0,0,929,107,1,0,0,0,930,934,3,106,53,0,931,934,5,200,0, + 0,932,934,5,116,0,0,933,930,1,0,0,0,933,931,1,0,0,0,933,932,1,0,0,0,934, + 109,1,0,0,0,935,936,7,13,0,0,936,111,1,0,0,0,937,938,7,14,0,0,938,113, + 1,0,0,0,939,940,7,15,0,0,940,115,1,0,0,0,941,944,5,195,0,0,942,944,3, + 114,57,0,943,941,1,0,0,0,943,942,1,0,0,0,944,117,1,0,0,0,945,949,5,195, + 0,0,946,949,3,110,55,0,947,949,3,112,56,0,948,945,1,0,0,0,948,946,1,0, + 0,0,948,947,1,0,0,0,949,119,1,0,0,0,950,951,5,200,0,0,951,952,5,212,0, + 0,952,953,3,106,53,0,953,121,1,0,0,0,954,955,5,218,0,0,955,956,3,118, + 59,0,956,957,5,234,0,0,957,123,1,0,0,0,117,127,137,145,148,152,155,159, + 162,165,168,171,175,179,182,185,188,192,195,204,210,231,248,265,271,277, + 288,290,301,304,310,318,324,326,330,335,338,341,345,349,352,354,357,361, + 365,368,370,372,377,388,394,401,406,410,414,420,422,429,437,440,443,462, + 476,492,504,516,524,528,535,541,550,554,585,602,614,624,627,631,634,647, + 664,668,674,681,693,697,700,709,723,750,759,761,763,771,776,784,794,797, + 807,824,831,844,850,853,860,872,878,882,888,895,904,915,917,920,928,933, + 943,948 }; staticData->serializedATN = antlr4::atn::SerializedATNView(serializedATNSegment, sizeof(serializedATNSegment) / sizeof(serializedATNSegment[0])); @@ -529,6 +543,10 @@ HogQLParser::SelectStmtContext* HogQLParser::SelectContext::selectStmt() { return getRuleContext(0); } +HogQLParser::HogqlxTagElementContext* HogQLParser::SelectContext::hogqlxTagElement() { + return getRuleContext(0); +} + size_t HogQLParser::SelectContext::getRuleIndex() const { return HogQLParser::RuleSelect; @@ -555,25 +573,31 @@ HogQLParser::SelectContext* HogQLParser::select() { }); try { enterOuterAlt(_localctx, 1); - setState(120); + setState(127); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 0, _ctx)) { case 1: { - setState(118); + setState(124); selectUnionStmt(); break; } case 2: { - setState(119); + setState(125); selectStmt(); break; } + case 3: { + setState(126); + hogqlxTagElement(); + break; + } + default: break; } - setState(122); + setState(129); match(HogQLParser::EOF); } @@ -643,19 +667,19 @@ HogQLParser::SelectUnionStmtContext* HogQLParser::selectUnionStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(124); + setState(131); selectStmtWithParens(); - setState(130); + setState(137); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::UNION) { - setState(125); + setState(132); match(HogQLParser::UNION); - setState(126); + setState(133); match(HogQLParser::ALL); - setState(127); + setState(134); selectStmtWithParens(); - setState(132); + setState(139); _errHandler->sync(this); _la = _input->LA(1); } @@ -717,24 +741,24 @@ HogQLParser::SelectStmtWithParensContext* HogQLParser::selectStmtWithParens() { exitRule(); }); try { - setState(138); + setState(145); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::SELECT: case HogQLParser::WITH: { enterOuterAlt(_localctx, 1); - setState(133); + setState(140); selectStmt(); break; } case HogQLParser::LPAREN: { enterOuterAlt(_localctx, 2); - setState(134); + setState(141); match(HogQLParser::LPAREN); - setState(135); + setState(142); selectUnionStmt(); - setState(136); + setState(143); match(HogQLParser::RPAREN); break; } @@ -870,22 +894,22 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { }); try { enterOuterAlt(_localctx, 1); - setState(141); + setState(148); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WITH) { - setState(140); + setState(147); antlrcpp::downCast(_localctx)->with = withClause(); } - setState(143); + setState(150); match(HogQLParser::SELECT); - setState(145); + setState(152); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 4, _ctx)) { case 1: { - setState(144); + setState(151); match(HogQLParser::DISTINCT); break; } @@ -893,12 +917,12 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { default: break; } - setState(148); + setState(155); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 5, _ctx)) { case 1: { - setState(147); + setState(154); topClause(); break; } @@ -906,58 +930,58 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { default: break; } - setState(150); + setState(157); antlrcpp::downCast(_localctx)->columns = columnExprList(); - setState(152); + setState(159); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::FROM) { - setState(151); + setState(158); antlrcpp::downCast(_localctx)->from = fromClause(); } - setState(155); + setState(162); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::ARRAY || _la == HogQLParser::INNER || _la == HogQLParser::LEFT) { - setState(154); + setState(161); arrayJoinClause(); } - setState(158); + setState(165); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::PREWHERE) { - setState(157); + setState(164); prewhereClause(); } - setState(161); + setState(168); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WHERE) { - setState(160); + setState(167); antlrcpp::downCast(_localctx)->where = whereClause(); } - setState(164); + setState(171); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::GROUP) { - setState(163); + setState(170); groupByClause(); } - setState(168); + setState(175); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 11, _ctx)) { case 1: { - setState(166); + setState(173); match(HogQLParser::WITH); - setState(167); + setState(174); _la = _input->LA(1); if (!(_la == HogQLParser::CUBE || _la == HogQLParser::ROLLUP)) { _errHandler->recoverInline(this); @@ -972,51 +996,51 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { default: break; } - setState(172); + setState(179); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WITH) { - setState(170); + setState(177); match(HogQLParser::WITH); - setState(171); + setState(178); match(HogQLParser::TOTALS); } - setState(175); + setState(182); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::HAVING) { - setState(174); + setState(181); havingClause(); } - setState(178); + setState(185); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WINDOW) { - setState(177); + setState(184); windowClause(); } - setState(181); + setState(188); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::ORDER) { - setState(180); + setState(187); orderByClause(); } - setState(185); + setState(192); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::LIMIT: { - setState(183); + setState(190); limitAndOffsetClause(); break; } case HogQLParser::OFFSET: { - setState(184); + setState(191); offsetOnlyClause(); break; } @@ -1031,12 +1055,12 @@ HogQLParser::SelectStmtContext* HogQLParser::selectStmt() { default: break; } - setState(188); + setState(195); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::SETTINGS) { - setState(187); + setState(194); settingsClause(); } @@ -1090,9 +1114,9 @@ HogQLParser::WithClauseContext* HogQLParser::withClause() { }); try { enterOuterAlt(_localctx, 1); - setState(190); + setState(197); match(HogQLParser::WITH); - setState(191); + setState(198); withExprList(); } @@ -1153,18 +1177,18 @@ HogQLParser::TopClauseContext* HogQLParser::topClause() { }); try { enterOuterAlt(_localctx, 1); - setState(193); + setState(200); match(HogQLParser::TOP); - setState(194); + setState(201); match(HogQLParser::DECIMAL_LITERAL); - setState(197); + setState(204); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 18, _ctx)) { case 1: { - setState(195); + setState(202); match(HogQLParser::WITH); - setState(196); + setState(203); match(HogQLParser::TIES); break; } @@ -1223,9 +1247,9 @@ HogQLParser::FromClauseContext* HogQLParser::fromClause() { }); try { enterOuterAlt(_localctx, 1); - setState(199); + setState(206); match(HogQLParser::FROM); - setState(200); + setState(207); joinExpr(0); } @@ -1291,14 +1315,14 @@ HogQLParser::ArrayJoinClauseContext* HogQLParser::arrayJoinClause() { }); try { enterOuterAlt(_localctx, 1); - setState(203); + setState(210); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::INNER || _la == HogQLParser::LEFT) { - setState(202); + setState(209); _la = _input->LA(1); if (!(_la == HogQLParser::INNER @@ -1310,11 +1334,11 @@ HogQLParser::ArrayJoinClauseContext* HogQLParser::arrayJoinClause() { consume(); } } - setState(205); + setState(212); match(HogQLParser::ARRAY); - setState(206); + setState(213); match(HogQLParser::JOIN); - setState(207); + setState(214); columnExprList(); } @@ -1412,35 +1436,35 @@ HogQLParser::WindowClauseContext* HogQLParser::windowClause() { }); try { enterOuterAlt(_localctx, 1); - setState(209); + setState(216); match(HogQLParser::WINDOW); - setState(210); + setState(217); identifier(); - setState(211); + setState(218); match(HogQLParser::AS); - setState(212); + setState(219); match(HogQLParser::LPAREN); - setState(213); + setState(220); windowExpr(); - setState(214); + setState(221); match(HogQLParser::RPAREN); - setState(224); + setState(231); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(215); + setState(222); match(HogQLParser::COMMA); - setState(216); + setState(223); identifier(); - setState(217); + setState(224); match(HogQLParser::AS); - setState(218); + setState(225); match(HogQLParser::LPAREN); - setState(219); + setState(226); windowExpr(); - setState(220); + setState(227); match(HogQLParser::RPAREN); - setState(226); + setState(233); _errHandler->sync(this); _la = _input->LA(1); } @@ -1495,9 +1519,9 @@ HogQLParser::PrewhereClauseContext* HogQLParser::prewhereClause() { }); try { enterOuterAlt(_localctx, 1); - setState(227); + setState(234); match(HogQLParser::PREWHERE); - setState(228); + setState(235); columnExpr(0); } @@ -1550,9 +1574,9 @@ HogQLParser::WhereClauseContext* HogQLParser::whereClause() { }); try { enterOuterAlt(_localctx, 1); - setState(230); + setState(237); match(HogQLParser::WHERE); - setState(231); + setState(238); columnExpr(0); } @@ -1626,15 +1650,15 @@ HogQLParser::GroupByClauseContext* HogQLParser::groupByClause() { }); try { enterOuterAlt(_localctx, 1); - setState(233); + setState(240); match(HogQLParser::GROUP); - setState(234); - match(HogQLParser::BY); setState(241); + match(HogQLParser::BY); + setState(248); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 21, _ctx)) { case 1: { - setState(235); + setState(242); _la = _input->LA(1); if (!(_la == HogQLParser::CUBE || _la == HogQLParser::ROLLUP)) { _errHandler->recoverInline(this); @@ -1643,17 +1667,17 @@ HogQLParser::GroupByClauseContext* HogQLParser::groupByClause() { _errHandler->reportMatch(this); consume(); } - setState(236); + setState(243); match(HogQLParser::LPAREN); - setState(237); + setState(244); columnExprList(); - setState(238); + setState(245); match(HogQLParser::RPAREN); break; } case 2: { - setState(240); + setState(247); columnExprList(); break; } @@ -1712,9 +1736,9 @@ HogQLParser::HavingClauseContext* HogQLParser::havingClause() { }); try { enterOuterAlt(_localctx, 1); - setState(243); + setState(250); match(HogQLParser::HAVING); - setState(244); + setState(251); columnExpr(0); } @@ -1771,11 +1795,11 @@ HogQLParser::OrderByClauseContext* HogQLParser::orderByClause() { }); try { enterOuterAlt(_localctx, 1); - setState(246); + setState(253); match(HogQLParser::ORDER); - setState(247); + setState(254); match(HogQLParser::BY); - setState(248); + setState(255); orderExprList(); } @@ -1832,11 +1856,11 @@ HogQLParser::ProjectionOrderByClauseContext* HogQLParser::projectionOrderByClaus }); try { enterOuterAlt(_localctx, 1); - setState(250); + setState(257); match(HogQLParser::ORDER); - setState(251); + setState(258); match(HogQLParser::BY); - setState(252); + setState(259); columnExprList(); } @@ -1917,40 +1941,40 @@ HogQLParser::LimitAndOffsetClauseContext* HogQLParser::limitAndOffsetClause() { exitRule(); }); try { - setState(283); + setState(290); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 26, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(254); + setState(261); match(HogQLParser::LIMIT); - setState(255); + setState(262); columnExpr(0); - setState(258); + setState(265); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COMMA) { - setState(256); + setState(263); match(HogQLParser::COMMA); - setState(257); + setState(264); columnExpr(0); } - setState(264); + setState(271); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::WITH: { - setState(260); + setState(267); match(HogQLParser::WITH); - setState(261); + setState(268); match(HogQLParser::TIES); break; } case HogQLParser::BY: { - setState(262); + setState(269); match(HogQLParser::BY); - setState(263); + setState(270); columnExprList(); break; } @@ -1970,45 +1994,45 @@ HogQLParser::LimitAndOffsetClauseContext* HogQLParser::limitAndOffsetClause() { case 2: { enterOuterAlt(_localctx, 2); - setState(266); + setState(273); match(HogQLParser::LIMIT); - setState(267); + setState(274); columnExpr(0); - setState(270); + setState(277); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::WITH) { - setState(268); + setState(275); match(HogQLParser::WITH); - setState(269); + setState(276); match(HogQLParser::TIES); } - setState(272); + setState(279); match(HogQLParser::OFFSET); - setState(273); + setState(280); columnExpr(0); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(275); + setState(282); match(HogQLParser::LIMIT); - setState(276); + setState(283); columnExpr(0); - setState(277); + setState(284); match(HogQLParser::OFFSET); - setState(278); + setState(285); columnExpr(0); - setState(281); + setState(288); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::BY) { - setState(279); + setState(286); match(HogQLParser::BY); - setState(280); + setState(287); columnExprList(); } break; @@ -2068,9 +2092,9 @@ HogQLParser::OffsetOnlyClauseContext* HogQLParser::offsetOnlyClause() { }); try { enterOuterAlt(_localctx, 1); - setState(285); + setState(292); match(HogQLParser::OFFSET); - setState(286); + setState(293); columnExpr(0); } @@ -2123,9 +2147,9 @@ HogQLParser::SettingsClauseContext* HogQLParser::settingsClause() { }); try { enterOuterAlt(_localctx, 1); - setState(288); + setState(295); match(HogQLParser::SETTINGS); - setState(289); + setState(296); settingExprList(); } @@ -2279,7 +2303,7 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(303); + setState(310); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 29, _ctx)) { case 1: { @@ -2287,14 +2311,14 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { _ctx = _localctx; previousContext = _localctx; - setState(292); + setState(299); tableExpr(0); - setState(294); + setState(301); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 27, _ctx)) { case 1: { - setState(293); + setState(300); match(HogQLParser::FINAL); break; } @@ -2302,12 +2326,12 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { default: break; } - setState(297); + setState(304); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 28, _ctx)) { case 1: { - setState(296); + setState(303); sampleClause(); break; } @@ -2322,11 +2346,11 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(299); + setState(306); match(HogQLParser::LPAREN); - setState(300); + setState(307); joinExpr(0); - setState(301); + setState(308); match(HogQLParser::RPAREN); break; } @@ -2335,7 +2359,7 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(319); + setState(326); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 32, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { @@ -2343,19 +2367,19 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(317); + setState(324); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 31, _ctx)) { case 1: { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleJoinExpr); - setState(305); + setState(312); if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); - setState(306); + setState(313); joinOpCross(); - setState(307); + setState(314); joinExpr(4); break; } @@ -2364,10 +2388,10 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleJoinExpr); - setState(309); + setState(316); if (!(precpred(_ctx, 4))) throw FailedPredicateException(this, "precpred(_ctx, 4)"); - setState(311); + setState(318); _errHandler->sync(this); _la = _input->LA(1); @@ -2376,14 +2400,14 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { ((1ULL << (_la - 69)) & 134250497) != 0) || _la == HogQLParser::RIGHT || _la == HogQLParser::SEMI) { - setState(310); + setState(317); joinOp(); } - setState(313); + setState(320); match(HogQLParser::JOIN); - setState(314); + setState(321); joinExpr(0); - setState(315); + setState(322); joinConstraintClause(); break; } @@ -2392,7 +2416,7 @@ HogQLParser::JoinExprContext* HogQLParser::joinExpr(int precedence) { break; } } - setState(321); + setState(328); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 32, _ctx); } @@ -2530,23 +2554,23 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { exitRule(); }); try { - setState(365); + setState(372); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 46, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(331); + setState(338); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 35, _ctx)) { case 1: { - setState(323); + setState(330); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 4368) != 0)) { - setState(322); + setState(329); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 4368) != 0))) { @@ -2557,21 +2581,21 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { consume(); } } - setState(325); + setState(332); match(HogQLParser::INNER); break; } case 2: { - setState(326); + setState(333); match(HogQLParser::INNER); - setState(328); + setState(335); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 4368) != 0)) { - setState(327); + setState(334); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 4368) != 0))) { @@ -2586,7 +2610,7 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { } case 3: { - setState(330); + setState(337); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 4368) != 0))) { @@ -2608,17 +2632,17 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(347); + setState(354); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 40, _ctx)) { case 1: { - setState(334); + setState(341); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 4496) != 0) || _la == HogQLParser::SEMI) { - setState(333); + setState(340); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 4496) != 0) || _la == HogQLParser::SEMI)) { @@ -2629,7 +2653,7 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { consume(); } } - setState(336); + setState(343); _la = _input->LA(1); if (!(_la == HogQLParser::LEFT @@ -2640,19 +2664,19 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { _errHandler->reportMatch(this); consume(); } - setState(338); + setState(345); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::OUTER) { - setState(337); + setState(344); match(HogQLParser::OUTER); } break; } case 2: { - setState(340); + setState(347); _la = _input->LA(1); if (!(_la == HogQLParser::LEFT @@ -2663,21 +2687,21 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { _errHandler->reportMatch(this); consume(); } - setState(342); + setState(349); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::OUTER) { - setState(341); + setState(348); match(HogQLParser::OUTER); } - setState(345); + setState(352); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 4496) != 0) || _la == HogQLParser::SEMI) { - setState(344); + setState(351); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 4496) != 0) || _la == HogQLParser::SEMI)) { @@ -2700,18 +2724,18 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { case 3: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 3); - setState(363); + setState(370); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 45, _ctx)) { case 1: { - setState(350); + setState(357); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::ALL || _la == HogQLParser::ANY) { - setState(349); + setState(356); _la = _input->LA(1); if (!(_la == HogQLParser::ALL @@ -2723,38 +2747,38 @@ HogQLParser::JoinOpContext* HogQLParser::joinOp() { consume(); } } - setState(352); + setState(359); match(HogQLParser::FULL); - setState(354); + setState(361); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::OUTER) { - setState(353); + setState(360); match(HogQLParser::OUTER); } break; } case 2: { - setState(356); + setState(363); match(HogQLParser::FULL); - setState(358); + setState(365); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::OUTER) { - setState(357); + setState(364); match(HogQLParser::OUTER); } - setState(361); + setState(368); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::ALL || _la == HogQLParser::ANY) { - setState(360); + setState(367); _la = _input->LA(1); if (!(_la == HogQLParser::ALL @@ -2832,21 +2856,21 @@ HogQLParser::JoinOpCrossContext* HogQLParser::joinOpCross() { exitRule(); }); try { - setState(370); + setState(377); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::CROSS: { enterOuterAlt(_localctx, 1); - setState(367); + setState(374); match(HogQLParser::CROSS); - setState(368); + setState(375); match(HogQLParser::JOIN); break; } case HogQLParser::COMMA: { enterOuterAlt(_localctx, 2); - setState(369); + setState(376); match(HogQLParser::COMMA); break; } @@ -2916,36 +2940,36 @@ HogQLParser::JoinConstraintClauseContext* HogQLParser::joinConstraintClause() { exitRule(); }); try { - setState(381); + setState(388); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 48, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(372); + setState(379); match(HogQLParser::ON); - setState(373); + setState(380); columnExprList(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(374); + setState(381); match(HogQLParser::USING); - setState(375); + setState(382); match(HogQLParser::LPAREN); - setState(376); + setState(383); columnExprList(); - setState(377); + setState(384); match(HogQLParser::RPAREN); break; } case 3: { enterOuterAlt(_localctx, 3); - setState(379); + setState(386); match(HogQLParser::USING); - setState(380); + setState(387); columnExprList(); break; } @@ -3012,18 +3036,18 @@ HogQLParser::SampleClauseContext* HogQLParser::sampleClause() { }); try { enterOuterAlt(_localctx, 1); - setState(383); + setState(390); match(HogQLParser::SAMPLE); - setState(384); + setState(391); ratioExpr(); - setState(387); + setState(394); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 49, _ctx)) { case 1: { - setState(385); + setState(392); match(HogQLParser::OFFSET); - setState(386); + setState(393); ratioExpr(); break; } @@ -3091,17 +3115,17 @@ HogQLParser::OrderExprListContext* HogQLParser::orderExprList() { }); try { enterOuterAlt(_localctx, 1); - setState(389); + setState(396); orderExpr(); - setState(394); + setState(401); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(390); + setState(397); match(HogQLParser::COMMA); - setState(391); + setState(398); orderExpr(); - setState(396); + setState(403); _errHandler->sync(this); _la = _input->LA(1); } @@ -3185,15 +3209,15 @@ HogQLParser::OrderExprContext* HogQLParser::orderExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(397); + setState(404); columnExpr(0); - setState(399); + setState(406); _errHandler->sync(this); _la = _input->LA(1); if ((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 13194139535360) != 0)) { - setState(398); + setState(405); _la = _input->LA(1); if (!((((_la & ~ 0x3fULL) == 0) && ((1ULL << _la) & 13194139535360) != 0))) { @@ -3204,14 +3228,14 @@ HogQLParser::OrderExprContext* HogQLParser::orderExpr() { consume(); } } - setState(403); + setState(410); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NULLS) { - setState(401); + setState(408); match(HogQLParser::NULLS); - setState(402); + setState(409); _la = _input->LA(1); if (!(_la == HogQLParser::FIRST @@ -3223,14 +3247,14 @@ HogQLParser::OrderExprContext* HogQLParser::orderExpr() { consume(); } } - setState(407); + setState(414); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COLLATE) { - setState(405); + setState(412); match(HogQLParser::COLLATE); - setState(406); + setState(413); match(HogQLParser::STRING_LITERAL); } @@ -3250,8 +3274,8 @@ HogQLParser::RatioExprContext::RatioExprContext(ParserRuleContext *parent, size_ : ParserRuleContext(parent, invokingState) { } -tree::TerminalNode* HogQLParser::RatioExprContext::PLACEHOLDER() { - return getToken(HogQLParser::PLACEHOLDER, 0); +HogQLParser::PlaceholderContext* HogQLParser::RatioExprContext::placeholder() { + return getRuleContext(0); } std::vector HogQLParser::RatioExprContext::numberLiteral() { @@ -3291,13 +3315,13 @@ HogQLParser::RatioExprContext* HogQLParser::ratioExpr() { exitRule(); }); try { - setState(415); + setState(422); _errHandler->sync(this); switch (_input->LA(1)) { - case HogQLParser::PLACEHOLDER: { + case HogQLParser::LBRACE: { enterOuterAlt(_localctx, 1); - setState(409); - match(HogQLParser::PLACEHOLDER); + setState(416); + placeholder(); break; } @@ -3311,16 +3335,16 @@ HogQLParser::RatioExprContext* HogQLParser::ratioExpr() { case HogQLParser::DOT: case HogQLParser::PLUS: { enterOuterAlt(_localctx, 2); - setState(410); + setState(417); numberLiteral(); - setState(413); + setState(420); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 54, _ctx)) { case 1: { - setState(411); + setState(418); match(HogQLParser::SLASH); - setState(412); + setState(419); numberLiteral(); break; } @@ -3394,17 +3418,17 @@ HogQLParser::SettingExprListContext* HogQLParser::settingExprList() { }); try { enterOuterAlt(_localctx, 1); - setState(417); + setState(424); settingExpr(); - setState(422); + setState(429); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(418); + setState(425); match(HogQLParser::COMMA); - setState(419); + setState(426); settingExpr(); - setState(424); + setState(431); _errHandler->sync(this); _la = _input->LA(1); } @@ -3463,11 +3487,11 @@ HogQLParser::SettingExprContext* HogQLParser::settingExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(425); + setState(432); identifier(); - setState(426); + setState(433); match(HogQLParser::EQ_SINGLE); - setState(427); + setState(434); literal(); } @@ -3525,30 +3549,30 @@ HogQLParser::WindowExprContext* HogQLParser::windowExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(430); + setState(437); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::PARTITION) { - setState(429); + setState(436); winPartitionByClause(); } - setState(433); + setState(440); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::ORDER) { - setState(432); + setState(439); winOrderByClause(); } - setState(436); + setState(443); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::RANGE || _la == HogQLParser::ROWS) { - setState(435); + setState(442); winFrameClause(); } @@ -3606,11 +3630,11 @@ HogQLParser::WinPartitionByClauseContext* HogQLParser::winPartitionByClause() { }); try { enterOuterAlt(_localctx, 1); - setState(438); + setState(445); match(HogQLParser::PARTITION); - setState(439); + setState(446); match(HogQLParser::BY); - setState(440); + setState(447); columnExprList(); } @@ -3667,11 +3691,11 @@ HogQLParser::WinOrderByClauseContext* HogQLParser::winOrderByClause() { }); try { enterOuterAlt(_localctx, 1); - setState(442); + setState(449); match(HogQLParser::ORDER); - setState(443); + setState(450); match(HogQLParser::BY); - setState(444); + setState(451); orderExprList(); } @@ -3729,7 +3753,7 @@ HogQLParser::WinFrameClauseContext* HogQLParser::winFrameClause() { }); try { enterOuterAlt(_localctx, 1); - setState(446); + setState(453); _la = _input->LA(1); if (!(_la == HogQLParser::RANGE @@ -3740,7 +3764,7 @@ HogQLParser::WinFrameClauseContext* HogQLParser::winFrameClause() { _errHandler->reportMatch(this); consume(); } - setState(447); + setState(454); winFrameExtend(); } @@ -3822,7 +3846,7 @@ HogQLParser::WinFrameExtendContext* HogQLParser::winFrameExtend() { exitRule(); }); try { - setState(455); + setState(462); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::CURRENT: @@ -3838,7 +3862,7 @@ HogQLParser::WinFrameExtendContext* HogQLParser::winFrameExtend() { case HogQLParser::PLUS: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(449); + setState(456); winFrameBound(); break; } @@ -3846,13 +3870,13 @@ HogQLParser::WinFrameExtendContext* HogQLParser::winFrameExtend() { case HogQLParser::BETWEEN: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(450); + setState(457); match(HogQLParser::BETWEEN); - setState(451); + setState(458); winFrameBound(); - setState(452); + setState(459); match(HogQLParser::AND); - setState(453); + setState(460); winFrameBound(); break; } @@ -3927,45 +3951,45 @@ HogQLParser::WinFrameBoundContext* HogQLParser::winFrameBound() { }); try { enterOuterAlt(_localctx, 1); - setState(469); + setState(476); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 61, _ctx)) { case 1: { - setState(457); + setState(464); match(HogQLParser::CURRENT); - setState(458); + setState(465); match(HogQLParser::ROW); break; } case 2: { - setState(459); + setState(466); match(HogQLParser::UNBOUNDED); - setState(460); + setState(467); match(HogQLParser::PRECEDING); break; } case 3: { - setState(461); + setState(468); match(HogQLParser::UNBOUNDED); - setState(462); + setState(469); match(HogQLParser::FOLLOWING); break; } case 4: { - setState(463); + setState(470); numberLiteral(); - setState(464); + setState(471); match(HogQLParser::PRECEDING); break; } case 5: { - setState(466); + setState(473); numberLiteral(); - setState(467); + setState(474); match(HogQLParser::FOLLOWING); break; } @@ -4024,9 +4048,9 @@ HogQLParser::ExprContext* HogQLParser::expr() { }); try { enterOuterAlt(_localctx, 1); - setState(471); + setState(478); columnExpr(0); - setState(472); + setState(479); match(HogQLParser::EOF); } @@ -4230,13 +4254,13 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { exitRule(); }); try { - setState(521); + setState(528); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 66, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(474); + setState(481); identifier(); break; } @@ -4244,29 +4268,29 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(475); + setState(482); identifier(); - setState(476); + setState(483); match(HogQLParser::LPAREN); - setState(477); + setState(484); identifier(); - setState(478); - columnTypeExpr(); setState(485); + columnTypeExpr(); + setState(492); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(479); + setState(486); match(HogQLParser::COMMA); - setState(480); + setState(487); identifier(); - setState(481); + setState(488); columnTypeExpr(); - setState(487); + setState(494); _errHandler->sync(this); _la = _input->LA(1); } - setState(488); + setState(495); match(HogQLParser::RPAREN); break; } @@ -4274,25 +4298,25 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { case 3: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 3); - setState(490); + setState(497); identifier(); - setState(491); + setState(498); match(HogQLParser::LPAREN); - setState(492); + setState(499); enumValue(); - setState(497); + setState(504); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(493); + setState(500); match(HogQLParser::COMMA); - setState(494); + setState(501); enumValue(); - setState(499); + setState(506); _errHandler->sync(this); _la = _input->LA(1); } - setState(500); + setState(507); match(HogQLParser::RPAREN); break; } @@ -4300,25 +4324,25 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { case 4: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 4); - setState(502); + setState(509); identifier(); - setState(503); + setState(510); match(HogQLParser::LPAREN); - setState(504); + setState(511); columnTypeExpr(); - setState(509); + setState(516); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(505); + setState(512); match(HogQLParser::COMMA); - setState(506); + setState(513); columnTypeExpr(); - setState(511); + setState(518); _errHandler->sync(this); _la = _input->LA(1); } - setState(512); + setState(519); match(HogQLParser::RPAREN); break; } @@ -4326,11 +4350,11 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { case 5: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 5); - setState(514); + setState(521); identifier(); - setState(515); + setState(522); match(HogQLParser::LPAREN); - setState(517); + setState(524); _errHandler->sync(this); _la = _input->LA(1); @@ -4338,11 +4362,11 @@ HogQLParser::ColumnTypeExprContext* HogQLParser::columnTypeExpr() { ((1ULL << _la) & -33554436) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(516); + ((1ULL << (_la - 192)) & 70263309817) != 0)) { + setState(523); columnExprList(); } - setState(519); + setState(526); match(HogQLParser::RPAREN); break; } @@ -4410,19 +4434,19 @@ HogQLParser::ColumnExprListContext* HogQLParser::columnExprList() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(523); + setState(530); columnExpr(0); - setState(528); + setState(535); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 67, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(524); + setState(531); match(HogQLParser::COMMA); - setState(525); + setState(532); columnExpr(0); } - setState(530); + setState(537); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 67, _ctx); } @@ -5007,6 +5031,21 @@ std::any HogQLParser::ColumnExprTrimContext::accept(tree::ParseTreeVisitor *visi else return visitor->visitChildren(this); } +//----------------- ColumnExprTagElementContext ------------------------------------------------------------------ + +HogQLParser::HogqlxTagElementContext* HogQLParser::ColumnExprTagElementContext::hogqlxTagElement() { + return getRuleContext(0); +} + +HogQLParser::ColumnExprTagElementContext::ColumnExprTagElementContext(ColumnExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::ColumnExprTagElementContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitColumnExprTagElement(this); + else + return visitor->visitChildren(this); +} //----------------- ColumnExprTupleContext ------------------------------------------------------------------ tree::TerminalNode* HogQLParser::ColumnExprTupleContext::LPAREN() { @@ -5457,7 +5496,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(660); + setState(668); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 80, _ctx)) { case 1: { @@ -5465,14 +5504,14 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _ctx = _localctx; previousContext = _localctx; - setState(532); + setState(539); match(HogQLParser::CASE); - setState(534); + setState(541); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 68, _ctx)) { case 1: { - setState(533); + setState(540); antlrcpp::downCast(_localctx)->caseExpr = columnExpr(0); break; } @@ -5480,33 +5519,33 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(541); + setState(548); _errHandler->sync(this); _la = _input->LA(1); do { - setState(536); + setState(543); match(HogQLParser::WHEN); - setState(537); + setState(544); antlrcpp::downCast(_localctx)->whenExpr = columnExpr(0); - setState(538); + setState(545); match(HogQLParser::THEN); - setState(539); + setState(546); antlrcpp::downCast(_localctx)->thenExpr = columnExpr(0); - setState(543); + setState(550); _errHandler->sync(this); _la = _input->LA(1); } while (_la == HogQLParser::WHEN); - setState(547); + setState(554); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::ELSE) { - setState(545); + setState(552); match(HogQLParser::ELSE); - setState(546); + setState(553); antlrcpp::downCast(_localctx)->elseExpr = columnExpr(0); } - setState(549); + setState(556); match(HogQLParser::END); break; } @@ -5515,17 +5554,17 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(551); + setState(558); match(HogQLParser::CAST); - setState(552); + setState(559); match(HogQLParser::LPAREN); - setState(553); + setState(560); columnExpr(0); - setState(554); + setState(561); match(HogQLParser::AS); - setState(555); + setState(562); columnTypeExpr(); - setState(556); + setState(563); match(HogQLParser::RPAREN); break; } @@ -5534,9 +5573,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(558); + setState(565); match(HogQLParser::DATE); - setState(559); + setState(566); match(HogQLParser::STRING_LITERAL); break; } @@ -5545,17 +5584,17 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(560); + setState(567); match(HogQLParser::EXTRACT); - setState(561); + setState(568); match(HogQLParser::LPAREN); - setState(562); + setState(569); interval(); - setState(563); + setState(570); match(HogQLParser::FROM); - setState(564); + setState(571); columnExpr(0); - setState(565); + setState(572); match(HogQLParser::RPAREN); break; } @@ -5564,11 +5603,11 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(567); + setState(574); match(HogQLParser::INTERVAL); - setState(568); + setState(575); columnExpr(0); - setState(569); + setState(576); interval(); break; } @@ -5577,27 +5616,27 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(571); + setState(578); match(HogQLParser::SUBSTRING); - setState(572); + setState(579); match(HogQLParser::LPAREN); - setState(573); + setState(580); columnExpr(0); - setState(574); + setState(581); match(HogQLParser::FROM); - setState(575); + setState(582); columnExpr(0); - setState(578); + setState(585); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::FOR) { - setState(576); + setState(583); match(HogQLParser::FOR); - setState(577); + setState(584); columnExpr(0); } - setState(580); + setState(587); match(HogQLParser::RPAREN); break; } @@ -5606,9 +5645,9 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(582); + setState(589); match(HogQLParser::TIMESTAMP); - setState(583); + setState(590); match(HogQLParser::STRING_LITERAL); break; } @@ -5617,11 +5656,11 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(584); + setState(591); match(HogQLParser::TRIM); - setState(585); + setState(592); match(HogQLParser::LPAREN); - setState(586); + setState(593); _la = _input->LA(1); if (!(_la == HogQLParser::BOTH || _la == HogQLParser::LEADING || _la == HogQLParser::TRAILING)) { _errHandler->recoverInline(this); @@ -5630,13 +5669,13 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _errHandler->reportMatch(this); consume(); } - setState(587); + setState(594); match(HogQLParser::STRING_LITERAL); - setState(588); + setState(595); match(HogQLParser::FROM); - setState(589); + setState(596); columnExpr(0); - setState(590); + setState(597); match(HogQLParser::RPAREN); break; } @@ -5645,12 +5684,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(592); + setState(599); identifier(); - setState(593); + setState(600); match(HogQLParser::LPAREN); - setState(595); + setState(602); _errHandler->sync(this); _la = _input->LA(1); @@ -5658,19 +5697,19 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << _la) & -33554436) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(594); + ((1ULL << (_la - 192)) & 70263309817) != 0)) { + setState(601); columnExprList(); } - setState(597); + setState(604); match(HogQLParser::RPAREN); - setState(599); + setState(606); match(HogQLParser::OVER); - setState(600); + setState(607); match(HogQLParser::LPAREN); - setState(601); + setState(608); windowExpr(); - setState(602); + setState(609); match(HogQLParser::RPAREN); break; } @@ -5679,12 +5718,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(604); + setState(611); identifier(); - setState(605); + setState(612); match(HogQLParser::LPAREN); - setState(607); + setState(614); _errHandler->sync(this); _la = _input->LA(1); @@ -5692,15 +5731,15 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << _la) & -33554436) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(606); + ((1ULL << (_la - 192)) & 70263309817) != 0)) { + setState(613); columnExprList(); } - setState(609); + setState(616); match(HogQLParser::RPAREN); - setState(611); + setState(618); match(HogQLParser::OVER); - setState(612); + setState(619); identifier(); break; } @@ -5709,16 +5748,16 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(614); + setState(621); identifier(); - setState(620); + setState(627); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 75, _ctx)) { case 1: { - setState(615); + setState(622); match(HogQLParser::LPAREN); - setState(617); + setState(624); _errHandler->sync(this); _la = _input->LA(1); @@ -5726,11 +5765,11 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << _la) & -33554436) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(616); + ((1ULL << (_la - 192)) & 70263309817) != 0)) { + setState(623); columnExprList(); } - setState(619); + setState(626); match(HogQLParser::RPAREN); break; } @@ -5738,14 +5777,14 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(622); + setState(629); match(HogQLParser::LPAREN); - setState(624); + setState(631); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 76, _ctx)) { case 1: { - setState(623); + setState(630); match(HogQLParser::DISTINCT); break; } @@ -5753,7 +5792,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(627); + setState(634); _errHandler->sync(this); _la = _input->LA(1); @@ -5761,51 +5800,60 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << _la) & -33554436) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(626); + ((1ULL << (_la - 192)) & 70263309817) != 0)) { + setState(633); columnArgList(); } - setState(629); + setState(636); match(HogQLParser::RPAREN); break; } case 12: { - _localctx = _tracker.createInstance(_localctx); + _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(631); - literal(); + setState(638); + hogqlxTagElement(); break; } case 13: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(639); + literal(); + break; + } + + case 14: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(632); + setState(640); match(HogQLParser::DASH); - setState(633); + setState(641); columnExpr(18); break; } - case 14: { + case 15: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(634); + setState(642); match(HogQLParser::NOT); - setState(635); + setState(643); columnExpr(12); break; } - case 15: { + case 16: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(639); + setState(647); _errHandler->sync(this); _la = _input->LA(1); @@ -5815,62 +5863,62 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << (_la - 128)) & -9) != 0) || _la == HogQLParser::JSON_TRUE || _la == HogQLParser::IDENTIFIER) { - setState(636); + setState(644); tableIdentifier(); - setState(637); + setState(645); match(HogQLParser::DOT); } - setState(641); + setState(649); match(HogQLParser::ASTERISK); break; } - case 16: { + case 17: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(642); + setState(650); match(HogQLParser::LPAREN); - setState(643); + setState(651); selectUnionStmt(); - setState(644); + setState(652); match(HogQLParser::RPAREN); break; } - case 17: { + case 18: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(646); + setState(654); match(HogQLParser::LPAREN); - setState(647); + setState(655); columnExpr(0); - setState(648); + setState(656); match(HogQLParser::RPAREN); break; } - case 18: { + case 19: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(650); + setState(658); match(HogQLParser::LPAREN); - setState(651); + setState(659); columnExprList(); - setState(652); + setState(660); match(HogQLParser::RPAREN); break; } - case 19: { + case 20: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(654); + setState(662); match(HogQLParser::LBRACKET); - setState(656); + setState(664); _errHandler->sync(this); _la = _input->LA(1); @@ -5878,20 +5926,20 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { ((1ULL << _la) & -33554436) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(655); + ((1ULL << (_la - 192)) & 70263309817) != 0)) { + setState(663); columnExprList(); } - setState(658); + setState(666); match(HogQLParser::RBRACKET); break; } - case 20: { + case 21: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(659); + setState(667); columnIdentifier(); break; } @@ -5900,7 +5948,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(755); + setState(763); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 91, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { @@ -5908,7 +5956,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { if (!_parseListeners.empty()) triggerExitRuleEvent(); previousContext = _localctx; - setState(753); + setState(761); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 90, _ctx)) { case 1: { @@ -5916,26 +5964,26 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(662); + setState(670); if (!(precpred(_ctx, 17))) throw FailedPredicateException(this, "precpred(_ctx, 17)"); - setState(666); + setState(674); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::ASTERISK: { - setState(663); + setState(671); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::ASTERISK); break; } case HogQLParser::SLASH: { - setState(664); + setState(672); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::SLASH); break; } case HogQLParser::PERCENT: { - setState(665); + setState(673); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::PERCENT); break; } @@ -5943,7 +5991,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: throw NoViableAltException(this); } - setState(668); + setState(676); antlrcpp::downCast(_localctx)->right = columnExpr(18); break; } @@ -5953,26 +6001,26 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(669); + setState(677); if (!(precpred(_ctx, 16))) throw FailedPredicateException(this, "precpred(_ctx, 16)"); - setState(673); + setState(681); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::PLUS: { - setState(670); + setState(678); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::PLUS); break; } case HogQLParser::DASH: { - setState(671); + setState(679); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::DASH); break; } case HogQLParser::CONCAT: { - setState(672); + setState(680); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::CONCAT); break; } @@ -5980,7 +6028,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: throw NoViableAltException(this); } - setState(675); + setState(683); antlrcpp::downCast(_localctx)->right = columnExpr(17); break; } @@ -5990,86 +6038,86 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { _localctx = newContext; newContext->left = previousContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(676); + setState(684); if (!(precpred(_ctx, 15))) throw FailedPredicateException(this, "precpred(_ctx, 15)"); - setState(701); + setState(709); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 86, _ctx)) { case 1: { - setState(677); + setState(685); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::EQ_DOUBLE); break; } case 2: { - setState(678); + setState(686); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::EQ_SINGLE); break; } case 3: { - setState(679); + setState(687); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_EQ); break; } case 4: { - setState(680); + setState(688); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::LT_EQ); break; } case 5: { - setState(681); + setState(689); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::LT); break; } case 6: { - setState(682); + setState(690); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::GT_EQ); break; } case 7: { - setState(683); + setState(691); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::GT); break; } case 8: { - setState(685); + setState(693); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(684); + setState(692); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT); } - setState(687); + setState(695); match(HogQLParser::IN); - setState(689); + setState(697); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::COHORT) { - setState(688); + setState(696); match(HogQLParser::COHORT); } break; } case 9: { - setState(692); + setState(700); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(691); + setState(699); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT); } - setState(694); + setState(702); _la = _input->LA(1); if (!(_la == HogQLParser::ILIKE @@ -6084,37 +6132,37 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { } case 10: { - setState(695); + setState(703); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::REGEX_SINGLE); break; } case 11: { - setState(696); + setState(704); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::REGEX_DOUBLE); break; } case 12: { - setState(697); + setState(705); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_REGEX); break; } case 13: { - setState(698); + setState(706); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::IREGEX_SINGLE); break; } case 14: { - setState(699); + setState(707); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::IREGEX_DOUBLE); break; } case 15: { - setState(700); + setState(708); antlrcpp::downCast(_localctx)->operator_ = match(HogQLParser::NOT_IREGEX); break; } @@ -6122,7 +6170,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { default: break; } - setState(703); + setState(711); antlrcpp::downCast(_localctx)->right = columnExpr(16); break; } @@ -6131,12 +6179,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(704); + setState(712); if (!(precpred(_ctx, 13))) throw FailedPredicateException(this, "precpred(_ctx, 13)"); - setState(705); + setState(713); match(HogQLParser::NULLISH); - setState(706); + setState(714); columnExpr(14); break; } @@ -6145,12 +6193,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(707); + setState(715); if (!(precpred(_ctx, 11))) throw FailedPredicateException(this, "precpred(_ctx, 11)"); - setState(708); + setState(716); match(HogQLParser::AND); - setState(709); + setState(717); columnExpr(12); break; } @@ -6159,12 +6207,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(710); + setState(718); if (!(precpred(_ctx, 10))) throw FailedPredicateException(this, "precpred(_ctx, 10)"); - setState(711); + setState(719); match(HogQLParser::OR); - setState(712); + setState(720); columnExpr(11); break; } @@ -6173,24 +6221,24 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(713); + setState(721); if (!(precpred(_ctx, 9))) throw FailedPredicateException(this, "precpred(_ctx, 9)"); - setState(715); + setState(723); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(714); + setState(722); match(HogQLParser::NOT); } - setState(717); + setState(725); match(HogQLParser::BETWEEN); - setState(718); + setState(726); columnExpr(0); - setState(719); + setState(727); match(HogQLParser::AND); - setState(720); + setState(728); columnExpr(10); break; } @@ -6199,16 +6247,16 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(722); + setState(730); if (!(precpred(_ctx, 8))) throw FailedPredicateException(this, "precpred(_ctx, 8)"); - setState(723); + setState(731); match(HogQLParser::QUERY); - setState(724); + setState(732); columnExpr(0); - setState(725); + setState(733); match(HogQLParser::COLON); - setState(726); + setState(734); columnExpr(8); break; } @@ -6217,14 +6265,14 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(728); + setState(736); if (!(precpred(_ctx, 21))) throw FailedPredicateException(this, "precpred(_ctx, 21)"); - setState(729); + setState(737); match(HogQLParser::LBRACKET); - setState(730); + setState(738); columnExpr(0); - setState(731); + setState(739); match(HogQLParser::RBRACKET); break; } @@ -6233,12 +6281,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(733); + setState(741); if (!(precpred(_ctx, 20))) throw FailedPredicateException(this, "precpred(_ctx, 20)"); - setState(734); + setState(742); match(HogQLParser::DOT); - setState(735); + setState(743); match(HogQLParser::DECIMAL_LITERAL); break; } @@ -6247,12 +6295,12 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(736); + setState(744); if (!(precpred(_ctx, 19))) throw FailedPredicateException(this, "precpred(_ctx, 19)"); - setState(737); + setState(745); match(HogQLParser::DOT); - setState(738); + setState(746); identifier(); break; } @@ -6261,20 +6309,20 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(739); + setState(747); if (!(precpred(_ctx, 14))) throw FailedPredicateException(this, "precpred(_ctx, 14)"); - setState(740); + setState(748); match(HogQLParser::IS); - setState(742); + setState(750); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::NOT) { - setState(741); + setState(749); match(HogQLParser::NOT); } - setState(744); + setState(752); match(HogQLParser::NULL_SQL); break; } @@ -6283,30 +6331,30 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleColumnExpr); - setState(745); + setState(753); if (!(precpred(_ctx, 7))) throw FailedPredicateException(this, "precpred(_ctx, 7)"); - setState(751); + setState(759); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 89, _ctx)) { case 1: { - setState(746); + setState(754); alias(); break; } case 2: { - setState(747); + setState(755); match(HogQLParser::AS); - setState(748); + setState(756); identifier(); break; } case 3: { - setState(749); + setState(757); match(HogQLParser::AS); - setState(750); + setState(758); match(HogQLParser::STRING_LITERAL); break; } @@ -6321,7 +6369,7 @@ HogQLParser::ColumnExprContext* HogQLParser::columnExpr(int precedence) { break; } } - setState(757); + setState(765); _errHandler->sync(this); alt = getInterpreter()->adaptivePredict(_input, 91, _ctx); } @@ -6383,17 +6431,17 @@ HogQLParser::ColumnArgListContext* HogQLParser::columnArgList() { }); try { enterOuterAlt(_localctx, 1); - setState(758); + setState(766); columnArgExpr(); - setState(763); + setState(771); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(759); + setState(767); match(HogQLParser::COMMA); - setState(760); + setState(768); columnArgExpr(); - setState(765); + setState(773); _errHandler->sync(this); _la = _input->LA(1); } @@ -6447,19 +6495,19 @@ HogQLParser::ColumnArgExprContext* HogQLParser::columnArgExpr() { exitRule(); }); try { - setState(768); + setState(776); _errHandler->sync(this); switch (getInterpreter()->adaptivePredict(_input, 93, _ctx)) { case 1: { enterOuterAlt(_localctx, 1); - setState(766); + setState(774); columnLambdaExpr(); break; } case 2: { enterOuterAlt(_localctx, 2); - setState(767); + setState(775); columnExpr(0); break; } @@ -6543,27 +6591,27 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(789); + setState(797); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::LPAREN: { - setState(770); + setState(778); match(HogQLParser::LPAREN); - setState(771); + setState(779); identifier(); - setState(776); + setState(784); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(772); + setState(780); match(HogQLParser::COMMA); - setState(773); + setState(781); identifier(); - setState(778); + setState(786); _errHandler->sync(this); _la = _input->LA(1); } - setState(779); + setState(787); match(HogQLParser::RPAREN); break; } @@ -6755,17 +6803,17 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { case HogQLParser::JSON_FALSE: case HogQLParser::JSON_TRUE: case HogQLParser::IDENTIFIER: { - setState(781); + setState(789); identifier(); - setState(786); + setState(794); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(782); + setState(790); match(HogQLParser::COMMA); - setState(783); + setState(791); identifier(); - setState(788); + setState(796); _errHandler->sync(this); _la = _input->LA(1); } @@ -6775,9 +6823,9 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { default: throw NoViableAltException(this); } - setState(791); + setState(799); match(HogQLParser::ARROW); - setState(792); + setState(800); columnExpr(0); } @@ -6790,6 +6838,202 @@ HogQLParser::ColumnLambdaExprContext* HogQLParser::columnLambdaExpr() { return _localctx; } +//----------------- HogqlxTagElementContext ------------------------------------------------------------------ + +HogQLParser::HogqlxTagElementContext::HogqlxTagElementContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* HogQLParser::HogqlxTagElementContext::LT() { + return getToken(HogQLParser::LT, 0); +} + +HogQLParser::IdentifierContext* HogQLParser::HogqlxTagElementContext::identifier() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::HogqlxTagElementContext::SLASH() { + return getToken(HogQLParser::SLASH, 0); +} + +tree::TerminalNode* HogQLParser::HogqlxTagElementContext::GT() { + return getToken(HogQLParser::GT, 0); +} + +std::vector HogQLParser::HogqlxTagElementContext::hogqlxTagAttribute() { + return getRuleContexts(); +} + +HogQLParser::HogqlxTagAttributeContext* HogQLParser::HogqlxTagElementContext::hogqlxTagAttribute(size_t i) { + return getRuleContext(i); +} + + +size_t HogQLParser::HogqlxTagElementContext::getRuleIndex() const { + return HogQLParser::RuleHogqlxTagElement; +} + + +std::any HogQLParser::HogqlxTagElementContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitHogqlxTagElement(this); + else + return visitor->visitChildren(this); +} + +HogQLParser::HogqlxTagElementContext* HogQLParser::hogqlxTagElement() { + HogqlxTagElementContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 82, HogQLParser::RuleHogqlxTagElement); + size_t _la = 0; + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(802); + match(HogQLParser::LT); + setState(803); + identifier(); + setState(807); + _errHandler->sync(this); + _la = _input->LA(1); + while ((((_la & ~ 0x3fULL) == 0) && + ((1ULL << _la) & -33554436) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 64)) & -5066549581053953) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && + ((1ULL << (_la - 128)) & -9) != 0) || _la == HogQLParser::JSON_TRUE + + || _la == HogQLParser::IDENTIFIER) { + setState(804); + hogqlxTagAttribute(); + setState(809); + _errHandler->sync(this); + _la = _input->LA(1); + } + setState(810); + match(HogQLParser::SLASH); + setState(811); + match(HogQLParser::GT); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + +//----------------- HogqlxTagAttributeContext ------------------------------------------------------------------ + +HogQLParser::HogqlxTagAttributeContext::HogqlxTagAttributeContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +HogQLParser::IdentifierContext* HogQLParser::HogqlxTagAttributeContext::identifier() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::HogqlxTagAttributeContext::EQ_SINGLE() { + return getToken(HogQLParser::EQ_SINGLE, 0); +} + +tree::TerminalNode* HogQLParser::HogqlxTagAttributeContext::STRING_LITERAL() { + return getToken(HogQLParser::STRING_LITERAL, 0); +} + +tree::TerminalNode* HogQLParser::HogqlxTagAttributeContext::LBRACE() { + return getToken(HogQLParser::LBRACE, 0); +} + +HogQLParser::ColumnExprContext* HogQLParser::HogqlxTagAttributeContext::columnExpr() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::HogqlxTagAttributeContext::RBRACE() { + return getToken(HogQLParser::RBRACE, 0); +} + + +size_t HogQLParser::HogqlxTagAttributeContext::getRuleIndex() const { + return HogQLParser::RuleHogqlxTagAttribute; +} + + +std::any HogQLParser::HogqlxTagAttributeContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitHogqlxTagAttribute(this); + else + return visitor->visitChildren(this); +} + +HogQLParser::HogqlxTagAttributeContext* HogQLParser::hogqlxTagAttribute() { + HogqlxTagAttributeContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 84, HogQLParser::RuleHogqlxTagAttribute); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + setState(824); + _errHandler->sync(this); + switch (getInterpreter()->adaptivePredict(_input, 98, _ctx)) { + case 1: { + enterOuterAlt(_localctx, 1); + setState(813); + identifier(); + setState(814); + match(HogQLParser::EQ_SINGLE); + setState(815); + match(HogQLParser::STRING_LITERAL); + break; + } + + case 2: { + enterOuterAlt(_localctx, 2); + setState(817); + identifier(); + setState(818); + match(HogQLParser::EQ_SINGLE); + setState(819); + match(HogQLParser::LBRACE); + setState(820); + columnExpr(0); + setState(821); + match(HogQLParser::RBRACE); + break; + } + + case 3: { + enterOuterAlt(_localctx, 3); + setState(823); + identifier(); + break; + } + + default: + break; + } + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + //----------------- WithExprListContext ------------------------------------------------------------------ HogQLParser::WithExprListContext::WithExprListContext(ParserRuleContext *parent, size_t invokingState) @@ -6827,7 +7071,7 @@ std::any HogQLParser::WithExprListContext::accept(tree::ParseTreeVisitor *visito HogQLParser::WithExprListContext* HogQLParser::withExprList() { WithExprListContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 82, HogQLParser::RuleWithExprList); + enterRule(_localctx, 86, HogQLParser::RuleWithExprList); size_t _la = 0; #if __cplusplus > 201703L @@ -6839,17 +7083,17 @@ HogQLParser::WithExprListContext* HogQLParser::withExprList() { }); try { enterOuterAlt(_localctx, 1); - setState(794); + setState(826); withExpr(); - setState(799); + setState(831); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(795); + setState(827); match(HogQLParser::COMMA); - setState(796); + setState(828); withExpr(); - setState(801); + setState(833); _errHandler->sync(this); _la = _input->LA(1); } @@ -6935,7 +7179,7 @@ std::any HogQLParser::WithExprSubqueryContext::accept(tree::ParseTreeVisitor *vi } HogQLParser::WithExprContext* HogQLParser::withExpr() { WithExprContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 84, HogQLParser::RuleWithExpr); + enterRule(_localctx, 88, HogQLParser::RuleWithExpr); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -6945,21 +7189,21 @@ HogQLParser::WithExprContext* HogQLParser::withExpr() { exitRule(); }); try { - setState(812); + setState(844); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 98, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 100, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 1); - setState(802); + setState(834); identifier(); - setState(803); + setState(835); match(HogQLParser::AS); - setState(804); + setState(836); match(HogQLParser::LPAREN); - setState(805); + setState(837); selectUnionStmt(); - setState(806); + setState(838); match(HogQLParser::RPAREN); break; } @@ -6967,11 +7211,11 @@ HogQLParser::WithExprContext* HogQLParser::withExpr() { case 2: { _localctx = _tracker.createInstance(_localctx); enterOuterAlt(_localctx, 2); - setState(808); + setState(840); columnExpr(0); - setState(809); + setState(841); match(HogQLParser::AS); - setState(810); + setState(842); identifier(); break; } @@ -6996,8 +7240,8 @@ HogQLParser::ColumnIdentifierContext::ColumnIdentifierContext(ParserRuleContext : ParserRuleContext(parent, invokingState) { } -tree::TerminalNode* HogQLParser::ColumnIdentifierContext::PLACEHOLDER() { - return getToken(HogQLParser::PLACEHOLDER, 0); +HogQLParser::PlaceholderContext* HogQLParser::ColumnIdentifierContext::placeholder() { + return getRuleContext(0); } HogQLParser::NestedIdentifierContext* HogQLParser::ColumnIdentifierContext::nestedIdentifier() { @@ -7027,7 +7271,7 @@ std::any HogQLParser::ColumnIdentifierContext::accept(tree::ParseTreeVisitor *vi HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { ColumnIdentifierContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 86, HogQLParser::RuleColumnIdentifier); + enterRule(_localctx, 90, HogQLParser::RuleColumnIdentifier); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -7037,13 +7281,13 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { exitRule(); }); try { - setState(821); + setState(853); _errHandler->sync(this); switch (_input->LA(1)) { - case HogQLParser::PLACEHOLDER: { + case HogQLParser::LBRACE: { enterOuterAlt(_localctx, 1); - setState(814); - match(HogQLParser::PLACEHOLDER); + setState(846); + placeholder(); break; } @@ -7235,14 +7479,14 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { case HogQLParser::JSON_TRUE: case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 2); - setState(818); + setState(850); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 99, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 101, _ctx)) { case 1: { - setState(815); + setState(847); tableIdentifier(); - setState(816); + setState(848); match(HogQLParser::DOT); break; } @@ -7250,7 +7494,7 @@ HogQLParser::ColumnIdentifierContext* HogQLParser::columnIdentifier() { default: break; } - setState(820); + setState(852); nestedIdentifier(); break; } @@ -7306,7 +7550,7 @@ std::any HogQLParser::NestedIdentifierContext::accept(tree::ParseTreeVisitor *vi HogQLParser::NestedIdentifierContext* HogQLParser::nestedIdentifier() { NestedIdentifierContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 88, HogQLParser::RuleNestedIdentifier); + enterRule(_localctx, 92, HogQLParser::RuleNestedIdentifier); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -7318,21 +7562,21 @@ HogQLParser::NestedIdentifierContext* HogQLParser::nestedIdentifier() { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(823); + setState(855); identifier(); - setState(828); + setState(860); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 101, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 103, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { - setState(824); + setState(856); match(HogQLParser::DOT); - setState(825); + setState(857); identifier(); } - setState(830); + setState(862); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 101, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 103, _ctx); } } @@ -7360,6 +7604,21 @@ void HogQLParser::TableExprContext::copyFrom(TableExprContext *ctx) { ParserRuleContext::copyFrom(ctx); } +//----------------- TableExprTagContext ------------------------------------------------------------------ + +HogQLParser::HogqlxTagElementContext* HogQLParser::TableExprTagContext::hogqlxTagElement() { + return getRuleContext(0); +} + +HogQLParser::TableExprTagContext::TableExprTagContext(TableExprContext *ctx) { copyFrom(ctx); } + + +std::any HogQLParser::TableExprTagContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitTableExprTag(this); + else + return visitor->visitChildren(this); +} //----------------- TableExprIdentifierContext ------------------------------------------------------------------ HogQLParser::TableIdentifierContext* HogQLParser::TableExprIdentifierContext::tableIdentifier() { @@ -7377,8 +7636,8 @@ std::any HogQLParser::TableExprIdentifierContext::accept(tree::ParseTreeVisitor } //----------------- TableExprPlaceholderContext ------------------------------------------------------------------ -tree::TerminalNode* HogQLParser::TableExprPlaceholderContext::PLACEHOLDER() { - return getToken(HogQLParser::PLACEHOLDER, 0); +HogQLParser::PlaceholderContext* HogQLParser::TableExprPlaceholderContext::placeholder() { + return getRuleContext(0); } HogQLParser::TableExprPlaceholderContext::TableExprPlaceholderContext(TableExprContext *ctx) { copyFrom(ctx); } @@ -7466,8 +7725,8 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { HogQLParser::TableExprContext *_localctx = _tracker.createInstance(_ctx, parentState); HogQLParser::TableExprContext *previousContext = _localctx; (void)previousContext; // Silence compiler, in case the context is not used by generated code. - size_t startState = 90; - enterRecursionRule(_localctx, 90, HogQLParser::RuleTableExpr, precedence); + size_t startState = 94; + enterRecursionRule(_localctx, 94, HogQLParser::RuleTableExpr, precedence); @@ -7481,15 +7740,15 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { try { size_t alt; enterOuterAlt(_localctx, 1); - setState(839); + setState(872); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 102, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 104, _ctx)) { case 1: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(832); + setState(864); tableIdentifier(); break; } @@ -7498,7 +7757,7 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(833); + setState(865); tableFunctionExpr(); break; } @@ -7507,21 +7766,30 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(834); + setState(866); match(HogQLParser::LPAREN); - setState(835); + setState(867); selectUnionStmt(); - setState(836); + setState(868); match(HogQLParser::RPAREN); break; } case 4: { + _localctx = _tracker.createInstance(_localctx); + _ctx = _localctx; + previousContext = _localctx; + setState(870); + hogqlxTagElement(); + break; + } + + case 5: { _localctx = _tracker.createInstance(_localctx); _ctx = _localctx; previousContext = _localctx; - setState(838); - match(HogQLParser::PLACEHOLDER); + setState(871); + placeholder(); break; } @@ -7529,9 +7797,9 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { break; } _ctx->stop = _input->LT(-1); - setState(849); + setState(882); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 104, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 106, _ctx); while (alt != 2 && alt != atn::ATN::INVALID_ALT_NUMBER) { if (alt == 1) { if (!_parseListeners.empty()) @@ -7540,10 +7808,10 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { auto newContext = _tracker.createInstance(_tracker.createInstance(parentContext, parentState)); _localctx = newContext; pushNewRecursionContext(newContext, startState, RuleTableExpr); - setState(841); + setState(874); - if (!(precpred(_ctx, 2))) throw FailedPredicateException(this, "precpred(_ctx, 2)"); - setState(845); + if (!(precpred(_ctx, 3))) throw FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(878); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::DATE: @@ -7551,15 +7819,15 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { case HogQLParser::ID: case HogQLParser::KEY: case HogQLParser::IDENTIFIER: { - setState(842); + setState(875); alias(); break; } case HogQLParser::AS: { - setState(843); + setState(876); match(HogQLParser::AS); - setState(844); + setState(877); identifier(); break; } @@ -7568,9 +7836,9 @@ HogQLParser::TableExprContext* HogQLParser::tableExpr(int precedence) { throw NoViableAltException(this); } } - setState(851); + setState(884); _errHandler->sync(this); - alt = getInterpreter()->adaptivePredict(_input, 104, _ctx); + alt = getInterpreter()->adaptivePredict(_input, 106, _ctx); } } catch (RecognitionException &e) { @@ -7618,7 +7886,7 @@ std::any HogQLParser::TableFunctionExprContext::accept(tree::ParseTreeVisitor *v HogQLParser::TableFunctionExprContext* HogQLParser::tableFunctionExpr() { TableFunctionExprContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 92, HogQLParser::RuleTableFunctionExpr); + enterRule(_localctx, 96, HogQLParser::RuleTableFunctionExpr); size_t _la = 0; #if __cplusplus > 201703L @@ -7630,11 +7898,11 @@ HogQLParser::TableFunctionExprContext* HogQLParser::tableFunctionExpr() { }); try { enterOuterAlt(_localctx, 1); - setState(852); + setState(885); identifier(); - setState(853); + setState(886); match(HogQLParser::LPAREN); - setState(855); + setState(888); _errHandler->sync(this); _la = _input->LA(1); @@ -7642,11 +7910,11 @@ HogQLParser::TableFunctionExprContext* HogQLParser::tableFunctionExpr() { ((1ULL << _la) & -33554436) != 0) || ((((_la - 64) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 64)) & -1) != 0) || ((((_la - 128) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 128)) & -9) != 0) || ((((_la - 192) & ~ 0x3fULL) == 0) && - ((1ULL << (_la - 192)) & 69122459133) != 0)) { - setState(854); + ((1ULL << (_la - 192)) & 70263309817) != 0)) { + setState(887); tableArgList(); } - setState(857); + setState(890); match(HogQLParser::RPAREN); } @@ -7692,7 +7960,7 @@ std::any HogQLParser::TableIdentifierContext::accept(tree::ParseTreeVisitor *vis HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { TableIdentifierContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 94, HogQLParser::RuleTableIdentifier); + enterRule(_localctx, 98, HogQLParser::RuleTableIdentifier); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -7703,14 +7971,14 @@ HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(862); + setState(895); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 106, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 108, _ctx)) { case 1: { - setState(859); + setState(892); databaseIdentifier(); - setState(860); + setState(893); match(HogQLParser::DOT); break; } @@ -7718,7 +7986,7 @@ HogQLParser::TableIdentifierContext* HogQLParser::tableIdentifier() { default: break; } - setState(864); + setState(897); identifier(); } @@ -7768,7 +8036,7 @@ std::any HogQLParser::TableArgListContext::accept(tree::ParseTreeVisitor *visito HogQLParser::TableArgListContext* HogQLParser::tableArgList() { TableArgListContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 96, HogQLParser::RuleTableArgList); + enterRule(_localctx, 100, HogQLParser::RuleTableArgList); size_t _la = 0; #if __cplusplus > 201703L @@ -7780,17 +8048,17 @@ HogQLParser::TableArgListContext* HogQLParser::tableArgList() { }); try { enterOuterAlt(_localctx, 1); - setState(866); + setState(899); columnExpr(0); - setState(871); + setState(904); _errHandler->sync(this); _la = _input->LA(1); while (_la == HogQLParser::COMMA) { - setState(867); + setState(900); match(HogQLParser::COMMA); - setState(868); + setState(901); columnExpr(0); - setState(873); + setState(906); _errHandler->sync(this); _la = _input->LA(1); } @@ -7830,7 +8098,7 @@ std::any HogQLParser::DatabaseIdentifierContext::accept(tree::ParseTreeVisitor * HogQLParser::DatabaseIdentifierContext* HogQLParser::databaseIdentifier() { DatabaseIdentifierContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 98, HogQLParser::RuleDatabaseIdentifier); + enterRule(_localctx, 102, HogQLParser::RuleDatabaseIdentifier); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -7841,7 +8109,7 @@ HogQLParser::DatabaseIdentifierContext* HogQLParser::databaseIdentifier() { }); try { enterOuterAlt(_localctx, 1); - setState(874); + setState(907); identifier(); } @@ -7895,7 +8163,7 @@ std::any HogQLParser::FloatingLiteralContext::accept(tree::ParseTreeVisitor *vis HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { FloatingLiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 100, HogQLParser::RuleFloatingLiteral); + enterRule(_localctx, 104, HogQLParser::RuleFloatingLiteral); size_t _la = 0; #if __cplusplus > 201703L @@ -7906,21 +8174,21 @@ HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { exitRule(); }); try { - setState(884); + setState(917); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::FLOATING_LITERAL: { enterOuterAlt(_localctx, 1); - setState(876); + setState(909); match(HogQLParser::FLOATING_LITERAL); break; } case HogQLParser::DOT: { enterOuterAlt(_localctx, 2); - setState(877); + setState(910); match(HogQLParser::DOT); - setState(878); + setState(911); _la = _input->LA(1); if (!(_la == HogQLParser::OCTAL_LITERAL @@ -7936,16 +8204,16 @@ HogQLParser::FloatingLiteralContext* HogQLParser::floatingLiteral() { case HogQLParser::DECIMAL_LITERAL: { enterOuterAlt(_localctx, 3); - setState(879); + setState(912); match(HogQLParser::DECIMAL_LITERAL); - setState(880); + setState(913); match(HogQLParser::DOT); - setState(882); + setState(915); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 108, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 110, _ctx)) { case 1: { - setState(881); + setState(914); _la = _input->LA(1); if (!(_la == HogQLParser::OCTAL_LITERAL @@ -8032,7 +8300,7 @@ std::any HogQLParser::NumberLiteralContext::accept(tree::ParseTreeVisitor *visit HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { NumberLiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 102, HogQLParser::RuleNumberLiteral); + enterRule(_localctx, 106, HogQLParser::RuleNumberLiteral); size_t _la = 0; #if __cplusplus > 201703L @@ -8044,14 +8312,14 @@ HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { }); try { enterOuterAlt(_localctx, 1); - setState(887); + setState(920); _errHandler->sync(this); _la = _input->LA(1); if (_la == HogQLParser::DASH || _la == HogQLParser::PLUS) { - setState(886); + setState(919); _la = _input->LA(1); if (!(_la == HogQLParser::DASH @@ -8063,41 +8331,41 @@ HogQLParser::NumberLiteralContext* HogQLParser::numberLiteral() { consume(); } } - setState(895); + setState(928); _errHandler->sync(this); - switch (getInterpreter()->adaptivePredict(_input, 111, _ctx)) { + switch (getInterpreter()->adaptivePredict(_input, 113, _ctx)) { case 1: { - setState(889); + setState(922); floatingLiteral(); break; } case 2: { - setState(890); + setState(923); match(HogQLParser::OCTAL_LITERAL); break; } case 3: { - setState(891); + setState(924); match(HogQLParser::DECIMAL_LITERAL); break; } case 4: { - setState(892); + setState(925); match(HogQLParser::HEXADECIMAL_LITERAL); break; } case 5: { - setState(893); + setState(926); match(HogQLParser::INF); break; } case 6: { - setState(894); + setState(927); match(HogQLParser::NAN_SQL); break; } @@ -8149,7 +8417,7 @@ std::any HogQLParser::LiteralContext::accept(tree::ParseTreeVisitor *visitor) { HogQLParser::LiteralContext* HogQLParser::literal() { LiteralContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 104, HogQLParser::RuleLiteral); + enterRule(_localctx, 108, HogQLParser::RuleLiteral); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -8159,7 +8427,7 @@ HogQLParser::LiteralContext* HogQLParser::literal() { exitRule(); }); try { - setState(900); + setState(933); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::INF: @@ -8172,21 +8440,21 @@ HogQLParser::LiteralContext* HogQLParser::literal() { case HogQLParser::DOT: case HogQLParser::PLUS: { enterOuterAlt(_localctx, 1); - setState(897); + setState(930); numberLiteral(); break; } case HogQLParser::STRING_LITERAL: { enterOuterAlt(_localctx, 2); - setState(898); + setState(931); match(HogQLParser::STRING_LITERAL); break; } case HogQLParser::NULL_SQL: { enterOuterAlt(_localctx, 3); - setState(899); + setState(932); match(HogQLParser::NULL_SQL); break; } @@ -8258,7 +8526,7 @@ std::any HogQLParser::IntervalContext::accept(tree::ParseTreeVisitor *visitor) { HogQLParser::IntervalContext* HogQLParser::interval() { IntervalContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 106, HogQLParser::RuleInterval); + enterRule(_localctx, 110, HogQLParser::RuleInterval); size_t _la = 0; #if __cplusplus > 201703L @@ -8270,7 +8538,7 @@ HogQLParser::IntervalContext* HogQLParser::interval() { }); try { enterOuterAlt(_localctx, 1); - setState(902); + setState(935); _la = _input->LA(1); if (!(_la == HogQLParser::DAY || ((((_la - 76) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 76)) & 72057615512764417) != 0) || ((((_la - 145) & ~ 0x3fULL) == 0) && @@ -9025,7 +9293,7 @@ std::any HogQLParser::KeywordContext::accept(tree::ParseTreeVisitor *visitor) { HogQLParser::KeywordContext* HogQLParser::keyword() { KeywordContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 108, HogQLParser::RuleKeyword); + enterRule(_localctx, 112, HogQLParser::RuleKeyword); size_t _la = 0; #if __cplusplus > 201703L @@ -9037,7 +9305,7 @@ HogQLParser::KeywordContext* HogQLParser::keyword() { }); try { enterOuterAlt(_localctx, 1); - setState(904); + setState(937); _la = _input->LA(1); if (!(((((_la - 2) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 2)) & -34368126977) != 0) || ((((_la - 66) & ~ 0x3fULL) == 0) && @@ -9097,7 +9365,7 @@ std::any HogQLParser::KeywordForAliasContext::accept(tree::ParseTreeVisitor *vis HogQLParser::KeywordForAliasContext* HogQLParser::keywordForAlias() { KeywordForAliasContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 110, HogQLParser::RuleKeywordForAlias); + enterRule(_localctx, 114, HogQLParser::RuleKeywordForAlias); size_t _la = 0; #if __cplusplus > 201703L @@ -9109,7 +9377,7 @@ HogQLParser::KeywordForAliasContext* HogQLParser::keywordForAlias() { }); try { enterOuterAlt(_localctx, 1); - setState(906); + setState(939); _la = _input->LA(1); if (!(((((_la - 36) & ~ 0x3fULL) == 0) && ((1ULL << (_la - 36)) & 36030996109328385) != 0))) { @@ -9159,7 +9427,7 @@ std::any HogQLParser::AliasContext::accept(tree::ParseTreeVisitor *visitor) { HogQLParser::AliasContext* HogQLParser::alias() { AliasContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 112, HogQLParser::RuleAlias); + enterRule(_localctx, 116, HogQLParser::RuleAlias); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9169,12 +9437,12 @@ HogQLParser::AliasContext* HogQLParser::alias() { exitRule(); }); try { - setState(910); + setState(943); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 1); - setState(908); + setState(941); match(HogQLParser::IDENTIFIER); break; } @@ -9184,7 +9452,7 @@ HogQLParser::AliasContext* HogQLParser::alias() { case HogQLParser::ID: case HogQLParser::KEY: { enterOuterAlt(_localctx, 2); - setState(909); + setState(942); keywordForAlias(); break; } @@ -9236,7 +9504,7 @@ std::any HogQLParser::IdentifierContext::accept(tree::ParseTreeVisitor *visitor) HogQLParser::IdentifierContext* HogQLParser::identifier() { IdentifierContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 114, HogQLParser::RuleIdentifier); + enterRule(_localctx, 118, HogQLParser::RuleIdentifier); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9246,12 +9514,12 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { exitRule(); }); try { - setState(915); + setState(948); _errHandler->sync(this); switch (_input->LA(1)) { case HogQLParser::IDENTIFIER: { enterOuterAlt(_localctx, 1); - setState(912); + setState(945); match(HogQLParser::IDENTIFIER); break; } @@ -9265,7 +9533,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::WEEK: case HogQLParser::YEAR: { enterOuterAlt(_localctx, 2); - setState(913); + setState(946); interval(); break; } @@ -9449,7 +9717,7 @@ HogQLParser::IdentifierContext* HogQLParser::identifier() { case HogQLParser::JSON_FALSE: case HogQLParser::JSON_TRUE: { enterOuterAlt(_localctx, 3); - setState(914); + setState(947); keyword(); break; } @@ -9501,7 +9769,7 @@ std::any HogQLParser::EnumValueContext::accept(tree::ParseTreeVisitor *visitor) HogQLParser::EnumValueContext* HogQLParser::enumValue() { EnumValueContext *_localctx = _tracker.createInstance(_ctx, getState()); - enterRule(_localctx, 116, HogQLParser::RuleEnumValue); + enterRule(_localctx, 120, HogQLParser::RuleEnumValue); #if __cplusplus > 201703L auto onExit = finally([=, this] { @@ -9512,11 +9780,11 @@ HogQLParser::EnumValueContext* HogQLParser::enumValue() { }); try { enterOuterAlt(_localctx, 1); - setState(917); + setState(950); match(HogQLParser::STRING_LITERAL); - setState(918); + setState(951); match(HogQLParser::EQ_SINGLE); - setState(919); + setState(952); numberLiteral(); } @@ -9529,11 +9797,72 @@ HogQLParser::EnumValueContext* HogQLParser::enumValue() { return _localctx; } +//----------------- PlaceholderContext ------------------------------------------------------------------ + +HogQLParser::PlaceholderContext::PlaceholderContext(ParserRuleContext *parent, size_t invokingState) + : ParserRuleContext(parent, invokingState) { +} + +tree::TerminalNode* HogQLParser::PlaceholderContext::LBRACE() { + return getToken(HogQLParser::LBRACE, 0); +} + +HogQLParser::IdentifierContext* HogQLParser::PlaceholderContext::identifier() { + return getRuleContext(0); +} + +tree::TerminalNode* HogQLParser::PlaceholderContext::RBRACE() { + return getToken(HogQLParser::RBRACE, 0); +} + + +size_t HogQLParser::PlaceholderContext::getRuleIndex() const { + return HogQLParser::RulePlaceholder; +} + + +std::any HogQLParser::PlaceholderContext::accept(tree::ParseTreeVisitor *visitor) { + if (auto parserVisitor = dynamic_cast(visitor)) + return parserVisitor->visitPlaceholder(this); + else + return visitor->visitChildren(this); +} + +HogQLParser::PlaceholderContext* HogQLParser::placeholder() { + PlaceholderContext *_localctx = _tracker.createInstance(_ctx, getState()); + enterRule(_localctx, 122, HogQLParser::RulePlaceholder); + +#if __cplusplus > 201703L + auto onExit = finally([=, this] { +#else + auto onExit = finally([=] { +#endif + exitRule(); + }); + try { + enterOuterAlt(_localctx, 1); + setState(954); + match(HogQLParser::LBRACE); + setState(955); + identifier(); + setState(956); + match(HogQLParser::RBRACE); + + } + catch (RecognitionException &e) { + _errHandler->reportError(this, e); + _localctx->exception = std::current_exception(); + _errHandler->recover(this, _localctx->exception); + } + + return _localctx; +} + bool HogQLParser::sempred(RuleContext *context, size_t ruleIndex, size_t predicateIndex) { switch (ruleIndex) { case 18: return joinExprSempred(antlrcpp::downCast(context), predicateIndex); case 37: return columnExprSempred(antlrcpp::downCast(context), predicateIndex); - case 45: return tableExprSempred(antlrcpp::downCast(context), predicateIndex); + case 47: return tableExprSempred(antlrcpp::downCast(context), predicateIndex); default: break; @@ -9576,7 +9905,7 @@ bool HogQLParser::columnExprSempred(ColumnExprContext *_localctx, size_t predica bool HogQLParser::tableExprSempred(TableExprContext *_localctx, size_t predicateIndex) { switch (predicateIndex) { - case 15: return precpred(_ctx, 2); + case 15: return precpred(_ctx, 3); default: break; diff --git a/hogql_parser/HogQLParser.h b/hogql_parser/HogQLParser.h index 1984b66e28b98..7ffcc0f11d061 100644 --- a/hogql_parser/HogQLParser.h +++ b/hogql_parser/HogQLParser.h @@ -46,17 +46,17 @@ class HogQLParser : public antlr4::Parser { UNION = 176, UPDATE = 177, USE = 178, USING = 179, UUID = 180, VALUES = 181, VIEW = 182, VOLUME = 183, WATCH = 184, WEEK = 185, WHEN = 186, WHERE = 187, WINDOW = 188, WITH = 189, YEAR = 190, JSON_FALSE = 191, JSON_TRUE = 192, - ESCAPE_CHAR = 193, IDENTIFIER = 194, FLOATING_LITERAL = 195, OCTAL_LITERAL = 196, - DECIMAL_LITERAL = 197, HEXADECIMAL_LITERAL = 198, STRING_LITERAL = 199, - PLACEHOLDER = 200, ARROW = 201, ASTERISK = 202, BACKQUOTE = 203, BACKSLASH = 204, - COLON = 205, COMMA = 206, CONCAT = 207, DASH = 208, DOLLAR = 209, DOT = 210, - EQ_DOUBLE = 211, EQ_SINGLE = 212, GT_EQ = 213, GT = 214, HASH = 215, - IREGEX_SINGLE = 216, IREGEX_DOUBLE = 217, LBRACE = 218, LBRACKET = 219, - LPAREN = 220, LT_EQ = 221, LT = 222, NOT_EQ = 223, NOT_IREGEX = 224, - NOT_REGEX = 225, NULLISH = 226, PERCENT = 227, PLUS = 228, QUERY = 229, - QUOTE_DOUBLE = 230, QUOTE_SINGLE = 231, REGEX_SINGLE = 232, REGEX_DOUBLE = 233, - RBRACE = 234, RBRACKET = 235, RPAREN = 236, SEMICOLON = 237, SLASH = 238, - UNDERSCORE = 239, MULTI_LINE_COMMENT = 240, SINGLE_LINE_COMMENT = 241, + ESCAPE_CHAR_SINGLE = 193, ESCAPE_CHAR_DOUBLE = 194, IDENTIFIER = 195, + FLOATING_LITERAL = 196, OCTAL_LITERAL = 197, DECIMAL_LITERAL = 198, + HEXADECIMAL_LITERAL = 199, STRING_LITERAL = 200, ARROW = 201, ASTERISK = 202, + BACKQUOTE = 203, BACKSLASH = 204, COLON = 205, COMMA = 206, CONCAT = 207, + DASH = 208, DOLLAR = 209, DOT = 210, EQ_DOUBLE = 211, EQ_SINGLE = 212, + GT_EQ = 213, GT = 214, HASH = 215, IREGEX_SINGLE = 216, IREGEX_DOUBLE = 217, + LBRACE = 218, LBRACKET = 219, LPAREN = 220, LT_EQ = 221, LT = 222, NOT_EQ = 223, + NOT_IREGEX = 224, NOT_REGEX = 225, NULLISH = 226, PERCENT = 227, PLUS = 228, + QUERY = 229, QUOTE_DOUBLE = 230, QUOTE_SINGLE = 231, REGEX_SINGLE = 232, + REGEX_DOUBLE = 233, RBRACE = 234, RBRACKET = 235, RPAREN = 236, SEMICOLON = 237, + SLASH = 238, UNDERSCORE = 239, MULTI_LINE_COMMENT = 240, SINGLE_LINE_COMMENT = 241, WHITESPACE = 242 }; @@ -73,12 +73,13 @@ class HogQLParser : public antlr4::Parser { RuleWinPartitionByClause = 29, RuleWinOrderByClause = 30, RuleWinFrameClause = 31, RuleWinFrameExtend = 32, RuleWinFrameBound = 33, RuleExpr = 34, RuleColumnTypeExpr = 35, RuleColumnExprList = 36, RuleColumnExpr = 37, RuleColumnArgList = 38, - RuleColumnArgExpr = 39, RuleColumnLambdaExpr = 40, RuleWithExprList = 41, - RuleWithExpr = 42, RuleColumnIdentifier = 43, RuleNestedIdentifier = 44, - RuleTableExpr = 45, RuleTableFunctionExpr = 46, RuleTableIdentifier = 47, - RuleTableArgList = 48, RuleDatabaseIdentifier = 49, RuleFloatingLiteral = 50, - RuleNumberLiteral = 51, RuleLiteral = 52, RuleInterval = 53, RuleKeyword = 54, - RuleKeywordForAlias = 55, RuleAlias = 56, RuleIdentifier = 57, RuleEnumValue = 58 + RuleColumnArgExpr = 39, RuleColumnLambdaExpr = 40, RuleHogqlxTagElement = 41, + RuleHogqlxTagAttribute = 42, RuleWithExprList = 43, RuleWithExpr = 44, + RuleColumnIdentifier = 45, RuleNestedIdentifier = 46, RuleTableExpr = 47, + RuleTableFunctionExpr = 48, RuleTableIdentifier = 49, RuleTableArgList = 50, + RuleDatabaseIdentifier = 51, RuleFloatingLiteral = 52, RuleNumberLiteral = 53, + RuleLiteral = 54, RuleInterval = 55, RuleKeyword = 56, RuleKeywordForAlias = 57, + RuleAlias = 58, RuleIdentifier = 59, RuleEnumValue = 60, RulePlaceholder = 61 }; explicit HogQLParser(antlr4::TokenStream *input); @@ -139,6 +140,8 @@ class HogQLParser : public antlr4::Parser { class ColumnArgListContext; class ColumnArgExprContext; class ColumnLambdaExprContext; + class HogqlxTagElementContext; + class HogqlxTagAttributeContext; class WithExprListContext; class WithExprContext; class ColumnIdentifierContext; @@ -156,7 +159,8 @@ class HogQLParser : public antlr4::Parser { class KeywordForAliasContext; class AliasContext; class IdentifierContext; - class EnumValueContext; + class EnumValueContext; + class PlaceholderContext; class SelectContext : public antlr4::ParserRuleContext { public: @@ -165,6 +169,7 @@ class HogQLParser : public antlr4::Parser { antlr4::tree::TerminalNode *EOF(); SelectUnionStmtContext *selectUnionStmt(); SelectStmtContext *selectStmt(); + HogqlxTagElementContext *hogqlxTagElement(); virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; @@ -675,7 +680,7 @@ class HogQLParser : public antlr4::Parser { public: RatioExprContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - antlr4::tree::TerminalNode *PLACEHOLDER(); + PlaceholderContext *placeholder(); std::vector numberLiteral(); NumberLiteralContext* numberLiteral(size_t i); antlr4::tree::TerminalNode *SLASH(); @@ -1194,6 +1199,15 @@ class HogQLParser : public antlr4::Parser { virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; + class ColumnExprTagElementContext : public ColumnExprContext { + public: + ColumnExprTagElementContext(ColumnExprContext *ctx); + + HogqlxTagElementContext *hogqlxTagElement(); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class ColumnExprTupleContext : public ColumnExprContext { public: ColumnExprTupleContext(ColumnExprContext *ctx); @@ -1440,6 +1454,42 @@ class HogQLParser : public antlr4::Parser { ColumnLambdaExprContext* columnLambdaExpr(); + class HogqlxTagElementContext : public antlr4::ParserRuleContext { + public: + HogqlxTagElementContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *LT(); + IdentifierContext *identifier(); + antlr4::tree::TerminalNode *SLASH(); + antlr4::tree::TerminalNode *GT(); + std::vector hogqlxTagAttribute(); + HogqlxTagAttributeContext* hogqlxTagAttribute(size_t i); + + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + HogqlxTagElementContext* hogqlxTagElement(); + + class HogqlxTagAttributeContext : public antlr4::ParserRuleContext { + public: + HogqlxTagAttributeContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + IdentifierContext *identifier(); + antlr4::tree::TerminalNode *EQ_SINGLE(); + antlr4::tree::TerminalNode *STRING_LITERAL(); + antlr4::tree::TerminalNode *LBRACE(); + ColumnExprContext *columnExpr(); + antlr4::tree::TerminalNode *RBRACE(); + + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + HogqlxTagAttributeContext* hogqlxTagAttribute(); + class WithExprListContext : public antlr4::ParserRuleContext { public: WithExprListContext(antlr4::ParserRuleContext *parent, size_t invokingState); @@ -1499,7 +1549,7 @@ class HogQLParser : public antlr4::Parser { public: ColumnIdentifierContext(antlr4::ParserRuleContext *parent, size_t invokingState); virtual size_t getRuleIndex() const override; - antlr4::tree::TerminalNode *PLACEHOLDER(); + PlaceholderContext *placeholder(); NestedIdentifierContext *nestedIdentifier(); TableIdentifierContext *tableIdentifier(); antlr4::tree::TerminalNode *DOT(); @@ -1540,6 +1590,15 @@ class HogQLParser : public antlr4::Parser { }; + class TableExprTagContext : public TableExprContext { + public: + TableExprTagContext(TableExprContext *ctx); + + HogqlxTagElementContext *hogqlxTagElement(); + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + }; + class TableExprIdentifierContext : public TableExprContext { public: TableExprIdentifierContext(TableExprContext *ctx); @@ -1553,7 +1612,7 @@ class HogQLParser : public antlr4::Parser { public: TableExprPlaceholderContext(TableExprContext *ctx); - antlr4::tree::TerminalNode *PLACEHOLDER(); + PlaceholderContext *placeholder(); virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; }; @@ -1974,6 +2033,21 @@ class HogQLParser : public antlr4::Parser { EnumValueContext* enumValue(); + class PlaceholderContext : public antlr4::ParserRuleContext { + public: + PlaceholderContext(antlr4::ParserRuleContext *parent, size_t invokingState); + virtual size_t getRuleIndex() const override; + antlr4::tree::TerminalNode *LBRACE(); + IdentifierContext *identifier(); + antlr4::tree::TerminalNode *RBRACE(); + + + virtual std::any accept(antlr4::tree::ParseTreeVisitor *visitor) override; + + }; + + PlaceholderContext* placeholder(); + bool sempred(antlr4::RuleContext *_localctx, size_t ruleIndex, size_t predicateIndex) override; diff --git a/hogql_parser/HogQLParser.interp b/hogql_parser/HogQLParser.interp index d7adc1a3a9959..7c3bcc9602550 100644 --- a/hogql_parser/HogQLParser.interp +++ b/hogql_parser/HogQLParser.interp @@ -437,14 +437,14 @@ WITH YEAR JSON_FALSE JSON_TRUE -ESCAPE_CHAR +ESCAPE_CHAR_SINGLE +ESCAPE_CHAR_DOUBLE IDENTIFIER FLOATING_LITERAL OCTAL_LITERAL DECIMAL_LITERAL HEXADECIMAL_LITERAL STRING_LITERAL -PLACEHOLDER ARROW ASTERISK BACKQUOTE @@ -530,6 +530,8 @@ columnExpr columnArgList columnArgExpr columnLambdaExpr +hogqlxTagElement +hogqlxTagAttribute withExprList withExpr columnIdentifier @@ -548,7 +550,8 @@ keywordForAlias alias identifier enumValue +placeholder atn: -[4, 1, 242, 922, 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, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 1, 0, 1, 0, 3, 0, 121, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 129, 8, 1, 10, 1, 12, 1, 132, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 139, 8, 2, 1, 3, 3, 3, 142, 8, 3, 1, 3, 1, 3, 3, 3, 146, 8, 3, 1, 3, 3, 3, 149, 8, 3, 1, 3, 1, 3, 3, 3, 153, 8, 3, 1, 3, 3, 3, 156, 8, 3, 1, 3, 3, 3, 159, 8, 3, 1, 3, 3, 3, 162, 8, 3, 1, 3, 3, 3, 165, 8, 3, 1, 3, 1, 3, 3, 3, 169, 8, 3, 1, 3, 1, 3, 3, 3, 173, 8, 3, 1, 3, 3, 3, 176, 8, 3, 1, 3, 3, 3, 179, 8, 3, 1, 3, 3, 3, 182, 8, 3, 1, 3, 1, 3, 3, 3, 186, 8, 3, 1, 3, 3, 3, 189, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 198, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 204, 8, 7, 1, 7, 1, 7, 1, 7, 1, 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, 5, 8, 223, 8, 8, 10, 8, 12, 8, 226, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 242, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 259, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 265, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 271, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 282, 8, 15, 3, 15, 284, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 295, 8, 18, 1, 18, 3, 18, 298, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 304, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 312, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 318, 8, 18, 10, 18, 12, 18, 321, 9, 18, 1, 19, 3, 19, 324, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 329, 8, 19, 1, 19, 3, 19, 332, 8, 19, 1, 19, 3, 19, 335, 8, 19, 1, 19, 1, 19, 3, 19, 339, 8, 19, 1, 19, 1, 19, 3, 19, 343, 8, 19, 1, 19, 3, 19, 346, 8, 19, 3, 19, 348, 8, 19, 1, 19, 3, 19, 351, 8, 19, 1, 19, 1, 19, 3, 19, 355, 8, 19, 1, 19, 1, 19, 3, 19, 359, 8, 19, 1, 19, 3, 19, 362, 8, 19, 3, 19, 364, 8, 19, 3, 19, 366, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 371, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 382, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 388, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 393, 8, 23, 10, 23, 12, 23, 396, 9, 23, 1, 24, 1, 24, 3, 24, 400, 8, 24, 1, 24, 1, 24, 3, 24, 404, 8, 24, 1, 24, 1, 24, 3, 24, 408, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 414, 8, 25, 3, 25, 416, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 421, 8, 26, 10, 26, 12, 26, 424, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 431, 8, 28, 1, 28, 3, 28, 434, 8, 28, 1, 28, 3, 28, 437, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 456, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 470, 8, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 484, 8, 35, 10, 35, 12, 35, 487, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 496, 8, 35, 10, 35, 12, 35, 499, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 508, 8, 35, 10, 35, 12, 35, 511, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 518, 8, 35, 1, 35, 1, 35, 3, 35, 522, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 527, 8, 36, 10, 36, 12, 36, 530, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 535, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 542, 8, 37, 11, 37, 12, 37, 543, 1, 37, 1, 37, 3, 37, 548, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 579, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 596, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 608, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 618, 8, 37, 1, 37, 3, 37, 621, 8, 37, 1, 37, 1, 37, 3, 37, 625, 8, 37, 1, 37, 3, 37, 628, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 640, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 657, 8, 37, 1, 37, 1, 37, 3, 37, 661, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 667, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 674, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 686, 8, 37, 1, 37, 1, 37, 3, 37, 690, 8, 37, 1, 37, 3, 37, 693, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 702, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 716, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 743, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 752, 8, 37, 5, 37, 754, 8, 37, 10, 37, 12, 37, 757, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 762, 8, 38, 10, 38, 12, 38, 765, 9, 38, 1, 39, 1, 39, 3, 39, 769, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 775, 8, 40, 10, 40, 12, 40, 778, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 785, 8, 40, 10, 40, 12, 40, 788, 9, 40, 3, 40, 790, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 798, 8, 41, 10, 41, 12, 41, 801, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 813, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 819, 8, 43, 1, 43, 3, 43, 822, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44, 827, 8, 44, 10, 44, 12, 44, 830, 9, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 840, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 846, 8, 45, 5, 45, 848, 8, 45, 10, 45, 12, 45, 851, 9, 45, 1, 46, 1, 46, 1, 46, 3, 46, 856, 8, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 863, 8, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 5, 48, 870, 8, 48, 10, 48, 12, 48, 873, 9, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 883, 8, 50, 3, 50, 885, 8, 50, 1, 51, 3, 51, 888, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 896, 8, 51, 1, 52, 1, 52, 1, 52, 3, 52, 901, 8, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 3, 56, 911, 8, 56, 1, 57, 1, 57, 1, 57, 3, 57, 916, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 0, 3, 36, 74, 90, 59, 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, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 196, 197, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1043, 0, 120, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 4, 138, 1, 0, 0, 0, 6, 141, 1, 0, 0, 0, 8, 190, 1, 0, 0, 0, 10, 193, 1, 0, 0, 0, 12, 199, 1, 0, 0, 0, 14, 203, 1, 0, 0, 0, 16, 209, 1, 0, 0, 0, 18, 227, 1, 0, 0, 0, 20, 230, 1, 0, 0, 0, 22, 233, 1, 0, 0, 0, 24, 243, 1, 0, 0, 0, 26, 246, 1, 0, 0, 0, 28, 250, 1, 0, 0, 0, 30, 283, 1, 0, 0, 0, 32, 285, 1, 0, 0, 0, 34, 288, 1, 0, 0, 0, 36, 303, 1, 0, 0, 0, 38, 365, 1, 0, 0, 0, 40, 370, 1, 0, 0, 0, 42, 381, 1, 0, 0, 0, 44, 383, 1, 0, 0, 0, 46, 389, 1, 0, 0, 0, 48, 397, 1, 0, 0, 0, 50, 415, 1, 0, 0, 0, 52, 417, 1, 0, 0, 0, 54, 425, 1, 0, 0, 0, 56, 430, 1, 0, 0, 0, 58, 438, 1, 0, 0, 0, 60, 442, 1, 0, 0, 0, 62, 446, 1, 0, 0, 0, 64, 455, 1, 0, 0, 0, 66, 469, 1, 0, 0, 0, 68, 471, 1, 0, 0, 0, 70, 521, 1, 0, 0, 0, 72, 523, 1, 0, 0, 0, 74, 660, 1, 0, 0, 0, 76, 758, 1, 0, 0, 0, 78, 768, 1, 0, 0, 0, 80, 789, 1, 0, 0, 0, 82, 794, 1, 0, 0, 0, 84, 812, 1, 0, 0, 0, 86, 821, 1, 0, 0, 0, 88, 823, 1, 0, 0, 0, 90, 839, 1, 0, 0, 0, 92, 852, 1, 0, 0, 0, 94, 862, 1, 0, 0, 0, 96, 866, 1, 0, 0, 0, 98, 874, 1, 0, 0, 0, 100, 884, 1, 0, 0, 0, 102, 887, 1, 0, 0, 0, 104, 900, 1, 0, 0, 0, 106, 902, 1, 0, 0, 0, 108, 904, 1, 0, 0, 0, 110, 906, 1, 0, 0, 0, 112, 910, 1, 0, 0, 0, 114, 915, 1, 0, 0, 0, 116, 917, 1, 0, 0, 0, 118, 121, 3, 2, 1, 0, 119, 121, 3, 6, 3, 0, 120, 118, 1, 0, 0, 0, 120, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 123, 5, 0, 0, 1, 123, 1, 1, 0, 0, 0, 124, 130, 3, 4, 2, 0, 125, 126, 5, 176, 0, 0, 126, 127, 5, 4, 0, 0, 127, 129, 3, 4, 2, 0, 128, 125, 1, 0, 0, 0, 129, 132, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 3, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 133, 139, 3, 6, 3, 0, 134, 135, 5, 220, 0, 0, 135, 136, 3, 2, 1, 0, 136, 137, 5, 236, 0, 0, 137, 139, 1, 0, 0, 0, 138, 133, 1, 0, 0, 0, 138, 134, 1, 0, 0, 0, 139, 5, 1, 0, 0, 0, 140, 142, 3, 8, 4, 0, 141, 140, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 145, 5, 146, 0, 0, 144, 146, 5, 49, 0, 0, 145, 144, 1, 0, 0, 0, 145, 146, 1, 0, 0, 0, 146, 148, 1, 0, 0, 0, 147, 149, 3, 10, 5, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 152, 3, 72, 36, 0, 151, 153, 3, 12, 6, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 156, 3, 14, 7, 0, 155, 154, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 158, 1, 0, 0, 0, 157, 159, 3, 18, 9, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 161, 1, 0, 0, 0, 160, 162, 3, 20, 10, 0, 161, 160, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 164, 1, 0, 0, 0, 163, 165, 3, 22, 11, 0, 164, 163, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, 165, 168, 1, 0, 0, 0, 166, 167, 5, 189, 0, 0, 167, 169, 7, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 172, 1, 0, 0, 0, 170, 171, 5, 189, 0, 0, 171, 173, 5, 169, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 175, 1, 0, 0, 0, 174, 176, 3, 24, 12, 0, 175, 174, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 178, 1, 0, 0, 0, 177, 179, 3, 16, 8, 0, 178, 177, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 182, 3, 26, 13, 0, 181, 180, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 185, 1, 0, 0, 0, 183, 186, 3, 30, 15, 0, 184, 186, 3, 32, 16, 0, 185, 183, 1, 0, 0, 0, 185, 184, 1, 0, 0, 0, 185, 186, 1, 0, 0, 0, 186, 188, 1, 0, 0, 0, 187, 189, 3, 34, 17, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 7, 1, 0, 0, 0, 190, 191, 5, 189, 0, 0, 191, 192, 3, 82, 41, 0, 192, 9, 1, 0, 0, 0, 193, 194, 5, 168, 0, 0, 194, 197, 5, 197, 0, 0, 195, 196, 5, 189, 0, 0, 196, 198, 5, 164, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 11, 1, 0, 0, 0, 199, 200, 5, 68, 0, 0, 200, 201, 3, 36, 18, 0, 201, 13, 1, 0, 0, 0, 202, 204, 7, 1, 0, 0, 203, 202, 1, 0, 0, 0, 203, 204, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 206, 5, 9, 0, 0, 206, 207, 5, 90, 0, 0, 207, 208, 3, 72, 36, 0, 208, 15, 1, 0, 0, 0, 209, 210, 5, 188, 0, 0, 210, 211, 3, 114, 57, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 220, 0, 0, 213, 214, 3, 56, 28, 0, 214, 224, 5, 236, 0, 0, 215, 216, 5, 206, 0, 0, 216, 217, 3, 114, 57, 0, 217, 218, 5, 10, 0, 0, 218, 219, 5, 220, 0, 0, 219, 220, 3, 56, 28, 0, 220, 221, 5, 236, 0, 0, 221, 223, 1, 0, 0, 0, 222, 215, 1, 0, 0, 0, 223, 226, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 17, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 227, 228, 5, 129, 0, 0, 228, 229, 3, 74, 37, 0, 229, 19, 1, 0, 0, 0, 230, 231, 5, 187, 0, 0, 231, 232, 3, 74, 37, 0, 232, 21, 1, 0, 0, 0, 233, 234, 5, 73, 0, 0, 234, 241, 5, 18, 0, 0, 235, 236, 7, 0, 0, 0, 236, 237, 5, 220, 0, 0, 237, 238, 3, 72, 36, 0, 238, 239, 5, 236, 0, 0, 239, 242, 1, 0, 0, 0, 240, 242, 3, 72, 36, 0, 241, 235, 1, 0, 0, 0, 241, 240, 1, 0, 0, 0, 242, 23, 1, 0, 0, 0, 243, 244, 5, 74, 0, 0, 244, 245, 3, 74, 37, 0, 245, 25, 1, 0, 0, 0, 246, 247, 5, 122, 0, 0, 247, 248, 5, 18, 0, 0, 248, 249, 3, 46, 23, 0, 249, 27, 1, 0, 0, 0, 250, 251, 5, 122, 0, 0, 251, 252, 5, 18, 0, 0, 252, 253, 3, 72, 36, 0, 253, 29, 1, 0, 0, 0, 254, 255, 5, 99, 0, 0, 255, 258, 3, 74, 37, 0, 256, 257, 5, 206, 0, 0, 257, 259, 3, 74, 37, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 264, 1, 0, 0, 0, 260, 261, 5, 189, 0, 0, 261, 265, 5, 164, 0, 0, 262, 263, 5, 18, 0, 0, 263, 265, 3, 72, 36, 0, 264, 260, 1, 0, 0, 0, 264, 262, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 284, 1, 0, 0, 0, 266, 267, 5, 99, 0, 0, 267, 270, 3, 74, 37, 0, 268, 269, 5, 189, 0, 0, 269, 271, 5, 164, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 5, 118, 0, 0, 273, 274, 3, 74, 37, 0, 274, 284, 1, 0, 0, 0, 275, 276, 5, 99, 0, 0, 276, 277, 3, 74, 37, 0, 277, 278, 5, 118, 0, 0, 278, 281, 3, 74, 37, 0, 279, 280, 5, 18, 0, 0, 280, 282, 3, 72, 36, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 284, 1, 0, 0, 0, 283, 254, 1, 0, 0, 0, 283, 266, 1, 0, 0, 0, 283, 275, 1, 0, 0, 0, 284, 31, 1, 0, 0, 0, 285, 286, 5, 118, 0, 0, 286, 287, 3, 74, 37, 0, 287, 33, 1, 0, 0, 0, 288, 289, 5, 150, 0, 0, 289, 290, 3, 52, 26, 0, 290, 35, 1, 0, 0, 0, 291, 292, 6, 18, -1, 0, 292, 294, 3, 90, 45, 0, 293, 295, 5, 61, 0, 0, 294, 293, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 297, 1, 0, 0, 0, 296, 298, 3, 44, 22, 0, 297, 296, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 304, 1, 0, 0, 0, 299, 300, 5, 220, 0, 0, 300, 301, 3, 36, 18, 0, 301, 302, 5, 236, 0, 0, 302, 304, 1, 0, 0, 0, 303, 291, 1, 0, 0, 0, 303, 299, 1, 0, 0, 0, 304, 319, 1, 0, 0, 0, 305, 306, 10, 3, 0, 0, 306, 307, 3, 40, 20, 0, 307, 308, 3, 36, 18, 4, 308, 318, 1, 0, 0, 0, 309, 311, 10, 4, 0, 0, 310, 312, 3, 38, 19, 0, 311, 310, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 5, 90, 0, 0, 314, 315, 3, 36, 18, 0, 315, 316, 3, 42, 21, 0, 316, 318, 1, 0, 0, 0, 317, 305, 1, 0, 0, 0, 317, 309, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 37, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 322, 324, 7, 2, 0, 0, 323, 322, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 332, 5, 84, 0, 0, 326, 328, 5, 84, 0, 0, 327, 329, 7, 2, 0, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 332, 7, 2, 0, 0, 331, 323, 1, 0, 0, 0, 331, 326, 1, 0, 0, 0, 331, 330, 1, 0, 0, 0, 332, 366, 1, 0, 0, 0, 333, 335, 7, 3, 0, 0, 334, 333, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 338, 7, 4, 0, 0, 337, 339, 5, 123, 0, 0, 338, 337, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 348, 1, 0, 0, 0, 340, 342, 7, 4, 0, 0, 341, 343, 5, 123, 0, 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 345, 1, 0, 0, 0, 344, 346, 7, 3, 0, 0, 345, 344, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 334, 1, 0, 0, 0, 347, 340, 1, 0, 0, 0, 348, 366, 1, 0, 0, 0, 349, 351, 7, 5, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 5, 69, 0, 0, 353, 355, 5, 123, 0, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 364, 1, 0, 0, 0, 356, 358, 5, 69, 0, 0, 357, 359, 5, 123, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 361, 1, 0, 0, 0, 360, 362, 7, 5, 0, 0, 361, 360, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 364, 1, 0, 0, 0, 363, 350, 1, 0, 0, 0, 363, 356, 1, 0, 0, 0, 364, 366, 1, 0, 0, 0, 365, 331, 1, 0, 0, 0, 365, 347, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 366, 39, 1, 0, 0, 0, 367, 368, 5, 31, 0, 0, 368, 371, 5, 90, 0, 0, 369, 371, 5, 206, 0, 0, 370, 367, 1, 0, 0, 0, 370, 369, 1, 0, 0, 0, 371, 41, 1, 0, 0, 0, 372, 373, 5, 119, 0, 0, 373, 382, 3, 72, 36, 0, 374, 375, 5, 179, 0, 0, 375, 376, 5, 220, 0, 0, 376, 377, 3, 72, 36, 0, 377, 378, 5, 236, 0, 0, 378, 382, 1, 0, 0, 0, 379, 380, 5, 179, 0, 0, 380, 382, 3, 72, 36, 0, 381, 372, 1, 0, 0, 0, 381, 374, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 382, 43, 1, 0, 0, 0, 383, 384, 5, 144, 0, 0, 384, 387, 3, 50, 25, 0, 385, 386, 5, 118, 0, 0, 386, 388, 3, 50, 25, 0, 387, 385, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 45, 1, 0, 0, 0, 389, 394, 3, 48, 24, 0, 390, 391, 5, 206, 0, 0, 391, 393, 3, 48, 24, 0, 392, 390, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 47, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 3, 74, 37, 0, 398, 400, 7, 6, 0, 0, 399, 398, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 402, 5, 117, 0, 0, 402, 404, 7, 7, 0, 0, 403, 401, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 407, 1, 0, 0, 0, 405, 406, 5, 26, 0, 0, 406, 408, 5, 199, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 49, 1, 0, 0, 0, 409, 416, 5, 200, 0, 0, 410, 413, 3, 102, 51, 0, 411, 412, 5, 238, 0, 0, 412, 414, 3, 102, 51, 0, 413, 411, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 416, 1, 0, 0, 0, 415, 409, 1, 0, 0, 0, 415, 410, 1, 0, 0, 0, 416, 51, 1, 0, 0, 0, 417, 422, 3, 54, 27, 0, 418, 419, 5, 206, 0, 0, 419, 421, 3, 54, 27, 0, 420, 418, 1, 0, 0, 0, 421, 424, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 53, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 425, 426, 3, 114, 57, 0, 426, 427, 5, 212, 0, 0, 427, 428, 3, 104, 52, 0, 428, 55, 1, 0, 0, 0, 429, 431, 3, 58, 29, 0, 430, 429, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 433, 1, 0, 0, 0, 432, 434, 3, 60, 30, 0, 433, 432, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 437, 3, 62, 31, 0, 436, 435, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 57, 1, 0, 0, 0, 438, 439, 5, 126, 0, 0, 439, 440, 5, 18, 0, 0, 440, 441, 3, 72, 36, 0, 441, 59, 1, 0, 0, 0, 442, 443, 5, 122, 0, 0, 443, 444, 5, 18, 0, 0, 444, 445, 3, 46, 23, 0, 445, 61, 1, 0, 0, 0, 446, 447, 7, 8, 0, 0, 447, 448, 3, 64, 32, 0, 448, 63, 1, 0, 0, 0, 449, 456, 3, 66, 33, 0, 450, 451, 5, 16, 0, 0, 451, 452, 3, 66, 33, 0, 452, 453, 5, 6, 0, 0, 453, 454, 3, 66, 33, 0, 454, 456, 1, 0, 0, 0, 455, 449, 1, 0, 0, 0, 455, 450, 1, 0, 0, 0, 456, 65, 1, 0, 0, 0, 457, 458, 5, 33, 0, 0, 458, 470, 5, 142, 0, 0, 459, 460, 5, 175, 0, 0, 460, 470, 5, 128, 0, 0, 461, 462, 5, 175, 0, 0, 462, 470, 5, 64, 0, 0, 463, 464, 3, 102, 51, 0, 464, 465, 5, 128, 0, 0, 465, 470, 1, 0, 0, 0, 466, 467, 3, 102, 51, 0, 467, 468, 5, 64, 0, 0, 468, 470, 1, 0, 0, 0, 469, 457, 1, 0, 0, 0, 469, 459, 1, 0, 0, 0, 469, 461, 1, 0, 0, 0, 469, 463, 1, 0, 0, 0, 469, 466, 1, 0, 0, 0, 470, 67, 1, 0, 0, 0, 471, 472, 3, 74, 37, 0, 472, 473, 5, 0, 0, 1, 473, 69, 1, 0, 0, 0, 474, 522, 3, 114, 57, 0, 475, 476, 3, 114, 57, 0, 476, 477, 5, 220, 0, 0, 477, 478, 3, 114, 57, 0, 478, 485, 3, 70, 35, 0, 479, 480, 5, 206, 0, 0, 480, 481, 3, 114, 57, 0, 481, 482, 3, 70, 35, 0, 482, 484, 1, 0, 0, 0, 483, 479, 1, 0, 0, 0, 484, 487, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 488, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 488, 489, 5, 236, 0, 0, 489, 522, 1, 0, 0, 0, 490, 491, 3, 114, 57, 0, 491, 492, 5, 220, 0, 0, 492, 497, 3, 116, 58, 0, 493, 494, 5, 206, 0, 0, 494, 496, 3, 116, 58, 0, 495, 493, 1, 0, 0, 0, 496, 499, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 501, 5, 236, 0, 0, 501, 522, 1, 0, 0, 0, 502, 503, 3, 114, 57, 0, 503, 504, 5, 220, 0, 0, 504, 509, 3, 70, 35, 0, 505, 506, 5, 206, 0, 0, 506, 508, 3, 70, 35, 0, 507, 505, 1, 0, 0, 0, 508, 511, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 512, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 512, 513, 5, 236, 0, 0, 513, 522, 1, 0, 0, 0, 514, 515, 3, 114, 57, 0, 515, 517, 5, 220, 0, 0, 516, 518, 3, 72, 36, 0, 517, 516, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 5, 236, 0, 0, 520, 522, 1, 0, 0, 0, 521, 474, 1, 0, 0, 0, 521, 475, 1, 0, 0, 0, 521, 490, 1, 0, 0, 0, 521, 502, 1, 0, 0, 0, 521, 514, 1, 0, 0, 0, 522, 71, 1, 0, 0, 0, 523, 528, 3, 74, 37, 0, 524, 525, 5, 206, 0, 0, 525, 527, 3, 74, 37, 0, 526, 524, 1, 0, 0, 0, 527, 530, 1, 0, 0, 0, 528, 526, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 73, 1, 0, 0, 0, 530, 528, 1, 0, 0, 0, 531, 532, 6, 37, -1, 0, 532, 534, 5, 19, 0, 0, 533, 535, 3, 74, 37, 0, 534, 533, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 541, 1, 0, 0, 0, 536, 537, 5, 186, 0, 0, 537, 538, 3, 74, 37, 0, 538, 539, 5, 163, 0, 0, 539, 540, 3, 74, 37, 0, 540, 542, 1, 0, 0, 0, 541, 536, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 543, 544, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 546, 5, 52, 0, 0, 546, 548, 3, 74, 37, 0, 547, 545, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 550, 5, 53, 0, 0, 550, 661, 1, 0, 0, 0, 551, 552, 5, 20, 0, 0, 552, 553, 5, 220, 0, 0, 553, 554, 3, 74, 37, 0, 554, 555, 5, 10, 0, 0, 555, 556, 3, 70, 35, 0, 556, 557, 5, 236, 0, 0, 557, 661, 1, 0, 0, 0, 558, 559, 5, 36, 0, 0, 559, 661, 5, 199, 0, 0, 560, 561, 5, 59, 0, 0, 561, 562, 5, 220, 0, 0, 562, 563, 3, 106, 53, 0, 563, 564, 5, 68, 0, 0, 564, 565, 3, 74, 37, 0, 565, 566, 5, 236, 0, 0, 566, 661, 1, 0, 0, 0, 567, 568, 5, 86, 0, 0, 568, 569, 3, 74, 37, 0, 569, 570, 3, 106, 53, 0, 570, 661, 1, 0, 0, 0, 571, 572, 5, 155, 0, 0, 572, 573, 5, 220, 0, 0, 573, 574, 3, 74, 37, 0, 574, 575, 5, 68, 0, 0, 575, 578, 3, 74, 37, 0, 576, 577, 5, 65, 0, 0, 577, 579, 3, 74, 37, 0, 578, 576, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 581, 5, 236, 0, 0, 581, 661, 1, 0, 0, 0, 582, 583, 5, 166, 0, 0, 583, 661, 5, 199, 0, 0, 584, 585, 5, 171, 0, 0, 585, 586, 5, 220, 0, 0, 586, 587, 7, 9, 0, 0, 587, 588, 5, 199, 0, 0, 588, 589, 5, 68, 0, 0, 589, 590, 3, 74, 37, 0, 590, 591, 5, 236, 0, 0, 591, 661, 1, 0, 0, 0, 592, 593, 3, 114, 57, 0, 593, 595, 5, 220, 0, 0, 594, 596, 3, 72, 36, 0, 595, 594, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 5, 236, 0, 0, 598, 599, 1, 0, 0, 0, 599, 600, 5, 125, 0, 0, 600, 601, 5, 220, 0, 0, 601, 602, 3, 56, 28, 0, 602, 603, 5, 236, 0, 0, 603, 661, 1, 0, 0, 0, 604, 605, 3, 114, 57, 0, 605, 607, 5, 220, 0, 0, 606, 608, 3, 72, 36, 0, 607, 606, 1, 0, 0, 0, 607, 608, 1, 0, 0, 0, 608, 609, 1, 0, 0, 0, 609, 610, 5, 236, 0, 0, 610, 611, 1, 0, 0, 0, 611, 612, 5, 125, 0, 0, 612, 613, 3, 114, 57, 0, 613, 661, 1, 0, 0, 0, 614, 620, 3, 114, 57, 0, 615, 617, 5, 220, 0, 0, 616, 618, 3, 72, 36, 0, 617, 616, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 621, 5, 236, 0, 0, 620, 615, 1, 0, 0, 0, 620, 621, 1, 0, 0, 0, 621, 622, 1, 0, 0, 0, 622, 624, 5, 220, 0, 0, 623, 625, 5, 49, 0, 0, 624, 623, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 627, 1, 0, 0, 0, 626, 628, 3, 76, 38, 0, 627, 626, 1, 0, 0, 0, 627, 628, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 5, 236, 0, 0, 630, 661, 1, 0, 0, 0, 631, 661, 3, 104, 52, 0, 632, 633, 5, 208, 0, 0, 633, 661, 3, 74, 37, 18, 634, 635, 5, 115, 0, 0, 635, 661, 3, 74, 37, 12, 636, 637, 3, 94, 47, 0, 637, 638, 5, 210, 0, 0, 638, 640, 1, 0, 0, 0, 639, 636, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, 661, 5, 202, 0, 0, 642, 643, 5, 220, 0, 0, 643, 644, 3, 2, 1, 0, 644, 645, 5, 236, 0, 0, 645, 661, 1, 0, 0, 0, 646, 647, 5, 220, 0, 0, 647, 648, 3, 74, 37, 0, 648, 649, 5, 236, 0, 0, 649, 661, 1, 0, 0, 0, 650, 651, 5, 220, 0, 0, 651, 652, 3, 72, 36, 0, 652, 653, 5, 236, 0, 0, 653, 661, 1, 0, 0, 0, 654, 656, 5, 219, 0, 0, 655, 657, 3, 72, 36, 0, 656, 655, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 661, 5, 235, 0, 0, 659, 661, 3, 86, 43, 0, 660, 531, 1, 0, 0, 0, 660, 551, 1, 0, 0, 0, 660, 558, 1, 0, 0, 0, 660, 560, 1, 0, 0, 0, 660, 567, 1, 0, 0, 0, 660, 571, 1, 0, 0, 0, 660, 582, 1, 0, 0, 0, 660, 584, 1, 0, 0, 0, 660, 592, 1, 0, 0, 0, 660, 604, 1, 0, 0, 0, 660, 614, 1, 0, 0, 0, 660, 631, 1, 0, 0, 0, 660, 632, 1, 0, 0, 0, 660, 634, 1, 0, 0, 0, 660, 639, 1, 0, 0, 0, 660, 642, 1, 0, 0, 0, 660, 646, 1, 0, 0, 0, 660, 650, 1, 0, 0, 0, 660, 654, 1, 0, 0, 0, 660, 659, 1, 0, 0, 0, 661, 755, 1, 0, 0, 0, 662, 666, 10, 17, 0, 0, 663, 667, 5, 202, 0, 0, 664, 667, 5, 238, 0, 0, 665, 667, 5, 227, 0, 0, 666, 663, 1, 0, 0, 0, 666, 664, 1, 0, 0, 0, 666, 665, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 754, 3, 74, 37, 18, 669, 673, 10, 16, 0, 0, 670, 674, 5, 228, 0, 0, 671, 674, 5, 208, 0, 0, 672, 674, 5, 207, 0, 0, 673, 670, 1, 0, 0, 0, 673, 671, 1, 0, 0, 0, 673, 672, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 754, 3, 74, 37, 17, 676, 701, 10, 15, 0, 0, 677, 702, 5, 211, 0, 0, 678, 702, 5, 212, 0, 0, 679, 702, 5, 223, 0, 0, 680, 702, 5, 221, 0, 0, 681, 702, 5, 222, 0, 0, 682, 702, 5, 213, 0, 0, 683, 702, 5, 214, 0, 0, 684, 686, 5, 115, 0, 0, 685, 684, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 689, 5, 80, 0, 0, 688, 690, 5, 25, 0, 0, 689, 688, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 702, 1, 0, 0, 0, 691, 693, 5, 115, 0, 0, 692, 691, 1, 0, 0, 0, 692, 693, 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 702, 7, 10, 0, 0, 695, 702, 5, 232, 0, 0, 696, 702, 5, 233, 0, 0, 697, 702, 5, 225, 0, 0, 698, 702, 5, 216, 0, 0, 699, 702, 5, 217, 0, 0, 700, 702, 5, 224, 0, 0, 701, 677, 1, 0, 0, 0, 701, 678, 1, 0, 0, 0, 701, 679, 1, 0, 0, 0, 701, 680, 1, 0, 0, 0, 701, 681, 1, 0, 0, 0, 701, 682, 1, 0, 0, 0, 701, 683, 1, 0, 0, 0, 701, 685, 1, 0, 0, 0, 701, 692, 1, 0, 0, 0, 701, 695, 1, 0, 0, 0, 701, 696, 1, 0, 0, 0, 701, 697, 1, 0, 0, 0, 701, 698, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 701, 700, 1, 0, 0, 0, 702, 703, 1, 0, 0, 0, 703, 754, 3, 74, 37, 16, 704, 705, 10, 13, 0, 0, 705, 706, 5, 226, 0, 0, 706, 754, 3, 74, 37, 14, 707, 708, 10, 11, 0, 0, 708, 709, 5, 6, 0, 0, 709, 754, 3, 74, 37, 12, 710, 711, 10, 10, 0, 0, 711, 712, 5, 121, 0, 0, 712, 754, 3, 74, 37, 11, 713, 715, 10, 9, 0, 0, 714, 716, 5, 115, 0, 0, 715, 714, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 718, 5, 16, 0, 0, 718, 719, 3, 74, 37, 0, 719, 720, 5, 6, 0, 0, 720, 721, 3, 74, 37, 10, 721, 754, 1, 0, 0, 0, 722, 723, 10, 8, 0, 0, 723, 724, 5, 229, 0, 0, 724, 725, 3, 74, 37, 0, 725, 726, 5, 205, 0, 0, 726, 727, 3, 74, 37, 8, 727, 754, 1, 0, 0, 0, 728, 729, 10, 21, 0, 0, 729, 730, 5, 219, 0, 0, 730, 731, 3, 74, 37, 0, 731, 732, 5, 235, 0, 0, 732, 754, 1, 0, 0, 0, 733, 734, 10, 20, 0, 0, 734, 735, 5, 210, 0, 0, 735, 754, 5, 197, 0, 0, 736, 737, 10, 19, 0, 0, 737, 738, 5, 210, 0, 0, 738, 754, 3, 114, 57, 0, 739, 740, 10, 14, 0, 0, 740, 742, 5, 88, 0, 0, 741, 743, 5, 115, 0, 0, 742, 741, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 754, 5, 116, 0, 0, 745, 751, 10, 7, 0, 0, 746, 752, 3, 112, 56, 0, 747, 748, 5, 10, 0, 0, 748, 752, 3, 114, 57, 0, 749, 750, 5, 10, 0, 0, 750, 752, 5, 199, 0, 0, 751, 746, 1, 0, 0, 0, 751, 747, 1, 0, 0, 0, 751, 749, 1, 0, 0, 0, 752, 754, 1, 0, 0, 0, 753, 662, 1, 0, 0, 0, 753, 669, 1, 0, 0, 0, 753, 676, 1, 0, 0, 0, 753, 704, 1, 0, 0, 0, 753, 707, 1, 0, 0, 0, 753, 710, 1, 0, 0, 0, 753, 713, 1, 0, 0, 0, 753, 722, 1, 0, 0, 0, 753, 728, 1, 0, 0, 0, 753, 733, 1, 0, 0, 0, 753, 736, 1, 0, 0, 0, 753, 739, 1, 0, 0, 0, 753, 745, 1, 0, 0, 0, 754, 757, 1, 0, 0, 0, 755, 753, 1, 0, 0, 0, 755, 756, 1, 0, 0, 0, 756, 75, 1, 0, 0, 0, 757, 755, 1, 0, 0, 0, 758, 763, 3, 78, 39, 0, 759, 760, 5, 206, 0, 0, 760, 762, 3, 78, 39, 0, 761, 759, 1, 0, 0, 0, 762, 765, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 77, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 766, 769, 3, 80, 40, 0, 767, 769, 3, 74, 37, 0, 768, 766, 1, 0, 0, 0, 768, 767, 1, 0, 0, 0, 769, 79, 1, 0, 0, 0, 770, 771, 5, 220, 0, 0, 771, 776, 3, 114, 57, 0, 772, 773, 5, 206, 0, 0, 773, 775, 3, 114, 57, 0, 774, 772, 1, 0, 0, 0, 775, 778, 1, 0, 0, 0, 776, 774, 1, 0, 0, 0, 776, 777, 1, 0, 0, 0, 777, 779, 1, 0, 0, 0, 778, 776, 1, 0, 0, 0, 779, 780, 5, 236, 0, 0, 780, 790, 1, 0, 0, 0, 781, 786, 3, 114, 57, 0, 782, 783, 5, 206, 0, 0, 783, 785, 3, 114, 57, 0, 784, 782, 1, 0, 0, 0, 785, 788, 1, 0, 0, 0, 786, 784, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 790, 1, 0, 0, 0, 788, 786, 1, 0, 0, 0, 789, 770, 1, 0, 0, 0, 789, 781, 1, 0, 0, 0, 790, 791, 1, 0, 0, 0, 791, 792, 5, 201, 0, 0, 792, 793, 3, 74, 37, 0, 793, 81, 1, 0, 0, 0, 794, 799, 3, 84, 42, 0, 795, 796, 5, 206, 0, 0, 796, 798, 3, 84, 42, 0, 797, 795, 1, 0, 0, 0, 798, 801, 1, 0, 0, 0, 799, 797, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 83, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 802, 803, 3, 114, 57, 0, 803, 804, 5, 10, 0, 0, 804, 805, 5, 220, 0, 0, 805, 806, 3, 2, 1, 0, 806, 807, 5, 236, 0, 0, 807, 813, 1, 0, 0, 0, 808, 809, 3, 74, 37, 0, 809, 810, 5, 10, 0, 0, 810, 811, 3, 114, 57, 0, 811, 813, 1, 0, 0, 0, 812, 802, 1, 0, 0, 0, 812, 808, 1, 0, 0, 0, 813, 85, 1, 0, 0, 0, 814, 822, 5, 200, 0, 0, 815, 816, 3, 94, 47, 0, 816, 817, 5, 210, 0, 0, 817, 819, 1, 0, 0, 0, 818, 815, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 822, 3, 88, 44, 0, 821, 814, 1, 0, 0, 0, 821, 818, 1, 0, 0, 0, 822, 87, 1, 0, 0, 0, 823, 828, 3, 114, 57, 0, 824, 825, 5, 210, 0, 0, 825, 827, 3, 114, 57, 0, 826, 824, 1, 0, 0, 0, 827, 830, 1, 0, 0, 0, 828, 826, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 89, 1, 0, 0, 0, 830, 828, 1, 0, 0, 0, 831, 832, 6, 45, -1, 0, 832, 840, 3, 94, 47, 0, 833, 840, 3, 92, 46, 0, 834, 835, 5, 220, 0, 0, 835, 836, 3, 2, 1, 0, 836, 837, 5, 236, 0, 0, 837, 840, 1, 0, 0, 0, 838, 840, 5, 200, 0, 0, 839, 831, 1, 0, 0, 0, 839, 833, 1, 0, 0, 0, 839, 834, 1, 0, 0, 0, 839, 838, 1, 0, 0, 0, 840, 849, 1, 0, 0, 0, 841, 845, 10, 2, 0, 0, 842, 846, 3, 112, 56, 0, 843, 844, 5, 10, 0, 0, 844, 846, 3, 114, 57, 0, 845, 842, 1, 0, 0, 0, 845, 843, 1, 0, 0, 0, 846, 848, 1, 0, 0, 0, 847, 841, 1, 0, 0, 0, 848, 851, 1, 0, 0, 0, 849, 847, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 91, 1, 0, 0, 0, 851, 849, 1, 0, 0, 0, 852, 853, 3, 114, 57, 0, 853, 855, 5, 220, 0, 0, 854, 856, 3, 96, 48, 0, 855, 854, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 5, 236, 0, 0, 858, 93, 1, 0, 0, 0, 859, 860, 3, 98, 49, 0, 860, 861, 5, 210, 0, 0, 861, 863, 1, 0, 0, 0, 862, 859, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 865, 3, 114, 57, 0, 865, 95, 1, 0, 0, 0, 866, 871, 3, 74, 37, 0, 867, 868, 5, 206, 0, 0, 868, 870, 3, 74, 37, 0, 869, 867, 1, 0, 0, 0, 870, 873, 1, 0, 0, 0, 871, 869, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 97, 1, 0, 0, 0, 873, 871, 1, 0, 0, 0, 874, 875, 3, 114, 57, 0, 875, 99, 1, 0, 0, 0, 876, 885, 5, 195, 0, 0, 877, 878, 5, 210, 0, 0, 878, 885, 7, 11, 0, 0, 879, 880, 5, 197, 0, 0, 880, 882, 5, 210, 0, 0, 881, 883, 7, 11, 0, 0, 882, 881, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 885, 1, 0, 0, 0, 884, 876, 1, 0, 0, 0, 884, 877, 1, 0, 0, 0, 884, 879, 1, 0, 0, 0, 885, 101, 1, 0, 0, 0, 886, 888, 7, 12, 0, 0, 887, 886, 1, 0, 0, 0, 887, 888, 1, 0, 0, 0, 888, 895, 1, 0, 0, 0, 889, 896, 3, 100, 50, 0, 890, 896, 5, 196, 0, 0, 891, 896, 5, 197, 0, 0, 892, 896, 5, 198, 0, 0, 893, 896, 5, 82, 0, 0, 894, 896, 5, 113, 0, 0, 895, 889, 1, 0, 0, 0, 895, 890, 1, 0, 0, 0, 895, 891, 1, 0, 0, 0, 895, 892, 1, 0, 0, 0, 895, 893, 1, 0, 0, 0, 895, 894, 1, 0, 0, 0, 896, 103, 1, 0, 0, 0, 897, 901, 3, 102, 51, 0, 898, 901, 5, 199, 0, 0, 899, 901, 5, 116, 0, 0, 900, 897, 1, 0, 0, 0, 900, 898, 1, 0, 0, 0, 900, 899, 1, 0, 0, 0, 901, 105, 1, 0, 0, 0, 902, 903, 7, 13, 0, 0, 903, 107, 1, 0, 0, 0, 904, 905, 7, 14, 0, 0, 905, 109, 1, 0, 0, 0, 906, 907, 7, 15, 0, 0, 907, 111, 1, 0, 0, 0, 908, 911, 5, 194, 0, 0, 909, 911, 3, 110, 55, 0, 910, 908, 1, 0, 0, 0, 910, 909, 1, 0, 0, 0, 911, 113, 1, 0, 0, 0, 912, 916, 5, 194, 0, 0, 913, 916, 3, 106, 53, 0, 914, 916, 3, 108, 54, 0, 915, 912, 1, 0, 0, 0, 915, 913, 1, 0, 0, 0, 915, 914, 1, 0, 0, 0, 916, 115, 1, 0, 0, 0, 917, 918, 5, 199, 0, 0, 918, 919, 5, 212, 0, 0, 919, 920, 3, 102, 51, 0, 920, 117, 1, 0, 0, 0, 115, 120, 130, 138, 141, 145, 148, 152, 155, 158, 161, 164, 168, 172, 175, 178, 181, 185, 188, 197, 203, 224, 241, 258, 264, 270, 281, 283, 294, 297, 303, 311, 317, 319, 323, 328, 331, 334, 338, 342, 345, 347, 350, 354, 358, 361, 363, 365, 370, 381, 387, 394, 399, 403, 407, 413, 415, 422, 430, 433, 436, 455, 469, 485, 497, 509, 517, 521, 528, 534, 543, 547, 578, 595, 607, 617, 620, 624, 627, 639, 656, 660, 666, 673, 685, 689, 692, 701, 715, 742, 751, 753, 755, 763, 768, 776, 786, 789, 799, 812, 818, 821, 828, 839, 845, 849, 855, 862, 871, 882, 884, 887, 895, 900, 910, 915] \ No newline at end of file +[4, 1, 242, 959, 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, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 1, 0, 1, 0, 1, 0, 3, 0, 128, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 136, 8, 1, 10, 1, 12, 1, 139, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 146, 8, 2, 1, 3, 3, 3, 149, 8, 3, 1, 3, 1, 3, 3, 3, 153, 8, 3, 1, 3, 3, 3, 156, 8, 3, 1, 3, 1, 3, 3, 3, 160, 8, 3, 1, 3, 3, 3, 163, 8, 3, 1, 3, 3, 3, 166, 8, 3, 1, 3, 3, 3, 169, 8, 3, 1, 3, 3, 3, 172, 8, 3, 1, 3, 1, 3, 3, 3, 176, 8, 3, 1, 3, 1, 3, 3, 3, 180, 8, 3, 1, 3, 3, 3, 183, 8, 3, 1, 3, 3, 3, 186, 8, 3, 1, 3, 3, 3, 189, 8, 3, 1, 3, 1, 3, 3, 3, 193, 8, 3, 1, 3, 3, 3, 196, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 205, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 211, 8, 7, 1, 7, 1, 7, 1, 7, 1, 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, 5, 8, 230, 8, 8, 10, 8, 12, 8, 233, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 249, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 266, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 272, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 278, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 289, 8, 15, 3, 15, 291, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 302, 8, 18, 1, 18, 3, 18, 305, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 311, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 319, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 325, 8, 18, 10, 18, 12, 18, 328, 9, 18, 1, 19, 3, 19, 331, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 336, 8, 19, 1, 19, 3, 19, 339, 8, 19, 1, 19, 3, 19, 342, 8, 19, 1, 19, 1, 19, 3, 19, 346, 8, 19, 1, 19, 1, 19, 3, 19, 350, 8, 19, 1, 19, 3, 19, 353, 8, 19, 3, 19, 355, 8, 19, 1, 19, 3, 19, 358, 8, 19, 1, 19, 1, 19, 3, 19, 362, 8, 19, 1, 19, 1, 19, 3, 19, 366, 8, 19, 1, 19, 3, 19, 369, 8, 19, 3, 19, 371, 8, 19, 3, 19, 373, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 378, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 389, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 395, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 400, 8, 23, 10, 23, 12, 23, 403, 9, 23, 1, 24, 1, 24, 3, 24, 407, 8, 24, 1, 24, 1, 24, 3, 24, 411, 8, 24, 1, 24, 1, 24, 3, 24, 415, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 421, 8, 25, 3, 25, 423, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 428, 8, 26, 10, 26, 12, 26, 431, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 438, 8, 28, 1, 28, 3, 28, 441, 8, 28, 1, 28, 3, 28, 444, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 463, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 477, 8, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 491, 8, 35, 10, 35, 12, 35, 494, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 503, 8, 35, 10, 35, 12, 35, 506, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 515, 8, 35, 10, 35, 12, 35, 518, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 525, 8, 35, 1, 35, 1, 35, 3, 35, 529, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 534, 8, 36, 10, 36, 12, 36, 537, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 542, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 549, 8, 37, 11, 37, 12, 37, 550, 1, 37, 1, 37, 3, 37, 555, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 586, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 603, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 615, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 625, 8, 37, 1, 37, 3, 37, 628, 8, 37, 1, 37, 1, 37, 3, 37, 632, 8, 37, 1, 37, 3, 37, 635, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 648, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 665, 8, 37, 1, 37, 1, 37, 3, 37, 669, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 675, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 682, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 694, 8, 37, 1, 37, 1, 37, 3, 37, 698, 8, 37, 1, 37, 3, 37, 701, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 710, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 724, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 751, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 760, 8, 37, 5, 37, 762, 8, 37, 10, 37, 12, 37, 765, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 770, 8, 38, 10, 38, 12, 38, 773, 9, 38, 1, 39, 1, 39, 3, 39, 777, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 783, 8, 40, 10, 40, 12, 40, 786, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 793, 8, 40, 10, 40, 12, 40, 796, 9, 40, 3, 40, 798, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 806, 8, 41, 10, 41, 12, 41, 809, 9, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 825, 8, 42, 1, 43, 1, 43, 1, 43, 5, 43, 830, 8, 43, 10, 43, 12, 43, 833, 9, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 845, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 851, 8, 45, 1, 45, 3, 45, 854, 8, 45, 1, 46, 1, 46, 1, 46, 5, 46, 859, 8, 46, 10, 46, 12, 46, 862, 9, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 873, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 879, 8, 47, 5, 47, 881, 8, 47, 10, 47, 12, 47, 884, 9, 47, 1, 48, 1, 48, 1, 48, 3, 48, 889, 8, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 3, 49, 896, 8, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 5, 50, 903, 8, 50, 10, 50, 12, 50, 906, 9, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 916, 8, 52, 3, 52, 918, 8, 52, 1, 53, 3, 53, 921, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 929, 8, 53, 1, 54, 1, 54, 1, 54, 3, 54, 934, 8, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 3, 58, 944, 8, 58, 1, 59, 1, 59, 1, 59, 3, 59, 949, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 0, 3, 36, 74, 94, 62, 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, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 197, 198, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1083, 0, 127, 1, 0, 0, 0, 2, 131, 1, 0, 0, 0, 4, 145, 1, 0, 0, 0, 6, 148, 1, 0, 0, 0, 8, 197, 1, 0, 0, 0, 10, 200, 1, 0, 0, 0, 12, 206, 1, 0, 0, 0, 14, 210, 1, 0, 0, 0, 16, 216, 1, 0, 0, 0, 18, 234, 1, 0, 0, 0, 20, 237, 1, 0, 0, 0, 22, 240, 1, 0, 0, 0, 24, 250, 1, 0, 0, 0, 26, 253, 1, 0, 0, 0, 28, 257, 1, 0, 0, 0, 30, 290, 1, 0, 0, 0, 32, 292, 1, 0, 0, 0, 34, 295, 1, 0, 0, 0, 36, 310, 1, 0, 0, 0, 38, 372, 1, 0, 0, 0, 40, 377, 1, 0, 0, 0, 42, 388, 1, 0, 0, 0, 44, 390, 1, 0, 0, 0, 46, 396, 1, 0, 0, 0, 48, 404, 1, 0, 0, 0, 50, 422, 1, 0, 0, 0, 52, 424, 1, 0, 0, 0, 54, 432, 1, 0, 0, 0, 56, 437, 1, 0, 0, 0, 58, 445, 1, 0, 0, 0, 60, 449, 1, 0, 0, 0, 62, 453, 1, 0, 0, 0, 64, 462, 1, 0, 0, 0, 66, 476, 1, 0, 0, 0, 68, 478, 1, 0, 0, 0, 70, 528, 1, 0, 0, 0, 72, 530, 1, 0, 0, 0, 74, 668, 1, 0, 0, 0, 76, 766, 1, 0, 0, 0, 78, 776, 1, 0, 0, 0, 80, 797, 1, 0, 0, 0, 82, 802, 1, 0, 0, 0, 84, 824, 1, 0, 0, 0, 86, 826, 1, 0, 0, 0, 88, 844, 1, 0, 0, 0, 90, 853, 1, 0, 0, 0, 92, 855, 1, 0, 0, 0, 94, 872, 1, 0, 0, 0, 96, 885, 1, 0, 0, 0, 98, 895, 1, 0, 0, 0, 100, 899, 1, 0, 0, 0, 102, 907, 1, 0, 0, 0, 104, 917, 1, 0, 0, 0, 106, 920, 1, 0, 0, 0, 108, 933, 1, 0, 0, 0, 110, 935, 1, 0, 0, 0, 112, 937, 1, 0, 0, 0, 114, 939, 1, 0, 0, 0, 116, 943, 1, 0, 0, 0, 118, 948, 1, 0, 0, 0, 120, 950, 1, 0, 0, 0, 122, 954, 1, 0, 0, 0, 124, 128, 3, 2, 1, 0, 125, 128, 3, 6, 3, 0, 126, 128, 3, 82, 41, 0, 127, 124, 1, 0, 0, 0, 127, 125, 1, 0, 0, 0, 127, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 130, 5, 0, 0, 1, 130, 1, 1, 0, 0, 0, 131, 137, 3, 4, 2, 0, 132, 133, 5, 176, 0, 0, 133, 134, 5, 4, 0, 0, 134, 136, 3, 4, 2, 0, 135, 132, 1, 0, 0, 0, 136, 139, 1, 0, 0, 0, 137, 135, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 3, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 140, 146, 3, 6, 3, 0, 141, 142, 5, 220, 0, 0, 142, 143, 3, 2, 1, 0, 143, 144, 5, 236, 0, 0, 144, 146, 1, 0, 0, 0, 145, 140, 1, 0, 0, 0, 145, 141, 1, 0, 0, 0, 146, 5, 1, 0, 0, 0, 147, 149, 3, 8, 4, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 152, 5, 146, 0, 0, 151, 153, 5, 49, 0, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 156, 3, 10, 5, 0, 155, 154, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 3, 72, 36, 0, 158, 160, 3, 12, 6, 0, 159, 158, 1, 0, 0, 0, 159, 160, 1, 0, 0, 0, 160, 162, 1, 0, 0, 0, 161, 163, 3, 14, 7, 0, 162, 161, 1, 0, 0, 0, 162, 163, 1, 0, 0, 0, 163, 165, 1, 0, 0, 0, 164, 166, 3, 18, 9, 0, 165, 164, 1, 0, 0, 0, 165, 166, 1, 0, 0, 0, 166, 168, 1, 0, 0, 0, 167, 169, 3, 20, 10, 0, 168, 167, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 171, 1, 0, 0, 0, 170, 172, 3, 22, 11, 0, 171, 170, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 175, 1, 0, 0, 0, 173, 174, 5, 189, 0, 0, 174, 176, 7, 0, 0, 0, 175, 173, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 179, 1, 0, 0, 0, 177, 178, 5, 189, 0, 0, 178, 180, 5, 169, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 182, 1, 0, 0, 0, 181, 183, 3, 24, 12, 0, 182, 181, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 185, 1, 0, 0, 0, 184, 186, 3, 16, 8, 0, 185, 184, 1, 0, 0, 0, 185, 186, 1, 0, 0, 0, 186, 188, 1, 0, 0, 0, 187, 189, 3, 26, 13, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 192, 1, 0, 0, 0, 190, 193, 3, 30, 15, 0, 191, 193, 3, 32, 16, 0, 192, 190, 1, 0, 0, 0, 192, 191, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 195, 1, 0, 0, 0, 194, 196, 3, 34, 17, 0, 195, 194, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 7, 1, 0, 0, 0, 197, 198, 5, 189, 0, 0, 198, 199, 3, 86, 43, 0, 199, 9, 1, 0, 0, 0, 200, 201, 5, 168, 0, 0, 201, 204, 5, 198, 0, 0, 202, 203, 5, 189, 0, 0, 203, 205, 5, 164, 0, 0, 204, 202, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 11, 1, 0, 0, 0, 206, 207, 5, 68, 0, 0, 207, 208, 3, 36, 18, 0, 208, 13, 1, 0, 0, 0, 209, 211, 7, 1, 0, 0, 210, 209, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 213, 5, 9, 0, 0, 213, 214, 5, 90, 0, 0, 214, 215, 3, 72, 36, 0, 215, 15, 1, 0, 0, 0, 216, 217, 5, 188, 0, 0, 217, 218, 3, 118, 59, 0, 218, 219, 5, 10, 0, 0, 219, 220, 5, 220, 0, 0, 220, 221, 3, 56, 28, 0, 221, 231, 5, 236, 0, 0, 222, 223, 5, 206, 0, 0, 223, 224, 3, 118, 59, 0, 224, 225, 5, 10, 0, 0, 225, 226, 5, 220, 0, 0, 226, 227, 3, 56, 28, 0, 227, 228, 5, 236, 0, 0, 228, 230, 1, 0, 0, 0, 229, 222, 1, 0, 0, 0, 230, 233, 1, 0, 0, 0, 231, 229, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 17, 1, 0, 0, 0, 233, 231, 1, 0, 0, 0, 234, 235, 5, 129, 0, 0, 235, 236, 3, 74, 37, 0, 236, 19, 1, 0, 0, 0, 237, 238, 5, 187, 0, 0, 238, 239, 3, 74, 37, 0, 239, 21, 1, 0, 0, 0, 240, 241, 5, 73, 0, 0, 241, 248, 5, 18, 0, 0, 242, 243, 7, 0, 0, 0, 243, 244, 5, 220, 0, 0, 244, 245, 3, 72, 36, 0, 245, 246, 5, 236, 0, 0, 246, 249, 1, 0, 0, 0, 247, 249, 3, 72, 36, 0, 248, 242, 1, 0, 0, 0, 248, 247, 1, 0, 0, 0, 249, 23, 1, 0, 0, 0, 250, 251, 5, 74, 0, 0, 251, 252, 3, 74, 37, 0, 252, 25, 1, 0, 0, 0, 253, 254, 5, 122, 0, 0, 254, 255, 5, 18, 0, 0, 255, 256, 3, 46, 23, 0, 256, 27, 1, 0, 0, 0, 257, 258, 5, 122, 0, 0, 258, 259, 5, 18, 0, 0, 259, 260, 3, 72, 36, 0, 260, 29, 1, 0, 0, 0, 261, 262, 5, 99, 0, 0, 262, 265, 3, 74, 37, 0, 263, 264, 5, 206, 0, 0, 264, 266, 3, 74, 37, 0, 265, 263, 1, 0, 0, 0, 265, 266, 1, 0, 0, 0, 266, 271, 1, 0, 0, 0, 267, 268, 5, 189, 0, 0, 268, 272, 5, 164, 0, 0, 269, 270, 5, 18, 0, 0, 270, 272, 3, 72, 36, 0, 271, 267, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 291, 1, 0, 0, 0, 273, 274, 5, 99, 0, 0, 274, 277, 3, 74, 37, 0, 275, 276, 5, 189, 0, 0, 276, 278, 5, 164, 0, 0, 277, 275, 1, 0, 0, 0, 277, 278, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 280, 5, 118, 0, 0, 280, 281, 3, 74, 37, 0, 281, 291, 1, 0, 0, 0, 282, 283, 5, 99, 0, 0, 283, 284, 3, 74, 37, 0, 284, 285, 5, 118, 0, 0, 285, 288, 3, 74, 37, 0, 286, 287, 5, 18, 0, 0, 287, 289, 3, 72, 36, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 291, 1, 0, 0, 0, 290, 261, 1, 0, 0, 0, 290, 273, 1, 0, 0, 0, 290, 282, 1, 0, 0, 0, 291, 31, 1, 0, 0, 0, 292, 293, 5, 118, 0, 0, 293, 294, 3, 74, 37, 0, 294, 33, 1, 0, 0, 0, 295, 296, 5, 150, 0, 0, 296, 297, 3, 52, 26, 0, 297, 35, 1, 0, 0, 0, 298, 299, 6, 18, -1, 0, 299, 301, 3, 94, 47, 0, 300, 302, 5, 61, 0, 0, 301, 300, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 1, 0, 0, 0, 303, 305, 3, 44, 22, 0, 304, 303, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 311, 1, 0, 0, 0, 306, 307, 5, 220, 0, 0, 307, 308, 3, 36, 18, 0, 308, 309, 5, 236, 0, 0, 309, 311, 1, 0, 0, 0, 310, 298, 1, 0, 0, 0, 310, 306, 1, 0, 0, 0, 311, 326, 1, 0, 0, 0, 312, 313, 10, 3, 0, 0, 313, 314, 3, 40, 20, 0, 314, 315, 3, 36, 18, 4, 315, 325, 1, 0, 0, 0, 316, 318, 10, 4, 0, 0, 317, 319, 3, 38, 19, 0, 318, 317, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 5, 90, 0, 0, 321, 322, 3, 36, 18, 0, 322, 323, 3, 42, 21, 0, 323, 325, 1, 0, 0, 0, 324, 312, 1, 0, 0, 0, 324, 316, 1, 0, 0, 0, 325, 328, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 37, 1, 0, 0, 0, 328, 326, 1, 0, 0, 0, 329, 331, 7, 2, 0, 0, 330, 329, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 339, 5, 84, 0, 0, 333, 335, 5, 84, 0, 0, 334, 336, 7, 2, 0, 0, 335, 334, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 339, 1, 0, 0, 0, 337, 339, 7, 2, 0, 0, 338, 330, 1, 0, 0, 0, 338, 333, 1, 0, 0, 0, 338, 337, 1, 0, 0, 0, 339, 373, 1, 0, 0, 0, 340, 342, 7, 3, 0, 0, 341, 340, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 345, 7, 4, 0, 0, 344, 346, 5, 123, 0, 0, 345, 344, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 355, 1, 0, 0, 0, 347, 349, 7, 4, 0, 0, 348, 350, 5, 123, 0, 0, 349, 348, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 352, 1, 0, 0, 0, 351, 353, 7, 3, 0, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 355, 1, 0, 0, 0, 354, 341, 1, 0, 0, 0, 354, 347, 1, 0, 0, 0, 355, 373, 1, 0, 0, 0, 356, 358, 7, 5, 0, 0, 357, 356, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 361, 5, 69, 0, 0, 360, 362, 5, 123, 0, 0, 361, 360, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 371, 1, 0, 0, 0, 363, 365, 5, 69, 0, 0, 364, 366, 5, 123, 0, 0, 365, 364, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 368, 1, 0, 0, 0, 367, 369, 7, 5, 0, 0, 368, 367, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 371, 1, 0, 0, 0, 370, 357, 1, 0, 0, 0, 370, 363, 1, 0, 0, 0, 371, 373, 1, 0, 0, 0, 372, 338, 1, 0, 0, 0, 372, 354, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 373, 39, 1, 0, 0, 0, 374, 375, 5, 31, 0, 0, 375, 378, 5, 90, 0, 0, 376, 378, 5, 206, 0, 0, 377, 374, 1, 0, 0, 0, 377, 376, 1, 0, 0, 0, 378, 41, 1, 0, 0, 0, 379, 380, 5, 119, 0, 0, 380, 389, 3, 72, 36, 0, 381, 382, 5, 179, 0, 0, 382, 383, 5, 220, 0, 0, 383, 384, 3, 72, 36, 0, 384, 385, 5, 236, 0, 0, 385, 389, 1, 0, 0, 0, 386, 387, 5, 179, 0, 0, 387, 389, 3, 72, 36, 0, 388, 379, 1, 0, 0, 0, 388, 381, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 389, 43, 1, 0, 0, 0, 390, 391, 5, 144, 0, 0, 391, 394, 3, 50, 25, 0, 392, 393, 5, 118, 0, 0, 393, 395, 3, 50, 25, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 45, 1, 0, 0, 0, 396, 401, 3, 48, 24, 0, 397, 398, 5, 206, 0, 0, 398, 400, 3, 48, 24, 0, 399, 397, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 47, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 404, 406, 3, 74, 37, 0, 405, 407, 7, 6, 0, 0, 406, 405, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 410, 1, 0, 0, 0, 408, 409, 5, 117, 0, 0, 409, 411, 7, 7, 0, 0, 410, 408, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 414, 1, 0, 0, 0, 412, 413, 5, 26, 0, 0, 413, 415, 5, 200, 0, 0, 414, 412, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 49, 1, 0, 0, 0, 416, 423, 3, 122, 61, 0, 417, 420, 3, 106, 53, 0, 418, 419, 5, 238, 0, 0, 419, 421, 3, 106, 53, 0, 420, 418, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, 423, 1, 0, 0, 0, 422, 416, 1, 0, 0, 0, 422, 417, 1, 0, 0, 0, 423, 51, 1, 0, 0, 0, 424, 429, 3, 54, 27, 0, 425, 426, 5, 206, 0, 0, 426, 428, 3, 54, 27, 0, 427, 425, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 53, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 433, 3, 118, 59, 0, 433, 434, 5, 212, 0, 0, 434, 435, 3, 108, 54, 0, 435, 55, 1, 0, 0, 0, 436, 438, 3, 58, 29, 0, 437, 436, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 440, 1, 0, 0, 0, 439, 441, 3, 60, 30, 0, 440, 439, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 443, 1, 0, 0, 0, 442, 444, 3, 62, 31, 0, 443, 442, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 57, 1, 0, 0, 0, 445, 446, 5, 126, 0, 0, 446, 447, 5, 18, 0, 0, 447, 448, 3, 72, 36, 0, 448, 59, 1, 0, 0, 0, 449, 450, 5, 122, 0, 0, 450, 451, 5, 18, 0, 0, 451, 452, 3, 46, 23, 0, 452, 61, 1, 0, 0, 0, 453, 454, 7, 8, 0, 0, 454, 455, 3, 64, 32, 0, 455, 63, 1, 0, 0, 0, 456, 463, 3, 66, 33, 0, 457, 458, 5, 16, 0, 0, 458, 459, 3, 66, 33, 0, 459, 460, 5, 6, 0, 0, 460, 461, 3, 66, 33, 0, 461, 463, 1, 0, 0, 0, 462, 456, 1, 0, 0, 0, 462, 457, 1, 0, 0, 0, 463, 65, 1, 0, 0, 0, 464, 465, 5, 33, 0, 0, 465, 477, 5, 142, 0, 0, 466, 467, 5, 175, 0, 0, 467, 477, 5, 128, 0, 0, 468, 469, 5, 175, 0, 0, 469, 477, 5, 64, 0, 0, 470, 471, 3, 106, 53, 0, 471, 472, 5, 128, 0, 0, 472, 477, 1, 0, 0, 0, 473, 474, 3, 106, 53, 0, 474, 475, 5, 64, 0, 0, 475, 477, 1, 0, 0, 0, 476, 464, 1, 0, 0, 0, 476, 466, 1, 0, 0, 0, 476, 468, 1, 0, 0, 0, 476, 470, 1, 0, 0, 0, 476, 473, 1, 0, 0, 0, 477, 67, 1, 0, 0, 0, 478, 479, 3, 74, 37, 0, 479, 480, 5, 0, 0, 1, 480, 69, 1, 0, 0, 0, 481, 529, 3, 118, 59, 0, 482, 483, 3, 118, 59, 0, 483, 484, 5, 220, 0, 0, 484, 485, 3, 118, 59, 0, 485, 492, 3, 70, 35, 0, 486, 487, 5, 206, 0, 0, 487, 488, 3, 118, 59, 0, 488, 489, 3, 70, 35, 0, 489, 491, 1, 0, 0, 0, 490, 486, 1, 0, 0, 0, 491, 494, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 492, 493, 1, 0, 0, 0, 493, 495, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 496, 5, 236, 0, 0, 496, 529, 1, 0, 0, 0, 497, 498, 3, 118, 59, 0, 498, 499, 5, 220, 0, 0, 499, 504, 3, 120, 60, 0, 500, 501, 5, 206, 0, 0, 501, 503, 3, 120, 60, 0, 502, 500, 1, 0, 0, 0, 503, 506, 1, 0, 0, 0, 504, 502, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 507, 1, 0, 0, 0, 506, 504, 1, 0, 0, 0, 507, 508, 5, 236, 0, 0, 508, 529, 1, 0, 0, 0, 509, 510, 3, 118, 59, 0, 510, 511, 5, 220, 0, 0, 511, 516, 3, 70, 35, 0, 512, 513, 5, 206, 0, 0, 513, 515, 3, 70, 35, 0, 514, 512, 1, 0, 0, 0, 515, 518, 1, 0, 0, 0, 516, 514, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 519, 1, 0, 0, 0, 518, 516, 1, 0, 0, 0, 519, 520, 5, 236, 0, 0, 520, 529, 1, 0, 0, 0, 521, 522, 3, 118, 59, 0, 522, 524, 5, 220, 0, 0, 523, 525, 3, 72, 36, 0, 524, 523, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 527, 5, 236, 0, 0, 527, 529, 1, 0, 0, 0, 528, 481, 1, 0, 0, 0, 528, 482, 1, 0, 0, 0, 528, 497, 1, 0, 0, 0, 528, 509, 1, 0, 0, 0, 528, 521, 1, 0, 0, 0, 529, 71, 1, 0, 0, 0, 530, 535, 3, 74, 37, 0, 531, 532, 5, 206, 0, 0, 532, 534, 3, 74, 37, 0, 533, 531, 1, 0, 0, 0, 534, 537, 1, 0, 0, 0, 535, 533, 1, 0, 0, 0, 535, 536, 1, 0, 0, 0, 536, 73, 1, 0, 0, 0, 537, 535, 1, 0, 0, 0, 538, 539, 6, 37, -1, 0, 539, 541, 5, 19, 0, 0, 540, 542, 3, 74, 37, 0, 541, 540, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 548, 1, 0, 0, 0, 543, 544, 5, 186, 0, 0, 544, 545, 3, 74, 37, 0, 545, 546, 5, 163, 0, 0, 546, 547, 3, 74, 37, 0, 547, 549, 1, 0, 0, 0, 548, 543, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 554, 1, 0, 0, 0, 552, 553, 5, 52, 0, 0, 553, 555, 3, 74, 37, 0, 554, 552, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 5, 53, 0, 0, 557, 669, 1, 0, 0, 0, 558, 559, 5, 20, 0, 0, 559, 560, 5, 220, 0, 0, 560, 561, 3, 74, 37, 0, 561, 562, 5, 10, 0, 0, 562, 563, 3, 70, 35, 0, 563, 564, 5, 236, 0, 0, 564, 669, 1, 0, 0, 0, 565, 566, 5, 36, 0, 0, 566, 669, 5, 200, 0, 0, 567, 568, 5, 59, 0, 0, 568, 569, 5, 220, 0, 0, 569, 570, 3, 110, 55, 0, 570, 571, 5, 68, 0, 0, 571, 572, 3, 74, 37, 0, 572, 573, 5, 236, 0, 0, 573, 669, 1, 0, 0, 0, 574, 575, 5, 86, 0, 0, 575, 576, 3, 74, 37, 0, 576, 577, 3, 110, 55, 0, 577, 669, 1, 0, 0, 0, 578, 579, 5, 155, 0, 0, 579, 580, 5, 220, 0, 0, 580, 581, 3, 74, 37, 0, 581, 582, 5, 68, 0, 0, 582, 585, 3, 74, 37, 0, 583, 584, 5, 65, 0, 0, 584, 586, 3, 74, 37, 0, 585, 583, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 588, 5, 236, 0, 0, 588, 669, 1, 0, 0, 0, 589, 590, 5, 166, 0, 0, 590, 669, 5, 200, 0, 0, 591, 592, 5, 171, 0, 0, 592, 593, 5, 220, 0, 0, 593, 594, 7, 9, 0, 0, 594, 595, 5, 200, 0, 0, 595, 596, 5, 68, 0, 0, 596, 597, 3, 74, 37, 0, 597, 598, 5, 236, 0, 0, 598, 669, 1, 0, 0, 0, 599, 600, 3, 118, 59, 0, 600, 602, 5, 220, 0, 0, 601, 603, 3, 72, 36, 0, 602, 601, 1, 0, 0, 0, 602, 603, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 605, 5, 236, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 5, 125, 0, 0, 607, 608, 5, 220, 0, 0, 608, 609, 3, 56, 28, 0, 609, 610, 5, 236, 0, 0, 610, 669, 1, 0, 0, 0, 611, 612, 3, 118, 59, 0, 612, 614, 5, 220, 0, 0, 613, 615, 3, 72, 36, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 5, 236, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, 5, 125, 0, 0, 619, 620, 3, 118, 59, 0, 620, 669, 1, 0, 0, 0, 621, 627, 3, 118, 59, 0, 622, 624, 5, 220, 0, 0, 623, 625, 3, 72, 36, 0, 624, 623, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 628, 5, 236, 0, 0, 627, 622, 1, 0, 0, 0, 627, 628, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 631, 5, 220, 0, 0, 630, 632, 5, 49, 0, 0, 631, 630, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 634, 1, 0, 0, 0, 633, 635, 3, 76, 38, 0, 634, 633, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 5, 236, 0, 0, 637, 669, 1, 0, 0, 0, 638, 669, 3, 82, 41, 0, 639, 669, 3, 108, 54, 0, 640, 641, 5, 208, 0, 0, 641, 669, 3, 74, 37, 18, 642, 643, 5, 115, 0, 0, 643, 669, 3, 74, 37, 12, 644, 645, 3, 98, 49, 0, 645, 646, 5, 210, 0, 0, 646, 648, 1, 0, 0, 0, 647, 644, 1, 0, 0, 0, 647, 648, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 669, 5, 202, 0, 0, 650, 651, 5, 220, 0, 0, 651, 652, 3, 2, 1, 0, 652, 653, 5, 236, 0, 0, 653, 669, 1, 0, 0, 0, 654, 655, 5, 220, 0, 0, 655, 656, 3, 74, 37, 0, 656, 657, 5, 236, 0, 0, 657, 669, 1, 0, 0, 0, 658, 659, 5, 220, 0, 0, 659, 660, 3, 72, 36, 0, 660, 661, 5, 236, 0, 0, 661, 669, 1, 0, 0, 0, 662, 664, 5, 219, 0, 0, 663, 665, 3, 72, 36, 0, 664, 663, 1, 0, 0, 0, 664, 665, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 669, 5, 235, 0, 0, 667, 669, 3, 90, 45, 0, 668, 538, 1, 0, 0, 0, 668, 558, 1, 0, 0, 0, 668, 565, 1, 0, 0, 0, 668, 567, 1, 0, 0, 0, 668, 574, 1, 0, 0, 0, 668, 578, 1, 0, 0, 0, 668, 589, 1, 0, 0, 0, 668, 591, 1, 0, 0, 0, 668, 599, 1, 0, 0, 0, 668, 611, 1, 0, 0, 0, 668, 621, 1, 0, 0, 0, 668, 638, 1, 0, 0, 0, 668, 639, 1, 0, 0, 0, 668, 640, 1, 0, 0, 0, 668, 642, 1, 0, 0, 0, 668, 647, 1, 0, 0, 0, 668, 650, 1, 0, 0, 0, 668, 654, 1, 0, 0, 0, 668, 658, 1, 0, 0, 0, 668, 662, 1, 0, 0, 0, 668, 667, 1, 0, 0, 0, 669, 763, 1, 0, 0, 0, 670, 674, 10, 17, 0, 0, 671, 675, 5, 202, 0, 0, 672, 675, 5, 238, 0, 0, 673, 675, 5, 227, 0, 0, 674, 671, 1, 0, 0, 0, 674, 672, 1, 0, 0, 0, 674, 673, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 762, 3, 74, 37, 18, 677, 681, 10, 16, 0, 0, 678, 682, 5, 228, 0, 0, 679, 682, 5, 208, 0, 0, 680, 682, 5, 207, 0, 0, 681, 678, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 681, 680, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 762, 3, 74, 37, 17, 684, 709, 10, 15, 0, 0, 685, 710, 5, 211, 0, 0, 686, 710, 5, 212, 0, 0, 687, 710, 5, 223, 0, 0, 688, 710, 5, 221, 0, 0, 689, 710, 5, 222, 0, 0, 690, 710, 5, 213, 0, 0, 691, 710, 5, 214, 0, 0, 692, 694, 5, 115, 0, 0, 693, 692, 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 697, 5, 80, 0, 0, 696, 698, 5, 25, 0, 0, 697, 696, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 710, 1, 0, 0, 0, 699, 701, 5, 115, 0, 0, 700, 699, 1, 0, 0, 0, 700, 701, 1, 0, 0, 0, 701, 702, 1, 0, 0, 0, 702, 710, 7, 10, 0, 0, 703, 710, 5, 232, 0, 0, 704, 710, 5, 233, 0, 0, 705, 710, 5, 225, 0, 0, 706, 710, 5, 216, 0, 0, 707, 710, 5, 217, 0, 0, 708, 710, 5, 224, 0, 0, 709, 685, 1, 0, 0, 0, 709, 686, 1, 0, 0, 0, 709, 687, 1, 0, 0, 0, 709, 688, 1, 0, 0, 0, 709, 689, 1, 0, 0, 0, 709, 690, 1, 0, 0, 0, 709, 691, 1, 0, 0, 0, 709, 693, 1, 0, 0, 0, 709, 700, 1, 0, 0, 0, 709, 703, 1, 0, 0, 0, 709, 704, 1, 0, 0, 0, 709, 705, 1, 0, 0, 0, 709, 706, 1, 0, 0, 0, 709, 707, 1, 0, 0, 0, 709, 708, 1, 0, 0, 0, 710, 711, 1, 0, 0, 0, 711, 762, 3, 74, 37, 16, 712, 713, 10, 13, 0, 0, 713, 714, 5, 226, 0, 0, 714, 762, 3, 74, 37, 14, 715, 716, 10, 11, 0, 0, 716, 717, 5, 6, 0, 0, 717, 762, 3, 74, 37, 12, 718, 719, 10, 10, 0, 0, 719, 720, 5, 121, 0, 0, 720, 762, 3, 74, 37, 11, 721, 723, 10, 9, 0, 0, 722, 724, 5, 115, 0, 0, 723, 722, 1, 0, 0, 0, 723, 724, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 726, 5, 16, 0, 0, 726, 727, 3, 74, 37, 0, 727, 728, 5, 6, 0, 0, 728, 729, 3, 74, 37, 10, 729, 762, 1, 0, 0, 0, 730, 731, 10, 8, 0, 0, 731, 732, 5, 229, 0, 0, 732, 733, 3, 74, 37, 0, 733, 734, 5, 205, 0, 0, 734, 735, 3, 74, 37, 8, 735, 762, 1, 0, 0, 0, 736, 737, 10, 21, 0, 0, 737, 738, 5, 219, 0, 0, 738, 739, 3, 74, 37, 0, 739, 740, 5, 235, 0, 0, 740, 762, 1, 0, 0, 0, 741, 742, 10, 20, 0, 0, 742, 743, 5, 210, 0, 0, 743, 762, 5, 198, 0, 0, 744, 745, 10, 19, 0, 0, 745, 746, 5, 210, 0, 0, 746, 762, 3, 118, 59, 0, 747, 748, 10, 14, 0, 0, 748, 750, 5, 88, 0, 0, 749, 751, 5, 115, 0, 0, 750, 749, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 752, 1, 0, 0, 0, 752, 762, 5, 116, 0, 0, 753, 759, 10, 7, 0, 0, 754, 760, 3, 116, 58, 0, 755, 756, 5, 10, 0, 0, 756, 760, 3, 118, 59, 0, 757, 758, 5, 10, 0, 0, 758, 760, 5, 200, 0, 0, 759, 754, 1, 0, 0, 0, 759, 755, 1, 0, 0, 0, 759, 757, 1, 0, 0, 0, 760, 762, 1, 0, 0, 0, 761, 670, 1, 0, 0, 0, 761, 677, 1, 0, 0, 0, 761, 684, 1, 0, 0, 0, 761, 712, 1, 0, 0, 0, 761, 715, 1, 0, 0, 0, 761, 718, 1, 0, 0, 0, 761, 721, 1, 0, 0, 0, 761, 730, 1, 0, 0, 0, 761, 736, 1, 0, 0, 0, 761, 741, 1, 0, 0, 0, 761, 744, 1, 0, 0, 0, 761, 747, 1, 0, 0, 0, 761, 753, 1, 0, 0, 0, 762, 765, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 75, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 766, 771, 3, 78, 39, 0, 767, 768, 5, 206, 0, 0, 768, 770, 3, 78, 39, 0, 769, 767, 1, 0, 0, 0, 770, 773, 1, 0, 0, 0, 771, 769, 1, 0, 0, 0, 771, 772, 1, 0, 0, 0, 772, 77, 1, 0, 0, 0, 773, 771, 1, 0, 0, 0, 774, 777, 3, 80, 40, 0, 775, 777, 3, 74, 37, 0, 776, 774, 1, 0, 0, 0, 776, 775, 1, 0, 0, 0, 777, 79, 1, 0, 0, 0, 778, 779, 5, 220, 0, 0, 779, 784, 3, 118, 59, 0, 780, 781, 5, 206, 0, 0, 781, 783, 3, 118, 59, 0, 782, 780, 1, 0, 0, 0, 783, 786, 1, 0, 0, 0, 784, 782, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 787, 1, 0, 0, 0, 786, 784, 1, 0, 0, 0, 787, 788, 5, 236, 0, 0, 788, 798, 1, 0, 0, 0, 789, 794, 3, 118, 59, 0, 790, 791, 5, 206, 0, 0, 791, 793, 3, 118, 59, 0, 792, 790, 1, 0, 0, 0, 793, 796, 1, 0, 0, 0, 794, 792, 1, 0, 0, 0, 794, 795, 1, 0, 0, 0, 795, 798, 1, 0, 0, 0, 796, 794, 1, 0, 0, 0, 797, 778, 1, 0, 0, 0, 797, 789, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 800, 5, 201, 0, 0, 800, 801, 3, 74, 37, 0, 801, 81, 1, 0, 0, 0, 802, 803, 5, 222, 0, 0, 803, 807, 3, 118, 59, 0, 804, 806, 3, 84, 42, 0, 805, 804, 1, 0, 0, 0, 806, 809, 1, 0, 0, 0, 807, 805, 1, 0, 0, 0, 807, 808, 1, 0, 0, 0, 808, 810, 1, 0, 0, 0, 809, 807, 1, 0, 0, 0, 810, 811, 5, 238, 0, 0, 811, 812, 5, 214, 0, 0, 812, 83, 1, 0, 0, 0, 813, 814, 3, 118, 59, 0, 814, 815, 5, 212, 0, 0, 815, 816, 5, 200, 0, 0, 816, 825, 1, 0, 0, 0, 817, 818, 3, 118, 59, 0, 818, 819, 5, 212, 0, 0, 819, 820, 5, 218, 0, 0, 820, 821, 3, 74, 37, 0, 821, 822, 5, 234, 0, 0, 822, 825, 1, 0, 0, 0, 823, 825, 3, 118, 59, 0, 824, 813, 1, 0, 0, 0, 824, 817, 1, 0, 0, 0, 824, 823, 1, 0, 0, 0, 825, 85, 1, 0, 0, 0, 826, 831, 3, 88, 44, 0, 827, 828, 5, 206, 0, 0, 828, 830, 3, 88, 44, 0, 829, 827, 1, 0, 0, 0, 830, 833, 1, 0, 0, 0, 831, 829, 1, 0, 0, 0, 831, 832, 1, 0, 0, 0, 832, 87, 1, 0, 0, 0, 833, 831, 1, 0, 0, 0, 834, 835, 3, 118, 59, 0, 835, 836, 5, 10, 0, 0, 836, 837, 5, 220, 0, 0, 837, 838, 3, 2, 1, 0, 838, 839, 5, 236, 0, 0, 839, 845, 1, 0, 0, 0, 840, 841, 3, 74, 37, 0, 841, 842, 5, 10, 0, 0, 842, 843, 3, 118, 59, 0, 843, 845, 1, 0, 0, 0, 844, 834, 1, 0, 0, 0, 844, 840, 1, 0, 0, 0, 845, 89, 1, 0, 0, 0, 846, 854, 3, 122, 61, 0, 847, 848, 3, 98, 49, 0, 848, 849, 5, 210, 0, 0, 849, 851, 1, 0, 0, 0, 850, 847, 1, 0, 0, 0, 850, 851, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 854, 3, 92, 46, 0, 853, 846, 1, 0, 0, 0, 853, 850, 1, 0, 0, 0, 854, 91, 1, 0, 0, 0, 855, 860, 3, 118, 59, 0, 856, 857, 5, 210, 0, 0, 857, 859, 3, 118, 59, 0, 858, 856, 1, 0, 0, 0, 859, 862, 1, 0, 0, 0, 860, 858, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 93, 1, 0, 0, 0, 862, 860, 1, 0, 0, 0, 863, 864, 6, 47, -1, 0, 864, 873, 3, 98, 49, 0, 865, 873, 3, 96, 48, 0, 866, 867, 5, 220, 0, 0, 867, 868, 3, 2, 1, 0, 868, 869, 5, 236, 0, 0, 869, 873, 1, 0, 0, 0, 870, 873, 3, 82, 41, 0, 871, 873, 3, 122, 61, 0, 872, 863, 1, 0, 0, 0, 872, 865, 1, 0, 0, 0, 872, 866, 1, 0, 0, 0, 872, 870, 1, 0, 0, 0, 872, 871, 1, 0, 0, 0, 873, 882, 1, 0, 0, 0, 874, 878, 10, 3, 0, 0, 875, 879, 3, 116, 58, 0, 876, 877, 5, 10, 0, 0, 877, 879, 3, 118, 59, 0, 878, 875, 1, 0, 0, 0, 878, 876, 1, 0, 0, 0, 879, 881, 1, 0, 0, 0, 880, 874, 1, 0, 0, 0, 881, 884, 1, 0, 0, 0, 882, 880, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 95, 1, 0, 0, 0, 884, 882, 1, 0, 0, 0, 885, 886, 3, 118, 59, 0, 886, 888, 5, 220, 0, 0, 887, 889, 3, 100, 50, 0, 888, 887, 1, 0, 0, 0, 888, 889, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 891, 5, 236, 0, 0, 891, 97, 1, 0, 0, 0, 892, 893, 3, 102, 51, 0, 893, 894, 5, 210, 0, 0, 894, 896, 1, 0, 0, 0, 895, 892, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 898, 3, 118, 59, 0, 898, 99, 1, 0, 0, 0, 899, 904, 3, 74, 37, 0, 900, 901, 5, 206, 0, 0, 901, 903, 3, 74, 37, 0, 902, 900, 1, 0, 0, 0, 903, 906, 1, 0, 0, 0, 904, 902, 1, 0, 0, 0, 904, 905, 1, 0, 0, 0, 905, 101, 1, 0, 0, 0, 906, 904, 1, 0, 0, 0, 907, 908, 3, 118, 59, 0, 908, 103, 1, 0, 0, 0, 909, 918, 5, 196, 0, 0, 910, 911, 5, 210, 0, 0, 911, 918, 7, 11, 0, 0, 912, 913, 5, 198, 0, 0, 913, 915, 5, 210, 0, 0, 914, 916, 7, 11, 0, 0, 915, 914, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 918, 1, 0, 0, 0, 917, 909, 1, 0, 0, 0, 917, 910, 1, 0, 0, 0, 917, 912, 1, 0, 0, 0, 918, 105, 1, 0, 0, 0, 919, 921, 7, 12, 0, 0, 920, 919, 1, 0, 0, 0, 920, 921, 1, 0, 0, 0, 921, 928, 1, 0, 0, 0, 922, 929, 3, 104, 52, 0, 923, 929, 5, 197, 0, 0, 924, 929, 5, 198, 0, 0, 925, 929, 5, 199, 0, 0, 926, 929, 5, 82, 0, 0, 927, 929, 5, 113, 0, 0, 928, 922, 1, 0, 0, 0, 928, 923, 1, 0, 0, 0, 928, 924, 1, 0, 0, 0, 928, 925, 1, 0, 0, 0, 928, 926, 1, 0, 0, 0, 928, 927, 1, 0, 0, 0, 929, 107, 1, 0, 0, 0, 930, 934, 3, 106, 53, 0, 931, 934, 5, 200, 0, 0, 932, 934, 5, 116, 0, 0, 933, 930, 1, 0, 0, 0, 933, 931, 1, 0, 0, 0, 933, 932, 1, 0, 0, 0, 934, 109, 1, 0, 0, 0, 935, 936, 7, 13, 0, 0, 936, 111, 1, 0, 0, 0, 937, 938, 7, 14, 0, 0, 938, 113, 1, 0, 0, 0, 939, 940, 7, 15, 0, 0, 940, 115, 1, 0, 0, 0, 941, 944, 5, 195, 0, 0, 942, 944, 3, 114, 57, 0, 943, 941, 1, 0, 0, 0, 943, 942, 1, 0, 0, 0, 944, 117, 1, 0, 0, 0, 945, 949, 5, 195, 0, 0, 946, 949, 3, 110, 55, 0, 947, 949, 3, 112, 56, 0, 948, 945, 1, 0, 0, 0, 948, 946, 1, 0, 0, 0, 948, 947, 1, 0, 0, 0, 949, 119, 1, 0, 0, 0, 950, 951, 5, 200, 0, 0, 951, 952, 5, 212, 0, 0, 952, 953, 3, 106, 53, 0, 953, 121, 1, 0, 0, 0, 954, 955, 5, 218, 0, 0, 955, 956, 3, 118, 59, 0, 956, 957, 5, 234, 0, 0, 957, 123, 1, 0, 0, 0, 117, 127, 137, 145, 148, 152, 155, 159, 162, 165, 168, 171, 175, 179, 182, 185, 188, 192, 195, 204, 210, 231, 248, 265, 271, 277, 288, 290, 301, 304, 310, 318, 324, 326, 330, 335, 338, 341, 345, 349, 352, 354, 357, 361, 365, 368, 370, 372, 377, 388, 394, 401, 406, 410, 414, 420, 422, 429, 437, 440, 443, 462, 476, 492, 504, 516, 524, 528, 535, 541, 550, 554, 585, 602, 614, 624, 627, 631, 634, 647, 664, 668, 674, 681, 693, 697, 700, 709, 723, 750, 759, 761, 763, 771, 776, 784, 794, 797, 807, 824, 831, 844, 850, 853, 860, 872, 878, 882, 888, 895, 904, 915, 917, 920, 928, 933, 943, 948] \ No newline at end of file diff --git a/hogql_parser/HogQLParser.tokens b/hogql_parser/HogQLParser.tokens index 10fd925b09195..18c9b75ec7548 100644 --- a/hogql_parser/HogQLParser.tokens +++ b/hogql_parser/HogQLParser.tokens @@ -190,14 +190,14 @@ WITH=189 YEAR=190 JSON_FALSE=191 JSON_TRUE=192 -ESCAPE_CHAR=193 -IDENTIFIER=194 -FLOATING_LITERAL=195 -OCTAL_LITERAL=196 -DECIMAL_LITERAL=197 -HEXADECIMAL_LITERAL=198 -STRING_LITERAL=199 -PLACEHOLDER=200 +ESCAPE_CHAR_SINGLE=193 +ESCAPE_CHAR_DOUBLE=194 +IDENTIFIER=195 +FLOATING_LITERAL=196 +OCTAL_LITERAL=197 +DECIMAL_LITERAL=198 +HEXADECIMAL_LITERAL=199 +STRING_LITERAL=200 ARROW=201 ASTERISK=202 BACKQUOTE=203 diff --git a/hogql_parser/HogQLParserBaseVisitor.h b/hogql_parser/HogQLParserBaseVisitor.h index 016b75a57f4c0..f38c6163237f1 100644 --- a/hogql_parser/HogQLParserBaseVisitor.h +++ b/hogql_parser/HogQLParserBaseVisitor.h @@ -271,6 +271,10 @@ class HogQLParserBaseVisitor : public HogQLParserVisitor { return visitChildren(ctx); } + virtual std::any visitColumnExprTagElement(HogQLParser::ColumnExprTagElementContext *ctx) override { + return visitChildren(ctx); + } + virtual std::any visitColumnExprTuple(HogQLParser::ColumnExprTupleContext *ctx) override { return visitChildren(ctx); } @@ -347,6 +351,14 @@ class HogQLParserBaseVisitor : public HogQLParserVisitor { return visitChildren(ctx); } + virtual std::any visitHogqlxTagElement(HogQLParser::HogqlxTagElementContext *ctx) override { + return visitChildren(ctx); + } + + virtual std::any visitHogqlxTagAttribute(HogQLParser::HogqlxTagAttributeContext *ctx) override { + return visitChildren(ctx); + } + virtual std::any visitWithExprList(HogQLParser::WithExprListContext *ctx) override { return visitChildren(ctx); } @@ -367,6 +379,10 @@ class HogQLParserBaseVisitor : public HogQLParserVisitor { return visitChildren(ctx); } + virtual std::any visitTableExprTag(HogQLParser::TableExprTagContext *ctx) override { + return visitChildren(ctx); + } + virtual std::any visitTableExprIdentifier(HogQLParser::TableExprIdentifierContext *ctx) override { return visitChildren(ctx); } @@ -439,6 +455,10 @@ class HogQLParserBaseVisitor : public HogQLParserVisitor { return visitChildren(ctx); } + virtual std::any visitPlaceholder(HogQLParser::PlaceholderContext *ctx) override { + return visitChildren(ctx); + } + }; diff --git a/hogql_parser/HogQLParserVisitor.h b/hogql_parser/HogQLParserVisitor.h index d255fa6a97971..0206c3b07f48f 100644 --- a/hogql_parser/HogQLParserVisitor.h +++ b/hogql_parser/HogQLParserVisitor.h @@ -147,6 +147,8 @@ class HogQLParserVisitor : public antlr4::tree::AbstractParseTreeVisitor { virtual std::any visitColumnExprTrim(HogQLParser::ColumnExprTrimContext *context) = 0; + virtual std::any visitColumnExprTagElement(HogQLParser::ColumnExprTagElementContext *context) = 0; + virtual std::any visitColumnExprTuple(HogQLParser::ColumnExprTupleContext *context) = 0; virtual std::any visitColumnExprArrayAccess(HogQLParser::ColumnExprArrayAccessContext *context) = 0; @@ -185,6 +187,10 @@ class HogQLParserVisitor : public antlr4::tree::AbstractParseTreeVisitor { virtual std::any visitColumnLambdaExpr(HogQLParser::ColumnLambdaExprContext *context) = 0; + virtual std::any visitHogqlxTagElement(HogQLParser::HogqlxTagElementContext *context) = 0; + + virtual std::any visitHogqlxTagAttribute(HogQLParser::HogqlxTagAttributeContext *context) = 0; + virtual std::any visitWithExprList(HogQLParser::WithExprListContext *context) = 0; virtual std::any visitWithExprSubquery(HogQLParser::WithExprSubqueryContext *context) = 0; @@ -195,6 +201,8 @@ class HogQLParserVisitor : public antlr4::tree::AbstractParseTreeVisitor { virtual std::any visitNestedIdentifier(HogQLParser::NestedIdentifierContext *context) = 0; + virtual std::any visitTableExprTag(HogQLParser::TableExprTagContext *context) = 0; + virtual std::any visitTableExprIdentifier(HogQLParser::TableExprIdentifierContext *context) = 0; virtual std::any visitTableExprPlaceholder(HogQLParser::TableExprPlaceholderContext *context) = 0; @@ -231,6 +239,8 @@ class HogQLParserVisitor : public antlr4::tree::AbstractParseTreeVisitor { virtual std::any visitEnumValue(HogQLParser::EnumValueContext *context) = 0; + virtual std::any visitPlaceholder(HogQLParser::PlaceholderContext *context) = 0; + }; diff --git a/hogql_parser/parser.cpp b/hogql_parser/parser.cpp index 2e734cc8737fc..fef1b95f76d4b 100644 --- a/hogql_parser/parser.cpp +++ b/hogql_parser/parser.cpp @@ -237,7 +237,18 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { if (select_union_stmt_ctx) { return visit(select_union_stmt_ctx); } - return visit(ctx->selectStmt()); + + auto select_stmt_ctx = ctx->selectStmt(); + if (select_stmt_ctx) { + return visit(select_stmt_ctx); + } + + auto tag_element_ctx = ctx->hogqlxTagElement(); + if (tag_element_ctx) { + return visit(tag_element_ctx); + } + + throw HogQLParsingException("Unexpected Select node. Must have either selectUnionStmt, selectStmt, or hogqlxTagElement set."); } VISIT(SelectStmtWithParens) { @@ -570,12 +581,11 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { } VISIT(RatioExpr) { - auto placeholder_ctx = ctx->PLACEHOLDER(); + auto placeholder_ctx = ctx->placeholder(); if (placeholder_ctx) { - string placeholder = unquote_string_terminal(placeholder_ctx); - return build_ast_node("Placeholder", "{s:s#}", "field", placeholder.data(), placeholder.size()); + return visitAsPyObject(placeholder_ctx); } - + auto number_literal_ctxs = ctx->numberLiteral(); if (number_literal_ctxs.size() > 2) { @@ -1017,6 +1027,8 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { return build_ast_node("Field", "{s:[s]}", "chain", "*"); } + VISIT(ColumnExprTagElement) { return visit(ctx->hogqlxTagElement()); } + VISIT(ColumnArgList) { return visitPyListOfObjects(ctx->columnArgExpr()); } VISIT(ColumnLambdaExpr) { @@ -1055,12 +1067,10 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { } VISIT(ColumnIdentifier) { - auto placeholder_ctx = ctx->PLACEHOLDER(); + auto placeholder_ctx = ctx->placeholder(); if (placeholder_ctx) { - string placeholder = unquote_string_terminal(placeholder_ctx); - return build_ast_node("Placeholder", "{s:s#}", "field", placeholder.data(), placeholder.size()); + return visitAsPyObject(placeholder_ctx); } - auto table_identifier_ctx = ctx->tableIdentifier(); auto nested_identifier_ctx = ctx->nestedIdentifier(); vector table = @@ -1094,8 +1104,7 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { VISIT(TableExprSubquery) { return visit(ctx->selectUnionStmt()); } VISIT(TableExprPlaceholder) { - string placeholder = unquote_string_terminal(ctx->PLACEHOLDER()); - return build_ast_node("Placeholder", "{s:s#}", "field", placeholder.data(), placeholder.size()); + return visitAsPyObject(ctx->placeholder()); } VISIT(TableExprAlias) { @@ -1117,6 +1126,8 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { VISIT(TableExprFunction) { return visit(ctx->tableFunctionExpr()); } + VISIT(TableExprTag) { return visit(ctx->hogqlxTagElement()); } + VISIT(TableFunctionExpr) { string name = visitAsString(ctx->identifier()); PyObject* table_args; @@ -1208,6 +1219,46 @@ class HogQLParseTreeConverter : public HogQLParserBaseVisitor { return text; } + VISIT(HogqlxTagAttribute) { + string name = visitAsString(ctx->identifier()); + + auto column_expr_ctx = ctx->columnExpr(); + if (column_expr_ctx) { + return build_ast_node( + "HogQLXAttribute", "{s:s#,s:N}", "name", name.data(), name.size(), "value", visitAsPyObject(column_expr_ctx) + ); + } + + auto string_literal_ctx = ctx->STRING_LITERAL(); + if (string_literal_ctx) { + string text = unquote_string_terminal(string_literal_ctx); + PyObject* value = build_ast_node("Constant", "{s:s#}", "value", text.data(), text.size()); + return build_ast_node( + "HogQLXAttribute", "{s:s#,s:N}", "name", name.data(), name.size(), "value", value + ); + } + + PyObject* value = build_ast_node("Constant", "{s:O}", "value", Py_True); + return build_ast_node( + "HogQLXAttribute", "{s:s#,s:N}", "name", name.data(), name.size(), "value", value + ); + } + + VISIT(HogqlxTagElement) { + string kind = visitAsString(ctx->identifier()); + PyObject* tag_element = build_ast_node( + "HogQLXTag", "{s:s#,s:N}", + "kind", kind.data(), kind.size(), + "attributes", visitPyListOfObjects(ctx->hogqlxTagAttribute()) + ); + return tag_element; + } + + VISIT(Placeholder) { + string name = visitAsString(ctx->identifier()); + return build_ast_node("Placeholder", "{s:s#}", "field", name.data(), name.size()); + } + VISIT_UNSUPPORTED(EnumValue) VISIT(ColumnExprNullish) { diff --git a/hogql_parser/setup.py b/hogql_parser/setup.py index 7697d267057b6..abc95223fbf6e 100644 --- a/hogql_parser/setup.py +++ b/hogql_parser/setup.py @@ -32,7 +32,7 @@ setup( name="hogql_parser", - version="0.1.9", + version="0.1.11", url="https://github.com/PostHog/posthog/tree/master/hogql_parser", author="PostHog Inc.", author_email="hey@posthog.com", diff --git a/posthog/hogql/ast.py b/posthog/hogql/ast.py index 95f5f23a9534e..545ffdf5714a1 100644 --- a/posthog/hogql/ast.py +++ b/posthog/hogql/ast.py @@ -2,7 +2,7 @@ from typing import Any, Dict, List, Literal, Optional, Union from dataclasses import dataclass, field -from posthog.hogql.base import Type, Expr, CTE, ConstantType, UnknownType +from posthog.hogql.base import Type, Expr, CTE, ConstantType, UnknownType, AST from posthog.hogql.constants import ConstantDataType, HogQLQuerySettings from posthog.hogql.database.models import ( FieldTraverser, @@ -557,3 +557,21 @@ class SampleExpr(Expr): # k or n sample_value: RatioExpr offset_value: Optional[RatioExpr] = None + + +@dataclass(kw_only=True) +class HogQLXAttribute(AST): + name: str + value: Any + + +@dataclass(kw_only=True) +class HogQLXTag(AST): + kind: str + attributes: List[HogQLXAttribute] + + def to_dict(self): + return { + "kind": self.kind, + **{a.name: a.value for a in self.attributes}, + } diff --git a/posthog/hogql/base.py b/posthog/hogql/base.py index 7c4b5776c797e..217ec2d3aeaec 100644 --- a/posthog/hogql/base.py +++ b/posthog/hogql/base.py @@ -18,6 +18,8 @@ class AST: def accept(self, visitor): camel_case_name = camel_case_pattern.sub("_", self.__class__.__name__).lower() + if "hog_qlx" in camel_case_name: + camel_case_name = camel_case_name.replace("hog_qlx", "hogqlx_") method_name = f"visit_{camel_case_name}" if hasattr(visitor, method_name): visit = getattr(visitor, method_name) diff --git a/posthog/hogql/grammar/HogQLLexer.g4 b/posthog/hogql/grammar/HogQLLexer.g4 index c0d2c02395ab3..5f913370c1de1 100644 --- a/posthog/hogql/grammar/HogQLLexer.g4 +++ b/posthog/hogql/grammar/HogQLLexer.g4 @@ -201,7 +201,7 @@ JSON_TRUE: 'true'; // Tokens // copied from clickhouse_driver/util/escape.py -ESCAPE_CHAR +ESCAPE_CHAR_SINGLE : BACKSLASH B | BACKSLASH F | BACKSLASH R @@ -213,10 +213,22 @@ ESCAPE_CHAR | BACKSLASH BACKSLASH | BACKSLASH QUOTE_SINGLE; +ESCAPE_CHAR_DOUBLE + : BACKSLASH B + | BACKSLASH F + | BACKSLASH R + | BACKSLASH N + | BACKSLASH T + | BACKSLASH '0' + | BACKSLASH A + | BACKSLASH V + | BACKSLASH BACKSLASH + | BACKSLASH QUOTE_DOUBLE; + IDENTIFIER : (LETTER | UNDERSCORE | DOLLAR) (LETTER | UNDERSCORE | DEC_DIGIT | DOLLAR)* - | BACKQUOTE ( ~([\\`]) | ESCAPE_CHAR | (BACKQUOTE BACKQUOTE) )* BACKQUOTE - | QUOTE_DOUBLE ( ~([\\"]) | ESCAPE_CHAR | (QUOTE_DOUBLE QUOTE_DOUBLE) )* QUOTE_DOUBLE + | BACKQUOTE ( ~([\\`]) | ESCAPE_CHAR_SINGLE | (BACKQUOTE BACKQUOTE) )* BACKQUOTE + | QUOTE_DOUBLE ( ~([\\"]) | ESCAPE_CHAR_DOUBLE | (QUOTE_DOUBLE QUOTE_DOUBLE) )* QUOTE_DOUBLE ; FLOATING_LITERAL : HEXADECIMAL_LITERAL DOT HEX_DIGIT* (P | E) (PLUS | DASH)? DEC_DIGIT+ @@ -230,8 +242,7 @@ DECIMAL_LITERAL: DEC_DIGIT+; HEXADECIMAL_LITERAL: '0' X HEX_DIGIT+; // It's important that quote-symbol is a single character. -STRING_LITERAL: QUOTE_SINGLE ( ~([\\']) | ESCAPE_CHAR | (QUOTE_SINGLE QUOTE_SINGLE) )* QUOTE_SINGLE; -PLACEHOLDER: LBRACE ( ~([\\}]) | ESCAPE_CHAR | (LBRACE LBRACE) )* RBRACE; +STRING_LITERAL: QUOTE_SINGLE ( ~([\\']) | ESCAPE_CHAR_SINGLE | (QUOTE_SINGLE QUOTE_SINGLE) )* QUOTE_SINGLE; // Alphabet and allowed symbols diff --git a/posthog/hogql/grammar/HogQLLexer.interp b/posthog/hogql/grammar/HogQLLexer.interp index 3e078ad307c5d..d9736c1e31fea 100644 --- a/posthog/hogql/grammar/HogQLLexer.interp +++ b/posthog/hogql/grammar/HogQLLexer.interp @@ -437,14 +437,14 @@ WITH YEAR JSON_FALSE JSON_TRUE -ESCAPE_CHAR +ESCAPE_CHAR_SINGLE +ESCAPE_CHAR_DOUBLE IDENTIFIER FLOATING_LITERAL OCTAL_LITERAL DECIMAL_LITERAL HEXADECIMAL_LITERAL STRING_LITERAL -PLACEHOLDER ARROW ASTERISK BACKQUOTE @@ -681,14 +681,14 @@ WITH YEAR JSON_FALSE JSON_TRUE -ESCAPE_CHAR +ESCAPE_CHAR_SINGLE +ESCAPE_CHAR_DOUBLE IDENTIFIER FLOATING_LITERAL OCTAL_LITERAL DECIMAL_LITERAL HEXADECIMAL_LITERAL STRING_LITERAL -PLACEHOLDER A B C @@ -770,4 +770,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 242, 2222, 6, -1, 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, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 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, 3, 10, 608, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 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, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 1113, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 1827, 8, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 3, 192, 1870, 8, 192, 1, 193, 1, 193, 1, 193, 3, 193, 1875, 8, 193, 1, 193, 1, 193, 1, 193, 1, 193, 5, 193, 1881, 8, 193, 10, 193, 12, 193, 1884, 9, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 5, 193, 1892, 8, 193, 10, 193, 12, 193, 1895, 9, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 5, 193, 1905, 8, 193, 10, 193, 12, 193, 1908, 9, 193, 1, 193, 1, 193, 3, 193, 1912, 8, 193, 1, 194, 1, 194, 1, 194, 5, 194, 1917, 8, 194, 10, 194, 12, 194, 1920, 9, 194, 1, 194, 1, 194, 3, 194, 1924, 8, 194, 1, 194, 1, 194, 3, 194, 1928, 8, 194, 1, 194, 4, 194, 1931, 8, 194, 11, 194, 12, 194, 1932, 1, 194, 1, 194, 1, 194, 3, 194, 1938, 8, 194, 1, 194, 1, 194, 3, 194, 1942, 8, 194, 1, 194, 4, 194, 1945, 8, 194, 11, 194, 12, 194, 1946, 1, 194, 1, 194, 1, 194, 5, 194, 1952, 8, 194, 10, 194, 12, 194, 1955, 9, 194, 1, 194, 1, 194, 1, 194, 3, 194, 1960, 8, 194, 1, 194, 4, 194, 1963, 8, 194, 11, 194, 12, 194, 1964, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 3, 194, 1972, 8, 194, 1, 194, 4, 194, 1975, 8, 194, 11, 194, 12, 194, 1976, 1, 194, 1, 194, 1, 194, 1, 194, 3, 194, 1983, 8, 194, 1, 194, 4, 194, 1986, 8, 194, 11, 194, 12, 194, 1987, 3, 194, 1990, 8, 194, 1, 195, 1, 195, 4, 195, 1994, 8, 195, 11, 195, 12, 195, 1995, 1, 196, 4, 196, 1999, 8, 196, 11, 196, 12, 196, 2000, 1, 197, 1, 197, 1, 197, 4, 197, 2006, 8, 197, 11, 197, 12, 197, 2007, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 1, 198, 5, 198, 2016, 8, 198, 10, 198, 12, 198, 2019, 9, 198, 1, 198, 1, 198, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 5, 199, 2029, 8, 199, 10, 199, 12, 199, 2032, 9, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 201, 1, 201, 1, 202, 1, 202, 1, 203, 1, 203, 1, 204, 1, 204, 1, 205, 1, 205, 1, 206, 1, 206, 1, 207, 1, 207, 1, 208, 1, 208, 1, 209, 1, 209, 1, 210, 1, 210, 1, 211, 1, 211, 1, 212, 1, 212, 1, 213, 1, 213, 1, 214, 1, 214, 1, 215, 1, 215, 1, 216, 1, 216, 1, 217, 1, 217, 1, 218, 1, 218, 1, 219, 1, 219, 1, 220, 1, 220, 1, 221, 1, 221, 1, 222, 1, 222, 1, 223, 1, 223, 1, 224, 1, 224, 1, 225, 1, 225, 1, 226, 1, 226, 1, 227, 1, 227, 1, 228, 1, 228, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 232, 1, 232, 1, 233, 1, 233, 1, 234, 1, 234, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 238, 1, 238, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 248, 1, 248, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, 3, 252, 2152, 8, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 257, 1, 257, 1, 258, 1, 258, 1, 259, 1, 259, 1, 260, 1, 260, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 264, 1, 264, 1, 265, 1, 265, 1, 266, 1, 266, 1, 267, 1, 267, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 5, 269, 2195, 8, 269, 10, 269, 12, 269, 2198, 9, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 5, 270, 2209, 8, 270, 10, 270, 12, 270, 2212, 9, 270, 1, 270, 3, 270, 2215, 8, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 2196, 0, 272, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 0, 403, 0, 405, 0, 407, 0, 409, 0, 411, 0, 413, 0, 415, 0, 417, 0, 419, 0, 421, 0, 423, 0, 425, 0, 427, 0, 429, 0, 431, 0, 433, 0, 435, 0, 437, 0, 439, 0, 441, 0, 443, 0, 445, 0, 447, 0, 449, 0, 451, 0, 453, 0, 455, 0, 457, 0, 459, 0, 461, 201, 463, 202, 465, 203, 467, 204, 469, 205, 471, 206, 473, 207, 475, 208, 477, 209, 479, 210, 481, 211, 483, 212, 485, 213, 487, 214, 489, 215, 491, 216, 493, 217, 495, 218, 497, 219, 499, 220, 501, 221, 503, 222, 505, 223, 507, 224, 509, 225, 511, 226, 513, 227, 515, 228, 517, 229, 519, 230, 521, 231, 523, 232, 525, 233, 527, 234, 529, 235, 531, 236, 533, 237, 535, 238, 537, 239, 539, 240, 541, 241, 543, 242, 1, 0, 37, 2, 0, 92, 92, 96, 96, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 92, 92, 125, 125, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 1, 0, 48, 55, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 10, 10, 13, 13, 2, 1, 10, 10, 13, 13, 2, 0, 9, 13, 32, 32, 2252, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 1, 545, 1, 0, 0, 0, 3, 549, 1, 0, 0, 0, 5, 555, 1, 0, 0, 0, 7, 561, 1, 0, 0, 0, 9, 565, 1, 0, 0, 0, 11, 571, 1, 0, 0, 0, 13, 575, 1, 0, 0, 0, 15, 580, 1, 0, 0, 0, 17, 584, 1, 0, 0, 0, 19, 590, 1, 0, 0, 0, 21, 607, 1, 0, 0, 0, 23, 609, 1, 0, 0, 0, 25, 614, 1, 0, 0, 0, 27, 618, 1, 0, 0, 0, 29, 624, 1, 0, 0, 0, 31, 631, 1, 0, 0, 0, 33, 639, 1, 0, 0, 0, 35, 644, 1, 0, 0, 0, 37, 647, 1, 0, 0, 0, 39, 652, 1, 0, 0, 0, 41, 657, 1, 0, 0, 0, 43, 663, 1, 0, 0, 0, 45, 669, 1, 0, 0, 0, 47, 677, 1, 0, 0, 0, 49, 683, 1, 0, 0, 0, 51, 690, 1, 0, 0, 0, 53, 698, 1, 0, 0, 0, 55, 705, 1, 0, 0, 0, 57, 713, 1, 0, 0, 0, 59, 724, 1, 0, 0, 0, 61, 731, 1, 0, 0, 0, 63, 737, 1, 0, 0, 0, 65, 742, 1, 0, 0, 0, 67, 750, 1, 0, 0, 0, 69, 759, 1, 0, 0, 0, 71, 769, 1, 0, 0, 0, 73, 774, 1, 0, 0, 0, 75, 778, 1, 0, 0, 0, 77, 790, 1, 0, 0, 0, 79, 798, 1, 0, 0, 0, 81, 804, 1, 0, 0, 0, 83, 811, 1, 0, 0, 0, 85, 816, 1, 0, 0, 0, 87, 827, 1, 0, 0, 0, 89, 836, 1, 0, 0, 0, 91, 843, 1, 0, 0, 0, 93, 856, 1, 0, 0, 0, 95, 867, 1, 0, 0, 0, 97, 872, 1, 0, 0, 0, 99, 881, 1, 0, 0, 0, 101, 893, 1, 0, 0, 0, 103, 898, 1, 0, 0, 0, 105, 903, 1, 0, 0, 0, 107, 907, 1, 0, 0, 0, 109, 914, 1, 0, 0, 0, 111, 921, 1, 0, 0, 0, 113, 928, 1, 0, 0, 0, 115, 936, 1, 0, 0, 0, 117, 947, 1, 0, 0, 0, 119, 955, 1, 0, 0, 0, 121, 963, 1, 0, 0, 0, 123, 969, 1, 0, 0, 0, 125, 975, 1, 0, 0, 0, 127, 981, 1, 0, 0, 0, 129, 991, 1, 0, 0, 0, 131, 995, 1, 0, 0, 0, 133, 1002, 1, 0, 0, 0, 135, 1009, 1, 0, 0, 0, 137, 1014, 1, 0, 0, 0, 139, 1019, 1, 0, 0, 0, 141, 1028, 1, 0, 0, 0, 143, 1035, 1, 0, 0, 0, 145, 1047, 1, 0, 0, 0, 147, 1053, 1, 0, 0, 0, 149, 1060, 1, 0, 0, 0, 151, 1073, 1, 0, 0, 0, 153, 1078, 1, 0, 0, 0, 155, 1081, 1, 0, 0, 0, 157, 1084, 1, 0, 0, 0, 159, 1090, 1, 0, 0, 0, 161, 1093, 1, 0, 0, 0, 163, 1112, 1, 0, 0, 0, 165, 1114, 1, 0, 0, 0, 167, 1124, 1, 0, 0, 0, 169, 1130, 1, 0, 0, 0, 171, 1137, 1, 0, 0, 0, 173, 1146, 1, 0, 0, 0, 175, 1151, 1, 0, 0, 0, 177, 1154, 1, 0, 0, 0, 179, 1167, 1, 0, 0, 0, 181, 1172, 1, 0, 0, 0, 183, 1176, 1, 0, 0, 0, 185, 1181, 1, 0, 0, 0, 187, 1186, 1, 0, 0, 0, 189, 1193, 1, 0, 0, 0, 191, 1201, 1, 0, 0, 0, 193, 1206, 1, 0, 0, 0, 195, 1215, 1, 0, 0, 0, 197, 1220, 1, 0, 0, 0, 199, 1226, 1, 0, 0, 0, 201, 1231, 1, 0, 0, 0, 203, 1237, 1, 0, 0, 0, 205, 1242, 1, 0, 0, 0, 207, 1254, 1, 0, 0, 0, 209, 1267, 1, 0, 0, 0, 211, 1271, 1, 0, 0, 0, 213, 1278, 1, 0, 0, 0, 215, 1282, 1, 0, 0, 0, 217, 1289, 1, 0, 0, 0, 219, 1296, 1, 0, 0, 0, 221, 1302, 1, 0, 0, 0, 223, 1307, 1, 0, 0, 0, 225, 1316, 1, 0, 0, 0, 227, 1320, 1, 0, 0, 0, 229, 1323, 1, 0, 0, 0, 231, 1327, 1, 0, 0, 0, 233, 1332, 1, 0, 0, 0, 235, 1338, 1, 0, 0, 0, 237, 1345, 1, 0, 0, 0, 239, 1348, 1, 0, 0, 0, 241, 1357, 1, 0, 0, 0, 243, 1360, 1, 0, 0, 0, 245, 1366, 1, 0, 0, 0, 247, 1372, 1, 0, 0, 0, 249, 1380, 1, 0, 0, 0, 251, 1385, 1, 0, 0, 0, 253, 1395, 1, 0, 0, 0, 255, 1404, 1, 0, 0, 0, 257, 1414, 1, 0, 0, 0, 259, 1423, 1, 0, 0, 0, 261, 1431, 1, 0, 0, 0, 263, 1442, 1, 0, 0, 0, 265, 1450, 1, 0, 0, 0, 267, 1456, 1, 0, 0, 0, 269, 1463, 1, 0, 0, 0, 271, 1470, 1, 0, 0, 0, 273, 1477, 1, 0, 0, 0, 275, 1485, 1, 0, 0, 0, 277, 1493, 1, 0, 0, 0, 279, 1504, 1, 0, 0, 0, 281, 1510, 1, 0, 0, 0, 283, 1517, 1, 0, 0, 0, 285, 1521, 1, 0, 0, 0, 287, 1526, 1, 0, 0, 0, 289, 1533, 1, 0, 0, 0, 291, 1540, 1, 0, 0, 0, 293, 1547, 1, 0, 0, 0, 295, 1552, 1, 0, 0, 0, 297, 1558, 1, 0, 0, 0, 299, 1562, 1, 0, 0, 0, 301, 1571, 1, 0, 0, 0, 303, 1576, 1, 0, 0, 0, 305, 1583, 1, 0, 0, 0, 307, 1589, 1, 0, 0, 0, 309, 1594, 1, 0, 0, 0, 311, 1604, 1, 0, 0, 0, 313, 1609, 1, 0, 0, 0, 315, 1616, 1, 0, 0, 0, 317, 1623, 1, 0, 0, 0, 319, 1629, 1, 0, 0, 0, 321, 1636, 1, 0, 0, 0, 323, 1646, 1, 0, 0, 0, 325, 1651, 1, 0, 0, 0, 327, 1656, 1, 0, 0, 0, 329, 1661, 1, 0, 0, 0, 331, 1669, 1, 0, 0, 0, 333, 1679, 1, 0, 0, 0, 335, 1682, 1, 0, 0, 0, 337, 1686, 1, 0, 0, 0, 339, 1693, 1, 0, 0, 0, 341, 1702, 1, 0, 0, 0, 343, 1707, 1, 0, 0, 0, 345, 1716, 1, 0, 0, 0, 347, 1720, 1, 0, 0, 0, 349, 1725, 1, 0, 0, 0, 351, 1735, 1, 0, 0, 0, 353, 1741, 1, 0, 0, 0, 355, 1748, 1, 0, 0, 0, 357, 1752, 1, 0, 0, 0, 359, 1758, 1, 0, 0, 0, 361, 1763, 1, 0, 0, 0, 363, 1770, 1, 0, 0, 0, 365, 1775, 1, 0, 0, 0, 367, 1782, 1, 0, 0, 0, 369, 1788, 1, 0, 0, 0, 371, 1793, 1, 0, 0, 0, 373, 1798, 1, 0, 0, 0, 375, 1804, 1, 0, 0, 0, 377, 1811, 1, 0, 0, 0, 379, 1826, 1, 0, 0, 0, 381, 1828, 1, 0, 0, 0, 383, 1834, 1, 0, 0, 0, 385, 1869, 1, 0, 0, 0, 387, 1911, 1, 0, 0, 0, 389, 1989, 1, 0, 0, 0, 391, 1991, 1, 0, 0, 0, 393, 1998, 1, 0, 0, 0, 395, 2002, 1, 0, 0, 0, 397, 2009, 1, 0, 0, 0, 399, 2022, 1, 0, 0, 0, 401, 2035, 1, 0, 0, 0, 403, 2037, 1, 0, 0, 0, 405, 2039, 1, 0, 0, 0, 407, 2041, 1, 0, 0, 0, 409, 2043, 1, 0, 0, 0, 411, 2045, 1, 0, 0, 0, 413, 2047, 1, 0, 0, 0, 415, 2049, 1, 0, 0, 0, 417, 2051, 1, 0, 0, 0, 419, 2053, 1, 0, 0, 0, 421, 2055, 1, 0, 0, 0, 423, 2057, 1, 0, 0, 0, 425, 2059, 1, 0, 0, 0, 427, 2061, 1, 0, 0, 0, 429, 2063, 1, 0, 0, 0, 431, 2065, 1, 0, 0, 0, 433, 2067, 1, 0, 0, 0, 435, 2069, 1, 0, 0, 0, 437, 2071, 1, 0, 0, 0, 439, 2073, 1, 0, 0, 0, 441, 2075, 1, 0, 0, 0, 443, 2077, 1, 0, 0, 0, 445, 2079, 1, 0, 0, 0, 447, 2081, 1, 0, 0, 0, 449, 2083, 1, 0, 0, 0, 451, 2085, 1, 0, 0, 0, 453, 2087, 1, 0, 0, 0, 455, 2089, 1, 0, 0, 0, 457, 2091, 1, 0, 0, 0, 459, 2093, 1, 0, 0, 0, 461, 2095, 1, 0, 0, 0, 463, 2098, 1, 0, 0, 0, 465, 2100, 1, 0, 0, 0, 467, 2102, 1, 0, 0, 0, 469, 2104, 1, 0, 0, 0, 471, 2106, 1, 0, 0, 0, 473, 2108, 1, 0, 0, 0, 475, 2111, 1, 0, 0, 0, 477, 2113, 1, 0, 0, 0, 479, 2115, 1, 0, 0, 0, 481, 2117, 1, 0, 0, 0, 483, 2120, 1, 0, 0, 0, 485, 2122, 1, 0, 0, 0, 487, 2125, 1, 0, 0, 0, 489, 2127, 1, 0, 0, 0, 491, 2129, 1, 0, 0, 0, 493, 2132, 1, 0, 0, 0, 495, 2136, 1, 0, 0, 0, 497, 2138, 1, 0, 0, 0, 499, 2140, 1, 0, 0, 0, 501, 2142, 1, 0, 0, 0, 503, 2145, 1, 0, 0, 0, 505, 2151, 1, 0, 0, 0, 507, 2153, 1, 0, 0, 0, 509, 2157, 1, 0, 0, 0, 511, 2160, 1, 0, 0, 0, 513, 2163, 1, 0, 0, 0, 515, 2165, 1, 0, 0, 0, 517, 2167, 1, 0, 0, 0, 519, 2169, 1, 0, 0, 0, 521, 2171, 1, 0, 0, 0, 523, 2173, 1, 0, 0, 0, 525, 2175, 1, 0, 0, 0, 527, 2178, 1, 0, 0, 0, 529, 2180, 1, 0, 0, 0, 531, 2182, 1, 0, 0, 0, 533, 2184, 1, 0, 0, 0, 535, 2186, 1, 0, 0, 0, 537, 2188, 1, 0, 0, 0, 539, 2190, 1, 0, 0, 0, 541, 2204, 1, 0, 0, 0, 543, 2218, 1, 0, 0, 0, 545, 546, 3, 401, 200, 0, 546, 547, 3, 407, 203, 0, 547, 548, 3, 407, 203, 0, 548, 2, 1, 0, 0, 0, 549, 550, 3, 401, 200, 0, 550, 551, 3, 411, 205, 0, 551, 552, 3, 439, 219, 0, 552, 553, 3, 409, 204, 0, 553, 554, 3, 435, 217, 0, 554, 4, 1, 0, 0, 0, 555, 556, 3, 401, 200, 0, 556, 557, 3, 423, 211, 0, 557, 558, 3, 417, 208, 0, 558, 559, 3, 401, 200, 0, 559, 560, 3, 437, 218, 0, 560, 6, 1, 0, 0, 0, 561, 562, 3, 401, 200, 0, 562, 563, 3, 423, 211, 0, 563, 564, 3, 423, 211, 0, 564, 8, 1, 0, 0, 0, 565, 566, 3, 401, 200, 0, 566, 567, 3, 423, 211, 0, 567, 568, 3, 439, 219, 0, 568, 569, 3, 409, 204, 0, 569, 570, 3, 435, 217, 0, 570, 10, 1, 0, 0, 0, 571, 572, 3, 401, 200, 0, 572, 573, 3, 427, 213, 0, 573, 574, 3, 407, 203, 0, 574, 12, 1, 0, 0, 0, 575, 576, 3, 401, 200, 0, 576, 577, 3, 427, 213, 0, 577, 578, 3, 439, 219, 0, 578, 579, 3, 417, 208, 0, 579, 14, 1, 0, 0, 0, 580, 581, 3, 401, 200, 0, 581, 582, 3, 427, 213, 0, 582, 583, 3, 449, 224, 0, 583, 16, 1, 0, 0, 0, 584, 585, 3, 401, 200, 0, 585, 586, 3, 435, 217, 0, 586, 587, 3, 435, 217, 0, 587, 588, 3, 401, 200, 0, 588, 589, 3, 449, 224, 0, 589, 18, 1, 0, 0, 0, 590, 591, 3, 401, 200, 0, 591, 592, 3, 437, 218, 0, 592, 20, 1, 0, 0, 0, 593, 594, 3, 401, 200, 0, 594, 595, 3, 437, 218, 0, 595, 596, 3, 405, 202, 0, 596, 608, 1, 0, 0, 0, 597, 598, 3, 401, 200, 0, 598, 599, 3, 437, 218, 0, 599, 600, 3, 405, 202, 0, 600, 601, 3, 409, 204, 0, 601, 602, 3, 427, 213, 0, 602, 603, 3, 407, 203, 0, 603, 604, 3, 417, 208, 0, 604, 605, 3, 427, 213, 0, 605, 606, 3, 413, 206, 0, 606, 608, 1, 0, 0, 0, 607, 593, 1, 0, 0, 0, 607, 597, 1, 0, 0, 0, 608, 22, 1, 0, 0, 0, 609, 610, 3, 401, 200, 0, 610, 611, 3, 437, 218, 0, 611, 612, 3, 429, 214, 0, 612, 613, 3, 411, 205, 0, 613, 24, 1, 0, 0, 0, 614, 615, 3, 401, 200, 0, 615, 616, 3, 437, 218, 0, 616, 617, 3, 439, 219, 0, 617, 26, 1, 0, 0, 0, 618, 619, 3, 401, 200, 0, 619, 620, 3, 437, 218, 0, 620, 621, 3, 449, 224, 0, 621, 622, 3, 427, 213, 0, 622, 623, 3, 405, 202, 0, 623, 28, 1, 0, 0, 0, 624, 625, 3, 401, 200, 0, 625, 626, 3, 439, 219, 0, 626, 627, 3, 439, 219, 0, 627, 628, 3, 401, 200, 0, 628, 629, 3, 405, 202, 0, 629, 630, 3, 415, 207, 0, 630, 30, 1, 0, 0, 0, 631, 632, 3, 403, 201, 0, 632, 633, 3, 409, 204, 0, 633, 634, 3, 439, 219, 0, 634, 635, 3, 445, 222, 0, 635, 636, 3, 409, 204, 0, 636, 637, 3, 409, 204, 0, 637, 638, 3, 427, 213, 0, 638, 32, 1, 0, 0, 0, 639, 640, 3, 403, 201, 0, 640, 641, 3, 429, 214, 0, 641, 642, 3, 439, 219, 0, 642, 643, 3, 415, 207, 0, 643, 34, 1, 0, 0, 0, 644, 645, 3, 403, 201, 0, 645, 646, 3, 449, 224, 0, 646, 36, 1, 0, 0, 0, 647, 648, 3, 405, 202, 0, 648, 649, 3, 401, 200, 0, 649, 650, 3, 437, 218, 0, 650, 651, 3, 409, 204, 0, 651, 38, 1, 0, 0, 0, 652, 653, 3, 405, 202, 0, 653, 654, 3, 401, 200, 0, 654, 655, 3, 437, 218, 0, 655, 656, 3, 439, 219, 0, 656, 40, 1, 0, 0, 0, 657, 658, 3, 405, 202, 0, 658, 659, 3, 415, 207, 0, 659, 660, 3, 409, 204, 0, 660, 661, 3, 405, 202, 0, 661, 662, 3, 421, 210, 0, 662, 42, 1, 0, 0, 0, 663, 664, 3, 405, 202, 0, 664, 665, 3, 423, 211, 0, 665, 666, 3, 409, 204, 0, 666, 667, 3, 401, 200, 0, 667, 668, 3, 435, 217, 0, 668, 44, 1, 0, 0, 0, 669, 670, 3, 405, 202, 0, 670, 671, 3, 423, 211, 0, 671, 672, 3, 441, 220, 0, 672, 673, 3, 437, 218, 0, 673, 674, 3, 439, 219, 0, 674, 675, 3, 409, 204, 0, 675, 676, 3, 435, 217, 0, 676, 46, 1, 0, 0, 0, 677, 678, 3, 405, 202, 0, 678, 679, 3, 429, 214, 0, 679, 680, 3, 407, 203, 0, 680, 681, 3, 409, 204, 0, 681, 682, 3, 405, 202, 0, 682, 48, 1, 0, 0, 0, 683, 684, 3, 405, 202, 0, 684, 685, 3, 429, 214, 0, 685, 686, 3, 415, 207, 0, 686, 687, 3, 429, 214, 0, 687, 688, 3, 435, 217, 0, 688, 689, 3, 439, 219, 0, 689, 50, 1, 0, 0, 0, 690, 691, 3, 405, 202, 0, 691, 692, 3, 429, 214, 0, 692, 693, 3, 423, 211, 0, 693, 694, 3, 423, 211, 0, 694, 695, 3, 401, 200, 0, 695, 696, 3, 439, 219, 0, 696, 697, 3, 409, 204, 0, 697, 52, 1, 0, 0, 0, 698, 699, 3, 405, 202, 0, 699, 700, 3, 429, 214, 0, 700, 701, 3, 423, 211, 0, 701, 702, 3, 441, 220, 0, 702, 703, 3, 425, 212, 0, 703, 704, 3, 427, 213, 0, 704, 54, 1, 0, 0, 0, 705, 706, 3, 405, 202, 0, 706, 707, 3, 429, 214, 0, 707, 708, 3, 425, 212, 0, 708, 709, 3, 425, 212, 0, 709, 710, 3, 409, 204, 0, 710, 711, 3, 427, 213, 0, 711, 712, 3, 439, 219, 0, 712, 56, 1, 0, 0, 0, 713, 714, 3, 405, 202, 0, 714, 715, 3, 429, 214, 0, 715, 716, 3, 427, 213, 0, 716, 717, 3, 437, 218, 0, 717, 718, 3, 439, 219, 0, 718, 719, 3, 435, 217, 0, 719, 720, 3, 401, 200, 0, 720, 721, 3, 417, 208, 0, 721, 722, 3, 427, 213, 0, 722, 723, 3, 439, 219, 0, 723, 58, 1, 0, 0, 0, 724, 725, 3, 405, 202, 0, 725, 726, 3, 435, 217, 0, 726, 727, 3, 409, 204, 0, 727, 728, 3, 401, 200, 0, 728, 729, 3, 439, 219, 0, 729, 730, 3, 409, 204, 0, 730, 60, 1, 0, 0, 0, 731, 732, 3, 405, 202, 0, 732, 733, 3, 435, 217, 0, 733, 734, 3, 429, 214, 0, 734, 735, 3, 437, 218, 0, 735, 736, 3, 437, 218, 0, 736, 62, 1, 0, 0, 0, 737, 738, 3, 405, 202, 0, 738, 739, 3, 441, 220, 0, 739, 740, 3, 403, 201, 0, 740, 741, 3, 409, 204, 0, 741, 64, 1, 0, 0, 0, 742, 743, 3, 405, 202, 0, 743, 744, 3, 441, 220, 0, 744, 745, 3, 435, 217, 0, 745, 746, 3, 435, 217, 0, 746, 747, 3, 409, 204, 0, 747, 748, 3, 427, 213, 0, 748, 749, 3, 439, 219, 0, 749, 66, 1, 0, 0, 0, 750, 751, 3, 407, 203, 0, 751, 752, 3, 401, 200, 0, 752, 753, 3, 439, 219, 0, 753, 754, 3, 401, 200, 0, 754, 755, 3, 403, 201, 0, 755, 756, 3, 401, 200, 0, 756, 757, 3, 437, 218, 0, 757, 758, 3, 409, 204, 0, 758, 68, 1, 0, 0, 0, 759, 760, 3, 407, 203, 0, 760, 761, 3, 401, 200, 0, 761, 762, 3, 439, 219, 0, 762, 763, 3, 401, 200, 0, 763, 764, 3, 403, 201, 0, 764, 765, 3, 401, 200, 0, 765, 766, 3, 437, 218, 0, 766, 767, 3, 409, 204, 0, 767, 768, 3, 437, 218, 0, 768, 70, 1, 0, 0, 0, 769, 770, 3, 407, 203, 0, 770, 771, 3, 401, 200, 0, 771, 772, 3, 439, 219, 0, 772, 773, 3, 409, 204, 0, 773, 72, 1, 0, 0, 0, 774, 775, 3, 407, 203, 0, 775, 776, 3, 401, 200, 0, 776, 777, 3, 449, 224, 0, 777, 74, 1, 0, 0, 0, 778, 779, 3, 407, 203, 0, 779, 780, 3, 409, 204, 0, 780, 781, 3, 407, 203, 0, 781, 782, 3, 441, 220, 0, 782, 783, 3, 431, 215, 0, 783, 784, 3, 423, 211, 0, 784, 785, 3, 417, 208, 0, 785, 786, 3, 405, 202, 0, 786, 787, 3, 401, 200, 0, 787, 788, 3, 439, 219, 0, 788, 789, 3, 409, 204, 0, 789, 76, 1, 0, 0, 0, 790, 791, 3, 407, 203, 0, 791, 792, 3, 409, 204, 0, 792, 793, 3, 411, 205, 0, 793, 794, 3, 401, 200, 0, 794, 795, 3, 441, 220, 0, 795, 796, 3, 423, 211, 0, 796, 797, 3, 439, 219, 0, 797, 78, 1, 0, 0, 0, 798, 799, 3, 407, 203, 0, 799, 800, 3, 409, 204, 0, 800, 801, 3, 423, 211, 0, 801, 802, 3, 401, 200, 0, 802, 803, 3, 449, 224, 0, 803, 80, 1, 0, 0, 0, 804, 805, 3, 407, 203, 0, 805, 806, 3, 409, 204, 0, 806, 807, 3, 423, 211, 0, 807, 808, 3, 409, 204, 0, 808, 809, 3, 439, 219, 0, 809, 810, 3, 409, 204, 0, 810, 82, 1, 0, 0, 0, 811, 812, 3, 407, 203, 0, 812, 813, 3, 409, 204, 0, 813, 814, 3, 437, 218, 0, 814, 815, 3, 405, 202, 0, 815, 84, 1, 0, 0, 0, 816, 817, 3, 407, 203, 0, 817, 818, 3, 409, 204, 0, 818, 819, 3, 437, 218, 0, 819, 820, 3, 405, 202, 0, 820, 821, 3, 409, 204, 0, 821, 822, 3, 427, 213, 0, 822, 823, 3, 407, 203, 0, 823, 824, 3, 417, 208, 0, 824, 825, 3, 427, 213, 0, 825, 826, 3, 413, 206, 0, 826, 86, 1, 0, 0, 0, 827, 828, 3, 407, 203, 0, 828, 829, 3, 409, 204, 0, 829, 830, 3, 437, 218, 0, 830, 831, 3, 405, 202, 0, 831, 832, 3, 435, 217, 0, 832, 833, 3, 417, 208, 0, 833, 834, 3, 403, 201, 0, 834, 835, 3, 409, 204, 0, 835, 88, 1, 0, 0, 0, 836, 837, 3, 407, 203, 0, 837, 838, 3, 409, 204, 0, 838, 839, 3, 439, 219, 0, 839, 840, 3, 401, 200, 0, 840, 841, 3, 405, 202, 0, 841, 842, 3, 415, 207, 0, 842, 90, 1, 0, 0, 0, 843, 844, 3, 407, 203, 0, 844, 845, 3, 417, 208, 0, 845, 846, 3, 405, 202, 0, 846, 847, 3, 439, 219, 0, 847, 848, 3, 417, 208, 0, 848, 849, 3, 429, 214, 0, 849, 850, 3, 427, 213, 0, 850, 851, 3, 401, 200, 0, 851, 852, 3, 435, 217, 0, 852, 853, 3, 417, 208, 0, 853, 854, 3, 409, 204, 0, 854, 855, 3, 437, 218, 0, 855, 92, 1, 0, 0, 0, 856, 857, 3, 407, 203, 0, 857, 858, 3, 417, 208, 0, 858, 859, 3, 405, 202, 0, 859, 860, 3, 439, 219, 0, 860, 861, 3, 417, 208, 0, 861, 862, 3, 429, 214, 0, 862, 863, 3, 427, 213, 0, 863, 864, 3, 401, 200, 0, 864, 865, 3, 435, 217, 0, 865, 866, 3, 449, 224, 0, 866, 94, 1, 0, 0, 0, 867, 868, 3, 407, 203, 0, 868, 869, 3, 417, 208, 0, 869, 870, 3, 437, 218, 0, 870, 871, 3, 421, 210, 0, 871, 96, 1, 0, 0, 0, 872, 873, 3, 407, 203, 0, 873, 874, 3, 417, 208, 0, 874, 875, 3, 437, 218, 0, 875, 876, 3, 439, 219, 0, 876, 877, 3, 417, 208, 0, 877, 878, 3, 427, 213, 0, 878, 879, 3, 405, 202, 0, 879, 880, 3, 439, 219, 0, 880, 98, 1, 0, 0, 0, 881, 882, 3, 407, 203, 0, 882, 883, 3, 417, 208, 0, 883, 884, 3, 437, 218, 0, 884, 885, 3, 439, 219, 0, 885, 886, 3, 435, 217, 0, 886, 887, 3, 417, 208, 0, 887, 888, 3, 403, 201, 0, 888, 889, 3, 441, 220, 0, 889, 890, 3, 439, 219, 0, 890, 891, 3, 409, 204, 0, 891, 892, 3, 407, 203, 0, 892, 100, 1, 0, 0, 0, 893, 894, 3, 407, 203, 0, 894, 895, 3, 435, 217, 0, 895, 896, 3, 429, 214, 0, 896, 897, 3, 431, 215, 0, 897, 102, 1, 0, 0, 0, 898, 899, 3, 409, 204, 0, 899, 900, 3, 423, 211, 0, 900, 901, 3, 437, 218, 0, 901, 902, 3, 409, 204, 0, 902, 104, 1, 0, 0, 0, 903, 904, 3, 409, 204, 0, 904, 905, 3, 427, 213, 0, 905, 906, 3, 407, 203, 0, 906, 106, 1, 0, 0, 0, 907, 908, 3, 409, 204, 0, 908, 909, 3, 427, 213, 0, 909, 910, 3, 413, 206, 0, 910, 911, 3, 417, 208, 0, 911, 912, 3, 427, 213, 0, 912, 913, 3, 409, 204, 0, 913, 108, 1, 0, 0, 0, 914, 915, 3, 409, 204, 0, 915, 916, 3, 443, 221, 0, 916, 917, 3, 409, 204, 0, 917, 918, 3, 427, 213, 0, 918, 919, 3, 439, 219, 0, 919, 920, 3, 437, 218, 0, 920, 110, 1, 0, 0, 0, 921, 922, 3, 409, 204, 0, 922, 923, 3, 447, 223, 0, 923, 924, 3, 417, 208, 0, 924, 925, 3, 437, 218, 0, 925, 926, 3, 439, 219, 0, 926, 927, 3, 437, 218, 0, 927, 112, 1, 0, 0, 0, 928, 929, 3, 409, 204, 0, 929, 930, 3, 447, 223, 0, 930, 931, 3, 431, 215, 0, 931, 932, 3, 423, 211, 0, 932, 933, 3, 401, 200, 0, 933, 934, 3, 417, 208, 0, 934, 935, 3, 427, 213, 0, 935, 114, 1, 0, 0, 0, 936, 937, 3, 409, 204, 0, 937, 938, 3, 447, 223, 0, 938, 939, 3, 431, 215, 0, 939, 940, 3, 435, 217, 0, 940, 941, 3, 409, 204, 0, 941, 942, 3, 437, 218, 0, 942, 943, 3, 437, 218, 0, 943, 944, 3, 417, 208, 0, 944, 945, 3, 429, 214, 0, 945, 946, 3, 427, 213, 0, 946, 116, 1, 0, 0, 0, 947, 948, 3, 409, 204, 0, 948, 949, 3, 447, 223, 0, 949, 950, 3, 439, 219, 0, 950, 951, 3, 435, 217, 0, 951, 952, 3, 401, 200, 0, 952, 953, 3, 405, 202, 0, 953, 954, 3, 439, 219, 0, 954, 118, 1, 0, 0, 0, 955, 956, 3, 411, 205, 0, 956, 957, 3, 409, 204, 0, 957, 958, 3, 439, 219, 0, 958, 959, 3, 405, 202, 0, 959, 960, 3, 415, 207, 0, 960, 961, 3, 409, 204, 0, 961, 962, 3, 437, 218, 0, 962, 120, 1, 0, 0, 0, 963, 964, 3, 411, 205, 0, 964, 965, 3, 417, 208, 0, 965, 966, 3, 427, 213, 0, 966, 967, 3, 401, 200, 0, 967, 968, 3, 423, 211, 0, 968, 122, 1, 0, 0, 0, 969, 970, 3, 411, 205, 0, 970, 971, 3, 417, 208, 0, 971, 972, 3, 435, 217, 0, 972, 973, 3, 437, 218, 0, 973, 974, 3, 439, 219, 0, 974, 124, 1, 0, 0, 0, 975, 976, 3, 411, 205, 0, 976, 977, 3, 423, 211, 0, 977, 978, 3, 441, 220, 0, 978, 979, 3, 437, 218, 0, 979, 980, 3, 415, 207, 0, 980, 126, 1, 0, 0, 0, 981, 982, 3, 411, 205, 0, 982, 983, 3, 429, 214, 0, 983, 984, 3, 423, 211, 0, 984, 985, 3, 423, 211, 0, 985, 986, 3, 429, 214, 0, 986, 987, 3, 445, 222, 0, 987, 988, 3, 417, 208, 0, 988, 989, 3, 427, 213, 0, 989, 990, 3, 413, 206, 0, 990, 128, 1, 0, 0, 0, 991, 992, 3, 411, 205, 0, 992, 993, 3, 429, 214, 0, 993, 994, 3, 435, 217, 0, 994, 130, 1, 0, 0, 0, 995, 996, 3, 411, 205, 0, 996, 997, 3, 429, 214, 0, 997, 998, 3, 435, 217, 0, 998, 999, 3, 425, 212, 0, 999, 1000, 3, 401, 200, 0, 1000, 1001, 3, 439, 219, 0, 1001, 132, 1, 0, 0, 0, 1002, 1003, 3, 411, 205, 0, 1003, 1004, 3, 435, 217, 0, 1004, 1005, 3, 409, 204, 0, 1005, 1006, 3, 409, 204, 0, 1006, 1007, 3, 451, 225, 0, 1007, 1008, 3, 409, 204, 0, 1008, 134, 1, 0, 0, 0, 1009, 1010, 3, 411, 205, 0, 1010, 1011, 3, 435, 217, 0, 1011, 1012, 3, 429, 214, 0, 1012, 1013, 3, 425, 212, 0, 1013, 136, 1, 0, 0, 0, 1014, 1015, 3, 411, 205, 0, 1015, 1016, 3, 441, 220, 0, 1016, 1017, 3, 423, 211, 0, 1017, 1018, 3, 423, 211, 0, 1018, 138, 1, 0, 0, 0, 1019, 1020, 3, 411, 205, 0, 1020, 1021, 3, 441, 220, 0, 1021, 1022, 3, 427, 213, 0, 1022, 1023, 3, 405, 202, 0, 1023, 1024, 3, 439, 219, 0, 1024, 1025, 3, 417, 208, 0, 1025, 1026, 3, 429, 214, 0, 1026, 1027, 3, 427, 213, 0, 1027, 140, 1, 0, 0, 0, 1028, 1029, 3, 413, 206, 0, 1029, 1030, 3, 423, 211, 0, 1030, 1031, 3, 429, 214, 0, 1031, 1032, 3, 403, 201, 0, 1032, 1033, 3, 401, 200, 0, 1033, 1034, 3, 423, 211, 0, 1034, 142, 1, 0, 0, 0, 1035, 1036, 3, 413, 206, 0, 1036, 1037, 3, 435, 217, 0, 1037, 1038, 3, 401, 200, 0, 1038, 1039, 3, 427, 213, 0, 1039, 1040, 3, 441, 220, 0, 1040, 1041, 3, 423, 211, 0, 1041, 1042, 3, 401, 200, 0, 1042, 1043, 3, 435, 217, 0, 1043, 1044, 3, 417, 208, 0, 1044, 1045, 3, 439, 219, 0, 1045, 1046, 3, 449, 224, 0, 1046, 144, 1, 0, 0, 0, 1047, 1048, 3, 413, 206, 0, 1048, 1049, 3, 435, 217, 0, 1049, 1050, 3, 429, 214, 0, 1050, 1051, 3, 441, 220, 0, 1051, 1052, 3, 431, 215, 0, 1052, 146, 1, 0, 0, 0, 1053, 1054, 3, 415, 207, 0, 1054, 1055, 3, 401, 200, 0, 1055, 1056, 3, 443, 221, 0, 1056, 1057, 3, 417, 208, 0, 1057, 1058, 3, 427, 213, 0, 1058, 1059, 3, 413, 206, 0, 1059, 148, 1, 0, 0, 0, 1060, 1061, 3, 415, 207, 0, 1061, 1062, 3, 417, 208, 0, 1062, 1063, 3, 409, 204, 0, 1063, 1064, 3, 435, 217, 0, 1064, 1065, 3, 401, 200, 0, 1065, 1066, 3, 435, 217, 0, 1066, 1067, 3, 405, 202, 0, 1067, 1068, 3, 415, 207, 0, 1068, 1069, 3, 417, 208, 0, 1069, 1070, 3, 405, 202, 0, 1070, 1071, 3, 401, 200, 0, 1071, 1072, 3, 423, 211, 0, 1072, 150, 1, 0, 0, 0, 1073, 1074, 3, 415, 207, 0, 1074, 1075, 3, 429, 214, 0, 1075, 1076, 3, 441, 220, 0, 1076, 1077, 3, 435, 217, 0, 1077, 152, 1, 0, 0, 0, 1078, 1079, 3, 417, 208, 0, 1079, 1080, 3, 407, 203, 0, 1080, 154, 1, 0, 0, 0, 1081, 1082, 3, 417, 208, 0, 1082, 1083, 3, 411, 205, 0, 1083, 156, 1, 0, 0, 0, 1084, 1085, 3, 417, 208, 0, 1085, 1086, 3, 423, 211, 0, 1086, 1087, 3, 417, 208, 0, 1087, 1088, 3, 421, 210, 0, 1088, 1089, 3, 409, 204, 0, 1089, 158, 1, 0, 0, 0, 1090, 1091, 3, 417, 208, 0, 1091, 1092, 3, 427, 213, 0, 1092, 160, 1, 0, 0, 0, 1093, 1094, 3, 417, 208, 0, 1094, 1095, 3, 427, 213, 0, 1095, 1096, 3, 407, 203, 0, 1096, 1097, 3, 409, 204, 0, 1097, 1098, 3, 447, 223, 0, 1098, 162, 1, 0, 0, 0, 1099, 1100, 3, 417, 208, 0, 1100, 1101, 3, 427, 213, 0, 1101, 1102, 3, 411, 205, 0, 1102, 1113, 1, 0, 0, 0, 1103, 1104, 3, 417, 208, 0, 1104, 1105, 3, 427, 213, 0, 1105, 1106, 3, 411, 205, 0, 1106, 1107, 3, 417, 208, 0, 1107, 1108, 3, 427, 213, 0, 1108, 1109, 3, 417, 208, 0, 1109, 1110, 3, 439, 219, 0, 1110, 1111, 3, 449, 224, 0, 1111, 1113, 1, 0, 0, 0, 1112, 1099, 1, 0, 0, 0, 1112, 1103, 1, 0, 0, 0, 1113, 164, 1, 0, 0, 0, 1114, 1115, 3, 417, 208, 0, 1115, 1116, 3, 427, 213, 0, 1116, 1117, 3, 419, 209, 0, 1117, 1118, 3, 409, 204, 0, 1118, 1119, 3, 405, 202, 0, 1119, 1120, 3, 439, 219, 0, 1120, 1121, 3, 417, 208, 0, 1121, 1122, 3, 443, 221, 0, 1122, 1123, 3, 409, 204, 0, 1123, 166, 1, 0, 0, 0, 1124, 1125, 3, 417, 208, 0, 1125, 1126, 3, 427, 213, 0, 1126, 1127, 3, 427, 213, 0, 1127, 1128, 3, 409, 204, 0, 1128, 1129, 3, 435, 217, 0, 1129, 168, 1, 0, 0, 0, 1130, 1131, 3, 417, 208, 0, 1131, 1132, 3, 427, 213, 0, 1132, 1133, 3, 437, 218, 0, 1133, 1134, 3, 409, 204, 0, 1134, 1135, 3, 435, 217, 0, 1135, 1136, 3, 439, 219, 0, 1136, 170, 1, 0, 0, 0, 1137, 1138, 3, 417, 208, 0, 1138, 1139, 3, 427, 213, 0, 1139, 1140, 3, 439, 219, 0, 1140, 1141, 3, 409, 204, 0, 1141, 1142, 3, 435, 217, 0, 1142, 1143, 3, 443, 221, 0, 1143, 1144, 3, 401, 200, 0, 1144, 1145, 3, 423, 211, 0, 1145, 172, 1, 0, 0, 0, 1146, 1147, 3, 417, 208, 0, 1147, 1148, 3, 427, 213, 0, 1148, 1149, 3, 439, 219, 0, 1149, 1150, 3, 429, 214, 0, 1150, 174, 1, 0, 0, 0, 1151, 1152, 3, 417, 208, 0, 1152, 1153, 3, 437, 218, 0, 1153, 176, 1, 0, 0, 0, 1154, 1155, 3, 417, 208, 0, 1155, 1156, 3, 437, 218, 0, 1156, 1157, 3, 537, 268, 0, 1157, 1158, 3, 429, 214, 0, 1158, 1159, 3, 403, 201, 0, 1159, 1160, 3, 419, 209, 0, 1160, 1161, 3, 409, 204, 0, 1161, 1162, 3, 405, 202, 0, 1162, 1163, 3, 439, 219, 0, 1163, 1164, 3, 537, 268, 0, 1164, 1165, 3, 417, 208, 0, 1165, 1166, 3, 407, 203, 0, 1166, 178, 1, 0, 0, 0, 1167, 1168, 3, 419, 209, 0, 1168, 1169, 3, 429, 214, 0, 1169, 1170, 3, 417, 208, 0, 1170, 1171, 3, 427, 213, 0, 1171, 180, 1, 0, 0, 0, 1172, 1173, 3, 421, 210, 0, 1173, 1174, 3, 409, 204, 0, 1174, 1175, 3, 449, 224, 0, 1175, 182, 1, 0, 0, 0, 1176, 1177, 3, 421, 210, 0, 1177, 1178, 3, 417, 208, 0, 1178, 1179, 3, 423, 211, 0, 1179, 1180, 3, 423, 211, 0, 1180, 184, 1, 0, 0, 0, 1181, 1182, 3, 423, 211, 0, 1182, 1183, 3, 401, 200, 0, 1183, 1184, 3, 437, 218, 0, 1184, 1185, 3, 439, 219, 0, 1185, 186, 1, 0, 0, 0, 1186, 1187, 3, 423, 211, 0, 1187, 1188, 3, 401, 200, 0, 1188, 1189, 3, 449, 224, 0, 1189, 1190, 3, 429, 214, 0, 1190, 1191, 3, 441, 220, 0, 1191, 1192, 3, 439, 219, 0, 1192, 188, 1, 0, 0, 0, 1193, 1194, 3, 423, 211, 0, 1194, 1195, 3, 409, 204, 0, 1195, 1196, 3, 401, 200, 0, 1196, 1197, 3, 407, 203, 0, 1197, 1198, 3, 417, 208, 0, 1198, 1199, 3, 427, 213, 0, 1199, 1200, 3, 413, 206, 0, 1200, 190, 1, 0, 0, 0, 1201, 1202, 3, 423, 211, 0, 1202, 1203, 3, 409, 204, 0, 1203, 1204, 3, 411, 205, 0, 1204, 1205, 3, 439, 219, 0, 1205, 192, 1, 0, 0, 0, 1206, 1207, 3, 423, 211, 0, 1207, 1208, 3, 417, 208, 0, 1208, 1209, 3, 411, 205, 0, 1209, 1210, 3, 409, 204, 0, 1210, 1211, 3, 439, 219, 0, 1211, 1212, 3, 417, 208, 0, 1212, 1213, 3, 425, 212, 0, 1213, 1214, 3, 409, 204, 0, 1214, 194, 1, 0, 0, 0, 1215, 1216, 3, 423, 211, 0, 1216, 1217, 3, 417, 208, 0, 1217, 1218, 3, 421, 210, 0, 1218, 1219, 3, 409, 204, 0, 1219, 196, 1, 0, 0, 0, 1220, 1221, 3, 423, 211, 0, 1221, 1222, 3, 417, 208, 0, 1222, 1223, 3, 425, 212, 0, 1223, 1224, 3, 417, 208, 0, 1224, 1225, 3, 439, 219, 0, 1225, 198, 1, 0, 0, 0, 1226, 1227, 3, 423, 211, 0, 1227, 1228, 3, 417, 208, 0, 1228, 1229, 3, 443, 221, 0, 1229, 1230, 3, 409, 204, 0, 1230, 200, 1, 0, 0, 0, 1231, 1232, 3, 423, 211, 0, 1232, 1233, 3, 429, 214, 0, 1233, 1234, 3, 405, 202, 0, 1234, 1235, 3, 401, 200, 0, 1235, 1236, 3, 423, 211, 0, 1236, 202, 1, 0, 0, 0, 1237, 1238, 3, 423, 211, 0, 1238, 1239, 3, 429, 214, 0, 1239, 1240, 3, 413, 206, 0, 1240, 1241, 3, 437, 218, 0, 1241, 204, 1, 0, 0, 0, 1242, 1243, 3, 425, 212, 0, 1243, 1244, 3, 401, 200, 0, 1244, 1245, 3, 439, 219, 0, 1245, 1246, 3, 409, 204, 0, 1246, 1247, 3, 435, 217, 0, 1247, 1248, 3, 417, 208, 0, 1248, 1249, 3, 401, 200, 0, 1249, 1250, 3, 423, 211, 0, 1250, 1251, 3, 417, 208, 0, 1251, 1252, 3, 451, 225, 0, 1252, 1253, 3, 409, 204, 0, 1253, 206, 1, 0, 0, 0, 1254, 1255, 3, 425, 212, 0, 1255, 1256, 3, 401, 200, 0, 1256, 1257, 3, 439, 219, 0, 1257, 1258, 3, 409, 204, 0, 1258, 1259, 3, 435, 217, 0, 1259, 1260, 3, 417, 208, 0, 1260, 1261, 3, 401, 200, 0, 1261, 1262, 3, 423, 211, 0, 1262, 1263, 3, 417, 208, 0, 1263, 1264, 3, 451, 225, 0, 1264, 1265, 3, 409, 204, 0, 1265, 1266, 3, 407, 203, 0, 1266, 208, 1, 0, 0, 0, 1267, 1268, 3, 425, 212, 0, 1268, 1269, 3, 401, 200, 0, 1269, 1270, 3, 447, 223, 0, 1270, 210, 1, 0, 0, 0, 1271, 1272, 3, 425, 212, 0, 1272, 1273, 3, 409, 204, 0, 1273, 1274, 3, 435, 217, 0, 1274, 1275, 3, 413, 206, 0, 1275, 1276, 3, 409, 204, 0, 1276, 1277, 3, 437, 218, 0, 1277, 212, 1, 0, 0, 0, 1278, 1279, 3, 425, 212, 0, 1279, 1280, 3, 417, 208, 0, 1280, 1281, 3, 427, 213, 0, 1281, 214, 1, 0, 0, 0, 1282, 1283, 3, 425, 212, 0, 1283, 1284, 3, 417, 208, 0, 1284, 1285, 3, 427, 213, 0, 1285, 1286, 3, 441, 220, 0, 1286, 1287, 3, 439, 219, 0, 1287, 1288, 3, 409, 204, 0, 1288, 216, 1, 0, 0, 0, 1289, 1290, 3, 425, 212, 0, 1290, 1291, 3, 429, 214, 0, 1291, 1292, 3, 407, 203, 0, 1292, 1293, 3, 417, 208, 0, 1293, 1294, 3, 411, 205, 0, 1294, 1295, 3, 449, 224, 0, 1295, 218, 1, 0, 0, 0, 1296, 1297, 3, 425, 212, 0, 1297, 1298, 3, 429, 214, 0, 1298, 1299, 3, 427, 213, 0, 1299, 1300, 3, 439, 219, 0, 1300, 1301, 3, 415, 207, 0, 1301, 220, 1, 0, 0, 0, 1302, 1303, 3, 425, 212, 0, 1303, 1304, 3, 429, 214, 0, 1304, 1305, 3, 443, 221, 0, 1305, 1306, 3, 409, 204, 0, 1306, 222, 1, 0, 0, 0, 1307, 1308, 3, 425, 212, 0, 1308, 1309, 3, 441, 220, 0, 1309, 1310, 3, 439, 219, 0, 1310, 1311, 3, 401, 200, 0, 1311, 1312, 3, 439, 219, 0, 1312, 1313, 3, 417, 208, 0, 1313, 1314, 3, 429, 214, 0, 1314, 1315, 3, 427, 213, 0, 1315, 224, 1, 0, 0, 0, 1316, 1317, 3, 427, 213, 0, 1317, 1318, 3, 401, 200, 0, 1318, 1319, 3, 427, 213, 0, 1319, 226, 1, 0, 0, 0, 1320, 1321, 3, 427, 213, 0, 1321, 1322, 3, 429, 214, 0, 1322, 228, 1, 0, 0, 0, 1323, 1324, 3, 427, 213, 0, 1324, 1325, 3, 429, 214, 0, 1325, 1326, 3, 439, 219, 0, 1326, 230, 1, 0, 0, 0, 1327, 1328, 3, 427, 213, 0, 1328, 1329, 3, 441, 220, 0, 1329, 1330, 3, 423, 211, 0, 1330, 1331, 3, 423, 211, 0, 1331, 232, 1, 0, 0, 0, 1332, 1333, 3, 427, 213, 0, 1333, 1334, 3, 441, 220, 0, 1334, 1335, 3, 423, 211, 0, 1335, 1336, 3, 423, 211, 0, 1336, 1337, 3, 437, 218, 0, 1337, 234, 1, 0, 0, 0, 1338, 1339, 3, 429, 214, 0, 1339, 1340, 3, 411, 205, 0, 1340, 1341, 3, 411, 205, 0, 1341, 1342, 3, 437, 218, 0, 1342, 1343, 3, 409, 204, 0, 1343, 1344, 3, 439, 219, 0, 1344, 236, 1, 0, 0, 0, 1345, 1346, 3, 429, 214, 0, 1346, 1347, 3, 427, 213, 0, 1347, 238, 1, 0, 0, 0, 1348, 1349, 3, 429, 214, 0, 1349, 1350, 3, 431, 215, 0, 1350, 1351, 3, 439, 219, 0, 1351, 1352, 3, 417, 208, 0, 1352, 1353, 3, 425, 212, 0, 1353, 1354, 3, 417, 208, 0, 1354, 1355, 3, 451, 225, 0, 1355, 1356, 3, 409, 204, 0, 1356, 240, 1, 0, 0, 0, 1357, 1358, 3, 429, 214, 0, 1358, 1359, 3, 435, 217, 0, 1359, 242, 1, 0, 0, 0, 1360, 1361, 3, 429, 214, 0, 1361, 1362, 3, 435, 217, 0, 1362, 1363, 3, 407, 203, 0, 1363, 1364, 3, 409, 204, 0, 1364, 1365, 3, 435, 217, 0, 1365, 244, 1, 0, 0, 0, 1366, 1367, 3, 429, 214, 0, 1367, 1368, 3, 441, 220, 0, 1368, 1369, 3, 439, 219, 0, 1369, 1370, 3, 409, 204, 0, 1370, 1371, 3, 435, 217, 0, 1371, 246, 1, 0, 0, 0, 1372, 1373, 3, 429, 214, 0, 1373, 1374, 3, 441, 220, 0, 1374, 1375, 3, 439, 219, 0, 1375, 1376, 3, 411, 205, 0, 1376, 1377, 3, 417, 208, 0, 1377, 1378, 3, 423, 211, 0, 1378, 1379, 3, 409, 204, 0, 1379, 248, 1, 0, 0, 0, 1380, 1381, 3, 429, 214, 0, 1381, 1382, 3, 443, 221, 0, 1382, 1383, 3, 409, 204, 0, 1383, 1384, 3, 435, 217, 0, 1384, 250, 1, 0, 0, 0, 1385, 1386, 3, 431, 215, 0, 1386, 1387, 3, 401, 200, 0, 1387, 1388, 3, 435, 217, 0, 1388, 1389, 3, 439, 219, 0, 1389, 1390, 3, 417, 208, 0, 1390, 1391, 3, 439, 219, 0, 1391, 1392, 3, 417, 208, 0, 1392, 1393, 3, 429, 214, 0, 1393, 1394, 3, 427, 213, 0, 1394, 252, 1, 0, 0, 0, 1395, 1396, 3, 431, 215, 0, 1396, 1397, 3, 429, 214, 0, 1397, 1398, 3, 431, 215, 0, 1398, 1399, 3, 441, 220, 0, 1399, 1400, 3, 423, 211, 0, 1400, 1401, 3, 401, 200, 0, 1401, 1402, 3, 439, 219, 0, 1402, 1403, 3, 409, 204, 0, 1403, 254, 1, 0, 0, 0, 1404, 1405, 3, 431, 215, 0, 1405, 1406, 3, 435, 217, 0, 1406, 1407, 3, 409, 204, 0, 1407, 1408, 3, 405, 202, 0, 1408, 1409, 3, 409, 204, 0, 1409, 1410, 3, 407, 203, 0, 1410, 1411, 3, 417, 208, 0, 1411, 1412, 3, 427, 213, 0, 1412, 1413, 3, 413, 206, 0, 1413, 256, 1, 0, 0, 0, 1414, 1415, 3, 431, 215, 0, 1415, 1416, 3, 435, 217, 0, 1416, 1417, 3, 409, 204, 0, 1417, 1418, 3, 445, 222, 0, 1418, 1419, 3, 415, 207, 0, 1419, 1420, 3, 409, 204, 0, 1420, 1421, 3, 435, 217, 0, 1421, 1422, 3, 409, 204, 0, 1422, 258, 1, 0, 0, 0, 1423, 1424, 3, 431, 215, 0, 1424, 1425, 3, 435, 217, 0, 1425, 1426, 3, 417, 208, 0, 1426, 1427, 3, 425, 212, 0, 1427, 1428, 3, 401, 200, 0, 1428, 1429, 3, 435, 217, 0, 1429, 1430, 3, 449, 224, 0, 1430, 260, 1, 0, 0, 0, 1431, 1432, 3, 431, 215, 0, 1432, 1433, 3, 435, 217, 0, 1433, 1434, 3, 429, 214, 0, 1434, 1435, 3, 419, 209, 0, 1435, 1436, 3, 409, 204, 0, 1436, 1437, 3, 405, 202, 0, 1437, 1438, 3, 439, 219, 0, 1438, 1439, 3, 417, 208, 0, 1439, 1440, 3, 429, 214, 0, 1440, 1441, 3, 427, 213, 0, 1441, 262, 1, 0, 0, 0, 1442, 1443, 3, 433, 216, 0, 1443, 1444, 3, 441, 220, 0, 1444, 1445, 3, 401, 200, 0, 1445, 1446, 3, 435, 217, 0, 1446, 1447, 3, 439, 219, 0, 1447, 1448, 3, 409, 204, 0, 1448, 1449, 3, 435, 217, 0, 1449, 264, 1, 0, 0, 0, 1450, 1451, 3, 435, 217, 0, 1451, 1452, 3, 401, 200, 0, 1452, 1453, 3, 427, 213, 0, 1453, 1454, 3, 413, 206, 0, 1454, 1455, 3, 409, 204, 0, 1455, 266, 1, 0, 0, 0, 1456, 1457, 3, 435, 217, 0, 1457, 1458, 3, 409, 204, 0, 1458, 1459, 3, 423, 211, 0, 1459, 1460, 3, 429, 214, 0, 1460, 1461, 3, 401, 200, 0, 1461, 1462, 3, 407, 203, 0, 1462, 268, 1, 0, 0, 0, 1463, 1464, 3, 435, 217, 0, 1464, 1465, 3, 409, 204, 0, 1465, 1466, 3, 425, 212, 0, 1466, 1467, 3, 429, 214, 0, 1467, 1468, 3, 443, 221, 0, 1468, 1469, 3, 409, 204, 0, 1469, 270, 1, 0, 0, 0, 1470, 1471, 3, 435, 217, 0, 1471, 1472, 3, 409, 204, 0, 1472, 1473, 3, 427, 213, 0, 1473, 1474, 3, 401, 200, 0, 1474, 1475, 3, 425, 212, 0, 1475, 1476, 3, 409, 204, 0, 1476, 272, 1, 0, 0, 0, 1477, 1478, 3, 435, 217, 0, 1478, 1479, 3, 409, 204, 0, 1479, 1480, 3, 431, 215, 0, 1480, 1481, 3, 423, 211, 0, 1481, 1482, 3, 401, 200, 0, 1482, 1483, 3, 405, 202, 0, 1483, 1484, 3, 409, 204, 0, 1484, 274, 1, 0, 0, 0, 1485, 1486, 3, 435, 217, 0, 1486, 1487, 3, 409, 204, 0, 1487, 1488, 3, 431, 215, 0, 1488, 1489, 3, 423, 211, 0, 1489, 1490, 3, 417, 208, 0, 1490, 1491, 3, 405, 202, 0, 1491, 1492, 3, 401, 200, 0, 1492, 276, 1, 0, 0, 0, 1493, 1494, 3, 435, 217, 0, 1494, 1495, 3, 409, 204, 0, 1495, 1496, 3, 431, 215, 0, 1496, 1497, 3, 423, 211, 0, 1497, 1498, 3, 417, 208, 0, 1498, 1499, 3, 405, 202, 0, 1499, 1500, 3, 401, 200, 0, 1500, 1501, 3, 439, 219, 0, 1501, 1502, 3, 409, 204, 0, 1502, 1503, 3, 407, 203, 0, 1503, 278, 1, 0, 0, 0, 1504, 1505, 3, 435, 217, 0, 1505, 1506, 3, 417, 208, 0, 1506, 1507, 3, 413, 206, 0, 1507, 1508, 3, 415, 207, 0, 1508, 1509, 3, 439, 219, 0, 1509, 280, 1, 0, 0, 0, 1510, 1511, 3, 435, 217, 0, 1511, 1512, 3, 429, 214, 0, 1512, 1513, 3, 423, 211, 0, 1513, 1514, 3, 423, 211, 0, 1514, 1515, 3, 441, 220, 0, 1515, 1516, 3, 431, 215, 0, 1516, 282, 1, 0, 0, 0, 1517, 1518, 3, 435, 217, 0, 1518, 1519, 3, 429, 214, 0, 1519, 1520, 3, 445, 222, 0, 1520, 284, 1, 0, 0, 0, 1521, 1522, 3, 435, 217, 0, 1522, 1523, 3, 429, 214, 0, 1523, 1524, 3, 445, 222, 0, 1524, 1525, 3, 437, 218, 0, 1525, 286, 1, 0, 0, 0, 1526, 1527, 3, 437, 218, 0, 1527, 1528, 3, 401, 200, 0, 1528, 1529, 3, 425, 212, 0, 1529, 1530, 3, 431, 215, 0, 1530, 1531, 3, 423, 211, 0, 1531, 1532, 3, 409, 204, 0, 1532, 288, 1, 0, 0, 0, 1533, 1534, 3, 437, 218, 0, 1534, 1535, 3, 409, 204, 0, 1535, 1536, 3, 405, 202, 0, 1536, 1537, 3, 429, 214, 0, 1537, 1538, 3, 427, 213, 0, 1538, 1539, 3, 407, 203, 0, 1539, 290, 1, 0, 0, 0, 1540, 1541, 3, 437, 218, 0, 1541, 1542, 3, 409, 204, 0, 1542, 1543, 3, 423, 211, 0, 1543, 1544, 3, 409, 204, 0, 1544, 1545, 3, 405, 202, 0, 1545, 1546, 3, 439, 219, 0, 1546, 292, 1, 0, 0, 0, 1547, 1548, 3, 437, 218, 0, 1548, 1549, 3, 409, 204, 0, 1549, 1550, 3, 425, 212, 0, 1550, 1551, 3, 417, 208, 0, 1551, 294, 1, 0, 0, 0, 1552, 1553, 3, 437, 218, 0, 1553, 1554, 3, 409, 204, 0, 1554, 1555, 3, 427, 213, 0, 1555, 1556, 3, 407, 203, 0, 1556, 1557, 3, 437, 218, 0, 1557, 296, 1, 0, 0, 0, 1558, 1559, 3, 437, 218, 0, 1559, 1560, 3, 409, 204, 0, 1560, 1561, 3, 439, 219, 0, 1561, 298, 1, 0, 0, 0, 1562, 1563, 3, 437, 218, 0, 1563, 1564, 3, 409, 204, 0, 1564, 1565, 3, 439, 219, 0, 1565, 1566, 3, 439, 219, 0, 1566, 1567, 3, 417, 208, 0, 1567, 1568, 3, 427, 213, 0, 1568, 1569, 3, 413, 206, 0, 1569, 1570, 3, 437, 218, 0, 1570, 300, 1, 0, 0, 0, 1571, 1572, 3, 437, 218, 0, 1572, 1573, 3, 415, 207, 0, 1573, 1574, 3, 429, 214, 0, 1574, 1575, 3, 445, 222, 0, 1575, 302, 1, 0, 0, 0, 1576, 1577, 3, 437, 218, 0, 1577, 1578, 3, 429, 214, 0, 1578, 1579, 3, 441, 220, 0, 1579, 1580, 3, 435, 217, 0, 1580, 1581, 3, 405, 202, 0, 1581, 1582, 3, 409, 204, 0, 1582, 304, 1, 0, 0, 0, 1583, 1584, 3, 437, 218, 0, 1584, 1585, 3, 439, 219, 0, 1585, 1586, 3, 401, 200, 0, 1586, 1587, 3, 435, 217, 0, 1587, 1588, 3, 439, 219, 0, 1588, 306, 1, 0, 0, 0, 1589, 1590, 3, 437, 218, 0, 1590, 1591, 3, 439, 219, 0, 1591, 1592, 3, 429, 214, 0, 1592, 1593, 3, 431, 215, 0, 1593, 308, 1, 0, 0, 0, 1594, 1595, 3, 437, 218, 0, 1595, 1596, 3, 441, 220, 0, 1596, 1597, 3, 403, 201, 0, 1597, 1598, 3, 437, 218, 0, 1598, 1599, 3, 439, 219, 0, 1599, 1600, 3, 435, 217, 0, 1600, 1601, 3, 417, 208, 0, 1601, 1602, 3, 427, 213, 0, 1602, 1603, 3, 413, 206, 0, 1603, 310, 1, 0, 0, 0, 1604, 1605, 3, 437, 218, 0, 1605, 1606, 3, 449, 224, 0, 1606, 1607, 3, 427, 213, 0, 1607, 1608, 3, 405, 202, 0, 1608, 312, 1, 0, 0, 0, 1609, 1610, 3, 437, 218, 0, 1610, 1611, 3, 449, 224, 0, 1611, 1612, 3, 427, 213, 0, 1612, 1613, 3, 439, 219, 0, 1613, 1614, 3, 401, 200, 0, 1614, 1615, 3, 447, 223, 0, 1615, 314, 1, 0, 0, 0, 1616, 1617, 3, 437, 218, 0, 1617, 1618, 3, 449, 224, 0, 1618, 1619, 3, 437, 218, 0, 1619, 1620, 3, 439, 219, 0, 1620, 1621, 3, 409, 204, 0, 1621, 1622, 3, 425, 212, 0, 1622, 316, 1, 0, 0, 0, 1623, 1624, 3, 439, 219, 0, 1624, 1625, 3, 401, 200, 0, 1625, 1626, 3, 403, 201, 0, 1626, 1627, 3, 423, 211, 0, 1627, 1628, 3, 409, 204, 0, 1628, 318, 1, 0, 0, 0, 1629, 1630, 3, 439, 219, 0, 1630, 1631, 3, 401, 200, 0, 1631, 1632, 3, 403, 201, 0, 1632, 1633, 3, 423, 211, 0, 1633, 1634, 3, 409, 204, 0, 1634, 1635, 3, 437, 218, 0, 1635, 320, 1, 0, 0, 0, 1636, 1637, 3, 439, 219, 0, 1637, 1638, 3, 409, 204, 0, 1638, 1639, 3, 425, 212, 0, 1639, 1640, 3, 431, 215, 0, 1640, 1641, 3, 429, 214, 0, 1641, 1642, 3, 435, 217, 0, 1642, 1643, 3, 401, 200, 0, 1643, 1644, 3, 435, 217, 0, 1644, 1645, 3, 449, 224, 0, 1645, 322, 1, 0, 0, 0, 1646, 1647, 3, 439, 219, 0, 1647, 1648, 3, 409, 204, 0, 1648, 1649, 3, 437, 218, 0, 1649, 1650, 3, 439, 219, 0, 1650, 324, 1, 0, 0, 0, 1651, 1652, 3, 439, 219, 0, 1652, 1653, 3, 415, 207, 0, 1653, 1654, 3, 409, 204, 0, 1654, 1655, 3, 427, 213, 0, 1655, 326, 1, 0, 0, 0, 1656, 1657, 3, 439, 219, 0, 1657, 1658, 3, 417, 208, 0, 1658, 1659, 3, 409, 204, 0, 1659, 1660, 3, 437, 218, 0, 1660, 328, 1, 0, 0, 0, 1661, 1662, 3, 439, 219, 0, 1662, 1663, 3, 417, 208, 0, 1663, 1664, 3, 425, 212, 0, 1664, 1665, 3, 409, 204, 0, 1665, 1666, 3, 429, 214, 0, 1666, 1667, 3, 441, 220, 0, 1667, 1668, 3, 439, 219, 0, 1668, 330, 1, 0, 0, 0, 1669, 1670, 3, 439, 219, 0, 1670, 1671, 3, 417, 208, 0, 1671, 1672, 3, 425, 212, 0, 1672, 1673, 3, 409, 204, 0, 1673, 1674, 3, 437, 218, 0, 1674, 1675, 3, 439, 219, 0, 1675, 1676, 3, 401, 200, 0, 1676, 1677, 3, 425, 212, 0, 1677, 1678, 3, 431, 215, 0, 1678, 332, 1, 0, 0, 0, 1679, 1680, 3, 439, 219, 0, 1680, 1681, 3, 429, 214, 0, 1681, 334, 1, 0, 0, 0, 1682, 1683, 3, 439, 219, 0, 1683, 1684, 3, 429, 214, 0, 1684, 1685, 3, 431, 215, 0, 1685, 336, 1, 0, 0, 0, 1686, 1687, 3, 439, 219, 0, 1687, 1688, 3, 429, 214, 0, 1688, 1689, 3, 439, 219, 0, 1689, 1690, 3, 401, 200, 0, 1690, 1691, 3, 423, 211, 0, 1691, 1692, 3, 437, 218, 0, 1692, 338, 1, 0, 0, 0, 1693, 1694, 3, 439, 219, 0, 1694, 1695, 3, 435, 217, 0, 1695, 1696, 3, 401, 200, 0, 1696, 1697, 3, 417, 208, 0, 1697, 1698, 3, 423, 211, 0, 1698, 1699, 3, 417, 208, 0, 1699, 1700, 3, 427, 213, 0, 1700, 1701, 3, 413, 206, 0, 1701, 340, 1, 0, 0, 0, 1702, 1703, 3, 439, 219, 0, 1703, 1704, 3, 435, 217, 0, 1704, 1705, 3, 417, 208, 0, 1705, 1706, 3, 425, 212, 0, 1706, 342, 1, 0, 0, 0, 1707, 1708, 3, 439, 219, 0, 1708, 1709, 3, 435, 217, 0, 1709, 1710, 3, 441, 220, 0, 1710, 1711, 3, 427, 213, 0, 1711, 1712, 3, 405, 202, 0, 1712, 1713, 3, 401, 200, 0, 1713, 1714, 3, 439, 219, 0, 1714, 1715, 3, 409, 204, 0, 1715, 344, 1, 0, 0, 0, 1716, 1717, 3, 439, 219, 0, 1717, 1718, 3, 439, 219, 0, 1718, 1719, 3, 423, 211, 0, 1719, 346, 1, 0, 0, 0, 1720, 1721, 3, 439, 219, 0, 1721, 1722, 3, 449, 224, 0, 1722, 1723, 3, 431, 215, 0, 1723, 1724, 3, 409, 204, 0, 1724, 348, 1, 0, 0, 0, 1725, 1726, 3, 441, 220, 0, 1726, 1727, 3, 427, 213, 0, 1727, 1728, 3, 403, 201, 0, 1728, 1729, 3, 429, 214, 0, 1729, 1730, 3, 441, 220, 0, 1730, 1731, 3, 427, 213, 0, 1731, 1732, 3, 407, 203, 0, 1732, 1733, 3, 409, 204, 0, 1733, 1734, 3, 407, 203, 0, 1734, 350, 1, 0, 0, 0, 1735, 1736, 3, 441, 220, 0, 1736, 1737, 3, 427, 213, 0, 1737, 1738, 3, 417, 208, 0, 1738, 1739, 3, 429, 214, 0, 1739, 1740, 3, 427, 213, 0, 1740, 352, 1, 0, 0, 0, 1741, 1742, 3, 441, 220, 0, 1742, 1743, 3, 431, 215, 0, 1743, 1744, 3, 407, 203, 0, 1744, 1745, 3, 401, 200, 0, 1745, 1746, 3, 439, 219, 0, 1746, 1747, 3, 409, 204, 0, 1747, 354, 1, 0, 0, 0, 1748, 1749, 3, 441, 220, 0, 1749, 1750, 3, 437, 218, 0, 1750, 1751, 3, 409, 204, 0, 1751, 356, 1, 0, 0, 0, 1752, 1753, 3, 441, 220, 0, 1753, 1754, 3, 437, 218, 0, 1754, 1755, 3, 417, 208, 0, 1755, 1756, 3, 427, 213, 0, 1756, 1757, 3, 413, 206, 0, 1757, 358, 1, 0, 0, 0, 1758, 1759, 3, 441, 220, 0, 1759, 1760, 3, 441, 220, 0, 1760, 1761, 3, 417, 208, 0, 1761, 1762, 3, 407, 203, 0, 1762, 360, 1, 0, 0, 0, 1763, 1764, 3, 443, 221, 0, 1764, 1765, 3, 401, 200, 0, 1765, 1766, 3, 423, 211, 0, 1766, 1767, 3, 441, 220, 0, 1767, 1768, 3, 409, 204, 0, 1768, 1769, 3, 437, 218, 0, 1769, 362, 1, 0, 0, 0, 1770, 1771, 3, 443, 221, 0, 1771, 1772, 3, 417, 208, 0, 1772, 1773, 3, 409, 204, 0, 1773, 1774, 3, 445, 222, 0, 1774, 364, 1, 0, 0, 0, 1775, 1776, 3, 443, 221, 0, 1776, 1777, 3, 429, 214, 0, 1777, 1778, 3, 423, 211, 0, 1778, 1779, 3, 441, 220, 0, 1779, 1780, 3, 425, 212, 0, 1780, 1781, 3, 409, 204, 0, 1781, 366, 1, 0, 0, 0, 1782, 1783, 3, 445, 222, 0, 1783, 1784, 3, 401, 200, 0, 1784, 1785, 3, 439, 219, 0, 1785, 1786, 3, 405, 202, 0, 1786, 1787, 3, 415, 207, 0, 1787, 368, 1, 0, 0, 0, 1788, 1789, 3, 445, 222, 0, 1789, 1790, 3, 409, 204, 0, 1790, 1791, 3, 409, 204, 0, 1791, 1792, 3, 421, 210, 0, 1792, 370, 1, 0, 0, 0, 1793, 1794, 3, 445, 222, 0, 1794, 1795, 3, 415, 207, 0, 1795, 1796, 3, 409, 204, 0, 1796, 1797, 3, 427, 213, 0, 1797, 372, 1, 0, 0, 0, 1798, 1799, 3, 445, 222, 0, 1799, 1800, 3, 415, 207, 0, 1800, 1801, 3, 409, 204, 0, 1801, 1802, 3, 435, 217, 0, 1802, 1803, 3, 409, 204, 0, 1803, 374, 1, 0, 0, 0, 1804, 1805, 3, 445, 222, 0, 1805, 1806, 3, 417, 208, 0, 1806, 1807, 3, 427, 213, 0, 1807, 1808, 3, 407, 203, 0, 1808, 1809, 3, 429, 214, 0, 1809, 1810, 3, 445, 222, 0, 1810, 376, 1, 0, 0, 0, 1811, 1812, 3, 445, 222, 0, 1812, 1813, 3, 417, 208, 0, 1813, 1814, 3, 439, 219, 0, 1814, 1815, 3, 415, 207, 0, 1815, 378, 1, 0, 0, 0, 1816, 1817, 3, 449, 224, 0, 1817, 1818, 3, 409, 204, 0, 1818, 1819, 3, 401, 200, 0, 1819, 1820, 3, 435, 217, 0, 1820, 1827, 1, 0, 0, 0, 1821, 1822, 3, 449, 224, 0, 1822, 1823, 3, 449, 224, 0, 1823, 1824, 3, 449, 224, 0, 1824, 1825, 3, 449, 224, 0, 1825, 1827, 1, 0, 0, 0, 1826, 1816, 1, 0, 0, 0, 1826, 1821, 1, 0, 0, 0, 1827, 380, 1, 0, 0, 0, 1828, 1829, 5, 102, 0, 0, 1829, 1830, 5, 97, 0, 0, 1830, 1831, 5, 108, 0, 0, 1831, 1832, 5, 115, 0, 0, 1832, 1833, 5, 101, 0, 0, 1833, 382, 1, 0, 0, 0, 1834, 1835, 5, 116, 0, 0, 1835, 1836, 5, 114, 0, 0, 1836, 1837, 5, 117, 0, 0, 1837, 1838, 5, 101, 0, 0, 1838, 384, 1, 0, 0, 0, 1839, 1840, 3, 467, 233, 0, 1840, 1841, 3, 403, 201, 0, 1841, 1870, 1, 0, 0, 0, 1842, 1843, 3, 467, 233, 0, 1843, 1844, 3, 411, 205, 0, 1844, 1870, 1, 0, 0, 0, 1845, 1846, 3, 467, 233, 0, 1846, 1847, 3, 435, 217, 0, 1847, 1870, 1, 0, 0, 0, 1848, 1849, 3, 467, 233, 0, 1849, 1850, 3, 427, 213, 0, 1850, 1870, 1, 0, 0, 0, 1851, 1852, 3, 467, 233, 0, 1852, 1853, 3, 439, 219, 0, 1853, 1870, 1, 0, 0, 0, 1854, 1855, 3, 467, 233, 0, 1855, 1856, 5, 48, 0, 0, 1856, 1870, 1, 0, 0, 0, 1857, 1858, 3, 467, 233, 0, 1858, 1859, 3, 401, 200, 0, 1859, 1870, 1, 0, 0, 0, 1860, 1861, 3, 467, 233, 0, 1861, 1862, 3, 443, 221, 0, 1862, 1870, 1, 0, 0, 0, 1863, 1864, 3, 467, 233, 0, 1864, 1865, 3, 467, 233, 0, 1865, 1870, 1, 0, 0, 0, 1866, 1867, 3, 467, 233, 0, 1867, 1868, 3, 521, 260, 0, 1868, 1870, 1, 0, 0, 0, 1869, 1839, 1, 0, 0, 0, 1869, 1842, 1, 0, 0, 0, 1869, 1845, 1, 0, 0, 0, 1869, 1848, 1, 0, 0, 0, 1869, 1851, 1, 0, 0, 0, 1869, 1854, 1, 0, 0, 0, 1869, 1857, 1, 0, 0, 0, 1869, 1860, 1, 0, 0, 0, 1869, 1863, 1, 0, 0, 0, 1869, 1866, 1, 0, 0, 0, 1870, 386, 1, 0, 0, 0, 1871, 1875, 3, 453, 226, 0, 1872, 1875, 3, 537, 268, 0, 1873, 1875, 3, 477, 238, 0, 1874, 1871, 1, 0, 0, 0, 1874, 1872, 1, 0, 0, 0, 1874, 1873, 1, 0, 0, 0, 1875, 1882, 1, 0, 0, 0, 1876, 1881, 3, 453, 226, 0, 1877, 1881, 3, 537, 268, 0, 1878, 1881, 3, 457, 228, 0, 1879, 1881, 3, 477, 238, 0, 1880, 1876, 1, 0, 0, 0, 1880, 1877, 1, 0, 0, 0, 1880, 1878, 1, 0, 0, 0, 1880, 1879, 1, 0, 0, 0, 1881, 1884, 1, 0, 0, 0, 1882, 1880, 1, 0, 0, 0, 1882, 1883, 1, 0, 0, 0, 1883, 1912, 1, 0, 0, 0, 1884, 1882, 1, 0, 0, 0, 1885, 1893, 3, 465, 232, 0, 1886, 1892, 8, 0, 0, 0, 1887, 1892, 3, 385, 192, 0, 1888, 1889, 3, 465, 232, 0, 1889, 1890, 3, 465, 232, 0, 1890, 1892, 1, 0, 0, 0, 1891, 1886, 1, 0, 0, 0, 1891, 1887, 1, 0, 0, 0, 1891, 1888, 1, 0, 0, 0, 1892, 1895, 1, 0, 0, 0, 1893, 1891, 1, 0, 0, 0, 1893, 1894, 1, 0, 0, 0, 1894, 1896, 1, 0, 0, 0, 1895, 1893, 1, 0, 0, 0, 1896, 1897, 3, 465, 232, 0, 1897, 1912, 1, 0, 0, 0, 1898, 1906, 3, 519, 259, 0, 1899, 1905, 8, 1, 0, 0, 1900, 1905, 3, 385, 192, 0, 1901, 1902, 3, 519, 259, 0, 1902, 1903, 3, 519, 259, 0, 1903, 1905, 1, 0, 0, 0, 1904, 1899, 1, 0, 0, 0, 1904, 1900, 1, 0, 0, 0, 1904, 1901, 1, 0, 0, 0, 1905, 1908, 1, 0, 0, 0, 1906, 1904, 1, 0, 0, 0, 1906, 1907, 1, 0, 0, 0, 1907, 1909, 1, 0, 0, 0, 1908, 1906, 1, 0, 0, 0, 1909, 1910, 3, 519, 259, 0, 1910, 1912, 1, 0, 0, 0, 1911, 1874, 1, 0, 0, 0, 1911, 1885, 1, 0, 0, 0, 1911, 1898, 1, 0, 0, 0, 1912, 388, 1, 0, 0, 0, 1913, 1914, 3, 395, 197, 0, 1914, 1918, 3, 479, 239, 0, 1915, 1917, 3, 459, 229, 0, 1916, 1915, 1, 0, 0, 0, 1917, 1920, 1, 0, 0, 0, 1918, 1916, 1, 0, 0, 0, 1918, 1919, 1, 0, 0, 0, 1919, 1923, 1, 0, 0, 0, 1920, 1918, 1, 0, 0, 0, 1921, 1924, 3, 431, 215, 0, 1922, 1924, 3, 409, 204, 0, 1923, 1921, 1, 0, 0, 0, 1923, 1922, 1, 0, 0, 0, 1924, 1927, 1, 0, 0, 0, 1925, 1928, 3, 515, 257, 0, 1926, 1928, 3, 475, 237, 0, 1927, 1925, 1, 0, 0, 0, 1927, 1926, 1, 0, 0, 0, 1927, 1928, 1, 0, 0, 0, 1928, 1930, 1, 0, 0, 0, 1929, 1931, 3, 457, 228, 0, 1930, 1929, 1, 0, 0, 0, 1931, 1932, 1, 0, 0, 0, 1932, 1930, 1, 0, 0, 0, 1932, 1933, 1, 0, 0, 0, 1933, 1990, 1, 0, 0, 0, 1934, 1937, 3, 395, 197, 0, 1935, 1938, 3, 431, 215, 0, 1936, 1938, 3, 409, 204, 0, 1937, 1935, 1, 0, 0, 0, 1937, 1936, 1, 0, 0, 0, 1938, 1941, 1, 0, 0, 0, 1939, 1942, 3, 515, 257, 0, 1940, 1942, 3, 475, 237, 0, 1941, 1939, 1, 0, 0, 0, 1941, 1940, 1, 0, 0, 0, 1941, 1942, 1, 0, 0, 0, 1942, 1944, 1, 0, 0, 0, 1943, 1945, 3, 457, 228, 0, 1944, 1943, 1, 0, 0, 0, 1945, 1946, 1, 0, 0, 0, 1946, 1944, 1, 0, 0, 0, 1946, 1947, 1, 0, 0, 0, 1947, 1990, 1, 0, 0, 0, 1948, 1949, 3, 393, 196, 0, 1949, 1953, 3, 479, 239, 0, 1950, 1952, 3, 457, 228, 0, 1951, 1950, 1, 0, 0, 0, 1952, 1955, 1, 0, 0, 0, 1953, 1951, 1, 0, 0, 0, 1953, 1954, 1, 0, 0, 0, 1954, 1956, 1, 0, 0, 0, 1955, 1953, 1, 0, 0, 0, 1956, 1959, 3, 409, 204, 0, 1957, 1960, 3, 515, 257, 0, 1958, 1960, 3, 475, 237, 0, 1959, 1957, 1, 0, 0, 0, 1959, 1958, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1962, 1, 0, 0, 0, 1961, 1963, 3, 457, 228, 0, 1962, 1961, 1, 0, 0, 0, 1963, 1964, 1, 0, 0, 0, 1964, 1962, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 1990, 1, 0, 0, 0, 1966, 1967, 3, 479, 239, 0, 1967, 1968, 3, 393, 196, 0, 1968, 1971, 3, 409, 204, 0, 1969, 1972, 3, 515, 257, 0, 1970, 1972, 3, 475, 237, 0, 1971, 1969, 1, 0, 0, 0, 1971, 1970, 1, 0, 0, 0, 1971, 1972, 1, 0, 0, 0, 1972, 1974, 1, 0, 0, 0, 1973, 1975, 3, 457, 228, 0, 1974, 1973, 1, 0, 0, 0, 1975, 1976, 1, 0, 0, 0, 1976, 1974, 1, 0, 0, 0, 1976, 1977, 1, 0, 0, 0, 1977, 1990, 1, 0, 0, 0, 1978, 1979, 3, 393, 196, 0, 1979, 1982, 3, 409, 204, 0, 1980, 1983, 3, 515, 257, 0, 1981, 1983, 3, 475, 237, 0, 1982, 1980, 1, 0, 0, 0, 1982, 1981, 1, 0, 0, 0, 1982, 1983, 1, 0, 0, 0, 1983, 1985, 1, 0, 0, 0, 1984, 1986, 3, 457, 228, 0, 1985, 1984, 1, 0, 0, 0, 1986, 1987, 1, 0, 0, 0, 1987, 1985, 1, 0, 0, 0, 1987, 1988, 1, 0, 0, 0, 1988, 1990, 1, 0, 0, 0, 1989, 1913, 1, 0, 0, 0, 1989, 1934, 1, 0, 0, 0, 1989, 1948, 1, 0, 0, 0, 1989, 1966, 1, 0, 0, 0, 1989, 1978, 1, 0, 0, 0, 1990, 390, 1, 0, 0, 0, 1991, 1993, 5, 48, 0, 0, 1992, 1994, 3, 455, 227, 0, 1993, 1992, 1, 0, 0, 0, 1994, 1995, 1, 0, 0, 0, 1995, 1993, 1, 0, 0, 0, 1995, 1996, 1, 0, 0, 0, 1996, 392, 1, 0, 0, 0, 1997, 1999, 3, 457, 228, 0, 1998, 1997, 1, 0, 0, 0, 1999, 2000, 1, 0, 0, 0, 2000, 1998, 1, 0, 0, 0, 2000, 2001, 1, 0, 0, 0, 2001, 394, 1, 0, 0, 0, 2002, 2003, 5, 48, 0, 0, 2003, 2005, 3, 447, 223, 0, 2004, 2006, 3, 459, 229, 0, 2005, 2004, 1, 0, 0, 0, 2006, 2007, 1, 0, 0, 0, 2007, 2005, 1, 0, 0, 0, 2007, 2008, 1, 0, 0, 0, 2008, 396, 1, 0, 0, 0, 2009, 2017, 3, 521, 260, 0, 2010, 2016, 8, 2, 0, 0, 2011, 2016, 3, 385, 192, 0, 2012, 2013, 3, 521, 260, 0, 2013, 2014, 3, 521, 260, 0, 2014, 2016, 1, 0, 0, 0, 2015, 2010, 1, 0, 0, 0, 2015, 2011, 1, 0, 0, 0, 2015, 2012, 1, 0, 0, 0, 2016, 2019, 1, 0, 0, 0, 2017, 2015, 1, 0, 0, 0, 2017, 2018, 1, 0, 0, 0, 2018, 2020, 1, 0, 0, 0, 2019, 2017, 1, 0, 0, 0, 2020, 2021, 3, 521, 260, 0, 2021, 398, 1, 0, 0, 0, 2022, 2030, 3, 495, 247, 0, 2023, 2029, 8, 3, 0, 0, 2024, 2029, 3, 385, 192, 0, 2025, 2026, 3, 495, 247, 0, 2026, 2027, 3, 495, 247, 0, 2027, 2029, 1, 0, 0, 0, 2028, 2023, 1, 0, 0, 0, 2028, 2024, 1, 0, 0, 0, 2028, 2025, 1, 0, 0, 0, 2029, 2032, 1, 0, 0, 0, 2030, 2028, 1, 0, 0, 0, 2030, 2031, 1, 0, 0, 0, 2031, 2033, 1, 0, 0, 0, 2032, 2030, 1, 0, 0, 0, 2033, 2034, 3, 527, 263, 0, 2034, 400, 1, 0, 0, 0, 2035, 2036, 7, 4, 0, 0, 2036, 402, 1, 0, 0, 0, 2037, 2038, 7, 5, 0, 0, 2038, 404, 1, 0, 0, 0, 2039, 2040, 7, 6, 0, 0, 2040, 406, 1, 0, 0, 0, 2041, 2042, 7, 7, 0, 0, 2042, 408, 1, 0, 0, 0, 2043, 2044, 7, 8, 0, 0, 2044, 410, 1, 0, 0, 0, 2045, 2046, 7, 9, 0, 0, 2046, 412, 1, 0, 0, 0, 2047, 2048, 7, 10, 0, 0, 2048, 414, 1, 0, 0, 0, 2049, 2050, 7, 11, 0, 0, 2050, 416, 1, 0, 0, 0, 2051, 2052, 7, 12, 0, 0, 2052, 418, 1, 0, 0, 0, 2053, 2054, 7, 13, 0, 0, 2054, 420, 1, 0, 0, 0, 2055, 2056, 7, 14, 0, 0, 2056, 422, 1, 0, 0, 0, 2057, 2058, 7, 15, 0, 0, 2058, 424, 1, 0, 0, 0, 2059, 2060, 7, 16, 0, 0, 2060, 426, 1, 0, 0, 0, 2061, 2062, 7, 17, 0, 0, 2062, 428, 1, 0, 0, 0, 2063, 2064, 7, 18, 0, 0, 2064, 430, 1, 0, 0, 0, 2065, 2066, 7, 19, 0, 0, 2066, 432, 1, 0, 0, 0, 2067, 2068, 7, 20, 0, 0, 2068, 434, 1, 0, 0, 0, 2069, 2070, 7, 21, 0, 0, 2070, 436, 1, 0, 0, 0, 2071, 2072, 7, 22, 0, 0, 2072, 438, 1, 0, 0, 0, 2073, 2074, 7, 23, 0, 0, 2074, 440, 1, 0, 0, 0, 2075, 2076, 7, 24, 0, 0, 2076, 442, 1, 0, 0, 0, 2077, 2078, 7, 25, 0, 0, 2078, 444, 1, 0, 0, 0, 2079, 2080, 7, 26, 0, 0, 2080, 446, 1, 0, 0, 0, 2081, 2082, 7, 27, 0, 0, 2082, 448, 1, 0, 0, 0, 2083, 2084, 7, 28, 0, 0, 2084, 450, 1, 0, 0, 0, 2085, 2086, 7, 29, 0, 0, 2086, 452, 1, 0, 0, 0, 2087, 2088, 7, 30, 0, 0, 2088, 454, 1, 0, 0, 0, 2089, 2090, 7, 31, 0, 0, 2090, 456, 1, 0, 0, 0, 2091, 2092, 7, 32, 0, 0, 2092, 458, 1, 0, 0, 0, 2093, 2094, 7, 33, 0, 0, 2094, 460, 1, 0, 0, 0, 2095, 2096, 5, 45, 0, 0, 2096, 2097, 5, 62, 0, 0, 2097, 462, 1, 0, 0, 0, 2098, 2099, 5, 42, 0, 0, 2099, 464, 1, 0, 0, 0, 2100, 2101, 5, 96, 0, 0, 2101, 466, 1, 0, 0, 0, 2102, 2103, 5, 92, 0, 0, 2103, 468, 1, 0, 0, 0, 2104, 2105, 5, 58, 0, 0, 2105, 470, 1, 0, 0, 0, 2106, 2107, 5, 44, 0, 0, 2107, 472, 1, 0, 0, 0, 2108, 2109, 5, 124, 0, 0, 2109, 2110, 5, 124, 0, 0, 2110, 474, 1, 0, 0, 0, 2111, 2112, 5, 45, 0, 0, 2112, 476, 1, 0, 0, 0, 2113, 2114, 5, 36, 0, 0, 2114, 478, 1, 0, 0, 0, 2115, 2116, 5, 46, 0, 0, 2116, 480, 1, 0, 0, 0, 2117, 2118, 5, 61, 0, 0, 2118, 2119, 5, 61, 0, 0, 2119, 482, 1, 0, 0, 0, 2120, 2121, 5, 61, 0, 0, 2121, 484, 1, 0, 0, 0, 2122, 2123, 5, 62, 0, 0, 2123, 2124, 5, 61, 0, 0, 2124, 486, 1, 0, 0, 0, 2125, 2126, 5, 62, 0, 0, 2126, 488, 1, 0, 0, 0, 2127, 2128, 5, 35, 0, 0, 2128, 490, 1, 0, 0, 0, 2129, 2130, 5, 126, 0, 0, 2130, 2131, 5, 42, 0, 0, 2131, 492, 1, 0, 0, 0, 2132, 2133, 5, 61, 0, 0, 2133, 2134, 5, 126, 0, 0, 2134, 2135, 5, 42, 0, 0, 2135, 494, 1, 0, 0, 0, 2136, 2137, 5, 123, 0, 0, 2137, 496, 1, 0, 0, 0, 2138, 2139, 5, 91, 0, 0, 2139, 498, 1, 0, 0, 0, 2140, 2141, 5, 40, 0, 0, 2141, 500, 1, 0, 0, 0, 2142, 2143, 5, 60, 0, 0, 2143, 2144, 5, 61, 0, 0, 2144, 502, 1, 0, 0, 0, 2145, 2146, 5, 60, 0, 0, 2146, 504, 1, 0, 0, 0, 2147, 2148, 5, 33, 0, 0, 2148, 2152, 5, 61, 0, 0, 2149, 2150, 5, 60, 0, 0, 2150, 2152, 5, 62, 0, 0, 2151, 2147, 1, 0, 0, 0, 2151, 2149, 1, 0, 0, 0, 2152, 506, 1, 0, 0, 0, 2153, 2154, 5, 33, 0, 0, 2154, 2155, 5, 126, 0, 0, 2155, 2156, 5, 42, 0, 0, 2156, 508, 1, 0, 0, 0, 2157, 2158, 5, 33, 0, 0, 2158, 2159, 5, 126, 0, 0, 2159, 510, 1, 0, 0, 0, 2160, 2161, 5, 63, 0, 0, 2161, 2162, 5, 63, 0, 0, 2162, 512, 1, 0, 0, 0, 2163, 2164, 5, 37, 0, 0, 2164, 514, 1, 0, 0, 0, 2165, 2166, 5, 43, 0, 0, 2166, 516, 1, 0, 0, 0, 2167, 2168, 5, 63, 0, 0, 2168, 518, 1, 0, 0, 0, 2169, 2170, 5, 34, 0, 0, 2170, 520, 1, 0, 0, 0, 2171, 2172, 5, 39, 0, 0, 2172, 522, 1, 0, 0, 0, 2173, 2174, 5, 126, 0, 0, 2174, 524, 1, 0, 0, 0, 2175, 2176, 5, 61, 0, 0, 2176, 2177, 5, 126, 0, 0, 2177, 526, 1, 0, 0, 0, 2178, 2179, 5, 125, 0, 0, 2179, 528, 1, 0, 0, 0, 2180, 2181, 5, 93, 0, 0, 2181, 530, 1, 0, 0, 0, 2182, 2183, 5, 41, 0, 0, 2183, 532, 1, 0, 0, 0, 2184, 2185, 5, 59, 0, 0, 2185, 534, 1, 0, 0, 0, 2186, 2187, 5, 47, 0, 0, 2187, 536, 1, 0, 0, 0, 2188, 2189, 5, 95, 0, 0, 2189, 538, 1, 0, 0, 0, 2190, 2191, 5, 47, 0, 0, 2191, 2192, 5, 42, 0, 0, 2192, 2196, 1, 0, 0, 0, 2193, 2195, 9, 0, 0, 0, 2194, 2193, 1, 0, 0, 0, 2195, 2198, 1, 0, 0, 0, 2196, 2197, 1, 0, 0, 0, 2196, 2194, 1, 0, 0, 0, 2197, 2199, 1, 0, 0, 0, 2198, 2196, 1, 0, 0, 0, 2199, 2200, 5, 42, 0, 0, 2200, 2201, 5, 47, 0, 0, 2201, 2202, 1, 0, 0, 0, 2202, 2203, 6, 269, 0, 0, 2203, 540, 1, 0, 0, 0, 2204, 2205, 5, 45, 0, 0, 2205, 2206, 5, 45, 0, 0, 2206, 2210, 1, 0, 0, 0, 2207, 2209, 8, 34, 0, 0, 2208, 2207, 1, 0, 0, 0, 2209, 2212, 1, 0, 0, 0, 2210, 2208, 1, 0, 0, 0, 2210, 2211, 1, 0, 0, 0, 2211, 2214, 1, 0, 0, 0, 2212, 2210, 1, 0, 0, 0, 2213, 2215, 7, 35, 0, 0, 2214, 2213, 1, 0, 0, 0, 2215, 2216, 1, 0, 0, 0, 2216, 2217, 6, 270, 0, 0, 2217, 542, 1, 0, 0, 0, 2218, 2219, 7, 36, 0, 0, 2219, 2220, 1, 0, 0, 0, 2220, 2221, 6, 271, 1, 0, 2221, 544, 1, 0, 0, 0, 39, 0, 607, 1112, 1826, 1869, 1874, 1880, 1882, 1891, 1893, 1904, 1906, 1911, 1918, 1923, 1927, 1932, 1937, 1941, 1946, 1953, 1959, 1964, 1971, 1976, 1982, 1987, 1989, 1995, 2000, 2007, 2015, 2017, 2028, 2030, 2151, 2196, 2210, 2214, 2, 6, 0, 0, 0, 1, 0] \ No newline at end of file +[4, 0, 242, 2241, 6, -1, 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, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 2, 62, 7, 62, 2, 63, 7, 63, 2, 64, 7, 64, 2, 65, 7, 65, 2, 66, 7, 66, 2, 67, 7, 67, 2, 68, 7, 68, 2, 69, 7, 69, 2, 70, 7, 70, 2, 71, 7, 71, 2, 72, 7, 72, 2, 73, 7, 73, 2, 74, 7, 74, 2, 75, 7, 75, 2, 76, 7, 76, 2, 77, 7, 77, 2, 78, 7, 78, 2, 79, 7, 79, 2, 80, 7, 80, 2, 81, 7, 81, 2, 82, 7, 82, 2, 83, 7, 83, 2, 84, 7, 84, 2, 85, 7, 85, 2, 86, 7, 86, 2, 87, 7, 87, 2, 88, 7, 88, 2, 89, 7, 89, 2, 90, 7, 90, 2, 91, 7, 91, 2, 92, 7, 92, 2, 93, 7, 93, 2, 94, 7, 94, 2, 95, 7, 95, 2, 96, 7, 96, 2, 97, 7, 97, 2, 98, 7, 98, 2, 99, 7, 99, 2, 100, 7, 100, 2, 101, 7, 101, 2, 102, 7, 102, 2, 103, 7, 103, 2, 104, 7, 104, 2, 105, 7, 105, 2, 106, 7, 106, 2, 107, 7, 107, 2, 108, 7, 108, 2, 109, 7, 109, 2, 110, 7, 110, 2, 111, 7, 111, 2, 112, 7, 112, 2, 113, 7, 113, 2, 114, 7, 114, 2, 115, 7, 115, 2, 116, 7, 116, 2, 117, 7, 117, 2, 118, 7, 118, 2, 119, 7, 119, 2, 120, 7, 120, 2, 121, 7, 121, 2, 122, 7, 122, 2, 123, 7, 123, 2, 124, 7, 124, 2, 125, 7, 125, 2, 126, 7, 126, 2, 127, 7, 127, 2, 128, 7, 128, 2, 129, 7, 129, 2, 130, 7, 130, 2, 131, 7, 131, 2, 132, 7, 132, 2, 133, 7, 133, 2, 134, 7, 134, 2, 135, 7, 135, 2, 136, 7, 136, 2, 137, 7, 137, 2, 138, 7, 138, 2, 139, 7, 139, 2, 140, 7, 140, 2, 141, 7, 141, 2, 142, 7, 142, 2, 143, 7, 143, 2, 144, 7, 144, 2, 145, 7, 145, 2, 146, 7, 146, 2, 147, 7, 147, 2, 148, 7, 148, 2, 149, 7, 149, 2, 150, 7, 150, 2, 151, 7, 151, 2, 152, 7, 152, 2, 153, 7, 153, 2, 154, 7, 154, 2, 155, 7, 155, 2, 156, 7, 156, 2, 157, 7, 157, 2, 158, 7, 158, 2, 159, 7, 159, 2, 160, 7, 160, 2, 161, 7, 161, 2, 162, 7, 162, 2, 163, 7, 163, 2, 164, 7, 164, 2, 165, 7, 165, 2, 166, 7, 166, 2, 167, 7, 167, 2, 168, 7, 168, 2, 169, 7, 169, 2, 170, 7, 170, 2, 171, 7, 171, 2, 172, 7, 172, 2, 173, 7, 173, 2, 174, 7, 174, 2, 175, 7, 175, 2, 176, 7, 176, 2, 177, 7, 177, 2, 178, 7, 178, 2, 179, 7, 179, 2, 180, 7, 180, 2, 181, 7, 181, 2, 182, 7, 182, 2, 183, 7, 183, 2, 184, 7, 184, 2, 185, 7, 185, 2, 186, 7, 186, 2, 187, 7, 187, 2, 188, 7, 188, 2, 189, 7, 189, 2, 190, 7, 190, 2, 191, 7, 191, 2, 192, 7, 192, 2, 193, 7, 193, 2, 194, 7, 194, 2, 195, 7, 195, 2, 196, 7, 196, 2, 197, 7, 197, 2, 198, 7, 198, 2, 199, 7, 199, 2, 200, 7, 200, 2, 201, 7, 201, 2, 202, 7, 202, 2, 203, 7, 203, 2, 204, 7, 204, 2, 205, 7, 205, 2, 206, 7, 206, 2, 207, 7, 207, 2, 208, 7, 208, 2, 209, 7, 209, 2, 210, 7, 210, 2, 211, 7, 211, 2, 212, 7, 212, 2, 213, 7, 213, 2, 214, 7, 214, 2, 215, 7, 215, 2, 216, 7, 216, 2, 217, 7, 217, 2, 218, 7, 218, 2, 219, 7, 219, 2, 220, 7, 220, 2, 221, 7, 221, 2, 222, 7, 222, 2, 223, 7, 223, 2, 224, 7, 224, 2, 225, 7, 225, 2, 226, 7, 226, 2, 227, 7, 227, 2, 228, 7, 228, 2, 229, 7, 229, 2, 230, 7, 230, 2, 231, 7, 231, 2, 232, 7, 232, 2, 233, 7, 233, 2, 234, 7, 234, 2, 235, 7, 235, 2, 236, 7, 236, 2, 237, 7, 237, 2, 238, 7, 238, 2, 239, 7, 239, 2, 240, 7, 240, 2, 241, 7, 241, 2, 242, 7, 242, 2, 243, 7, 243, 2, 244, 7, 244, 2, 245, 7, 245, 2, 246, 7, 246, 2, 247, 7, 247, 2, 248, 7, 248, 2, 249, 7, 249, 2, 250, 7, 250, 2, 251, 7, 251, 2, 252, 7, 252, 2, 253, 7, 253, 2, 254, 7, 254, 2, 255, 7, 255, 2, 256, 7, 256, 2, 257, 7, 257, 2, 258, 7, 258, 2, 259, 7, 259, 2, 260, 7, 260, 2, 261, 7, 261, 2, 262, 7, 262, 2, 263, 7, 263, 2, 264, 7, 264, 2, 265, 7, 265, 2, 266, 7, 266, 2, 267, 7, 267, 2, 268, 7, 268, 2, 269, 7, 269, 2, 270, 7, 270, 2, 271, 7, 271, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 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, 3, 10, 608, 8, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 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, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 36, 1, 36, 1, 36, 1, 36, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 62, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 63, 1, 64, 1, 64, 1, 64, 1, 64, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 65, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 66, 1, 67, 1, 67, 1, 67, 1, 67, 1, 67, 1, 68, 1, 68, 1, 68, 1, 68, 1, 68, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 69, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 70, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 71, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 72, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 73, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 74, 1, 75, 1, 75, 1, 75, 1, 75, 1, 75, 1, 76, 1, 76, 1, 76, 1, 77, 1, 77, 1, 77, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 78, 1, 79, 1, 79, 1, 79, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 80, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 1, 81, 3, 81, 1113, 8, 81, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 82, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 83, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 84, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 85, 1, 86, 1, 86, 1, 86, 1, 86, 1, 86, 1, 87, 1, 87, 1, 87, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 88, 1, 89, 1, 89, 1, 89, 1, 89, 1, 89, 1, 90, 1, 90, 1, 90, 1, 90, 1, 91, 1, 91, 1, 91, 1, 91, 1, 91, 1, 92, 1, 92, 1, 92, 1, 92, 1, 92, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 93, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 94, 1, 95, 1, 95, 1, 95, 1, 95, 1, 95, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 96, 1, 97, 1, 97, 1, 97, 1, 97, 1, 97, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 98, 1, 99, 1, 99, 1, 99, 1, 99, 1, 99, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 100, 1, 101, 1, 101, 1, 101, 1, 101, 1, 101, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 102, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 103, 1, 104, 1, 104, 1, 104, 1, 104, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 105, 1, 106, 1, 106, 1, 106, 1, 106, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 107, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 108, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 109, 1, 110, 1, 110, 1, 110, 1, 110, 1, 110, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 111, 1, 112, 1, 112, 1, 112, 1, 112, 1, 113, 1, 113, 1, 113, 1, 114, 1, 114, 1, 114, 1, 114, 1, 115, 1, 115, 1, 115, 1, 115, 1, 115, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 116, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 117, 1, 118, 1, 118, 1, 118, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 119, 1, 120, 1, 120, 1, 120, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 121, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 122, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 123, 1, 124, 1, 124, 1, 124, 1, 124, 1, 124, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 125, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 126, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 127, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 128, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 129, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 130, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 131, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 132, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 133, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 134, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 135, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 136, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 137, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 138, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 139, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 140, 1, 141, 1, 141, 1, 141, 1, 141, 1, 142, 1, 142, 1, 142, 1, 142, 1, 142, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 143, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 144, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 145, 1, 146, 1, 146, 1, 146, 1, 146, 1, 146, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 147, 1, 148, 1, 148, 1, 148, 1, 148, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 149, 1, 150, 1, 150, 1, 150, 1, 150, 1, 150, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 151, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 152, 1, 153, 1, 153, 1, 153, 1, 153, 1, 153, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 154, 1, 155, 1, 155, 1, 155, 1, 155, 1, 155, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 156, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 157, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 158, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 159, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 160, 1, 161, 1, 161, 1, 161, 1, 161, 1, 161, 1, 162, 1, 162, 1, 162, 1, 162, 1, 162, 1, 163, 1, 163, 1, 163, 1, 163, 1, 163, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 164, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 165, 1, 166, 1, 166, 1, 166, 1, 167, 1, 167, 1, 167, 1, 167, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 168, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 169, 1, 170, 1, 170, 1, 170, 1, 170, 1, 170, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 171, 1, 172, 1, 172, 1, 172, 1, 172, 1, 173, 1, 173, 1, 173, 1, 173, 1, 173, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 174, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 175, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 176, 1, 177, 1, 177, 1, 177, 1, 177, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 178, 1, 179, 1, 179, 1, 179, 1, 179, 1, 179, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 180, 1, 181, 1, 181, 1, 181, 1, 181, 1, 181, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 182, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 183, 1, 184, 1, 184, 1, 184, 1, 184, 1, 184, 1, 185, 1, 185, 1, 185, 1, 185, 1, 185, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 186, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 187, 1, 188, 1, 188, 1, 188, 1, 188, 1, 188, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 1, 189, 3, 189, 1827, 8, 189, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 190, 1, 191, 1, 191, 1, 191, 1, 191, 1, 191, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 1, 192, 3, 192, 1870, 8, 192, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 1, 193, 3, 193, 1902, 8, 193, 1, 194, 1, 194, 1, 194, 3, 194, 1907, 8, 194, 1, 194, 1, 194, 1, 194, 1, 194, 5, 194, 1913, 8, 194, 10, 194, 12, 194, 1916, 9, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 5, 194, 1924, 8, 194, 10, 194, 12, 194, 1927, 9, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 1, 194, 5, 194, 1937, 8, 194, 10, 194, 12, 194, 1940, 9, 194, 1, 194, 1, 194, 3, 194, 1944, 8, 194, 1, 195, 1, 195, 1, 195, 5, 195, 1949, 8, 195, 10, 195, 12, 195, 1952, 9, 195, 1, 195, 1, 195, 3, 195, 1956, 8, 195, 1, 195, 1, 195, 3, 195, 1960, 8, 195, 1, 195, 4, 195, 1963, 8, 195, 11, 195, 12, 195, 1964, 1, 195, 1, 195, 1, 195, 3, 195, 1970, 8, 195, 1, 195, 1, 195, 3, 195, 1974, 8, 195, 1, 195, 4, 195, 1977, 8, 195, 11, 195, 12, 195, 1978, 1, 195, 1, 195, 1, 195, 5, 195, 1984, 8, 195, 10, 195, 12, 195, 1987, 9, 195, 1, 195, 1, 195, 1, 195, 3, 195, 1992, 8, 195, 1, 195, 4, 195, 1995, 8, 195, 11, 195, 12, 195, 1996, 1, 195, 1, 195, 1, 195, 1, 195, 1, 195, 3, 195, 2004, 8, 195, 1, 195, 4, 195, 2007, 8, 195, 11, 195, 12, 195, 2008, 1, 195, 1, 195, 1, 195, 1, 195, 3, 195, 2015, 8, 195, 1, 195, 4, 195, 2018, 8, 195, 11, 195, 12, 195, 2019, 3, 195, 2022, 8, 195, 1, 196, 1, 196, 4, 196, 2026, 8, 196, 11, 196, 12, 196, 2027, 1, 197, 4, 197, 2031, 8, 197, 11, 197, 12, 197, 2032, 1, 198, 1, 198, 1, 198, 4, 198, 2038, 8, 198, 11, 198, 12, 198, 2039, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 1, 199, 5, 199, 2048, 8, 199, 10, 199, 12, 199, 2051, 9, 199, 1, 199, 1, 199, 1, 200, 1, 200, 1, 201, 1, 201, 1, 202, 1, 202, 1, 203, 1, 203, 1, 204, 1, 204, 1, 205, 1, 205, 1, 206, 1, 206, 1, 207, 1, 207, 1, 208, 1, 208, 1, 209, 1, 209, 1, 210, 1, 210, 1, 211, 1, 211, 1, 212, 1, 212, 1, 213, 1, 213, 1, 214, 1, 214, 1, 215, 1, 215, 1, 216, 1, 216, 1, 217, 1, 217, 1, 218, 1, 218, 1, 219, 1, 219, 1, 220, 1, 220, 1, 221, 1, 221, 1, 222, 1, 222, 1, 223, 1, 223, 1, 224, 1, 224, 1, 225, 1, 225, 1, 226, 1, 226, 1, 227, 1, 227, 1, 228, 1, 228, 1, 229, 1, 229, 1, 230, 1, 230, 1, 230, 1, 231, 1, 231, 1, 232, 1, 232, 1, 233, 1, 233, 1, 234, 1, 234, 1, 235, 1, 235, 1, 236, 1, 236, 1, 236, 1, 237, 1, 237, 1, 238, 1, 238, 1, 239, 1, 239, 1, 240, 1, 240, 1, 240, 1, 241, 1, 241, 1, 242, 1, 242, 1, 242, 1, 243, 1, 243, 1, 244, 1, 244, 1, 245, 1, 245, 1, 245, 1, 246, 1, 246, 1, 246, 1, 246, 1, 247, 1, 247, 1, 248, 1, 248, 1, 249, 1, 249, 1, 250, 1, 250, 1, 250, 1, 251, 1, 251, 1, 252, 1, 252, 1, 252, 1, 252, 3, 252, 2171, 8, 252, 1, 253, 1, 253, 1, 253, 1, 253, 1, 254, 1, 254, 1, 254, 1, 255, 1, 255, 1, 255, 1, 256, 1, 256, 1, 257, 1, 257, 1, 258, 1, 258, 1, 259, 1, 259, 1, 260, 1, 260, 1, 261, 1, 261, 1, 262, 1, 262, 1, 262, 1, 263, 1, 263, 1, 264, 1, 264, 1, 265, 1, 265, 1, 266, 1, 266, 1, 267, 1, 267, 1, 268, 1, 268, 1, 269, 1, 269, 1, 269, 1, 269, 5, 269, 2214, 8, 269, 10, 269, 12, 269, 2217, 9, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 269, 1, 270, 1, 270, 1, 270, 1, 270, 5, 270, 2228, 8, 270, 10, 270, 12, 270, 2231, 9, 270, 1, 270, 3, 270, 2234, 8, 270, 1, 270, 1, 270, 1, 271, 1, 271, 1, 271, 1, 271, 1, 2215, 0, 272, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 31, 63, 32, 65, 33, 67, 34, 69, 35, 71, 36, 73, 37, 75, 38, 77, 39, 79, 40, 81, 41, 83, 42, 85, 43, 87, 44, 89, 45, 91, 46, 93, 47, 95, 48, 97, 49, 99, 50, 101, 51, 103, 52, 105, 53, 107, 54, 109, 55, 111, 56, 113, 57, 115, 58, 117, 59, 119, 60, 121, 61, 123, 62, 125, 63, 127, 64, 129, 65, 131, 66, 133, 67, 135, 68, 137, 69, 139, 70, 141, 71, 143, 72, 145, 73, 147, 74, 149, 75, 151, 76, 153, 77, 155, 78, 157, 79, 159, 80, 161, 81, 163, 82, 165, 83, 167, 84, 169, 85, 171, 86, 173, 87, 175, 88, 177, 89, 179, 90, 181, 91, 183, 92, 185, 93, 187, 94, 189, 95, 191, 96, 193, 97, 195, 98, 197, 99, 199, 100, 201, 101, 203, 102, 205, 103, 207, 104, 209, 105, 211, 106, 213, 107, 215, 108, 217, 109, 219, 110, 221, 111, 223, 112, 225, 113, 227, 114, 229, 115, 231, 116, 233, 117, 235, 118, 237, 119, 239, 120, 241, 121, 243, 122, 245, 123, 247, 124, 249, 125, 251, 126, 253, 127, 255, 128, 257, 129, 259, 130, 261, 131, 263, 132, 265, 133, 267, 134, 269, 135, 271, 136, 273, 137, 275, 138, 277, 139, 279, 140, 281, 141, 283, 142, 285, 143, 287, 144, 289, 145, 291, 146, 293, 147, 295, 148, 297, 149, 299, 150, 301, 151, 303, 152, 305, 153, 307, 154, 309, 155, 311, 156, 313, 157, 315, 158, 317, 159, 319, 160, 321, 161, 323, 162, 325, 163, 327, 164, 329, 165, 331, 166, 333, 167, 335, 168, 337, 169, 339, 170, 341, 171, 343, 172, 345, 173, 347, 174, 349, 175, 351, 176, 353, 177, 355, 178, 357, 179, 359, 180, 361, 181, 363, 182, 365, 183, 367, 184, 369, 185, 371, 186, 373, 187, 375, 188, 377, 189, 379, 190, 381, 191, 383, 192, 385, 193, 387, 194, 389, 195, 391, 196, 393, 197, 395, 198, 397, 199, 399, 200, 401, 0, 403, 0, 405, 0, 407, 0, 409, 0, 411, 0, 413, 0, 415, 0, 417, 0, 419, 0, 421, 0, 423, 0, 425, 0, 427, 0, 429, 0, 431, 0, 433, 0, 435, 0, 437, 0, 439, 0, 441, 0, 443, 0, 445, 0, 447, 0, 449, 0, 451, 0, 453, 0, 455, 0, 457, 0, 459, 0, 461, 201, 463, 202, 465, 203, 467, 204, 469, 205, 471, 206, 473, 207, 475, 208, 477, 209, 479, 210, 481, 211, 483, 212, 485, 213, 487, 214, 489, 215, 491, 216, 493, 217, 495, 218, 497, 219, 499, 220, 501, 221, 503, 222, 505, 223, 507, 224, 509, 225, 511, 226, 513, 227, 515, 228, 517, 229, 519, 230, 521, 231, 523, 232, 525, 233, 527, 234, 529, 235, 531, 236, 533, 237, 535, 238, 537, 239, 539, 240, 541, 241, 543, 242, 1, 0, 36, 2, 0, 92, 92, 96, 96, 2, 0, 34, 34, 92, 92, 2, 0, 39, 39, 92, 92, 2, 0, 65, 65, 97, 97, 2, 0, 66, 66, 98, 98, 2, 0, 67, 67, 99, 99, 2, 0, 68, 68, 100, 100, 2, 0, 69, 69, 101, 101, 2, 0, 70, 70, 102, 102, 2, 0, 71, 71, 103, 103, 2, 0, 72, 72, 104, 104, 2, 0, 73, 73, 105, 105, 2, 0, 74, 74, 106, 106, 2, 0, 75, 75, 107, 107, 2, 0, 76, 76, 108, 108, 2, 0, 77, 77, 109, 109, 2, 0, 78, 78, 110, 110, 2, 0, 79, 79, 111, 111, 2, 0, 80, 80, 112, 112, 2, 0, 81, 81, 113, 113, 2, 0, 82, 82, 114, 114, 2, 0, 83, 83, 115, 115, 2, 0, 84, 84, 116, 116, 2, 0, 85, 85, 117, 117, 2, 0, 86, 86, 118, 118, 2, 0, 87, 87, 119, 119, 2, 0, 88, 88, 120, 120, 2, 0, 89, 89, 121, 121, 2, 0, 90, 90, 122, 122, 2, 0, 65, 90, 97, 122, 1, 0, 48, 55, 1, 0, 48, 57, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 10, 10, 13, 13, 2, 1, 10, 10, 13, 13, 2, 0, 9, 13, 32, 32, 2277, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 63, 1, 0, 0, 0, 0, 65, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 71, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 0, 77, 1, 0, 0, 0, 0, 79, 1, 0, 0, 0, 0, 81, 1, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 85, 1, 0, 0, 0, 0, 87, 1, 0, 0, 0, 0, 89, 1, 0, 0, 0, 0, 91, 1, 0, 0, 0, 0, 93, 1, 0, 0, 0, 0, 95, 1, 0, 0, 0, 0, 97, 1, 0, 0, 0, 0, 99, 1, 0, 0, 0, 0, 101, 1, 0, 0, 0, 0, 103, 1, 0, 0, 0, 0, 105, 1, 0, 0, 0, 0, 107, 1, 0, 0, 0, 0, 109, 1, 0, 0, 0, 0, 111, 1, 0, 0, 0, 0, 113, 1, 0, 0, 0, 0, 115, 1, 0, 0, 0, 0, 117, 1, 0, 0, 0, 0, 119, 1, 0, 0, 0, 0, 121, 1, 0, 0, 0, 0, 123, 1, 0, 0, 0, 0, 125, 1, 0, 0, 0, 0, 127, 1, 0, 0, 0, 0, 129, 1, 0, 0, 0, 0, 131, 1, 0, 0, 0, 0, 133, 1, 0, 0, 0, 0, 135, 1, 0, 0, 0, 0, 137, 1, 0, 0, 0, 0, 139, 1, 0, 0, 0, 0, 141, 1, 0, 0, 0, 0, 143, 1, 0, 0, 0, 0, 145, 1, 0, 0, 0, 0, 147, 1, 0, 0, 0, 0, 149, 1, 0, 0, 0, 0, 151, 1, 0, 0, 0, 0, 153, 1, 0, 0, 0, 0, 155, 1, 0, 0, 0, 0, 157, 1, 0, 0, 0, 0, 159, 1, 0, 0, 0, 0, 161, 1, 0, 0, 0, 0, 163, 1, 0, 0, 0, 0, 165, 1, 0, 0, 0, 0, 167, 1, 0, 0, 0, 0, 169, 1, 0, 0, 0, 0, 171, 1, 0, 0, 0, 0, 173, 1, 0, 0, 0, 0, 175, 1, 0, 0, 0, 0, 177, 1, 0, 0, 0, 0, 179, 1, 0, 0, 0, 0, 181, 1, 0, 0, 0, 0, 183, 1, 0, 0, 0, 0, 185, 1, 0, 0, 0, 0, 187, 1, 0, 0, 0, 0, 189, 1, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0, 193, 1, 0, 0, 0, 0, 195, 1, 0, 0, 0, 0, 197, 1, 0, 0, 0, 0, 199, 1, 0, 0, 0, 0, 201, 1, 0, 0, 0, 0, 203, 1, 0, 0, 0, 0, 205, 1, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 209, 1, 0, 0, 0, 0, 211, 1, 0, 0, 0, 0, 213, 1, 0, 0, 0, 0, 215, 1, 0, 0, 0, 0, 217, 1, 0, 0, 0, 0, 219, 1, 0, 0, 0, 0, 221, 1, 0, 0, 0, 0, 223, 1, 0, 0, 0, 0, 225, 1, 0, 0, 0, 0, 227, 1, 0, 0, 0, 0, 229, 1, 0, 0, 0, 0, 231, 1, 0, 0, 0, 0, 233, 1, 0, 0, 0, 0, 235, 1, 0, 0, 0, 0, 237, 1, 0, 0, 0, 0, 239, 1, 0, 0, 0, 0, 241, 1, 0, 0, 0, 0, 243, 1, 0, 0, 0, 0, 245, 1, 0, 0, 0, 0, 247, 1, 0, 0, 0, 0, 249, 1, 0, 0, 0, 0, 251, 1, 0, 0, 0, 0, 253, 1, 0, 0, 0, 0, 255, 1, 0, 0, 0, 0, 257, 1, 0, 0, 0, 0, 259, 1, 0, 0, 0, 0, 261, 1, 0, 0, 0, 0, 263, 1, 0, 0, 0, 0, 265, 1, 0, 0, 0, 0, 267, 1, 0, 0, 0, 0, 269, 1, 0, 0, 0, 0, 271, 1, 0, 0, 0, 0, 273, 1, 0, 0, 0, 0, 275, 1, 0, 0, 0, 0, 277, 1, 0, 0, 0, 0, 279, 1, 0, 0, 0, 0, 281, 1, 0, 0, 0, 0, 283, 1, 0, 0, 0, 0, 285, 1, 0, 0, 0, 0, 287, 1, 0, 0, 0, 0, 289, 1, 0, 0, 0, 0, 291, 1, 0, 0, 0, 0, 293, 1, 0, 0, 0, 0, 295, 1, 0, 0, 0, 0, 297, 1, 0, 0, 0, 0, 299, 1, 0, 0, 0, 0, 301, 1, 0, 0, 0, 0, 303, 1, 0, 0, 0, 0, 305, 1, 0, 0, 0, 0, 307, 1, 0, 0, 0, 0, 309, 1, 0, 0, 0, 0, 311, 1, 0, 0, 0, 0, 313, 1, 0, 0, 0, 0, 315, 1, 0, 0, 0, 0, 317, 1, 0, 0, 0, 0, 319, 1, 0, 0, 0, 0, 321, 1, 0, 0, 0, 0, 323, 1, 0, 0, 0, 0, 325, 1, 0, 0, 0, 0, 327, 1, 0, 0, 0, 0, 329, 1, 0, 0, 0, 0, 331, 1, 0, 0, 0, 0, 333, 1, 0, 0, 0, 0, 335, 1, 0, 0, 0, 0, 337, 1, 0, 0, 0, 0, 339, 1, 0, 0, 0, 0, 341, 1, 0, 0, 0, 0, 343, 1, 0, 0, 0, 0, 345, 1, 0, 0, 0, 0, 347, 1, 0, 0, 0, 0, 349, 1, 0, 0, 0, 0, 351, 1, 0, 0, 0, 0, 353, 1, 0, 0, 0, 0, 355, 1, 0, 0, 0, 0, 357, 1, 0, 0, 0, 0, 359, 1, 0, 0, 0, 0, 361, 1, 0, 0, 0, 0, 363, 1, 0, 0, 0, 0, 365, 1, 0, 0, 0, 0, 367, 1, 0, 0, 0, 0, 369, 1, 0, 0, 0, 0, 371, 1, 0, 0, 0, 0, 373, 1, 0, 0, 0, 0, 375, 1, 0, 0, 0, 0, 377, 1, 0, 0, 0, 0, 379, 1, 0, 0, 0, 0, 381, 1, 0, 0, 0, 0, 383, 1, 0, 0, 0, 0, 385, 1, 0, 0, 0, 0, 387, 1, 0, 0, 0, 0, 389, 1, 0, 0, 0, 0, 391, 1, 0, 0, 0, 0, 393, 1, 0, 0, 0, 0, 395, 1, 0, 0, 0, 0, 397, 1, 0, 0, 0, 0, 399, 1, 0, 0, 0, 0, 461, 1, 0, 0, 0, 0, 463, 1, 0, 0, 0, 0, 465, 1, 0, 0, 0, 0, 467, 1, 0, 0, 0, 0, 469, 1, 0, 0, 0, 0, 471, 1, 0, 0, 0, 0, 473, 1, 0, 0, 0, 0, 475, 1, 0, 0, 0, 0, 477, 1, 0, 0, 0, 0, 479, 1, 0, 0, 0, 0, 481, 1, 0, 0, 0, 0, 483, 1, 0, 0, 0, 0, 485, 1, 0, 0, 0, 0, 487, 1, 0, 0, 0, 0, 489, 1, 0, 0, 0, 0, 491, 1, 0, 0, 0, 0, 493, 1, 0, 0, 0, 0, 495, 1, 0, 0, 0, 0, 497, 1, 0, 0, 0, 0, 499, 1, 0, 0, 0, 0, 501, 1, 0, 0, 0, 0, 503, 1, 0, 0, 0, 0, 505, 1, 0, 0, 0, 0, 507, 1, 0, 0, 0, 0, 509, 1, 0, 0, 0, 0, 511, 1, 0, 0, 0, 0, 513, 1, 0, 0, 0, 0, 515, 1, 0, 0, 0, 0, 517, 1, 0, 0, 0, 0, 519, 1, 0, 0, 0, 0, 521, 1, 0, 0, 0, 0, 523, 1, 0, 0, 0, 0, 525, 1, 0, 0, 0, 0, 527, 1, 0, 0, 0, 0, 529, 1, 0, 0, 0, 0, 531, 1, 0, 0, 0, 0, 533, 1, 0, 0, 0, 0, 535, 1, 0, 0, 0, 0, 537, 1, 0, 0, 0, 0, 539, 1, 0, 0, 0, 0, 541, 1, 0, 0, 0, 0, 543, 1, 0, 0, 0, 1, 545, 1, 0, 0, 0, 3, 549, 1, 0, 0, 0, 5, 555, 1, 0, 0, 0, 7, 561, 1, 0, 0, 0, 9, 565, 1, 0, 0, 0, 11, 571, 1, 0, 0, 0, 13, 575, 1, 0, 0, 0, 15, 580, 1, 0, 0, 0, 17, 584, 1, 0, 0, 0, 19, 590, 1, 0, 0, 0, 21, 607, 1, 0, 0, 0, 23, 609, 1, 0, 0, 0, 25, 614, 1, 0, 0, 0, 27, 618, 1, 0, 0, 0, 29, 624, 1, 0, 0, 0, 31, 631, 1, 0, 0, 0, 33, 639, 1, 0, 0, 0, 35, 644, 1, 0, 0, 0, 37, 647, 1, 0, 0, 0, 39, 652, 1, 0, 0, 0, 41, 657, 1, 0, 0, 0, 43, 663, 1, 0, 0, 0, 45, 669, 1, 0, 0, 0, 47, 677, 1, 0, 0, 0, 49, 683, 1, 0, 0, 0, 51, 690, 1, 0, 0, 0, 53, 698, 1, 0, 0, 0, 55, 705, 1, 0, 0, 0, 57, 713, 1, 0, 0, 0, 59, 724, 1, 0, 0, 0, 61, 731, 1, 0, 0, 0, 63, 737, 1, 0, 0, 0, 65, 742, 1, 0, 0, 0, 67, 750, 1, 0, 0, 0, 69, 759, 1, 0, 0, 0, 71, 769, 1, 0, 0, 0, 73, 774, 1, 0, 0, 0, 75, 778, 1, 0, 0, 0, 77, 790, 1, 0, 0, 0, 79, 798, 1, 0, 0, 0, 81, 804, 1, 0, 0, 0, 83, 811, 1, 0, 0, 0, 85, 816, 1, 0, 0, 0, 87, 827, 1, 0, 0, 0, 89, 836, 1, 0, 0, 0, 91, 843, 1, 0, 0, 0, 93, 856, 1, 0, 0, 0, 95, 867, 1, 0, 0, 0, 97, 872, 1, 0, 0, 0, 99, 881, 1, 0, 0, 0, 101, 893, 1, 0, 0, 0, 103, 898, 1, 0, 0, 0, 105, 903, 1, 0, 0, 0, 107, 907, 1, 0, 0, 0, 109, 914, 1, 0, 0, 0, 111, 921, 1, 0, 0, 0, 113, 928, 1, 0, 0, 0, 115, 936, 1, 0, 0, 0, 117, 947, 1, 0, 0, 0, 119, 955, 1, 0, 0, 0, 121, 963, 1, 0, 0, 0, 123, 969, 1, 0, 0, 0, 125, 975, 1, 0, 0, 0, 127, 981, 1, 0, 0, 0, 129, 991, 1, 0, 0, 0, 131, 995, 1, 0, 0, 0, 133, 1002, 1, 0, 0, 0, 135, 1009, 1, 0, 0, 0, 137, 1014, 1, 0, 0, 0, 139, 1019, 1, 0, 0, 0, 141, 1028, 1, 0, 0, 0, 143, 1035, 1, 0, 0, 0, 145, 1047, 1, 0, 0, 0, 147, 1053, 1, 0, 0, 0, 149, 1060, 1, 0, 0, 0, 151, 1073, 1, 0, 0, 0, 153, 1078, 1, 0, 0, 0, 155, 1081, 1, 0, 0, 0, 157, 1084, 1, 0, 0, 0, 159, 1090, 1, 0, 0, 0, 161, 1093, 1, 0, 0, 0, 163, 1112, 1, 0, 0, 0, 165, 1114, 1, 0, 0, 0, 167, 1124, 1, 0, 0, 0, 169, 1130, 1, 0, 0, 0, 171, 1137, 1, 0, 0, 0, 173, 1146, 1, 0, 0, 0, 175, 1151, 1, 0, 0, 0, 177, 1154, 1, 0, 0, 0, 179, 1167, 1, 0, 0, 0, 181, 1172, 1, 0, 0, 0, 183, 1176, 1, 0, 0, 0, 185, 1181, 1, 0, 0, 0, 187, 1186, 1, 0, 0, 0, 189, 1193, 1, 0, 0, 0, 191, 1201, 1, 0, 0, 0, 193, 1206, 1, 0, 0, 0, 195, 1215, 1, 0, 0, 0, 197, 1220, 1, 0, 0, 0, 199, 1226, 1, 0, 0, 0, 201, 1231, 1, 0, 0, 0, 203, 1237, 1, 0, 0, 0, 205, 1242, 1, 0, 0, 0, 207, 1254, 1, 0, 0, 0, 209, 1267, 1, 0, 0, 0, 211, 1271, 1, 0, 0, 0, 213, 1278, 1, 0, 0, 0, 215, 1282, 1, 0, 0, 0, 217, 1289, 1, 0, 0, 0, 219, 1296, 1, 0, 0, 0, 221, 1302, 1, 0, 0, 0, 223, 1307, 1, 0, 0, 0, 225, 1316, 1, 0, 0, 0, 227, 1320, 1, 0, 0, 0, 229, 1323, 1, 0, 0, 0, 231, 1327, 1, 0, 0, 0, 233, 1332, 1, 0, 0, 0, 235, 1338, 1, 0, 0, 0, 237, 1345, 1, 0, 0, 0, 239, 1348, 1, 0, 0, 0, 241, 1357, 1, 0, 0, 0, 243, 1360, 1, 0, 0, 0, 245, 1366, 1, 0, 0, 0, 247, 1372, 1, 0, 0, 0, 249, 1380, 1, 0, 0, 0, 251, 1385, 1, 0, 0, 0, 253, 1395, 1, 0, 0, 0, 255, 1404, 1, 0, 0, 0, 257, 1414, 1, 0, 0, 0, 259, 1423, 1, 0, 0, 0, 261, 1431, 1, 0, 0, 0, 263, 1442, 1, 0, 0, 0, 265, 1450, 1, 0, 0, 0, 267, 1456, 1, 0, 0, 0, 269, 1463, 1, 0, 0, 0, 271, 1470, 1, 0, 0, 0, 273, 1477, 1, 0, 0, 0, 275, 1485, 1, 0, 0, 0, 277, 1493, 1, 0, 0, 0, 279, 1504, 1, 0, 0, 0, 281, 1510, 1, 0, 0, 0, 283, 1517, 1, 0, 0, 0, 285, 1521, 1, 0, 0, 0, 287, 1526, 1, 0, 0, 0, 289, 1533, 1, 0, 0, 0, 291, 1540, 1, 0, 0, 0, 293, 1547, 1, 0, 0, 0, 295, 1552, 1, 0, 0, 0, 297, 1558, 1, 0, 0, 0, 299, 1562, 1, 0, 0, 0, 301, 1571, 1, 0, 0, 0, 303, 1576, 1, 0, 0, 0, 305, 1583, 1, 0, 0, 0, 307, 1589, 1, 0, 0, 0, 309, 1594, 1, 0, 0, 0, 311, 1604, 1, 0, 0, 0, 313, 1609, 1, 0, 0, 0, 315, 1616, 1, 0, 0, 0, 317, 1623, 1, 0, 0, 0, 319, 1629, 1, 0, 0, 0, 321, 1636, 1, 0, 0, 0, 323, 1646, 1, 0, 0, 0, 325, 1651, 1, 0, 0, 0, 327, 1656, 1, 0, 0, 0, 329, 1661, 1, 0, 0, 0, 331, 1669, 1, 0, 0, 0, 333, 1679, 1, 0, 0, 0, 335, 1682, 1, 0, 0, 0, 337, 1686, 1, 0, 0, 0, 339, 1693, 1, 0, 0, 0, 341, 1702, 1, 0, 0, 0, 343, 1707, 1, 0, 0, 0, 345, 1716, 1, 0, 0, 0, 347, 1720, 1, 0, 0, 0, 349, 1725, 1, 0, 0, 0, 351, 1735, 1, 0, 0, 0, 353, 1741, 1, 0, 0, 0, 355, 1748, 1, 0, 0, 0, 357, 1752, 1, 0, 0, 0, 359, 1758, 1, 0, 0, 0, 361, 1763, 1, 0, 0, 0, 363, 1770, 1, 0, 0, 0, 365, 1775, 1, 0, 0, 0, 367, 1782, 1, 0, 0, 0, 369, 1788, 1, 0, 0, 0, 371, 1793, 1, 0, 0, 0, 373, 1798, 1, 0, 0, 0, 375, 1804, 1, 0, 0, 0, 377, 1811, 1, 0, 0, 0, 379, 1826, 1, 0, 0, 0, 381, 1828, 1, 0, 0, 0, 383, 1834, 1, 0, 0, 0, 385, 1869, 1, 0, 0, 0, 387, 1901, 1, 0, 0, 0, 389, 1943, 1, 0, 0, 0, 391, 2021, 1, 0, 0, 0, 393, 2023, 1, 0, 0, 0, 395, 2030, 1, 0, 0, 0, 397, 2034, 1, 0, 0, 0, 399, 2041, 1, 0, 0, 0, 401, 2054, 1, 0, 0, 0, 403, 2056, 1, 0, 0, 0, 405, 2058, 1, 0, 0, 0, 407, 2060, 1, 0, 0, 0, 409, 2062, 1, 0, 0, 0, 411, 2064, 1, 0, 0, 0, 413, 2066, 1, 0, 0, 0, 415, 2068, 1, 0, 0, 0, 417, 2070, 1, 0, 0, 0, 419, 2072, 1, 0, 0, 0, 421, 2074, 1, 0, 0, 0, 423, 2076, 1, 0, 0, 0, 425, 2078, 1, 0, 0, 0, 427, 2080, 1, 0, 0, 0, 429, 2082, 1, 0, 0, 0, 431, 2084, 1, 0, 0, 0, 433, 2086, 1, 0, 0, 0, 435, 2088, 1, 0, 0, 0, 437, 2090, 1, 0, 0, 0, 439, 2092, 1, 0, 0, 0, 441, 2094, 1, 0, 0, 0, 443, 2096, 1, 0, 0, 0, 445, 2098, 1, 0, 0, 0, 447, 2100, 1, 0, 0, 0, 449, 2102, 1, 0, 0, 0, 451, 2104, 1, 0, 0, 0, 453, 2106, 1, 0, 0, 0, 455, 2108, 1, 0, 0, 0, 457, 2110, 1, 0, 0, 0, 459, 2112, 1, 0, 0, 0, 461, 2114, 1, 0, 0, 0, 463, 2117, 1, 0, 0, 0, 465, 2119, 1, 0, 0, 0, 467, 2121, 1, 0, 0, 0, 469, 2123, 1, 0, 0, 0, 471, 2125, 1, 0, 0, 0, 473, 2127, 1, 0, 0, 0, 475, 2130, 1, 0, 0, 0, 477, 2132, 1, 0, 0, 0, 479, 2134, 1, 0, 0, 0, 481, 2136, 1, 0, 0, 0, 483, 2139, 1, 0, 0, 0, 485, 2141, 1, 0, 0, 0, 487, 2144, 1, 0, 0, 0, 489, 2146, 1, 0, 0, 0, 491, 2148, 1, 0, 0, 0, 493, 2151, 1, 0, 0, 0, 495, 2155, 1, 0, 0, 0, 497, 2157, 1, 0, 0, 0, 499, 2159, 1, 0, 0, 0, 501, 2161, 1, 0, 0, 0, 503, 2164, 1, 0, 0, 0, 505, 2170, 1, 0, 0, 0, 507, 2172, 1, 0, 0, 0, 509, 2176, 1, 0, 0, 0, 511, 2179, 1, 0, 0, 0, 513, 2182, 1, 0, 0, 0, 515, 2184, 1, 0, 0, 0, 517, 2186, 1, 0, 0, 0, 519, 2188, 1, 0, 0, 0, 521, 2190, 1, 0, 0, 0, 523, 2192, 1, 0, 0, 0, 525, 2194, 1, 0, 0, 0, 527, 2197, 1, 0, 0, 0, 529, 2199, 1, 0, 0, 0, 531, 2201, 1, 0, 0, 0, 533, 2203, 1, 0, 0, 0, 535, 2205, 1, 0, 0, 0, 537, 2207, 1, 0, 0, 0, 539, 2209, 1, 0, 0, 0, 541, 2223, 1, 0, 0, 0, 543, 2237, 1, 0, 0, 0, 545, 546, 3, 401, 200, 0, 546, 547, 3, 407, 203, 0, 547, 548, 3, 407, 203, 0, 548, 2, 1, 0, 0, 0, 549, 550, 3, 401, 200, 0, 550, 551, 3, 411, 205, 0, 551, 552, 3, 439, 219, 0, 552, 553, 3, 409, 204, 0, 553, 554, 3, 435, 217, 0, 554, 4, 1, 0, 0, 0, 555, 556, 3, 401, 200, 0, 556, 557, 3, 423, 211, 0, 557, 558, 3, 417, 208, 0, 558, 559, 3, 401, 200, 0, 559, 560, 3, 437, 218, 0, 560, 6, 1, 0, 0, 0, 561, 562, 3, 401, 200, 0, 562, 563, 3, 423, 211, 0, 563, 564, 3, 423, 211, 0, 564, 8, 1, 0, 0, 0, 565, 566, 3, 401, 200, 0, 566, 567, 3, 423, 211, 0, 567, 568, 3, 439, 219, 0, 568, 569, 3, 409, 204, 0, 569, 570, 3, 435, 217, 0, 570, 10, 1, 0, 0, 0, 571, 572, 3, 401, 200, 0, 572, 573, 3, 427, 213, 0, 573, 574, 3, 407, 203, 0, 574, 12, 1, 0, 0, 0, 575, 576, 3, 401, 200, 0, 576, 577, 3, 427, 213, 0, 577, 578, 3, 439, 219, 0, 578, 579, 3, 417, 208, 0, 579, 14, 1, 0, 0, 0, 580, 581, 3, 401, 200, 0, 581, 582, 3, 427, 213, 0, 582, 583, 3, 449, 224, 0, 583, 16, 1, 0, 0, 0, 584, 585, 3, 401, 200, 0, 585, 586, 3, 435, 217, 0, 586, 587, 3, 435, 217, 0, 587, 588, 3, 401, 200, 0, 588, 589, 3, 449, 224, 0, 589, 18, 1, 0, 0, 0, 590, 591, 3, 401, 200, 0, 591, 592, 3, 437, 218, 0, 592, 20, 1, 0, 0, 0, 593, 594, 3, 401, 200, 0, 594, 595, 3, 437, 218, 0, 595, 596, 3, 405, 202, 0, 596, 608, 1, 0, 0, 0, 597, 598, 3, 401, 200, 0, 598, 599, 3, 437, 218, 0, 599, 600, 3, 405, 202, 0, 600, 601, 3, 409, 204, 0, 601, 602, 3, 427, 213, 0, 602, 603, 3, 407, 203, 0, 603, 604, 3, 417, 208, 0, 604, 605, 3, 427, 213, 0, 605, 606, 3, 413, 206, 0, 606, 608, 1, 0, 0, 0, 607, 593, 1, 0, 0, 0, 607, 597, 1, 0, 0, 0, 608, 22, 1, 0, 0, 0, 609, 610, 3, 401, 200, 0, 610, 611, 3, 437, 218, 0, 611, 612, 3, 429, 214, 0, 612, 613, 3, 411, 205, 0, 613, 24, 1, 0, 0, 0, 614, 615, 3, 401, 200, 0, 615, 616, 3, 437, 218, 0, 616, 617, 3, 439, 219, 0, 617, 26, 1, 0, 0, 0, 618, 619, 3, 401, 200, 0, 619, 620, 3, 437, 218, 0, 620, 621, 3, 449, 224, 0, 621, 622, 3, 427, 213, 0, 622, 623, 3, 405, 202, 0, 623, 28, 1, 0, 0, 0, 624, 625, 3, 401, 200, 0, 625, 626, 3, 439, 219, 0, 626, 627, 3, 439, 219, 0, 627, 628, 3, 401, 200, 0, 628, 629, 3, 405, 202, 0, 629, 630, 3, 415, 207, 0, 630, 30, 1, 0, 0, 0, 631, 632, 3, 403, 201, 0, 632, 633, 3, 409, 204, 0, 633, 634, 3, 439, 219, 0, 634, 635, 3, 445, 222, 0, 635, 636, 3, 409, 204, 0, 636, 637, 3, 409, 204, 0, 637, 638, 3, 427, 213, 0, 638, 32, 1, 0, 0, 0, 639, 640, 3, 403, 201, 0, 640, 641, 3, 429, 214, 0, 641, 642, 3, 439, 219, 0, 642, 643, 3, 415, 207, 0, 643, 34, 1, 0, 0, 0, 644, 645, 3, 403, 201, 0, 645, 646, 3, 449, 224, 0, 646, 36, 1, 0, 0, 0, 647, 648, 3, 405, 202, 0, 648, 649, 3, 401, 200, 0, 649, 650, 3, 437, 218, 0, 650, 651, 3, 409, 204, 0, 651, 38, 1, 0, 0, 0, 652, 653, 3, 405, 202, 0, 653, 654, 3, 401, 200, 0, 654, 655, 3, 437, 218, 0, 655, 656, 3, 439, 219, 0, 656, 40, 1, 0, 0, 0, 657, 658, 3, 405, 202, 0, 658, 659, 3, 415, 207, 0, 659, 660, 3, 409, 204, 0, 660, 661, 3, 405, 202, 0, 661, 662, 3, 421, 210, 0, 662, 42, 1, 0, 0, 0, 663, 664, 3, 405, 202, 0, 664, 665, 3, 423, 211, 0, 665, 666, 3, 409, 204, 0, 666, 667, 3, 401, 200, 0, 667, 668, 3, 435, 217, 0, 668, 44, 1, 0, 0, 0, 669, 670, 3, 405, 202, 0, 670, 671, 3, 423, 211, 0, 671, 672, 3, 441, 220, 0, 672, 673, 3, 437, 218, 0, 673, 674, 3, 439, 219, 0, 674, 675, 3, 409, 204, 0, 675, 676, 3, 435, 217, 0, 676, 46, 1, 0, 0, 0, 677, 678, 3, 405, 202, 0, 678, 679, 3, 429, 214, 0, 679, 680, 3, 407, 203, 0, 680, 681, 3, 409, 204, 0, 681, 682, 3, 405, 202, 0, 682, 48, 1, 0, 0, 0, 683, 684, 3, 405, 202, 0, 684, 685, 3, 429, 214, 0, 685, 686, 3, 415, 207, 0, 686, 687, 3, 429, 214, 0, 687, 688, 3, 435, 217, 0, 688, 689, 3, 439, 219, 0, 689, 50, 1, 0, 0, 0, 690, 691, 3, 405, 202, 0, 691, 692, 3, 429, 214, 0, 692, 693, 3, 423, 211, 0, 693, 694, 3, 423, 211, 0, 694, 695, 3, 401, 200, 0, 695, 696, 3, 439, 219, 0, 696, 697, 3, 409, 204, 0, 697, 52, 1, 0, 0, 0, 698, 699, 3, 405, 202, 0, 699, 700, 3, 429, 214, 0, 700, 701, 3, 423, 211, 0, 701, 702, 3, 441, 220, 0, 702, 703, 3, 425, 212, 0, 703, 704, 3, 427, 213, 0, 704, 54, 1, 0, 0, 0, 705, 706, 3, 405, 202, 0, 706, 707, 3, 429, 214, 0, 707, 708, 3, 425, 212, 0, 708, 709, 3, 425, 212, 0, 709, 710, 3, 409, 204, 0, 710, 711, 3, 427, 213, 0, 711, 712, 3, 439, 219, 0, 712, 56, 1, 0, 0, 0, 713, 714, 3, 405, 202, 0, 714, 715, 3, 429, 214, 0, 715, 716, 3, 427, 213, 0, 716, 717, 3, 437, 218, 0, 717, 718, 3, 439, 219, 0, 718, 719, 3, 435, 217, 0, 719, 720, 3, 401, 200, 0, 720, 721, 3, 417, 208, 0, 721, 722, 3, 427, 213, 0, 722, 723, 3, 439, 219, 0, 723, 58, 1, 0, 0, 0, 724, 725, 3, 405, 202, 0, 725, 726, 3, 435, 217, 0, 726, 727, 3, 409, 204, 0, 727, 728, 3, 401, 200, 0, 728, 729, 3, 439, 219, 0, 729, 730, 3, 409, 204, 0, 730, 60, 1, 0, 0, 0, 731, 732, 3, 405, 202, 0, 732, 733, 3, 435, 217, 0, 733, 734, 3, 429, 214, 0, 734, 735, 3, 437, 218, 0, 735, 736, 3, 437, 218, 0, 736, 62, 1, 0, 0, 0, 737, 738, 3, 405, 202, 0, 738, 739, 3, 441, 220, 0, 739, 740, 3, 403, 201, 0, 740, 741, 3, 409, 204, 0, 741, 64, 1, 0, 0, 0, 742, 743, 3, 405, 202, 0, 743, 744, 3, 441, 220, 0, 744, 745, 3, 435, 217, 0, 745, 746, 3, 435, 217, 0, 746, 747, 3, 409, 204, 0, 747, 748, 3, 427, 213, 0, 748, 749, 3, 439, 219, 0, 749, 66, 1, 0, 0, 0, 750, 751, 3, 407, 203, 0, 751, 752, 3, 401, 200, 0, 752, 753, 3, 439, 219, 0, 753, 754, 3, 401, 200, 0, 754, 755, 3, 403, 201, 0, 755, 756, 3, 401, 200, 0, 756, 757, 3, 437, 218, 0, 757, 758, 3, 409, 204, 0, 758, 68, 1, 0, 0, 0, 759, 760, 3, 407, 203, 0, 760, 761, 3, 401, 200, 0, 761, 762, 3, 439, 219, 0, 762, 763, 3, 401, 200, 0, 763, 764, 3, 403, 201, 0, 764, 765, 3, 401, 200, 0, 765, 766, 3, 437, 218, 0, 766, 767, 3, 409, 204, 0, 767, 768, 3, 437, 218, 0, 768, 70, 1, 0, 0, 0, 769, 770, 3, 407, 203, 0, 770, 771, 3, 401, 200, 0, 771, 772, 3, 439, 219, 0, 772, 773, 3, 409, 204, 0, 773, 72, 1, 0, 0, 0, 774, 775, 3, 407, 203, 0, 775, 776, 3, 401, 200, 0, 776, 777, 3, 449, 224, 0, 777, 74, 1, 0, 0, 0, 778, 779, 3, 407, 203, 0, 779, 780, 3, 409, 204, 0, 780, 781, 3, 407, 203, 0, 781, 782, 3, 441, 220, 0, 782, 783, 3, 431, 215, 0, 783, 784, 3, 423, 211, 0, 784, 785, 3, 417, 208, 0, 785, 786, 3, 405, 202, 0, 786, 787, 3, 401, 200, 0, 787, 788, 3, 439, 219, 0, 788, 789, 3, 409, 204, 0, 789, 76, 1, 0, 0, 0, 790, 791, 3, 407, 203, 0, 791, 792, 3, 409, 204, 0, 792, 793, 3, 411, 205, 0, 793, 794, 3, 401, 200, 0, 794, 795, 3, 441, 220, 0, 795, 796, 3, 423, 211, 0, 796, 797, 3, 439, 219, 0, 797, 78, 1, 0, 0, 0, 798, 799, 3, 407, 203, 0, 799, 800, 3, 409, 204, 0, 800, 801, 3, 423, 211, 0, 801, 802, 3, 401, 200, 0, 802, 803, 3, 449, 224, 0, 803, 80, 1, 0, 0, 0, 804, 805, 3, 407, 203, 0, 805, 806, 3, 409, 204, 0, 806, 807, 3, 423, 211, 0, 807, 808, 3, 409, 204, 0, 808, 809, 3, 439, 219, 0, 809, 810, 3, 409, 204, 0, 810, 82, 1, 0, 0, 0, 811, 812, 3, 407, 203, 0, 812, 813, 3, 409, 204, 0, 813, 814, 3, 437, 218, 0, 814, 815, 3, 405, 202, 0, 815, 84, 1, 0, 0, 0, 816, 817, 3, 407, 203, 0, 817, 818, 3, 409, 204, 0, 818, 819, 3, 437, 218, 0, 819, 820, 3, 405, 202, 0, 820, 821, 3, 409, 204, 0, 821, 822, 3, 427, 213, 0, 822, 823, 3, 407, 203, 0, 823, 824, 3, 417, 208, 0, 824, 825, 3, 427, 213, 0, 825, 826, 3, 413, 206, 0, 826, 86, 1, 0, 0, 0, 827, 828, 3, 407, 203, 0, 828, 829, 3, 409, 204, 0, 829, 830, 3, 437, 218, 0, 830, 831, 3, 405, 202, 0, 831, 832, 3, 435, 217, 0, 832, 833, 3, 417, 208, 0, 833, 834, 3, 403, 201, 0, 834, 835, 3, 409, 204, 0, 835, 88, 1, 0, 0, 0, 836, 837, 3, 407, 203, 0, 837, 838, 3, 409, 204, 0, 838, 839, 3, 439, 219, 0, 839, 840, 3, 401, 200, 0, 840, 841, 3, 405, 202, 0, 841, 842, 3, 415, 207, 0, 842, 90, 1, 0, 0, 0, 843, 844, 3, 407, 203, 0, 844, 845, 3, 417, 208, 0, 845, 846, 3, 405, 202, 0, 846, 847, 3, 439, 219, 0, 847, 848, 3, 417, 208, 0, 848, 849, 3, 429, 214, 0, 849, 850, 3, 427, 213, 0, 850, 851, 3, 401, 200, 0, 851, 852, 3, 435, 217, 0, 852, 853, 3, 417, 208, 0, 853, 854, 3, 409, 204, 0, 854, 855, 3, 437, 218, 0, 855, 92, 1, 0, 0, 0, 856, 857, 3, 407, 203, 0, 857, 858, 3, 417, 208, 0, 858, 859, 3, 405, 202, 0, 859, 860, 3, 439, 219, 0, 860, 861, 3, 417, 208, 0, 861, 862, 3, 429, 214, 0, 862, 863, 3, 427, 213, 0, 863, 864, 3, 401, 200, 0, 864, 865, 3, 435, 217, 0, 865, 866, 3, 449, 224, 0, 866, 94, 1, 0, 0, 0, 867, 868, 3, 407, 203, 0, 868, 869, 3, 417, 208, 0, 869, 870, 3, 437, 218, 0, 870, 871, 3, 421, 210, 0, 871, 96, 1, 0, 0, 0, 872, 873, 3, 407, 203, 0, 873, 874, 3, 417, 208, 0, 874, 875, 3, 437, 218, 0, 875, 876, 3, 439, 219, 0, 876, 877, 3, 417, 208, 0, 877, 878, 3, 427, 213, 0, 878, 879, 3, 405, 202, 0, 879, 880, 3, 439, 219, 0, 880, 98, 1, 0, 0, 0, 881, 882, 3, 407, 203, 0, 882, 883, 3, 417, 208, 0, 883, 884, 3, 437, 218, 0, 884, 885, 3, 439, 219, 0, 885, 886, 3, 435, 217, 0, 886, 887, 3, 417, 208, 0, 887, 888, 3, 403, 201, 0, 888, 889, 3, 441, 220, 0, 889, 890, 3, 439, 219, 0, 890, 891, 3, 409, 204, 0, 891, 892, 3, 407, 203, 0, 892, 100, 1, 0, 0, 0, 893, 894, 3, 407, 203, 0, 894, 895, 3, 435, 217, 0, 895, 896, 3, 429, 214, 0, 896, 897, 3, 431, 215, 0, 897, 102, 1, 0, 0, 0, 898, 899, 3, 409, 204, 0, 899, 900, 3, 423, 211, 0, 900, 901, 3, 437, 218, 0, 901, 902, 3, 409, 204, 0, 902, 104, 1, 0, 0, 0, 903, 904, 3, 409, 204, 0, 904, 905, 3, 427, 213, 0, 905, 906, 3, 407, 203, 0, 906, 106, 1, 0, 0, 0, 907, 908, 3, 409, 204, 0, 908, 909, 3, 427, 213, 0, 909, 910, 3, 413, 206, 0, 910, 911, 3, 417, 208, 0, 911, 912, 3, 427, 213, 0, 912, 913, 3, 409, 204, 0, 913, 108, 1, 0, 0, 0, 914, 915, 3, 409, 204, 0, 915, 916, 3, 443, 221, 0, 916, 917, 3, 409, 204, 0, 917, 918, 3, 427, 213, 0, 918, 919, 3, 439, 219, 0, 919, 920, 3, 437, 218, 0, 920, 110, 1, 0, 0, 0, 921, 922, 3, 409, 204, 0, 922, 923, 3, 447, 223, 0, 923, 924, 3, 417, 208, 0, 924, 925, 3, 437, 218, 0, 925, 926, 3, 439, 219, 0, 926, 927, 3, 437, 218, 0, 927, 112, 1, 0, 0, 0, 928, 929, 3, 409, 204, 0, 929, 930, 3, 447, 223, 0, 930, 931, 3, 431, 215, 0, 931, 932, 3, 423, 211, 0, 932, 933, 3, 401, 200, 0, 933, 934, 3, 417, 208, 0, 934, 935, 3, 427, 213, 0, 935, 114, 1, 0, 0, 0, 936, 937, 3, 409, 204, 0, 937, 938, 3, 447, 223, 0, 938, 939, 3, 431, 215, 0, 939, 940, 3, 435, 217, 0, 940, 941, 3, 409, 204, 0, 941, 942, 3, 437, 218, 0, 942, 943, 3, 437, 218, 0, 943, 944, 3, 417, 208, 0, 944, 945, 3, 429, 214, 0, 945, 946, 3, 427, 213, 0, 946, 116, 1, 0, 0, 0, 947, 948, 3, 409, 204, 0, 948, 949, 3, 447, 223, 0, 949, 950, 3, 439, 219, 0, 950, 951, 3, 435, 217, 0, 951, 952, 3, 401, 200, 0, 952, 953, 3, 405, 202, 0, 953, 954, 3, 439, 219, 0, 954, 118, 1, 0, 0, 0, 955, 956, 3, 411, 205, 0, 956, 957, 3, 409, 204, 0, 957, 958, 3, 439, 219, 0, 958, 959, 3, 405, 202, 0, 959, 960, 3, 415, 207, 0, 960, 961, 3, 409, 204, 0, 961, 962, 3, 437, 218, 0, 962, 120, 1, 0, 0, 0, 963, 964, 3, 411, 205, 0, 964, 965, 3, 417, 208, 0, 965, 966, 3, 427, 213, 0, 966, 967, 3, 401, 200, 0, 967, 968, 3, 423, 211, 0, 968, 122, 1, 0, 0, 0, 969, 970, 3, 411, 205, 0, 970, 971, 3, 417, 208, 0, 971, 972, 3, 435, 217, 0, 972, 973, 3, 437, 218, 0, 973, 974, 3, 439, 219, 0, 974, 124, 1, 0, 0, 0, 975, 976, 3, 411, 205, 0, 976, 977, 3, 423, 211, 0, 977, 978, 3, 441, 220, 0, 978, 979, 3, 437, 218, 0, 979, 980, 3, 415, 207, 0, 980, 126, 1, 0, 0, 0, 981, 982, 3, 411, 205, 0, 982, 983, 3, 429, 214, 0, 983, 984, 3, 423, 211, 0, 984, 985, 3, 423, 211, 0, 985, 986, 3, 429, 214, 0, 986, 987, 3, 445, 222, 0, 987, 988, 3, 417, 208, 0, 988, 989, 3, 427, 213, 0, 989, 990, 3, 413, 206, 0, 990, 128, 1, 0, 0, 0, 991, 992, 3, 411, 205, 0, 992, 993, 3, 429, 214, 0, 993, 994, 3, 435, 217, 0, 994, 130, 1, 0, 0, 0, 995, 996, 3, 411, 205, 0, 996, 997, 3, 429, 214, 0, 997, 998, 3, 435, 217, 0, 998, 999, 3, 425, 212, 0, 999, 1000, 3, 401, 200, 0, 1000, 1001, 3, 439, 219, 0, 1001, 132, 1, 0, 0, 0, 1002, 1003, 3, 411, 205, 0, 1003, 1004, 3, 435, 217, 0, 1004, 1005, 3, 409, 204, 0, 1005, 1006, 3, 409, 204, 0, 1006, 1007, 3, 451, 225, 0, 1007, 1008, 3, 409, 204, 0, 1008, 134, 1, 0, 0, 0, 1009, 1010, 3, 411, 205, 0, 1010, 1011, 3, 435, 217, 0, 1011, 1012, 3, 429, 214, 0, 1012, 1013, 3, 425, 212, 0, 1013, 136, 1, 0, 0, 0, 1014, 1015, 3, 411, 205, 0, 1015, 1016, 3, 441, 220, 0, 1016, 1017, 3, 423, 211, 0, 1017, 1018, 3, 423, 211, 0, 1018, 138, 1, 0, 0, 0, 1019, 1020, 3, 411, 205, 0, 1020, 1021, 3, 441, 220, 0, 1021, 1022, 3, 427, 213, 0, 1022, 1023, 3, 405, 202, 0, 1023, 1024, 3, 439, 219, 0, 1024, 1025, 3, 417, 208, 0, 1025, 1026, 3, 429, 214, 0, 1026, 1027, 3, 427, 213, 0, 1027, 140, 1, 0, 0, 0, 1028, 1029, 3, 413, 206, 0, 1029, 1030, 3, 423, 211, 0, 1030, 1031, 3, 429, 214, 0, 1031, 1032, 3, 403, 201, 0, 1032, 1033, 3, 401, 200, 0, 1033, 1034, 3, 423, 211, 0, 1034, 142, 1, 0, 0, 0, 1035, 1036, 3, 413, 206, 0, 1036, 1037, 3, 435, 217, 0, 1037, 1038, 3, 401, 200, 0, 1038, 1039, 3, 427, 213, 0, 1039, 1040, 3, 441, 220, 0, 1040, 1041, 3, 423, 211, 0, 1041, 1042, 3, 401, 200, 0, 1042, 1043, 3, 435, 217, 0, 1043, 1044, 3, 417, 208, 0, 1044, 1045, 3, 439, 219, 0, 1045, 1046, 3, 449, 224, 0, 1046, 144, 1, 0, 0, 0, 1047, 1048, 3, 413, 206, 0, 1048, 1049, 3, 435, 217, 0, 1049, 1050, 3, 429, 214, 0, 1050, 1051, 3, 441, 220, 0, 1051, 1052, 3, 431, 215, 0, 1052, 146, 1, 0, 0, 0, 1053, 1054, 3, 415, 207, 0, 1054, 1055, 3, 401, 200, 0, 1055, 1056, 3, 443, 221, 0, 1056, 1057, 3, 417, 208, 0, 1057, 1058, 3, 427, 213, 0, 1058, 1059, 3, 413, 206, 0, 1059, 148, 1, 0, 0, 0, 1060, 1061, 3, 415, 207, 0, 1061, 1062, 3, 417, 208, 0, 1062, 1063, 3, 409, 204, 0, 1063, 1064, 3, 435, 217, 0, 1064, 1065, 3, 401, 200, 0, 1065, 1066, 3, 435, 217, 0, 1066, 1067, 3, 405, 202, 0, 1067, 1068, 3, 415, 207, 0, 1068, 1069, 3, 417, 208, 0, 1069, 1070, 3, 405, 202, 0, 1070, 1071, 3, 401, 200, 0, 1071, 1072, 3, 423, 211, 0, 1072, 150, 1, 0, 0, 0, 1073, 1074, 3, 415, 207, 0, 1074, 1075, 3, 429, 214, 0, 1075, 1076, 3, 441, 220, 0, 1076, 1077, 3, 435, 217, 0, 1077, 152, 1, 0, 0, 0, 1078, 1079, 3, 417, 208, 0, 1079, 1080, 3, 407, 203, 0, 1080, 154, 1, 0, 0, 0, 1081, 1082, 3, 417, 208, 0, 1082, 1083, 3, 411, 205, 0, 1083, 156, 1, 0, 0, 0, 1084, 1085, 3, 417, 208, 0, 1085, 1086, 3, 423, 211, 0, 1086, 1087, 3, 417, 208, 0, 1087, 1088, 3, 421, 210, 0, 1088, 1089, 3, 409, 204, 0, 1089, 158, 1, 0, 0, 0, 1090, 1091, 3, 417, 208, 0, 1091, 1092, 3, 427, 213, 0, 1092, 160, 1, 0, 0, 0, 1093, 1094, 3, 417, 208, 0, 1094, 1095, 3, 427, 213, 0, 1095, 1096, 3, 407, 203, 0, 1096, 1097, 3, 409, 204, 0, 1097, 1098, 3, 447, 223, 0, 1098, 162, 1, 0, 0, 0, 1099, 1100, 3, 417, 208, 0, 1100, 1101, 3, 427, 213, 0, 1101, 1102, 3, 411, 205, 0, 1102, 1113, 1, 0, 0, 0, 1103, 1104, 3, 417, 208, 0, 1104, 1105, 3, 427, 213, 0, 1105, 1106, 3, 411, 205, 0, 1106, 1107, 3, 417, 208, 0, 1107, 1108, 3, 427, 213, 0, 1108, 1109, 3, 417, 208, 0, 1109, 1110, 3, 439, 219, 0, 1110, 1111, 3, 449, 224, 0, 1111, 1113, 1, 0, 0, 0, 1112, 1099, 1, 0, 0, 0, 1112, 1103, 1, 0, 0, 0, 1113, 164, 1, 0, 0, 0, 1114, 1115, 3, 417, 208, 0, 1115, 1116, 3, 427, 213, 0, 1116, 1117, 3, 419, 209, 0, 1117, 1118, 3, 409, 204, 0, 1118, 1119, 3, 405, 202, 0, 1119, 1120, 3, 439, 219, 0, 1120, 1121, 3, 417, 208, 0, 1121, 1122, 3, 443, 221, 0, 1122, 1123, 3, 409, 204, 0, 1123, 166, 1, 0, 0, 0, 1124, 1125, 3, 417, 208, 0, 1125, 1126, 3, 427, 213, 0, 1126, 1127, 3, 427, 213, 0, 1127, 1128, 3, 409, 204, 0, 1128, 1129, 3, 435, 217, 0, 1129, 168, 1, 0, 0, 0, 1130, 1131, 3, 417, 208, 0, 1131, 1132, 3, 427, 213, 0, 1132, 1133, 3, 437, 218, 0, 1133, 1134, 3, 409, 204, 0, 1134, 1135, 3, 435, 217, 0, 1135, 1136, 3, 439, 219, 0, 1136, 170, 1, 0, 0, 0, 1137, 1138, 3, 417, 208, 0, 1138, 1139, 3, 427, 213, 0, 1139, 1140, 3, 439, 219, 0, 1140, 1141, 3, 409, 204, 0, 1141, 1142, 3, 435, 217, 0, 1142, 1143, 3, 443, 221, 0, 1143, 1144, 3, 401, 200, 0, 1144, 1145, 3, 423, 211, 0, 1145, 172, 1, 0, 0, 0, 1146, 1147, 3, 417, 208, 0, 1147, 1148, 3, 427, 213, 0, 1148, 1149, 3, 439, 219, 0, 1149, 1150, 3, 429, 214, 0, 1150, 174, 1, 0, 0, 0, 1151, 1152, 3, 417, 208, 0, 1152, 1153, 3, 437, 218, 0, 1153, 176, 1, 0, 0, 0, 1154, 1155, 3, 417, 208, 0, 1155, 1156, 3, 437, 218, 0, 1156, 1157, 3, 537, 268, 0, 1157, 1158, 3, 429, 214, 0, 1158, 1159, 3, 403, 201, 0, 1159, 1160, 3, 419, 209, 0, 1160, 1161, 3, 409, 204, 0, 1161, 1162, 3, 405, 202, 0, 1162, 1163, 3, 439, 219, 0, 1163, 1164, 3, 537, 268, 0, 1164, 1165, 3, 417, 208, 0, 1165, 1166, 3, 407, 203, 0, 1166, 178, 1, 0, 0, 0, 1167, 1168, 3, 419, 209, 0, 1168, 1169, 3, 429, 214, 0, 1169, 1170, 3, 417, 208, 0, 1170, 1171, 3, 427, 213, 0, 1171, 180, 1, 0, 0, 0, 1172, 1173, 3, 421, 210, 0, 1173, 1174, 3, 409, 204, 0, 1174, 1175, 3, 449, 224, 0, 1175, 182, 1, 0, 0, 0, 1176, 1177, 3, 421, 210, 0, 1177, 1178, 3, 417, 208, 0, 1178, 1179, 3, 423, 211, 0, 1179, 1180, 3, 423, 211, 0, 1180, 184, 1, 0, 0, 0, 1181, 1182, 3, 423, 211, 0, 1182, 1183, 3, 401, 200, 0, 1183, 1184, 3, 437, 218, 0, 1184, 1185, 3, 439, 219, 0, 1185, 186, 1, 0, 0, 0, 1186, 1187, 3, 423, 211, 0, 1187, 1188, 3, 401, 200, 0, 1188, 1189, 3, 449, 224, 0, 1189, 1190, 3, 429, 214, 0, 1190, 1191, 3, 441, 220, 0, 1191, 1192, 3, 439, 219, 0, 1192, 188, 1, 0, 0, 0, 1193, 1194, 3, 423, 211, 0, 1194, 1195, 3, 409, 204, 0, 1195, 1196, 3, 401, 200, 0, 1196, 1197, 3, 407, 203, 0, 1197, 1198, 3, 417, 208, 0, 1198, 1199, 3, 427, 213, 0, 1199, 1200, 3, 413, 206, 0, 1200, 190, 1, 0, 0, 0, 1201, 1202, 3, 423, 211, 0, 1202, 1203, 3, 409, 204, 0, 1203, 1204, 3, 411, 205, 0, 1204, 1205, 3, 439, 219, 0, 1205, 192, 1, 0, 0, 0, 1206, 1207, 3, 423, 211, 0, 1207, 1208, 3, 417, 208, 0, 1208, 1209, 3, 411, 205, 0, 1209, 1210, 3, 409, 204, 0, 1210, 1211, 3, 439, 219, 0, 1211, 1212, 3, 417, 208, 0, 1212, 1213, 3, 425, 212, 0, 1213, 1214, 3, 409, 204, 0, 1214, 194, 1, 0, 0, 0, 1215, 1216, 3, 423, 211, 0, 1216, 1217, 3, 417, 208, 0, 1217, 1218, 3, 421, 210, 0, 1218, 1219, 3, 409, 204, 0, 1219, 196, 1, 0, 0, 0, 1220, 1221, 3, 423, 211, 0, 1221, 1222, 3, 417, 208, 0, 1222, 1223, 3, 425, 212, 0, 1223, 1224, 3, 417, 208, 0, 1224, 1225, 3, 439, 219, 0, 1225, 198, 1, 0, 0, 0, 1226, 1227, 3, 423, 211, 0, 1227, 1228, 3, 417, 208, 0, 1228, 1229, 3, 443, 221, 0, 1229, 1230, 3, 409, 204, 0, 1230, 200, 1, 0, 0, 0, 1231, 1232, 3, 423, 211, 0, 1232, 1233, 3, 429, 214, 0, 1233, 1234, 3, 405, 202, 0, 1234, 1235, 3, 401, 200, 0, 1235, 1236, 3, 423, 211, 0, 1236, 202, 1, 0, 0, 0, 1237, 1238, 3, 423, 211, 0, 1238, 1239, 3, 429, 214, 0, 1239, 1240, 3, 413, 206, 0, 1240, 1241, 3, 437, 218, 0, 1241, 204, 1, 0, 0, 0, 1242, 1243, 3, 425, 212, 0, 1243, 1244, 3, 401, 200, 0, 1244, 1245, 3, 439, 219, 0, 1245, 1246, 3, 409, 204, 0, 1246, 1247, 3, 435, 217, 0, 1247, 1248, 3, 417, 208, 0, 1248, 1249, 3, 401, 200, 0, 1249, 1250, 3, 423, 211, 0, 1250, 1251, 3, 417, 208, 0, 1251, 1252, 3, 451, 225, 0, 1252, 1253, 3, 409, 204, 0, 1253, 206, 1, 0, 0, 0, 1254, 1255, 3, 425, 212, 0, 1255, 1256, 3, 401, 200, 0, 1256, 1257, 3, 439, 219, 0, 1257, 1258, 3, 409, 204, 0, 1258, 1259, 3, 435, 217, 0, 1259, 1260, 3, 417, 208, 0, 1260, 1261, 3, 401, 200, 0, 1261, 1262, 3, 423, 211, 0, 1262, 1263, 3, 417, 208, 0, 1263, 1264, 3, 451, 225, 0, 1264, 1265, 3, 409, 204, 0, 1265, 1266, 3, 407, 203, 0, 1266, 208, 1, 0, 0, 0, 1267, 1268, 3, 425, 212, 0, 1268, 1269, 3, 401, 200, 0, 1269, 1270, 3, 447, 223, 0, 1270, 210, 1, 0, 0, 0, 1271, 1272, 3, 425, 212, 0, 1272, 1273, 3, 409, 204, 0, 1273, 1274, 3, 435, 217, 0, 1274, 1275, 3, 413, 206, 0, 1275, 1276, 3, 409, 204, 0, 1276, 1277, 3, 437, 218, 0, 1277, 212, 1, 0, 0, 0, 1278, 1279, 3, 425, 212, 0, 1279, 1280, 3, 417, 208, 0, 1280, 1281, 3, 427, 213, 0, 1281, 214, 1, 0, 0, 0, 1282, 1283, 3, 425, 212, 0, 1283, 1284, 3, 417, 208, 0, 1284, 1285, 3, 427, 213, 0, 1285, 1286, 3, 441, 220, 0, 1286, 1287, 3, 439, 219, 0, 1287, 1288, 3, 409, 204, 0, 1288, 216, 1, 0, 0, 0, 1289, 1290, 3, 425, 212, 0, 1290, 1291, 3, 429, 214, 0, 1291, 1292, 3, 407, 203, 0, 1292, 1293, 3, 417, 208, 0, 1293, 1294, 3, 411, 205, 0, 1294, 1295, 3, 449, 224, 0, 1295, 218, 1, 0, 0, 0, 1296, 1297, 3, 425, 212, 0, 1297, 1298, 3, 429, 214, 0, 1298, 1299, 3, 427, 213, 0, 1299, 1300, 3, 439, 219, 0, 1300, 1301, 3, 415, 207, 0, 1301, 220, 1, 0, 0, 0, 1302, 1303, 3, 425, 212, 0, 1303, 1304, 3, 429, 214, 0, 1304, 1305, 3, 443, 221, 0, 1305, 1306, 3, 409, 204, 0, 1306, 222, 1, 0, 0, 0, 1307, 1308, 3, 425, 212, 0, 1308, 1309, 3, 441, 220, 0, 1309, 1310, 3, 439, 219, 0, 1310, 1311, 3, 401, 200, 0, 1311, 1312, 3, 439, 219, 0, 1312, 1313, 3, 417, 208, 0, 1313, 1314, 3, 429, 214, 0, 1314, 1315, 3, 427, 213, 0, 1315, 224, 1, 0, 0, 0, 1316, 1317, 3, 427, 213, 0, 1317, 1318, 3, 401, 200, 0, 1318, 1319, 3, 427, 213, 0, 1319, 226, 1, 0, 0, 0, 1320, 1321, 3, 427, 213, 0, 1321, 1322, 3, 429, 214, 0, 1322, 228, 1, 0, 0, 0, 1323, 1324, 3, 427, 213, 0, 1324, 1325, 3, 429, 214, 0, 1325, 1326, 3, 439, 219, 0, 1326, 230, 1, 0, 0, 0, 1327, 1328, 3, 427, 213, 0, 1328, 1329, 3, 441, 220, 0, 1329, 1330, 3, 423, 211, 0, 1330, 1331, 3, 423, 211, 0, 1331, 232, 1, 0, 0, 0, 1332, 1333, 3, 427, 213, 0, 1333, 1334, 3, 441, 220, 0, 1334, 1335, 3, 423, 211, 0, 1335, 1336, 3, 423, 211, 0, 1336, 1337, 3, 437, 218, 0, 1337, 234, 1, 0, 0, 0, 1338, 1339, 3, 429, 214, 0, 1339, 1340, 3, 411, 205, 0, 1340, 1341, 3, 411, 205, 0, 1341, 1342, 3, 437, 218, 0, 1342, 1343, 3, 409, 204, 0, 1343, 1344, 3, 439, 219, 0, 1344, 236, 1, 0, 0, 0, 1345, 1346, 3, 429, 214, 0, 1346, 1347, 3, 427, 213, 0, 1347, 238, 1, 0, 0, 0, 1348, 1349, 3, 429, 214, 0, 1349, 1350, 3, 431, 215, 0, 1350, 1351, 3, 439, 219, 0, 1351, 1352, 3, 417, 208, 0, 1352, 1353, 3, 425, 212, 0, 1353, 1354, 3, 417, 208, 0, 1354, 1355, 3, 451, 225, 0, 1355, 1356, 3, 409, 204, 0, 1356, 240, 1, 0, 0, 0, 1357, 1358, 3, 429, 214, 0, 1358, 1359, 3, 435, 217, 0, 1359, 242, 1, 0, 0, 0, 1360, 1361, 3, 429, 214, 0, 1361, 1362, 3, 435, 217, 0, 1362, 1363, 3, 407, 203, 0, 1363, 1364, 3, 409, 204, 0, 1364, 1365, 3, 435, 217, 0, 1365, 244, 1, 0, 0, 0, 1366, 1367, 3, 429, 214, 0, 1367, 1368, 3, 441, 220, 0, 1368, 1369, 3, 439, 219, 0, 1369, 1370, 3, 409, 204, 0, 1370, 1371, 3, 435, 217, 0, 1371, 246, 1, 0, 0, 0, 1372, 1373, 3, 429, 214, 0, 1373, 1374, 3, 441, 220, 0, 1374, 1375, 3, 439, 219, 0, 1375, 1376, 3, 411, 205, 0, 1376, 1377, 3, 417, 208, 0, 1377, 1378, 3, 423, 211, 0, 1378, 1379, 3, 409, 204, 0, 1379, 248, 1, 0, 0, 0, 1380, 1381, 3, 429, 214, 0, 1381, 1382, 3, 443, 221, 0, 1382, 1383, 3, 409, 204, 0, 1383, 1384, 3, 435, 217, 0, 1384, 250, 1, 0, 0, 0, 1385, 1386, 3, 431, 215, 0, 1386, 1387, 3, 401, 200, 0, 1387, 1388, 3, 435, 217, 0, 1388, 1389, 3, 439, 219, 0, 1389, 1390, 3, 417, 208, 0, 1390, 1391, 3, 439, 219, 0, 1391, 1392, 3, 417, 208, 0, 1392, 1393, 3, 429, 214, 0, 1393, 1394, 3, 427, 213, 0, 1394, 252, 1, 0, 0, 0, 1395, 1396, 3, 431, 215, 0, 1396, 1397, 3, 429, 214, 0, 1397, 1398, 3, 431, 215, 0, 1398, 1399, 3, 441, 220, 0, 1399, 1400, 3, 423, 211, 0, 1400, 1401, 3, 401, 200, 0, 1401, 1402, 3, 439, 219, 0, 1402, 1403, 3, 409, 204, 0, 1403, 254, 1, 0, 0, 0, 1404, 1405, 3, 431, 215, 0, 1405, 1406, 3, 435, 217, 0, 1406, 1407, 3, 409, 204, 0, 1407, 1408, 3, 405, 202, 0, 1408, 1409, 3, 409, 204, 0, 1409, 1410, 3, 407, 203, 0, 1410, 1411, 3, 417, 208, 0, 1411, 1412, 3, 427, 213, 0, 1412, 1413, 3, 413, 206, 0, 1413, 256, 1, 0, 0, 0, 1414, 1415, 3, 431, 215, 0, 1415, 1416, 3, 435, 217, 0, 1416, 1417, 3, 409, 204, 0, 1417, 1418, 3, 445, 222, 0, 1418, 1419, 3, 415, 207, 0, 1419, 1420, 3, 409, 204, 0, 1420, 1421, 3, 435, 217, 0, 1421, 1422, 3, 409, 204, 0, 1422, 258, 1, 0, 0, 0, 1423, 1424, 3, 431, 215, 0, 1424, 1425, 3, 435, 217, 0, 1425, 1426, 3, 417, 208, 0, 1426, 1427, 3, 425, 212, 0, 1427, 1428, 3, 401, 200, 0, 1428, 1429, 3, 435, 217, 0, 1429, 1430, 3, 449, 224, 0, 1430, 260, 1, 0, 0, 0, 1431, 1432, 3, 431, 215, 0, 1432, 1433, 3, 435, 217, 0, 1433, 1434, 3, 429, 214, 0, 1434, 1435, 3, 419, 209, 0, 1435, 1436, 3, 409, 204, 0, 1436, 1437, 3, 405, 202, 0, 1437, 1438, 3, 439, 219, 0, 1438, 1439, 3, 417, 208, 0, 1439, 1440, 3, 429, 214, 0, 1440, 1441, 3, 427, 213, 0, 1441, 262, 1, 0, 0, 0, 1442, 1443, 3, 433, 216, 0, 1443, 1444, 3, 441, 220, 0, 1444, 1445, 3, 401, 200, 0, 1445, 1446, 3, 435, 217, 0, 1446, 1447, 3, 439, 219, 0, 1447, 1448, 3, 409, 204, 0, 1448, 1449, 3, 435, 217, 0, 1449, 264, 1, 0, 0, 0, 1450, 1451, 3, 435, 217, 0, 1451, 1452, 3, 401, 200, 0, 1452, 1453, 3, 427, 213, 0, 1453, 1454, 3, 413, 206, 0, 1454, 1455, 3, 409, 204, 0, 1455, 266, 1, 0, 0, 0, 1456, 1457, 3, 435, 217, 0, 1457, 1458, 3, 409, 204, 0, 1458, 1459, 3, 423, 211, 0, 1459, 1460, 3, 429, 214, 0, 1460, 1461, 3, 401, 200, 0, 1461, 1462, 3, 407, 203, 0, 1462, 268, 1, 0, 0, 0, 1463, 1464, 3, 435, 217, 0, 1464, 1465, 3, 409, 204, 0, 1465, 1466, 3, 425, 212, 0, 1466, 1467, 3, 429, 214, 0, 1467, 1468, 3, 443, 221, 0, 1468, 1469, 3, 409, 204, 0, 1469, 270, 1, 0, 0, 0, 1470, 1471, 3, 435, 217, 0, 1471, 1472, 3, 409, 204, 0, 1472, 1473, 3, 427, 213, 0, 1473, 1474, 3, 401, 200, 0, 1474, 1475, 3, 425, 212, 0, 1475, 1476, 3, 409, 204, 0, 1476, 272, 1, 0, 0, 0, 1477, 1478, 3, 435, 217, 0, 1478, 1479, 3, 409, 204, 0, 1479, 1480, 3, 431, 215, 0, 1480, 1481, 3, 423, 211, 0, 1481, 1482, 3, 401, 200, 0, 1482, 1483, 3, 405, 202, 0, 1483, 1484, 3, 409, 204, 0, 1484, 274, 1, 0, 0, 0, 1485, 1486, 3, 435, 217, 0, 1486, 1487, 3, 409, 204, 0, 1487, 1488, 3, 431, 215, 0, 1488, 1489, 3, 423, 211, 0, 1489, 1490, 3, 417, 208, 0, 1490, 1491, 3, 405, 202, 0, 1491, 1492, 3, 401, 200, 0, 1492, 276, 1, 0, 0, 0, 1493, 1494, 3, 435, 217, 0, 1494, 1495, 3, 409, 204, 0, 1495, 1496, 3, 431, 215, 0, 1496, 1497, 3, 423, 211, 0, 1497, 1498, 3, 417, 208, 0, 1498, 1499, 3, 405, 202, 0, 1499, 1500, 3, 401, 200, 0, 1500, 1501, 3, 439, 219, 0, 1501, 1502, 3, 409, 204, 0, 1502, 1503, 3, 407, 203, 0, 1503, 278, 1, 0, 0, 0, 1504, 1505, 3, 435, 217, 0, 1505, 1506, 3, 417, 208, 0, 1506, 1507, 3, 413, 206, 0, 1507, 1508, 3, 415, 207, 0, 1508, 1509, 3, 439, 219, 0, 1509, 280, 1, 0, 0, 0, 1510, 1511, 3, 435, 217, 0, 1511, 1512, 3, 429, 214, 0, 1512, 1513, 3, 423, 211, 0, 1513, 1514, 3, 423, 211, 0, 1514, 1515, 3, 441, 220, 0, 1515, 1516, 3, 431, 215, 0, 1516, 282, 1, 0, 0, 0, 1517, 1518, 3, 435, 217, 0, 1518, 1519, 3, 429, 214, 0, 1519, 1520, 3, 445, 222, 0, 1520, 284, 1, 0, 0, 0, 1521, 1522, 3, 435, 217, 0, 1522, 1523, 3, 429, 214, 0, 1523, 1524, 3, 445, 222, 0, 1524, 1525, 3, 437, 218, 0, 1525, 286, 1, 0, 0, 0, 1526, 1527, 3, 437, 218, 0, 1527, 1528, 3, 401, 200, 0, 1528, 1529, 3, 425, 212, 0, 1529, 1530, 3, 431, 215, 0, 1530, 1531, 3, 423, 211, 0, 1531, 1532, 3, 409, 204, 0, 1532, 288, 1, 0, 0, 0, 1533, 1534, 3, 437, 218, 0, 1534, 1535, 3, 409, 204, 0, 1535, 1536, 3, 405, 202, 0, 1536, 1537, 3, 429, 214, 0, 1537, 1538, 3, 427, 213, 0, 1538, 1539, 3, 407, 203, 0, 1539, 290, 1, 0, 0, 0, 1540, 1541, 3, 437, 218, 0, 1541, 1542, 3, 409, 204, 0, 1542, 1543, 3, 423, 211, 0, 1543, 1544, 3, 409, 204, 0, 1544, 1545, 3, 405, 202, 0, 1545, 1546, 3, 439, 219, 0, 1546, 292, 1, 0, 0, 0, 1547, 1548, 3, 437, 218, 0, 1548, 1549, 3, 409, 204, 0, 1549, 1550, 3, 425, 212, 0, 1550, 1551, 3, 417, 208, 0, 1551, 294, 1, 0, 0, 0, 1552, 1553, 3, 437, 218, 0, 1553, 1554, 3, 409, 204, 0, 1554, 1555, 3, 427, 213, 0, 1555, 1556, 3, 407, 203, 0, 1556, 1557, 3, 437, 218, 0, 1557, 296, 1, 0, 0, 0, 1558, 1559, 3, 437, 218, 0, 1559, 1560, 3, 409, 204, 0, 1560, 1561, 3, 439, 219, 0, 1561, 298, 1, 0, 0, 0, 1562, 1563, 3, 437, 218, 0, 1563, 1564, 3, 409, 204, 0, 1564, 1565, 3, 439, 219, 0, 1565, 1566, 3, 439, 219, 0, 1566, 1567, 3, 417, 208, 0, 1567, 1568, 3, 427, 213, 0, 1568, 1569, 3, 413, 206, 0, 1569, 1570, 3, 437, 218, 0, 1570, 300, 1, 0, 0, 0, 1571, 1572, 3, 437, 218, 0, 1572, 1573, 3, 415, 207, 0, 1573, 1574, 3, 429, 214, 0, 1574, 1575, 3, 445, 222, 0, 1575, 302, 1, 0, 0, 0, 1576, 1577, 3, 437, 218, 0, 1577, 1578, 3, 429, 214, 0, 1578, 1579, 3, 441, 220, 0, 1579, 1580, 3, 435, 217, 0, 1580, 1581, 3, 405, 202, 0, 1581, 1582, 3, 409, 204, 0, 1582, 304, 1, 0, 0, 0, 1583, 1584, 3, 437, 218, 0, 1584, 1585, 3, 439, 219, 0, 1585, 1586, 3, 401, 200, 0, 1586, 1587, 3, 435, 217, 0, 1587, 1588, 3, 439, 219, 0, 1588, 306, 1, 0, 0, 0, 1589, 1590, 3, 437, 218, 0, 1590, 1591, 3, 439, 219, 0, 1591, 1592, 3, 429, 214, 0, 1592, 1593, 3, 431, 215, 0, 1593, 308, 1, 0, 0, 0, 1594, 1595, 3, 437, 218, 0, 1595, 1596, 3, 441, 220, 0, 1596, 1597, 3, 403, 201, 0, 1597, 1598, 3, 437, 218, 0, 1598, 1599, 3, 439, 219, 0, 1599, 1600, 3, 435, 217, 0, 1600, 1601, 3, 417, 208, 0, 1601, 1602, 3, 427, 213, 0, 1602, 1603, 3, 413, 206, 0, 1603, 310, 1, 0, 0, 0, 1604, 1605, 3, 437, 218, 0, 1605, 1606, 3, 449, 224, 0, 1606, 1607, 3, 427, 213, 0, 1607, 1608, 3, 405, 202, 0, 1608, 312, 1, 0, 0, 0, 1609, 1610, 3, 437, 218, 0, 1610, 1611, 3, 449, 224, 0, 1611, 1612, 3, 427, 213, 0, 1612, 1613, 3, 439, 219, 0, 1613, 1614, 3, 401, 200, 0, 1614, 1615, 3, 447, 223, 0, 1615, 314, 1, 0, 0, 0, 1616, 1617, 3, 437, 218, 0, 1617, 1618, 3, 449, 224, 0, 1618, 1619, 3, 437, 218, 0, 1619, 1620, 3, 439, 219, 0, 1620, 1621, 3, 409, 204, 0, 1621, 1622, 3, 425, 212, 0, 1622, 316, 1, 0, 0, 0, 1623, 1624, 3, 439, 219, 0, 1624, 1625, 3, 401, 200, 0, 1625, 1626, 3, 403, 201, 0, 1626, 1627, 3, 423, 211, 0, 1627, 1628, 3, 409, 204, 0, 1628, 318, 1, 0, 0, 0, 1629, 1630, 3, 439, 219, 0, 1630, 1631, 3, 401, 200, 0, 1631, 1632, 3, 403, 201, 0, 1632, 1633, 3, 423, 211, 0, 1633, 1634, 3, 409, 204, 0, 1634, 1635, 3, 437, 218, 0, 1635, 320, 1, 0, 0, 0, 1636, 1637, 3, 439, 219, 0, 1637, 1638, 3, 409, 204, 0, 1638, 1639, 3, 425, 212, 0, 1639, 1640, 3, 431, 215, 0, 1640, 1641, 3, 429, 214, 0, 1641, 1642, 3, 435, 217, 0, 1642, 1643, 3, 401, 200, 0, 1643, 1644, 3, 435, 217, 0, 1644, 1645, 3, 449, 224, 0, 1645, 322, 1, 0, 0, 0, 1646, 1647, 3, 439, 219, 0, 1647, 1648, 3, 409, 204, 0, 1648, 1649, 3, 437, 218, 0, 1649, 1650, 3, 439, 219, 0, 1650, 324, 1, 0, 0, 0, 1651, 1652, 3, 439, 219, 0, 1652, 1653, 3, 415, 207, 0, 1653, 1654, 3, 409, 204, 0, 1654, 1655, 3, 427, 213, 0, 1655, 326, 1, 0, 0, 0, 1656, 1657, 3, 439, 219, 0, 1657, 1658, 3, 417, 208, 0, 1658, 1659, 3, 409, 204, 0, 1659, 1660, 3, 437, 218, 0, 1660, 328, 1, 0, 0, 0, 1661, 1662, 3, 439, 219, 0, 1662, 1663, 3, 417, 208, 0, 1663, 1664, 3, 425, 212, 0, 1664, 1665, 3, 409, 204, 0, 1665, 1666, 3, 429, 214, 0, 1666, 1667, 3, 441, 220, 0, 1667, 1668, 3, 439, 219, 0, 1668, 330, 1, 0, 0, 0, 1669, 1670, 3, 439, 219, 0, 1670, 1671, 3, 417, 208, 0, 1671, 1672, 3, 425, 212, 0, 1672, 1673, 3, 409, 204, 0, 1673, 1674, 3, 437, 218, 0, 1674, 1675, 3, 439, 219, 0, 1675, 1676, 3, 401, 200, 0, 1676, 1677, 3, 425, 212, 0, 1677, 1678, 3, 431, 215, 0, 1678, 332, 1, 0, 0, 0, 1679, 1680, 3, 439, 219, 0, 1680, 1681, 3, 429, 214, 0, 1681, 334, 1, 0, 0, 0, 1682, 1683, 3, 439, 219, 0, 1683, 1684, 3, 429, 214, 0, 1684, 1685, 3, 431, 215, 0, 1685, 336, 1, 0, 0, 0, 1686, 1687, 3, 439, 219, 0, 1687, 1688, 3, 429, 214, 0, 1688, 1689, 3, 439, 219, 0, 1689, 1690, 3, 401, 200, 0, 1690, 1691, 3, 423, 211, 0, 1691, 1692, 3, 437, 218, 0, 1692, 338, 1, 0, 0, 0, 1693, 1694, 3, 439, 219, 0, 1694, 1695, 3, 435, 217, 0, 1695, 1696, 3, 401, 200, 0, 1696, 1697, 3, 417, 208, 0, 1697, 1698, 3, 423, 211, 0, 1698, 1699, 3, 417, 208, 0, 1699, 1700, 3, 427, 213, 0, 1700, 1701, 3, 413, 206, 0, 1701, 340, 1, 0, 0, 0, 1702, 1703, 3, 439, 219, 0, 1703, 1704, 3, 435, 217, 0, 1704, 1705, 3, 417, 208, 0, 1705, 1706, 3, 425, 212, 0, 1706, 342, 1, 0, 0, 0, 1707, 1708, 3, 439, 219, 0, 1708, 1709, 3, 435, 217, 0, 1709, 1710, 3, 441, 220, 0, 1710, 1711, 3, 427, 213, 0, 1711, 1712, 3, 405, 202, 0, 1712, 1713, 3, 401, 200, 0, 1713, 1714, 3, 439, 219, 0, 1714, 1715, 3, 409, 204, 0, 1715, 344, 1, 0, 0, 0, 1716, 1717, 3, 439, 219, 0, 1717, 1718, 3, 439, 219, 0, 1718, 1719, 3, 423, 211, 0, 1719, 346, 1, 0, 0, 0, 1720, 1721, 3, 439, 219, 0, 1721, 1722, 3, 449, 224, 0, 1722, 1723, 3, 431, 215, 0, 1723, 1724, 3, 409, 204, 0, 1724, 348, 1, 0, 0, 0, 1725, 1726, 3, 441, 220, 0, 1726, 1727, 3, 427, 213, 0, 1727, 1728, 3, 403, 201, 0, 1728, 1729, 3, 429, 214, 0, 1729, 1730, 3, 441, 220, 0, 1730, 1731, 3, 427, 213, 0, 1731, 1732, 3, 407, 203, 0, 1732, 1733, 3, 409, 204, 0, 1733, 1734, 3, 407, 203, 0, 1734, 350, 1, 0, 0, 0, 1735, 1736, 3, 441, 220, 0, 1736, 1737, 3, 427, 213, 0, 1737, 1738, 3, 417, 208, 0, 1738, 1739, 3, 429, 214, 0, 1739, 1740, 3, 427, 213, 0, 1740, 352, 1, 0, 0, 0, 1741, 1742, 3, 441, 220, 0, 1742, 1743, 3, 431, 215, 0, 1743, 1744, 3, 407, 203, 0, 1744, 1745, 3, 401, 200, 0, 1745, 1746, 3, 439, 219, 0, 1746, 1747, 3, 409, 204, 0, 1747, 354, 1, 0, 0, 0, 1748, 1749, 3, 441, 220, 0, 1749, 1750, 3, 437, 218, 0, 1750, 1751, 3, 409, 204, 0, 1751, 356, 1, 0, 0, 0, 1752, 1753, 3, 441, 220, 0, 1753, 1754, 3, 437, 218, 0, 1754, 1755, 3, 417, 208, 0, 1755, 1756, 3, 427, 213, 0, 1756, 1757, 3, 413, 206, 0, 1757, 358, 1, 0, 0, 0, 1758, 1759, 3, 441, 220, 0, 1759, 1760, 3, 441, 220, 0, 1760, 1761, 3, 417, 208, 0, 1761, 1762, 3, 407, 203, 0, 1762, 360, 1, 0, 0, 0, 1763, 1764, 3, 443, 221, 0, 1764, 1765, 3, 401, 200, 0, 1765, 1766, 3, 423, 211, 0, 1766, 1767, 3, 441, 220, 0, 1767, 1768, 3, 409, 204, 0, 1768, 1769, 3, 437, 218, 0, 1769, 362, 1, 0, 0, 0, 1770, 1771, 3, 443, 221, 0, 1771, 1772, 3, 417, 208, 0, 1772, 1773, 3, 409, 204, 0, 1773, 1774, 3, 445, 222, 0, 1774, 364, 1, 0, 0, 0, 1775, 1776, 3, 443, 221, 0, 1776, 1777, 3, 429, 214, 0, 1777, 1778, 3, 423, 211, 0, 1778, 1779, 3, 441, 220, 0, 1779, 1780, 3, 425, 212, 0, 1780, 1781, 3, 409, 204, 0, 1781, 366, 1, 0, 0, 0, 1782, 1783, 3, 445, 222, 0, 1783, 1784, 3, 401, 200, 0, 1784, 1785, 3, 439, 219, 0, 1785, 1786, 3, 405, 202, 0, 1786, 1787, 3, 415, 207, 0, 1787, 368, 1, 0, 0, 0, 1788, 1789, 3, 445, 222, 0, 1789, 1790, 3, 409, 204, 0, 1790, 1791, 3, 409, 204, 0, 1791, 1792, 3, 421, 210, 0, 1792, 370, 1, 0, 0, 0, 1793, 1794, 3, 445, 222, 0, 1794, 1795, 3, 415, 207, 0, 1795, 1796, 3, 409, 204, 0, 1796, 1797, 3, 427, 213, 0, 1797, 372, 1, 0, 0, 0, 1798, 1799, 3, 445, 222, 0, 1799, 1800, 3, 415, 207, 0, 1800, 1801, 3, 409, 204, 0, 1801, 1802, 3, 435, 217, 0, 1802, 1803, 3, 409, 204, 0, 1803, 374, 1, 0, 0, 0, 1804, 1805, 3, 445, 222, 0, 1805, 1806, 3, 417, 208, 0, 1806, 1807, 3, 427, 213, 0, 1807, 1808, 3, 407, 203, 0, 1808, 1809, 3, 429, 214, 0, 1809, 1810, 3, 445, 222, 0, 1810, 376, 1, 0, 0, 0, 1811, 1812, 3, 445, 222, 0, 1812, 1813, 3, 417, 208, 0, 1813, 1814, 3, 439, 219, 0, 1814, 1815, 3, 415, 207, 0, 1815, 378, 1, 0, 0, 0, 1816, 1817, 3, 449, 224, 0, 1817, 1818, 3, 409, 204, 0, 1818, 1819, 3, 401, 200, 0, 1819, 1820, 3, 435, 217, 0, 1820, 1827, 1, 0, 0, 0, 1821, 1822, 3, 449, 224, 0, 1822, 1823, 3, 449, 224, 0, 1823, 1824, 3, 449, 224, 0, 1824, 1825, 3, 449, 224, 0, 1825, 1827, 1, 0, 0, 0, 1826, 1816, 1, 0, 0, 0, 1826, 1821, 1, 0, 0, 0, 1827, 380, 1, 0, 0, 0, 1828, 1829, 5, 102, 0, 0, 1829, 1830, 5, 97, 0, 0, 1830, 1831, 5, 108, 0, 0, 1831, 1832, 5, 115, 0, 0, 1832, 1833, 5, 101, 0, 0, 1833, 382, 1, 0, 0, 0, 1834, 1835, 5, 116, 0, 0, 1835, 1836, 5, 114, 0, 0, 1836, 1837, 5, 117, 0, 0, 1837, 1838, 5, 101, 0, 0, 1838, 384, 1, 0, 0, 0, 1839, 1840, 3, 467, 233, 0, 1840, 1841, 3, 403, 201, 0, 1841, 1870, 1, 0, 0, 0, 1842, 1843, 3, 467, 233, 0, 1843, 1844, 3, 411, 205, 0, 1844, 1870, 1, 0, 0, 0, 1845, 1846, 3, 467, 233, 0, 1846, 1847, 3, 435, 217, 0, 1847, 1870, 1, 0, 0, 0, 1848, 1849, 3, 467, 233, 0, 1849, 1850, 3, 427, 213, 0, 1850, 1870, 1, 0, 0, 0, 1851, 1852, 3, 467, 233, 0, 1852, 1853, 3, 439, 219, 0, 1853, 1870, 1, 0, 0, 0, 1854, 1855, 3, 467, 233, 0, 1855, 1856, 5, 48, 0, 0, 1856, 1870, 1, 0, 0, 0, 1857, 1858, 3, 467, 233, 0, 1858, 1859, 3, 401, 200, 0, 1859, 1870, 1, 0, 0, 0, 1860, 1861, 3, 467, 233, 0, 1861, 1862, 3, 443, 221, 0, 1862, 1870, 1, 0, 0, 0, 1863, 1864, 3, 467, 233, 0, 1864, 1865, 3, 467, 233, 0, 1865, 1870, 1, 0, 0, 0, 1866, 1867, 3, 467, 233, 0, 1867, 1868, 3, 521, 260, 0, 1868, 1870, 1, 0, 0, 0, 1869, 1839, 1, 0, 0, 0, 1869, 1842, 1, 0, 0, 0, 1869, 1845, 1, 0, 0, 0, 1869, 1848, 1, 0, 0, 0, 1869, 1851, 1, 0, 0, 0, 1869, 1854, 1, 0, 0, 0, 1869, 1857, 1, 0, 0, 0, 1869, 1860, 1, 0, 0, 0, 1869, 1863, 1, 0, 0, 0, 1869, 1866, 1, 0, 0, 0, 1870, 386, 1, 0, 0, 0, 1871, 1872, 3, 467, 233, 0, 1872, 1873, 3, 403, 201, 0, 1873, 1902, 1, 0, 0, 0, 1874, 1875, 3, 467, 233, 0, 1875, 1876, 3, 411, 205, 0, 1876, 1902, 1, 0, 0, 0, 1877, 1878, 3, 467, 233, 0, 1878, 1879, 3, 435, 217, 0, 1879, 1902, 1, 0, 0, 0, 1880, 1881, 3, 467, 233, 0, 1881, 1882, 3, 427, 213, 0, 1882, 1902, 1, 0, 0, 0, 1883, 1884, 3, 467, 233, 0, 1884, 1885, 3, 439, 219, 0, 1885, 1902, 1, 0, 0, 0, 1886, 1887, 3, 467, 233, 0, 1887, 1888, 5, 48, 0, 0, 1888, 1902, 1, 0, 0, 0, 1889, 1890, 3, 467, 233, 0, 1890, 1891, 3, 401, 200, 0, 1891, 1902, 1, 0, 0, 0, 1892, 1893, 3, 467, 233, 0, 1893, 1894, 3, 443, 221, 0, 1894, 1902, 1, 0, 0, 0, 1895, 1896, 3, 467, 233, 0, 1896, 1897, 3, 467, 233, 0, 1897, 1902, 1, 0, 0, 0, 1898, 1899, 3, 467, 233, 0, 1899, 1900, 3, 519, 259, 0, 1900, 1902, 1, 0, 0, 0, 1901, 1871, 1, 0, 0, 0, 1901, 1874, 1, 0, 0, 0, 1901, 1877, 1, 0, 0, 0, 1901, 1880, 1, 0, 0, 0, 1901, 1883, 1, 0, 0, 0, 1901, 1886, 1, 0, 0, 0, 1901, 1889, 1, 0, 0, 0, 1901, 1892, 1, 0, 0, 0, 1901, 1895, 1, 0, 0, 0, 1901, 1898, 1, 0, 0, 0, 1902, 388, 1, 0, 0, 0, 1903, 1907, 3, 453, 226, 0, 1904, 1907, 3, 537, 268, 0, 1905, 1907, 3, 477, 238, 0, 1906, 1903, 1, 0, 0, 0, 1906, 1904, 1, 0, 0, 0, 1906, 1905, 1, 0, 0, 0, 1907, 1914, 1, 0, 0, 0, 1908, 1913, 3, 453, 226, 0, 1909, 1913, 3, 537, 268, 0, 1910, 1913, 3, 457, 228, 0, 1911, 1913, 3, 477, 238, 0, 1912, 1908, 1, 0, 0, 0, 1912, 1909, 1, 0, 0, 0, 1912, 1910, 1, 0, 0, 0, 1912, 1911, 1, 0, 0, 0, 1913, 1916, 1, 0, 0, 0, 1914, 1912, 1, 0, 0, 0, 1914, 1915, 1, 0, 0, 0, 1915, 1944, 1, 0, 0, 0, 1916, 1914, 1, 0, 0, 0, 1917, 1925, 3, 465, 232, 0, 1918, 1924, 8, 0, 0, 0, 1919, 1924, 3, 385, 192, 0, 1920, 1921, 3, 465, 232, 0, 1921, 1922, 3, 465, 232, 0, 1922, 1924, 1, 0, 0, 0, 1923, 1918, 1, 0, 0, 0, 1923, 1919, 1, 0, 0, 0, 1923, 1920, 1, 0, 0, 0, 1924, 1927, 1, 0, 0, 0, 1925, 1923, 1, 0, 0, 0, 1925, 1926, 1, 0, 0, 0, 1926, 1928, 1, 0, 0, 0, 1927, 1925, 1, 0, 0, 0, 1928, 1929, 3, 465, 232, 0, 1929, 1944, 1, 0, 0, 0, 1930, 1938, 3, 519, 259, 0, 1931, 1937, 8, 1, 0, 0, 1932, 1937, 3, 387, 193, 0, 1933, 1934, 3, 519, 259, 0, 1934, 1935, 3, 519, 259, 0, 1935, 1937, 1, 0, 0, 0, 1936, 1931, 1, 0, 0, 0, 1936, 1932, 1, 0, 0, 0, 1936, 1933, 1, 0, 0, 0, 1937, 1940, 1, 0, 0, 0, 1938, 1936, 1, 0, 0, 0, 1938, 1939, 1, 0, 0, 0, 1939, 1941, 1, 0, 0, 0, 1940, 1938, 1, 0, 0, 0, 1941, 1942, 3, 519, 259, 0, 1942, 1944, 1, 0, 0, 0, 1943, 1906, 1, 0, 0, 0, 1943, 1917, 1, 0, 0, 0, 1943, 1930, 1, 0, 0, 0, 1944, 390, 1, 0, 0, 0, 1945, 1946, 3, 397, 198, 0, 1946, 1950, 3, 479, 239, 0, 1947, 1949, 3, 459, 229, 0, 1948, 1947, 1, 0, 0, 0, 1949, 1952, 1, 0, 0, 0, 1950, 1948, 1, 0, 0, 0, 1950, 1951, 1, 0, 0, 0, 1951, 1955, 1, 0, 0, 0, 1952, 1950, 1, 0, 0, 0, 1953, 1956, 3, 431, 215, 0, 1954, 1956, 3, 409, 204, 0, 1955, 1953, 1, 0, 0, 0, 1955, 1954, 1, 0, 0, 0, 1956, 1959, 1, 0, 0, 0, 1957, 1960, 3, 515, 257, 0, 1958, 1960, 3, 475, 237, 0, 1959, 1957, 1, 0, 0, 0, 1959, 1958, 1, 0, 0, 0, 1959, 1960, 1, 0, 0, 0, 1960, 1962, 1, 0, 0, 0, 1961, 1963, 3, 457, 228, 0, 1962, 1961, 1, 0, 0, 0, 1963, 1964, 1, 0, 0, 0, 1964, 1962, 1, 0, 0, 0, 1964, 1965, 1, 0, 0, 0, 1965, 2022, 1, 0, 0, 0, 1966, 1969, 3, 397, 198, 0, 1967, 1970, 3, 431, 215, 0, 1968, 1970, 3, 409, 204, 0, 1969, 1967, 1, 0, 0, 0, 1969, 1968, 1, 0, 0, 0, 1970, 1973, 1, 0, 0, 0, 1971, 1974, 3, 515, 257, 0, 1972, 1974, 3, 475, 237, 0, 1973, 1971, 1, 0, 0, 0, 1973, 1972, 1, 0, 0, 0, 1973, 1974, 1, 0, 0, 0, 1974, 1976, 1, 0, 0, 0, 1975, 1977, 3, 457, 228, 0, 1976, 1975, 1, 0, 0, 0, 1977, 1978, 1, 0, 0, 0, 1978, 1976, 1, 0, 0, 0, 1978, 1979, 1, 0, 0, 0, 1979, 2022, 1, 0, 0, 0, 1980, 1981, 3, 395, 197, 0, 1981, 1985, 3, 479, 239, 0, 1982, 1984, 3, 457, 228, 0, 1983, 1982, 1, 0, 0, 0, 1984, 1987, 1, 0, 0, 0, 1985, 1983, 1, 0, 0, 0, 1985, 1986, 1, 0, 0, 0, 1986, 1988, 1, 0, 0, 0, 1987, 1985, 1, 0, 0, 0, 1988, 1991, 3, 409, 204, 0, 1989, 1992, 3, 515, 257, 0, 1990, 1992, 3, 475, 237, 0, 1991, 1989, 1, 0, 0, 0, 1991, 1990, 1, 0, 0, 0, 1991, 1992, 1, 0, 0, 0, 1992, 1994, 1, 0, 0, 0, 1993, 1995, 3, 457, 228, 0, 1994, 1993, 1, 0, 0, 0, 1995, 1996, 1, 0, 0, 0, 1996, 1994, 1, 0, 0, 0, 1996, 1997, 1, 0, 0, 0, 1997, 2022, 1, 0, 0, 0, 1998, 1999, 3, 479, 239, 0, 1999, 2000, 3, 395, 197, 0, 2000, 2003, 3, 409, 204, 0, 2001, 2004, 3, 515, 257, 0, 2002, 2004, 3, 475, 237, 0, 2003, 2001, 1, 0, 0, 0, 2003, 2002, 1, 0, 0, 0, 2003, 2004, 1, 0, 0, 0, 2004, 2006, 1, 0, 0, 0, 2005, 2007, 3, 457, 228, 0, 2006, 2005, 1, 0, 0, 0, 2007, 2008, 1, 0, 0, 0, 2008, 2006, 1, 0, 0, 0, 2008, 2009, 1, 0, 0, 0, 2009, 2022, 1, 0, 0, 0, 2010, 2011, 3, 395, 197, 0, 2011, 2014, 3, 409, 204, 0, 2012, 2015, 3, 515, 257, 0, 2013, 2015, 3, 475, 237, 0, 2014, 2012, 1, 0, 0, 0, 2014, 2013, 1, 0, 0, 0, 2014, 2015, 1, 0, 0, 0, 2015, 2017, 1, 0, 0, 0, 2016, 2018, 3, 457, 228, 0, 2017, 2016, 1, 0, 0, 0, 2018, 2019, 1, 0, 0, 0, 2019, 2017, 1, 0, 0, 0, 2019, 2020, 1, 0, 0, 0, 2020, 2022, 1, 0, 0, 0, 2021, 1945, 1, 0, 0, 0, 2021, 1966, 1, 0, 0, 0, 2021, 1980, 1, 0, 0, 0, 2021, 1998, 1, 0, 0, 0, 2021, 2010, 1, 0, 0, 0, 2022, 392, 1, 0, 0, 0, 2023, 2025, 5, 48, 0, 0, 2024, 2026, 3, 455, 227, 0, 2025, 2024, 1, 0, 0, 0, 2026, 2027, 1, 0, 0, 0, 2027, 2025, 1, 0, 0, 0, 2027, 2028, 1, 0, 0, 0, 2028, 394, 1, 0, 0, 0, 2029, 2031, 3, 457, 228, 0, 2030, 2029, 1, 0, 0, 0, 2031, 2032, 1, 0, 0, 0, 2032, 2030, 1, 0, 0, 0, 2032, 2033, 1, 0, 0, 0, 2033, 396, 1, 0, 0, 0, 2034, 2035, 5, 48, 0, 0, 2035, 2037, 3, 447, 223, 0, 2036, 2038, 3, 459, 229, 0, 2037, 2036, 1, 0, 0, 0, 2038, 2039, 1, 0, 0, 0, 2039, 2037, 1, 0, 0, 0, 2039, 2040, 1, 0, 0, 0, 2040, 398, 1, 0, 0, 0, 2041, 2049, 3, 521, 260, 0, 2042, 2048, 8, 2, 0, 0, 2043, 2048, 3, 385, 192, 0, 2044, 2045, 3, 521, 260, 0, 2045, 2046, 3, 521, 260, 0, 2046, 2048, 1, 0, 0, 0, 2047, 2042, 1, 0, 0, 0, 2047, 2043, 1, 0, 0, 0, 2047, 2044, 1, 0, 0, 0, 2048, 2051, 1, 0, 0, 0, 2049, 2047, 1, 0, 0, 0, 2049, 2050, 1, 0, 0, 0, 2050, 2052, 1, 0, 0, 0, 2051, 2049, 1, 0, 0, 0, 2052, 2053, 3, 521, 260, 0, 2053, 400, 1, 0, 0, 0, 2054, 2055, 7, 3, 0, 0, 2055, 402, 1, 0, 0, 0, 2056, 2057, 7, 4, 0, 0, 2057, 404, 1, 0, 0, 0, 2058, 2059, 7, 5, 0, 0, 2059, 406, 1, 0, 0, 0, 2060, 2061, 7, 6, 0, 0, 2061, 408, 1, 0, 0, 0, 2062, 2063, 7, 7, 0, 0, 2063, 410, 1, 0, 0, 0, 2064, 2065, 7, 8, 0, 0, 2065, 412, 1, 0, 0, 0, 2066, 2067, 7, 9, 0, 0, 2067, 414, 1, 0, 0, 0, 2068, 2069, 7, 10, 0, 0, 2069, 416, 1, 0, 0, 0, 2070, 2071, 7, 11, 0, 0, 2071, 418, 1, 0, 0, 0, 2072, 2073, 7, 12, 0, 0, 2073, 420, 1, 0, 0, 0, 2074, 2075, 7, 13, 0, 0, 2075, 422, 1, 0, 0, 0, 2076, 2077, 7, 14, 0, 0, 2077, 424, 1, 0, 0, 0, 2078, 2079, 7, 15, 0, 0, 2079, 426, 1, 0, 0, 0, 2080, 2081, 7, 16, 0, 0, 2081, 428, 1, 0, 0, 0, 2082, 2083, 7, 17, 0, 0, 2083, 430, 1, 0, 0, 0, 2084, 2085, 7, 18, 0, 0, 2085, 432, 1, 0, 0, 0, 2086, 2087, 7, 19, 0, 0, 2087, 434, 1, 0, 0, 0, 2088, 2089, 7, 20, 0, 0, 2089, 436, 1, 0, 0, 0, 2090, 2091, 7, 21, 0, 0, 2091, 438, 1, 0, 0, 0, 2092, 2093, 7, 22, 0, 0, 2093, 440, 1, 0, 0, 0, 2094, 2095, 7, 23, 0, 0, 2095, 442, 1, 0, 0, 0, 2096, 2097, 7, 24, 0, 0, 2097, 444, 1, 0, 0, 0, 2098, 2099, 7, 25, 0, 0, 2099, 446, 1, 0, 0, 0, 2100, 2101, 7, 26, 0, 0, 2101, 448, 1, 0, 0, 0, 2102, 2103, 7, 27, 0, 0, 2103, 450, 1, 0, 0, 0, 2104, 2105, 7, 28, 0, 0, 2105, 452, 1, 0, 0, 0, 2106, 2107, 7, 29, 0, 0, 2107, 454, 1, 0, 0, 0, 2108, 2109, 7, 30, 0, 0, 2109, 456, 1, 0, 0, 0, 2110, 2111, 7, 31, 0, 0, 2111, 458, 1, 0, 0, 0, 2112, 2113, 7, 32, 0, 0, 2113, 460, 1, 0, 0, 0, 2114, 2115, 5, 45, 0, 0, 2115, 2116, 5, 62, 0, 0, 2116, 462, 1, 0, 0, 0, 2117, 2118, 5, 42, 0, 0, 2118, 464, 1, 0, 0, 0, 2119, 2120, 5, 96, 0, 0, 2120, 466, 1, 0, 0, 0, 2121, 2122, 5, 92, 0, 0, 2122, 468, 1, 0, 0, 0, 2123, 2124, 5, 58, 0, 0, 2124, 470, 1, 0, 0, 0, 2125, 2126, 5, 44, 0, 0, 2126, 472, 1, 0, 0, 0, 2127, 2128, 5, 124, 0, 0, 2128, 2129, 5, 124, 0, 0, 2129, 474, 1, 0, 0, 0, 2130, 2131, 5, 45, 0, 0, 2131, 476, 1, 0, 0, 0, 2132, 2133, 5, 36, 0, 0, 2133, 478, 1, 0, 0, 0, 2134, 2135, 5, 46, 0, 0, 2135, 480, 1, 0, 0, 0, 2136, 2137, 5, 61, 0, 0, 2137, 2138, 5, 61, 0, 0, 2138, 482, 1, 0, 0, 0, 2139, 2140, 5, 61, 0, 0, 2140, 484, 1, 0, 0, 0, 2141, 2142, 5, 62, 0, 0, 2142, 2143, 5, 61, 0, 0, 2143, 486, 1, 0, 0, 0, 2144, 2145, 5, 62, 0, 0, 2145, 488, 1, 0, 0, 0, 2146, 2147, 5, 35, 0, 0, 2147, 490, 1, 0, 0, 0, 2148, 2149, 5, 126, 0, 0, 2149, 2150, 5, 42, 0, 0, 2150, 492, 1, 0, 0, 0, 2151, 2152, 5, 61, 0, 0, 2152, 2153, 5, 126, 0, 0, 2153, 2154, 5, 42, 0, 0, 2154, 494, 1, 0, 0, 0, 2155, 2156, 5, 123, 0, 0, 2156, 496, 1, 0, 0, 0, 2157, 2158, 5, 91, 0, 0, 2158, 498, 1, 0, 0, 0, 2159, 2160, 5, 40, 0, 0, 2160, 500, 1, 0, 0, 0, 2161, 2162, 5, 60, 0, 0, 2162, 2163, 5, 61, 0, 0, 2163, 502, 1, 0, 0, 0, 2164, 2165, 5, 60, 0, 0, 2165, 504, 1, 0, 0, 0, 2166, 2167, 5, 33, 0, 0, 2167, 2171, 5, 61, 0, 0, 2168, 2169, 5, 60, 0, 0, 2169, 2171, 5, 62, 0, 0, 2170, 2166, 1, 0, 0, 0, 2170, 2168, 1, 0, 0, 0, 2171, 506, 1, 0, 0, 0, 2172, 2173, 5, 33, 0, 0, 2173, 2174, 5, 126, 0, 0, 2174, 2175, 5, 42, 0, 0, 2175, 508, 1, 0, 0, 0, 2176, 2177, 5, 33, 0, 0, 2177, 2178, 5, 126, 0, 0, 2178, 510, 1, 0, 0, 0, 2179, 2180, 5, 63, 0, 0, 2180, 2181, 5, 63, 0, 0, 2181, 512, 1, 0, 0, 0, 2182, 2183, 5, 37, 0, 0, 2183, 514, 1, 0, 0, 0, 2184, 2185, 5, 43, 0, 0, 2185, 516, 1, 0, 0, 0, 2186, 2187, 5, 63, 0, 0, 2187, 518, 1, 0, 0, 0, 2188, 2189, 5, 34, 0, 0, 2189, 520, 1, 0, 0, 0, 2190, 2191, 5, 39, 0, 0, 2191, 522, 1, 0, 0, 0, 2192, 2193, 5, 126, 0, 0, 2193, 524, 1, 0, 0, 0, 2194, 2195, 5, 61, 0, 0, 2195, 2196, 5, 126, 0, 0, 2196, 526, 1, 0, 0, 0, 2197, 2198, 5, 125, 0, 0, 2198, 528, 1, 0, 0, 0, 2199, 2200, 5, 93, 0, 0, 2200, 530, 1, 0, 0, 0, 2201, 2202, 5, 41, 0, 0, 2202, 532, 1, 0, 0, 0, 2203, 2204, 5, 59, 0, 0, 2204, 534, 1, 0, 0, 0, 2205, 2206, 5, 47, 0, 0, 2206, 536, 1, 0, 0, 0, 2207, 2208, 5, 95, 0, 0, 2208, 538, 1, 0, 0, 0, 2209, 2210, 5, 47, 0, 0, 2210, 2211, 5, 42, 0, 0, 2211, 2215, 1, 0, 0, 0, 2212, 2214, 9, 0, 0, 0, 2213, 2212, 1, 0, 0, 0, 2214, 2217, 1, 0, 0, 0, 2215, 2216, 1, 0, 0, 0, 2215, 2213, 1, 0, 0, 0, 2216, 2218, 1, 0, 0, 0, 2217, 2215, 1, 0, 0, 0, 2218, 2219, 5, 42, 0, 0, 2219, 2220, 5, 47, 0, 0, 2220, 2221, 1, 0, 0, 0, 2221, 2222, 6, 269, 0, 0, 2222, 540, 1, 0, 0, 0, 2223, 2224, 5, 45, 0, 0, 2224, 2225, 5, 45, 0, 0, 2225, 2229, 1, 0, 0, 0, 2226, 2228, 8, 33, 0, 0, 2227, 2226, 1, 0, 0, 0, 2228, 2231, 1, 0, 0, 0, 2229, 2227, 1, 0, 0, 0, 2229, 2230, 1, 0, 0, 0, 2230, 2233, 1, 0, 0, 0, 2231, 2229, 1, 0, 0, 0, 2232, 2234, 7, 34, 0, 0, 2233, 2232, 1, 0, 0, 0, 2234, 2235, 1, 0, 0, 0, 2235, 2236, 6, 270, 0, 0, 2236, 542, 1, 0, 0, 0, 2237, 2238, 7, 35, 0, 0, 2238, 2239, 1, 0, 0, 0, 2239, 2240, 6, 271, 1, 0, 2240, 544, 1, 0, 0, 0, 38, 0, 607, 1112, 1826, 1869, 1901, 1906, 1912, 1914, 1923, 1925, 1936, 1938, 1943, 1950, 1955, 1959, 1964, 1969, 1973, 1978, 1985, 1991, 1996, 2003, 2008, 2014, 2019, 2021, 2027, 2032, 2039, 2047, 2049, 2170, 2215, 2229, 2233, 2, 6, 0, 0, 0, 1, 0] \ No newline at end of file diff --git a/posthog/hogql/grammar/HogQLLexer.py b/posthog/hogql/grammar/HogQLLexer.py index acbadf74fdc53..735fe8fc21431 100644 --- a/posthog/hogql/grammar/HogQLLexer.py +++ b/posthog/hogql/grammar/HogQLLexer.py @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,0,242,2222,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7, + 4,0,242,2241,6,-1,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, @@ -167,737 +167,746 @@ def serializedATN(): 1,191,1,191,1,191,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192, 1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192, 1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192,1,192, - 3,192,1870,8,192,1,193,1,193,1,193,3,193,1875,8,193,1,193,1,193, - 1,193,1,193,5,193,1881,8,193,10,193,12,193,1884,9,193,1,193,1,193, - 1,193,1,193,1,193,1,193,5,193,1892,8,193,10,193,12,193,1895,9,193, - 1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,5,193,1905,8,193, - 10,193,12,193,1908,9,193,1,193,1,193,3,193,1912,8,193,1,194,1,194, - 1,194,5,194,1917,8,194,10,194,12,194,1920,9,194,1,194,1,194,3,194, - 1924,8,194,1,194,1,194,3,194,1928,8,194,1,194,4,194,1931,8,194,11, - 194,12,194,1932,1,194,1,194,1,194,3,194,1938,8,194,1,194,1,194,3, - 194,1942,8,194,1,194,4,194,1945,8,194,11,194,12,194,1946,1,194,1, - 194,1,194,5,194,1952,8,194,10,194,12,194,1955,9,194,1,194,1,194, - 1,194,3,194,1960,8,194,1,194,4,194,1963,8,194,11,194,12,194,1964, - 1,194,1,194,1,194,1,194,1,194,3,194,1972,8,194,1,194,4,194,1975, - 8,194,11,194,12,194,1976,1,194,1,194,1,194,1,194,3,194,1983,8,194, - 1,194,4,194,1986,8,194,11,194,12,194,1987,3,194,1990,8,194,1,195, - 1,195,4,195,1994,8,195,11,195,12,195,1995,1,196,4,196,1999,8,196, - 11,196,12,196,2000,1,197,1,197,1,197,4,197,2006,8,197,11,197,12, - 197,2007,1,198,1,198,1,198,1,198,1,198,1,198,5,198,2016,8,198,10, - 198,12,198,2019,9,198,1,198,1,198,1,199,1,199,1,199,1,199,1,199, - 1,199,5,199,2029,8,199,10,199,12,199,2032,9,199,1,199,1,199,1,200, - 1,200,1,201,1,201,1,202,1,202,1,203,1,203,1,204,1,204,1,205,1,205, - 1,206,1,206,1,207,1,207,1,208,1,208,1,209,1,209,1,210,1,210,1,211, - 1,211,1,212,1,212,1,213,1,213,1,214,1,214,1,215,1,215,1,216,1,216, - 1,217,1,217,1,218,1,218,1,219,1,219,1,220,1,220,1,221,1,221,1,222, - 1,222,1,223,1,223,1,224,1,224,1,225,1,225,1,226,1,226,1,227,1,227, - 1,228,1,228,1,229,1,229,1,230,1,230,1,230,1,231,1,231,1,232,1,232, - 1,233,1,233,1,234,1,234,1,235,1,235,1,236,1,236,1,236,1,237,1,237, - 1,238,1,238,1,239,1,239,1,240,1,240,1,240,1,241,1,241,1,242,1,242, - 1,242,1,243,1,243,1,244,1,244,1,245,1,245,1,245,1,246,1,246,1,246, - 1,246,1,247,1,247,1,248,1,248,1,249,1,249,1,250,1,250,1,250,1,251, - 1,251,1,252,1,252,1,252,1,252,3,252,2152,8,252,1,253,1,253,1,253, - 1,253,1,254,1,254,1,254,1,255,1,255,1,255,1,256,1,256,1,257,1,257, - 1,258,1,258,1,259,1,259,1,260,1,260,1,261,1,261,1,262,1,262,1,262, - 1,263,1,263,1,264,1,264,1,265,1,265,1,266,1,266,1,267,1,267,1,268, - 1,268,1,269,1,269,1,269,1,269,5,269,2195,8,269,10,269,12,269,2198, - 9,269,1,269,1,269,1,269,1,269,1,269,1,270,1,270,1,270,1,270,5,270, - 2209,8,270,10,270,12,270,2212,9,270,1,270,3,270,2215,8,270,1,270, - 1,270,1,271,1,271,1,271,1,271,1,2196,0,272,1,1,3,2,5,3,7,4,9,5,11, - 6,13,7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17, - 35,18,37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28, - 57,29,59,30,61,31,63,32,65,33,67,34,69,35,71,36,73,37,75,38,77,39, - 79,40,81,41,83,42,85,43,87,44,89,45,91,46,93,47,95,48,97,49,99,50, - 101,51,103,52,105,53,107,54,109,55,111,56,113,57,115,58,117,59,119, - 60,121,61,123,62,125,63,127,64,129,65,131,66,133,67,135,68,137,69, - 139,70,141,71,143,72,145,73,147,74,149,75,151,76,153,77,155,78,157, - 79,159,80,161,81,163,82,165,83,167,84,169,85,171,86,173,87,175,88, - 177,89,179,90,181,91,183,92,185,93,187,94,189,95,191,96,193,97,195, - 98,197,99,199,100,201,101,203,102,205,103,207,104,209,105,211,106, - 213,107,215,108,217,109,219,110,221,111,223,112,225,113,227,114, - 229,115,231,116,233,117,235,118,237,119,239,120,241,121,243,122, - 245,123,247,124,249,125,251,126,253,127,255,128,257,129,259,130, - 261,131,263,132,265,133,267,134,269,135,271,136,273,137,275,138, - 277,139,279,140,281,141,283,142,285,143,287,144,289,145,291,146, - 293,147,295,148,297,149,299,150,301,151,303,152,305,153,307,154, - 309,155,311,156,313,157,315,158,317,159,319,160,321,161,323,162, - 325,163,327,164,329,165,331,166,333,167,335,168,337,169,339,170, - 341,171,343,172,345,173,347,174,349,175,351,176,353,177,355,178, - 357,179,359,180,361,181,363,182,365,183,367,184,369,185,371,186, - 373,187,375,188,377,189,379,190,381,191,383,192,385,193,387,194, - 389,195,391,196,393,197,395,198,397,199,399,200,401,0,403,0,405, - 0,407,0,409,0,411,0,413,0,415,0,417,0,419,0,421,0,423,0,425,0,427, - 0,429,0,431,0,433,0,435,0,437,0,439,0,441,0,443,0,445,0,447,0,449, - 0,451,0,453,0,455,0,457,0,459,0,461,201,463,202,465,203,467,204, - 469,205,471,206,473,207,475,208,477,209,479,210,481,211,483,212, - 485,213,487,214,489,215,491,216,493,217,495,218,497,219,499,220, - 501,221,503,222,505,223,507,224,509,225,511,226,513,227,515,228, - 517,229,519,230,521,231,523,232,525,233,527,234,529,235,531,236, - 533,237,535,238,537,239,539,240,541,241,543,242,1,0,37,2,0,92,92, - 96,96,2,0,34,34,92,92,2,0,39,39,92,92,2,0,92,92,125,125,2,0,65,65, - 97,97,2,0,66,66,98,98,2,0,67,67,99,99,2,0,68,68,100,100,2,0,69,69, - 101,101,2,0,70,70,102,102,2,0,71,71,103,103,2,0,72,72,104,104,2, - 0,73,73,105,105,2,0,74,74,106,106,2,0,75,75,107,107,2,0,76,76,108, - 108,2,0,77,77,109,109,2,0,78,78,110,110,2,0,79,79,111,111,2,0,80, - 80,112,112,2,0,81,81,113,113,2,0,82,82,114,114,2,0,83,83,115,115, - 2,0,84,84,116,116,2,0,85,85,117,117,2,0,86,86,118,118,2,0,87,87, - 119,119,2,0,88,88,120,120,2,0,89,89,121,121,2,0,90,90,122,122,2, - 0,65,90,97,122,1,0,48,55,1,0,48,57,3,0,48,57,65,70,97,102,2,0,10, - 10,13,13,2,1,10,10,13,13,2,0,9,13,32,32,2252,0,1,1,0,0,0,0,3,1,0, - 0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0, - 0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0, - 0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0, - 0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0, - 0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0, - 0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1,0,0,0,0,61,1,0,0,0,0,63,1,0,0, - 0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1,0,0,0,0,71,1,0,0,0,0,73,1,0,0, - 0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1,0,0,0,0,81,1,0,0,0,0,83,1,0,0, - 0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1,0,0,0,0,91,1,0,0,0,0,93,1,0,0, - 0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1,0,0,0,0,101,1,0,0,0,0,103,1,0, - 0,0,0,105,1,0,0,0,0,107,1,0,0,0,0,109,1,0,0,0,0,111,1,0,0,0,0,113, - 1,0,0,0,0,115,1,0,0,0,0,117,1,0,0,0,0,119,1,0,0,0,0,121,1,0,0,0, - 0,123,1,0,0,0,0,125,1,0,0,0,0,127,1,0,0,0,0,129,1,0,0,0,0,131,1, - 0,0,0,0,133,1,0,0,0,0,135,1,0,0,0,0,137,1,0,0,0,0,139,1,0,0,0,0, - 141,1,0,0,0,0,143,1,0,0,0,0,145,1,0,0,0,0,147,1,0,0,0,0,149,1,0, - 0,0,0,151,1,0,0,0,0,153,1,0,0,0,0,155,1,0,0,0,0,157,1,0,0,0,0,159, - 1,0,0,0,0,161,1,0,0,0,0,163,1,0,0,0,0,165,1,0,0,0,0,167,1,0,0,0, - 0,169,1,0,0,0,0,171,1,0,0,0,0,173,1,0,0,0,0,175,1,0,0,0,0,177,1, - 0,0,0,0,179,1,0,0,0,0,181,1,0,0,0,0,183,1,0,0,0,0,185,1,0,0,0,0, - 187,1,0,0,0,0,189,1,0,0,0,0,191,1,0,0,0,0,193,1,0,0,0,0,195,1,0, - 0,0,0,197,1,0,0,0,0,199,1,0,0,0,0,201,1,0,0,0,0,203,1,0,0,0,0,205, - 1,0,0,0,0,207,1,0,0,0,0,209,1,0,0,0,0,211,1,0,0,0,0,213,1,0,0,0, - 0,215,1,0,0,0,0,217,1,0,0,0,0,219,1,0,0,0,0,221,1,0,0,0,0,223,1, - 0,0,0,0,225,1,0,0,0,0,227,1,0,0,0,0,229,1,0,0,0,0,231,1,0,0,0,0, - 233,1,0,0,0,0,235,1,0,0,0,0,237,1,0,0,0,0,239,1,0,0,0,0,241,1,0, - 0,0,0,243,1,0,0,0,0,245,1,0,0,0,0,247,1,0,0,0,0,249,1,0,0,0,0,251, - 1,0,0,0,0,253,1,0,0,0,0,255,1,0,0,0,0,257,1,0,0,0,0,259,1,0,0,0, - 0,261,1,0,0,0,0,263,1,0,0,0,0,265,1,0,0,0,0,267,1,0,0,0,0,269,1, - 0,0,0,0,271,1,0,0,0,0,273,1,0,0,0,0,275,1,0,0,0,0,277,1,0,0,0,0, - 279,1,0,0,0,0,281,1,0,0,0,0,283,1,0,0,0,0,285,1,0,0,0,0,287,1,0, - 0,0,0,289,1,0,0,0,0,291,1,0,0,0,0,293,1,0,0,0,0,295,1,0,0,0,0,297, - 1,0,0,0,0,299,1,0,0,0,0,301,1,0,0,0,0,303,1,0,0,0,0,305,1,0,0,0, - 0,307,1,0,0,0,0,309,1,0,0,0,0,311,1,0,0,0,0,313,1,0,0,0,0,315,1, - 0,0,0,0,317,1,0,0,0,0,319,1,0,0,0,0,321,1,0,0,0,0,323,1,0,0,0,0, - 325,1,0,0,0,0,327,1,0,0,0,0,329,1,0,0,0,0,331,1,0,0,0,0,333,1,0, - 0,0,0,335,1,0,0,0,0,337,1,0,0,0,0,339,1,0,0,0,0,341,1,0,0,0,0,343, - 1,0,0,0,0,345,1,0,0,0,0,347,1,0,0,0,0,349,1,0,0,0,0,351,1,0,0,0, - 0,353,1,0,0,0,0,355,1,0,0,0,0,357,1,0,0,0,0,359,1,0,0,0,0,361,1, - 0,0,0,0,363,1,0,0,0,0,365,1,0,0,0,0,367,1,0,0,0,0,369,1,0,0,0,0, - 371,1,0,0,0,0,373,1,0,0,0,0,375,1,0,0,0,0,377,1,0,0,0,0,379,1,0, - 0,0,0,381,1,0,0,0,0,383,1,0,0,0,0,385,1,0,0,0,0,387,1,0,0,0,0,389, - 1,0,0,0,0,391,1,0,0,0,0,393,1,0,0,0,0,395,1,0,0,0,0,397,1,0,0,0, - 0,399,1,0,0,0,0,461,1,0,0,0,0,463,1,0,0,0,0,465,1,0,0,0,0,467,1, - 0,0,0,0,469,1,0,0,0,0,471,1,0,0,0,0,473,1,0,0,0,0,475,1,0,0,0,0, - 477,1,0,0,0,0,479,1,0,0,0,0,481,1,0,0,0,0,483,1,0,0,0,0,485,1,0, - 0,0,0,487,1,0,0,0,0,489,1,0,0,0,0,491,1,0,0,0,0,493,1,0,0,0,0,495, - 1,0,0,0,0,497,1,0,0,0,0,499,1,0,0,0,0,501,1,0,0,0,0,503,1,0,0,0, - 0,505,1,0,0,0,0,507,1,0,0,0,0,509,1,0,0,0,0,511,1,0,0,0,0,513,1, - 0,0,0,0,515,1,0,0,0,0,517,1,0,0,0,0,519,1,0,0,0,0,521,1,0,0,0,0, - 523,1,0,0,0,0,525,1,0,0,0,0,527,1,0,0,0,0,529,1,0,0,0,0,531,1,0, - 0,0,0,533,1,0,0,0,0,535,1,0,0,0,0,537,1,0,0,0,0,539,1,0,0,0,0,541, - 1,0,0,0,0,543,1,0,0,0,1,545,1,0,0,0,3,549,1,0,0,0,5,555,1,0,0,0, - 7,561,1,0,0,0,9,565,1,0,0,0,11,571,1,0,0,0,13,575,1,0,0,0,15,580, - 1,0,0,0,17,584,1,0,0,0,19,590,1,0,0,0,21,607,1,0,0,0,23,609,1,0, - 0,0,25,614,1,0,0,0,27,618,1,0,0,0,29,624,1,0,0,0,31,631,1,0,0,0, - 33,639,1,0,0,0,35,644,1,0,0,0,37,647,1,0,0,0,39,652,1,0,0,0,41,657, - 1,0,0,0,43,663,1,0,0,0,45,669,1,0,0,0,47,677,1,0,0,0,49,683,1,0, - 0,0,51,690,1,0,0,0,53,698,1,0,0,0,55,705,1,0,0,0,57,713,1,0,0,0, - 59,724,1,0,0,0,61,731,1,0,0,0,63,737,1,0,0,0,65,742,1,0,0,0,67,750, - 1,0,0,0,69,759,1,0,0,0,71,769,1,0,0,0,73,774,1,0,0,0,75,778,1,0, - 0,0,77,790,1,0,0,0,79,798,1,0,0,0,81,804,1,0,0,0,83,811,1,0,0,0, - 85,816,1,0,0,0,87,827,1,0,0,0,89,836,1,0,0,0,91,843,1,0,0,0,93,856, - 1,0,0,0,95,867,1,0,0,0,97,872,1,0,0,0,99,881,1,0,0,0,101,893,1,0, - 0,0,103,898,1,0,0,0,105,903,1,0,0,0,107,907,1,0,0,0,109,914,1,0, - 0,0,111,921,1,0,0,0,113,928,1,0,0,0,115,936,1,0,0,0,117,947,1,0, - 0,0,119,955,1,0,0,0,121,963,1,0,0,0,123,969,1,0,0,0,125,975,1,0, - 0,0,127,981,1,0,0,0,129,991,1,0,0,0,131,995,1,0,0,0,133,1002,1,0, - 0,0,135,1009,1,0,0,0,137,1014,1,0,0,0,139,1019,1,0,0,0,141,1028, - 1,0,0,0,143,1035,1,0,0,0,145,1047,1,0,0,0,147,1053,1,0,0,0,149,1060, - 1,0,0,0,151,1073,1,0,0,0,153,1078,1,0,0,0,155,1081,1,0,0,0,157,1084, - 1,0,0,0,159,1090,1,0,0,0,161,1093,1,0,0,0,163,1112,1,0,0,0,165,1114, - 1,0,0,0,167,1124,1,0,0,0,169,1130,1,0,0,0,171,1137,1,0,0,0,173,1146, - 1,0,0,0,175,1151,1,0,0,0,177,1154,1,0,0,0,179,1167,1,0,0,0,181,1172, - 1,0,0,0,183,1176,1,0,0,0,185,1181,1,0,0,0,187,1186,1,0,0,0,189,1193, - 1,0,0,0,191,1201,1,0,0,0,193,1206,1,0,0,0,195,1215,1,0,0,0,197,1220, - 1,0,0,0,199,1226,1,0,0,0,201,1231,1,0,0,0,203,1237,1,0,0,0,205,1242, - 1,0,0,0,207,1254,1,0,0,0,209,1267,1,0,0,0,211,1271,1,0,0,0,213,1278, - 1,0,0,0,215,1282,1,0,0,0,217,1289,1,0,0,0,219,1296,1,0,0,0,221,1302, - 1,0,0,0,223,1307,1,0,0,0,225,1316,1,0,0,0,227,1320,1,0,0,0,229,1323, - 1,0,0,0,231,1327,1,0,0,0,233,1332,1,0,0,0,235,1338,1,0,0,0,237,1345, - 1,0,0,0,239,1348,1,0,0,0,241,1357,1,0,0,0,243,1360,1,0,0,0,245,1366, - 1,0,0,0,247,1372,1,0,0,0,249,1380,1,0,0,0,251,1385,1,0,0,0,253,1395, - 1,0,0,0,255,1404,1,0,0,0,257,1414,1,0,0,0,259,1423,1,0,0,0,261,1431, - 1,0,0,0,263,1442,1,0,0,0,265,1450,1,0,0,0,267,1456,1,0,0,0,269,1463, - 1,0,0,0,271,1470,1,0,0,0,273,1477,1,0,0,0,275,1485,1,0,0,0,277,1493, - 1,0,0,0,279,1504,1,0,0,0,281,1510,1,0,0,0,283,1517,1,0,0,0,285,1521, - 1,0,0,0,287,1526,1,0,0,0,289,1533,1,0,0,0,291,1540,1,0,0,0,293,1547, - 1,0,0,0,295,1552,1,0,0,0,297,1558,1,0,0,0,299,1562,1,0,0,0,301,1571, - 1,0,0,0,303,1576,1,0,0,0,305,1583,1,0,0,0,307,1589,1,0,0,0,309,1594, - 1,0,0,0,311,1604,1,0,0,0,313,1609,1,0,0,0,315,1616,1,0,0,0,317,1623, - 1,0,0,0,319,1629,1,0,0,0,321,1636,1,0,0,0,323,1646,1,0,0,0,325,1651, - 1,0,0,0,327,1656,1,0,0,0,329,1661,1,0,0,0,331,1669,1,0,0,0,333,1679, - 1,0,0,0,335,1682,1,0,0,0,337,1686,1,0,0,0,339,1693,1,0,0,0,341,1702, - 1,0,0,0,343,1707,1,0,0,0,345,1716,1,0,0,0,347,1720,1,0,0,0,349,1725, - 1,0,0,0,351,1735,1,0,0,0,353,1741,1,0,0,0,355,1748,1,0,0,0,357,1752, - 1,0,0,0,359,1758,1,0,0,0,361,1763,1,0,0,0,363,1770,1,0,0,0,365,1775, - 1,0,0,0,367,1782,1,0,0,0,369,1788,1,0,0,0,371,1793,1,0,0,0,373,1798, - 1,0,0,0,375,1804,1,0,0,0,377,1811,1,0,0,0,379,1826,1,0,0,0,381,1828, - 1,0,0,0,383,1834,1,0,0,0,385,1869,1,0,0,0,387,1911,1,0,0,0,389,1989, - 1,0,0,0,391,1991,1,0,0,0,393,1998,1,0,0,0,395,2002,1,0,0,0,397,2009, - 1,0,0,0,399,2022,1,0,0,0,401,2035,1,0,0,0,403,2037,1,0,0,0,405,2039, - 1,0,0,0,407,2041,1,0,0,0,409,2043,1,0,0,0,411,2045,1,0,0,0,413,2047, - 1,0,0,0,415,2049,1,0,0,0,417,2051,1,0,0,0,419,2053,1,0,0,0,421,2055, - 1,0,0,0,423,2057,1,0,0,0,425,2059,1,0,0,0,427,2061,1,0,0,0,429,2063, - 1,0,0,0,431,2065,1,0,0,0,433,2067,1,0,0,0,435,2069,1,0,0,0,437,2071, - 1,0,0,0,439,2073,1,0,0,0,441,2075,1,0,0,0,443,2077,1,0,0,0,445,2079, - 1,0,0,0,447,2081,1,0,0,0,449,2083,1,0,0,0,451,2085,1,0,0,0,453,2087, - 1,0,0,0,455,2089,1,0,0,0,457,2091,1,0,0,0,459,2093,1,0,0,0,461,2095, - 1,0,0,0,463,2098,1,0,0,0,465,2100,1,0,0,0,467,2102,1,0,0,0,469,2104, - 1,0,0,0,471,2106,1,0,0,0,473,2108,1,0,0,0,475,2111,1,0,0,0,477,2113, - 1,0,0,0,479,2115,1,0,0,0,481,2117,1,0,0,0,483,2120,1,0,0,0,485,2122, - 1,0,0,0,487,2125,1,0,0,0,489,2127,1,0,0,0,491,2129,1,0,0,0,493,2132, - 1,0,0,0,495,2136,1,0,0,0,497,2138,1,0,0,0,499,2140,1,0,0,0,501,2142, - 1,0,0,0,503,2145,1,0,0,0,505,2151,1,0,0,0,507,2153,1,0,0,0,509,2157, - 1,0,0,0,511,2160,1,0,0,0,513,2163,1,0,0,0,515,2165,1,0,0,0,517,2167, - 1,0,0,0,519,2169,1,0,0,0,521,2171,1,0,0,0,523,2173,1,0,0,0,525,2175, - 1,0,0,0,527,2178,1,0,0,0,529,2180,1,0,0,0,531,2182,1,0,0,0,533,2184, - 1,0,0,0,535,2186,1,0,0,0,537,2188,1,0,0,0,539,2190,1,0,0,0,541,2204, - 1,0,0,0,543,2218,1,0,0,0,545,546,3,401,200,0,546,547,3,407,203,0, - 547,548,3,407,203,0,548,2,1,0,0,0,549,550,3,401,200,0,550,551,3, - 411,205,0,551,552,3,439,219,0,552,553,3,409,204,0,553,554,3,435, - 217,0,554,4,1,0,0,0,555,556,3,401,200,0,556,557,3,423,211,0,557, - 558,3,417,208,0,558,559,3,401,200,0,559,560,3,437,218,0,560,6,1, - 0,0,0,561,562,3,401,200,0,562,563,3,423,211,0,563,564,3,423,211, - 0,564,8,1,0,0,0,565,566,3,401,200,0,566,567,3,423,211,0,567,568, - 3,439,219,0,568,569,3,409,204,0,569,570,3,435,217,0,570,10,1,0,0, - 0,571,572,3,401,200,0,572,573,3,427,213,0,573,574,3,407,203,0,574, - 12,1,0,0,0,575,576,3,401,200,0,576,577,3,427,213,0,577,578,3,439, - 219,0,578,579,3,417,208,0,579,14,1,0,0,0,580,581,3,401,200,0,581, - 582,3,427,213,0,582,583,3,449,224,0,583,16,1,0,0,0,584,585,3,401, - 200,0,585,586,3,435,217,0,586,587,3,435,217,0,587,588,3,401,200, - 0,588,589,3,449,224,0,589,18,1,0,0,0,590,591,3,401,200,0,591,592, - 3,437,218,0,592,20,1,0,0,0,593,594,3,401,200,0,594,595,3,437,218, - 0,595,596,3,405,202,0,596,608,1,0,0,0,597,598,3,401,200,0,598,599, - 3,437,218,0,599,600,3,405,202,0,600,601,3,409,204,0,601,602,3,427, - 213,0,602,603,3,407,203,0,603,604,3,417,208,0,604,605,3,427,213, - 0,605,606,3,413,206,0,606,608,1,0,0,0,607,593,1,0,0,0,607,597,1, - 0,0,0,608,22,1,0,0,0,609,610,3,401,200,0,610,611,3,437,218,0,611, - 612,3,429,214,0,612,613,3,411,205,0,613,24,1,0,0,0,614,615,3,401, - 200,0,615,616,3,437,218,0,616,617,3,439,219,0,617,26,1,0,0,0,618, - 619,3,401,200,0,619,620,3,437,218,0,620,621,3,449,224,0,621,622, - 3,427,213,0,622,623,3,405,202,0,623,28,1,0,0,0,624,625,3,401,200, - 0,625,626,3,439,219,0,626,627,3,439,219,0,627,628,3,401,200,0,628, - 629,3,405,202,0,629,630,3,415,207,0,630,30,1,0,0,0,631,632,3,403, - 201,0,632,633,3,409,204,0,633,634,3,439,219,0,634,635,3,445,222, - 0,635,636,3,409,204,0,636,637,3,409,204,0,637,638,3,427,213,0,638, - 32,1,0,0,0,639,640,3,403,201,0,640,641,3,429,214,0,641,642,3,439, - 219,0,642,643,3,415,207,0,643,34,1,0,0,0,644,645,3,403,201,0,645, - 646,3,449,224,0,646,36,1,0,0,0,647,648,3,405,202,0,648,649,3,401, - 200,0,649,650,3,437,218,0,650,651,3,409,204,0,651,38,1,0,0,0,652, - 653,3,405,202,0,653,654,3,401,200,0,654,655,3,437,218,0,655,656, - 3,439,219,0,656,40,1,0,0,0,657,658,3,405,202,0,658,659,3,415,207, - 0,659,660,3,409,204,0,660,661,3,405,202,0,661,662,3,421,210,0,662, - 42,1,0,0,0,663,664,3,405,202,0,664,665,3,423,211,0,665,666,3,409, - 204,0,666,667,3,401,200,0,667,668,3,435,217,0,668,44,1,0,0,0,669, - 670,3,405,202,0,670,671,3,423,211,0,671,672,3,441,220,0,672,673, - 3,437,218,0,673,674,3,439,219,0,674,675,3,409,204,0,675,676,3,435, - 217,0,676,46,1,0,0,0,677,678,3,405,202,0,678,679,3,429,214,0,679, - 680,3,407,203,0,680,681,3,409,204,0,681,682,3,405,202,0,682,48,1, - 0,0,0,683,684,3,405,202,0,684,685,3,429,214,0,685,686,3,415,207, - 0,686,687,3,429,214,0,687,688,3,435,217,0,688,689,3,439,219,0,689, - 50,1,0,0,0,690,691,3,405,202,0,691,692,3,429,214,0,692,693,3,423, - 211,0,693,694,3,423,211,0,694,695,3,401,200,0,695,696,3,439,219, - 0,696,697,3,409,204,0,697,52,1,0,0,0,698,699,3,405,202,0,699,700, - 3,429,214,0,700,701,3,423,211,0,701,702,3,441,220,0,702,703,3,425, - 212,0,703,704,3,427,213,0,704,54,1,0,0,0,705,706,3,405,202,0,706, - 707,3,429,214,0,707,708,3,425,212,0,708,709,3,425,212,0,709,710, - 3,409,204,0,710,711,3,427,213,0,711,712,3,439,219,0,712,56,1,0,0, - 0,713,714,3,405,202,0,714,715,3,429,214,0,715,716,3,427,213,0,716, - 717,3,437,218,0,717,718,3,439,219,0,718,719,3,435,217,0,719,720, - 3,401,200,0,720,721,3,417,208,0,721,722,3,427,213,0,722,723,3,439, - 219,0,723,58,1,0,0,0,724,725,3,405,202,0,725,726,3,435,217,0,726, - 727,3,409,204,0,727,728,3,401,200,0,728,729,3,439,219,0,729,730, - 3,409,204,0,730,60,1,0,0,0,731,732,3,405,202,0,732,733,3,435,217, - 0,733,734,3,429,214,0,734,735,3,437,218,0,735,736,3,437,218,0,736, - 62,1,0,0,0,737,738,3,405,202,0,738,739,3,441,220,0,739,740,3,403, - 201,0,740,741,3,409,204,0,741,64,1,0,0,0,742,743,3,405,202,0,743, - 744,3,441,220,0,744,745,3,435,217,0,745,746,3,435,217,0,746,747, - 3,409,204,0,747,748,3,427,213,0,748,749,3,439,219,0,749,66,1,0,0, - 0,750,751,3,407,203,0,751,752,3,401,200,0,752,753,3,439,219,0,753, - 754,3,401,200,0,754,755,3,403,201,0,755,756,3,401,200,0,756,757, - 3,437,218,0,757,758,3,409,204,0,758,68,1,0,0,0,759,760,3,407,203, - 0,760,761,3,401,200,0,761,762,3,439,219,0,762,763,3,401,200,0,763, - 764,3,403,201,0,764,765,3,401,200,0,765,766,3,437,218,0,766,767, - 3,409,204,0,767,768,3,437,218,0,768,70,1,0,0,0,769,770,3,407,203, - 0,770,771,3,401,200,0,771,772,3,439,219,0,772,773,3,409,204,0,773, - 72,1,0,0,0,774,775,3,407,203,0,775,776,3,401,200,0,776,777,3,449, - 224,0,777,74,1,0,0,0,778,779,3,407,203,0,779,780,3,409,204,0,780, - 781,3,407,203,0,781,782,3,441,220,0,782,783,3,431,215,0,783,784, - 3,423,211,0,784,785,3,417,208,0,785,786,3,405,202,0,786,787,3,401, - 200,0,787,788,3,439,219,0,788,789,3,409,204,0,789,76,1,0,0,0,790, - 791,3,407,203,0,791,792,3,409,204,0,792,793,3,411,205,0,793,794, - 3,401,200,0,794,795,3,441,220,0,795,796,3,423,211,0,796,797,3,439, - 219,0,797,78,1,0,0,0,798,799,3,407,203,0,799,800,3,409,204,0,800, - 801,3,423,211,0,801,802,3,401,200,0,802,803,3,449,224,0,803,80,1, - 0,0,0,804,805,3,407,203,0,805,806,3,409,204,0,806,807,3,423,211, - 0,807,808,3,409,204,0,808,809,3,439,219,0,809,810,3,409,204,0,810, - 82,1,0,0,0,811,812,3,407,203,0,812,813,3,409,204,0,813,814,3,437, - 218,0,814,815,3,405,202,0,815,84,1,0,0,0,816,817,3,407,203,0,817, - 818,3,409,204,0,818,819,3,437,218,0,819,820,3,405,202,0,820,821, - 3,409,204,0,821,822,3,427,213,0,822,823,3,407,203,0,823,824,3,417, - 208,0,824,825,3,427,213,0,825,826,3,413,206,0,826,86,1,0,0,0,827, - 828,3,407,203,0,828,829,3,409,204,0,829,830,3,437,218,0,830,831, - 3,405,202,0,831,832,3,435,217,0,832,833,3,417,208,0,833,834,3,403, - 201,0,834,835,3,409,204,0,835,88,1,0,0,0,836,837,3,407,203,0,837, - 838,3,409,204,0,838,839,3,439,219,0,839,840,3,401,200,0,840,841, - 3,405,202,0,841,842,3,415,207,0,842,90,1,0,0,0,843,844,3,407,203, - 0,844,845,3,417,208,0,845,846,3,405,202,0,846,847,3,439,219,0,847, - 848,3,417,208,0,848,849,3,429,214,0,849,850,3,427,213,0,850,851, - 3,401,200,0,851,852,3,435,217,0,852,853,3,417,208,0,853,854,3,409, - 204,0,854,855,3,437,218,0,855,92,1,0,0,0,856,857,3,407,203,0,857, - 858,3,417,208,0,858,859,3,405,202,0,859,860,3,439,219,0,860,861, - 3,417,208,0,861,862,3,429,214,0,862,863,3,427,213,0,863,864,3,401, - 200,0,864,865,3,435,217,0,865,866,3,449,224,0,866,94,1,0,0,0,867, - 868,3,407,203,0,868,869,3,417,208,0,869,870,3,437,218,0,870,871, - 3,421,210,0,871,96,1,0,0,0,872,873,3,407,203,0,873,874,3,417,208, - 0,874,875,3,437,218,0,875,876,3,439,219,0,876,877,3,417,208,0,877, - 878,3,427,213,0,878,879,3,405,202,0,879,880,3,439,219,0,880,98,1, - 0,0,0,881,882,3,407,203,0,882,883,3,417,208,0,883,884,3,437,218, - 0,884,885,3,439,219,0,885,886,3,435,217,0,886,887,3,417,208,0,887, - 888,3,403,201,0,888,889,3,441,220,0,889,890,3,439,219,0,890,891, - 3,409,204,0,891,892,3,407,203,0,892,100,1,0,0,0,893,894,3,407,203, - 0,894,895,3,435,217,0,895,896,3,429,214,0,896,897,3,431,215,0,897, - 102,1,0,0,0,898,899,3,409,204,0,899,900,3,423,211,0,900,901,3,437, - 218,0,901,902,3,409,204,0,902,104,1,0,0,0,903,904,3,409,204,0,904, - 905,3,427,213,0,905,906,3,407,203,0,906,106,1,0,0,0,907,908,3,409, - 204,0,908,909,3,427,213,0,909,910,3,413,206,0,910,911,3,417,208, - 0,911,912,3,427,213,0,912,913,3,409,204,0,913,108,1,0,0,0,914,915, - 3,409,204,0,915,916,3,443,221,0,916,917,3,409,204,0,917,918,3,427, - 213,0,918,919,3,439,219,0,919,920,3,437,218,0,920,110,1,0,0,0,921, - 922,3,409,204,0,922,923,3,447,223,0,923,924,3,417,208,0,924,925, - 3,437,218,0,925,926,3,439,219,0,926,927,3,437,218,0,927,112,1,0, - 0,0,928,929,3,409,204,0,929,930,3,447,223,0,930,931,3,431,215,0, - 931,932,3,423,211,0,932,933,3,401,200,0,933,934,3,417,208,0,934, - 935,3,427,213,0,935,114,1,0,0,0,936,937,3,409,204,0,937,938,3,447, - 223,0,938,939,3,431,215,0,939,940,3,435,217,0,940,941,3,409,204, - 0,941,942,3,437,218,0,942,943,3,437,218,0,943,944,3,417,208,0,944, - 945,3,429,214,0,945,946,3,427,213,0,946,116,1,0,0,0,947,948,3,409, - 204,0,948,949,3,447,223,0,949,950,3,439,219,0,950,951,3,435,217, - 0,951,952,3,401,200,0,952,953,3,405,202,0,953,954,3,439,219,0,954, - 118,1,0,0,0,955,956,3,411,205,0,956,957,3,409,204,0,957,958,3,439, - 219,0,958,959,3,405,202,0,959,960,3,415,207,0,960,961,3,409,204, - 0,961,962,3,437,218,0,962,120,1,0,0,0,963,964,3,411,205,0,964,965, - 3,417,208,0,965,966,3,427,213,0,966,967,3,401,200,0,967,968,3,423, - 211,0,968,122,1,0,0,0,969,970,3,411,205,0,970,971,3,417,208,0,971, - 972,3,435,217,0,972,973,3,437,218,0,973,974,3,439,219,0,974,124, - 1,0,0,0,975,976,3,411,205,0,976,977,3,423,211,0,977,978,3,441,220, - 0,978,979,3,437,218,0,979,980,3,415,207,0,980,126,1,0,0,0,981,982, - 3,411,205,0,982,983,3,429,214,0,983,984,3,423,211,0,984,985,3,423, - 211,0,985,986,3,429,214,0,986,987,3,445,222,0,987,988,3,417,208, - 0,988,989,3,427,213,0,989,990,3,413,206,0,990,128,1,0,0,0,991,992, - 3,411,205,0,992,993,3,429,214,0,993,994,3,435,217,0,994,130,1,0, - 0,0,995,996,3,411,205,0,996,997,3,429,214,0,997,998,3,435,217,0, - 998,999,3,425,212,0,999,1000,3,401,200,0,1000,1001,3,439,219,0,1001, - 132,1,0,0,0,1002,1003,3,411,205,0,1003,1004,3,435,217,0,1004,1005, - 3,409,204,0,1005,1006,3,409,204,0,1006,1007,3,451,225,0,1007,1008, - 3,409,204,0,1008,134,1,0,0,0,1009,1010,3,411,205,0,1010,1011,3,435, - 217,0,1011,1012,3,429,214,0,1012,1013,3,425,212,0,1013,136,1,0,0, - 0,1014,1015,3,411,205,0,1015,1016,3,441,220,0,1016,1017,3,423,211, - 0,1017,1018,3,423,211,0,1018,138,1,0,0,0,1019,1020,3,411,205,0,1020, - 1021,3,441,220,0,1021,1022,3,427,213,0,1022,1023,3,405,202,0,1023, - 1024,3,439,219,0,1024,1025,3,417,208,0,1025,1026,3,429,214,0,1026, - 1027,3,427,213,0,1027,140,1,0,0,0,1028,1029,3,413,206,0,1029,1030, - 3,423,211,0,1030,1031,3,429,214,0,1031,1032,3,403,201,0,1032,1033, - 3,401,200,0,1033,1034,3,423,211,0,1034,142,1,0,0,0,1035,1036,3,413, - 206,0,1036,1037,3,435,217,0,1037,1038,3,401,200,0,1038,1039,3,427, - 213,0,1039,1040,3,441,220,0,1040,1041,3,423,211,0,1041,1042,3,401, - 200,0,1042,1043,3,435,217,0,1043,1044,3,417,208,0,1044,1045,3,439, - 219,0,1045,1046,3,449,224,0,1046,144,1,0,0,0,1047,1048,3,413,206, - 0,1048,1049,3,435,217,0,1049,1050,3,429,214,0,1050,1051,3,441,220, - 0,1051,1052,3,431,215,0,1052,146,1,0,0,0,1053,1054,3,415,207,0,1054, - 1055,3,401,200,0,1055,1056,3,443,221,0,1056,1057,3,417,208,0,1057, - 1058,3,427,213,0,1058,1059,3,413,206,0,1059,148,1,0,0,0,1060,1061, - 3,415,207,0,1061,1062,3,417,208,0,1062,1063,3,409,204,0,1063,1064, - 3,435,217,0,1064,1065,3,401,200,0,1065,1066,3,435,217,0,1066,1067, - 3,405,202,0,1067,1068,3,415,207,0,1068,1069,3,417,208,0,1069,1070, - 3,405,202,0,1070,1071,3,401,200,0,1071,1072,3,423,211,0,1072,150, - 1,0,0,0,1073,1074,3,415,207,0,1074,1075,3,429,214,0,1075,1076,3, - 441,220,0,1076,1077,3,435,217,0,1077,152,1,0,0,0,1078,1079,3,417, - 208,0,1079,1080,3,407,203,0,1080,154,1,0,0,0,1081,1082,3,417,208, - 0,1082,1083,3,411,205,0,1083,156,1,0,0,0,1084,1085,3,417,208,0,1085, - 1086,3,423,211,0,1086,1087,3,417,208,0,1087,1088,3,421,210,0,1088, - 1089,3,409,204,0,1089,158,1,0,0,0,1090,1091,3,417,208,0,1091,1092, - 3,427,213,0,1092,160,1,0,0,0,1093,1094,3,417,208,0,1094,1095,3,427, - 213,0,1095,1096,3,407,203,0,1096,1097,3,409,204,0,1097,1098,3,447, - 223,0,1098,162,1,0,0,0,1099,1100,3,417,208,0,1100,1101,3,427,213, - 0,1101,1102,3,411,205,0,1102,1113,1,0,0,0,1103,1104,3,417,208,0, - 1104,1105,3,427,213,0,1105,1106,3,411,205,0,1106,1107,3,417,208, - 0,1107,1108,3,427,213,0,1108,1109,3,417,208,0,1109,1110,3,439,219, - 0,1110,1111,3,449,224,0,1111,1113,1,0,0,0,1112,1099,1,0,0,0,1112, - 1103,1,0,0,0,1113,164,1,0,0,0,1114,1115,3,417,208,0,1115,1116,3, - 427,213,0,1116,1117,3,419,209,0,1117,1118,3,409,204,0,1118,1119, - 3,405,202,0,1119,1120,3,439,219,0,1120,1121,3,417,208,0,1121,1122, - 3,443,221,0,1122,1123,3,409,204,0,1123,166,1,0,0,0,1124,1125,3,417, - 208,0,1125,1126,3,427,213,0,1126,1127,3,427,213,0,1127,1128,3,409, - 204,0,1128,1129,3,435,217,0,1129,168,1,0,0,0,1130,1131,3,417,208, - 0,1131,1132,3,427,213,0,1132,1133,3,437,218,0,1133,1134,3,409,204, - 0,1134,1135,3,435,217,0,1135,1136,3,439,219,0,1136,170,1,0,0,0,1137, - 1138,3,417,208,0,1138,1139,3,427,213,0,1139,1140,3,439,219,0,1140, - 1141,3,409,204,0,1141,1142,3,435,217,0,1142,1143,3,443,221,0,1143, - 1144,3,401,200,0,1144,1145,3,423,211,0,1145,172,1,0,0,0,1146,1147, - 3,417,208,0,1147,1148,3,427,213,0,1148,1149,3,439,219,0,1149,1150, - 3,429,214,0,1150,174,1,0,0,0,1151,1152,3,417,208,0,1152,1153,3,437, - 218,0,1153,176,1,0,0,0,1154,1155,3,417,208,0,1155,1156,3,437,218, - 0,1156,1157,3,537,268,0,1157,1158,3,429,214,0,1158,1159,3,403,201, - 0,1159,1160,3,419,209,0,1160,1161,3,409,204,0,1161,1162,3,405,202, - 0,1162,1163,3,439,219,0,1163,1164,3,537,268,0,1164,1165,3,417,208, - 0,1165,1166,3,407,203,0,1166,178,1,0,0,0,1167,1168,3,419,209,0,1168, - 1169,3,429,214,0,1169,1170,3,417,208,0,1170,1171,3,427,213,0,1171, - 180,1,0,0,0,1172,1173,3,421,210,0,1173,1174,3,409,204,0,1174,1175, - 3,449,224,0,1175,182,1,0,0,0,1176,1177,3,421,210,0,1177,1178,3,417, - 208,0,1178,1179,3,423,211,0,1179,1180,3,423,211,0,1180,184,1,0,0, - 0,1181,1182,3,423,211,0,1182,1183,3,401,200,0,1183,1184,3,437,218, - 0,1184,1185,3,439,219,0,1185,186,1,0,0,0,1186,1187,3,423,211,0,1187, - 1188,3,401,200,0,1188,1189,3,449,224,0,1189,1190,3,429,214,0,1190, - 1191,3,441,220,0,1191,1192,3,439,219,0,1192,188,1,0,0,0,1193,1194, - 3,423,211,0,1194,1195,3,409,204,0,1195,1196,3,401,200,0,1196,1197, - 3,407,203,0,1197,1198,3,417,208,0,1198,1199,3,427,213,0,1199,1200, - 3,413,206,0,1200,190,1,0,0,0,1201,1202,3,423,211,0,1202,1203,3,409, - 204,0,1203,1204,3,411,205,0,1204,1205,3,439,219,0,1205,192,1,0,0, - 0,1206,1207,3,423,211,0,1207,1208,3,417,208,0,1208,1209,3,411,205, - 0,1209,1210,3,409,204,0,1210,1211,3,439,219,0,1211,1212,3,417,208, - 0,1212,1213,3,425,212,0,1213,1214,3,409,204,0,1214,194,1,0,0,0,1215, - 1216,3,423,211,0,1216,1217,3,417,208,0,1217,1218,3,421,210,0,1218, - 1219,3,409,204,0,1219,196,1,0,0,0,1220,1221,3,423,211,0,1221,1222, - 3,417,208,0,1222,1223,3,425,212,0,1223,1224,3,417,208,0,1224,1225, - 3,439,219,0,1225,198,1,0,0,0,1226,1227,3,423,211,0,1227,1228,3,417, - 208,0,1228,1229,3,443,221,0,1229,1230,3,409,204,0,1230,200,1,0,0, - 0,1231,1232,3,423,211,0,1232,1233,3,429,214,0,1233,1234,3,405,202, - 0,1234,1235,3,401,200,0,1235,1236,3,423,211,0,1236,202,1,0,0,0,1237, - 1238,3,423,211,0,1238,1239,3,429,214,0,1239,1240,3,413,206,0,1240, - 1241,3,437,218,0,1241,204,1,0,0,0,1242,1243,3,425,212,0,1243,1244, - 3,401,200,0,1244,1245,3,439,219,0,1245,1246,3,409,204,0,1246,1247, - 3,435,217,0,1247,1248,3,417,208,0,1248,1249,3,401,200,0,1249,1250, - 3,423,211,0,1250,1251,3,417,208,0,1251,1252,3,451,225,0,1252,1253, - 3,409,204,0,1253,206,1,0,0,0,1254,1255,3,425,212,0,1255,1256,3,401, - 200,0,1256,1257,3,439,219,0,1257,1258,3,409,204,0,1258,1259,3,435, - 217,0,1259,1260,3,417,208,0,1260,1261,3,401,200,0,1261,1262,3,423, - 211,0,1262,1263,3,417,208,0,1263,1264,3,451,225,0,1264,1265,3,409, - 204,0,1265,1266,3,407,203,0,1266,208,1,0,0,0,1267,1268,3,425,212, - 0,1268,1269,3,401,200,0,1269,1270,3,447,223,0,1270,210,1,0,0,0,1271, - 1272,3,425,212,0,1272,1273,3,409,204,0,1273,1274,3,435,217,0,1274, - 1275,3,413,206,0,1275,1276,3,409,204,0,1276,1277,3,437,218,0,1277, - 212,1,0,0,0,1278,1279,3,425,212,0,1279,1280,3,417,208,0,1280,1281, - 3,427,213,0,1281,214,1,0,0,0,1282,1283,3,425,212,0,1283,1284,3,417, - 208,0,1284,1285,3,427,213,0,1285,1286,3,441,220,0,1286,1287,3,439, - 219,0,1287,1288,3,409,204,0,1288,216,1,0,0,0,1289,1290,3,425,212, - 0,1290,1291,3,429,214,0,1291,1292,3,407,203,0,1292,1293,3,417,208, - 0,1293,1294,3,411,205,0,1294,1295,3,449,224,0,1295,218,1,0,0,0,1296, - 1297,3,425,212,0,1297,1298,3,429,214,0,1298,1299,3,427,213,0,1299, - 1300,3,439,219,0,1300,1301,3,415,207,0,1301,220,1,0,0,0,1302,1303, - 3,425,212,0,1303,1304,3,429,214,0,1304,1305,3,443,221,0,1305,1306, - 3,409,204,0,1306,222,1,0,0,0,1307,1308,3,425,212,0,1308,1309,3,441, - 220,0,1309,1310,3,439,219,0,1310,1311,3,401,200,0,1311,1312,3,439, - 219,0,1312,1313,3,417,208,0,1313,1314,3,429,214,0,1314,1315,3,427, - 213,0,1315,224,1,0,0,0,1316,1317,3,427,213,0,1317,1318,3,401,200, - 0,1318,1319,3,427,213,0,1319,226,1,0,0,0,1320,1321,3,427,213,0,1321, - 1322,3,429,214,0,1322,228,1,0,0,0,1323,1324,3,427,213,0,1324,1325, - 3,429,214,0,1325,1326,3,439,219,0,1326,230,1,0,0,0,1327,1328,3,427, - 213,0,1328,1329,3,441,220,0,1329,1330,3,423,211,0,1330,1331,3,423, - 211,0,1331,232,1,0,0,0,1332,1333,3,427,213,0,1333,1334,3,441,220, - 0,1334,1335,3,423,211,0,1335,1336,3,423,211,0,1336,1337,3,437,218, - 0,1337,234,1,0,0,0,1338,1339,3,429,214,0,1339,1340,3,411,205,0,1340, - 1341,3,411,205,0,1341,1342,3,437,218,0,1342,1343,3,409,204,0,1343, - 1344,3,439,219,0,1344,236,1,0,0,0,1345,1346,3,429,214,0,1346,1347, - 3,427,213,0,1347,238,1,0,0,0,1348,1349,3,429,214,0,1349,1350,3,431, - 215,0,1350,1351,3,439,219,0,1351,1352,3,417,208,0,1352,1353,3,425, - 212,0,1353,1354,3,417,208,0,1354,1355,3,451,225,0,1355,1356,3,409, - 204,0,1356,240,1,0,0,0,1357,1358,3,429,214,0,1358,1359,3,435,217, - 0,1359,242,1,0,0,0,1360,1361,3,429,214,0,1361,1362,3,435,217,0,1362, - 1363,3,407,203,0,1363,1364,3,409,204,0,1364,1365,3,435,217,0,1365, - 244,1,0,0,0,1366,1367,3,429,214,0,1367,1368,3,441,220,0,1368,1369, - 3,439,219,0,1369,1370,3,409,204,0,1370,1371,3,435,217,0,1371,246, - 1,0,0,0,1372,1373,3,429,214,0,1373,1374,3,441,220,0,1374,1375,3, - 439,219,0,1375,1376,3,411,205,0,1376,1377,3,417,208,0,1377,1378, - 3,423,211,0,1378,1379,3,409,204,0,1379,248,1,0,0,0,1380,1381,3,429, - 214,0,1381,1382,3,443,221,0,1382,1383,3,409,204,0,1383,1384,3,435, - 217,0,1384,250,1,0,0,0,1385,1386,3,431,215,0,1386,1387,3,401,200, - 0,1387,1388,3,435,217,0,1388,1389,3,439,219,0,1389,1390,3,417,208, - 0,1390,1391,3,439,219,0,1391,1392,3,417,208,0,1392,1393,3,429,214, - 0,1393,1394,3,427,213,0,1394,252,1,0,0,0,1395,1396,3,431,215,0,1396, - 1397,3,429,214,0,1397,1398,3,431,215,0,1398,1399,3,441,220,0,1399, - 1400,3,423,211,0,1400,1401,3,401,200,0,1401,1402,3,439,219,0,1402, - 1403,3,409,204,0,1403,254,1,0,0,0,1404,1405,3,431,215,0,1405,1406, - 3,435,217,0,1406,1407,3,409,204,0,1407,1408,3,405,202,0,1408,1409, - 3,409,204,0,1409,1410,3,407,203,0,1410,1411,3,417,208,0,1411,1412, - 3,427,213,0,1412,1413,3,413,206,0,1413,256,1,0,0,0,1414,1415,3,431, - 215,0,1415,1416,3,435,217,0,1416,1417,3,409,204,0,1417,1418,3,445, - 222,0,1418,1419,3,415,207,0,1419,1420,3,409,204,0,1420,1421,3,435, - 217,0,1421,1422,3,409,204,0,1422,258,1,0,0,0,1423,1424,3,431,215, - 0,1424,1425,3,435,217,0,1425,1426,3,417,208,0,1426,1427,3,425,212, - 0,1427,1428,3,401,200,0,1428,1429,3,435,217,0,1429,1430,3,449,224, - 0,1430,260,1,0,0,0,1431,1432,3,431,215,0,1432,1433,3,435,217,0,1433, - 1434,3,429,214,0,1434,1435,3,419,209,0,1435,1436,3,409,204,0,1436, - 1437,3,405,202,0,1437,1438,3,439,219,0,1438,1439,3,417,208,0,1439, - 1440,3,429,214,0,1440,1441,3,427,213,0,1441,262,1,0,0,0,1442,1443, - 3,433,216,0,1443,1444,3,441,220,0,1444,1445,3,401,200,0,1445,1446, - 3,435,217,0,1446,1447,3,439,219,0,1447,1448,3,409,204,0,1448,1449, - 3,435,217,0,1449,264,1,0,0,0,1450,1451,3,435,217,0,1451,1452,3,401, - 200,0,1452,1453,3,427,213,0,1453,1454,3,413,206,0,1454,1455,3,409, - 204,0,1455,266,1,0,0,0,1456,1457,3,435,217,0,1457,1458,3,409,204, - 0,1458,1459,3,423,211,0,1459,1460,3,429,214,0,1460,1461,3,401,200, - 0,1461,1462,3,407,203,0,1462,268,1,0,0,0,1463,1464,3,435,217,0,1464, - 1465,3,409,204,0,1465,1466,3,425,212,0,1466,1467,3,429,214,0,1467, - 1468,3,443,221,0,1468,1469,3,409,204,0,1469,270,1,0,0,0,1470,1471, - 3,435,217,0,1471,1472,3,409,204,0,1472,1473,3,427,213,0,1473,1474, - 3,401,200,0,1474,1475,3,425,212,0,1475,1476,3,409,204,0,1476,272, - 1,0,0,0,1477,1478,3,435,217,0,1478,1479,3,409,204,0,1479,1480,3, - 431,215,0,1480,1481,3,423,211,0,1481,1482,3,401,200,0,1482,1483, - 3,405,202,0,1483,1484,3,409,204,0,1484,274,1,0,0,0,1485,1486,3,435, - 217,0,1486,1487,3,409,204,0,1487,1488,3,431,215,0,1488,1489,3,423, - 211,0,1489,1490,3,417,208,0,1490,1491,3,405,202,0,1491,1492,3,401, - 200,0,1492,276,1,0,0,0,1493,1494,3,435,217,0,1494,1495,3,409,204, - 0,1495,1496,3,431,215,0,1496,1497,3,423,211,0,1497,1498,3,417,208, - 0,1498,1499,3,405,202,0,1499,1500,3,401,200,0,1500,1501,3,439,219, - 0,1501,1502,3,409,204,0,1502,1503,3,407,203,0,1503,278,1,0,0,0,1504, - 1505,3,435,217,0,1505,1506,3,417,208,0,1506,1507,3,413,206,0,1507, - 1508,3,415,207,0,1508,1509,3,439,219,0,1509,280,1,0,0,0,1510,1511, - 3,435,217,0,1511,1512,3,429,214,0,1512,1513,3,423,211,0,1513,1514, - 3,423,211,0,1514,1515,3,441,220,0,1515,1516,3,431,215,0,1516,282, - 1,0,0,0,1517,1518,3,435,217,0,1518,1519,3,429,214,0,1519,1520,3, - 445,222,0,1520,284,1,0,0,0,1521,1522,3,435,217,0,1522,1523,3,429, - 214,0,1523,1524,3,445,222,0,1524,1525,3,437,218,0,1525,286,1,0,0, - 0,1526,1527,3,437,218,0,1527,1528,3,401,200,0,1528,1529,3,425,212, - 0,1529,1530,3,431,215,0,1530,1531,3,423,211,0,1531,1532,3,409,204, - 0,1532,288,1,0,0,0,1533,1534,3,437,218,0,1534,1535,3,409,204,0,1535, - 1536,3,405,202,0,1536,1537,3,429,214,0,1537,1538,3,427,213,0,1538, - 1539,3,407,203,0,1539,290,1,0,0,0,1540,1541,3,437,218,0,1541,1542, - 3,409,204,0,1542,1543,3,423,211,0,1543,1544,3,409,204,0,1544,1545, - 3,405,202,0,1545,1546,3,439,219,0,1546,292,1,0,0,0,1547,1548,3,437, - 218,0,1548,1549,3,409,204,0,1549,1550,3,425,212,0,1550,1551,3,417, - 208,0,1551,294,1,0,0,0,1552,1553,3,437,218,0,1553,1554,3,409,204, - 0,1554,1555,3,427,213,0,1555,1556,3,407,203,0,1556,1557,3,437,218, - 0,1557,296,1,0,0,0,1558,1559,3,437,218,0,1559,1560,3,409,204,0,1560, - 1561,3,439,219,0,1561,298,1,0,0,0,1562,1563,3,437,218,0,1563,1564, - 3,409,204,0,1564,1565,3,439,219,0,1565,1566,3,439,219,0,1566,1567, - 3,417,208,0,1567,1568,3,427,213,0,1568,1569,3,413,206,0,1569,1570, - 3,437,218,0,1570,300,1,0,0,0,1571,1572,3,437,218,0,1572,1573,3,415, - 207,0,1573,1574,3,429,214,0,1574,1575,3,445,222,0,1575,302,1,0,0, - 0,1576,1577,3,437,218,0,1577,1578,3,429,214,0,1578,1579,3,441,220, - 0,1579,1580,3,435,217,0,1580,1581,3,405,202,0,1581,1582,3,409,204, - 0,1582,304,1,0,0,0,1583,1584,3,437,218,0,1584,1585,3,439,219,0,1585, - 1586,3,401,200,0,1586,1587,3,435,217,0,1587,1588,3,439,219,0,1588, - 306,1,0,0,0,1589,1590,3,437,218,0,1590,1591,3,439,219,0,1591,1592, - 3,429,214,0,1592,1593,3,431,215,0,1593,308,1,0,0,0,1594,1595,3,437, - 218,0,1595,1596,3,441,220,0,1596,1597,3,403,201,0,1597,1598,3,437, - 218,0,1598,1599,3,439,219,0,1599,1600,3,435,217,0,1600,1601,3,417, - 208,0,1601,1602,3,427,213,0,1602,1603,3,413,206,0,1603,310,1,0,0, - 0,1604,1605,3,437,218,0,1605,1606,3,449,224,0,1606,1607,3,427,213, - 0,1607,1608,3,405,202,0,1608,312,1,0,0,0,1609,1610,3,437,218,0,1610, - 1611,3,449,224,0,1611,1612,3,427,213,0,1612,1613,3,439,219,0,1613, - 1614,3,401,200,0,1614,1615,3,447,223,0,1615,314,1,0,0,0,1616,1617, - 3,437,218,0,1617,1618,3,449,224,0,1618,1619,3,437,218,0,1619,1620, - 3,439,219,0,1620,1621,3,409,204,0,1621,1622,3,425,212,0,1622,316, - 1,0,0,0,1623,1624,3,439,219,0,1624,1625,3,401,200,0,1625,1626,3, - 403,201,0,1626,1627,3,423,211,0,1627,1628,3,409,204,0,1628,318,1, - 0,0,0,1629,1630,3,439,219,0,1630,1631,3,401,200,0,1631,1632,3,403, - 201,0,1632,1633,3,423,211,0,1633,1634,3,409,204,0,1634,1635,3,437, - 218,0,1635,320,1,0,0,0,1636,1637,3,439,219,0,1637,1638,3,409,204, - 0,1638,1639,3,425,212,0,1639,1640,3,431,215,0,1640,1641,3,429,214, - 0,1641,1642,3,435,217,0,1642,1643,3,401,200,0,1643,1644,3,435,217, - 0,1644,1645,3,449,224,0,1645,322,1,0,0,0,1646,1647,3,439,219,0,1647, - 1648,3,409,204,0,1648,1649,3,437,218,0,1649,1650,3,439,219,0,1650, - 324,1,0,0,0,1651,1652,3,439,219,0,1652,1653,3,415,207,0,1653,1654, - 3,409,204,0,1654,1655,3,427,213,0,1655,326,1,0,0,0,1656,1657,3,439, - 219,0,1657,1658,3,417,208,0,1658,1659,3,409,204,0,1659,1660,3,437, - 218,0,1660,328,1,0,0,0,1661,1662,3,439,219,0,1662,1663,3,417,208, - 0,1663,1664,3,425,212,0,1664,1665,3,409,204,0,1665,1666,3,429,214, - 0,1666,1667,3,441,220,0,1667,1668,3,439,219,0,1668,330,1,0,0,0,1669, - 1670,3,439,219,0,1670,1671,3,417,208,0,1671,1672,3,425,212,0,1672, - 1673,3,409,204,0,1673,1674,3,437,218,0,1674,1675,3,439,219,0,1675, - 1676,3,401,200,0,1676,1677,3,425,212,0,1677,1678,3,431,215,0,1678, - 332,1,0,0,0,1679,1680,3,439,219,0,1680,1681,3,429,214,0,1681,334, - 1,0,0,0,1682,1683,3,439,219,0,1683,1684,3,429,214,0,1684,1685,3, - 431,215,0,1685,336,1,0,0,0,1686,1687,3,439,219,0,1687,1688,3,429, - 214,0,1688,1689,3,439,219,0,1689,1690,3,401,200,0,1690,1691,3,423, - 211,0,1691,1692,3,437,218,0,1692,338,1,0,0,0,1693,1694,3,439,219, - 0,1694,1695,3,435,217,0,1695,1696,3,401,200,0,1696,1697,3,417,208, - 0,1697,1698,3,423,211,0,1698,1699,3,417,208,0,1699,1700,3,427,213, - 0,1700,1701,3,413,206,0,1701,340,1,0,0,0,1702,1703,3,439,219,0,1703, - 1704,3,435,217,0,1704,1705,3,417,208,0,1705,1706,3,425,212,0,1706, - 342,1,0,0,0,1707,1708,3,439,219,0,1708,1709,3,435,217,0,1709,1710, - 3,441,220,0,1710,1711,3,427,213,0,1711,1712,3,405,202,0,1712,1713, - 3,401,200,0,1713,1714,3,439,219,0,1714,1715,3,409,204,0,1715,344, - 1,0,0,0,1716,1717,3,439,219,0,1717,1718,3,439,219,0,1718,1719,3, - 423,211,0,1719,346,1,0,0,0,1720,1721,3,439,219,0,1721,1722,3,449, - 224,0,1722,1723,3,431,215,0,1723,1724,3,409,204,0,1724,348,1,0,0, - 0,1725,1726,3,441,220,0,1726,1727,3,427,213,0,1727,1728,3,403,201, - 0,1728,1729,3,429,214,0,1729,1730,3,441,220,0,1730,1731,3,427,213, - 0,1731,1732,3,407,203,0,1732,1733,3,409,204,0,1733,1734,3,407,203, - 0,1734,350,1,0,0,0,1735,1736,3,441,220,0,1736,1737,3,427,213,0,1737, - 1738,3,417,208,0,1738,1739,3,429,214,0,1739,1740,3,427,213,0,1740, - 352,1,0,0,0,1741,1742,3,441,220,0,1742,1743,3,431,215,0,1743,1744, - 3,407,203,0,1744,1745,3,401,200,0,1745,1746,3,439,219,0,1746,1747, - 3,409,204,0,1747,354,1,0,0,0,1748,1749,3,441,220,0,1749,1750,3,437, - 218,0,1750,1751,3,409,204,0,1751,356,1,0,0,0,1752,1753,3,441,220, - 0,1753,1754,3,437,218,0,1754,1755,3,417,208,0,1755,1756,3,427,213, - 0,1756,1757,3,413,206,0,1757,358,1,0,0,0,1758,1759,3,441,220,0,1759, - 1760,3,441,220,0,1760,1761,3,417,208,0,1761,1762,3,407,203,0,1762, - 360,1,0,0,0,1763,1764,3,443,221,0,1764,1765,3,401,200,0,1765,1766, - 3,423,211,0,1766,1767,3,441,220,0,1767,1768,3,409,204,0,1768,1769, - 3,437,218,0,1769,362,1,0,0,0,1770,1771,3,443,221,0,1771,1772,3,417, - 208,0,1772,1773,3,409,204,0,1773,1774,3,445,222,0,1774,364,1,0,0, - 0,1775,1776,3,443,221,0,1776,1777,3,429,214,0,1777,1778,3,423,211, - 0,1778,1779,3,441,220,0,1779,1780,3,425,212,0,1780,1781,3,409,204, - 0,1781,366,1,0,0,0,1782,1783,3,445,222,0,1783,1784,3,401,200,0,1784, - 1785,3,439,219,0,1785,1786,3,405,202,0,1786,1787,3,415,207,0,1787, - 368,1,0,0,0,1788,1789,3,445,222,0,1789,1790,3,409,204,0,1790,1791, - 3,409,204,0,1791,1792,3,421,210,0,1792,370,1,0,0,0,1793,1794,3,445, - 222,0,1794,1795,3,415,207,0,1795,1796,3,409,204,0,1796,1797,3,427, - 213,0,1797,372,1,0,0,0,1798,1799,3,445,222,0,1799,1800,3,415,207, - 0,1800,1801,3,409,204,0,1801,1802,3,435,217,0,1802,1803,3,409,204, - 0,1803,374,1,0,0,0,1804,1805,3,445,222,0,1805,1806,3,417,208,0,1806, - 1807,3,427,213,0,1807,1808,3,407,203,0,1808,1809,3,429,214,0,1809, - 1810,3,445,222,0,1810,376,1,0,0,0,1811,1812,3,445,222,0,1812,1813, - 3,417,208,0,1813,1814,3,439,219,0,1814,1815,3,415,207,0,1815,378, - 1,0,0,0,1816,1817,3,449,224,0,1817,1818,3,409,204,0,1818,1819,3, - 401,200,0,1819,1820,3,435,217,0,1820,1827,1,0,0,0,1821,1822,3,449, - 224,0,1822,1823,3,449,224,0,1823,1824,3,449,224,0,1824,1825,3,449, - 224,0,1825,1827,1,0,0,0,1826,1816,1,0,0,0,1826,1821,1,0,0,0,1827, - 380,1,0,0,0,1828,1829,5,102,0,0,1829,1830,5,97,0,0,1830,1831,5,108, - 0,0,1831,1832,5,115,0,0,1832,1833,5,101,0,0,1833,382,1,0,0,0,1834, - 1835,5,116,0,0,1835,1836,5,114,0,0,1836,1837,5,117,0,0,1837,1838, - 5,101,0,0,1838,384,1,0,0,0,1839,1840,3,467,233,0,1840,1841,3,403, - 201,0,1841,1870,1,0,0,0,1842,1843,3,467,233,0,1843,1844,3,411,205, - 0,1844,1870,1,0,0,0,1845,1846,3,467,233,0,1846,1847,3,435,217,0, - 1847,1870,1,0,0,0,1848,1849,3,467,233,0,1849,1850,3,427,213,0,1850, - 1870,1,0,0,0,1851,1852,3,467,233,0,1852,1853,3,439,219,0,1853,1870, - 1,0,0,0,1854,1855,3,467,233,0,1855,1856,5,48,0,0,1856,1870,1,0,0, - 0,1857,1858,3,467,233,0,1858,1859,3,401,200,0,1859,1870,1,0,0,0, - 1860,1861,3,467,233,0,1861,1862,3,443,221,0,1862,1870,1,0,0,0,1863, - 1864,3,467,233,0,1864,1865,3,467,233,0,1865,1870,1,0,0,0,1866,1867, - 3,467,233,0,1867,1868,3,521,260,0,1868,1870,1,0,0,0,1869,1839,1, - 0,0,0,1869,1842,1,0,0,0,1869,1845,1,0,0,0,1869,1848,1,0,0,0,1869, - 1851,1,0,0,0,1869,1854,1,0,0,0,1869,1857,1,0,0,0,1869,1860,1,0,0, - 0,1869,1863,1,0,0,0,1869,1866,1,0,0,0,1870,386,1,0,0,0,1871,1875, - 3,453,226,0,1872,1875,3,537,268,0,1873,1875,3,477,238,0,1874,1871, - 1,0,0,0,1874,1872,1,0,0,0,1874,1873,1,0,0,0,1875,1882,1,0,0,0,1876, - 1881,3,453,226,0,1877,1881,3,537,268,0,1878,1881,3,457,228,0,1879, - 1881,3,477,238,0,1880,1876,1,0,0,0,1880,1877,1,0,0,0,1880,1878,1, - 0,0,0,1880,1879,1,0,0,0,1881,1884,1,0,0,0,1882,1880,1,0,0,0,1882, - 1883,1,0,0,0,1883,1912,1,0,0,0,1884,1882,1,0,0,0,1885,1893,3,465, - 232,0,1886,1892,8,0,0,0,1887,1892,3,385,192,0,1888,1889,3,465,232, - 0,1889,1890,3,465,232,0,1890,1892,1,0,0,0,1891,1886,1,0,0,0,1891, - 1887,1,0,0,0,1891,1888,1,0,0,0,1892,1895,1,0,0,0,1893,1891,1,0,0, - 0,1893,1894,1,0,0,0,1894,1896,1,0,0,0,1895,1893,1,0,0,0,1896,1897, - 3,465,232,0,1897,1912,1,0,0,0,1898,1906,3,519,259,0,1899,1905,8, - 1,0,0,1900,1905,3,385,192,0,1901,1902,3,519,259,0,1902,1903,3,519, - 259,0,1903,1905,1,0,0,0,1904,1899,1,0,0,0,1904,1900,1,0,0,0,1904, - 1901,1,0,0,0,1905,1908,1,0,0,0,1906,1904,1,0,0,0,1906,1907,1,0,0, - 0,1907,1909,1,0,0,0,1908,1906,1,0,0,0,1909,1910,3,519,259,0,1910, - 1912,1,0,0,0,1911,1874,1,0,0,0,1911,1885,1,0,0,0,1911,1898,1,0,0, - 0,1912,388,1,0,0,0,1913,1914,3,395,197,0,1914,1918,3,479,239,0,1915, - 1917,3,459,229,0,1916,1915,1,0,0,0,1917,1920,1,0,0,0,1918,1916,1, - 0,0,0,1918,1919,1,0,0,0,1919,1923,1,0,0,0,1920,1918,1,0,0,0,1921, - 1924,3,431,215,0,1922,1924,3,409,204,0,1923,1921,1,0,0,0,1923,1922, - 1,0,0,0,1924,1927,1,0,0,0,1925,1928,3,515,257,0,1926,1928,3,475, - 237,0,1927,1925,1,0,0,0,1927,1926,1,0,0,0,1927,1928,1,0,0,0,1928, - 1930,1,0,0,0,1929,1931,3,457,228,0,1930,1929,1,0,0,0,1931,1932,1, - 0,0,0,1932,1930,1,0,0,0,1932,1933,1,0,0,0,1933,1990,1,0,0,0,1934, - 1937,3,395,197,0,1935,1938,3,431,215,0,1936,1938,3,409,204,0,1937, - 1935,1,0,0,0,1937,1936,1,0,0,0,1938,1941,1,0,0,0,1939,1942,3,515, - 257,0,1940,1942,3,475,237,0,1941,1939,1,0,0,0,1941,1940,1,0,0,0, - 1941,1942,1,0,0,0,1942,1944,1,0,0,0,1943,1945,3,457,228,0,1944,1943, - 1,0,0,0,1945,1946,1,0,0,0,1946,1944,1,0,0,0,1946,1947,1,0,0,0,1947, - 1990,1,0,0,0,1948,1949,3,393,196,0,1949,1953,3,479,239,0,1950,1952, - 3,457,228,0,1951,1950,1,0,0,0,1952,1955,1,0,0,0,1953,1951,1,0,0, - 0,1953,1954,1,0,0,0,1954,1956,1,0,0,0,1955,1953,1,0,0,0,1956,1959, - 3,409,204,0,1957,1960,3,515,257,0,1958,1960,3,475,237,0,1959,1957, - 1,0,0,0,1959,1958,1,0,0,0,1959,1960,1,0,0,0,1960,1962,1,0,0,0,1961, - 1963,3,457,228,0,1962,1961,1,0,0,0,1963,1964,1,0,0,0,1964,1962,1, - 0,0,0,1964,1965,1,0,0,0,1965,1990,1,0,0,0,1966,1967,3,479,239,0, - 1967,1968,3,393,196,0,1968,1971,3,409,204,0,1969,1972,3,515,257, - 0,1970,1972,3,475,237,0,1971,1969,1,0,0,0,1971,1970,1,0,0,0,1971, - 1972,1,0,0,0,1972,1974,1,0,0,0,1973,1975,3,457,228,0,1974,1973,1, - 0,0,0,1975,1976,1,0,0,0,1976,1974,1,0,0,0,1976,1977,1,0,0,0,1977, - 1990,1,0,0,0,1978,1979,3,393,196,0,1979,1982,3,409,204,0,1980,1983, - 3,515,257,0,1981,1983,3,475,237,0,1982,1980,1,0,0,0,1982,1981,1, - 0,0,0,1982,1983,1,0,0,0,1983,1985,1,0,0,0,1984,1986,3,457,228,0, - 1985,1984,1,0,0,0,1986,1987,1,0,0,0,1987,1985,1,0,0,0,1987,1988, - 1,0,0,0,1988,1990,1,0,0,0,1989,1913,1,0,0,0,1989,1934,1,0,0,0,1989, - 1948,1,0,0,0,1989,1966,1,0,0,0,1989,1978,1,0,0,0,1990,390,1,0,0, - 0,1991,1993,5,48,0,0,1992,1994,3,455,227,0,1993,1992,1,0,0,0,1994, - 1995,1,0,0,0,1995,1993,1,0,0,0,1995,1996,1,0,0,0,1996,392,1,0,0, - 0,1997,1999,3,457,228,0,1998,1997,1,0,0,0,1999,2000,1,0,0,0,2000, - 1998,1,0,0,0,2000,2001,1,0,0,0,2001,394,1,0,0,0,2002,2003,5,48,0, - 0,2003,2005,3,447,223,0,2004,2006,3,459,229,0,2005,2004,1,0,0,0, - 2006,2007,1,0,0,0,2007,2005,1,0,0,0,2007,2008,1,0,0,0,2008,396,1, - 0,0,0,2009,2017,3,521,260,0,2010,2016,8,2,0,0,2011,2016,3,385,192, - 0,2012,2013,3,521,260,0,2013,2014,3,521,260,0,2014,2016,1,0,0,0, - 2015,2010,1,0,0,0,2015,2011,1,0,0,0,2015,2012,1,0,0,0,2016,2019, - 1,0,0,0,2017,2015,1,0,0,0,2017,2018,1,0,0,0,2018,2020,1,0,0,0,2019, - 2017,1,0,0,0,2020,2021,3,521,260,0,2021,398,1,0,0,0,2022,2030,3, - 495,247,0,2023,2029,8,3,0,0,2024,2029,3,385,192,0,2025,2026,3,495, - 247,0,2026,2027,3,495,247,0,2027,2029,1,0,0,0,2028,2023,1,0,0,0, - 2028,2024,1,0,0,0,2028,2025,1,0,0,0,2029,2032,1,0,0,0,2030,2028, - 1,0,0,0,2030,2031,1,0,0,0,2031,2033,1,0,0,0,2032,2030,1,0,0,0,2033, - 2034,3,527,263,0,2034,400,1,0,0,0,2035,2036,7,4,0,0,2036,402,1,0, - 0,0,2037,2038,7,5,0,0,2038,404,1,0,0,0,2039,2040,7,6,0,0,2040,406, - 1,0,0,0,2041,2042,7,7,0,0,2042,408,1,0,0,0,2043,2044,7,8,0,0,2044, - 410,1,0,0,0,2045,2046,7,9,0,0,2046,412,1,0,0,0,2047,2048,7,10,0, - 0,2048,414,1,0,0,0,2049,2050,7,11,0,0,2050,416,1,0,0,0,2051,2052, - 7,12,0,0,2052,418,1,0,0,0,2053,2054,7,13,0,0,2054,420,1,0,0,0,2055, - 2056,7,14,0,0,2056,422,1,0,0,0,2057,2058,7,15,0,0,2058,424,1,0,0, - 0,2059,2060,7,16,0,0,2060,426,1,0,0,0,2061,2062,7,17,0,0,2062,428, - 1,0,0,0,2063,2064,7,18,0,0,2064,430,1,0,0,0,2065,2066,7,19,0,0,2066, - 432,1,0,0,0,2067,2068,7,20,0,0,2068,434,1,0,0,0,2069,2070,7,21,0, - 0,2070,436,1,0,0,0,2071,2072,7,22,0,0,2072,438,1,0,0,0,2073,2074, - 7,23,0,0,2074,440,1,0,0,0,2075,2076,7,24,0,0,2076,442,1,0,0,0,2077, - 2078,7,25,0,0,2078,444,1,0,0,0,2079,2080,7,26,0,0,2080,446,1,0,0, - 0,2081,2082,7,27,0,0,2082,448,1,0,0,0,2083,2084,7,28,0,0,2084,450, - 1,0,0,0,2085,2086,7,29,0,0,2086,452,1,0,0,0,2087,2088,7,30,0,0,2088, - 454,1,0,0,0,2089,2090,7,31,0,0,2090,456,1,0,0,0,2091,2092,7,32,0, - 0,2092,458,1,0,0,0,2093,2094,7,33,0,0,2094,460,1,0,0,0,2095,2096, - 5,45,0,0,2096,2097,5,62,0,0,2097,462,1,0,0,0,2098,2099,5,42,0,0, - 2099,464,1,0,0,0,2100,2101,5,96,0,0,2101,466,1,0,0,0,2102,2103,5, - 92,0,0,2103,468,1,0,0,0,2104,2105,5,58,0,0,2105,470,1,0,0,0,2106, - 2107,5,44,0,0,2107,472,1,0,0,0,2108,2109,5,124,0,0,2109,2110,5,124, - 0,0,2110,474,1,0,0,0,2111,2112,5,45,0,0,2112,476,1,0,0,0,2113,2114, - 5,36,0,0,2114,478,1,0,0,0,2115,2116,5,46,0,0,2116,480,1,0,0,0,2117, - 2118,5,61,0,0,2118,2119,5,61,0,0,2119,482,1,0,0,0,2120,2121,5,61, - 0,0,2121,484,1,0,0,0,2122,2123,5,62,0,0,2123,2124,5,61,0,0,2124, - 486,1,0,0,0,2125,2126,5,62,0,0,2126,488,1,0,0,0,2127,2128,5,35,0, - 0,2128,490,1,0,0,0,2129,2130,5,126,0,0,2130,2131,5,42,0,0,2131,492, - 1,0,0,0,2132,2133,5,61,0,0,2133,2134,5,126,0,0,2134,2135,5,42,0, - 0,2135,494,1,0,0,0,2136,2137,5,123,0,0,2137,496,1,0,0,0,2138,2139, - 5,91,0,0,2139,498,1,0,0,0,2140,2141,5,40,0,0,2141,500,1,0,0,0,2142, - 2143,5,60,0,0,2143,2144,5,61,0,0,2144,502,1,0,0,0,2145,2146,5,60, - 0,0,2146,504,1,0,0,0,2147,2148,5,33,0,0,2148,2152,5,61,0,0,2149, - 2150,5,60,0,0,2150,2152,5,62,0,0,2151,2147,1,0,0,0,2151,2149,1,0, - 0,0,2152,506,1,0,0,0,2153,2154,5,33,0,0,2154,2155,5,126,0,0,2155, - 2156,5,42,0,0,2156,508,1,0,0,0,2157,2158,5,33,0,0,2158,2159,5,126, - 0,0,2159,510,1,0,0,0,2160,2161,5,63,0,0,2161,2162,5,63,0,0,2162, - 512,1,0,0,0,2163,2164,5,37,0,0,2164,514,1,0,0,0,2165,2166,5,43,0, - 0,2166,516,1,0,0,0,2167,2168,5,63,0,0,2168,518,1,0,0,0,2169,2170, - 5,34,0,0,2170,520,1,0,0,0,2171,2172,5,39,0,0,2172,522,1,0,0,0,2173, - 2174,5,126,0,0,2174,524,1,0,0,0,2175,2176,5,61,0,0,2176,2177,5,126, - 0,0,2177,526,1,0,0,0,2178,2179,5,125,0,0,2179,528,1,0,0,0,2180,2181, - 5,93,0,0,2181,530,1,0,0,0,2182,2183,5,41,0,0,2183,532,1,0,0,0,2184, - 2185,5,59,0,0,2185,534,1,0,0,0,2186,2187,5,47,0,0,2187,536,1,0,0, - 0,2188,2189,5,95,0,0,2189,538,1,0,0,0,2190,2191,5,47,0,0,2191,2192, - 5,42,0,0,2192,2196,1,0,0,0,2193,2195,9,0,0,0,2194,2193,1,0,0,0,2195, - 2198,1,0,0,0,2196,2197,1,0,0,0,2196,2194,1,0,0,0,2197,2199,1,0,0, - 0,2198,2196,1,0,0,0,2199,2200,5,42,0,0,2200,2201,5,47,0,0,2201,2202, - 1,0,0,0,2202,2203,6,269,0,0,2203,540,1,0,0,0,2204,2205,5,45,0,0, - 2205,2206,5,45,0,0,2206,2210,1,0,0,0,2207,2209,8,34,0,0,2208,2207, - 1,0,0,0,2209,2212,1,0,0,0,2210,2208,1,0,0,0,2210,2211,1,0,0,0,2211, - 2214,1,0,0,0,2212,2210,1,0,0,0,2213,2215,7,35,0,0,2214,2213,1,0, - 0,0,2215,2216,1,0,0,0,2216,2217,6,270,0,0,2217,542,1,0,0,0,2218, - 2219,7,36,0,0,2219,2220,1,0,0,0,2220,2221,6,271,1,0,2221,544,1,0, - 0,0,39,0,607,1112,1826,1869,1874,1880,1882,1891,1893,1904,1906,1911, - 1918,1923,1927,1932,1937,1941,1946,1953,1959,1964,1971,1976,1982, - 1987,1989,1995,2000,2007,2015,2017,2028,2030,2151,2196,2210,2214, - 2,6,0,0,0,1,0 + 3,192,1870,8,192,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193, + 1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193, + 1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193,1,193, + 3,193,1902,8,193,1,194,1,194,1,194,3,194,1907,8,194,1,194,1,194, + 1,194,1,194,5,194,1913,8,194,10,194,12,194,1916,9,194,1,194,1,194, + 1,194,1,194,1,194,1,194,5,194,1924,8,194,10,194,12,194,1927,9,194, + 1,194,1,194,1,194,1,194,1,194,1,194,1,194,1,194,5,194,1937,8,194, + 10,194,12,194,1940,9,194,1,194,1,194,3,194,1944,8,194,1,195,1,195, + 1,195,5,195,1949,8,195,10,195,12,195,1952,9,195,1,195,1,195,3,195, + 1956,8,195,1,195,1,195,3,195,1960,8,195,1,195,4,195,1963,8,195,11, + 195,12,195,1964,1,195,1,195,1,195,3,195,1970,8,195,1,195,1,195,3, + 195,1974,8,195,1,195,4,195,1977,8,195,11,195,12,195,1978,1,195,1, + 195,1,195,5,195,1984,8,195,10,195,12,195,1987,9,195,1,195,1,195, + 1,195,3,195,1992,8,195,1,195,4,195,1995,8,195,11,195,12,195,1996, + 1,195,1,195,1,195,1,195,1,195,3,195,2004,8,195,1,195,4,195,2007, + 8,195,11,195,12,195,2008,1,195,1,195,1,195,1,195,3,195,2015,8,195, + 1,195,4,195,2018,8,195,11,195,12,195,2019,3,195,2022,8,195,1,196, + 1,196,4,196,2026,8,196,11,196,12,196,2027,1,197,4,197,2031,8,197, + 11,197,12,197,2032,1,198,1,198,1,198,4,198,2038,8,198,11,198,12, + 198,2039,1,199,1,199,1,199,1,199,1,199,1,199,5,199,2048,8,199,10, + 199,12,199,2051,9,199,1,199,1,199,1,200,1,200,1,201,1,201,1,202, + 1,202,1,203,1,203,1,204,1,204,1,205,1,205,1,206,1,206,1,207,1,207, + 1,208,1,208,1,209,1,209,1,210,1,210,1,211,1,211,1,212,1,212,1,213, + 1,213,1,214,1,214,1,215,1,215,1,216,1,216,1,217,1,217,1,218,1,218, + 1,219,1,219,1,220,1,220,1,221,1,221,1,222,1,222,1,223,1,223,1,224, + 1,224,1,225,1,225,1,226,1,226,1,227,1,227,1,228,1,228,1,229,1,229, + 1,230,1,230,1,230,1,231,1,231,1,232,1,232,1,233,1,233,1,234,1,234, + 1,235,1,235,1,236,1,236,1,236,1,237,1,237,1,238,1,238,1,239,1,239, + 1,240,1,240,1,240,1,241,1,241,1,242,1,242,1,242,1,243,1,243,1,244, + 1,244,1,245,1,245,1,245,1,246,1,246,1,246,1,246,1,247,1,247,1,248, + 1,248,1,249,1,249,1,250,1,250,1,250,1,251,1,251,1,252,1,252,1,252, + 1,252,3,252,2171,8,252,1,253,1,253,1,253,1,253,1,254,1,254,1,254, + 1,255,1,255,1,255,1,256,1,256,1,257,1,257,1,258,1,258,1,259,1,259, + 1,260,1,260,1,261,1,261,1,262,1,262,1,262,1,263,1,263,1,264,1,264, + 1,265,1,265,1,266,1,266,1,267,1,267,1,268,1,268,1,269,1,269,1,269, + 1,269,5,269,2214,8,269,10,269,12,269,2217,9,269,1,269,1,269,1,269, + 1,269,1,269,1,270,1,270,1,270,1,270,5,270,2228,8,270,10,270,12,270, + 2231,9,270,1,270,3,270,2234,8,270,1,270,1,270,1,271,1,271,1,271, + 1,271,1,2215,0,272,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10, + 21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21, + 43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29,59,30,61,31,63,32, + 65,33,67,34,69,35,71,36,73,37,75,38,77,39,79,40,81,41,83,42,85,43, + 87,44,89,45,91,46,93,47,95,48,97,49,99,50,101,51,103,52,105,53,107, + 54,109,55,111,56,113,57,115,58,117,59,119,60,121,61,123,62,125,63, + 127,64,129,65,131,66,133,67,135,68,137,69,139,70,141,71,143,72,145, + 73,147,74,149,75,151,76,153,77,155,78,157,79,159,80,161,81,163,82, + 165,83,167,84,169,85,171,86,173,87,175,88,177,89,179,90,181,91,183, + 92,185,93,187,94,189,95,191,96,193,97,195,98,197,99,199,100,201, + 101,203,102,205,103,207,104,209,105,211,106,213,107,215,108,217, + 109,219,110,221,111,223,112,225,113,227,114,229,115,231,116,233, + 117,235,118,237,119,239,120,241,121,243,122,245,123,247,124,249, + 125,251,126,253,127,255,128,257,129,259,130,261,131,263,132,265, + 133,267,134,269,135,271,136,273,137,275,138,277,139,279,140,281, + 141,283,142,285,143,287,144,289,145,291,146,293,147,295,148,297, + 149,299,150,301,151,303,152,305,153,307,154,309,155,311,156,313, + 157,315,158,317,159,319,160,321,161,323,162,325,163,327,164,329, + 165,331,166,333,167,335,168,337,169,339,170,341,171,343,172,345, + 173,347,174,349,175,351,176,353,177,355,178,357,179,359,180,361, + 181,363,182,365,183,367,184,369,185,371,186,373,187,375,188,377, + 189,379,190,381,191,383,192,385,193,387,194,389,195,391,196,393, + 197,395,198,397,199,399,200,401,0,403,0,405,0,407,0,409,0,411,0, + 413,0,415,0,417,0,419,0,421,0,423,0,425,0,427,0,429,0,431,0,433, + 0,435,0,437,0,439,0,441,0,443,0,445,0,447,0,449,0,451,0,453,0,455, + 0,457,0,459,0,461,201,463,202,465,203,467,204,469,205,471,206,473, + 207,475,208,477,209,479,210,481,211,483,212,485,213,487,214,489, + 215,491,216,493,217,495,218,497,219,499,220,501,221,503,222,505, + 223,507,224,509,225,511,226,513,227,515,228,517,229,519,230,521, + 231,523,232,525,233,527,234,529,235,531,236,533,237,535,238,537, + 239,539,240,541,241,543,242,1,0,36,2,0,92,92,96,96,2,0,34,34,92, + 92,2,0,39,39,92,92,2,0,65,65,97,97,2,0,66,66,98,98,2,0,67,67,99, + 99,2,0,68,68,100,100,2,0,69,69,101,101,2,0,70,70,102,102,2,0,71, + 71,103,103,2,0,72,72,104,104,2,0,73,73,105,105,2,0,74,74,106,106, + 2,0,75,75,107,107,2,0,76,76,108,108,2,0,77,77,109,109,2,0,78,78, + 110,110,2,0,79,79,111,111,2,0,80,80,112,112,2,0,81,81,113,113,2, + 0,82,82,114,114,2,0,83,83,115,115,2,0,84,84,116,116,2,0,85,85,117, + 117,2,0,86,86,118,118,2,0,87,87,119,119,2,0,88,88,120,120,2,0,89, + 89,121,121,2,0,90,90,122,122,2,0,65,90,97,122,1,0,48,55,1,0,48,57, + 3,0,48,57,65,70,97,102,2,0,10,10,13,13,2,1,10,10,13,13,2,0,9,13, + 32,32,2277,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1, + 0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1, + 0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1, + 0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1, + 0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1, + 0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,59,1, + 0,0,0,0,61,1,0,0,0,0,63,1,0,0,0,0,65,1,0,0,0,0,67,1,0,0,0,0,69,1, + 0,0,0,0,71,1,0,0,0,0,73,1,0,0,0,0,75,1,0,0,0,0,77,1,0,0,0,0,79,1, + 0,0,0,0,81,1,0,0,0,0,83,1,0,0,0,0,85,1,0,0,0,0,87,1,0,0,0,0,89,1, + 0,0,0,0,91,1,0,0,0,0,93,1,0,0,0,0,95,1,0,0,0,0,97,1,0,0,0,0,99,1, + 0,0,0,0,101,1,0,0,0,0,103,1,0,0,0,0,105,1,0,0,0,0,107,1,0,0,0,0, + 109,1,0,0,0,0,111,1,0,0,0,0,113,1,0,0,0,0,115,1,0,0,0,0,117,1,0, + 0,0,0,119,1,0,0,0,0,121,1,0,0,0,0,123,1,0,0,0,0,125,1,0,0,0,0,127, + 1,0,0,0,0,129,1,0,0,0,0,131,1,0,0,0,0,133,1,0,0,0,0,135,1,0,0,0, + 0,137,1,0,0,0,0,139,1,0,0,0,0,141,1,0,0,0,0,143,1,0,0,0,0,145,1, + 0,0,0,0,147,1,0,0,0,0,149,1,0,0,0,0,151,1,0,0,0,0,153,1,0,0,0,0, + 155,1,0,0,0,0,157,1,0,0,0,0,159,1,0,0,0,0,161,1,0,0,0,0,163,1,0, + 0,0,0,165,1,0,0,0,0,167,1,0,0,0,0,169,1,0,0,0,0,171,1,0,0,0,0,173, + 1,0,0,0,0,175,1,0,0,0,0,177,1,0,0,0,0,179,1,0,0,0,0,181,1,0,0,0, + 0,183,1,0,0,0,0,185,1,0,0,0,0,187,1,0,0,0,0,189,1,0,0,0,0,191,1, + 0,0,0,0,193,1,0,0,0,0,195,1,0,0,0,0,197,1,0,0,0,0,199,1,0,0,0,0, + 201,1,0,0,0,0,203,1,0,0,0,0,205,1,0,0,0,0,207,1,0,0,0,0,209,1,0, + 0,0,0,211,1,0,0,0,0,213,1,0,0,0,0,215,1,0,0,0,0,217,1,0,0,0,0,219, + 1,0,0,0,0,221,1,0,0,0,0,223,1,0,0,0,0,225,1,0,0,0,0,227,1,0,0,0, + 0,229,1,0,0,0,0,231,1,0,0,0,0,233,1,0,0,0,0,235,1,0,0,0,0,237,1, + 0,0,0,0,239,1,0,0,0,0,241,1,0,0,0,0,243,1,0,0,0,0,245,1,0,0,0,0, + 247,1,0,0,0,0,249,1,0,0,0,0,251,1,0,0,0,0,253,1,0,0,0,0,255,1,0, + 0,0,0,257,1,0,0,0,0,259,1,0,0,0,0,261,1,0,0,0,0,263,1,0,0,0,0,265, + 1,0,0,0,0,267,1,0,0,0,0,269,1,0,0,0,0,271,1,0,0,0,0,273,1,0,0,0, + 0,275,1,0,0,0,0,277,1,0,0,0,0,279,1,0,0,0,0,281,1,0,0,0,0,283,1, + 0,0,0,0,285,1,0,0,0,0,287,1,0,0,0,0,289,1,0,0,0,0,291,1,0,0,0,0, + 293,1,0,0,0,0,295,1,0,0,0,0,297,1,0,0,0,0,299,1,0,0,0,0,301,1,0, + 0,0,0,303,1,0,0,0,0,305,1,0,0,0,0,307,1,0,0,0,0,309,1,0,0,0,0,311, + 1,0,0,0,0,313,1,0,0,0,0,315,1,0,0,0,0,317,1,0,0,0,0,319,1,0,0,0, + 0,321,1,0,0,0,0,323,1,0,0,0,0,325,1,0,0,0,0,327,1,0,0,0,0,329,1, + 0,0,0,0,331,1,0,0,0,0,333,1,0,0,0,0,335,1,0,0,0,0,337,1,0,0,0,0, + 339,1,0,0,0,0,341,1,0,0,0,0,343,1,0,0,0,0,345,1,0,0,0,0,347,1,0, + 0,0,0,349,1,0,0,0,0,351,1,0,0,0,0,353,1,0,0,0,0,355,1,0,0,0,0,357, + 1,0,0,0,0,359,1,0,0,0,0,361,1,0,0,0,0,363,1,0,0,0,0,365,1,0,0,0, + 0,367,1,0,0,0,0,369,1,0,0,0,0,371,1,0,0,0,0,373,1,0,0,0,0,375,1, + 0,0,0,0,377,1,0,0,0,0,379,1,0,0,0,0,381,1,0,0,0,0,383,1,0,0,0,0, + 385,1,0,0,0,0,387,1,0,0,0,0,389,1,0,0,0,0,391,1,0,0,0,0,393,1,0, + 0,0,0,395,1,0,0,0,0,397,1,0,0,0,0,399,1,0,0,0,0,461,1,0,0,0,0,463, + 1,0,0,0,0,465,1,0,0,0,0,467,1,0,0,0,0,469,1,0,0,0,0,471,1,0,0,0, + 0,473,1,0,0,0,0,475,1,0,0,0,0,477,1,0,0,0,0,479,1,0,0,0,0,481,1, + 0,0,0,0,483,1,0,0,0,0,485,1,0,0,0,0,487,1,0,0,0,0,489,1,0,0,0,0, + 491,1,0,0,0,0,493,1,0,0,0,0,495,1,0,0,0,0,497,1,0,0,0,0,499,1,0, + 0,0,0,501,1,0,0,0,0,503,1,0,0,0,0,505,1,0,0,0,0,507,1,0,0,0,0,509, + 1,0,0,0,0,511,1,0,0,0,0,513,1,0,0,0,0,515,1,0,0,0,0,517,1,0,0,0, + 0,519,1,0,0,0,0,521,1,0,0,0,0,523,1,0,0,0,0,525,1,0,0,0,0,527,1, + 0,0,0,0,529,1,0,0,0,0,531,1,0,0,0,0,533,1,0,0,0,0,535,1,0,0,0,0, + 537,1,0,0,0,0,539,1,0,0,0,0,541,1,0,0,0,0,543,1,0,0,0,1,545,1,0, + 0,0,3,549,1,0,0,0,5,555,1,0,0,0,7,561,1,0,0,0,9,565,1,0,0,0,11,571, + 1,0,0,0,13,575,1,0,0,0,15,580,1,0,0,0,17,584,1,0,0,0,19,590,1,0, + 0,0,21,607,1,0,0,0,23,609,1,0,0,0,25,614,1,0,0,0,27,618,1,0,0,0, + 29,624,1,0,0,0,31,631,1,0,0,0,33,639,1,0,0,0,35,644,1,0,0,0,37,647, + 1,0,0,0,39,652,1,0,0,0,41,657,1,0,0,0,43,663,1,0,0,0,45,669,1,0, + 0,0,47,677,1,0,0,0,49,683,1,0,0,0,51,690,1,0,0,0,53,698,1,0,0,0, + 55,705,1,0,0,0,57,713,1,0,0,0,59,724,1,0,0,0,61,731,1,0,0,0,63,737, + 1,0,0,0,65,742,1,0,0,0,67,750,1,0,0,0,69,759,1,0,0,0,71,769,1,0, + 0,0,73,774,1,0,0,0,75,778,1,0,0,0,77,790,1,0,0,0,79,798,1,0,0,0, + 81,804,1,0,0,0,83,811,1,0,0,0,85,816,1,0,0,0,87,827,1,0,0,0,89,836, + 1,0,0,0,91,843,1,0,0,0,93,856,1,0,0,0,95,867,1,0,0,0,97,872,1,0, + 0,0,99,881,1,0,0,0,101,893,1,0,0,0,103,898,1,0,0,0,105,903,1,0,0, + 0,107,907,1,0,0,0,109,914,1,0,0,0,111,921,1,0,0,0,113,928,1,0,0, + 0,115,936,1,0,0,0,117,947,1,0,0,0,119,955,1,0,0,0,121,963,1,0,0, + 0,123,969,1,0,0,0,125,975,1,0,0,0,127,981,1,0,0,0,129,991,1,0,0, + 0,131,995,1,0,0,0,133,1002,1,0,0,0,135,1009,1,0,0,0,137,1014,1,0, + 0,0,139,1019,1,0,0,0,141,1028,1,0,0,0,143,1035,1,0,0,0,145,1047, + 1,0,0,0,147,1053,1,0,0,0,149,1060,1,0,0,0,151,1073,1,0,0,0,153,1078, + 1,0,0,0,155,1081,1,0,0,0,157,1084,1,0,0,0,159,1090,1,0,0,0,161,1093, + 1,0,0,0,163,1112,1,0,0,0,165,1114,1,0,0,0,167,1124,1,0,0,0,169,1130, + 1,0,0,0,171,1137,1,0,0,0,173,1146,1,0,0,0,175,1151,1,0,0,0,177,1154, + 1,0,0,0,179,1167,1,0,0,0,181,1172,1,0,0,0,183,1176,1,0,0,0,185,1181, + 1,0,0,0,187,1186,1,0,0,0,189,1193,1,0,0,0,191,1201,1,0,0,0,193,1206, + 1,0,0,0,195,1215,1,0,0,0,197,1220,1,0,0,0,199,1226,1,0,0,0,201,1231, + 1,0,0,0,203,1237,1,0,0,0,205,1242,1,0,0,0,207,1254,1,0,0,0,209,1267, + 1,0,0,0,211,1271,1,0,0,0,213,1278,1,0,0,0,215,1282,1,0,0,0,217,1289, + 1,0,0,0,219,1296,1,0,0,0,221,1302,1,0,0,0,223,1307,1,0,0,0,225,1316, + 1,0,0,0,227,1320,1,0,0,0,229,1323,1,0,0,0,231,1327,1,0,0,0,233,1332, + 1,0,0,0,235,1338,1,0,0,0,237,1345,1,0,0,0,239,1348,1,0,0,0,241,1357, + 1,0,0,0,243,1360,1,0,0,0,245,1366,1,0,0,0,247,1372,1,0,0,0,249,1380, + 1,0,0,0,251,1385,1,0,0,0,253,1395,1,0,0,0,255,1404,1,0,0,0,257,1414, + 1,0,0,0,259,1423,1,0,0,0,261,1431,1,0,0,0,263,1442,1,0,0,0,265,1450, + 1,0,0,0,267,1456,1,0,0,0,269,1463,1,0,0,0,271,1470,1,0,0,0,273,1477, + 1,0,0,0,275,1485,1,0,0,0,277,1493,1,0,0,0,279,1504,1,0,0,0,281,1510, + 1,0,0,0,283,1517,1,0,0,0,285,1521,1,0,0,0,287,1526,1,0,0,0,289,1533, + 1,0,0,0,291,1540,1,0,0,0,293,1547,1,0,0,0,295,1552,1,0,0,0,297,1558, + 1,0,0,0,299,1562,1,0,0,0,301,1571,1,0,0,0,303,1576,1,0,0,0,305,1583, + 1,0,0,0,307,1589,1,0,0,0,309,1594,1,0,0,0,311,1604,1,0,0,0,313,1609, + 1,0,0,0,315,1616,1,0,0,0,317,1623,1,0,0,0,319,1629,1,0,0,0,321,1636, + 1,0,0,0,323,1646,1,0,0,0,325,1651,1,0,0,0,327,1656,1,0,0,0,329,1661, + 1,0,0,0,331,1669,1,0,0,0,333,1679,1,0,0,0,335,1682,1,0,0,0,337,1686, + 1,0,0,0,339,1693,1,0,0,0,341,1702,1,0,0,0,343,1707,1,0,0,0,345,1716, + 1,0,0,0,347,1720,1,0,0,0,349,1725,1,0,0,0,351,1735,1,0,0,0,353,1741, + 1,0,0,0,355,1748,1,0,0,0,357,1752,1,0,0,0,359,1758,1,0,0,0,361,1763, + 1,0,0,0,363,1770,1,0,0,0,365,1775,1,0,0,0,367,1782,1,0,0,0,369,1788, + 1,0,0,0,371,1793,1,0,0,0,373,1798,1,0,0,0,375,1804,1,0,0,0,377,1811, + 1,0,0,0,379,1826,1,0,0,0,381,1828,1,0,0,0,383,1834,1,0,0,0,385,1869, + 1,0,0,0,387,1901,1,0,0,0,389,1943,1,0,0,0,391,2021,1,0,0,0,393,2023, + 1,0,0,0,395,2030,1,0,0,0,397,2034,1,0,0,0,399,2041,1,0,0,0,401,2054, + 1,0,0,0,403,2056,1,0,0,0,405,2058,1,0,0,0,407,2060,1,0,0,0,409,2062, + 1,0,0,0,411,2064,1,0,0,0,413,2066,1,0,0,0,415,2068,1,0,0,0,417,2070, + 1,0,0,0,419,2072,1,0,0,0,421,2074,1,0,0,0,423,2076,1,0,0,0,425,2078, + 1,0,0,0,427,2080,1,0,0,0,429,2082,1,0,0,0,431,2084,1,0,0,0,433,2086, + 1,0,0,0,435,2088,1,0,0,0,437,2090,1,0,0,0,439,2092,1,0,0,0,441,2094, + 1,0,0,0,443,2096,1,0,0,0,445,2098,1,0,0,0,447,2100,1,0,0,0,449,2102, + 1,0,0,0,451,2104,1,0,0,0,453,2106,1,0,0,0,455,2108,1,0,0,0,457,2110, + 1,0,0,0,459,2112,1,0,0,0,461,2114,1,0,0,0,463,2117,1,0,0,0,465,2119, + 1,0,0,0,467,2121,1,0,0,0,469,2123,1,0,0,0,471,2125,1,0,0,0,473,2127, + 1,0,0,0,475,2130,1,0,0,0,477,2132,1,0,0,0,479,2134,1,0,0,0,481,2136, + 1,0,0,0,483,2139,1,0,0,0,485,2141,1,0,0,0,487,2144,1,0,0,0,489,2146, + 1,0,0,0,491,2148,1,0,0,0,493,2151,1,0,0,0,495,2155,1,0,0,0,497,2157, + 1,0,0,0,499,2159,1,0,0,0,501,2161,1,0,0,0,503,2164,1,0,0,0,505,2170, + 1,0,0,0,507,2172,1,0,0,0,509,2176,1,0,0,0,511,2179,1,0,0,0,513,2182, + 1,0,0,0,515,2184,1,0,0,0,517,2186,1,0,0,0,519,2188,1,0,0,0,521,2190, + 1,0,0,0,523,2192,1,0,0,0,525,2194,1,0,0,0,527,2197,1,0,0,0,529,2199, + 1,0,0,0,531,2201,1,0,0,0,533,2203,1,0,0,0,535,2205,1,0,0,0,537,2207, + 1,0,0,0,539,2209,1,0,0,0,541,2223,1,0,0,0,543,2237,1,0,0,0,545,546, + 3,401,200,0,546,547,3,407,203,0,547,548,3,407,203,0,548,2,1,0,0, + 0,549,550,3,401,200,0,550,551,3,411,205,0,551,552,3,439,219,0,552, + 553,3,409,204,0,553,554,3,435,217,0,554,4,1,0,0,0,555,556,3,401, + 200,0,556,557,3,423,211,0,557,558,3,417,208,0,558,559,3,401,200, + 0,559,560,3,437,218,0,560,6,1,0,0,0,561,562,3,401,200,0,562,563, + 3,423,211,0,563,564,3,423,211,0,564,8,1,0,0,0,565,566,3,401,200, + 0,566,567,3,423,211,0,567,568,3,439,219,0,568,569,3,409,204,0,569, + 570,3,435,217,0,570,10,1,0,0,0,571,572,3,401,200,0,572,573,3,427, + 213,0,573,574,3,407,203,0,574,12,1,0,0,0,575,576,3,401,200,0,576, + 577,3,427,213,0,577,578,3,439,219,0,578,579,3,417,208,0,579,14,1, + 0,0,0,580,581,3,401,200,0,581,582,3,427,213,0,582,583,3,449,224, + 0,583,16,1,0,0,0,584,585,3,401,200,0,585,586,3,435,217,0,586,587, + 3,435,217,0,587,588,3,401,200,0,588,589,3,449,224,0,589,18,1,0,0, + 0,590,591,3,401,200,0,591,592,3,437,218,0,592,20,1,0,0,0,593,594, + 3,401,200,0,594,595,3,437,218,0,595,596,3,405,202,0,596,608,1,0, + 0,0,597,598,3,401,200,0,598,599,3,437,218,0,599,600,3,405,202,0, + 600,601,3,409,204,0,601,602,3,427,213,0,602,603,3,407,203,0,603, + 604,3,417,208,0,604,605,3,427,213,0,605,606,3,413,206,0,606,608, + 1,0,0,0,607,593,1,0,0,0,607,597,1,0,0,0,608,22,1,0,0,0,609,610,3, + 401,200,0,610,611,3,437,218,0,611,612,3,429,214,0,612,613,3,411, + 205,0,613,24,1,0,0,0,614,615,3,401,200,0,615,616,3,437,218,0,616, + 617,3,439,219,0,617,26,1,0,0,0,618,619,3,401,200,0,619,620,3,437, + 218,0,620,621,3,449,224,0,621,622,3,427,213,0,622,623,3,405,202, + 0,623,28,1,0,0,0,624,625,3,401,200,0,625,626,3,439,219,0,626,627, + 3,439,219,0,627,628,3,401,200,0,628,629,3,405,202,0,629,630,3,415, + 207,0,630,30,1,0,0,0,631,632,3,403,201,0,632,633,3,409,204,0,633, + 634,3,439,219,0,634,635,3,445,222,0,635,636,3,409,204,0,636,637, + 3,409,204,0,637,638,3,427,213,0,638,32,1,0,0,0,639,640,3,403,201, + 0,640,641,3,429,214,0,641,642,3,439,219,0,642,643,3,415,207,0,643, + 34,1,0,0,0,644,645,3,403,201,0,645,646,3,449,224,0,646,36,1,0,0, + 0,647,648,3,405,202,0,648,649,3,401,200,0,649,650,3,437,218,0,650, + 651,3,409,204,0,651,38,1,0,0,0,652,653,3,405,202,0,653,654,3,401, + 200,0,654,655,3,437,218,0,655,656,3,439,219,0,656,40,1,0,0,0,657, + 658,3,405,202,0,658,659,3,415,207,0,659,660,3,409,204,0,660,661, + 3,405,202,0,661,662,3,421,210,0,662,42,1,0,0,0,663,664,3,405,202, + 0,664,665,3,423,211,0,665,666,3,409,204,0,666,667,3,401,200,0,667, + 668,3,435,217,0,668,44,1,0,0,0,669,670,3,405,202,0,670,671,3,423, + 211,0,671,672,3,441,220,0,672,673,3,437,218,0,673,674,3,439,219, + 0,674,675,3,409,204,0,675,676,3,435,217,0,676,46,1,0,0,0,677,678, + 3,405,202,0,678,679,3,429,214,0,679,680,3,407,203,0,680,681,3,409, + 204,0,681,682,3,405,202,0,682,48,1,0,0,0,683,684,3,405,202,0,684, + 685,3,429,214,0,685,686,3,415,207,0,686,687,3,429,214,0,687,688, + 3,435,217,0,688,689,3,439,219,0,689,50,1,0,0,0,690,691,3,405,202, + 0,691,692,3,429,214,0,692,693,3,423,211,0,693,694,3,423,211,0,694, + 695,3,401,200,0,695,696,3,439,219,0,696,697,3,409,204,0,697,52,1, + 0,0,0,698,699,3,405,202,0,699,700,3,429,214,0,700,701,3,423,211, + 0,701,702,3,441,220,0,702,703,3,425,212,0,703,704,3,427,213,0,704, + 54,1,0,0,0,705,706,3,405,202,0,706,707,3,429,214,0,707,708,3,425, + 212,0,708,709,3,425,212,0,709,710,3,409,204,0,710,711,3,427,213, + 0,711,712,3,439,219,0,712,56,1,0,0,0,713,714,3,405,202,0,714,715, + 3,429,214,0,715,716,3,427,213,0,716,717,3,437,218,0,717,718,3,439, + 219,0,718,719,3,435,217,0,719,720,3,401,200,0,720,721,3,417,208, + 0,721,722,3,427,213,0,722,723,3,439,219,0,723,58,1,0,0,0,724,725, + 3,405,202,0,725,726,3,435,217,0,726,727,3,409,204,0,727,728,3,401, + 200,0,728,729,3,439,219,0,729,730,3,409,204,0,730,60,1,0,0,0,731, + 732,3,405,202,0,732,733,3,435,217,0,733,734,3,429,214,0,734,735, + 3,437,218,0,735,736,3,437,218,0,736,62,1,0,0,0,737,738,3,405,202, + 0,738,739,3,441,220,0,739,740,3,403,201,0,740,741,3,409,204,0,741, + 64,1,0,0,0,742,743,3,405,202,0,743,744,3,441,220,0,744,745,3,435, + 217,0,745,746,3,435,217,0,746,747,3,409,204,0,747,748,3,427,213, + 0,748,749,3,439,219,0,749,66,1,0,0,0,750,751,3,407,203,0,751,752, + 3,401,200,0,752,753,3,439,219,0,753,754,3,401,200,0,754,755,3,403, + 201,0,755,756,3,401,200,0,756,757,3,437,218,0,757,758,3,409,204, + 0,758,68,1,0,0,0,759,760,3,407,203,0,760,761,3,401,200,0,761,762, + 3,439,219,0,762,763,3,401,200,0,763,764,3,403,201,0,764,765,3,401, + 200,0,765,766,3,437,218,0,766,767,3,409,204,0,767,768,3,437,218, + 0,768,70,1,0,0,0,769,770,3,407,203,0,770,771,3,401,200,0,771,772, + 3,439,219,0,772,773,3,409,204,0,773,72,1,0,0,0,774,775,3,407,203, + 0,775,776,3,401,200,0,776,777,3,449,224,0,777,74,1,0,0,0,778,779, + 3,407,203,0,779,780,3,409,204,0,780,781,3,407,203,0,781,782,3,441, + 220,0,782,783,3,431,215,0,783,784,3,423,211,0,784,785,3,417,208, + 0,785,786,3,405,202,0,786,787,3,401,200,0,787,788,3,439,219,0,788, + 789,3,409,204,0,789,76,1,0,0,0,790,791,3,407,203,0,791,792,3,409, + 204,0,792,793,3,411,205,0,793,794,3,401,200,0,794,795,3,441,220, + 0,795,796,3,423,211,0,796,797,3,439,219,0,797,78,1,0,0,0,798,799, + 3,407,203,0,799,800,3,409,204,0,800,801,3,423,211,0,801,802,3,401, + 200,0,802,803,3,449,224,0,803,80,1,0,0,0,804,805,3,407,203,0,805, + 806,3,409,204,0,806,807,3,423,211,0,807,808,3,409,204,0,808,809, + 3,439,219,0,809,810,3,409,204,0,810,82,1,0,0,0,811,812,3,407,203, + 0,812,813,3,409,204,0,813,814,3,437,218,0,814,815,3,405,202,0,815, + 84,1,0,0,0,816,817,3,407,203,0,817,818,3,409,204,0,818,819,3,437, + 218,0,819,820,3,405,202,0,820,821,3,409,204,0,821,822,3,427,213, + 0,822,823,3,407,203,0,823,824,3,417,208,0,824,825,3,427,213,0,825, + 826,3,413,206,0,826,86,1,0,0,0,827,828,3,407,203,0,828,829,3,409, + 204,0,829,830,3,437,218,0,830,831,3,405,202,0,831,832,3,435,217, + 0,832,833,3,417,208,0,833,834,3,403,201,0,834,835,3,409,204,0,835, + 88,1,0,0,0,836,837,3,407,203,0,837,838,3,409,204,0,838,839,3,439, + 219,0,839,840,3,401,200,0,840,841,3,405,202,0,841,842,3,415,207, + 0,842,90,1,0,0,0,843,844,3,407,203,0,844,845,3,417,208,0,845,846, + 3,405,202,0,846,847,3,439,219,0,847,848,3,417,208,0,848,849,3,429, + 214,0,849,850,3,427,213,0,850,851,3,401,200,0,851,852,3,435,217, + 0,852,853,3,417,208,0,853,854,3,409,204,0,854,855,3,437,218,0,855, + 92,1,0,0,0,856,857,3,407,203,0,857,858,3,417,208,0,858,859,3,405, + 202,0,859,860,3,439,219,0,860,861,3,417,208,0,861,862,3,429,214, + 0,862,863,3,427,213,0,863,864,3,401,200,0,864,865,3,435,217,0,865, + 866,3,449,224,0,866,94,1,0,0,0,867,868,3,407,203,0,868,869,3,417, + 208,0,869,870,3,437,218,0,870,871,3,421,210,0,871,96,1,0,0,0,872, + 873,3,407,203,0,873,874,3,417,208,0,874,875,3,437,218,0,875,876, + 3,439,219,0,876,877,3,417,208,0,877,878,3,427,213,0,878,879,3,405, + 202,0,879,880,3,439,219,0,880,98,1,0,0,0,881,882,3,407,203,0,882, + 883,3,417,208,0,883,884,3,437,218,0,884,885,3,439,219,0,885,886, + 3,435,217,0,886,887,3,417,208,0,887,888,3,403,201,0,888,889,3,441, + 220,0,889,890,3,439,219,0,890,891,3,409,204,0,891,892,3,407,203, + 0,892,100,1,0,0,0,893,894,3,407,203,0,894,895,3,435,217,0,895,896, + 3,429,214,0,896,897,3,431,215,0,897,102,1,0,0,0,898,899,3,409,204, + 0,899,900,3,423,211,0,900,901,3,437,218,0,901,902,3,409,204,0,902, + 104,1,0,0,0,903,904,3,409,204,0,904,905,3,427,213,0,905,906,3,407, + 203,0,906,106,1,0,0,0,907,908,3,409,204,0,908,909,3,427,213,0,909, + 910,3,413,206,0,910,911,3,417,208,0,911,912,3,427,213,0,912,913, + 3,409,204,0,913,108,1,0,0,0,914,915,3,409,204,0,915,916,3,443,221, + 0,916,917,3,409,204,0,917,918,3,427,213,0,918,919,3,439,219,0,919, + 920,3,437,218,0,920,110,1,0,0,0,921,922,3,409,204,0,922,923,3,447, + 223,0,923,924,3,417,208,0,924,925,3,437,218,0,925,926,3,439,219, + 0,926,927,3,437,218,0,927,112,1,0,0,0,928,929,3,409,204,0,929,930, + 3,447,223,0,930,931,3,431,215,0,931,932,3,423,211,0,932,933,3,401, + 200,0,933,934,3,417,208,0,934,935,3,427,213,0,935,114,1,0,0,0,936, + 937,3,409,204,0,937,938,3,447,223,0,938,939,3,431,215,0,939,940, + 3,435,217,0,940,941,3,409,204,0,941,942,3,437,218,0,942,943,3,437, + 218,0,943,944,3,417,208,0,944,945,3,429,214,0,945,946,3,427,213, + 0,946,116,1,0,0,0,947,948,3,409,204,0,948,949,3,447,223,0,949,950, + 3,439,219,0,950,951,3,435,217,0,951,952,3,401,200,0,952,953,3,405, + 202,0,953,954,3,439,219,0,954,118,1,0,0,0,955,956,3,411,205,0,956, + 957,3,409,204,0,957,958,3,439,219,0,958,959,3,405,202,0,959,960, + 3,415,207,0,960,961,3,409,204,0,961,962,3,437,218,0,962,120,1,0, + 0,0,963,964,3,411,205,0,964,965,3,417,208,0,965,966,3,427,213,0, + 966,967,3,401,200,0,967,968,3,423,211,0,968,122,1,0,0,0,969,970, + 3,411,205,0,970,971,3,417,208,0,971,972,3,435,217,0,972,973,3,437, + 218,0,973,974,3,439,219,0,974,124,1,0,0,0,975,976,3,411,205,0,976, + 977,3,423,211,0,977,978,3,441,220,0,978,979,3,437,218,0,979,980, + 3,415,207,0,980,126,1,0,0,0,981,982,3,411,205,0,982,983,3,429,214, + 0,983,984,3,423,211,0,984,985,3,423,211,0,985,986,3,429,214,0,986, + 987,3,445,222,0,987,988,3,417,208,0,988,989,3,427,213,0,989,990, + 3,413,206,0,990,128,1,0,0,0,991,992,3,411,205,0,992,993,3,429,214, + 0,993,994,3,435,217,0,994,130,1,0,0,0,995,996,3,411,205,0,996,997, + 3,429,214,0,997,998,3,435,217,0,998,999,3,425,212,0,999,1000,3,401, + 200,0,1000,1001,3,439,219,0,1001,132,1,0,0,0,1002,1003,3,411,205, + 0,1003,1004,3,435,217,0,1004,1005,3,409,204,0,1005,1006,3,409,204, + 0,1006,1007,3,451,225,0,1007,1008,3,409,204,0,1008,134,1,0,0,0,1009, + 1010,3,411,205,0,1010,1011,3,435,217,0,1011,1012,3,429,214,0,1012, + 1013,3,425,212,0,1013,136,1,0,0,0,1014,1015,3,411,205,0,1015,1016, + 3,441,220,0,1016,1017,3,423,211,0,1017,1018,3,423,211,0,1018,138, + 1,0,0,0,1019,1020,3,411,205,0,1020,1021,3,441,220,0,1021,1022,3, + 427,213,0,1022,1023,3,405,202,0,1023,1024,3,439,219,0,1024,1025, + 3,417,208,0,1025,1026,3,429,214,0,1026,1027,3,427,213,0,1027,140, + 1,0,0,0,1028,1029,3,413,206,0,1029,1030,3,423,211,0,1030,1031,3, + 429,214,0,1031,1032,3,403,201,0,1032,1033,3,401,200,0,1033,1034, + 3,423,211,0,1034,142,1,0,0,0,1035,1036,3,413,206,0,1036,1037,3,435, + 217,0,1037,1038,3,401,200,0,1038,1039,3,427,213,0,1039,1040,3,441, + 220,0,1040,1041,3,423,211,0,1041,1042,3,401,200,0,1042,1043,3,435, + 217,0,1043,1044,3,417,208,0,1044,1045,3,439,219,0,1045,1046,3,449, + 224,0,1046,144,1,0,0,0,1047,1048,3,413,206,0,1048,1049,3,435,217, + 0,1049,1050,3,429,214,0,1050,1051,3,441,220,0,1051,1052,3,431,215, + 0,1052,146,1,0,0,0,1053,1054,3,415,207,0,1054,1055,3,401,200,0,1055, + 1056,3,443,221,0,1056,1057,3,417,208,0,1057,1058,3,427,213,0,1058, + 1059,3,413,206,0,1059,148,1,0,0,0,1060,1061,3,415,207,0,1061,1062, + 3,417,208,0,1062,1063,3,409,204,0,1063,1064,3,435,217,0,1064,1065, + 3,401,200,0,1065,1066,3,435,217,0,1066,1067,3,405,202,0,1067,1068, + 3,415,207,0,1068,1069,3,417,208,0,1069,1070,3,405,202,0,1070,1071, + 3,401,200,0,1071,1072,3,423,211,0,1072,150,1,0,0,0,1073,1074,3,415, + 207,0,1074,1075,3,429,214,0,1075,1076,3,441,220,0,1076,1077,3,435, + 217,0,1077,152,1,0,0,0,1078,1079,3,417,208,0,1079,1080,3,407,203, + 0,1080,154,1,0,0,0,1081,1082,3,417,208,0,1082,1083,3,411,205,0,1083, + 156,1,0,0,0,1084,1085,3,417,208,0,1085,1086,3,423,211,0,1086,1087, + 3,417,208,0,1087,1088,3,421,210,0,1088,1089,3,409,204,0,1089,158, + 1,0,0,0,1090,1091,3,417,208,0,1091,1092,3,427,213,0,1092,160,1,0, + 0,0,1093,1094,3,417,208,0,1094,1095,3,427,213,0,1095,1096,3,407, + 203,0,1096,1097,3,409,204,0,1097,1098,3,447,223,0,1098,162,1,0,0, + 0,1099,1100,3,417,208,0,1100,1101,3,427,213,0,1101,1102,3,411,205, + 0,1102,1113,1,0,0,0,1103,1104,3,417,208,0,1104,1105,3,427,213,0, + 1105,1106,3,411,205,0,1106,1107,3,417,208,0,1107,1108,3,427,213, + 0,1108,1109,3,417,208,0,1109,1110,3,439,219,0,1110,1111,3,449,224, + 0,1111,1113,1,0,0,0,1112,1099,1,0,0,0,1112,1103,1,0,0,0,1113,164, + 1,0,0,0,1114,1115,3,417,208,0,1115,1116,3,427,213,0,1116,1117,3, + 419,209,0,1117,1118,3,409,204,0,1118,1119,3,405,202,0,1119,1120, + 3,439,219,0,1120,1121,3,417,208,0,1121,1122,3,443,221,0,1122,1123, + 3,409,204,0,1123,166,1,0,0,0,1124,1125,3,417,208,0,1125,1126,3,427, + 213,0,1126,1127,3,427,213,0,1127,1128,3,409,204,0,1128,1129,3,435, + 217,0,1129,168,1,0,0,0,1130,1131,3,417,208,0,1131,1132,3,427,213, + 0,1132,1133,3,437,218,0,1133,1134,3,409,204,0,1134,1135,3,435,217, + 0,1135,1136,3,439,219,0,1136,170,1,0,0,0,1137,1138,3,417,208,0,1138, + 1139,3,427,213,0,1139,1140,3,439,219,0,1140,1141,3,409,204,0,1141, + 1142,3,435,217,0,1142,1143,3,443,221,0,1143,1144,3,401,200,0,1144, + 1145,3,423,211,0,1145,172,1,0,0,0,1146,1147,3,417,208,0,1147,1148, + 3,427,213,0,1148,1149,3,439,219,0,1149,1150,3,429,214,0,1150,174, + 1,0,0,0,1151,1152,3,417,208,0,1152,1153,3,437,218,0,1153,176,1,0, + 0,0,1154,1155,3,417,208,0,1155,1156,3,437,218,0,1156,1157,3,537, + 268,0,1157,1158,3,429,214,0,1158,1159,3,403,201,0,1159,1160,3,419, + 209,0,1160,1161,3,409,204,0,1161,1162,3,405,202,0,1162,1163,3,439, + 219,0,1163,1164,3,537,268,0,1164,1165,3,417,208,0,1165,1166,3,407, + 203,0,1166,178,1,0,0,0,1167,1168,3,419,209,0,1168,1169,3,429,214, + 0,1169,1170,3,417,208,0,1170,1171,3,427,213,0,1171,180,1,0,0,0,1172, + 1173,3,421,210,0,1173,1174,3,409,204,0,1174,1175,3,449,224,0,1175, + 182,1,0,0,0,1176,1177,3,421,210,0,1177,1178,3,417,208,0,1178,1179, + 3,423,211,0,1179,1180,3,423,211,0,1180,184,1,0,0,0,1181,1182,3,423, + 211,0,1182,1183,3,401,200,0,1183,1184,3,437,218,0,1184,1185,3,439, + 219,0,1185,186,1,0,0,0,1186,1187,3,423,211,0,1187,1188,3,401,200, + 0,1188,1189,3,449,224,0,1189,1190,3,429,214,0,1190,1191,3,441,220, + 0,1191,1192,3,439,219,0,1192,188,1,0,0,0,1193,1194,3,423,211,0,1194, + 1195,3,409,204,0,1195,1196,3,401,200,0,1196,1197,3,407,203,0,1197, + 1198,3,417,208,0,1198,1199,3,427,213,0,1199,1200,3,413,206,0,1200, + 190,1,0,0,0,1201,1202,3,423,211,0,1202,1203,3,409,204,0,1203,1204, + 3,411,205,0,1204,1205,3,439,219,0,1205,192,1,0,0,0,1206,1207,3,423, + 211,0,1207,1208,3,417,208,0,1208,1209,3,411,205,0,1209,1210,3,409, + 204,0,1210,1211,3,439,219,0,1211,1212,3,417,208,0,1212,1213,3,425, + 212,0,1213,1214,3,409,204,0,1214,194,1,0,0,0,1215,1216,3,423,211, + 0,1216,1217,3,417,208,0,1217,1218,3,421,210,0,1218,1219,3,409,204, + 0,1219,196,1,0,0,0,1220,1221,3,423,211,0,1221,1222,3,417,208,0,1222, + 1223,3,425,212,0,1223,1224,3,417,208,0,1224,1225,3,439,219,0,1225, + 198,1,0,0,0,1226,1227,3,423,211,0,1227,1228,3,417,208,0,1228,1229, + 3,443,221,0,1229,1230,3,409,204,0,1230,200,1,0,0,0,1231,1232,3,423, + 211,0,1232,1233,3,429,214,0,1233,1234,3,405,202,0,1234,1235,3,401, + 200,0,1235,1236,3,423,211,0,1236,202,1,0,0,0,1237,1238,3,423,211, + 0,1238,1239,3,429,214,0,1239,1240,3,413,206,0,1240,1241,3,437,218, + 0,1241,204,1,0,0,0,1242,1243,3,425,212,0,1243,1244,3,401,200,0,1244, + 1245,3,439,219,0,1245,1246,3,409,204,0,1246,1247,3,435,217,0,1247, + 1248,3,417,208,0,1248,1249,3,401,200,0,1249,1250,3,423,211,0,1250, + 1251,3,417,208,0,1251,1252,3,451,225,0,1252,1253,3,409,204,0,1253, + 206,1,0,0,0,1254,1255,3,425,212,0,1255,1256,3,401,200,0,1256,1257, + 3,439,219,0,1257,1258,3,409,204,0,1258,1259,3,435,217,0,1259,1260, + 3,417,208,0,1260,1261,3,401,200,0,1261,1262,3,423,211,0,1262,1263, + 3,417,208,0,1263,1264,3,451,225,0,1264,1265,3,409,204,0,1265,1266, + 3,407,203,0,1266,208,1,0,0,0,1267,1268,3,425,212,0,1268,1269,3,401, + 200,0,1269,1270,3,447,223,0,1270,210,1,0,0,0,1271,1272,3,425,212, + 0,1272,1273,3,409,204,0,1273,1274,3,435,217,0,1274,1275,3,413,206, + 0,1275,1276,3,409,204,0,1276,1277,3,437,218,0,1277,212,1,0,0,0,1278, + 1279,3,425,212,0,1279,1280,3,417,208,0,1280,1281,3,427,213,0,1281, + 214,1,0,0,0,1282,1283,3,425,212,0,1283,1284,3,417,208,0,1284,1285, + 3,427,213,0,1285,1286,3,441,220,0,1286,1287,3,439,219,0,1287,1288, + 3,409,204,0,1288,216,1,0,0,0,1289,1290,3,425,212,0,1290,1291,3,429, + 214,0,1291,1292,3,407,203,0,1292,1293,3,417,208,0,1293,1294,3,411, + 205,0,1294,1295,3,449,224,0,1295,218,1,0,0,0,1296,1297,3,425,212, + 0,1297,1298,3,429,214,0,1298,1299,3,427,213,0,1299,1300,3,439,219, + 0,1300,1301,3,415,207,0,1301,220,1,0,0,0,1302,1303,3,425,212,0,1303, + 1304,3,429,214,0,1304,1305,3,443,221,0,1305,1306,3,409,204,0,1306, + 222,1,0,0,0,1307,1308,3,425,212,0,1308,1309,3,441,220,0,1309,1310, + 3,439,219,0,1310,1311,3,401,200,0,1311,1312,3,439,219,0,1312,1313, + 3,417,208,0,1313,1314,3,429,214,0,1314,1315,3,427,213,0,1315,224, + 1,0,0,0,1316,1317,3,427,213,0,1317,1318,3,401,200,0,1318,1319,3, + 427,213,0,1319,226,1,0,0,0,1320,1321,3,427,213,0,1321,1322,3,429, + 214,0,1322,228,1,0,0,0,1323,1324,3,427,213,0,1324,1325,3,429,214, + 0,1325,1326,3,439,219,0,1326,230,1,0,0,0,1327,1328,3,427,213,0,1328, + 1329,3,441,220,0,1329,1330,3,423,211,0,1330,1331,3,423,211,0,1331, + 232,1,0,0,0,1332,1333,3,427,213,0,1333,1334,3,441,220,0,1334,1335, + 3,423,211,0,1335,1336,3,423,211,0,1336,1337,3,437,218,0,1337,234, + 1,0,0,0,1338,1339,3,429,214,0,1339,1340,3,411,205,0,1340,1341,3, + 411,205,0,1341,1342,3,437,218,0,1342,1343,3,409,204,0,1343,1344, + 3,439,219,0,1344,236,1,0,0,0,1345,1346,3,429,214,0,1346,1347,3,427, + 213,0,1347,238,1,0,0,0,1348,1349,3,429,214,0,1349,1350,3,431,215, + 0,1350,1351,3,439,219,0,1351,1352,3,417,208,0,1352,1353,3,425,212, + 0,1353,1354,3,417,208,0,1354,1355,3,451,225,0,1355,1356,3,409,204, + 0,1356,240,1,0,0,0,1357,1358,3,429,214,0,1358,1359,3,435,217,0,1359, + 242,1,0,0,0,1360,1361,3,429,214,0,1361,1362,3,435,217,0,1362,1363, + 3,407,203,0,1363,1364,3,409,204,0,1364,1365,3,435,217,0,1365,244, + 1,0,0,0,1366,1367,3,429,214,0,1367,1368,3,441,220,0,1368,1369,3, + 439,219,0,1369,1370,3,409,204,0,1370,1371,3,435,217,0,1371,246,1, + 0,0,0,1372,1373,3,429,214,0,1373,1374,3,441,220,0,1374,1375,3,439, + 219,0,1375,1376,3,411,205,0,1376,1377,3,417,208,0,1377,1378,3,423, + 211,0,1378,1379,3,409,204,0,1379,248,1,0,0,0,1380,1381,3,429,214, + 0,1381,1382,3,443,221,0,1382,1383,3,409,204,0,1383,1384,3,435,217, + 0,1384,250,1,0,0,0,1385,1386,3,431,215,0,1386,1387,3,401,200,0,1387, + 1388,3,435,217,0,1388,1389,3,439,219,0,1389,1390,3,417,208,0,1390, + 1391,3,439,219,0,1391,1392,3,417,208,0,1392,1393,3,429,214,0,1393, + 1394,3,427,213,0,1394,252,1,0,0,0,1395,1396,3,431,215,0,1396,1397, + 3,429,214,0,1397,1398,3,431,215,0,1398,1399,3,441,220,0,1399,1400, + 3,423,211,0,1400,1401,3,401,200,0,1401,1402,3,439,219,0,1402,1403, + 3,409,204,0,1403,254,1,0,0,0,1404,1405,3,431,215,0,1405,1406,3,435, + 217,0,1406,1407,3,409,204,0,1407,1408,3,405,202,0,1408,1409,3,409, + 204,0,1409,1410,3,407,203,0,1410,1411,3,417,208,0,1411,1412,3,427, + 213,0,1412,1413,3,413,206,0,1413,256,1,0,0,0,1414,1415,3,431,215, + 0,1415,1416,3,435,217,0,1416,1417,3,409,204,0,1417,1418,3,445,222, + 0,1418,1419,3,415,207,0,1419,1420,3,409,204,0,1420,1421,3,435,217, + 0,1421,1422,3,409,204,0,1422,258,1,0,0,0,1423,1424,3,431,215,0,1424, + 1425,3,435,217,0,1425,1426,3,417,208,0,1426,1427,3,425,212,0,1427, + 1428,3,401,200,0,1428,1429,3,435,217,0,1429,1430,3,449,224,0,1430, + 260,1,0,0,0,1431,1432,3,431,215,0,1432,1433,3,435,217,0,1433,1434, + 3,429,214,0,1434,1435,3,419,209,0,1435,1436,3,409,204,0,1436,1437, + 3,405,202,0,1437,1438,3,439,219,0,1438,1439,3,417,208,0,1439,1440, + 3,429,214,0,1440,1441,3,427,213,0,1441,262,1,0,0,0,1442,1443,3,433, + 216,0,1443,1444,3,441,220,0,1444,1445,3,401,200,0,1445,1446,3,435, + 217,0,1446,1447,3,439,219,0,1447,1448,3,409,204,0,1448,1449,3,435, + 217,0,1449,264,1,0,0,0,1450,1451,3,435,217,0,1451,1452,3,401,200, + 0,1452,1453,3,427,213,0,1453,1454,3,413,206,0,1454,1455,3,409,204, + 0,1455,266,1,0,0,0,1456,1457,3,435,217,0,1457,1458,3,409,204,0,1458, + 1459,3,423,211,0,1459,1460,3,429,214,0,1460,1461,3,401,200,0,1461, + 1462,3,407,203,0,1462,268,1,0,0,0,1463,1464,3,435,217,0,1464,1465, + 3,409,204,0,1465,1466,3,425,212,0,1466,1467,3,429,214,0,1467,1468, + 3,443,221,0,1468,1469,3,409,204,0,1469,270,1,0,0,0,1470,1471,3,435, + 217,0,1471,1472,3,409,204,0,1472,1473,3,427,213,0,1473,1474,3,401, + 200,0,1474,1475,3,425,212,0,1475,1476,3,409,204,0,1476,272,1,0,0, + 0,1477,1478,3,435,217,0,1478,1479,3,409,204,0,1479,1480,3,431,215, + 0,1480,1481,3,423,211,0,1481,1482,3,401,200,0,1482,1483,3,405,202, + 0,1483,1484,3,409,204,0,1484,274,1,0,0,0,1485,1486,3,435,217,0,1486, + 1487,3,409,204,0,1487,1488,3,431,215,0,1488,1489,3,423,211,0,1489, + 1490,3,417,208,0,1490,1491,3,405,202,0,1491,1492,3,401,200,0,1492, + 276,1,0,0,0,1493,1494,3,435,217,0,1494,1495,3,409,204,0,1495,1496, + 3,431,215,0,1496,1497,3,423,211,0,1497,1498,3,417,208,0,1498,1499, + 3,405,202,0,1499,1500,3,401,200,0,1500,1501,3,439,219,0,1501,1502, + 3,409,204,0,1502,1503,3,407,203,0,1503,278,1,0,0,0,1504,1505,3,435, + 217,0,1505,1506,3,417,208,0,1506,1507,3,413,206,0,1507,1508,3,415, + 207,0,1508,1509,3,439,219,0,1509,280,1,0,0,0,1510,1511,3,435,217, + 0,1511,1512,3,429,214,0,1512,1513,3,423,211,0,1513,1514,3,423,211, + 0,1514,1515,3,441,220,0,1515,1516,3,431,215,0,1516,282,1,0,0,0,1517, + 1518,3,435,217,0,1518,1519,3,429,214,0,1519,1520,3,445,222,0,1520, + 284,1,0,0,0,1521,1522,3,435,217,0,1522,1523,3,429,214,0,1523,1524, + 3,445,222,0,1524,1525,3,437,218,0,1525,286,1,0,0,0,1526,1527,3,437, + 218,0,1527,1528,3,401,200,0,1528,1529,3,425,212,0,1529,1530,3,431, + 215,0,1530,1531,3,423,211,0,1531,1532,3,409,204,0,1532,288,1,0,0, + 0,1533,1534,3,437,218,0,1534,1535,3,409,204,0,1535,1536,3,405,202, + 0,1536,1537,3,429,214,0,1537,1538,3,427,213,0,1538,1539,3,407,203, + 0,1539,290,1,0,0,0,1540,1541,3,437,218,0,1541,1542,3,409,204,0,1542, + 1543,3,423,211,0,1543,1544,3,409,204,0,1544,1545,3,405,202,0,1545, + 1546,3,439,219,0,1546,292,1,0,0,0,1547,1548,3,437,218,0,1548,1549, + 3,409,204,0,1549,1550,3,425,212,0,1550,1551,3,417,208,0,1551,294, + 1,0,0,0,1552,1553,3,437,218,0,1553,1554,3,409,204,0,1554,1555,3, + 427,213,0,1555,1556,3,407,203,0,1556,1557,3,437,218,0,1557,296,1, + 0,0,0,1558,1559,3,437,218,0,1559,1560,3,409,204,0,1560,1561,3,439, + 219,0,1561,298,1,0,0,0,1562,1563,3,437,218,0,1563,1564,3,409,204, + 0,1564,1565,3,439,219,0,1565,1566,3,439,219,0,1566,1567,3,417,208, + 0,1567,1568,3,427,213,0,1568,1569,3,413,206,0,1569,1570,3,437,218, + 0,1570,300,1,0,0,0,1571,1572,3,437,218,0,1572,1573,3,415,207,0,1573, + 1574,3,429,214,0,1574,1575,3,445,222,0,1575,302,1,0,0,0,1576,1577, + 3,437,218,0,1577,1578,3,429,214,0,1578,1579,3,441,220,0,1579,1580, + 3,435,217,0,1580,1581,3,405,202,0,1581,1582,3,409,204,0,1582,304, + 1,0,0,0,1583,1584,3,437,218,0,1584,1585,3,439,219,0,1585,1586,3, + 401,200,0,1586,1587,3,435,217,0,1587,1588,3,439,219,0,1588,306,1, + 0,0,0,1589,1590,3,437,218,0,1590,1591,3,439,219,0,1591,1592,3,429, + 214,0,1592,1593,3,431,215,0,1593,308,1,0,0,0,1594,1595,3,437,218, + 0,1595,1596,3,441,220,0,1596,1597,3,403,201,0,1597,1598,3,437,218, + 0,1598,1599,3,439,219,0,1599,1600,3,435,217,0,1600,1601,3,417,208, + 0,1601,1602,3,427,213,0,1602,1603,3,413,206,0,1603,310,1,0,0,0,1604, + 1605,3,437,218,0,1605,1606,3,449,224,0,1606,1607,3,427,213,0,1607, + 1608,3,405,202,0,1608,312,1,0,0,0,1609,1610,3,437,218,0,1610,1611, + 3,449,224,0,1611,1612,3,427,213,0,1612,1613,3,439,219,0,1613,1614, + 3,401,200,0,1614,1615,3,447,223,0,1615,314,1,0,0,0,1616,1617,3,437, + 218,0,1617,1618,3,449,224,0,1618,1619,3,437,218,0,1619,1620,3,439, + 219,0,1620,1621,3,409,204,0,1621,1622,3,425,212,0,1622,316,1,0,0, + 0,1623,1624,3,439,219,0,1624,1625,3,401,200,0,1625,1626,3,403,201, + 0,1626,1627,3,423,211,0,1627,1628,3,409,204,0,1628,318,1,0,0,0,1629, + 1630,3,439,219,0,1630,1631,3,401,200,0,1631,1632,3,403,201,0,1632, + 1633,3,423,211,0,1633,1634,3,409,204,0,1634,1635,3,437,218,0,1635, + 320,1,0,0,0,1636,1637,3,439,219,0,1637,1638,3,409,204,0,1638,1639, + 3,425,212,0,1639,1640,3,431,215,0,1640,1641,3,429,214,0,1641,1642, + 3,435,217,0,1642,1643,3,401,200,0,1643,1644,3,435,217,0,1644,1645, + 3,449,224,0,1645,322,1,0,0,0,1646,1647,3,439,219,0,1647,1648,3,409, + 204,0,1648,1649,3,437,218,0,1649,1650,3,439,219,0,1650,324,1,0,0, + 0,1651,1652,3,439,219,0,1652,1653,3,415,207,0,1653,1654,3,409,204, + 0,1654,1655,3,427,213,0,1655,326,1,0,0,0,1656,1657,3,439,219,0,1657, + 1658,3,417,208,0,1658,1659,3,409,204,0,1659,1660,3,437,218,0,1660, + 328,1,0,0,0,1661,1662,3,439,219,0,1662,1663,3,417,208,0,1663,1664, + 3,425,212,0,1664,1665,3,409,204,0,1665,1666,3,429,214,0,1666,1667, + 3,441,220,0,1667,1668,3,439,219,0,1668,330,1,0,0,0,1669,1670,3,439, + 219,0,1670,1671,3,417,208,0,1671,1672,3,425,212,0,1672,1673,3,409, + 204,0,1673,1674,3,437,218,0,1674,1675,3,439,219,0,1675,1676,3,401, + 200,0,1676,1677,3,425,212,0,1677,1678,3,431,215,0,1678,332,1,0,0, + 0,1679,1680,3,439,219,0,1680,1681,3,429,214,0,1681,334,1,0,0,0,1682, + 1683,3,439,219,0,1683,1684,3,429,214,0,1684,1685,3,431,215,0,1685, + 336,1,0,0,0,1686,1687,3,439,219,0,1687,1688,3,429,214,0,1688,1689, + 3,439,219,0,1689,1690,3,401,200,0,1690,1691,3,423,211,0,1691,1692, + 3,437,218,0,1692,338,1,0,0,0,1693,1694,3,439,219,0,1694,1695,3,435, + 217,0,1695,1696,3,401,200,0,1696,1697,3,417,208,0,1697,1698,3,423, + 211,0,1698,1699,3,417,208,0,1699,1700,3,427,213,0,1700,1701,3,413, + 206,0,1701,340,1,0,0,0,1702,1703,3,439,219,0,1703,1704,3,435,217, + 0,1704,1705,3,417,208,0,1705,1706,3,425,212,0,1706,342,1,0,0,0,1707, + 1708,3,439,219,0,1708,1709,3,435,217,0,1709,1710,3,441,220,0,1710, + 1711,3,427,213,0,1711,1712,3,405,202,0,1712,1713,3,401,200,0,1713, + 1714,3,439,219,0,1714,1715,3,409,204,0,1715,344,1,0,0,0,1716,1717, + 3,439,219,0,1717,1718,3,439,219,0,1718,1719,3,423,211,0,1719,346, + 1,0,0,0,1720,1721,3,439,219,0,1721,1722,3,449,224,0,1722,1723,3, + 431,215,0,1723,1724,3,409,204,0,1724,348,1,0,0,0,1725,1726,3,441, + 220,0,1726,1727,3,427,213,0,1727,1728,3,403,201,0,1728,1729,3,429, + 214,0,1729,1730,3,441,220,0,1730,1731,3,427,213,0,1731,1732,3,407, + 203,0,1732,1733,3,409,204,0,1733,1734,3,407,203,0,1734,350,1,0,0, + 0,1735,1736,3,441,220,0,1736,1737,3,427,213,0,1737,1738,3,417,208, + 0,1738,1739,3,429,214,0,1739,1740,3,427,213,0,1740,352,1,0,0,0,1741, + 1742,3,441,220,0,1742,1743,3,431,215,0,1743,1744,3,407,203,0,1744, + 1745,3,401,200,0,1745,1746,3,439,219,0,1746,1747,3,409,204,0,1747, + 354,1,0,0,0,1748,1749,3,441,220,0,1749,1750,3,437,218,0,1750,1751, + 3,409,204,0,1751,356,1,0,0,0,1752,1753,3,441,220,0,1753,1754,3,437, + 218,0,1754,1755,3,417,208,0,1755,1756,3,427,213,0,1756,1757,3,413, + 206,0,1757,358,1,0,0,0,1758,1759,3,441,220,0,1759,1760,3,441,220, + 0,1760,1761,3,417,208,0,1761,1762,3,407,203,0,1762,360,1,0,0,0,1763, + 1764,3,443,221,0,1764,1765,3,401,200,0,1765,1766,3,423,211,0,1766, + 1767,3,441,220,0,1767,1768,3,409,204,0,1768,1769,3,437,218,0,1769, + 362,1,0,0,0,1770,1771,3,443,221,0,1771,1772,3,417,208,0,1772,1773, + 3,409,204,0,1773,1774,3,445,222,0,1774,364,1,0,0,0,1775,1776,3,443, + 221,0,1776,1777,3,429,214,0,1777,1778,3,423,211,0,1778,1779,3,441, + 220,0,1779,1780,3,425,212,0,1780,1781,3,409,204,0,1781,366,1,0,0, + 0,1782,1783,3,445,222,0,1783,1784,3,401,200,0,1784,1785,3,439,219, + 0,1785,1786,3,405,202,0,1786,1787,3,415,207,0,1787,368,1,0,0,0,1788, + 1789,3,445,222,0,1789,1790,3,409,204,0,1790,1791,3,409,204,0,1791, + 1792,3,421,210,0,1792,370,1,0,0,0,1793,1794,3,445,222,0,1794,1795, + 3,415,207,0,1795,1796,3,409,204,0,1796,1797,3,427,213,0,1797,372, + 1,0,0,0,1798,1799,3,445,222,0,1799,1800,3,415,207,0,1800,1801,3, + 409,204,0,1801,1802,3,435,217,0,1802,1803,3,409,204,0,1803,374,1, + 0,0,0,1804,1805,3,445,222,0,1805,1806,3,417,208,0,1806,1807,3,427, + 213,0,1807,1808,3,407,203,0,1808,1809,3,429,214,0,1809,1810,3,445, + 222,0,1810,376,1,0,0,0,1811,1812,3,445,222,0,1812,1813,3,417,208, + 0,1813,1814,3,439,219,0,1814,1815,3,415,207,0,1815,378,1,0,0,0,1816, + 1817,3,449,224,0,1817,1818,3,409,204,0,1818,1819,3,401,200,0,1819, + 1820,3,435,217,0,1820,1827,1,0,0,0,1821,1822,3,449,224,0,1822,1823, + 3,449,224,0,1823,1824,3,449,224,0,1824,1825,3,449,224,0,1825,1827, + 1,0,0,0,1826,1816,1,0,0,0,1826,1821,1,0,0,0,1827,380,1,0,0,0,1828, + 1829,5,102,0,0,1829,1830,5,97,0,0,1830,1831,5,108,0,0,1831,1832, + 5,115,0,0,1832,1833,5,101,0,0,1833,382,1,0,0,0,1834,1835,5,116,0, + 0,1835,1836,5,114,0,0,1836,1837,5,117,0,0,1837,1838,5,101,0,0,1838, + 384,1,0,0,0,1839,1840,3,467,233,0,1840,1841,3,403,201,0,1841,1870, + 1,0,0,0,1842,1843,3,467,233,0,1843,1844,3,411,205,0,1844,1870,1, + 0,0,0,1845,1846,3,467,233,0,1846,1847,3,435,217,0,1847,1870,1,0, + 0,0,1848,1849,3,467,233,0,1849,1850,3,427,213,0,1850,1870,1,0,0, + 0,1851,1852,3,467,233,0,1852,1853,3,439,219,0,1853,1870,1,0,0,0, + 1854,1855,3,467,233,0,1855,1856,5,48,0,0,1856,1870,1,0,0,0,1857, + 1858,3,467,233,0,1858,1859,3,401,200,0,1859,1870,1,0,0,0,1860,1861, + 3,467,233,0,1861,1862,3,443,221,0,1862,1870,1,0,0,0,1863,1864,3, + 467,233,0,1864,1865,3,467,233,0,1865,1870,1,0,0,0,1866,1867,3,467, + 233,0,1867,1868,3,521,260,0,1868,1870,1,0,0,0,1869,1839,1,0,0,0, + 1869,1842,1,0,0,0,1869,1845,1,0,0,0,1869,1848,1,0,0,0,1869,1851, + 1,0,0,0,1869,1854,1,0,0,0,1869,1857,1,0,0,0,1869,1860,1,0,0,0,1869, + 1863,1,0,0,0,1869,1866,1,0,0,0,1870,386,1,0,0,0,1871,1872,3,467, + 233,0,1872,1873,3,403,201,0,1873,1902,1,0,0,0,1874,1875,3,467,233, + 0,1875,1876,3,411,205,0,1876,1902,1,0,0,0,1877,1878,3,467,233,0, + 1878,1879,3,435,217,0,1879,1902,1,0,0,0,1880,1881,3,467,233,0,1881, + 1882,3,427,213,0,1882,1902,1,0,0,0,1883,1884,3,467,233,0,1884,1885, + 3,439,219,0,1885,1902,1,0,0,0,1886,1887,3,467,233,0,1887,1888,5, + 48,0,0,1888,1902,1,0,0,0,1889,1890,3,467,233,0,1890,1891,3,401,200, + 0,1891,1902,1,0,0,0,1892,1893,3,467,233,0,1893,1894,3,443,221,0, + 1894,1902,1,0,0,0,1895,1896,3,467,233,0,1896,1897,3,467,233,0,1897, + 1902,1,0,0,0,1898,1899,3,467,233,0,1899,1900,3,519,259,0,1900,1902, + 1,0,0,0,1901,1871,1,0,0,0,1901,1874,1,0,0,0,1901,1877,1,0,0,0,1901, + 1880,1,0,0,0,1901,1883,1,0,0,0,1901,1886,1,0,0,0,1901,1889,1,0,0, + 0,1901,1892,1,0,0,0,1901,1895,1,0,0,0,1901,1898,1,0,0,0,1902,388, + 1,0,0,0,1903,1907,3,453,226,0,1904,1907,3,537,268,0,1905,1907,3, + 477,238,0,1906,1903,1,0,0,0,1906,1904,1,0,0,0,1906,1905,1,0,0,0, + 1907,1914,1,0,0,0,1908,1913,3,453,226,0,1909,1913,3,537,268,0,1910, + 1913,3,457,228,0,1911,1913,3,477,238,0,1912,1908,1,0,0,0,1912,1909, + 1,0,0,0,1912,1910,1,0,0,0,1912,1911,1,0,0,0,1913,1916,1,0,0,0,1914, + 1912,1,0,0,0,1914,1915,1,0,0,0,1915,1944,1,0,0,0,1916,1914,1,0,0, + 0,1917,1925,3,465,232,0,1918,1924,8,0,0,0,1919,1924,3,385,192,0, + 1920,1921,3,465,232,0,1921,1922,3,465,232,0,1922,1924,1,0,0,0,1923, + 1918,1,0,0,0,1923,1919,1,0,0,0,1923,1920,1,0,0,0,1924,1927,1,0,0, + 0,1925,1923,1,0,0,0,1925,1926,1,0,0,0,1926,1928,1,0,0,0,1927,1925, + 1,0,0,0,1928,1929,3,465,232,0,1929,1944,1,0,0,0,1930,1938,3,519, + 259,0,1931,1937,8,1,0,0,1932,1937,3,387,193,0,1933,1934,3,519,259, + 0,1934,1935,3,519,259,0,1935,1937,1,0,0,0,1936,1931,1,0,0,0,1936, + 1932,1,0,0,0,1936,1933,1,0,0,0,1937,1940,1,0,0,0,1938,1936,1,0,0, + 0,1938,1939,1,0,0,0,1939,1941,1,0,0,0,1940,1938,1,0,0,0,1941,1942, + 3,519,259,0,1942,1944,1,0,0,0,1943,1906,1,0,0,0,1943,1917,1,0,0, + 0,1943,1930,1,0,0,0,1944,390,1,0,0,0,1945,1946,3,397,198,0,1946, + 1950,3,479,239,0,1947,1949,3,459,229,0,1948,1947,1,0,0,0,1949,1952, + 1,0,0,0,1950,1948,1,0,0,0,1950,1951,1,0,0,0,1951,1955,1,0,0,0,1952, + 1950,1,0,0,0,1953,1956,3,431,215,0,1954,1956,3,409,204,0,1955,1953, + 1,0,0,0,1955,1954,1,0,0,0,1956,1959,1,0,0,0,1957,1960,3,515,257, + 0,1958,1960,3,475,237,0,1959,1957,1,0,0,0,1959,1958,1,0,0,0,1959, + 1960,1,0,0,0,1960,1962,1,0,0,0,1961,1963,3,457,228,0,1962,1961,1, + 0,0,0,1963,1964,1,0,0,0,1964,1962,1,0,0,0,1964,1965,1,0,0,0,1965, + 2022,1,0,0,0,1966,1969,3,397,198,0,1967,1970,3,431,215,0,1968,1970, + 3,409,204,0,1969,1967,1,0,0,0,1969,1968,1,0,0,0,1970,1973,1,0,0, + 0,1971,1974,3,515,257,0,1972,1974,3,475,237,0,1973,1971,1,0,0,0, + 1973,1972,1,0,0,0,1973,1974,1,0,0,0,1974,1976,1,0,0,0,1975,1977, + 3,457,228,0,1976,1975,1,0,0,0,1977,1978,1,0,0,0,1978,1976,1,0,0, + 0,1978,1979,1,0,0,0,1979,2022,1,0,0,0,1980,1981,3,395,197,0,1981, + 1985,3,479,239,0,1982,1984,3,457,228,0,1983,1982,1,0,0,0,1984,1987, + 1,0,0,0,1985,1983,1,0,0,0,1985,1986,1,0,0,0,1986,1988,1,0,0,0,1987, + 1985,1,0,0,0,1988,1991,3,409,204,0,1989,1992,3,515,257,0,1990,1992, + 3,475,237,0,1991,1989,1,0,0,0,1991,1990,1,0,0,0,1991,1992,1,0,0, + 0,1992,1994,1,0,0,0,1993,1995,3,457,228,0,1994,1993,1,0,0,0,1995, + 1996,1,0,0,0,1996,1994,1,0,0,0,1996,1997,1,0,0,0,1997,2022,1,0,0, + 0,1998,1999,3,479,239,0,1999,2000,3,395,197,0,2000,2003,3,409,204, + 0,2001,2004,3,515,257,0,2002,2004,3,475,237,0,2003,2001,1,0,0,0, + 2003,2002,1,0,0,0,2003,2004,1,0,0,0,2004,2006,1,0,0,0,2005,2007, + 3,457,228,0,2006,2005,1,0,0,0,2007,2008,1,0,0,0,2008,2006,1,0,0, + 0,2008,2009,1,0,0,0,2009,2022,1,0,0,0,2010,2011,3,395,197,0,2011, + 2014,3,409,204,0,2012,2015,3,515,257,0,2013,2015,3,475,237,0,2014, + 2012,1,0,0,0,2014,2013,1,0,0,0,2014,2015,1,0,0,0,2015,2017,1,0,0, + 0,2016,2018,3,457,228,0,2017,2016,1,0,0,0,2018,2019,1,0,0,0,2019, + 2017,1,0,0,0,2019,2020,1,0,0,0,2020,2022,1,0,0,0,2021,1945,1,0,0, + 0,2021,1966,1,0,0,0,2021,1980,1,0,0,0,2021,1998,1,0,0,0,2021,2010, + 1,0,0,0,2022,392,1,0,0,0,2023,2025,5,48,0,0,2024,2026,3,455,227, + 0,2025,2024,1,0,0,0,2026,2027,1,0,0,0,2027,2025,1,0,0,0,2027,2028, + 1,0,0,0,2028,394,1,0,0,0,2029,2031,3,457,228,0,2030,2029,1,0,0,0, + 2031,2032,1,0,0,0,2032,2030,1,0,0,0,2032,2033,1,0,0,0,2033,396,1, + 0,0,0,2034,2035,5,48,0,0,2035,2037,3,447,223,0,2036,2038,3,459,229, + 0,2037,2036,1,0,0,0,2038,2039,1,0,0,0,2039,2037,1,0,0,0,2039,2040, + 1,0,0,0,2040,398,1,0,0,0,2041,2049,3,521,260,0,2042,2048,8,2,0,0, + 2043,2048,3,385,192,0,2044,2045,3,521,260,0,2045,2046,3,521,260, + 0,2046,2048,1,0,0,0,2047,2042,1,0,0,0,2047,2043,1,0,0,0,2047,2044, + 1,0,0,0,2048,2051,1,0,0,0,2049,2047,1,0,0,0,2049,2050,1,0,0,0,2050, + 2052,1,0,0,0,2051,2049,1,0,0,0,2052,2053,3,521,260,0,2053,400,1, + 0,0,0,2054,2055,7,3,0,0,2055,402,1,0,0,0,2056,2057,7,4,0,0,2057, + 404,1,0,0,0,2058,2059,7,5,0,0,2059,406,1,0,0,0,2060,2061,7,6,0,0, + 2061,408,1,0,0,0,2062,2063,7,7,0,0,2063,410,1,0,0,0,2064,2065,7, + 8,0,0,2065,412,1,0,0,0,2066,2067,7,9,0,0,2067,414,1,0,0,0,2068,2069, + 7,10,0,0,2069,416,1,0,0,0,2070,2071,7,11,0,0,2071,418,1,0,0,0,2072, + 2073,7,12,0,0,2073,420,1,0,0,0,2074,2075,7,13,0,0,2075,422,1,0,0, + 0,2076,2077,7,14,0,0,2077,424,1,0,0,0,2078,2079,7,15,0,0,2079,426, + 1,0,0,0,2080,2081,7,16,0,0,2081,428,1,0,0,0,2082,2083,7,17,0,0,2083, + 430,1,0,0,0,2084,2085,7,18,0,0,2085,432,1,0,0,0,2086,2087,7,19,0, + 0,2087,434,1,0,0,0,2088,2089,7,20,0,0,2089,436,1,0,0,0,2090,2091, + 7,21,0,0,2091,438,1,0,0,0,2092,2093,7,22,0,0,2093,440,1,0,0,0,2094, + 2095,7,23,0,0,2095,442,1,0,0,0,2096,2097,7,24,0,0,2097,444,1,0,0, + 0,2098,2099,7,25,0,0,2099,446,1,0,0,0,2100,2101,7,26,0,0,2101,448, + 1,0,0,0,2102,2103,7,27,0,0,2103,450,1,0,0,0,2104,2105,7,28,0,0,2105, + 452,1,0,0,0,2106,2107,7,29,0,0,2107,454,1,0,0,0,2108,2109,7,30,0, + 0,2109,456,1,0,0,0,2110,2111,7,31,0,0,2111,458,1,0,0,0,2112,2113, + 7,32,0,0,2113,460,1,0,0,0,2114,2115,5,45,0,0,2115,2116,5,62,0,0, + 2116,462,1,0,0,0,2117,2118,5,42,0,0,2118,464,1,0,0,0,2119,2120,5, + 96,0,0,2120,466,1,0,0,0,2121,2122,5,92,0,0,2122,468,1,0,0,0,2123, + 2124,5,58,0,0,2124,470,1,0,0,0,2125,2126,5,44,0,0,2126,472,1,0,0, + 0,2127,2128,5,124,0,0,2128,2129,5,124,0,0,2129,474,1,0,0,0,2130, + 2131,5,45,0,0,2131,476,1,0,0,0,2132,2133,5,36,0,0,2133,478,1,0,0, + 0,2134,2135,5,46,0,0,2135,480,1,0,0,0,2136,2137,5,61,0,0,2137,2138, + 5,61,0,0,2138,482,1,0,0,0,2139,2140,5,61,0,0,2140,484,1,0,0,0,2141, + 2142,5,62,0,0,2142,2143,5,61,0,0,2143,486,1,0,0,0,2144,2145,5,62, + 0,0,2145,488,1,0,0,0,2146,2147,5,35,0,0,2147,490,1,0,0,0,2148,2149, + 5,126,0,0,2149,2150,5,42,0,0,2150,492,1,0,0,0,2151,2152,5,61,0,0, + 2152,2153,5,126,0,0,2153,2154,5,42,0,0,2154,494,1,0,0,0,2155,2156, + 5,123,0,0,2156,496,1,0,0,0,2157,2158,5,91,0,0,2158,498,1,0,0,0,2159, + 2160,5,40,0,0,2160,500,1,0,0,0,2161,2162,5,60,0,0,2162,2163,5,61, + 0,0,2163,502,1,0,0,0,2164,2165,5,60,0,0,2165,504,1,0,0,0,2166,2167, + 5,33,0,0,2167,2171,5,61,0,0,2168,2169,5,60,0,0,2169,2171,5,62,0, + 0,2170,2166,1,0,0,0,2170,2168,1,0,0,0,2171,506,1,0,0,0,2172,2173, + 5,33,0,0,2173,2174,5,126,0,0,2174,2175,5,42,0,0,2175,508,1,0,0,0, + 2176,2177,5,33,0,0,2177,2178,5,126,0,0,2178,510,1,0,0,0,2179,2180, + 5,63,0,0,2180,2181,5,63,0,0,2181,512,1,0,0,0,2182,2183,5,37,0,0, + 2183,514,1,0,0,0,2184,2185,5,43,0,0,2185,516,1,0,0,0,2186,2187,5, + 63,0,0,2187,518,1,0,0,0,2188,2189,5,34,0,0,2189,520,1,0,0,0,2190, + 2191,5,39,0,0,2191,522,1,0,0,0,2192,2193,5,126,0,0,2193,524,1,0, + 0,0,2194,2195,5,61,0,0,2195,2196,5,126,0,0,2196,526,1,0,0,0,2197, + 2198,5,125,0,0,2198,528,1,0,0,0,2199,2200,5,93,0,0,2200,530,1,0, + 0,0,2201,2202,5,41,0,0,2202,532,1,0,0,0,2203,2204,5,59,0,0,2204, + 534,1,0,0,0,2205,2206,5,47,0,0,2206,536,1,0,0,0,2207,2208,5,95,0, + 0,2208,538,1,0,0,0,2209,2210,5,47,0,0,2210,2211,5,42,0,0,2211,2215, + 1,0,0,0,2212,2214,9,0,0,0,2213,2212,1,0,0,0,2214,2217,1,0,0,0,2215, + 2216,1,0,0,0,2215,2213,1,0,0,0,2216,2218,1,0,0,0,2217,2215,1,0,0, + 0,2218,2219,5,42,0,0,2219,2220,5,47,0,0,2220,2221,1,0,0,0,2221,2222, + 6,269,0,0,2222,540,1,0,0,0,2223,2224,5,45,0,0,2224,2225,5,45,0,0, + 2225,2229,1,0,0,0,2226,2228,8,33,0,0,2227,2226,1,0,0,0,2228,2231, + 1,0,0,0,2229,2227,1,0,0,0,2229,2230,1,0,0,0,2230,2233,1,0,0,0,2231, + 2229,1,0,0,0,2232,2234,7,34,0,0,2233,2232,1,0,0,0,2234,2235,1,0, + 0,0,2235,2236,6,270,0,0,2236,542,1,0,0,0,2237,2238,7,35,0,0,2238, + 2239,1,0,0,0,2239,2240,6,271,1,0,2240,544,1,0,0,0,38,0,607,1112, + 1826,1869,1901,1906,1912,1914,1923,1925,1936,1938,1943,1950,1955, + 1959,1964,1969,1973,1978,1985,1991,1996,2003,2008,2014,2019,2021, + 2027,2032,2039,2047,2049,2170,2215,2229,2233,2,6,0,0,0,1,0 ] class HogQLLexer(Lexer): @@ -1098,14 +1107,14 @@ class HogQLLexer(Lexer): YEAR = 190 JSON_FALSE = 191 JSON_TRUE = 192 - ESCAPE_CHAR = 193 - IDENTIFIER = 194 - FLOATING_LITERAL = 195 - OCTAL_LITERAL = 196 - DECIMAL_LITERAL = 197 - HEXADECIMAL_LITERAL = 198 - STRING_LITERAL = 199 - PLACEHOLDER = 200 + ESCAPE_CHAR_SINGLE = 193 + ESCAPE_CHAR_DOUBLE = 194 + IDENTIFIER = 195 + FLOATING_LITERAL = 196 + OCTAL_LITERAL = 197 + DECIMAL_LITERAL = 198 + HEXADECIMAL_LITERAL = 199 + STRING_LITERAL = 200 ARROW = 201 ASTERISK = 202 BACKQUOTE = 203 @@ -1190,12 +1199,12 @@ class HogQLLexer(Lexer): "TTL", "TYPE", "UNBOUNDED", "UNION", "UPDATE", "USE", "USING", "UUID", "VALUES", "VIEW", "VOLUME", "WATCH", "WEEK", "WHEN", "WHERE", "WINDOW", "WITH", "YEAR", "JSON_FALSE", "JSON_TRUE", - "ESCAPE_CHAR", "IDENTIFIER", "FLOATING_LITERAL", "OCTAL_LITERAL", - "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", - "PLACEHOLDER", "ARROW", "ASTERISK", "BACKQUOTE", "BACKSLASH", - "COLON", "COMMA", "CONCAT", "DASH", "DOLLAR", "DOT", "EQ_DOUBLE", - "EQ_SINGLE", "GT_EQ", "GT", "HASH", "IREGEX_SINGLE", "IREGEX_DOUBLE", - "LBRACE", "LBRACKET", "LPAREN", "LT_EQ", "LT", "NOT_EQ", "NOT_IREGEX", + "ESCAPE_CHAR_SINGLE", "ESCAPE_CHAR_DOUBLE", "IDENTIFIER", "FLOATING_LITERAL", + "OCTAL_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", + "ARROW", "ASTERISK", "BACKQUOTE", "BACKSLASH", "COLON", "COMMA", + "CONCAT", "DASH", "DOLLAR", "DOT", "EQ_DOUBLE", "EQ_SINGLE", + "GT_EQ", "GT", "HASH", "IREGEX_SINGLE", "IREGEX_DOUBLE", "LBRACE", + "LBRACKET", "LPAREN", "LT_EQ", "LT", "NOT_EQ", "NOT_IREGEX", "NOT_REGEX", "NULLISH", "PERCENT", "PLUS", "QUERY", "QUOTE_DOUBLE", "QUOTE_SINGLE", "REGEX_SINGLE", "REGEX_DOUBLE", "RBRACE", "RBRACKET", "RPAREN", "SEMICOLON", "SLASH", "UNDERSCORE", "MULTI_LINE_COMMENT", @@ -1232,21 +1241,21 @@ class HogQLLexer(Lexer): "TRAILING", "TRIM", "TRUNCATE", "TTL", "TYPE", "UNBOUNDED", "UNION", "UPDATE", "USE", "USING", "UUID", "VALUES", "VIEW", "VOLUME", "WATCH", "WEEK", "WHEN", "WHERE", "WINDOW", - "WITH", "YEAR", "JSON_FALSE", "JSON_TRUE", "ESCAPE_CHAR", - "IDENTIFIER", "FLOATING_LITERAL", "OCTAL_LITERAL", "DECIMAL_LITERAL", - "HEXADECIMAL_LITERAL", "STRING_LITERAL", "PLACEHOLDER", - "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", - "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", - "W", "X", "Y", "Z", "LETTER", "OCT_DIGIT", "DEC_DIGIT", - "HEX_DIGIT", "ARROW", "ASTERISK", "BACKQUOTE", "BACKSLASH", - "COLON", "COMMA", "CONCAT", "DASH", "DOLLAR", "DOT", "EQ_DOUBLE", - "EQ_SINGLE", "GT_EQ", "GT", "HASH", "IREGEX_SINGLE", "IREGEX_DOUBLE", - "LBRACE", "LBRACKET", "LPAREN", "LT_EQ", "LT", "NOT_EQ", - "NOT_IREGEX", "NOT_REGEX", "NULLISH", "PERCENT", "PLUS", - "QUERY", "QUOTE_DOUBLE", "QUOTE_SINGLE", "REGEX_SINGLE", - "REGEX_DOUBLE", "RBRACE", "RBRACKET", "RPAREN", "SEMICOLON", - "SLASH", "UNDERSCORE", "MULTI_LINE_COMMENT", "SINGLE_LINE_COMMENT", - "WHITESPACE" ] + "WITH", "YEAR", "JSON_FALSE", "JSON_TRUE", "ESCAPE_CHAR_SINGLE", + "ESCAPE_CHAR_DOUBLE", "IDENTIFIER", "FLOATING_LITERAL", + "OCTAL_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", + "STRING_LITERAL", "A", "B", "C", "D", "E", "F", "G", "H", + "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", + "T", "U", "V", "W", "X", "Y", "Z", "LETTER", "OCT_DIGIT", + "DEC_DIGIT", "HEX_DIGIT", "ARROW", "ASTERISK", "BACKQUOTE", + "BACKSLASH", "COLON", "COMMA", "CONCAT", "DASH", "DOLLAR", + "DOT", "EQ_DOUBLE", "EQ_SINGLE", "GT_EQ", "GT", "HASH", + "IREGEX_SINGLE", "IREGEX_DOUBLE", "LBRACE", "LBRACKET", + "LPAREN", "LT_EQ", "LT", "NOT_EQ", "NOT_IREGEX", "NOT_REGEX", + "NULLISH", "PERCENT", "PLUS", "QUERY", "QUOTE_DOUBLE", + "QUOTE_SINGLE", "REGEX_SINGLE", "REGEX_DOUBLE", "RBRACE", + "RBRACKET", "RPAREN", "SEMICOLON", "SLASH", "UNDERSCORE", + "MULTI_LINE_COMMENT", "SINGLE_LINE_COMMENT", "WHITESPACE" ] grammarFileName = "HogQLLexer.g4" diff --git a/posthog/hogql/grammar/HogQLLexer.tokens b/posthog/hogql/grammar/HogQLLexer.tokens index 10fd925b09195..18c9b75ec7548 100644 --- a/posthog/hogql/grammar/HogQLLexer.tokens +++ b/posthog/hogql/grammar/HogQLLexer.tokens @@ -190,14 +190,14 @@ WITH=189 YEAR=190 JSON_FALSE=191 JSON_TRUE=192 -ESCAPE_CHAR=193 -IDENTIFIER=194 -FLOATING_LITERAL=195 -OCTAL_LITERAL=196 -DECIMAL_LITERAL=197 -HEXADECIMAL_LITERAL=198 -STRING_LITERAL=199 -PLACEHOLDER=200 +ESCAPE_CHAR_SINGLE=193 +ESCAPE_CHAR_DOUBLE=194 +IDENTIFIER=195 +FLOATING_LITERAL=196 +OCTAL_LITERAL=197 +DECIMAL_LITERAL=198 +HEXADECIMAL_LITERAL=199 +STRING_LITERAL=200 ARROW=201 ASTERISK=202 BACKQUOTE=203 diff --git a/posthog/hogql/grammar/HogQLParser.g4 b/posthog/hogql/grammar/HogQLParser.g4 index 49f5953d1e92e..cc67c9555d6a4 100644 --- a/posthog/hogql/grammar/HogQLParser.g4 +++ b/posthog/hogql/grammar/HogQLParser.g4 @@ -4,8 +4,9 @@ options { tokenVocab = HogQLLexer; } + // SELECT statement -select: (selectUnionStmt | selectStmt) EOF; +select: (selectUnionStmt | selectStmt | hogqlxTagElement) EOF; selectUnionStmt: selectStmtWithParens (UNION ALL selectStmtWithParens)*; selectStmtWithParens: selectStmt | LPAREN selectUnionStmt RPAREN; @@ -70,7 +71,7 @@ joinConstraintClause sampleClause: SAMPLE ratioExpr (OFFSET ratioExpr)?; orderExprList: orderExpr (COMMA orderExpr)*; orderExpr: columnExpr (ASCENDING | DESCENDING | DESC)? (NULLS (FIRST | LAST))? (COLLATE STRING_LITERAL)?; -ratioExpr: PLACEHOLDER | numberLiteral (SLASH numberLiteral)?; +ratioExpr: placeholder | numberLiteral (SLASH numberLiteral)?; settingExprList: settingExpr (COMMA settingExpr)*; settingExpr: identifier EQ_SINGLE literal; @@ -109,6 +110,7 @@ columnExpr | identifier (LPAREN columnExprList? RPAREN) OVER LPAREN windowExpr RPAREN # ColumnExprWinFunction | identifier (LPAREN columnExprList? RPAREN) OVER identifier # ColumnExprWinFunctionTarget | identifier (LPAREN columnExprList? RPAREN)? LPAREN DISTINCT? columnArgList? RPAREN # ColumnExprFunction + | hogqlxTagElement # ColumnExprTagElement | literal # ColumnExprLiteral // FIXME(ilezhankin): this part looks very ugly, maybe there is another way to express it @@ -167,6 +169,14 @@ columnLambdaExpr: ARROW columnExpr ; + +hogqlxTagElement: LT identifier hogqlxTagAttribute* SLASH GT; +hogqlxTagAttribute + : identifier '=' STRING_LITERAL + | identifier '=' LBRACE columnExpr RBRACE + | identifier + ; + withExprList: withExpr (COMMA withExpr)*; withExpr : identifier AS LPAREN selectUnionStmt RPAREN # WithExprSubquery @@ -179,14 +189,15 @@ withExpr // HogQL allows unlimited ("*") nestedIdentifier-s "properties.b.a.a.w.a.s". // We parse and convert "databaseIdentifier.tableIdentifier.columnIdentifier.nestedIdentifier.*" // to just one ast.Field(chain=['a','b','columnIdentifier','on','and','on']). -columnIdentifier: PLACEHOLDER | ((tableIdentifier DOT)? nestedIdentifier); +columnIdentifier: placeholder | ((tableIdentifier DOT)? nestedIdentifier); nestedIdentifier: identifier (DOT identifier)*; tableExpr : tableIdentifier # TableExprIdentifier | tableFunctionExpr # TableExprFunction | LPAREN selectUnionStmt RPAREN # TableExprSubquery | tableExpr (alias | AS identifier) # TableExprAlias - | PLACEHOLDER # TableExprPlaceholder + | hogqlxTagElement # TableExprTag + | placeholder # TableExprPlaceholder ; tableFunctionExpr: identifier LPAREN tableArgList? RPAREN; tableIdentifier: (databaseIdentifier DOT)? identifier; @@ -231,3 +242,4 @@ keywordForAlias alias: IDENTIFIER | keywordForAlias; // |interval| can't be an alias, otherwise 'INTERVAL 1 SOMETHING' becomes ambiguous. identifier: IDENTIFIER | interval | keyword; enumValue: STRING_LITERAL EQ_SINGLE numberLiteral; +placeholder: LBRACE identifier RBRACE; diff --git a/posthog/hogql/grammar/HogQLParser.interp b/posthog/hogql/grammar/HogQLParser.interp index d7adc1a3a9959..7c3bcc9602550 100644 --- a/posthog/hogql/grammar/HogQLParser.interp +++ b/posthog/hogql/grammar/HogQLParser.interp @@ -437,14 +437,14 @@ WITH YEAR JSON_FALSE JSON_TRUE -ESCAPE_CHAR +ESCAPE_CHAR_SINGLE +ESCAPE_CHAR_DOUBLE IDENTIFIER FLOATING_LITERAL OCTAL_LITERAL DECIMAL_LITERAL HEXADECIMAL_LITERAL STRING_LITERAL -PLACEHOLDER ARROW ASTERISK BACKQUOTE @@ -530,6 +530,8 @@ columnExpr columnArgList columnArgExpr columnLambdaExpr +hogqlxTagElement +hogqlxTagAttribute withExprList withExpr columnIdentifier @@ -548,7 +550,8 @@ keywordForAlias alias identifier enumValue +placeholder atn: -[4, 1, 242, 922, 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, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 1, 0, 1, 0, 3, 0, 121, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 129, 8, 1, 10, 1, 12, 1, 132, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 139, 8, 2, 1, 3, 3, 3, 142, 8, 3, 1, 3, 1, 3, 3, 3, 146, 8, 3, 1, 3, 3, 3, 149, 8, 3, 1, 3, 1, 3, 3, 3, 153, 8, 3, 1, 3, 3, 3, 156, 8, 3, 1, 3, 3, 3, 159, 8, 3, 1, 3, 3, 3, 162, 8, 3, 1, 3, 3, 3, 165, 8, 3, 1, 3, 1, 3, 3, 3, 169, 8, 3, 1, 3, 1, 3, 3, 3, 173, 8, 3, 1, 3, 3, 3, 176, 8, 3, 1, 3, 3, 3, 179, 8, 3, 1, 3, 3, 3, 182, 8, 3, 1, 3, 1, 3, 3, 3, 186, 8, 3, 1, 3, 3, 3, 189, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 198, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 204, 8, 7, 1, 7, 1, 7, 1, 7, 1, 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, 5, 8, 223, 8, 8, 10, 8, 12, 8, 226, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 242, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 259, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 265, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 271, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 282, 8, 15, 3, 15, 284, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 295, 8, 18, 1, 18, 3, 18, 298, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 304, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 312, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 318, 8, 18, 10, 18, 12, 18, 321, 9, 18, 1, 19, 3, 19, 324, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 329, 8, 19, 1, 19, 3, 19, 332, 8, 19, 1, 19, 3, 19, 335, 8, 19, 1, 19, 1, 19, 3, 19, 339, 8, 19, 1, 19, 1, 19, 3, 19, 343, 8, 19, 1, 19, 3, 19, 346, 8, 19, 3, 19, 348, 8, 19, 1, 19, 3, 19, 351, 8, 19, 1, 19, 1, 19, 3, 19, 355, 8, 19, 1, 19, 1, 19, 3, 19, 359, 8, 19, 1, 19, 3, 19, 362, 8, 19, 3, 19, 364, 8, 19, 3, 19, 366, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 371, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 382, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 388, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 393, 8, 23, 10, 23, 12, 23, 396, 9, 23, 1, 24, 1, 24, 3, 24, 400, 8, 24, 1, 24, 1, 24, 3, 24, 404, 8, 24, 1, 24, 1, 24, 3, 24, 408, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 414, 8, 25, 3, 25, 416, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 421, 8, 26, 10, 26, 12, 26, 424, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 431, 8, 28, 1, 28, 3, 28, 434, 8, 28, 1, 28, 3, 28, 437, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 456, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 470, 8, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 484, 8, 35, 10, 35, 12, 35, 487, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 496, 8, 35, 10, 35, 12, 35, 499, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 508, 8, 35, 10, 35, 12, 35, 511, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 518, 8, 35, 1, 35, 1, 35, 3, 35, 522, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 527, 8, 36, 10, 36, 12, 36, 530, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 535, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 542, 8, 37, 11, 37, 12, 37, 543, 1, 37, 1, 37, 3, 37, 548, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 579, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 596, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 608, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 618, 8, 37, 1, 37, 3, 37, 621, 8, 37, 1, 37, 1, 37, 3, 37, 625, 8, 37, 1, 37, 3, 37, 628, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 640, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 657, 8, 37, 1, 37, 1, 37, 3, 37, 661, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 667, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 674, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 686, 8, 37, 1, 37, 1, 37, 3, 37, 690, 8, 37, 1, 37, 3, 37, 693, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 702, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 716, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 743, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 752, 8, 37, 5, 37, 754, 8, 37, 10, 37, 12, 37, 757, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 762, 8, 38, 10, 38, 12, 38, 765, 9, 38, 1, 39, 1, 39, 3, 39, 769, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 775, 8, 40, 10, 40, 12, 40, 778, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 785, 8, 40, 10, 40, 12, 40, 788, 9, 40, 3, 40, 790, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 798, 8, 41, 10, 41, 12, 41, 801, 9, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 813, 8, 42, 1, 43, 1, 43, 1, 43, 1, 43, 3, 43, 819, 8, 43, 1, 43, 3, 43, 822, 8, 43, 1, 44, 1, 44, 1, 44, 5, 44, 827, 8, 44, 10, 44, 12, 44, 830, 9, 44, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 840, 8, 45, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 846, 8, 45, 5, 45, 848, 8, 45, 10, 45, 12, 45, 851, 9, 45, 1, 46, 1, 46, 1, 46, 3, 46, 856, 8, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 47, 3, 47, 863, 8, 47, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 5, 48, 870, 8, 48, 10, 48, 12, 48, 873, 9, 48, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 883, 8, 50, 3, 50, 885, 8, 50, 1, 51, 3, 51, 888, 8, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 3, 51, 896, 8, 51, 1, 52, 1, 52, 1, 52, 3, 52, 901, 8, 52, 1, 53, 1, 53, 1, 54, 1, 54, 1, 55, 1, 55, 1, 56, 1, 56, 3, 56, 911, 8, 56, 1, 57, 1, 57, 1, 57, 3, 57, 916, 8, 57, 1, 58, 1, 58, 1, 58, 1, 58, 1, 58, 0, 3, 36, 74, 90, 59, 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, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 196, 197, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1043, 0, 120, 1, 0, 0, 0, 2, 124, 1, 0, 0, 0, 4, 138, 1, 0, 0, 0, 6, 141, 1, 0, 0, 0, 8, 190, 1, 0, 0, 0, 10, 193, 1, 0, 0, 0, 12, 199, 1, 0, 0, 0, 14, 203, 1, 0, 0, 0, 16, 209, 1, 0, 0, 0, 18, 227, 1, 0, 0, 0, 20, 230, 1, 0, 0, 0, 22, 233, 1, 0, 0, 0, 24, 243, 1, 0, 0, 0, 26, 246, 1, 0, 0, 0, 28, 250, 1, 0, 0, 0, 30, 283, 1, 0, 0, 0, 32, 285, 1, 0, 0, 0, 34, 288, 1, 0, 0, 0, 36, 303, 1, 0, 0, 0, 38, 365, 1, 0, 0, 0, 40, 370, 1, 0, 0, 0, 42, 381, 1, 0, 0, 0, 44, 383, 1, 0, 0, 0, 46, 389, 1, 0, 0, 0, 48, 397, 1, 0, 0, 0, 50, 415, 1, 0, 0, 0, 52, 417, 1, 0, 0, 0, 54, 425, 1, 0, 0, 0, 56, 430, 1, 0, 0, 0, 58, 438, 1, 0, 0, 0, 60, 442, 1, 0, 0, 0, 62, 446, 1, 0, 0, 0, 64, 455, 1, 0, 0, 0, 66, 469, 1, 0, 0, 0, 68, 471, 1, 0, 0, 0, 70, 521, 1, 0, 0, 0, 72, 523, 1, 0, 0, 0, 74, 660, 1, 0, 0, 0, 76, 758, 1, 0, 0, 0, 78, 768, 1, 0, 0, 0, 80, 789, 1, 0, 0, 0, 82, 794, 1, 0, 0, 0, 84, 812, 1, 0, 0, 0, 86, 821, 1, 0, 0, 0, 88, 823, 1, 0, 0, 0, 90, 839, 1, 0, 0, 0, 92, 852, 1, 0, 0, 0, 94, 862, 1, 0, 0, 0, 96, 866, 1, 0, 0, 0, 98, 874, 1, 0, 0, 0, 100, 884, 1, 0, 0, 0, 102, 887, 1, 0, 0, 0, 104, 900, 1, 0, 0, 0, 106, 902, 1, 0, 0, 0, 108, 904, 1, 0, 0, 0, 110, 906, 1, 0, 0, 0, 112, 910, 1, 0, 0, 0, 114, 915, 1, 0, 0, 0, 116, 917, 1, 0, 0, 0, 118, 121, 3, 2, 1, 0, 119, 121, 3, 6, 3, 0, 120, 118, 1, 0, 0, 0, 120, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 123, 5, 0, 0, 1, 123, 1, 1, 0, 0, 0, 124, 130, 3, 4, 2, 0, 125, 126, 5, 176, 0, 0, 126, 127, 5, 4, 0, 0, 127, 129, 3, 4, 2, 0, 128, 125, 1, 0, 0, 0, 129, 132, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 130, 131, 1, 0, 0, 0, 131, 3, 1, 0, 0, 0, 132, 130, 1, 0, 0, 0, 133, 139, 3, 6, 3, 0, 134, 135, 5, 220, 0, 0, 135, 136, 3, 2, 1, 0, 136, 137, 5, 236, 0, 0, 137, 139, 1, 0, 0, 0, 138, 133, 1, 0, 0, 0, 138, 134, 1, 0, 0, 0, 139, 5, 1, 0, 0, 0, 140, 142, 3, 8, 4, 0, 141, 140, 1, 0, 0, 0, 141, 142, 1, 0, 0, 0, 142, 143, 1, 0, 0, 0, 143, 145, 5, 146, 0, 0, 144, 146, 5, 49, 0, 0, 145, 144, 1, 0, 0, 0, 145, 146, 1, 0, 0, 0, 146, 148, 1, 0, 0, 0, 147, 149, 3, 10, 5, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 152, 3, 72, 36, 0, 151, 153, 3, 12, 6, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 156, 3, 14, 7, 0, 155, 154, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 158, 1, 0, 0, 0, 157, 159, 3, 18, 9, 0, 158, 157, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 161, 1, 0, 0, 0, 160, 162, 3, 20, 10, 0, 161, 160, 1, 0, 0, 0, 161, 162, 1, 0, 0, 0, 162, 164, 1, 0, 0, 0, 163, 165, 3, 22, 11, 0, 164, 163, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, 165, 168, 1, 0, 0, 0, 166, 167, 5, 189, 0, 0, 167, 169, 7, 0, 0, 0, 168, 166, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 172, 1, 0, 0, 0, 170, 171, 5, 189, 0, 0, 171, 173, 5, 169, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 175, 1, 0, 0, 0, 174, 176, 3, 24, 12, 0, 175, 174, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 178, 1, 0, 0, 0, 177, 179, 3, 16, 8, 0, 178, 177, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 181, 1, 0, 0, 0, 180, 182, 3, 26, 13, 0, 181, 180, 1, 0, 0, 0, 181, 182, 1, 0, 0, 0, 182, 185, 1, 0, 0, 0, 183, 186, 3, 30, 15, 0, 184, 186, 3, 32, 16, 0, 185, 183, 1, 0, 0, 0, 185, 184, 1, 0, 0, 0, 185, 186, 1, 0, 0, 0, 186, 188, 1, 0, 0, 0, 187, 189, 3, 34, 17, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 7, 1, 0, 0, 0, 190, 191, 5, 189, 0, 0, 191, 192, 3, 82, 41, 0, 192, 9, 1, 0, 0, 0, 193, 194, 5, 168, 0, 0, 194, 197, 5, 197, 0, 0, 195, 196, 5, 189, 0, 0, 196, 198, 5, 164, 0, 0, 197, 195, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 11, 1, 0, 0, 0, 199, 200, 5, 68, 0, 0, 200, 201, 3, 36, 18, 0, 201, 13, 1, 0, 0, 0, 202, 204, 7, 1, 0, 0, 203, 202, 1, 0, 0, 0, 203, 204, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 206, 5, 9, 0, 0, 206, 207, 5, 90, 0, 0, 207, 208, 3, 72, 36, 0, 208, 15, 1, 0, 0, 0, 209, 210, 5, 188, 0, 0, 210, 211, 3, 114, 57, 0, 211, 212, 5, 10, 0, 0, 212, 213, 5, 220, 0, 0, 213, 214, 3, 56, 28, 0, 214, 224, 5, 236, 0, 0, 215, 216, 5, 206, 0, 0, 216, 217, 3, 114, 57, 0, 217, 218, 5, 10, 0, 0, 218, 219, 5, 220, 0, 0, 219, 220, 3, 56, 28, 0, 220, 221, 5, 236, 0, 0, 221, 223, 1, 0, 0, 0, 222, 215, 1, 0, 0, 0, 223, 226, 1, 0, 0, 0, 224, 222, 1, 0, 0, 0, 224, 225, 1, 0, 0, 0, 225, 17, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 227, 228, 5, 129, 0, 0, 228, 229, 3, 74, 37, 0, 229, 19, 1, 0, 0, 0, 230, 231, 5, 187, 0, 0, 231, 232, 3, 74, 37, 0, 232, 21, 1, 0, 0, 0, 233, 234, 5, 73, 0, 0, 234, 241, 5, 18, 0, 0, 235, 236, 7, 0, 0, 0, 236, 237, 5, 220, 0, 0, 237, 238, 3, 72, 36, 0, 238, 239, 5, 236, 0, 0, 239, 242, 1, 0, 0, 0, 240, 242, 3, 72, 36, 0, 241, 235, 1, 0, 0, 0, 241, 240, 1, 0, 0, 0, 242, 23, 1, 0, 0, 0, 243, 244, 5, 74, 0, 0, 244, 245, 3, 74, 37, 0, 245, 25, 1, 0, 0, 0, 246, 247, 5, 122, 0, 0, 247, 248, 5, 18, 0, 0, 248, 249, 3, 46, 23, 0, 249, 27, 1, 0, 0, 0, 250, 251, 5, 122, 0, 0, 251, 252, 5, 18, 0, 0, 252, 253, 3, 72, 36, 0, 253, 29, 1, 0, 0, 0, 254, 255, 5, 99, 0, 0, 255, 258, 3, 74, 37, 0, 256, 257, 5, 206, 0, 0, 257, 259, 3, 74, 37, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 264, 1, 0, 0, 0, 260, 261, 5, 189, 0, 0, 261, 265, 5, 164, 0, 0, 262, 263, 5, 18, 0, 0, 263, 265, 3, 72, 36, 0, 264, 260, 1, 0, 0, 0, 264, 262, 1, 0, 0, 0, 264, 265, 1, 0, 0, 0, 265, 284, 1, 0, 0, 0, 266, 267, 5, 99, 0, 0, 267, 270, 3, 74, 37, 0, 268, 269, 5, 189, 0, 0, 269, 271, 5, 164, 0, 0, 270, 268, 1, 0, 0, 0, 270, 271, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 273, 5, 118, 0, 0, 273, 274, 3, 74, 37, 0, 274, 284, 1, 0, 0, 0, 275, 276, 5, 99, 0, 0, 276, 277, 3, 74, 37, 0, 277, 278, 5, 118, 0, 0, 278, 281, 3, 74, 37, 0, 279, 280, 5, 18, 0, 0, 280, 282, 3, 72, 36, 0, 281, 279, 1, 0, 0, 0, 281, 282, 1, 0, 0, 0, 282, 284, 1, 0, 0, 0, 283, 254, 1, 0, 0, 0, 283, 266, 1, 0, 0, 0, 283, 275, 1, 0, 0, 0, 284, 31, 1, 0, 0, 0, 285, 286, 5, 118, 0, 0, 286, 287, 3, 74, 37, 0, 287, 33, 1, 0, 0, 0, 288, 289, 5, 150, 0, 0, 289, 290, 3, 52, 26, 0, 290, 35, 1, 0, 0, 0, 291, 292, 6, 18, -1, 0, 292, 294, 3, 90, 45, 0, 293, 295, 5, 61, 0, 0, 294, 293, 1, 0, 0, 0, 294, 295, 1, 0, 0, 0, 295, 297, 1, 0, 0, 0, 296, 298, 3, 44, 22, 0, 297, 296, 1, 0, 0, 0, 297, 298, 1, 0, 0, 0, 298, 304, 1, 0, 0, 0, 299, 300, 5, 220, 0, 0, 300, 301, 3, 36, 18, 0, 301, 302, 5, 236, 0, 0, 302, 304, 1, 0, 0, 0, 303, 291, 1, 0, 0, 0, 303, 299, 1, 0, 0, 0, 304, 319, 1, 0, 0, 0, 305, 306, 10, 3, 0, 0, 306, 307, 3, 40, 20, 0, 307, 308, 3, 36, 18, 4, 308, 318, 1, 0, 0, 0, 309, 311, 10, 4, 0, 0, 310, 312, 3, 38, 19, 0, 311, 310, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 313, 1, 0, 0, 0, 313, 314, 5, 90, 0, 0, 314, 315, 3, 36, 18, 0, 315, 316, 3, 42, 21, 0, 316, 318, 1, 0, 0, 0, 317, 305, 1, 0, 0, 0, 317, 309, 1, 0, 0, 0, 318, 321, 1, 0, 0, 0, 319, 317, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 37, 1, 0, 0, 0, 321, 319, 1, 0, 0, 0, 322, 324, 7, 2, 0, 0, 323, 322, 1, 0, 0, 0, 323, 324, 1, 0, 0, 0, 324, 325, 1, 0, 0, 0, 325, 332, 5, 84, 0, 0, 326, 328, 5, 84, 0, 0, 327, 329, 7, 2, 0, 0, 328, 327, 1, 0, 0, 0, 328, 329, 1, 0, 0, 0, 329, 332, 1, 0, 0, 0, 330, 332, 7, 2, 0, 0, 331, 323, 1, 0, 0, 0, 331, 326, 1, 0, 0, 0, 331, 330, 1, 0, 0, 0, 332, 366, 1, 0, 0, 0, 333, 335, 7, 3, 0, 0, 334, 333, 1, 0, 0, 0, 334, 335, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 338, 7, 4, 0, 0, 337, 339, 5, 123, 0, 0, 338, 337, 1, 0, 0, 0, 338, 339, 1, 0, 0, 0, 339, 348, 1, 0, 0, 0, 340, 342, 7, 4, 0, 0, 341, 343, 5, 123, 0, 0, 342, 341, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 345, 1, 0, 0, 0, 344, 346, 7, 3, 0, 0, 345, 344, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 348, 1, 0, 0, 0, 347, 334, 1, 0, 0, 0, 347, 340, 1, 0, 0, 0, 348, 366, 1, 0, 0, 0, 349, 351, 7, 5, 0, 0, 350, 349, 1, 0, 0, 0, 350, 351, 1, 0, 0, 0, 351, 352, 1, 0, 0, 0, 352, 354, 5, 69, 0, 0, 353, 355, 5, 123, 0, 0, 354, 353, 1, 0, 0, 0, 354, 355, 1, 0, 0, 0, 355, 364, 1, 0, 0, 0, 356, 358, 5, 69, 0, 0, 357, 359, 5, 123, 0, 0, 358, 357, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 361, 1, 0, 0, 0, 360, 362, 7, 5, 0, 0, 361, 360, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 364, 1, 0, 0, 0, 363, 350, 1, 0, 0, 0, 363, 356, 1, 0, 0, 0, 364, 366, 1, 0, 0, 0, 365, 331, 1, 0, 0, 0, 365, 347, 1, 0, 0, 0, 365, 363, 1, 0, 0, 0, 366, 39, 1, 0, 0, 0, 367, 368, 5, 31, 0, 0, 368, 371, 5, 90, 0, 0, 369, 371, 5, 206, 0, 0, 370, 367, 1, 0, 0, 0, 370, 369, 1, 0, 0, 0, 371, 41, 1, 0, 0, 0, 372, 373, 5, 119, 0, 0, 373, 382, 3, 72, 36, 0, 374, 375, 5, 179, 0, 0, 375, 376, 5, 220, 0, 0, 376, 377, 3, 72, 36, 0, 377, 378, 5, 236, 0, 0, 378, 382, 1, 0, 0, 0, 379, 380, 5, 179, 0, 0, 380, 382, 3, 72, 36, 0, 381, 372, 1, 0, 0, 0, 381, 374, 1, 0, 0, 0, 381, 379, 1, 0, 0, 0, 382, 43, 1, 0, 0, 0, 383, 384, 5, 144, 0, 0, 384, 387, 3, 50, 25, 0, 385, 386, 5, 118, 0, 0, 386, 388, 3, 50, 25, 0, 387, 385, 1, 0, 0, 0, 387, 388, 1, 0, 0, 0, 388, 45, 1, 0, 0, 0, 389, 394, 3, 48, 24, 0, 390, 391, 5, 206, 0, 0, 391, 393, 3, 48, 24, 0, 392, 390, 1, 0, 0, 0, 393, 396, 1, 0, 0, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 47, 1, 0, 0, 0, 396, 394, 1, 0, 0, 0, 397, 399, 3, 74, 37, 0, 398, 400, 7, 6, 0, 0, 399, 398, 1, 0, 0, 0, 399, 400, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 402, 5, 117, 0, 0, 402, 404, 7, 7, 0, 0, 403, 401, 1, 0, 0, 0, 403, 404, 1, 0, 0, 0, 404, 407, 1, 0, 0, 0, 405, 406, 5, 26, 0, 0, 406, 408, 5, 199, 0, 0, 407, 405, 1, 0, 0, 0, 407, 408, 1, 0, 0, 0, 408, 49, 1, 0, 0, 0, 409, 416, 5, 200, 0, 0, 410, 413, 3, 102, 51, 0, 411, 412, 5, 238, 0, 0, 412, 414, 3, 102, 51, 0, 413, 411, 1, 0, 0, 0, 413, 414, 1, 0, 0, 0, 414, 416, 1, 0, 0, 0, 415, 409, 1, 0, 0, 0, 415, 410, 1, 0, 0, 0, 416, 51, 1, 0, 0, 0, 417, 422, 3, 54, 27, 0, 418, 419, 5, 206, 0, 0, 419, 421, 3, 54, 27, 0, 420, 418, 1, 0, 0, 0, 421, 424, 1, 0, 0, 0, 422, 420, 1, 0, 0, 0, 422, 423, 1, 0, 0, 0, 423, 53, 1, 0, 0, 0, 424, 422, 1, 0, 0, 0, 425, 426, 3, 114, 57, 0, 426, 427, 5, 212, 0, 0, 427, 428, 3, 104, 52, 0, 428, 55, 1, 0, 0, 0, 429, 431, 3, 58, 29, 0, 430, 429, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 433, 1, 0, 0, 0, 432, 434, 3, 60, 30, 0, 433, 432, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 436, 1, 0, 0, 0, 435, 437, 3, 62, 31, 0, 436, 435, 1, 0, 0, 0, 436, 437, 1, 0, 0, 0, 437, 57, 1, 0, 0, 0, 438, 439, 5, 126, 0, 0, 439, 440, 5, 18, 0, 0, 440, 441, 3, 72, 36, 0, 441, 59, 1, 0, 0, 0, 442, 443, 5, 122, 0, 0, 443, 444, 5, 18, 0, 0, 444, 445, 3, 46, 23, 0, 445, 61, 1, 0, 0, 0, 446, 447, 7, 8, 0, 0, 447, 448, 3, 64, 32, 0, 448, 63, 1, 0, 0, 0, 449, 456, 3, 66, 33, 0, 450, 451, 5, 16, 0, 0, 451, 452, 3, 66, 33, 0, 452, 453, 5, 6, 0, 0, 453, 454, 3, 66, 33, 0, 454, 456, 1, 0, 0, 0, 455, 449, 1, 0, 0, 0, 455, 450, 1, 0, 0, 0, 456, 65, 1, 0, 0, 0, 457, 458, 5, 33, 0, 0, 458, 470, 5, 142, 0, 0, 459, 460, 5, 175, 0, 0, 460, 470, 5, 128, 0, 0, 461, 462, 5, 175, 0, 0, 462, 470, 5, 64, 0, 0, 463, 464, 3, 102, 51, 0, 464, 465, 5, 128, 0, 0, 465, 470, 1, 0, 0, 0, 466, 467, 3, 102, 51, 0, 467, 468, 5, 64, 0, 0, 468, 470, 1, 0, 0, 0, 469, 457, 1, 0, 0, 0, 469, 459, 1, 0, 0, 0, 469, 461, 1, 0, 0, 0, 469, 463, 1, 0, 0, 0, 469, 466, 1, 0, 0, 0, 470, 67, 1, 0, 0, 0, 471, 472, 3, 74, 37, 0, 472, 473, 5, 0, 0, 1, 473, 69, 1, 0, 0, 0, 474, 522, 3, 114, 57, 0, 475, 476, 3, 114, 57, 0, 476, 477, 5, 220, 0, 0, 477, 478, 3, 114, 57, 0, 478, 485, 3, 70, 35, 0, 479, 480, 5, 206, 0, 0, 480, 481, 3, 114, 57, 0, 481, 482, 3, 70, 35, 0, 482, 484, 1, 0, 0, 0, 483, 479, 1, 0, 0, 0, 484, 487, 1, 0, 0, 0, 485, 483, 1, 0, 0, 0, 485, 486, 1, 0, 0, 0, 486, 488, 1, 0, 0, 0, 487, 485, 1, 0, 0, 0, 488, 489, 5, 236, 0, 0, 489, 522, 1, 0, 0, 0, 490, 491, 3, 114, 57, 0, 491, 492, 5, 220, 0, 0, 492, 497, 3, 116, 58, 0, 493, 494, 5, 206, 0, 0, 494, 496, 3, 116, 58, 0, 495, 493, 1, 0, 0, 0, 496, 499, 1, 0, 0, 0, 497, 495, 1, 0, 0, 0, 497, 498, 1, 0, 0, 0, 498, 500, 1, 0, 0, 0, 499, 497, 1, 0, 0, 0, 500, 501, 5, 236, 0, 0, 501, 522, 1, 0, 0, 0, 502, 503, 3, 114, 57, 0, 503, 504, 5, 220, 0, 0, 504, 509, 3, 70, 35, 0, 505, 506, 5, 206, 0, 0, 506, 508, 3, 70, 35, 0, 507, 505, 1, 0, 0, 0, 508, 511, 1, 0, 0, 0, 509, 507, 1, 0, 0, 0, 509, 510, 1, 0, 0, 0, 510, 512, 1, 0, 0, 0, 511, 509, 1, 0, 0, 0, 512, 513, 5, 236, 0, 0, 513, 522, 1, 0, 0, 0, 514, 515, 3, 114, 57, 0, 515, 517, 5, 220, 0, 0, 516, 518, 3, 72, 36, 0, 517, 516, 1, 0, 0, 0, 517, 518, 1, 0, 0, 0, 518, 519, 1, 0, 0, 0, 519, 520, 5, 236, 0, 0, 520, 522, 1, 0, 0, 0, 521, 474, 1, 0, 0, 0, 521, 475, 1, 0, 0, 0, 521, 490, 1, 0, 0, 0, 521, 502, 1, 0, 0, 0, 521, 514, 1, 0, 0, 0, 522, 71, 1, 0, 0, 0, 523, 528, 3, 74, 37, 0, 524, 525, 5, 206, 0, 0, 525, 527, 3, 74, 37, 0, 526, 524, 1, 0, 0, 0, 527, 530, 1, 0, 0, 0, 528, 526, 1, 0, 0, 0, 528, 529, 1, 0, 0, 0, 529, 73, 1, 0, 0, 0, 530, 528, 1, 0, 0, 0, 531, 532, 6, 37, -1, 0, 532, 534, 5, 19, 0, 0, 533, 535, 3, 74, 37, 0, 534, 533, 1, 0, 0, 0, 534, 535, 1, 0, 0, 0, 535, 541, 1, 0, 0, 0, 536, 537, 5, 186, 0, 0, 537, 538, 3, 74, 37, 0, 538, 539, 5, 163, 0, 0, 539, 540, 3, 74, 37, 0, 540, 542, 1, 0, 0, 0, 541, 536, 1, 0, 0, 0, 542, 543, 1, 0, 0, 0, 543, 541, 1, 0, 0, 0, 543, 544, 1, 0, 0, 0, 544, 547, 1, 0, 0, 0, 545, 546, 5, 52, 0, 0, 546, 548, 3, 74, 37, 0, 547, 545, 1, 0, 0, 0, 547, 548, 1, 0, 0, 0, 548, 549, 1, 0, 0, 0, 549, 550, 5, 53, 0, 0, 550, 661, 1, 0, 0, 0, 551, 552, 5, 20, 0, 0, 552, 553, 5, 220, 0, 0, 553, 554, 3, 74, 37, 0, 554, 555, 5, 10, 0, 0, 555, 556, 3, 70, 35, 0, 556, 557, 5, 236, 0, 0, 557, 661, 1, 0, 0, 0, 558, 559, 5, 36, 0, 0, 559, 661, 5, 199, 0, 0, 560, 561, 5, 59, 0, 0, 561, 562, 5, 220, 0, 0, 562, 563, 3, 106, 53, 0, 563, 564, 5, 68, 0, 0, 564, 565, 3, 74, 37, 0, 565, 566, 5, 236, 0, 0, 566, 661, 1, 0, 0, 0, 567, 568, 5, 86, 0, 0, 568, 569, 3, 74, 37, 0, 569, 570, 3, 106, 53, 0, 570, 661, 1, 0, 0, 0, 571, 572, 5, 155, 0, 0, 572, 573, 5, 220, 0, 0, 573, 574, 3, 74, 37, 0, 574, 575, 5, 68, 0, 0, 575, 578, 3, 74, 37, 0, 576, 577, 5, 65, 0, 0, 577, 579, 3, 74, 37, 0, 578, 576, 1, 0, 0, 0, 578, 579, 1, 0, 0, 0, 579, 580, 1, 0, 0, 0, 580, 581, 5, 236, 0, 0, 581, 661, 1, 0, 0, 0, 582, 583, 5, 166, 0, 0, 583, 661, 5, 199, 0, 0, 584, 585, 5, 171, 0, 0, 585, 586, 5, 220, 0, 0, 586, 587, 7, 9, 0, 0, 587, 588, 5, 199, 0, 0, 588, 589, 5, 68, 0, 0, 589, 590, 3, 74, 37, 0, 590, 591, 5, 236, 0, 0, 591, 661, 1, 0, 0, 0, 592, 593, 3, 114, 57, 0, 593, 595, 5, 220, 0, 0, 594, 596, 3, 72, 36, 0, 595, 594, 1, 0, 0, 0, 595, 596, 1, 0, 0, 0, 596, 597, 1, 0, 0, 0, 597, 598, 5, 236, 0, 0, 598, 599, 1, 0, 0, 0, 599, 600, 5, 125, 0, 0, 600, 601, 5, 220, 0, 0, 601, 602, 3, 56, 28, 0, 602, 603, 5, 236, 0, 0, 603, 661, 1, 0, 0, 0, 604, 605, 3, 114, 57, 0, 605, 607, 5, 220, 0, 0, 606, 608, 3, 72, 36, 0, 607, 606, 1, 0, 0, 0, 607, 608, 1, 0, 0, 0, 608, 609, 1, 0, 0, 0, 609, 610, 5, 236, 0, 0, 610, 611, 1, 0, 0, 0, 611, 612, 5, 125, 0, 0, 612, 613, 3, 114, 57, 0, 613, 661, 1, 0, 0, 0, 614, 620, 3, 114, 57, 0, 615, 617, 5, 220, 0, 0, 616, 618, 3, 72, 36, 0, 617, 616, 1, 0, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, 1, 0, 0, 0, 619, 621, 5, 236, 0, 0, 620, 615, 1, 0, 0, 0, 620, 621, 1, 0, 0, 0, 621, 622, 1, 0, 0, 0, 622, 624, 5, 220, 0, 0, 623, 625, 5, 49, 0, 0, 624, 623, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 627, 1, 0, 0, 0, 626, 628, 3, 76, 38, 0, 627, 626, 1, 0, 0, 0, 627, 628, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 630, 5, 236, 0, 0, 630, 661, 1, 0, 0, 0, 631, 661, 3, 104, 52, 0, 632, 633, 5, 208, 0, 0, 633, 661, 3, 74, 37, 18, 634, 635, 5, 115, 0, 0, 635, 661, 3, 74, 37, 12, 636, 637, 3, 94, 47, 0, 637, 638, 5, 210, 0, 0, 638, 640, 1, 0, 0, 0, 639, 636, 1, 0, 0, 0, 639, 640, 1, 0, 0, 0, 640, 641, 1, 0, 0, 0, 641, 661, 5, 202, 0, 0, 642, 643, 5, 220, 0, 0, 643, 644, 3, 2, 1, 0, 644, 645, 5, 236, 0, 0, 645, 661, 1, 0, 0, 0, 646, 647, 5, 220, 0, 0, 647, 648, 3, 74, 37, 0, 648, 649, 5, 236, 0, 0, 649, 661, 1, 0, 0, 0, 650, 651, 5, 220, 0, 0, 651, 652, 3, 72, 36, 0, 652, 653, 5, 236, 0, 0, 653, 661, 1, 0, 0, 0, 654, 656, 5, 219, 0, 0, 655, 657, 3, 72, 36, 0, 656, 655, 1, 0, 0, 0, 656, 657, 1, 0, 0, 0, 657, 658, 1, 0, 0, 0, 658, 661, 5, 235, 0, 0, 659, 661, 3, 86, 43, 0, 660, 531, 1, 0, 0, 0, 660, 551, 1, 0, 0, 0, 660, 558, 1, 0, 0, 0, 660, 560, 1, 0, 0, 0, 660, 567, 1, 0, 0, 0, 660, 571, 1, 0, 0, 0, 660, 582, 1, 0, 0, 0, 660, 584, 1, 0, 0, 0, 660, 592, 1, 0, 0, 0, 660, 604, 1, 0, 0, 0, 660, 614, 1, 0, 0, 0, 660, 631, 1, 0, 0, 0, 660, 632, 1, 0, 0, 0, 660, 634, 1, 0, 0, 0, 660, 639, 1, 0, 0, 0, 660, 642, 1, 0, 0, 0, 660, 646, 1, 0, 0, 0, 660, 650, 1, 0, 0, 0, 660, 654, 1, 0, 0, 0, 660, 659, 1, 0, 0, 0, 661, 755, 1, 0, 0, 0, 662, 666, 10, 17, 0, 0, 663, 667, 5, 202, 0, 0, 664, 667, 5, 238, 0, 0, 665, 667, 5, 227, 0, 0, 666, 663, 1, 0, 0, 0, 666, 664, 1, 0, 0, 0, 666, 665, 1, 0, 0, 0, 667, 668, 1, 0, 0, 0, 668, 754, 3, 74, 37, 18, 669, 673, 10, 16, 0, 0, 670, 674, 5, 228, 0, 0, 671, 674, 5, 208, 0, 0, 672, 674, 5, 207, 0, 0, 673, 670, 1, 0, 0, 0, 673, 671, 1, 0, 0, 0, 673, 672, 1, 0, 0, 0, 674, 675, 1, 0, 0, 0, 675, 754, 3, 74, 37, 17, 676, 701, 10, 15, 0, 0, 677, 702, 5, 211, 0, 0, 678, 702, 5, 212, 0, 0, 679, 702, 5, 223, 0, 0, 680, 702, 5, 221, 0, 0, 681, 702, 5, 222, 0, 0, 682, 702, 5, 213, 0, 0, 683, 702, 5, 214, 0, 0, 684, 686, 5, 115, 0, 0, 685, 684, 1, 0, 0, 0, 685, 686, 1, 0, 0, 0, 686, 687, 1, 0, 0, 0, 687, 689, 5, 80, 0, 0, 688, 690, 5, 25, 0, 0, 689, 688, 1, 0, 0, 0, 689, 690, 1, 0, 0, 0, 690, 702, 1, 0, 0, 0, 691, 693, 5, 115, 0, 0, 692, 691, 1, 0, 0, 0, 692, 693, 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 702, 7, 10, 0, 0, 695, 702, 5, 232, 0, 0, 696, 702, 5, 233, 0, 0, 697, 702, 5, 225, 0, 0, 698, 702, 5, 216, 0, 0, 699, 702, 5, 217, 0, 0, 700, 702, 5, 224, 0, 0, 701, 677, 1, 0, 0, 0, 701, 678, 1, 0, 0, 0, 701, 679, 1, 0, 0, 0, 701, 680, 1, 0, 0, 0, 701, 681, 1, 0, 0, 0, 701, 682, 1, 0, 0, 0, 701, 683, 1, 0, 0, 0, 701, 685, 1, 0, 0, 0, 701, 692, 1, 0, 0, 0, 701, 695, 1, 0, 0, 0, 701, 696, 1, 0, 0, 0, 701, 697, 1, 0, 0, 0, 701, 698, 1, 0, 0, 0, 701, 699, 1, 0, 0, 0, 701, 700, 1, 0, 0, 0, 702, 703, 1, 0, 0, 0, 703, 754, 3, 74, 37, 16, 704, 705, 10, 13, 0, 0, 705, 706, 5, 226, 0, 0, 706, 754, 3, 74, 37, 14, 707, 708, 10, 11, 0, 0, 708, 709, 5, 6, 0, 0, 709, 754, 3, 74, 37, 12, 710, 711, 10, 10, 0, 0, 711, 712, 5, 121, 0, 0, 712, 754, 3, 74, 37, 11, 713, 715, 10, 9, 0, 0, 714, 716, 5, 115, 0, 0, 715, 714, 1, 0, 0, 0, 715, 716, 1, 0, 0, 0, 716, 717, 1, 0, 0, 0, 717, 718, 5, 16, 0, 0, 718, 719, 3, 74, 37, 0, 719, 720, 5, 6, 0, 0, 720, 721, 3, 74, 37, 10, 721, 754, 1, 0, 0, 0, 722, 723, 10, 8, 0, 0, 723, 724, 5, 229, 0, 0, 724, 725, 3, 74, 37, 0, 725, 726, 5, 205, 0, 0, 726, 727, 3, 74, 37, 8, 727, 754, 1, 0, 0, 0, 728, 729, 10, 21, 0, 0, 729, 730, 5, 219, 0, 0, 730, 731, 3, 74, 37, 0, 731, 732, 5, 235, 0, 0, 732, 754, 1, 0, 0, 0, 733, 734, 10, 20, 0, 0, 734, 735, 5, 210, 0, 0, 735, 754, 5, 197, 0, 0, 736, 737, 10, 19, 0, 0, 737, 738, 5, 210, 0, 0, 738, 754, 3, 114, 57, 0, 739, 740, 10, 14, 0, 0, 740, 742, 5, 88, 0, 0, 741, 743, 5, 115, 0, 0, 742, 741, 1, 0, 0, 0, 742, 743, 1, 0, 0, 0, 743, 744, 1, 0, 0, 0, 744, 754, 5, 116, 0, 0, 745, 751, 10, 7, 0, 0, 746, 752, 3, 112, 56, 0, 747, 748, 5, 10, 0, 0, 748, 752, 3, 114, 57, 0, 749, 750, 5, 10, 0, 0, 750, 752, 5, 199, 0, 0, 751, 746, 1, 0, 0, 0, 751, 747, 1, 0, 0, 0, 751, 749, 1, 0, 0, 0, 752, 754, 1, 0, 0, 0, 753, 662, 1, 0, 0, 0, 753, 669, 1, 0, 0, 0, 753, 676, 1, 0, 0, 0, 753, 704, 1, 0, 0, 0, 753, 707, 1, 0, 0, 0, 753, 710, 1, 0, 0, 0, 753, 713, 1, 0, 0, 0, 753, 722, 1, 0, 0, 0, 753, 728, 1, 0, 0, 0, 753, 733, 1, 0, 0, 0, 753, 736, 1, 0, 0, 0, 753, 739, 1, 0, 0, 0, 753, 745, 1, 0, 0, 0, 754, 757, 1, 0, 0, 0, 755, 753, 1, 0, 0, 0, 755, 756, 1, 0, 0, 0, 756, 75, 1, 0, 0, 0, 757, 755, 1, 0, 0, 0, 758, 763, 3, 78, 39, 0, 759, 760, 5, 206, 0, 0, 760, 762, 3, 78, 39, 0, 761, 759, 1, 0, 0, 0, 762, 765, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 77, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 766, 769, 3, 80, 40, 0, 767, 769, 3, 74, 37, 0, 768, 766, 1, 0, 0, 0, 768, 767, 1, 0, 0, 0, 769, 79, 1, 0, 0, 0, 770, 771, 5, 220, 0, 0, 771, 776, 3, 114, 57, 0, 772, 773, 5, 206, 0, 0, 773, 775, 3, 114, 57, 0, 774, 772, 1, 0, 0, 0, 775, 778, 1, 0, 0, 0, 776, 774, 1, 0, 0, 0, 776, 777, 1, 0, 0, 0, 777, 779, 1, 0, 0, 0, 778, 776, 1, 0, 0, 0, 779, 780, 5, 236, 0, 0, 780, 790, 1, 0, 0, 0, 781, 786, 3, 114, 57, 0, 782, 783, 5, 206, 0, 0, 783, 785, 3, 114, 57, 0, 784, 782, 1, 0, 0, 0, 785, 788, 1, 0, 0, 0, 786, 784, 1, 0, 0, 0, 786, 787, 1, 0, 0, 0, 787, 790, 1, 0, 0, 0, 788, 786, 1, 0, 0, 0, 789, 770, 1, 0, 0, 0, 789, 781, 1, 0, 0, 0, 790, 791, 1, 0, 0, 0, 791, 792, 5, 201, 0, 0, 792, 793, 3, 74, 37, 0, 793, 81, 1, 0, 0, 0, 794, 799, 3, 84, 42, 0, 795, 796, 5, 206, 0, 0, 796, 798, 3, 84, 42, 0, 797, 795, 1, 0, 0, 0, 798, 801, 1, 0, 0, 0, 799, 797, 1, 0, 0, 0, 799, 800, 1, 0, 0, 0, 800, 83, 1, 0, 0, 0, 801, 799, 1, 0, 0, 0, 802, 803, 3, 114, 57, 0, 803, 804, 5, 10, 0, 0, 804, 805, 5, 220, 0, 0, 805, 806, 3, 2, 1, 0, 806, 807, 5, 236, 0, 0, 807, 813, 1, 0, 0, 0, 808, 809, 3, 74, 37, 0, 809, 810, 5, 10, 0, 0, 810, 811, 3, 114, 57, 0, 811, 813, 1, 0, 0, 0, 812, 802, 1, 0, 0, 0, 812, 808, 1, 0, 0, 0, 813, 85, 1, 0, 0, 0, 814, 822, 5, 200, 0, 0, 815, 816, 3, 94, 47, 0, 816, 817, 5, 210, 0, 0, 817, 819, 1, 0, 0, 0, 818, 815, 1, 0, 0, 0, 818, 819, 1, 0, 0, 0, 819, 820, 1, 0, 0, 0, 820, 822, 3, 88, 44, 0, 821, 814, 1, 0, 0, 0, 821, 818, 1, 0, 0, 0, 822, 87, 1, 0, 0, 0, 823, 828, 3, 114, 57, 0, 824, 825, 5, 210, 0, 0, 825, 827, 3, 114, 57, 0, 826, 824, 1, 0, 0, 0, 827, 830, 1, 0, 0, 0, 828, 826, 1, 0, 0, 0, 828, 829, 1, 0, 0, 0, 829, 89, 1, 0, 0, 0, 830, 828, 1, 0, 0, 0, 831, 832, 6, 45, -1, 0, 832, 840, 3, 94, 47, 0, 833, 840, 3, 92, 46, 0, 834, 835, 5, 220, 0, 0, 835, 836, 3, 2, 1, 0, 836, 837, 5, 236, 0, 0, 837, 840, 1, 0, 0, 0, 838, 840, 5, 200, 0, 0, 839, 831, 1, 0, 0, 0, 839, 833, 1, 0, 0, 0, 839, 834, 1, 0, 0, 0, 839, 838, 1, 0, 0, 0, 840, 849, 1, 0, 0, 0, 841, 845, 10, 2, 0, 0, 842, 846, 3, 112, 56, 0, 843, 844, 5, 10, 0, 0, 844, 846, 3, 114, 57, 0, 845, 842, 1, 0, 0, 0, 845, 843, 1, 0, 0, 0, 846, 848, 1, 0, 0, 0, 847, 841, 1, 0, 0, 0, 848, 851, 1, 0, 0, 0, 849, 847, 1, 0, 0, 0, 849, 850, 1, 0, 0, 0, 850, 91, 1, 0, 0, 0, 851, 849, 1, 0, 0, 0, 852, 853, 3, 114, 57, 0, 853, 855, 5, 220, 0, 0, 854, 856, 3, 96, 48, 0, 855, 854, 1, 0, 0, 0, 855, 856, 1, 0, 0, 0, 856, 857, 1, 0, 0, 0, 857, 858, 5, 236, 0, 0, 858, 93, 1, 0, 0, 0, 859, 860, 3, 98, 49, 0, 860, 861, 5, 210, 0, 0, 861, 863, 1, 0, 0, 0, 862, 859, 1, 0, 0, 0, 862, 863, 1, 0, 0, 0, 863, 864, 1, 0, 0, 0, 864, 865, 3, 114, 57, 0, 865, 95, 1, 0, 0, 0, 866, 871, 3, 74, 37, 0, 867, 868, 5, 206, 0, 0, 868, 870, 3, 74, 37, 0, 869, 867, 1, 0, 0, 0, 870, 873, 1, 0, 0, 0, 871, 869, 1, 0, 0, 0, 871, 872, 1, 0, 0, 0, 872, 97, 1, 0, 0, 0, 873, 871, 1, 0, 0, 0, 874, 875, 3, 114, 57, 0, 875, 99, 1, 0, 0, 0, 876, 885, 5, 195, 0, 0, 877, 878, 5, 210, 0, 0, 878, 885, 7, 11, 0, 0, 879, 880, 5, 197, 0, 0, 880, 882, 5, 210, 0, 0, 881, 883, 7, 11, 0, 0, 882, 881, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 885, 1, 0, 0, 0, 884, 876, 1, 0, 0, 0, 884, 877, 1, 0, 0, 0, 884, 879, 1, 0, 0, 0, 885, 101, 1, 0, 0, 0, 886, 888, 7, 12, 0, 0, 887, 886, 1, 0, 0, 0, 887, 888, 1, 0, 0, 0, 888, 895, 1, 0, 0, 0, 889, 896, 3, 100, 50, 0, 890, 896, 5, 196, 0, 0, 891, 896, 5, 197, 0, 0, 892, 896, 5, 198, 0, 0, 893, 896, 5, 82, 0, 0, 894, 896, 5, 113, 0, 0, 895, 889, 1, 0, 0, 0, 895, 890, 1, 0, 0, 0, 895, 891, 1, 0, 0, 0, 895, 892, 1, 0, 0, 0, 895, 893, 1, 0, 0, 0, 895, 894, 1, 0, 0, 0, 896, 103, 1, 0, 0, 0, 897, 901, 3, 102, 51, 0, 898, 901, 5, 199, 0, 0, 899, 901, 5, 116, 0, 0, 900, 897, 1, 0, 0, 0, 900, 898, 1, 0, 0, 0, 900, 899, 1, 0, 0, 0, 901, 105, 1, 0, 0, 0, 902, 903, 7, 13, 0, 0, 903, 107, 1, 0, 0, 0, 904, 905, 7, 14, 0, 0, 905, 109, 1, 0, 0, 0, 906, 907, 7, 15, 0, 0, 907, 111, 1, 0, 0, 0, 908, 911, 5, 194, 0, 0, 909, 911, 3, 110, 55, 0, 910, 908, 1, 0, 0, 0, 910, 909, 1, 0, 0, 0, 911, 113, 1, 0, 0, 0, 912, 916, 5, 194, 0, 0, 913, 916, 3, 106, 53, 0, 914, 916, 3, 108, 54, 0, 915, 912, 1, 0, 0, 0, 915, 913, 1, 0, 0, 0, 915, 914, 1, 0, 0, 0, 916, 115, 1, 0, 0, 0, 917, 918, 5, 199, 0, 0, 918, 919, 5, 212, 0, 0, 919, 920, 3, 102, 51, 0, 920, 117, 1, 0, 0, 0, 115, 120, 130, 138, 141, 145, 148, 152, 155, 158, 161, 164, 168, 172, 175, 178, 181, 185, 188, 197, 203, 224, 241, 258, 264, 270, 281, 283, 294, 297, 303, 311, 317, 319, 323, 328, 331, 334, 338, 342, 345, 347, 350, 354, 358, 361, 363, 365, 370, 381, 387, 394, 399, 403, 407, 413, 415, 422, 430, 433, 436, 455, 469, 485, 497, 509, 517, 521, 528, 534, 543, 547, 578, 595, 607, 617, 620, 624, 627, 639, 656, 660, 666, 673, 685, 689, 692, 701, 715, 742, 751, 753, 755, 763, 768, 776, 786, 789, 799, 812, 818, 821, 828, 839, 845, 849, 855, 862, 871, 882, 884, 887, 895, 900, 910, 915] \ No newline at end of file +[4, 1, 242, 959, 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, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 2, 58, 7, 58, 2, 59, 7, 59, 2, 60, 7, 60, 2, 61, 7, 61, 1, 0, 1, 0, 1, 0, 3, 0, 128, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 5, 1, 136, 8, 1, 10, 1, 12, 1, 139, 9, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 146, 8, 2, 1, 3, 3, 3, 149, 8, 3, 1, 3, 1, 3, 3, 3, 153, 8, 3, 1, 3, 3, 3, 156, 8, 3, 1, 3, 1, 3, 3, 3, 160, 8, 3, 1, 3, 3, 3, 163, 8, 3, 1, 3, 3, 3, 166, 8, 3, 1, 3, 3, 3, 169, 8, 3, 1, 3, 3, 3, 172, 8, 3, 1, 3, 1, 3, 3, 3, 176, 8, 3, 1, 3, 1, 3, 3, 3, 180, 8, 3, 1, 3, 3, 3, 183, 8, 3, 1, 3, 3, 3, 186, 8, 3, 1, 3, 3, 3, 189, 8, 3, 1, 3, 1, 3, 3, 3, 193, 8, 3, 1, 3, 3, 3, 196, 8, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 3, 5, 205, 8, 5, 1, 6, 1, 6, 1, 6, 1, 7, 3, 7, 211, 8, 7, 1, 7, 1, 7, 1, 7, 1, 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, 5, 8, 230, 8, 8, 10, 8, 12, 8, 233, 9, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 249, 8, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 266, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 272, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 278, 8, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 289, 8, 15, 3, 15, 291, 8, 15, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 3, 18, 302, 8, 18, 1, 18, 3, 18, 305, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 311, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 3, 18, 319, 8, 18, 1, 18, 1, 18, 1, 18, 1, 18, 5, 18, 325, 8, 18, 10, 18, 12, 18, 328, 9, 18, 1, 19, 3, 19, 331, 8, 19, 1, 19, 1, 19, 1, 19, 3, 19, 336, 8, 19, 1, 19, 3, 19, 339, 8, 19, 1, 19, 3, 19, 342, 8, 19, 1, 19, 1, 19, 3, 19, 346, 8, 19, 1, 19, 1, 19, 3, 19, 350, 8, 19, 1, 19, 3, 19, 353, 8, 19, 3, 19, 355, 8, 19, 1, 19, 3, 19, 358, 8, 19, 1, 19, 1, 19, 3, 19, 362, 8, 19, 1, 19, 1, 19, 3, 19, 366, 8, 19, 1, 19, 3, 19, 369, 8, 19, 3, 19, 371, 8, 19, 3, 19, 373, 8, 19, 1, 20, 1, 20, 1, 20, 3, 20, 378, 8, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 3, 21, 389, 8, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 395, 8, 22, 1, 23, 1, 23, 1, 23, 5, 23, 400, 8, 23, 10, 23, 12, 23, 403, 9, 23, 1, 24, 1, 24, 3, 24, 407, 8, 24, 1, 24, 1, 24, 3, 24, 411, 8, 24, 1, 24, 1, 24, 3, 24, 415, 8, 24, 1, 25, 1, 25, 1, 25, 1, 25, 3, 25, 421, 8, 25, 3, 25, 423, 8, 25, 1, 26, 1, 26, 1, 26, 5, 26, 428, 8, 26, 10, 26, 12, 26, 431, 9, 26, 1, 27, 1, 27, 1, 27, 1, 27, 1, 28, 3, 28, 438, 8, 28, 1, 28, 3, 28, 441, 8, 28, 1, 28, 3, 28, 444, 8, 28, 1, 29, 1, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 1, 32, 3, 32, 463, 8, 32, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 1, 33, 3, 33, 477, 8, 33, 1, 34, 1, 34, 1, 34, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 491, 8, 35, 10, 35, 12, 35, 494, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 503, 8, 35, 10, 35, 12, 35, 506, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 5, 35, 515, 8, 35, 10, 35, 12, 35, 518, 9, 35, 1, 35, 1, 35, 1, 35, 1, 35, 1, 35, 3, 35, 525, 8, 35, 1, 35, 1, 35, 3, 35, 529, 8, 35, 1, 36, 1, 36, 1, 36, 5, 36, 534, 8, 36, 10, 36, 12, 36, 537, 9, 36, 1, 37, 1, 37, 1, 37, 3, 37, 542, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 4, 37, 549, 8, 37, 11, 37, 12, 37, 550, 1, 37, 1, 37, 3, 37, 555, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 586, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 603, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 615, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 625, 8, 37, 1, 37, 3, 37, 628, 8, 37, 1, 37, 1, 37, 3, 37, 632, 8, 37, 1, 37, 3, 37, 635, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 648, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 665, 8, 37, 1, 37, 1, 37, 3, 37, 669, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 675, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 682, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 694, 8, 37, 1, 37, 1, 37, 3, 37, 698, 8, 37, 1, 37, 3, 37, 701, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 710, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 724, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 751, 8, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 1, 37, 3, 37, 760, 8, 37, 5, 37, 762, 8, 37, 10, 37, 12, 37, 765, 9, 37, 1, 38, 1, 38, 1, 38, 5, 38, 770, 8, 38, 10, 38, 12, 38, 773, 9, 38, 1, 39, 1, 39, 3, 39, 777, 8, 39, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 783, 8, 40, 10, 40, 12, 40, 786, 9, 40, 1, 40, 1, 40, 1, 40, 1, 40, 1, 40, 5, 40, 793, 8, 40, 10, 40, 12, 40, 796, 9, 40, 3, 40, 798, 8, 40, 1, 40, 1, 40, 1, 40, 1, 41, 1, 41, 1, 41, 5, 41, 806, 8, 41, 10, 41, 12, 41, 809, 9, 41, 1, 41, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 1, 42, 3, 42, 825, 8, 42, 1, 43, 1, 43, 1, 43, 5, 43, 830, 8, 43, 10, 43, 12, 43, 833, 9, 43, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 1, 44, 3, 44, 845, 8, 44, 1, 45, 1, 45, 1, 45, 1, 45, 3, 45, 851, 8, 45, 1, 45, 3, 45, 854, 8, 45, 1, 46, 1, 46, 1, 46, 5, 46, 859, 8, 46, 10, 46, 12, 46, 862, 9, 46, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 873, 8, 47, 1, 47, 1, 47, 1, 47, 1, 47, 3, 47, 879, 8, 47, 5, 47, 881, 8, 47, 10, 47, 12, 47, 884, 9, 47, 1, 48, 1, 48, 1, 48, 3, 48, 889, 8, 48, 1, 48, 1, 48, 1, 49, 1, 49, 1, 49, 3, 49, 896, 8, 49, 1, 49, 1, 49, 1, 50, 1, 50, 1, 50, 5, 50, 903, 8, 50, 10, 50, 12, 50, 906, 9, 50, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 3, 52, 916, 8, 52, 3, 52, 918, 8, 52, 1, 53, 3, 53, 921, 8, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 53, 3, 53, 929, 8, 53, 1, 54, 1, 54, 1, 54, 3, 54, 934, 8, 54, 1, 55, 1, 55, 1, 56, 1, 56, 1, 57, 1, 57, 1, 58, 1, 58, 3, 58, 944, 8, 58, 1, 59, 1, 59, 1, 59, 3, 59, 949, 8, 59, 1, 60, 1, 60, 1, 60, 1, 60, 1, 61, 1, 61, 1, 61, 1, 61, 1, 61, 0, 3, 36, 74, 94, 62, 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, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 0, 16, 2, 0, 32, 32, 141, 141, 2, 0, 84, 84, 96, 96, 3, 0, 4, 4, 8, 8, 12, 12, 4, 0, 4, 4, 7, 8, 12, 12, 147, 147, 2, 0, 96, 96, 140, 140, 2, 0, 4, 4, 8, 8, 2, 0, 11, 11, 42, 43, 2, 0, 62, 62, 93, 93, 2, 0, 133, 133, 143, 143, 3, 0, 17, 17, 95, 95, 170, 170, 2, 0, 79, 79, 98, 98, 1, 0, 197, 198, 2, 0, 208, 208, 228, 228, 8, 0, 37, 37, 76, 76, 108, 108, 110, 110, 132, 132, 145, 145, 185, 185, 190, 190, 13, 0, 2, 24, 26, 36, 38, 75, 77, 81, 83, 107, 109, 109, 111, 112, 114, 115, 117, 130, 133, 144, 146, 184, 186, 189, 191, 192, 4, 0, 36, 36, 62, 62, 77, 77, 91, 91, 1083, 0, 127, 1, 0, 0, 0, 2, 131, 1, 0, 0, 0, 4, 145, 1, 0, 0, 0, 6, 148, 1, 0, 0, 0, 8, 197, 1, 0, 0, 0, 10, 200, 1, 0, 0, 0, 12, 206, 1, 0, 0, 0, 14, 210, 1, 0, 0, 0, 16, 216, 1, 0, 0, 0, 18, 234, 1, 0, 0, 0, 20, 237, 1, 0, 0, 0, 22, 240, 1, 0, 0, 0, 24, 250, 1, 0, 0, 0, 26, 253, 1, 0, 0, 0, 28, 257, 1, 0, 0, 0, 30, 290, 1, 0, 0, 0, 32, 292, 1, 0, 0, 0, 34, 295, 1, 0, 0, 0, 36, 310, 1, 0, 0, 0, 38, 372, 1, 0, 0, 0, 40, 377, 1, 0, 0, 0, 42, 388, 1, 0, 0, 0, 44, 390, 1, 0, 0, 0, 46, 396, 1, 0, 0, 0, 48, 404, 1, 0, 0, 0, 50, 422, 1, 0, 0, 0, 52, 424, 1, 0, 0, 0, 54, 432, 1, 0, 0, 0, 56, 437, 1, 0, 0, 0, 58, 445, 1, 0, 0, 0, 60, 449, 1, 0, 0, 0, 62, 453, 1, 0, 0, 0, 64, 462, 1, 0, 0, 0, 66, 476, 1, 0, 0, 0, 68, 478, 1, 0, 0, 0, 70, 528, 1, 0, 0, 0, 72, 530, 1, 0, 0, 0, 74, 668, 1, 0, 0, 0, 76, 766, 1, 0, 0, 0, 78, 776, 1, 0, 0, 0, 80, 797, 1, 0, 0, 0, 82, 802, 1, 0, 0, 0, 84, 824, 1, 0, 0, 0, 86, 826, 1, 0, 0, 0, 88, 844, 1, 0, 0, 0, 90, 853, 1, 0, 0, 0, 92, 855, 1, 0, 0, 0, 94, 872, 1, 0, 0, 0, 96, 885, 1, 0, 0, 0, 98, 895, 1, 0, 0, 0, 100, 899, 1, 0, 0, 0, 102, 907, 1, 0, 0, 0, 104, 917, 1, 0, 0, 0, 106, 920, 1, 0, 0, 0, 108, 933, 1, 0, 0, 0, 110, 935, 1, 0, 0, 0, 112, 937, 1, 0, 0, 0, 114, 939, 1, 0, 0, 0, 116, 943, 1, 0, 0, 0, 118, 948, 1, 0, 0, 0, 120, 950, 1, 0, 0, 0, 122, 954, 1, 0, 0, 0, 124, 128, 3, 2, 1, 0, 125, 128, 3, 6, 3, 0, 126, 128, 3, 82, 41, 0, 127, 124, 1, 0, 0, 0, 127, 125, 1, 0, 0, 0, 127, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 130, 5, 0, 0, 1, 130, 1, 1, 0, 0, 0, 131, 137, 3, 4, 2, 0, 132, 133, 5, 176, 0, 0, 133, 134, 5, 4, 0, 0, 134, 136, 3, 4, 2, 0, 135, 132, 1, 0, 0, 0, 136, 139, 1, 0, 0, 0, 137, 135, 1, 0, 0, 0, 137, 138, 1, 0, 0, 0, 138, 3, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 140, 146, 3, 6, 3, 0, 141, 142, 5, 220, 0, 0, 142, 143, 3, 2, 1, 0, 143, 144, 5, 236, 0, 0, 144, 146, 1, 0, 0, 0, 145, 140, 1, 0, 0, 0, 145, 141, 1, 0, 0, 0, 146, 5, 1, 0, 0, 0, 147, 149, 3, 8, 4, 0, 148, 147, 1, 0, 0, 0, 148, 149, 1, 0, 0, 0, 149, 150, 1, 0, 0, 0, 150, 152, 5, 146, 0, 0, 151, 153, 5, 49, 0, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 155, 1, 0, 0, 0, 154, 156, 3, 10, 5, 0, 155, 154, 1, 0, 0, 0, 155, 156, 1, 0, 0, 0, 156, 157, 1, 0, 0, 0, 157, 159, 3, 72, 36, 0, 158, 160, 3, 12, 6, 0, 159, 158, 1, 0, 0, 0, 159, 160, 1, 0, 0, 0, 160, 162, 1, 0, 0, 0, 161, 163, 3, 14, 7, 0, 162, 161, 1, 0, 0, 0, 162, 163, 1, 0, 0, 0, 163, 165, 1, 0, 0, 0, 164, 166, 3, 18, 9, 0, 165, 164, 1, 0, 0, 0, 165, 166, 1, 0, 0, 0, 166, 168, 1, 0, 0, 0, 167, 169, 3, 20, 10, 0, 168, 167, 1, 0, 0, 0, 168, 169, 1, 0, 0, 0, 169, 171, 1, 0, 0, 0, 170, 172, 3, 22, 11, 0, 171, 170, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 175, 1, 0, 0, 0, 173, 174, 5, 189, 0, 0, 174, 176, 7, 0, 0, 0, 175, 173, 1, 0, 0, 0, 175, 176, 1, 0, 0, 0, 176, 179, 1, 0, 0, 0, 177, 178, 5, 189, 0, 0, 178, 180, 5, 169, 0, 0, 179, 177, 1, 0, 0, 0, 179, 180, 1, 0, 0, 0, 180, 182, 1, 0, 0, 0, 181, 183, 3, 24, 12, 0, 182, 181, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 185, 1, 0, 0, 0, 184, 186, 3, 16, 8, 0, 185, 184, 1, 0, 0, 0, 185, 186, 1, 0, 0, 0, 186, 188, 1, 0, 0, 0, 187, 189, 3, 26, 13, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 192, 1, 0, 0, 0, 190, 193, 3, 30, 15, 0, 191, 193, 3, 32, 16, 0, 192, 190, 1, 0, 0, 0, 192, 191, 1, 0, 0, 0, 192, 193, 1, 0, 0, 0, 193, 195, 1, 0, 0, 0, 194, 196, 3, 34, 17, 0, 195, 194, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 7, 1, 0, 0, 0, 197, 198, 5, 189, 0, 0, 198, 199, 3, 86, 43, 0, 199, 9, 1, 0, 0, 0, 200, 201, 5, 168, 0, 0, 201, 204, 5, 198, 0, 0, 202, 203, 5, 189, 0, 0, 203, 205, 5, 164, 0, 0, 204, 202, 1, 0, 0, 0, 204, 205, 1, 0, 0, 0, 205, 11, 1, 0, 0, 0, 206, 207, 5, 68, 0, 0, 207, 208, 3, 36, 18, 0, 208, 13, 1, 0, 0, 0, 209, 211, 7, 1, 0, 0, 210, 209, 1, 0, 0, 0, 210, 211, 1, 0, 0, 0, 211, 212, 1, 0, 0, 0, 212, 213, 5, 9, 0, 0, 213, 214, 5, 90, 0, 0, 214, 215, 3, 72, 36, 0, 215, 15, 1, 0, 0, 0, 216, 217, 5, 188, 0, 0, 217, 218, 3, 118, 59, 0, 218, 219, 5, 10, 0, 0, 219, 220, 5, 220, 0, 0, 220, 221, 3, 56, 28, 0, 221, 231, 5, 236, 0, 0, 222, 223, 5, 206, 0, 0, 223, 224, 3, 118, 59, 0, 224, 225, 5, 10, 0, 0, 225, 226, 5, 220, 0, 0, 226, 227, 3, 56, 28, 0, 227, 228, 5, 236, 0, 0, 228, 230, 1, 0, 0, 0, 229, 222, 1, 0, 0, 0, 230, 233, 1, 0, 0, 0, 231, 229, 1, 0, 0, 0, 231, 232, 1, 0, 0, 0, 232, 17, 1, 0, 0, 0, 233, 231, 1, 0, 0, 0, 234, 235, 5, 129, 0, 0, 235, 236, 3, 74, 37, 0, 236, 19, 1, 0, 0, 0, 237, 238, 5, 187, 0, 0, 238, 239, 3, 74, 37, 0, 239, 21, 1, 0, 0, 0, 240, 241, 5, 73, 0, 0, 241, 248, 5, 18, 0, 0, 242, 243, 7, 0, 0, 0, 243, 244, 5, 220, 0, 0, 244, 245, 3, 72, 36, 0, 245, 246, 5, 236, 0, 0, 246, 249, 1, 0, 0, 0, 247, 249, 3, 72, 36, 0, 248, 242, 1, 0, 0, 0, 248, 247, 1, 0, 0, 0, 249, 23, 1, 0, 0, 0, 250, 251, 5, 74, 0, 0, 251, 252, 3, 74, 37, 0, 252, 25, 1, 0, 0, 0, 253, 254, 5, 122, 0, 0, 254, 255, 5, 18, 0, 0, 255, 256, 3, 46, 23, 0, 256, 27, 1, 0, 0, 0, 257, 258, 5, 122, 0, 0, 258, 259, 5, 18, 0, 0, 259, 260, 3, 72, 36, 0, 260, 29, 1, 0, 0, 0, 261, 262, 5, 99, 0, 0, 262, 265, 3, 74, 37, 0, 263, 264, 5, 206, 0, 0, 264, 266, 3, 74, 37, 0, 265, 263, 1, 0, 0, 0, 265, 266, 1, 0, 0, 0, 266, 271, 1, 0, 0, 0, 267, 268, 5, 189, 0, 0, 268, 272, 5, 164, 0, 0, 269, 270, 5, 18, 0, 0, 270, 272, 3, 72, 36, 0, 271, 267, 1, 0, 0, 0, 271, 269, 1, 0, 0, 0, 271, 272, 1, 0, 0, 0, 272, 291, 1, 0, 0, 0, 273, 274, 5, 99, 0, 0, 274, 277, 3, 74, 37, 0, 275, 276, 5, 189, 0, 0, 276, 278, 5, 164, 0, 0, 277, 275, 1, 0, 0, 0, 277, 278, 1, 0, 0, 0, 278, 279, 1, 0, 0, 0, 279, 280, 5, 118, 0, 0, 280, 281, 3, 74, 37, 0, 281, 291, 1, 0, 0, 0, 282, 283, 5, 99, 0, 0, 283, 284, 3, 74, 37, 0, 284, 285, 5, 118, 0, 0, 285, 288, 3, 74, 37, 0, 286, 287, 5, 18, 0, 0, 287, 289, 3, 72, 36, 0, 288, 286, 1, 0, 0, 0, 288, 289, 1, 0, 0, 0, 289, 291, 1, 0, 0, 0, 290, 261, 1, 0, 0, 0, 290, 273, 1, 0, 0, 0, 290, 282, 1, 0, 0, 0, 291, 31, 1, 0, 0, 0, 292, 293, 5, 118, 0, 0, 293, 294, 3, 74, 37, 0, 294, 33, 1, 0, 0, 0, 295, 296, 5, 150, 0, 0, 296, 297, 3, 52, 26, 0, 297, 35, 1, 0, 0, 0, 298, 299, 6, 18, -1, 0, 299, 301, 3, 94, 47, 0, 300, 302, 5, 61, 0, 0, 301, 300, 1, 0, 0, 0, 301, 302, 1, 0, 0, 0, 302, 304, 1, 0, 0, 0, 303, 305, 3, 44, 22, 0, 304, 303, 1, 0, 0, 0, 304, 305, 1, 0, 0, 0, 305, 311, 1, 0, 0, 0, 306, 307, 5, 220, 0, 0, 307, 308, 3, 36, 18, 0, 308, 309, 5, 236, 0, 0, 309, 311, 1, 0, 0, 0, 310, 298, 1, 0, 0, 0, 310, 306, 1, 0, 0, 0, 311, 326, 1, 0, 0, 0, 312, 313, 10, 3, 0, 0, 313, 314, 3, 40, 20, 0, 314, 315, 3, 36, 18, 4, 315, 325, 1, 0, 0, 0, 316, 318, 10, 4, 0, 0, 317, 319, 3, 38, 19, 0, 318, 317, 1, 0, 0, 0, 318, 319, 1, 0, 0, 0, 319, 320, 1, 0, 0, 0, 320, 321, 5, 90, 0, 0, 321, 322, 3, 36, 18, 0, 322, 323, 3, 42, 21, 0, 323, 325, 1, 0, 0, 0, 324, 312, 1, 0, 0, 0, 324, 316, 1, 0, 0, 0, 325, 328, 1, 0, 0, 0, 326, 324, 1, 0, 0, 0, 326, 327, 1, 0, 0, 0, 327, 37, 1, 0, 0, 0, 328, 326, 1, 0, 0, 0, 329, 331, 7, 2, 0, 0, 330, 329, 1, 0, 0, 0, 330, 331, 1, 0, 0, 0, 331, 332, 1, 0, 0, 0, 332, 339, 5, 84, 0, 0, 333, 335, 5, 84, 0, 0, 334, 336, 7, 2, 0, 0, 335, 334, 1, 0, 0, 0, 335, 336, 1, 0, 0, 0, 336, 339, 1, 0, 0, 0, 337, 339, 7, 2, 0, 0, 338, 330, 1, 0, 0, 0, 338, 333, 1, 0, 0, 0, 338, 337, 1, 0, 0, 0, 339, 373, 1, 0, 0, 0, 340, 342, 7, 3, 0, 0, 341, 340, 1, 0, 0, 0, 341, 342, 1, 0, 0, 0, 342, 343, 1, 0, 0, 0, 343, 345, 7, 4, 0, 0, 344, 346, 5, 123, 0, 0, 345, 344, 1, 0, 0, 0, 345, 346, 1, 0, 0, 0, 346, 355, 1, 0, 0, 0, 347, 349, 7, 4, 0, 0, 348, 350, 5, 123, 0, 0, 349, 348, 1, 0, 0, 0, 349, 350, 1, 0, 0, 0, 350, 352, 1, 0, 0, 0, 351, 353, 7, 3, 0, 0, 352, 351, 1, 0, 0, 0, 352, 353, 1, 0, 0, 0, 353, 355, 1, 0, 0, 0, 354, 341, 1, 0, 0, 0, 354, 347, 1, 0, 0, 0, 355, 373, 1, 0, 0, 0, 356, 358, 7, 5, 0, 0, 357, 356, 1, 0, 0, 0, 357, 358, 1, 0, 0, 0, 358, 359, 1, 0, 0, 0, 359, 361, 5, 69, 0, 0, 360, 362, 5, 123, 0, 0, 361, 360, 1, 0, 0, 0, 361, 362, 1, 0, 0, 0, 362, 371, 1, 0, 0, 0, 363, 365, 5, 69, 0, 0, 364, 366, 5, 123, 0, 0, 365, 364, 1, 0, 0, 0, 365, 366, 1, 0, 0, 0, 366, 368, 1, 0, 0, 0, 367, 369, 7, 5, 0, 0, 368, 367, 1, 0, 0, 0, 368, 369, 1, 0, 0, 0, 369, 371, 1, 0, 0, 0, 370, 357, 1, 0, 0, 0, 370, 363, 1, 0, 0, 0, 371, 373, 1, 0, 0, 0, 372, 338, 1, 0, 0, 0, 372, 354, 1, 0, 0, 0, 372, 370, 1, 0, 0, 0, 373, 39, 1, 0, 0, 0, 374, 375, 5, 31, 0, 0, 375, 378, 5, 90, 0, 0, 376, 378, 5, 206, 0, 0, 377, 374, 1, 0, 0, 0, 377, 376, 1, 0, 0, 0, 378, 41, 1, 0, 0, 0, 379, 380, 5, 119, 0, 0, 380, 389, 3, 72, 36, 0, 381, 382, 5, 179, 0, 0, 382, 383, 5, 220, 0, 0, 383, 384, 3, 72, 36, 0, 384, 385, 5, 236, 0, 0, 385, 389, 1, 0, 0, 0, 386, 387, 5, 179, 0, 0, 387, 389, 3, 72, 36, 0, 388, 379, 1, 0, 0, 0, 388, 381, 1, 0, 0, 0, 388, 386, 1, 0, 0, 0, 389, 43, 1, 0, 0, 0, 390, 391, 5, 144, 0, 0, 391, 394, 3, 50, 25, 0, 392, 393, 5, 118, 0, 0, 393, 395, 3, 50, 25, 0, 394, 392, 1, 0, 0, 0, 394, 395, 1, 0, 0, 0, 395, 45, 1, 0, 0, 0, 396, 401, 3, 48, 24, 0, 397, 398, 5, 206, 0, 0, 398, 400, 3, 48, 24, 0, 399, 397, 1, 0, 0, 0, 400, 403, 1, 0, 0, 0, 401, 399, 1, 0, 0, 0, 401, 402, 1, 0, 0, 0, 402, 47, 1, 0, 0, 0, 403, 401, 1, 0, 0, 0, 404, 406, 3, 74, 37, 0, 405, 407, 7, 6, 0, 0, 406, 405, 1, 0, 0, 0, 406, 407, 1, 0, 0, 0, 407, 410, 1, 0, 0, 0, 408, 409, 5, 117, 0, 0, 409, 411, 7, 7, 0, 0, 410, 408, 1, 0, 0, 0, 410, 411, 1, 0, 0, 0, 411, 414, 1, 0, 0, 0, 412, 413, 5, 26, 0, 0, 413, 415, 5, 200, 0, 0, 414, 412, 1, 0, 0, 0, 414, 415, 1, 0, 0, 0, 415, 49, 1, 0, 0, 0, 416, 423, 3, 122, 61, 0, 417, 420, 3, 106, 53, 0, 418, 419, 5, 238, 0, 0, 419, 421, 3, 106, 53, 0, 420, 418, 1, 0, 0, 0, 420, 421, 1, 0, 0, 0, 421, 423, 1, 0, 0, 0, 422, 416, 1, 0, 0, 0, 422, 417, 1, 0, 0, 0, 423, 51, 1, 0, 0, 0, 424, 429, 3, 54, 27, 0, 425, 426, 5, 206, 0, 0, 426, 428, 3, 54, 27, 0, 427, 425, 1, 0, 0, 0, 428, 431, 1, 0, 0, 0, 429, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 53, 1, 0, 0, 0, 431, 429, 1, 0, 0, 0, 432, 433, 3, 118, 59, 0, 433, 434, 5, 212, 0, 0, 434, 435, 3, 108, 54, 0, 435, 55, 1, 0, 0, 0, 436, 438, 3, 58, 29, 0, 437, 436, 1, 0, 0, 0, 437, 438, 1, 0, 0, 0, 438, 440, 1, 0, 0, 0, 439, 441, 3, 60, 30, 0, 440, 439, 1, 0, 0, 0, 440, 441, 1, 0, 0, 0, 441, 443, 1, 0, 0, 0, 442, 444, 3, 62, 31, 0, 443, 442, 1, 0, 0, 0, 443, 444, 1, 0, 0, 0, 444, 57, 1, 0, 0, 0, 445, 446, 5, 126, 0, 0, 446, 447, 5, 18, 0, 0, 447, 448, 3, 72, 36, 0, 448, 59, 1, 0, 0, 0, 449, 450, 5, 122, 0, 0, 450, 451, 5, 18, 0, 0, 451, 452, 3, 46, 23, 0, 452, 61, 1, 0, 0, 0, 453, 454, 7, 8, 0, 0, 454, 455, 3, 64, 32, 0, 455, 63, 1, 0, 0, 0, 456, 463, 3, 66, 33, 0, 457, 458, 5, 16, 0, 0, 458, 459, 3, 66, 33, 0, 459, 460, 5, 6, 0, 0, 460, 461, 3, 66, 33, 0, 461, 463, 1, 0, 0, 0, 462, 456, 1, 0, 0, 0, 462, 457, 1, 0, 0, 0, 463, 65, 1, 0, 0, 0, 464, 465, 5, 33, 0, 0, 465, 477, 5, 142, 0, 0, 466, 467, 5, 175, 0, 0, 467, 477, 5, 128, 0, 0, 468, 469, 5, 175, 0, 0, 469, 477, 5, 64, 0, 0, 470, 471, 3, 106, 53, 0, 471, 472, 5, 128, 0, 0, 472, 477, 1, 0, 0, 0, 473, 474, 3, 106, 53, 0, 474, 475, 5, 64, 0, 0, 475, 477, 1, 0, 0, 0, 476, 464, 1, 0, 0, 0, 476, 466, 1, 0, 0, 0, 476, 468, 1, 0, 0, 0, 476, 470, 1, 0, 0, 0, 476, 473, 1, 0, 0, 0, 477, 67, 1, 0, 0, 0, 478, 479, 3, 74, 37, 0, 479, 480, 5, 0, 0, 1, 480, 69, 1, 0, 0, 0, 481, 529, 3, 118, 59, 0, 482, 483, 3, 118, 59, 0, 483, 484, 5, 220, 0, 0, 484, 485, 3, 118, 59, 0, 485, 492, 3, 70, 35, 0, 486, 487, 5, 206, 0, 0, 487, 488, 3, 118, 59, 0, 488, 489, 3, 70, 35, 0, 489, 491, 1, 0, 0, 0, 490, 486, 1, 0, 0, 0, 491, 494, 1, 0, 0, 0, 492, 490, 1, 0, 0, 0, 492, 493, 1, 0, 0, 0, 493, 495, 1, 0, 0, 0, 494, 492, 1, 0, 0, 0, 495, 496, 5, 236, 0, 0, 496, 529, 1, 0, 0, 0, 497, 498, 3, 118, 59, 0, 498, 499, 5, 220, 0, 0, 499, 504, 3, 120, 60, 0, 500, 501, 5, 206, 0, 0, 501, 503, 3, 120, 60, 0, 502, 500, 1, 0, 0, 0, 503, 506, 1, 0, 0, 0, 504, 502, 1, 0, 0, 0, 504, 505, 1, 0, 0, 0, 505, 507, 1, 0, 0, 0, 506, 504, 1, 0, 0, 0, 507, 508, 5, 236, 0, 0, 508, 529, 1, 0, 0, 0, 509, 510, 3, 118, 59, 0, 510, 511, 5, 220, 0, 0, 511, 516, 3, 70, 35, 0, 512, 513, 5, 206, 0, 0, 513, 515, 3, 70, 35, 0, 514, 512, 1, 0, 0, 0, 515, 518, 1, 0, 0, 0, 516, 514, 1, 0, 0, 0, 516, 517, 1, 0, 0, 0, 517, 519, 1, 0, 0, 0, 518, 516, 1, 0, 0, 0, 519, 520, 5, 236, 0, 0, 520, 529, 1, 0, 0, 0, 521, 522, 3, 118, 59, 0, 522, 524, 5, 220, 0, 0, 523, 525, 3, 72, 36, 0, 524, 523, 1, 0, 0, 0, 524, 525, 1, 0, 0, 0, 525, 526, 1, 0, 0, 0, 526, 527, 5, 236, 0, 0, 527, 529, 1, 0, 0, 0, 528, 481, 1, 0, 0, 0, 528, 482, 1, 0, 0, 0, 528, 497, 1, 0, 0, 0, 528, 509, 1, 0, 0, 0, 528, 521, 1, 0, 0, 0, 529, 71, 1, 0, 0, 0, 530, 535, 3, 74, 37, 0, 531, 532, 5, 206, 0, 0, 532, 534, 3, 74, 37, 0, 533, 531, 1, 0, 0, 0, 534, 537, 1, 0, 0, 0, 535, 533, 1, 0, 0, 0, 535, 536, 1, 0, 0, 0, 536, 73, 1, 0, 0, 0, 537, 535, 1, 0, 0, 0, 538, 539, 6, 37, -1, 0, 539, 541, 5, 19, 0, 0, 540, 542, 3, 74, 37, 0, 541, 540, 1, 0, 0, 0, 541, 542, 1, 0, 0, 0, 542, 548, 1, 0, 0, 0, 543, 544, 5, 186, 0, 0, 544, 545, 3, 74, 37, 0, 545, 546, 5, 163, 0, 0, 546, 547, 3, 74, 37, 0, 547, 549, 1, 0, 0, 0, 548, 543, 1, 0, 0, 0, 549, 550, 1, 0, 0, 0, 550, 548, 1, 0, 0, 0, 550, 551, 1, 0, 0, 0, 551, 554, 1, 0, 0, 0, 552, 553, 5, 52, 0, 0, 553, 555, 3, 74, 37, 0, 554, 552, 1, 0, 0, 0, 554, 555, 1, 0, 0, 0, 555, 556, 1, 0, 0, 0, 556, 557, 5, 53, 0, 0, 557, 669, 1, 0, 0, 0, 558, 559, 5, 20, 0, 0, 559, 560, 5, 220, 0, 0, 560, 561, 3, 74, 37, 0, 561, 562, 5, 10, 0, 0, 562, 563, 3, 70, 35, 0, 563, 564, 5, 236, 0, 0, 564, 669, 1, 0, 0, 0, 565, 566, 5, 36, 0, 0, 566, 669, 5, 200, 0, 0, 567, 568, 5, 59, 0, 0, 568, 569, 5, 220, 0, 0, 569, 570, 3, 110, 55, 0, 570, 571, 5, 68, 0, 0, 571, 572, 3, 74, 37, 0, 572, 573, 5, 236, 0, 0, 573, 669, 1, 0, 0, 0, 574, 575, 5, 86, 0, 0, 575, 576, 3, 74, 37, 0, 576, 577, 3, 110, 55, 0, 577, 669, 1, 0, 0, 0, 578, 579, 5, 155, 0, 0, 579, 580, 5, 220, 0, 0, 580, 581, 3, 74, 37, 0, 581, 582, 5, 68, 0, 0, 582, 585, 3, 74, 37, 0, 583, 584, 5, 65, 0, 0, 584, 586, 3, 74, 37, 0, 585, 583, 1, 0, 0, 0, 585, 586, 1, 0, 0, 0, 586, 587, 1, 0, 0, 0, 587, 588, 5, 236, 0, 0, 588, 669, 1, 0, 0, 0, 589, 590, 5, 166, 0, 0, 590, 669, 5, 200, 0, 0, 591, 592, 5, 171, 0, 0, 592, 593, 5, 220, 0, 0, 593, 594, 7, 9, 0, 0, 594, 595, 5, 200, 0, 0, 595, 596, 5, 68, 0, 0, 596, 597, 3, 74, 37, 0, 597, 598, 5, 236, 0, 0, 598, 669, 1, 0, 0, 0, 599, 600, 3, 118, 59, 0, 600, 602, 5, 220, 0, 0, 601, 603, 3, 72, 36, 0, 602, 601, 1, 0, 0, 0, 602, 603, 1, 0, 0, 0, 603, 604, 1, 0, 0, 0, 604, 605, 5, 236, 0, 0, 605, 606, 1, 0, 0, 0, 606, 607, 5, 125, 0, 0, 607, 608, 5, 220, 0, 0, 608, 609, 3, 56, 28, 0, 609, 610, 5, 236, 0, 0, 610, 669, 1, 0, 0, 0, 611, 612, 3, 118, 59, 0, 612, 614, 5, 220, 0, 0, 613, 615, 3, 72, 36, 0, 614, 613, 1, 0, 0, 0, 614, 615, 1, 0, 0, 0, 615, 616, 1, 0, 0, 0, 616, 617, 5, 236, 0, 0, 617, 618, 1, 0, 0, 0, 618, 619, 5, 125, 0, 0, 619, 620, 3, 118, 59, 0, 620, 669, 1, 0, 0, 0, 621, 627, 3, 118, 59, 0, 622, 624, 5, 220, 0, 0, 623, 625, 3, 72, 36, 0, 624, 623, 1, 0, 0, 0, 624, 625, 1, 0, 0, 0, 625, 626, 1, 0, 0, 0, 626, 628, 5, 236, 0, 0, 627, 622, 1, 0, 0, 0, 627, 628, 1, 0, 0, 0, 628, 629, 1, 0, 0, 0, 629, 631, 5, 220, 0, 0, 630, 632, 5, 49, 0, 0, 631, 630, 1, 0, 0, 0, 631, 632, 1, 0, 0, 0, 632, 634, 1, 0, 0, 0, 633, 635, 3, 76, 38, 0, 634, 633, 1, 0, 0, 0, 634, 635, 1, 0, 0, 0, 635, 636, 1, 0, 0, 0, 636, 637, 5, 236, 0, 0, 637, 669, 1, 0, 0, 0, 638, 669, 3, 82, 41, 0, 639, 669, 3, 108, 54, 0, 640, 641, 5, 208, 0, 0, 641, 669, 3, 74, 37, 18, 642, 643, 5, 115, 0, 0, 643, 669, 3, 74, 37, 12, 644, 645, 3, 98, 49, 0, 645, 646, 5, 210, 0, 0, 646, 648, 1, 0, 0, 0, 647, 644, 1, 0, 0, 0, 647, 648, 1, 0, 0, 0, 648, 649, 1, 0, 0, 0, 649, 669, 5, 202, 0, 0, 650, 651, 5, 220, 0, 0, 651, 652, 3, 2, 1, 0, 652, 653, 5, 236, 0, 0, 653, 669, 1, 0, 0, 0, 654, 655, 5, 220, 0, 0, 655, 656, 3, 74, 37, 0, 656, 657, 5, 236, 0, 0, 657, 669, 1, 0, 0, 0, 658, 659, 5, 220, 0, 0, 659, 660, 3, 72, 36, 0, 660, 661, 5, 236, 0, 0, 661, 669, 1, 0, 0, 0, 662, 664, 5, 219, 0, 0, 663, 665, 3, 72, 36, 0, 664, 663, 1, 0, 0, 0, 664, 665, 1, 0, 0, 0, 665, 666, 1, 0, 0, 0, 666, 669, 5, 235, 0, 0, 667, 669, 3, 90, 45, 0, 668, 538, 1, 0, 0, 0, 668, 558, 1, 0, 0, 0, 668, 565, 1, 0, 0, 0, 668, 567, 1, 0, 0, 0, 668, 574, 1, 0, 0, 0, 668, 578, 1, 0, 0, 0, 668, 589, 1, 0, 0, 0, 668, 591, 1, 0, 0, 0, 668, 599, 1, 0, 0, 0, 668, 611, 1, 0, 0, 0, 668, 621, 1, 0, 0, 0, 668, 638, 1, 0, 0, 0, 668, 639, 1, 0, 0, 0, 668, 640, 1, 0, 0, 0, 668, 642, 1, 0, 0, 0, 668, 647, 1, 0, 0, 0, 668, 650, 1, 0, 0, 0, 668, 654, 1, 0, 0, 0, 668, 658, 1, 0, 0, 0, 668, 662, 1, 0, 0, 0, 668, 667, 1, 0, 0, 0, 669, 763, 1, 0, 0, 0, 670, 674, 10, 17, 0, 0, 671, 675, 5, 202, 0, 0, 672, 675, 5, 238, 0, 0, 673, 675, 5, 227, 0, 0, 674, 671, 1, 0, 0, 0, 674, 672, 1, 0, 0, 0, 674, 673, 1, 0, 0, 0, 675, 676, 1, 0, 0, 0, 676, 762, 3, 74, 37, 18, 677, 681, 10, 16, 0, 0, 678, 682, 5, 228, 0, 0, 679, 682, 5, 208, 0, 0, 680, 682, 5, 207, 0, 0, 681, 678, 1, 0, 0, 0, 681, 679, 1, 0, 0, 0, 681, 680, 1, 0, 0, 0, 682, 683, 1, 0, 0, 0, 683, 762, 3, 74, 37, 17, 684, 709, 10, 15, 0, 0, 685, 710, 5, 211, 0, 0, 686, 710, 5, 212, 0, 0, 687, 710, 5, 223, 0, 0, 688, 710, 5, 221, 0, 0, 689, 710, 5, 222, 0, 0, 690, 710, 5, 213, 0, 0, 691, 710, 5, 214, 0, 0, 692, 694, 5, 115, 0, 0, 693, 692, 1, 0, 0, 0, 693, 694, 1, 0, 0, 0, 694, 695, 1, 0, 0, 0, 695, 697, 5, 80, 0, 0, 696, 698, 5, 25, 0, 0, 697, 696, 1, 0, 0, 0, 697, 698, 1, 0, 0, 0, 698, 710, 1, 0, 0, 0, 699, 701, 5, 115, 0, 0, 700, 699, 1, 0, 0, 0, 700, 701, 1, 0, 0, 0, 701, 702, 1, 0, 0, 0, 702, 710, 7, 10, 0, 0, 703, 710, 5, 232, 0, 0, 704, 710, 5, 233, 0, 0, 705, 710, 5, 225, 0, 0, 706, 710, 5, 216, 0, 0, 707, 710, 5, 217, 0, 0, 708, 710, 5, 224, 0, 0, 709, 685, 1, 0, 0, 0, 709, 686, 1, 0, 0, 0, 709, 687, 1, 0, 0, 0, 709, 688, 1, 0, 0, 0, 709, 689, 1, 0, 0, 0, 709, 690, 1, 0, 0, 0, 709, 691, 1, 0, 0, 0, 709, 693, 1, 0, 0, 0, 709, 700, 1, 0, 0, 0, 709, 703, 1, 0, 0, 0, 709, 704, 1, 0, 0, 0, 709, 705, 1, 0, 0, 0, 709, 706, 1, 0, 0, 0, 709, 707, 1, 0, 0, 0, 709, 708, 1, 0, 0, 0, 710, 711, 1, 0, 0, 0, 711, 762, 3, 74, 37, 16, 712, 713, 10, 13, 0, 0, 713, 714, 5, 226, 0, 0, 714, 762, 3, 74, 37, 14, 715, 716, 10, 11, 0, 0, 716, 717, 5, 6, 0, 0, 717, 762, 3, 74, 37, 12, 718, 719, 10, 10, 0, 0, 719, 720, 5, 121, 0, 0, 720, 762, 3, 74, 37, 11, 721, 723, 10, 9, 0, 0, 722, 724, 5, 115, 0, 0, 723, 722, 1, 0, 0, 0, 723, 724, 1, 0, 0, 0, 724, 725, 1, 0, 0, 0, 725, 726, 5, 16, 0, 0, 726, 727, 3, 74, 37, 0, 727, 728, 5, 6, 0, 0, 728, 729, 3, 74, 37, 10, 729, 762, 1, 0, 0, 0, 730, 731, 10, 8, 0, 0, 731, 732, 5, 229, 0, 0, 732, 733, 3, 74, 37, 0, 733, 734, 5, 205, 0, 0, 734, 735, 3, 74, 37, 8, 735, 762, 1, 0, 0, 0, 736, 737, 10, 21, 0, 0, 737, 738, 5, 219, 0, 0, 738, 739, 3, 74, 37, 0, 739, 740, 5, 235, 0, 0, 740, 762, 1, 0, 0, 0, 741, 742, 10, 20, 0, 0, 742, 743, 5, 210, 0, 0, 743, 762, 5, 198, 0, 0, 744, 745, 10, 19, 0, 0, 745, 746, 5, 210, 0, 0, 746, 762, 3, 118, 59, 0, 747, 748, 10, 14, 0, 0, 748, 750, 5, 88, 0, 0, 749, 751, 5, 115, 0, 0, 750, 749, 1, 0, 0, 0, 750, 751, 1, 0, 0, 0, 751, 752, 1, 0, 0, 0, 752, 762, 5, 116, 0, 0, 753, 759, 10, 7, 0, 0, 754, 760, 3, 116, 58, 0, 755, 756, 5, 10, 0, 0, 756, 760, 3, 118, 59, 0, 757, 758, 5, 10, 0, 0, 758, 760, 5, 200, 0, 0, 759, 754, 1, 0, 0, 0, 759, 755, 1, 0, 0, 0, 759, 757, 1, 0, 0, 0, 760, 762, 1, 0, 0, 0, 761, 670, 1, 0, 0, 0, 761, 677, 1, 0, 0, 0, 761, 684, 1, 0, 0, 0, 761, 712, 1, 0, 0, 0, 761, 715, 1, 0, 0, 0, 761, 718, 1, 0, 0, 0, 761, 721, 1, 0, 0, 0, 761, 730, 1, 0, 0, 0, 761, 736, 1, 0, 0, 0, 761, 741, 1, 0, 0, 0, 761, 744, 1, 0, 0, 0, 761, 747, 1, 0, 0, 0, 761, 753, 1, 0, 0, 0, 762, 765, 1, 0, 0, 0, 763, 761, 1, 0, 0, 0, 763, 764, 1, 0, 0, 0, 764, 75, 1, 0, 0, 0, 765, 763, 1, 0, 0, 0, 766, 771, 3, 78, 39, 0, 767, 768, 5, 206, 0, 0, 768, 770, 3, 78, 39, 0, 769, 767, 1, 0, 0, 0, 770, 773, 1, 0, 0, 0, 771, 769, 1, 0, 0, 0, 771, 772, 1, 0, 0, 0, 772, 77, 1, 0, 0, 0, 773, 771, 1, 0, 0, 0, 774, 777, 3, 80, 40, 0, 775, 777, 3, 74, 37, 0, 776, 774, 1, 0, 0, 0, 776, 775, 1, 0, 0, 0, 777, 79, 1, 0, 0, 0, 778, 779, 5, 220, 0, 0, 779, 784, 3, 118, 59, 0, 780, 781, 5, 206, 0, 0, 781, 783, 3, 118, 59, 0, 782, 780, 1, 0, 0, 0, 783, 786, 1, 0, 0, 0, 784, 782, 1, 0, 0, 0, 784, 785, 1, 0, 0, 0, 785, 787, 1, 0, 0, 0, 786, 784, 1, 0, 0, 0, 787, 788, 5, 236, 0, 0, 788, 798, 1, 0, 0, 0, 789, 794, 3, 118, 59, 0, 790, 791, 5, 206, 0, 0, 791, 793, 3, 118, 59, 0, 792, 790, 1, 0, 0, 0, 793, 796, 1, 0, 0, 0, 794, 792, 1, 0, 0, 0, 794, 795, 1, 0, 0, 0, 795, 798, 1, 0, 0, 0, 796, 794, 1, 0, 0, 0, 797, 778, 1, 0, 0, 0, 797, 789, 1, 0, 0, 0, 798, 799, 1, 0, 0, 0, 799, 800, 5, 201, 0, 0, 800, 801, 3, 74, 37, 0, 801, 81, 1, 0, 0, 0, 802, 803, 5, 222, 0, 0, 803, 807, 3, 118, 59, 0, 804, 806, 3, 84, 42, 0, 805, 804, 1, 0, 0, 0, 806, 809, 1, 0, 0, 0, 807, 805, 1, 0, 0, 0, 807, 808, 1, 0, 0, 0, 808, 810, 1, 0, 0, 0, 809, 807, 1, 0, 0, 0, 810, 811, 5, 238, 0, 0, 811, 812, 5, 214, 0, 0, 812, 83, 1, 0, 0, 0, 813, 814, 3, 118, 59, 0, 814, 815, 5, 212, 0, 0, 815, 816, 5, 200, 0, 0, 816, 825, 1, 0, 0, 0, 817, 818, 3, 118, 59, 0, 818, 819, 5, 212, 0, 0, 819, 820, 5, 218, 0, 0, 820, 821, 3, 74, 37, 0, 821, 822, 5, 234, 0, 0, 822, 825, 1, 0, 0, 0, 823, 825, 3, 118, 59, 0, 824, 813, 1, 0, 0, 0, 824, 817, 1, 0, 0, 0, 824, 823, 1, 0, 0, 0, 825, 85, 1, 0, 0, 0, 826, 831, 3, 88, 44, 0, 827, 828, 5, 206, 0, 0, 828, 830, 3, 88, 44, 0, 829, 827, 1, 0, 0, 0, 830, 833, 1, 0, 0, 0, 831, 829, 1, 0, 0, 0, 831, 832, 1, 0, 0, 0, 832, 87, 1, 0, 0, 0, 833, 831, 1, 0, 0, 0, 834, 835, 3, 118, 59, 0, 835, 836, 5, 10, 0, 0, 836, 837, 5, 220, 0, 0, 837, 838, 3, 2, 1, 0, 838, 839, 5, 236, 0, 0, 839, 845, 1, 0, 0, 0, 840, 841, 3, 74, 37, 0, 841, 842, 5, 10, 0, 0, 842, 843, 3, 118, 59, 0, 843, 845, 1, 0, 0, 0, 844, 834, 1, 0, 0, 0, 844, 840, 1, 0, 0, 0, 845, 89, 1, 0, 0, 0, 846, 854, 3, 122, 61, 0, 847, 848, 3, 98, 49, 0, 848, 849, 5, 210, 0, 0, 849, 851, 1, 0, 0, 0, 850, 847, 1, 0, 0, 0, 850, 851, 1, 0, 0, 0, 851, 852, 1, 0, 0, 0, 852, 854, 3, 92, 46, 0, 853, 846, 1, 0, 0, 0, 853, 850, 1, 0, 0, 0, 854, 91, 1, 0, 0, 0, 855, 860, 3, 118, 59, 0, 856, 857, 5, 210, 0, 0, 857, 859, 3, 118, 59, 0, 858, 856, 1, 0, 0, 0, 859, 862, 1, 0, 0, 0, 860, 858, 1, 0, 0, 0, 860, 861, 1, 0, 0, 0, 861, 93, 1, 0, 0, 0, 862, 860, 1, 0, 0, 0, 863, 864, 6, 47, -1, 0, 864, 873, 3, 98, 49, 0, 865, 873, 3, 96, 48, 0, 866, 867, 5, 220, 0, 0, 867, 868, 3, 2, 1, 0, 868, 869, 5, 236, 0, 0, 869, 873, 1, 0, 0, 0, 870, 873, 3, 82, 41, 0, 871, 873, 3, 122, 61, 0, 872, 863, 1, 0, 0, 0, 872, 865, 1, 0, 0, 0, 872, 866, 1, 0, 0, 0, 872, 870, 1, 0, 0, 0, 872, 871, 1, 0, 0, 0, 873, 882, 1, 0, 0, 0, 874, 878, 10, 3, 0, 0, 875, 879, 3, 116, 58, 0, 876, 877, 5, 10, 0, 0, 877, 879, 3, 118, 59, 0, 878, 875, 1, 0, 0, 0, 878, 876, 1, 0, 0, 0, 879, 881, 1, 0, 0, 0, 880, 874, 1, 0, 0, 0, 881, 884, 1, 0, 0, 0, 882, 880, 1, 0, 0, 0, 882, 883, 1, 0, 0, 0, 883, 95, 1, 0, 0, 0, 884, 882, 1, 0, 0, 0, 885, 886, 3, 118, 59, 0, 886, 888, 5, 220, 0, 0, 887, 889, 3, 100, 50, 0, 888, 887, 1, 0, 0, 0, 888, 889, 1, 0, 0, 0, 889, 890, 1, 0, 0, 0, 890, 891, 5, 236, 0, 0, 891, 97, 1, 0, 0, 0, 892, 893, 3, 102, 51, 0, 893, 894, 5, 210, 0, 0, 894, 896, 1, 0, 0, 0, 895, 892, 1, 0, 0, 0, 895, 896, 1, 0, 0, 0, 896, 897, 1, 0, 0, 0, 897, 898, 3, 118, 59, 0, 898, 99, 1, 0, 0, 0, 899, 904, 3, 74, 37, 0, 900, 901, 5, 206, 0, 0, 901, 903, 3, 74, 37, 0, 902, 900, 1, 0, 0, 0, 903, 906, 1, 0, 0, 0, 904, 902, 1, 0, 0, 0, 904, 905, 1, 0, 0, 0, 905, 101, 1, 0, 0, 0, 906, 904, 1, 0, 0, 0, 907, 908, 3, 118, 59, 0, 908, 103, 1, 0, 0, 0, 909, 918, 5, 196, 0, 0, 910, 911, 5, 210, 0, 0, 911, 918, 7, 11, 0, 0, 912, 913, 5, 198, 0, 0, 913, 915, 5, 210, 0, 0, 914, 916, 7, 11, 0, 0, 915, 914, 1, 0, 0, 0, 915, 916, 1, 0, 0, 0, 916, 918, 1, 0, 0, 0, 917, 909, 1, 0, 0, 0, 917, 910, 1, 0, 0, 0, 917, 912, 1, 0, 0, 0, 918, 105, 1, 0, 0, 0, 919, 921, 7, 12, 0, 0, 920, 919, 1, 0, 0, 0, 920, 921, 1, 0, 0, 0, 921, 928, 1, 0, 0, 0, 922, 929, 3, 104, 52, 0, 923, 929, 5, 197, 0, 0, 924, 929, 5, 198, 0, 0, 925, 929, 5, 199, 0, 0, 926, 929, 5, 82, 0, 0, 927, 929, 5, 113, 0, 0, 928, 922, 1, 0, 0, 0, 928, 923, 1, 0, 0, 0, 928, 924, 1, 0, 0, 0, 928, 925, 1, 0, 0, 0, 928, 926, 1, 0, 0, 0, 928, 927, 1, 0, 0, 0, 929, 107, 1, 0, 0, 0, 930, 934, 3, 106, 53, 0, 931, 934, 5, 200, 0, 0, 932, 934, 5, 116, 0, 0, 933, 930, 1, 0, 0, 0, 933, 931, 1, 0, 0, 0, 933, 932, 1, 0, 0, 0, 934, 109, 1, 0, 0, 0, 935, 936, 7, 13, 0, 0, 936, 111, 1, 0, 0, 0, 937, 938, 7, 14, 0, 0, 938, 113, 1, 0, 0, 0, 939, 940, 7, 15, 0, 0, 940, 115, 1, 0, 0, 0, 941, 944, 5, 195, 0, 0, 942, 944, 3, 114, 57, 0, 943, 941, 1, 0, 0, 0, 943, 942, 1, 0, 0, 0, 944, 117, 1, 0, 0, 0, 945, 949, 5, 195, 0, 0, 946, 949, 3, 110, 55, 0, 947, 949, 3, 112, 56, 0, 948, 945, 1, 0, 0, 0, 948, 946, 1, 0, 0, 0, 948, 947, 1, 0, 0, 0, 949, 119, 1, 0, 0, 0, 950, 951, 5, 200, 0, 0, 951, 952, 5, 212, 0, 0, 952, 953, 3, 106, 53, 0, 953, 121, 1, 0, 0, 0, 954, 955, 5, 218, 0, 0, 955, 956, 3, 118, 59, 0, 956, 957, 5, 234, 0, 0, 957, 123, 1, 0, 0, 0, 117, 127, 137, 145, 148, 152, 155, 159, 162, 165, 168, 171, 175, 179, 182, 185, 188, 192, 195, 204, 210, 231, 248, 265, 271, 277, 288, 290, 301, 304, 310, 318, 324, 326, 330, 335, 338, 341, 345, 349, 352, 354, 357, 361, 365, 368, 370, 372, 377, 388, 394, 401, 406, 410, 414, 420, 422, 429, 437, 440, 443, 462, 476, 492, 504, 516, 524, 528, 535, 541, 550, 554, 585, 602, 614, 624, 627, 631, 634, 647, 664, 668, 674, 681, 693, 697, 700, 709, 723, 750, 759, 761, 763, 771, 776, 784, 794, 797, 807, 824, 831, 844, 850, 853, 860, 872, 878, 882, 888, 895, 904, 915, 917, 920, 928, 933, 943, 948] \ No newline at end of file diff --git a/posthog/hogql/grammar/HogQLParser.py b/posthog/hogql/grammar/HogQLParser.py index 7f3b6995ecb50..51b23f394f4c8 100644 --- a/posthog/hogql/grammar/HogQLParser.py +++ b/posthog/hogql/grammar/HogQLParser.py @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,1,242,922,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, + 4,1,242,959,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,2,26,7, @@ -18,362 +18,376 @@ def serializedATN(): 33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,2,38,7,38,2,39,7, 39,2,40,7,40,2,41,7,41,2,42,7,42,2,43,7,43,2,44,7,44,2,45,7,45,2, 46,7,46,2,47,7,47,2,48,7,48,2,49,7,49,2,50,7,50,2,51,7,51,2,52,7, - 52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,1, - 0,1,0,3,0,121,8,0,1,0,1,0,1,1,1,1,1,1,1,1,5,1,129,8,1,10,1,12,1, - 132,9,1,1,2,1,2,1,2,1,2,1,2,3,2,139,8,2,1,3,3,3,142,8,3,1,3,1,3, - 3,3,146,8,3,1,3,3,3,149,8,3,1,3,1,3,3,3,153,8,3,1,3,3,3,156,8,3, - 1,3,3,3,159,8,3,1,3,3,3,162,8,3,1,3,3,3,165,8,3,1,3,1,3,3,3,169, - 8,3,1,3,1,3,3,3,173,8,3,1,3,3,3,176,8,3,1,3,3,3,179,8,3,1,3,3,3, - 182,8,3,1,3,1,3,3,3,186,8,3,1,3,3,3,189,8,3,1,4,1,4,1,4,1,5,1,5, - 1,5,1,5,3,5,198,8,5,1,6,1,6,1,6,1,7,3,7,204,8,7,1,7,1,7,1,7,1,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,5,8,223,8,8, - 10,8,12,8,226,9,8,1,9,1,9,1,9,1,10,1,10,1,10,1,11,1,11,1,11,1,11, - 1,11,1,11,1,11,1,11,3,11,242,8,11,1,12,1,12,1,12,1,13,1,13,1,13, - 1,13,1,14,1,14,1,14,1,14,1,15,1,15,1,15,1,15,3,15,259,8,15,1,15, - 1,15,1,15,1,15,3,15,265,8,15,1,15,1,15,1,15,1,15,3,15,271,8,15,1, - 15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,1,15,3,15,282,8,15,3,15,284, - 8,15,1,16,1,16,1,16,1,17,1,17,1,17,1,18,1,18,1,18,3,18,295,8,18, - 1,18,3,18,298,8,18,1,18,1,18,1,18,1,18,3,18,304,8,18,1,18,1,18,1, - 18,1,18,1,18,1,18,3,18,312,8,18,1,18,1,18,1,18,1,18,5,18,318,8,18, - 10,18,12,18,321,9,18,1,19,3,19,324,8,19,1,19,1,19,1,19,3,19,329, - 8,19,1,19,3,19,332,8,19,1,19,3,19,335,8,19,1,19,1,19,3,19,339,8, - 19,1,19,1,19,3,19,343,8,19,1,19,3,19,346,8,19,3,19,348,8,19,1,19, - 3,19,351,8,19,1,19,1,19,3,19,355,8,19,1,19,1,19,3,19,359,8,19,1, - 19,3,19,362,8,19,3,19,364,8,19,3,19,366,8,19,1,20,1,20,1,20,3,20, - 371,8,20,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,1,21,3,21,382,8, - 21,1,22,1,22,1,22,1,22,3,22,388,8,22,1,23,1,23,1,23,5,23,393,8,23, - 10,23,12,23,396,9,23,1,24,1,24,3,24,400,8,24,1,24,1,24,3,24,404, - 8,24,1,24,1,24,3,24,408,8,24,1,25,1,25,1,25,1,25,3,25,414,8,25,3, - 25,416,8,25,1,26,1,26,1,26,5,26,421,8,26,10,26,12,26,424,9,26,1, - 27,1,27,1,27,1,27,1,28,3,28,431,8,28,1,28,3,28,434,8,28,1,28,3,28, - 437,8,28,1,29,1,29,1,29,1,29,1,30,1,30,1,30,1,30,1,31,1,31,1,31, - 1,32,1,32,1,32,1,32,1,32,1,32,3,32,456,8,32,1,33,1,33,1,33,1,33, - 1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,3,33,470,8,33,1,34,1,34, - 1,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,484,8,35, - 10,35,12,35,487,9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35,496, - 8,35,10,35,12,35,499,9,35,1,35,1,35,1,35,1,35,1,35,1,35,1,35,5,35, - 508,8,35,10,35,12,35,511,9,35,1,35,1,35,1,35,1,35,1,35,3,35,518, - 8,35,1,35,1,35,3,35,522,8,35,1,36,1,36,1,36,5,36,527,8,36,10,36, - 12,36,530,9,36,1,37,1,37,1,37,3,37,535,8,37,1,37,1,37,1,37,1,37, - 1,37,4,37,542,8,37,11,37,12,37,543,1,37,1,37,3,37,548,8,37,1,37, + 52,2,53,7,53,2,54,7,54,2,55,7,55,2,56,7,56,2,57,7,57,2,58,7,58,2, + 59,7,59,2,60,7,60,2,61,7,61,1,0,1,0,1,0,3,0,128,8,0,1,0,1,0,1,1, + 1,1,1,1,1,1,5,1,136,8,1,10,1,12,1,139,9,1,1,2,1,2,1,2,1,2,1,2,3, + 2,146,8,2,1,3,3,3,149,8,3,1,3,1,3,3,3,153,8,3,1,3,3,3,156,8,3,1, + 3,1,3,3,3,160,8,3,1,3,3,3,163,8,3,1,3,3,3,166,8,3,1,3,3,3,169,8, + 3,1,3,3,3,172,8,3,1,3,1,3,3,3,176,8,3,1,3,1,3,3,3,180,8,3,1,3,3, + 3,183,8,3,1,3,3,3,186,8,3,1,3,3,3,189,8,3,1,3,1,3,3,3,193,8,3,1, + 3,3,3,196,8,3,1,4,1,4,1,4,1,5,1,5,1,5,1,5,3,5,205,8,5,1,6,1,6,1, + 6,1,7,3,7,211,8,7,1,7,1,7,1,7,1,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,5,8,230,8,8,10,8,12,8,233,9,8,1,9,1,9,1,9, + 1,10,1,10,1,10,1,11,1,11,1,11,1,11,1,11,1,11,1,11,1,11,3,11,249, + 8,11,1,12,1,12,1,12,1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,14,1,15, + 1,15,1,15,1,15,3,15,266,8,15,1,15,1,15,1,15,1,15,3,15,272,8,15,1, + 15,1,15,1,15,1,15,3,15,278,8,15,1,15,1,15,1,15,1,15,1,15,1,15,1, + 15,1,15,1,15,3,15,289,8,15,3,15,291,8,15,1,16,1,16,1,16,1,17,1,17, + 1,17,1,18,1,18,1,18,3,18,302,8,18,1,18,3,18,305,8,18,1,18,1,18,1, + 18,1,18,3,18,311,8,18,1,18,1,18,1,18,1,18,1,18,1,18,3,18,319,8,18, + 1,18,1,18,1,18,1,18,5,18,325,8,18,10,18,12,18,328,9,18,1,19,3,19, + 331,8,19,1,19,1,19,1,19,3,19,336,8,19,1,19,3,19,339,8,19,1,19,3, + 19,342,8,19,1,19,1,19,3,19,346,8,19,1,19,1,19,3,19,350,8,19,1,19, + 3,19,353,8,19,3,19,355,8,19,1,19,3,19,358,8,19,1,19,1,19,3,19,362, + 8,19,1,19,1,19,3,19,366,8,19,1,19,3,19,369,8,19,3,19,371,8,19,3, + 19,373,8,19,1,20,1,20,1,20,3,20,378,8,20,1,21,1,21,1,21,1,21,1,21, + 1,21,1,21,1,21,1,21,3,21,389,8,21,1,22,1,22,1,22,1,22,3,22,395,8, + 22,1,23,1,23,1,23,5,23,400,8,23,10,23,12,23,403,9,23,1,24,1,24,3, + 24,407,8,24,1,24,1,24,3,24,411,8,24,1,24,1,24,3,24,415,8,24,1,25, + 1,25,1,25,1,25,3,25,421,8,25,3,25,423,8,25,1,26,1,26,1,26,5,26,428, + 8,26,10,26,12,26,431,9,26,1,27,1,27,1,27,1,27,1,28,3,28,438,8,28, + 1,28,3,28,441,8,28,1,28,3,28,444,8,28,1,29,1,29,1,29,1,29,1,30,1, + 30,1,30,1,30,1,31,1,31,1,31,1,32,1,32,1,32,1,32,1,32,1,32,3,32,463, + 8,32,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33,1,33, + 3,33,477,8,33,1,34,1,34,1,34,1,35,1,35,1,35,1,35,1,35,1,35,1,35, + 1,35,1,35,5,35,491,8,35,10,35,12,35,494,9,35,1,35,1,35,1,35,1,35, + 1,35,1,35,1,35,5,35,503,8,35,10,35,12,35,506,9,35,1,35,1,35,1,35, + 1,35,1,35,1,35,1,35,5,35,515,8,35,10,35,12,35,518,9,35,1,35,1,35, + 1,35,1,35,1,35,3,35,525,8,35,1,35,1,35,3,35,529,8,35,1,36,1,36,1, + 36,5,36,534,8,36,10,36,12,36,537,9,36,1,37,1,37,1,37,3,37,542,8, + 37,1,37,1,37,1,37,1,37,1,37,4,37,549,8,37,11,37,12,37,550,1,37,1, + 37,3,37,555,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,586,8,37,1,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,603, + 8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,615, + 8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,625,8,37,1,37, + 3,37,628,8,37,1,37,1,37,3,37,632,8,37,1,37,3,37,635,8,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,648,8,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, + 37,1,37,3,37,665,8,37,1,37,1,37,3,37,669,8,37,1,37,1,37,1,37,1,37, + 3,37,675,8,37,1,37,1,37,1,37,1,37,1,37,3,37,682,8,37,1,37,1,37,1, + 37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,694,8,37,1,37,1,37,3, + 37,698,8,37,1,37,3,37,701,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 3,37,710,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,1,37,3,37,724,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,3,37,579,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,596,8,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,608,8,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,3,37,618,8,37,1,37,3,37,621,8,37,1,37,1, - 37,3,37,625,8,37,1,37,3,37,628,8,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,3,37,640,8,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,657,8,37,1,37, - 1,37,3,37,661,8,37,1,37,1,37,1,37,1,37,3,37,667,8,37,1,37,1,37,1, - 37,1,37,1,37,3,37,674,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1, - 37,1,37,1,37,3,37,686,8,37,1,37,1,37,3,37,690,8,37,1,37,3,37,693, - 8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,702,8,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,716,8,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37, - 1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37, - 743,8,37,1,37,1,37,1,37,1,37,1,37,1,37,1,37,3,37,752,8,37,5,37,754, - 8,37,10,37,12,37,757,9,37,1,38,1,38,1,38,5,38,762,8,38,10,38,12, - 38,765,9,38,1,39,1,39,3,39,769,8,39,1,40,1,40,1,40,1,40,5,40,775, - 8,40,10,40,12,40,778,9,40,1,40,1,40,1,40,1,40,1,40,5,40,785,8,40, - 10,40,12,40,788,9,40,3,40,790,8,40,1,40,1,40,1,40,1,41,1,41,1,41, - 5,41,798,8,41,10,41,12,41,801,9,41,1,42,1,42,1,42,1,42,1,42,1,42, - 1,42,1,42,1,42,1,42,3,42,813,8,42,1,43,1,43,1,43,1,43,3,43,819,8, - 43,1,43,3,43,822,8,43,1,44,1,44,1,44,5,44,827,8,44,10,44,12,44,830, - 9,44,1,45,1,45,1,45,1,45,1,45,1,45,1,45,1,45,3,45,840,8,45,1,45, - 1,45,1,45,1,45,3,45,846,8,45,5,45,848,8,45,10,45,12,45,851,9,45, - 1,46,1,46,1,46,3,46,856,8,46,1,46,1,46,1,47,1,47,1,47,3,47,863,8, - 47,1,47,1,47,1,48,1,48,1,48,5,48,870,8,48,10,48,12,48,873,9,48,1, - 49,1,49,1,50,1,50,1,50,1,50,1,50,1,50,3,50,883,8,50,3,50,885,8,50, - 1,51,3,51,888,8,51,1,51,1,51,1,51,1,51,1,51,1,51,3,51,896,8,51,1, - 52,1,52,1,52,3,52,901,8,52,1,53,1,53,1,54,1,54,1,55,1,55,1,56,1, - 56,3,56,911,8,56,1,57,1,57,1,57,3,57,916,8,57,1,58,1,58,1,58,1,58, - 1,58,0,3,36,74,90,59,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30, + 1,37,1,37,1,37,1,37,3,37,751,8,37,1,37,1,37,1,37,1,37,1,37,1,37, + 1,37,3,37,760,8,37,5,37,762,8,37,10,37,12,37,765,9,37,1,38,1,38, + 1,38,5,38,770,8,38,10,38,12,38,773,9,38,1,39,1,39,3,39,777,8,39, + 1,40,1,40,1,40,1,40,5,40,783,8,40,10,40,12,40,786,9,40,1,40,1,40, + 1,40,1,40,1,40,5,40,793,8,40,10,40,12,40,796,9,40,3,40,798,8,40, + 1,40,1,40,1,40,1,41,1,41,1,41,5,41,806,8,41,10,41,12,41,809,9,41, + 1,41,1,41,1,41,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42,1,42, + 1,42,3,42,825,8,42,1,43,1,43,1,43,5,43,830,8,43,10,43,12,43,833, + 9,43,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,1,44,3,44,845, + 8,44,1,45,1,45,1,45,1,45,3,45,851,8,45,1,45,3,45,854,8,45,1,46,1, + 46,1,46,5,46,859,8,46,10,46,12,46,862,9,46,1,47,1,47,1,47,1,47,1, + 47,1,47,1,47,1,47,1,47,3,47,873,8,47,1,47,1,47,1,47,1,47,3,47,879, + 8,47,5,47,881,8,47,10,47,12,47,884,9,47,1,48,1,48,1,48,3,48,889, + 8,48,1,48,1,48,1,49,1,49,1,49,3,49,896,8,49,1,49,1,49,1,50,1,50, + 1,50,5,50,903,8,50,10,50,12,50,906,9,50,1,51,1,51,1,52,1,52,1,52, + 1,52,1,52,1,52,3,52,916,8,52,3,52,918,8,52,1,53,3,53,921,8,53,1, + 53,1,53,1,53,1,53,1,53,1,53,3,53,929,8,53,1,54,1,54,1,54,3,54,934, + 8,54,1,55,1,55,1,56,1,56,1,57,1,57,1,58,1,58,3,58,944,8,58,1,59, + 1,59,1,59,3,59,949,8,59,1,60,1,60,1,60,1,60,1,61,1,61,1,61,1,61, + 1,61,0,3,36,74,94,62,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,52,54,56,58,60,62,64,66,68,70,72,74, 76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112, - 114,116,0,16,2,0,32,32,141,141,2,0,84,84,96,96,3,0,4,4,8,8,12,12, - 4,0,4,4,7,8,12,12,147,147,2,0,96,96,140,140,2,0,4,4,8,8,2,0,11,11, - 42,43,2,0,62,62,93,93,2,0,133,133,143,143,3,0,17,17,95,95,170,170, - 2,0,79,79,98,98,1,0,196,197,2,0,208,208,228,228,8,0,37,37,76,76, - 108,108,110,110,132,132,145,145,185,185,190,190,13,0,2,24,26,36, - 38,75,77,81,83,107,109,109,111,112,114,115,117,130,133,144,146,184, - 186,189,191,192,4,0,36,36,62,62,77,77,91,91,1043,0,120,1,0,0,0,2, - 124,1,0,0,0,4,138,1,0,0,0,6,141,1,0,0,0,8,190,1,0,0,0,10,193,1,0, - 0,0,12,199,1,0,0,0,14,203,1,0,0,0,16,209,1,0,0,0,18,227,1,0,0,0, - 20,230,1,0,0,0,22,233,1,0,0,0,24,243,1,0,0,0,26,246,1,0,0,0,28,250, - 1,0,0,0,30,283,1,0,0,0,32,285,1,0,0,0,34,288,1,0,0,0,36,303,1,0, - 0,0,38,365,1,0,0,0,40,370,1,0,0,0,42,381,1,0,0,0,44,383,1,0,0,0, - 46,389,1,0,0,0,48,397,1,0,0,0,50,415,1,0,0,0,52,417,1,0,0,0,54,425, - 1,0,0,0,56,430,1,0,0,0,58,438,1,0,0,0,60,442,1,0,0,0,62,446,1,0, - 0,0,64,455,1,0,0,0,66,469,1,0,0,0,68,471,1,0,0,0,70,521,1,0,0,0, - 72,523,1,0,0,0,74,660,1,0,0,0,76,758,1,0,0,0,78,768,1,0,0,0,80,789, - 1,0,0,0,82,794,1,0,0,0,84,812,1,0,0,0,86,821,1,0,0,0,88,823,1,0, - 0,0,90,839,1,0,0,0,92,852,1,0,0,0,94,862,1,0,0,0,96,866,1,0,0,0, - 98,874,1,0,0,0,100,884,1,0,0,0,102,887,1,0,0,0,104,900,1,0,0,0,106, - 902,1,0,0,0,108,904,1,0,0,0,110,906,1,0,0,0,112,910,1,0,0,0,114, - 915,1,0,0,0,116,917,1,0,0,0,118,121,3,2,1,0,119,121,3,6,3,0,120, - 118,1,0,0,0,120,119,1,0,0,0,121,122,1,0,0,0,122,123,5,0,0,1,123, - 1,1,0,0,0,124,130,3,4,2,0,125,126,5,176,0,0,126,127,5,4,0,0,127, - 129,3,4,2,0,128,125,1,0,0,0,129,132,1,0,0,0,130,128,1,0,0,0,130, - 131,1,0,0,0,131,3,1,0,0,0,132,130,1,0,0,0,133,139,3,6,3,0,134,135, - 5,220,0,0,135,136,3,2,1,0,136,137,5,236,0,0,137,139,1,0,0,0,138, - 133,1,0,0,0,138,134,1,0,0,0,139,5,1,0,0,0,140,142,3,8,4,0,141,140, - 1,0,0,0,141,142,1,0,0,0,142,143,1,0,0,0,143,145,5,146,0,0,144,146, - 5,49,0,0,145,144,1,0,0,0,145,146,1,0,0,0,146,148,1,0,0,0,147,149, - 3,10,5,0,148,147,1,0,0,0,148,149,1,0,0,0,149,150,1,0,0,0,150,152, - 3,72,36,0,151,153,3,12,6,0,152,151,1,0,0,0,152,153,1,0,0,0,153,155, - 1,0,0,0,154,156,3,14,7,0,155,154,1,0,0,0,155,156,1,0,0,0,156,158, - 1,0,0,0,157,159,3,18,9,0,158,157,1,0,0,0,158,159,1,0,0,0,159,161, - 1,0,0,0,160,162,3,20,10,0,161,160,1,0,0,0,161,162,1,0,0,0,162,164, - 1,0,0,0,163,165,3,22,11,0,164,163,1,0,0,0,164,165,1,0,0,0,165,168, - 1,0,0,0,166,167,5,189,0,0,167,169,7,0,0,0,168,166,1,0,0,0,168,169, - 1,0,0,0,169,172,1,0,0,0,170,171,5,189,0,0,171,173,5,169,0,0,172, - 170,1,0,0,0,172,173,1,0,0,0,173,175,1,0,0,0,174,176,3,24,12,0,175, - 174,1,0,0,0,175,176,1,0,0,0,176,178,1,0,0,0,177,179,3,16,8,0,178, - 177,1,0,0,0,178,179,1,0,0,0,179,181,1,0,0,0,180,182,3,26,13,0,181, - 180,1,0,0,0,181,182,1,0,0,0,182,185,1,0,0,0,183,186,3,30,15,0,184, - 186,3,32,16,0,185,183,1,0,0,0,185,184,1,0,0,0,185,186,1,0,0,0,186, - 188,1,0,0,0,187,189,3,34,17,0,188,187,1,0,0,0,188,189,1,0,0,0,189, - 7,1,0,0,0,190,191,5,189,0,0,191,192,3,82,41,0,192,9,1,0,0,0,193, - 194,5,168,0,0,194,197,5,197,0,0,195,196,5,189,0,0,196,198,5,164, - 0,0,197,195,1,0,0,0,197,198,1,0,0,0,198,11,1,0,0,0,199,200,5,68, - 0,0,200,201,3,36,18,0,201,13,1,0,0,0,202,204,7,1,0,0,203,202,1,0, - 0,0,203,204,1,0,0,0,204,205,1,0,0,0,205,206,5,9,0,0,206,207,5,90, - 0,0,207,208,3,72,36,0,208,15,1,0,0,0,209,210,5,188,0,0,210,211,3, - 114,57,0,211,212,5,10,0,0,212,213,5,220,0,0,213,214,3,56,28,0,214, - 224,5,236,0,0,215,216,5,206,0,0,216,217,3,114,57,0,217,218,5,10, - 0,0,218,219,5,220,0,0,219,220,3,56,28,0,220,221,5,236,0,0,221,223, - 1,0,0,0,222,215,1,0,0,0,223,226,1,0,0,0,224,222,1,0,0,0,224,225, - 1,0,0,0,225,17,1,0,0,0,226,224,1,0,0,0,227,228,5,129,0,0,228,229, - 3,74,37,0,229,19,1,0,0,0,230,231,5,187,0,0,231,232,3,74,37,0,232, - 21,1,0,0,0,233,234,5,73,0,0,234,241,5,18,0,0,235,236,7,0,0,0,236, - 237,5,220,0,0,237,238,3,72,36,0,238,239,5,236,0,0,239,242,1,0,0, - 0,240,242,3,72,36,0,241,235,1,0,0,0,241,240,1,0,0,0,242,23,1,0,0, - 0,243,244,5,74,0,0,244,245,3,74,37,0,245,25,1,0,0,0,246,247,5,122, - 0,0,247,248,5,18,0,0,248,249,3,46,23,0,249,27,1,0,0,0,250,251,5, - 122,0,0,251,252,5,18,0,0,252,253,3,72,36,0,253,29,1,0,0,0,254,255, - 5,99,0,0,255,258,3,74,37,0,256,257,5,206,0,0,257,259,3,74,37,0,258, - 256,1,0,0,0,258,259,1,0,0,0,259,264,1,0,0,0,260,261,5,189,0,0,261, - 265,5,164,0,0,262,263,5,18,0,0,263,265,3,72,36,0,264,260,1,0,0,0, - 264,262,1,0,0,0,264,265,1,0,0,0,265,284,1,0,0,0,266,267,5,99,0,0, - 267,270,3,74,37,0,268,269,5,189,0,0,269,271,5,164,0,0,270,268,1, - 0,0,0,270,271,1,0,0,0,271,272,1,0,0,0,272,273,5,118,0,0,273,274, - 3,74,37,0,274,284,1,0,0,0,275,276,5,99,0,0,276,277,3,74,37,0,277, - 278,5,118,0,0,278,281,3,74,37,0,279,280,5,18,0,0,280,282,3,72,36, - 0,281,279,1,0,0,0,281,282,1,0,0,0,282,284,1,0,0,0,283,254,1,0,0, - 0,283,266,1,0,0,0,283,275,1,0,0,0,284,31,1,0,0,0,285,286,5,118,0, - 0,286,287,3,74,37,0,287,33,1,0,0,0,288,289,5,150,0,0,289,290,3,52, - 26,0,290,35,1,0,0,0,291,292,6,18,-1,0,292,294,3,90,45,0,293,295, - 5,61,0,0,294,293,1,0,0,0,294,295,1,0,0,0,295,297,1,0,0,0,296,298, - 3,44,22,0,297,296,1,0,0,0,297,298,1,0,0,0,298,304,1,0,0,0,299,300, - 5,220,0,0,300,301,3,36,18,0,301,302,5,236,0,0,302,304,1,0,0,0,303, - 291,1,0,0,0,303,299,1,0,0,0,304,319,1,0,0,0,305,306,10,3,0,0,306, - 307,3,40,20,0,307,308,3,36,18,4,308,318,1,0,0,0,309,311,10,4,0,0, - 310,312,3,38,19,0,311,310,1,0,0,0,311,312,1,0,0,0,312,313,1,0,0, - 0,313,314,5,90,0,0,314,315,3,36,18,0,315,316,3,42,21,0,316,318,1, - 0,0,0,317,305,1,0,0,0,317,309,1,0,0,0,318,321,1,0,0,0,319,317,1, - 0,0,0,319,320,1,0,0,0,320,37,1,0,0,0,321,319,1,0,0,0,322,324,7,2, - 0,0,323,322,1,0,0,0,323,324,1,0,0,0,324,325,1,0,0,0,325,332,5,84, - 0,0,326,328,5,84,0,0,327,329,7,2,0,0,328,327,1,0,0,0,328,329,1,0, - 0,0,329,332,1,0,0,0,330,332,7,2,0,0,331,323,1,0,0,0,331,326,1,0, - 0,0,331,330,1,0,0,0,332,366,1,0,0,0,333,335,7,3,0,0,334,333,1,0, - 0,0,334,335,1,0,0,0,335,336,1,0,0,0,336,338,7,4,0,0,337,339,5,123, - 0,0,338,337,1,0,0,0,338,339,1,0,0,0,339,348,1,0,0,0,340,342,7,4, - 0,0,341,343,5,123,0,0,342,341,1,0,0,0,342,343,1,0,0,0,343,345,1, - 0,0,0,344,346,7,3,0,0,345,344,1,0,0,0,345,346,1,0,0,0,346,348,1, - 0,0,0,347,334,1,0,0,0,347,340,1,0,0,0,348,366,1,0,0,0,349,351,7, - 5,0,0,350,349,1,0,0,0,350,351,1,0,0,0,351,352,1,0,0,0,352,354,5, - 69,0,0,353,355,5,123,0,0,354,353,1,0,0,0,354,355,1,0,0,0,355,364, - 1,0,0,0,356,358,5,69,0,0,357,359,5,123,0,0,358,357,1,0,0,0,358,359, - 1,0,0,0,359,361,1,0,0,0,360,362,7,5,0,0,361,360,1,0,0,0,361,362, - 1,0,0,0,362,364,1,0,0,0,363,350,1,0,0,0,363,356,1,0,0,0,364,366, - 1,0,0,0,365,331,1,0,0,0,365,347,1,0,0,0,365,363,1,0,0,0,366,39,1, - 0,0,0,367,368,5,31,0,0,368,371,5,90,0,0,369,371,5,206,0,0,370,367, - 1,0,0,0,370,369,1,0,0,0,371,41,1,0,0,0,372,373,5,119,0,0,373,382, - 3,72,36,0,374,375,5,179,0,0,375,376,5,220,0,0,376,377,3,72,36,0, - 377,378,5,236,0,0,378,382,1,0,0,0,379,380,5,179,0,0,380,382,3,72, - 36,0,381,372,1,0,0,0,381,374,1,0,0,0,381,379,1,0,0,0,382,43,1,0, - 0,0,383,384,5,144,0,0,384,387,3,50,25,0,385,386,5,118,0,0,386,388, - 3,50,25,0,387,385,1,0,0,0,387,388,1,0,0,0,388,45,1,0,0,0,389,394, - 3,48,24,0,390,391,5,206,0,0,391,393,3,48,24,0,392,390,1,0,0,0,393, - 396,1,0,0,0,394,392,1,0,0,0,394,395,1,0,0,0,395,47,1,0,0,0,396,394, - 1,0,0,0,397,399,3,74,37,0,398,400,7,6,0,0,399,398,1,0,0,0,399,400, - 1,0,0,0,400,403,1,0,0,0,401,402,5,117,0,0,402,404,7,7,0,0,403,401, - 1,0,0,0,403,404,1,0,0,0,404,407,1,0,0,0,405,406,5,26,0,0,406,408, - 5,199,0,0,407,405,1,0,0,0,407,408,1,0,0,0,408,49,1,0,0,0,409,416, - 5,200,0,0,410,413,3,102,51,0,411,412,5,238,0,0,412,414,3,102,51, - 0,413,411,1,0,0,0,413,414,1,0,0,0,414,416,1,0,0,0,415,409,1,0,0, - 0,415,410,1,0,0,0,416,51,1,0,0,0,417,422,3,54,27,0,418,419,5,206, - 0,0,419,421,3,54,27,0,420,418,1,0,0,0,421,424,1,0,0,0,422,420,1, - 0,0,0,422,423,1,0,0,0,423,53,1,0,0,0,424,422,1,0,0,0,425,426,3,114, - 57,0,426,427,5,212,0,0,427,428,3,104,52,0,428,55,1,0,0,0,429,431, - 3,58,29,0,430,429,1,0,0,0,430,431,1,0,0,0,431,433,1,0,0,0,432,434, - 3,60,30,0,433,432,1,0,0,0,433,434,1,0,0,0,434,436,1,0,0,0,435,437, - 3,62,31,0,436,435,1,0,0,0,436,437,1,0,0,0,437,57,1,0,0,0,438,439, - 5,126,0,0,439,440,5,18,0,0,440,441,3,72,36,0,441,59,1,0,0,0,442, - 443,5,122,0,0,443,444,5,18,0,0,444,445,3,46,23,0,445,61,1,0,0,0, - 446,447,7,8,0,0,447,448,3,64,32,0,448,63,1,0,0,0,449,456,3,66,33, - 0,450,451,5,16,0,0,451,452,3,66,33,0,452,453,5,6,0,0,453,454,3,66, - 33,0,454,456,1,0,0,0,455,449,1,0,0,0,455,450,1,0,0,0,456,65,1,0, - 0,0,457,458,5,33,0,0,458,470,5,142,0,0,459,460,5,175,0,0,460,470, - 5,128,0,0,461,462,5,175,0,0,462,470,5,64,0,0,463,464,3,102,51,0, - 464,465,5,128,0,0,465,470,1,0,0,0,466,467,3,102,51,0,467,468,5,64, - 0,0,468,470,1,0,0,0,469,457,1,0,0,0,469,459,1,0,0,0,469,461,1,0, - 0,0,469,463,1,0,0,0,469,466,1,0,0,0,470,67,1,0,0,0,471,472,3,74, - 37,0,472,473,5,0,0,1,473,69,1,0,0,0,474,522,3,114,57,0,475,476,3, - 114,57,0,476,477,5,220,0,0,477,478,3,114,57,0,478,485,3,70,35,0, - 479,480,5,206,0,0,480,481,3,114,57,0,481,482,3,70,35,0,482,484,1, - 0,0,0,483,479,1,0,0,0,484,487,1,0,0,0,485,483,1,0,0,0,485,486,1, - 0,0,0,486,488,1,0,0,0,487,485,1,0,0,0,488,489,5,236,0,0,489,522, - 1,0,0,0,490,491,3,114,57,0,491,492,5,220,0,0,492,497,3,116,58,0, - 493,494,5,206,0,0,494,496,3,116,58,0,495,493,1,0,0,0,496,499,1,0, - 0,0,497,495,1,0,0,0,497,498,1,0,0,0,498,500,1,0,0,0,499,497,1,0, - 0,0,500,501,5,236,0,0,501,522,1,0,0,0,502,503,3,114,57,0,503,504, - 5,220,0,0,504,509,3,70,35,0,505,506,5,206,0,0,506,508,3,70,35,0, - 507,505,1,0,0,0,508,511,1,0,0,0,509,507,1,0,0,0,509,510,1,0,0,0, - 510,512,1,0,0,0,511,509,1,0,0,0,512,513,5,236,0,0,513,522,1,0,0, - 0,514,515,3,114,57,0,515,517,5,220,0,0,516,518,3,72,36,0,517,516, - 1,0,0,0,517,518,1,0,0,0,518,519,1,0,0,0,519,520,5,236,0,0,520,522, - 1,0,0,0,521,474,1,0,0,0,521,475,1,0,0,0,521,490,1,0,0,0,521,502, - 1,0,0,0,521,514,1,0,0,0,522,71,1,0,0,0,523,528,3,74,37,0,524,525, - 5,206,0,0,525,527,3,74,37,0,526,524,1,0,0,0,527,530,1,0,0,0,528, - 526,1,0,0,0,528,529,1,0,0,0,529,73,1,0,0,0,530,528,1,0,0,0,531,532, - 6,37,-1,0,532,534,5,19,0,0,533,535,3,74,37,0,534,533,1,0,0,0,534, - 535,1,0,0,0,535,541,1,0,0,0,536,537,5,186,0,0,537,538,3,74,37,0, - 538,539,5,163,0,0,539,540,3,74,37,0,540,542,1,0,0,0,541,536,1,0, - 0,0,542,543,1,0,0,0,543,541,1,0,0,0,543,544,1,0,0,0,544,547,1,0, - 0,0,545,546,5,52,0,0,546,548,3,74,37,0,547,545,1,0,0,0,547,548,1, - 0,0,0,548,549,1,0,0,0,549,550,5,53,0,0,550,661,1,0,0,0,551,552,5, - 20,0,0,552,553,5,220,0,0,553,554,3,74,37,0,554,555,5,10,0,0,555, - 556,3,70,35,0,556,557,5,236,0,0,557,661,1,0,0,0,558,559,5,36,0,0, - 559,661,5,199,0,0,560,561,5,59,0,0,561,562,5,220,0,0,562,563,3,106, - 53,0,563,564,5,68,0,0,564,565,3,74,37,0,565,566,5,236,0,0,566,661, - 1,0,0,0,567,568,5,86,0,0,568,569,3,74,37,0,569,570,3,106,53,0,570, - 661,1,0,0,0,571,572,5,155,0,0,572,573,5,220,0,0,573,574,3,74,37, - 0,574,575,5,68,0,0,575,578,3,74,37,0,576,577,5,65,0,0,577,579,3, - 74,37,0,578,576,1,0,0,0,578,579,1,0,0,0,579,580,1,0,0,0,580,581, - 5,236,0,0,581,661,1,0,0,0,582,583,5,166,0,0,583,661,5,199,0,0,584, - 585,5,171,0,0,585,586,5,220,0,0,586,587,7,9,0,0,587,588,5,199,0, - 0,588,589,5,68,0,0,589,590,3,74,37,0,590,591,5,236,0,0,591,661,1, - 0,0,0,592,593,3,114,57,0,593,595,5,220,0,0,594,596,3,72,36,0,595, - 594,1,0,0,0,595,596,1,0,0,0,596,597,1,0,0,0,597,598,5,236,0,0,598, - 599,1,0,0,0,599,600,5,125,0,0,600,601,5,220,0,0,601,602,3,56,28, - 0,602,603,5,236,0,0,603,661,1,0,0,0,604,605,3,114,57,0,605,607,5, - 220,0,0,606,608,3,72,36,0,607,606,1,0,0,0,607,608,1,0,0,0,608,609, - 1,0,0,0,609,610,5,236,0,0,610,611,1,0,0,0,611,612,5,125,0,0,612, - 613,3,114,57,0,613,661,1,0,0,0,614,620,3,114,57,0,615,617,5,220, - 0,0,616,618,3,72,36,0,617,616,1,0,0,0,617,618,1,0,0,0,618,619,1, - 0,0,0,619,621,5,236,0,0,620,615,1,0,0,0,620,621,1,0,0,0,621,622, - 1,0,0,0,622,624,5,220,0,0,623,625,5,49,0,0,624,623,1,0,0,0,624,625, - 1,0,0,0,625,627,1,0,0,0,626,628,3,76,38,0,627,626,1,0,0,0,627,628, - 1,0,0,0,628,629,1,0,0,0,629,630,5,236,0,0,630,661,1,0,0,0,631,661, - 3,104,52,0,632,633,5,208,0,0,633,661,3,74,37,18,634,635,5,115,0, - 0,635,661,3,74,37,12,636,637,3,94,47,0,637,638,5,210,0,0,638,640, - 1,0,0,0,639,636,1,0,0,0,639,640,1,0,0,0,640,641,1,0,0,0,641,661, - 5,202,0,0,642,643,5,220,0,0,643,644,3,2,1,0,644,645,5,236,0,0,645, - 661,1,0,0,0,646,647,5,220,0,0,647,648,3,74,37,0,648,649,5,236,0, - 0,649,661,1,0,0,0,650,651,5,220,0,0,651,652,3,72,36,0,652,653,5, - 236,0,0,653,661,1,0,0,0,654,656,5,219,0,0,655,657,3,72,36,0,656, - 655,1,0,0,0,656,657,1,0,0,0,657,658,1,0,0,0,658,661,5,235,0,0,659, - 661,3,86,43,0,660,531,1,0,0,0,660,551,1,0,0,0,660,558,1,0,0,0,660, - 560,1,0,0,0,660,567,1,0,0,0,660,571,1,0,0,0,660,582,1,0,0,0,660, - 584,1,0,0,0,660,592,1,0,0,0,660,604,1,0,0,0,660,614,1,0,0,0,660, - 631,1,0,0,0,660,632,1,0,0,0,660,634,1,0,0,0,660,639,1,0,0,0,660, - 642,1,0,0,0,660,646,1,0,0,0,660,650,1,0,0,0,660,654,1,0,0,0,660, - 659,1,0,0,0,661,755,1,0,0,0,662,666,10,17,0,0,663,667,5,202,0,0, - 664,667,5,238,0,0,665,667,5,227,0,0,666,663,1,0,0,0,666,664,1,0, - 0,0,666,665,1,0,0,0,667,668,1,0,0,0,668,754,3,74,37,18,669,673,10, - 16,0,0,670,674,5,228,0,0,671,674,5,208,0,0,672,674,5,207,0,0,673, - 670,1,0,0,0,673,671,1,0,0,0,673,672,1,0,0,0,674,675,1,0,0,0,675, - 754,3,74,37,17,676,701,10,15,0,0,677,702,5,211,0,0,678,702,5,212, - 0,0,679,702,5,223,0,0,680,702,5,221,0,0,681,702,5,222,0,0,682,702, - 5,213,0,0,683,702,5,214,0,0,684,686,5,115,0,0,685,684,1,0,0,0,685, - 686,1,0,0,0,686,687,1,0,0,0,687,689,5,80,0,0,688,690,5,25,0,0,689, - 688,1,0,0,0,689,690,1,0,0,0,690,702,1,0,0,0,691,693,5,115,0,0,692, - 691,1,0,0,0,692,693,1,0,0,0,693,694,1,0,0,0,694,702,7,10,0,0,695, - 702,5,232,0,0,696,702,5,233,0,0,697,702,5,225,0,0,698,702,5,216, - 0,0,699,702,5,217,0,0,700,702,5,224,0,0,701,677,1,0,0,0,701,678, - 1,0,0,0,701,679,1,0,0,0,701,680,1,0,0,0,701,681,1,0,0,0,701,682, - 1,0,0,0,701,683,1,0,0,0,701,685,1,0,0,0,701,692,1,0,0,0,701,695, - 1,0,0,0,701,696,1,0,0,0,701,697,1,0,0,0,701,698,1,0,0,0,701,699, - 1,0,0,0,701,700,1,0,0,0,702,703,1,0,0,0,703,754,3,74,37,16,704,705, - 10,13,0,0,705,706,5,226,0,0,706,754,3,74,37,14,707,708,10,11,0,0, - 708,709,5,6,0,0,709,754,3,74,37,12,710,711,10,10,0,0,711,712,5,121, - 0,0,712,754,3,74,37,11,713,715,10,9,0,0,714,716,5,115,0,0,715,714, - 1,0,0,0,715,716,1,0,0,0,716,717,1,0,0,0,717,718,5,16,0,0,718,719, - 3,74,37,0,719,720,5,6,0,0,720,721,3,74,37,10,721,754,1,0,0,0,722, - 723,10,8,0,0,723,724,5,229,0,0,724,725,3,74,37,0,725,726,5,205,0, - 0,726,727,3,74,37,8,727,754,1,0,0,0,728,729,10,21,0,0,729,730,5, - 219,0,0,730,731,3,74,37,0,731,732,5,235,0,0,732,754,1,0,0,0,733, - 734,10,20,0,0,734,735,5,210,0,0,735,754,5,197,0,0,736,737,10,19, - 0,0,737,738,5,210,0,0,738,754,3,114,57,0,739,740,10,14,0,0,740,742, - 5,88,0,0,741,743,5,115,0,0,742,741,1,0,0,0,742,743,1,0,0,0,743,744, - 1,0,0,0,744,754,5,116,0,0,745,751,10,7,0,0,746,752,3,112,56,0,747, - 748,5,10,0,0,748,752,3,114,57,0,749,750,5,10,0,0,750,752,5,199,0, - 0,751,746,1,0,0,0,751,747,1,0,0,0,751,749,1,0,0,0,752,754,1,0,0, - 0,753,662,1,0,0,0,753,669,1,0,0,0,753,676,1,0,0,0,753,704,1,0,0, - 0,753,707,1,0,0,0,753,710,1,0,0,0,753,713,1,0,0,0,753,722,1,0,0, - 0,753,728,1,0,0,0,753,733,1,0,0,0,753,736,1,0,0,0,753,739,1,0,0, - 0,753,745,1,0,0,0,754,757,1,0,0,0,755,753,1,0,0,0,755,756,1,0,0, - 0,756,75,1,0,0,0,757,755,1,0,0,0,758,763,3,78,39,0,759,760,5,206, - 0,0,760,762,3,78,39,0,761,759,1,0,0,0,762,765,1,0,0,0,763,761,1, - 0,0,0,763,764,1,0,0,0,764,77,1,0,0,0,765,763,1,0,0,0,766,769,3,80, - 40,0,767,769,3,74,37,0,768,766,1,0,0,0,768,767,1,0,0,0,769,79,1, - 0,0,0,770,771,5,220,0,0,771,776,3,114,57,0,772,773,5,206,0,0,773, - 775,3,114,57,0,774,772,1,0,0,0,775,778,1,0,0,0,776,774,1,0,0,0,776, - 777,1,0,0,0,777,779,1,0,0,0,778,776,1,0,0,0,779,780,5,236,0,0,780, - 790,1,0,0,0,781,786,3,114,57,0,782,783,5,206,0,0,783,785,3,114,57, - 0,784,782,1,0,0,0,785,788,1,0,0,0,786,784,1,0,0,0,786,787,1,0,0, - 0,787,790,1,0,0,0,788,786,1,0,0,0,789,770,1,0,0,0,789,781,1,0,0, - 0,790,791,1,0,0,0,791,792,5,201,0,0,792,793,3,74,37,0,793,81,1,0, - 0,0,794,799,3,84,42,0,795,796,5,206,0,0,796,798,3,84,42,0,797,795, - 1,0,0,0,798,801,1,0,0,0,799,797,1,0,0,0,799,800,1,0,0,0,800,83,1, - 0,0,0,801,799,1,0,0,0,802,803,3,114,57,0,803,804,5,10,0,0,804,805, - 5,220,0,0,805,806,3,2,1,0,806,807,5,236,0,0,807,813,1,0,0,0,808, - 809,3,74,37,0,809,810,5,10,0,0,810,811,3,114,57,0,811,813,1,0,0, - 0,812,802,1,0,0,0,812,808,1,0,0,0,813,85,1,0,0,0,814,822,5,200,0, - 0,815,816,3,94,47,0,816,817,5,210,0,0,817,819,1,0,0,0,818,815,1, - 0,0,0,818,819,1,0,0,0,819,820,1,0,0,0,820,822,3,88,44,0,821,814, - 1,0,0,0,821,818,1,0,0,0,822,87,1,0,0,0,823,828,3,114,57,0,824,825, - 5,210,0,0,825,827,3,114,57,0,826,824,1,0,0,0,827,830,1,0,0,0,828, - 826,1,0,0,0,828,829,1,0,0,0,829,89,1,0,0,0,830,828,1,0,0,0,831,832, - 6,45,-1,0,832,840,3,94,47,0,833,840,3,92,46,0,834,835,5,220,0,0, - 835,836,3,2,1,0,836,837,5,236,0,0,837,840,1,0,0,0,838,840,5,200, - 0,0,839,831,1,0,0,0,839,833,1,0,0,0,839,834,1,0,0,0,839,838,1,0, - 0,0,840,849,1,0,0,0,841,845,10,2,0,0,842,846,3,112,56,0,843,844, - 5,10,0,0,844,846,3,114,57,0,845,842,1,0,0,0,845,843,1,0,0,0,846, - 848,1,0,0,0,847,841,1,0,0,0,848,851,1,0,0,0,849,847,1,0,0,0,849, - 850,1,0,0,0,850,91,1,0,0,0,851,849,1,0,0,0,852,853,3,114,57,0,853, - 855,5,220,0,0,854,856,3,96,48,0,855,854,1,0,0,0,855,856,1,0,0,0, - 856,857,1,0,0,0,857,858,5,236,0,0,858,93,1,0,0,0,859,860,3,98,49, - 0,860,861,5,210,0,0,861,863,1,0,0,0,862,859,1,0,0,0,862,863,1,0, - 0,0,863,864,1,0,0,0,864,865,3,114,57,0,865,95,1,0,0,0,866,871,3, - 74,37,0,867,868,5,206,0,0,868,870,3,74,37,0,869,867,1,0,0,0,870, - 873,1,0,0,0,871,869,1,0,0,0,871,872,1,0,0,0,872,97,1,0,0,0,873,871, - 1,0,0,0,874,875,3,114,57,0,875,99,1,0,0,0,876,885,5,195,0,0,877, - 878,5,210,0,0,878,885,7,11,0,0,879,880,5,197,0,0,880,882,5,210,0, - 0,881,883,7,11,0,0,882,881,1,0,0,0,882,883,1,0,0,0,883,885,1,0,0, - 0,884,876,1,0,0,0,884,877,1,0,0,0,884,879,1,0,0,0,885,101,1,0,0, - 0,886,888,7,12,0,0,887,886,1,0,0,0,887,888,1,0,0,0,888,895,1,0,0, - 0,889,896,3,100,50,0,890,896,5,196,0,0,891,896,5,197,0,0,892,896, - 5,198,0,0,893,896,5,82,0,0,894,896,5,113,0,0,895,889,1,0,0,0,895, - 890,1,0,0,0,895,891,1,0,0,0,895,892,1,0,0,0,895,893,1,0,0,0,895, - 894,1,0,0,0,896,103,1,0,0,0,897,901,3,102,51,0,898,901,5,199,0,0, - 899,901,5,116,0,0,900,897,1,0,0,0,900,898,1,0,0,0,900,899,1,0,0, - 0,901,105,1,0,0,0,902,903,7,13,0,0,903,107,1,0,0,0,904,905,7,14, - 0,0,905,109,1,0,0,0,906,907,7,15,0,0,907,111,1,0,0,0,908,911,5,194, - 0,0,909,911,3,110,55,0,910,908,1,0,0,0,910,909,1,0,0,0,911,113,1, - 0,0,0,912,916,5,194,0,0,913,916,3,106,53,0,914,916,3,108,54,0,915, - 912,1,0,0,0,915,913,1,0,0,0,915,914,1,0,0,0,916,115,1,0,0,0,917, - 918,5,199,0,0,918,919,5,212,0,0,919,920,3,102,51,0,920,117,1,0,0, - 0,115,120,130,138,141,145,148,152,155,158,161,164,168,172,175,178, - 181,185,188,197,203,224,241,258,264,270,281,283,294,297,303,311, - 317,319,323,328,331,334,338,342,345,347,350,354,358,361,363,365, - 370,381,387,394,399,403,407,413,415,422,430,433,436,455,469,485, - 497,509,517,521,528,534,543,547,578,595,607,617,620,624,627,639, - 656,660,666,673,685,689,692,701,715,742,751,753,755,763,768,776, - 786,789,799,812,818,821,828,839,845,849,855,862,871,882,884,887, - 895,900,910,915 + 114,116,118,120,122,0,16,2,0,32,32,141,141,2,0,84,84,96,96,3,0,4, + 4,8,8,12,12,4,0,4,4,7,8,12,12,147,147,2,0,96,96,140,140,2,0,4,4, + 8,8,2,0,11,11,42,43,2,0,62,62,93,93,2,0,133,133,143,143,3,0,17,17, + 95,95,170,170,2,0,79,79,98,98,1,0,197,198,2,0,208,208,228,228,8, + 0,37,37,76,76,108,108,110,110,132,132,145,145,185,185,190,190,13, + 0,2,24,26,36,38,75,77,81,83,107,109,109,111,112,114,115,117,130, + 133,144,146,184,186,189,191,192,4,0,36,36,62,62,77,77,91,91,1083, + 0,127,1,0,0,0,2,131,1,0,0,0,4,145,1,0,0,0,6,148,1,0,0,0,8,197,1, + 0,0,0,10,200,1,0,0,0,12,206,1,0,0,0,14,210,1,0,0,0,16,216,1,0,0, + 0,18,234,1,0,0,0,20,237,1,0,0,0,22,240,1,0,0,0,24,250,1,0,0,0,26, + 253,1,0,0,0,28,257,1,0,0,0,30,290,1,0,0,0,32,292,1,0,0,0,34,295, + 1,0,0,0,36,310,1,0,0,0,38,372,1,0,0,0,40,377,1,0,0,0,42,388,1,0, + 0,0,44,390,1,0,0,0,46,396,1,0,0,0,48,404,1,0,0,0,50,422,1,0,0,0, + 52,424,1,0,0,0,54,432,1,0,0,0,56,437,1,0,0,0,58,445,1,0,0,0,60,449, + 1,0,0,0,62,453,1,0,0,0,64,462,1,0,0,0,66,476,1,0,0,0,68,478,1,0, + 0,0,70,528,1,0,0,0,72,530,1,0,0,0,74,668,1,0,0,0,76,766,1,0,0,0, + 78,776,1,0,0,0,80,797,1,0,0,0,82,802,1,0,0,0,84,824,1,0,0,0,86,826, + 1,0,0,0,88,844,1,0,0,0,90,853,1,0,0,0,92,855,1,0,0,0,94,872,1,0, + 0,0,96,885,1,0,0,0,98,895,1,0,0,0,100,899,1,0,0,0,102,907,1,0,0, + 0,104,917,1,0,0,0,106,920,1,0,0,0,108,933,1,0,0,0,110,935,1,0,0, + 0,112,937,1,0,0,0,114,939,1,0,0,0,116,943,1,0,0,0,118,948,1,0,0, + 0,120,950,1,0,0,0,122,954,1,0,0,0,124,128,3,2,1,0,125,128,3,6,3, + 0,126,128,3,82,41,0,127,124,1,0,0,0,127,125,1,0,0,0,127,126,1,0, + 0,0,128,129,1,0,0,0,129,130,5,0,0,1,130,1,1,0,0,0,131,137,3,4,2, + 0,132,133,5,176,0,0,133,134,5,4,0,0,134,136,3,4,2,0,135,132,1,0, + 0,0,136,139,1,0,0,0,137,135,1,0,0,0,137,138,1,0,0,0,138,3,1,0,0, + 0,139,137,1,0,0,0,140,146,3,6,3,0,141,142,5,220,0,0,142,143,3,2, + 1,0,143,144,5,236,0,0,144,146,1,0,0,0,145,140,1,0,0,0,145,141,1, + 0,0,0,146,5,1,0,0,0,147,149,3,8,4,0,148,147,1,0,0,0,148,149,1,0, + 0,0,149,150,1,0,0,0,150,152,5,146,0,0,151,153,5,49,0,0,152,151,1, + 0,0,0,152,153,1,0,0,0,153,155,1,0,0,0,154,156,3,10,5,0,155,154,1, + 0,0,0,155,156,1,0,0,0,156,157,1,0,0,0,157,159,3,72,36,0,158,160, + 3,12,6,0,159,158,1,0,0,0,159,160,1,0,0,0,160,162,1,0,0,0,161,163, + 3,14,7,0,162,161,1,0,0,0,162,163,1,0,0,0,163,165,1,0,0,0,164,166, + 3,18,9,0,165,164,1,0,0,0,165,166,1,0,0,0,166,168,1,0,0,0,167,169, + 3,20,10,0,168,167,1,0,0,0,168,169,1,0,0,0,169,171,1,0,0,0,170,172, + 3,22,11,0,171,170,1,0,0,0,171,172,1,0,0,0,172,175,1,0,0,0,173,174, + 5,189,0,0,174,176,7,0,0,0,175,173,1,0,0,0,175,176,1,0,0,0,176,179, + 1,0,0,0,177,178,5,189,0,0,178,180,5,169,0,0,179,177,1,0,0,0,179, + 180,1,0,0,0,180,182,1,0,0,0,181,183,3,24,12,0,182,181,1,0,0,0,182, + 183,1,0,0,0,183,185,1,0,0,0,184,186,3,16,8,0,185,184,1,0,0,0,185, + 186,1,0,0,0,186,188,1,0,0,0,187,189,3,26,13,0,188,187,1,0,0,0,188, + 189,1,0,0,0,189,192,1,0,0,0,190,193,3,30,15,0,191,193,3,32,16,0, + 192,190,1,0,0,0,192,191,1,0,0,0,192,193,1,0,0,0,193,195,1,0,0,0, + 194,196,3,34,17,0,195,194,1,0,0,0,195,196,1,0,0,0,196,7,1,0,0,0, + 197,198,5,189,0,0,198,199,3,86,43,0,199,9,1,0,0,0,200,201,5,168, + 0,0,201,204,5,198,0,0,202,203,5,189,0,0,203,205,5,164,0,0,204,202, + 1,0,0,0,204,205,1,0,0,0,205,11,1,0,0,0,206,207,5,68,0,0,207,208, + 3,36,18,0,208,13,1,0,0,0,209,211,7,1,0,0,210,209,1,0,0,0,210,211, + 1,0,0,0,211,212,1,0,0,0,212,213,5,9,0,0,213,214,5,90,0,0,214,215, + 3,72,36,0,215,15,1,0,0,0,216,217,5,188,0,0,217,218,3,118,59,0,218, + 219,5,10,0,0,219,220,5,220,0,0,220,221,3,56,28,0,221,231,5,236,0, + 0,222,223,5,206,0,0,223,224,3,118,59,0,224,225,5,10,0,0,225,226, + 5,220,0,0,226,227,3,56,28,0,227,228,5,236,0,0,228,230,1,0,0,0,229, + 222,1,0,0,0,230,233,1,0,0,0,231,229,1,0,0,0,231,232,1,0,0,0,232, + 17,1,0,0,0,233,231,1,0,0,0,234,235,5,129,0,0,235,236,3,74,37,0,236, + 19,1,0,0,0,237,238,5,187,0,0,238,239,3,74,37,0,239,21,1,0,0,0,240, + 241,5,73,0,0,241,248,5,18,0,0,242,243,7,0,0,0,243,244,5,220,0,0, + 244,245,3,72,36,0,245,246,5,236,0,0,246,249,1,0,0,0,247,249,3,72, + 36,0,248,242,1,0,0,0,248,247,1,0,0,0,249,23,1,0,0,0,250,251,5,74, + 0,0,251,252,3,74,37,0,252,25,1,0,0,0,253,254,5,122,0,0,254,255,5, + 18,0,0,255,256,3,46,23,0,256,27,1,0,0,0,257,258,5,122,0,0,258,259, + 5,18,0,0,259,260,3,72,36,0,260,29,1,0,0,0,261,262,5,99,0,0,262,265, + 3,74,37,0,263,264,5,206,0,0,264,266,3,74,37,0,265,263,1,0,0,0,265, + 266,1,0,0,0,266,271,1,0,0,0,267,268,5,189,0,0,268,272,5,164,0,0, + 269,270,5,18,0,0,270,272,3,72,36,0,271,267,1,0,0,0,271,269,1,0,0, + 0,271,272,1,0,0,0,272,291,1,0,0,0,273,274,5,99,0,0,274,277,3,74, + 37,0,275,276,5,189,0,0,276,278,5,164,0,0,277,275,1,0,0,0,277,278, + 1,0,0,0,278,279,1,0,0,0,279,280,5,118,0,0,280,281,3,74,37,0,281, + 291,1,0,0,0,282,283,5,99,0,0,283,284,3,74,37,0,284,285,5,118,0,0, + 285,288,3,74,37,0,286,287,5,18,0,0,287,289,3,72,36,0,288,286,1,0, + 0,0,288,289,1,0,0,0,289,291,1,0,0,0,290,261,1,0,0,0,290,273,1,0, + 0,0,290,282,1,0,0,0,291,31,1,0,0,0,292,293,5,118,0,0,293,294,3,74, + 37,0,294,33,1,0,0,0,295,296,5,150,0,0,296,297,3,52,26,0,297,35,1, + 0,0,0,298,299,6,18,-1,0,299,301,3,94,47,0,300,302,5,61,0,0,301,300, + 1,0,0,0,301,302,1,0,0,0,302,304,1,0,0,0,303,305,3,44,22,0,304,303, + 1,0,0,0,304,305,1,0,0,0,305,311,1,0,0,0,306,307,5,220,0,0,307,308, + 3,36,18,0,308,309,5,236,0,0,309,311,1,0,0,0,310,298,1,0,0,0,310, + 306,1,0,0,0,311,326,1,0,0,0,312,313,10,3,0,0,313,314,3,40,20,0,314, + 315,3,36,18,4,315,325,1,0,0,0,316,318,10,4,0,0,317,319,3,38,19,0, + 318,317,1,0,0,0,318,319,1,0,0,0,319,320,1,0,0,0,320,321,5,90,0,0, + 321,322,3,36,18,0,322,323,3,42,21,0,323,325,1,0,0,0,324,312,1,0, + 0,0,324,316,1,0,0,0,325,328,1,0,0,0,326,324,1,0,0,0,326,327,1,0, + 0,0,327,37,1,0,0,0,328,326,1,0,0,0,329,331,7,2,0,0,330,329,1,0,0, + 0,330,331,1,0,0,0,331,332,1,0,0,0,332,339,5,84,0,0,333,335,5,84, + 0,0,334,336,7,2,0,0,335,334,1,0,0,0,335,336,1,0,0,0,336,339,1,0, + 0,0,337,339,7,2,0,0,338,330,1,0,0,0,338,333,1,0,0,0,338,337,1,0, + 0,0,339,373,1,0,0,0,340,342,7,3,0,0,341,340,1,0,0,0,341,342,1,0, + 0,0,342,343,1,0,0,0,343,345,7,4,0,0,344,346,5,123,0,0,345,344,1, + 0,0,0,345,346,1,0,0,0,346,355,1,0,0,0,347,349,7,4,0,0,348,350,5, + 123,0,0,349,348,1,0,0,0,349,350,1,0,0,0,350,352,1,0,0,0,351,353, + 7,3,0,0,352,351,1,0,0,0,352,353,1,0,0,0,353,355,1,0,0,0,354,341, + 1,0,0,0,354,347,1,0,0,0,355,373,1,0,0,0,356,358,7,5,0,0,357,356, + 1,0,0,0,357,358,1,0,0,0,358,359,1,0,0,0,359,361,5,69,0,0,360,362, + 5,123,0,0,361,360,1,0,0,0,361,362,1,0,0,0,362,371,1,0,0,0,363,365, + 5,69,0,0,364,366,5,123,0,0,365,364,1,0,0,0,365,366,1,0,0,0,366,368, + 1,0,0,0,367,369,7,5,0,0,368,367,1,0,0,0,368,369,1,0,0,0,369,371, + 1,0,0,0,370,357,1,0,0,0,370,363,1,0,0,0,371,373,1,0,0,0,372,338, + 1,0,0,0,372,354,1,0,0,0,372,370,1,0,0,0,373,39,1,0,0,0,374,375,5, + 31,0,0,375,378,5,90,0,0,376,378,5,206,0,0,377,374,1,0,0,0,377,376, + 1,0,0,0,378,41,1,0,0,0,379,380,5,119,0,0,380,389,3,72,36,0,381,382, + 5,179,0,0,382,383,5,220,0,0,383,384,3,72,36,0,384,385,5,236,0,0, + 385,389,1,0,0,0,386,387,5,179,0,0,387,389,3,72,36,0,388,379,1,0, + 0,0,388,381,1,0,0,0,388,386,1,0,0,0,389,43,1,0,0,0,390,391,5,144, + 0,0,391,394,3,50,25,0,392,393,5,118,0,0,393,395,3,50,25,0,394,392, + 1,0,0,0,394,395,1,0,0,0,395,45,1,0,0,0,396,401,3,48,24,0,397,398, + 5,206,0,0,398,400,3,48,24,0,399,397,1,0,0,0,400,403,1,0,0,0,401, + 399,1,0,0,0,401,402,1,0,0,0,402,47,1,0,0,0,403,401,1,0,0,0,404,406, + 3,74,37,0,405,407,7,6,0,0,406,405,1,0,0,0,406,407,1,0,0,0,407,410, + 1,0,0,0,408,409,5,117,0,0,409,411,7,7,0,0,410,408,1,0,0,0,410,411, + 1,0,0,0,411,414,1,0,0,0,412,413,5,26,0,0,413,415,5,200,0,0,414,412, + 1,0,0,0,414,415,1,0,0,0,415,49,1,0,0,0,416,423,3,122,61,0,417,420, + 3,106,53,0,418,419,5,238,0,0,419,421,3,106,53,0,420,418,1,0,0,0, + 420,421,1,0,0,0,421,423,1,0,0,0,422,416,1,0,0,0,422,417,1,0,0,0, + 423,51,1,0,0,0,424,429,3,54,27,0,425,426,5,206,0,0,426,428,3,54, + 27,0,427,425,1,0,0,0,428,431,1,0,0,0,429,427,1,0,0,0,429,430,1,0, + 0,0,430,53,1,0,0,0,431,429,1,0,0,0,432,433,3,118,59,0,433,434,5, + 212,0,0,434,435,3,108,54,0,435,55,1,0,0,0,436,438,3,58,29,0,437, + 436,1,0,0,0,437,438,1,0,0,0,438,440,1,0,0,0,439,441,3,60,30,0,440, + 439,1,0,0,0,440,441,1,0,0,0,441,443,1,0,0,0,442,444,3,62,31,0,443, + 442,1,0,0,0,443,444,1,0,0,0,444,57,1,0,0,0,445,446,5,126,0,0,446, + 447,5,18,0,0,447,448,3,72,36,0,448,59,1,0,0,0,449,450,5,122,0,0, + 450,451,5,18,0,0,451,452,3,46,23,0,452,61,1,0,0,0,453,454,7,8,0, + 0,454,455,3,64,32,0,455,63,1,0,0,0,456,463,3,66,33,0,457,458,5,16, + 0,0,458,459,3,66,33,0,459,460,5,6,0,0,460,461,3,66,33,0,461,463, + 1,0,0,0,462,456,1,0,0,0,462,457,1,0,0,0,463,65,1,0,0,0,464,465,5, + 33,0,0,465,477,5,142,0,0,466,467,5,175,0,0,467,477,5,128,0,0,468, + 469,5,175,0,0,469,477,5,64,0,0,470,471,3,106,53,0,471,472,5,128, + 0,0,472,477,1,0,0,0,473,474,3,106,53,0,474,475,5,64,0,0,475,477, + 1,0,0,0,476,464,1,0,0,0,476,466,1,0,0,0,476,468,1,0,0,0,476,470, + 1,0,0,0,476,473,1,0,0,0,477,67,1,0,0,0,478,479,3,74,37,0,479,480, + 5,0,0,1,480,69,1,0,0,0,481,529,3,118,59,0,482,483,3,118,59,0,483, + 484,5,220,0,0,484,485,3,118,59,0,485,492,3,70,35,0,486,487,5,206, + 0,0,487,488,3,118,59,0,488,489,3,70,35,0,489,491,1,0,0,0,490,486, + 1,0,0,0,491,494,1,0,0,0,492,490,1,0,0,0,492,493,1,0,0,0,493,495, + 1,0,0,0,494,492,1,0,0,0,495,496,5,236,0,0,496,529,1,0,0,0,497,498, + 3,118,59,0,498,499,5,220,0,0,499,504,3,120,60,0,500,501,5,206,0, + 0,501,503,3,120,60,0,502,500,1,0,0,0,503,506,1,0,0,0,504,502,1,0, + 0,0,504,505,1,0,0,0,505,507,1,0,0,0,506,504,1,0,0,0,507,508,5,236, + 0,0,508,529,1,0,0,0,509,510,3,118,59,0,510,511,5,220,0,0,511,516, + 3,70,35,0,512,513,5,206,0,0,513,515,3,70,35,0,514,512,1,0,0,0,515, + 518,1,0,0,0,516,514,1,0,0,0,516,517,1,0,0,0,517,519,1,0,0,0,518, + 516,1,0,0,0,519,520,5,236,0,0,520,529,1,0,0,0,521,522,3,118,59,0, + 522,524,5,220,0,0,523,525,3,72,36,0,524,523,1,0,0,0,524,525,1,0, + 0,0,525,526,1,0,0,0,526,527,5,236,0,0,527,529,1,0,0,0,528,481,1, + 0,0,0,528,482,1,0,0,0,528,497,1,0,0,0,528,509,1,0,0,0,528,521,1, + 0,0,0,529,71,1,0,0,0,530,535,3,74,37,0,531,532,5,206,0,0,532,534, + 3,74,37,0,533,531,1,0,0,0,534,537,1,0,0,0,535,533,1,0,0,0,535,536, + 1,0,0,0,536,73,1,0,0,0,537,535,1,0,0,0,538,539,6,37,-1,0,539,541, + 5,19,0,0,540,542,3,74,37,0,541,540,1,0,0,0,541,542,1,0,0,0,542,548, + 1,0,0,0,543,544,5,186,0,0,544,545,3,74,37,0,545,546,5,163,0,0,546, + 547,3,74,37,0,547,549,1,0,0,0,548,543,1,0,0,0,549,550,1,0,0,0,550, + 548,1,0,0,0,550,551,1,0,0,0,551,554,1,0,0,0,552,553,5,52,0,0,553, + 555,3,74,37,0,554,552,1,0,0,0,554,555,1,0,0,0,555,556,1,0,0,0,556, + 557,5,53,0,0,557,669,1,0,0,0,558,559,5,20,0,0,559,560,5,220,0,0, + 560,561,3,74,37,0,561,562,5,10,0,0,562,563,3,70,35,0,563,564,5,236, + 0,0,564,669,1,0,0,0,565,566,5,36,0,0,566,669,5,200,0,0,567,568,5, + 59,0,0,568,569,5,220,0,0,569,570,3,110,55,0,570,571,5,68,0,0,571, + 572,3,74,37,0,572,573,5,236,0,0,573,669,1,0,0,0,574,575,5,86,0,0, + 575,576,3,74,37,0,576,577,3,110,55,0,577,669,1,0,0,0,578,579,5,155, + 0,0,579,580,5,220,0,0,580,581,3,74,37,0,581,582,5,68,0,0,582,585, + 3,74,37,0,583,584,5,65,0,0,584,586,3,74,37,0,585,583,1,0,0,0,585, + 586,1,0,0,0,586,587,1,0,0,0,587,588,5,236,0,0,588,669,1,0,0,0,589, + 590,5,166,0,0,590,669,5,200,0,0,591,592,5,171,0,0,592,593,5,220, + 0,0,593,594,7,9,0,0,594,595,5,200,0,0,595,596,5,68,0,0,596,597,3, + 74,37,0,597,598,5,236,0,0,598,669,1,0,0,0,599,600,3,118,59,0,600, + 602,5,220,0,0,601,603,3,72,36,0,602,601,1,0,0,0,602,603,1,0,0,0, + 603,604,1,0,0,0,604,605,5,236,0,0,605,606,1,0,0,0,606,607,5,125, + 0,0,607,608,5,220,0,0,608,609,3,56,28,0,609,610,5,236,0,0,610,669, + 1,0,0,0,611,612,3,118,59,0,612,614,5,220,0,0,613,615,3,72,36,0,614, + 613,1,0,0,0,614,615,1,0,0,0,615,616,1,0,0,0,616,617,5,236,0,0,617, + 618,1,0,0,0,618,619,5,125,0,0,619,620,3,118,59,0,620,669,1,0,0,0, + 621,627,3,118,59,0,622,624,5,220,0,0,623,625,3,72,36,0,624,623,1, + 0,0,0,624,625,1,0,0,0,625,626,1,0,0,0,626,628,5,236,0,0,627,622, + 1,0,0,0,627,628,1,0,0,0,628,629,1,0,0,0,629,631,5,220,0,0,630,632, + 5,49,0,0,631,630,1,0,0,0,631,632,1,0,0,0,632,634,1,0,0,0,633,635, + 3,76,38,0,634,633,1,0,0,0,634,635,1,0,0,0,635,636,1,0,0,0,636,637, + 5,236,0,0,637,669,1,0,0,0,638,669,3,82,41,0,639,669,3,108,54,0,640, + 641,5,208,0,0,641,669,3,74,37,18,642,643,5,115,0,0,643,669,3,74, + 37,12,644,645,3,98,49,0,645,646,5,210,0,0,646,648,1,0,0,0,647,644, + 1,0,0,0,647,648,1,0,0,0,648,649,1,0,0,0,649,669,5,202,0,0,650,651, + 5,220,0,0,651,652,3,2,1,0,652,653,5,236,0,0,653,669,1,0,0,0,654, + 655,5,220,0,0,655,656,3,74,37,0,656,657,5,236,0,0,657,669,1,0,0, + 0,658,659,5,220,0,0,659,660,3,72,36,0,660,661,5,236,0,0,661,669, + 1,0,0,0,662,664,5,219,0,0,663,665,3,72,36,0,664,663,1,0,0,0,664, + 665,1,0,0,0,665,666,1,0,0,0,666,669,5,235,0,0,667,669,3,90,45,0, + 668,538,1,0,0,0,668,558,1,0,0,0,668,565,1,0,0,0,668,567,1,0,0,0, + 668,574,1,0,0,0,668,578,1,0,0,0,668,589,1,0,0,0,668,591,1,0,0,0, + 668,599,1,0,0,0,668,611,1,0,0,0,668,621,1,0,0,0,668,638,1,0,0,0, + 668,639,1,0,0,0,668,640,1,0,0,0,668,642,1,0,0,0,668,647,1,0,0,0, + 668,650,1,0,0,0,668,654,1,0,0,0,668,658,1,0,0,0,668,662,1,0,0,0, + 668,667,1,0,0,0,669,763,1,0,0,0,670,674,10,17,0,0,671,675,5,202, + 0,0,672,675,5,238,0,0,673,675,5,227,0,0,674,671,1,0,0,0,674,672, + 1,0,0,0,674,673,1,0,0,0,675,676,1,0,0,0,676,762,3,74,37,18,677,681, + 10,16,0,0,678,682,5,228,0,0,679,682,5,208,0,0,680,682,5,207,0,0, + 681,678,1,0,0,0,681,679,1,0,0,0,681,680,1,0,0,0,682,683,1,0,0,0, + 683,762,3,74,37,17,684,709,10,15,0,0,685,710,5,211,0,0,686,710,5, + 212,0,0,687,710,5,223,0,0,688,710,5,221,0,0,689,710,5,222,0,0,690, + 710,5,213,0,0,691,710,5,214,0,0,692,694,5,115,0,0,693,692,1,0,0, + 0,693,694,1,0,0,0,694,695,1,0,0,0,695,697,5,80,0,0,696,698,5,25, + 0,0,697,696,1,0,0,0,697,698,1,0,0,0,698,710,1,0,0,0,699,701,5,115, + 0,0,700,699,1,0,0,0,700,701,1,0,0,0,701,702,1,0,0,0,702,710,7,10, + 0,0,703,710,5,232,0,0,704,710,5,233,0,0,705,710,5,225,0,0,706,710, + 5,216,0,0,707,710,5,217,0,0,708,710,5,224,0,0,709,685,1,0,0,0,709, + 686,1,0,0,0,709,687,1,0,0,0,709,688,1,0,0,0,709,689,1,0,0,0,709, + 690,1,0,0,0,709,691,1,0,0,0,709,693,1,0,0,0,709,700,1,0,0,0,709, + 703,1,0,0,0,709,704,1,0,0,0,709,705,1,0,0,0,709,706,1,0,0,0,709, + 707,1,0,0,0,709,708,1,0,0,0,710,711,1,0,0,0,711,762,3,74,37,16,712, + 713,10,13,0,0,713,714,5,226,0,0,714,762,3,74,37,14,715,716,10,11, + 0,0,716,717,5,6,0,0,717,762,3,74,37,12,718,719,10,10,0,0,719,720, + 5,121,0,0,720,762,3,74,37,11,721,723,10,9,0,0,722,724,5,115,0,0, + 723,722,1,0,0,0,723,724,1,0,0,0,724,725,1,0,0,0,725,726,5,16,0,0, + 726,727,3,74,37,0,727,728,5,6,0,0,728,729,3,74,37,10,729,762,1,0, + 0,0,730,731,10,8,0,0,731,732,5,229,0,0,732,733,3,74,37,0,733,734, + 5,205,0,0,734,735,3,74,37,8,735,762,1,0,0,0,736,737,10,21,0,0,737, + 738,5,219,0,0,738,739,3,74,37,0,739,740,5,235,0,0,740,762,1,0,0, + 0,741,742,10,20,0,0,742,743,5,210,0,0,743,762,5,198,0,0,744,745, + 10,19,0,0,745,746,5,210,0,0,746,762,3,118,59,0,747,748,10,14,0,0, + 748,750,5,88,0,0,749,751,5,115,0,0,750,749,1,0,0,0,750,751,1,0,0, + 0,751,752,1,0,0,0,752,762,5,116,0,0,753,759,10,7,0,0,754,760,3,116, + 58,0,755,756,5,10,0,0,756,760,3,118,59,0,757,758,5,10,0,0,758,760, + 5,200,0,0,759,754,1,0,0,0,759,755,1,0,0,0,759,757,1,0,0,0,760,762, + 1,0,0,0,761,670,1,0,0,0,761,677,1,0,0,0,761,684,1,0,0,0,761,712, + 1,0,0,0,761,715,1,0,0,0,761,718,1,0,0,0,761,721,1,0,0,0,761,730, + 1,0,0,0,761,736,1,0,0,0,761,741,1,0,0,0,761,744,1,0,0,0,761,747, + 1,0,0,0,761,753,1,0,0,0,762,765,1,0,0,0,763,761,1,0,0,0,763,764, + 1,0,0,0,764,75,1,0,0,0,765,763,1,0,0,0,766,771,3,78,39,0,767,768, + 5,206,0,0,768,770,3,78,39,0,769,767,1,0,0,0,770,773,1,0,0,0,771, + 769,1,0,0,0,771,772,1,0,0,0,772,77,1,0,0,0,773,771,1,0,0,0,774,777, + 3,80,40,0,775,777,3,74,37,0,776,774,1,0,0,0,776,775,1,0,0,0,777, + 79,1,0,0,0,778,779,5,220,0,0,779,784,3,118,59,0,780,781,5,206,0, + 0,781,783,3,118,59,0,782,780,1,0,0,0,783,786,1,0,0,0,784,782,1,0, + 0,0,784,785,1,0,0,0,785,787,1,0,0,0,786,784,1,0,0,0,787,788,5,236, + 0,0,788,798,1,0,0,0,789,794,3,118,59,0,790,791,5,206,0,0,791,793, + 3,118,59,0,792,790,1,0,0,0,793,796,1,0,0,0,794,792,1,0,0,0,794,795, + 1,0,0,0,795,798,1,0,0,0,796,794,1,0,0,0,797,778,1,0,0,0,797,789, + 1,0,0,0,798,799,1,0,0,0,799,800,5,201,0,0,800,801,3,74,37,0,801, + 81,1,0,0,0,802,803,5,222,0,0,803,807,3,118,59,0,804,806,3,84,42, + 0,805,804,1,0,0,0,806,809,1,0,0,0,807,805,1,0,0,0,807,808,1,0,0, + 0,808,810,1,0,0,0,809,807,1,0,0,0,810,811,5,238,0,0,811,812,5,214, + 0,0,812,83,1,0,0,0,813,814,3,118,59,0,814,815,5,212,0,0,815,816, + 5,200,0,0,816,825,1,0,0,0,817,818,3,118,59,0,818,819,5,212,0,0,819, + 820,5,218,0,0,820,821,3,74,37,0,821,822,5,234,0,0,822,825,1,0,0, + 0,823,825,3,118,59,0,824,813,1,0,0,0,824,817,1,0,0,0,824,823,1,0, + 0,0,825,85,1,0,0,0,826,831,3,88,44,0,827,828,5,206,0,0,828,830,3, + 88,44,0,829,827,1,0,0,0,830,833,1,0,0,0,831,829,1,0,0,0,831,832, + 1,0,0,0,832,87,1,0,0,0,833,831,1,0,0,0,834,835,3,118,59,0,835,836, + 5,10,0,0,836,837,5,220,0,0,837,838,3,2,1,0,838,839,5,236,0,0,839, + 845,1,0,0,0,840,841,3,74,37,0,841,842,5,10,0,0,842,843,3,118,59, + 0,843,845,1,0,0,0,844,834,1,0,0,0,844,840,1,0,0,0,845,89,1,0,0,0, + 846,854,3,122,61,0,847,848,3,98,49,0,848,849,5,210,0,0,849,851,1, + 0,0,0,850,847,1,0,0,0,850,851,1,0,0,0,851,852,1,0,0,0,852,854,3, + 92,46,0,853,846,1,0,0,0,853,850,1,0,0,0,854,91,1,0,0,0,855,860,3, + 118,59,0,856,857,5,210,0,0,857,859,3,118,59,0,858,856,1,0,0,0,859, + 862,1,0,0,0,860,858,1,0,0,0,860,861,1,0,0,0,861,93,1,0,0,0,862,860, + 1,0,0,0,863,864,6,47,-1,0,864,873,3,98,49,0,865,873,3,96,48,0,866, + 867,5,220,0,0,867,868,3,2,1,0,868,869,5,236,0,0,869,873,1,0,0,0, + 870,873,3,82,41,0,871,873,3,122,61,0,872,863,1,0,0,0,872,865,1,0, + 0,0,872,866,1,0,0,0,872,870,1,0,0,0,872,871,1,0,0,0,873,882,1,0, + 0,0,874,878,10,3,0,0,875,879,3,116,58,0,876,877,5,10,0,0,877,879, + 3,118,59,0,878,875,1,0,0,0,878,876,1,0,0,0,879,881,1,0,0,0,880,874, + 1,0,0,0,881,884,1,0,0,0,882,880,1,0,0,0,882,883,1,0,0,0,883,95,1, + 0,0,0,884,882,1,0,0,0,885,886,3,118,59,0,886,888,5,220,0,0,887,889, + 3,100,50,0,888,887,1,0,0,0,888,889,1,0,0,0,889,890,1,0,0,0,890,891, + 5,236,0,0,891,97,1,0,0,0,892,893,3,102,51,0,893,894,5,210,0,0,894, + 896,1,0,0,0,895,892,1,0,0,0,895,896,1,0,0,0,896,897,1,0,0,0,897, + 898,3,118,59,0,898,99,1,0,0,0,899,904,3,74,37,0,900,901,5,206,0, + 0,901,903,3,74,37,0,902,900,1,0,0,0,903,906,1,0,0,0,904,902,1,0, + 0,0,904,905,1,0,0,0,905,101,1,0,0,0,906,904,1,0,0,0,907,908,3,118, + 59,0,908,103,1,0,0,0,909,918,5,196,0,0,910,911,5,210,0,0,911,918, + 7,11,0,0,912,913,5,198,0,0,913,915,5,210,0,0,914,916,7,11,0,0,915, + 914,1,0,0,0,915,916,1,0,0,0,916,918,1,0,0,0,917,909,1,0,0,0,917, + 910,1,0,0,0,917,912,1,0,0,0,918,105,1,0,0,0,919,921,7,12,0,0,920, + 919,1,0,0,0,920,921,1,0,0,0,921,928,1,0,0,0,922,929,3,104,52,0,923, + 929,5,197,0,0,924,929,5,198,0,0,925,929,5,199,0,0,926,929,5,82,0, + 0,927,929,5,113,0,0,928,922,1,0,0,0,928,923,1,0,0,0,928,924,1,0, + 0,0,928,925,1,0,0,0,928,926,1,0,0,0,928,927,1,0,0,0,929,107,1,0, + 0,0,930,934,3,106,53,0,931,934,5,200,0,0,932,934,5,116,0,0,933,930, + 1,0,0,0,933,931,1,0,0,0,933,932,1,0,0,0,934,109,1,0,0,0,935,936, + 7,13,0,0,936,111,1,0,0,0,937,938,7,14,0,0,938,113,1,0,0,0,939,940, + 7,15,0,0,940,115,1,0,0,0,941,944,5,195,0,0,942,944,3,114,57,0,943, + 941,1,0,0,0,943,942,1,0,0,0,944,117,1,0,0,0,945,949,5,195,0,0,946, + 949,3,110,55,0,947,949,3,112,56,0,948,945,1,0,0,0,948,946,1,0,0, + 0,948,947,1,0,0,0,949,119,1,0,0,0,950,951,5,200,0,0,951,952,5,212, + 0,0,952,953,3,106,53,0,953,121,1,0,0,0,954,955,5,218,0,0,955,956, + 3,118,59,0,956,957,5,234,0,0,957,123,1,0,0,0,117,127,137,145,148, + 152,155,159,162,165,168,171,175,179,182,185,188,192,195,204,210, + 231,248,265,271,277,288,290,301,304,310,318,324,326,330,335,338, + 341,345,349,352,354,357,361,365,368,370,372,377,388,394,401,406, + 410,414,420,422,429,437,440,443,462,476,492,504,516,524,528,535, + 541,550,554,585,602,614,624,627,631,634,647,664,668,674,681,693, + 697,700,709,723,750,759,761,763,771,776,784,794,797,807,824,831, + 844,850,853,860,872,878,882,888,895,904,915,917,920,928,933,943, + 948 ] class HogQLParser ( Parser ): @@ -477,18 +491,18 @@ class HogQLParser ( Parser ): "TRUNCATE", "TTL", "TYPE", "UNBOUNDED", "UNION", "UPDATE", "USE", "USING", "UUID", "VALUES", "VIEW", "VOLUME", "WATCH", "WEEK", "WHEN", "WHERE", "WINDOW", "WITH", - "YEAR", "JSON_FALSE", "JSON_TRUE", "ESCAPE_CHAR", - "IDENTIFIER", "FLOATING_LITERAL", "OCTAL_LITERAL", - "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", "STRING_LITERAL", - "PLACEHOLDER", "ARROW", "ASTERISK", "BACKQUOTE", "BACKSLASH", - "COLON", "COMMA", "CONCAT", "DASH", "DOLLAR", "DOT", - "EQ_DOUBLE", "EQ_SINGLE", "GT_EQ", "GT", "HASH", "IREGEX_SINGLE", - "IREGEX_DOUBLE", "LBRACE", "LBRACKET", "LPAREN", "LT_EQ", - "LT", "NOT_EQ", "NOT_IREGEX", "NOT_REGEX", "NULLISH", - "PERCENT", "PLUS", "QUERY", "QUOTE_DOUBLE", "QUOTE_SINGLE", - "REGEX_SINGLE", "REGEX_DOUBLE", "RBRACE", "RBRACKET", - "RPAREN", "SEMICOLON", "SLASH", "UNDERSCORE", "MULTI_LINE_COMMENT", - "SINGLE_LINE_COMMENT", "WHITESPACE" ] + "YEAR", "JSON_FALSE", "JSON_TRUE", "ESCAPE_CHAR_SINGLE", + "ESCAPE_CHAR_DOUBLE", "IDENTIFIER", "FLOATING_LITERAL", + "OCTAL_LITERAL", "DECIMAL_LITERAL", "HEXADECIMAL_LITERAL", + "STRING_LITERAL", "ARROW", "ASTERISK", "BACKQUOTE", + "BACKSLASH", "COLON", "COMMA", "CONCAT", "DASH", "DOLLAR", + "DOT", "EQ_DOUBLE", "EQ_SINGLE", "GT_EQ", "GT", "HASH", + "IREGEX_SINGLE", "IREGEX_DOUBLE", "LBRACE", "LBRACKET", + "LPAREN", "LT_EQ", "LT", "NOT_EQ", "NOT_IREGEX", "NOT_REGEX", + "NULLISH", "PERCENT", "PLUS", "QUERY", "QUOTE_DOUBLE", + "QUOTE_SINGLE", "REGEX_SINGLE", "REGEX_DOUBLE", "RBRACE", + "RBRACKET", "RPAREN", "SEMICOLON", "SLASH", "UNDERSCORE", + "MULTI_LINE_COMMENT", "SINGLE_LINE_COMMENT", "WHITESPACE" ] RULE_select = 0 RULE_selectUnionStmt = 1 @@ -531,24 +545,27 @@ class HogQLParser ( Parser ): RULE_columnArgList = 38 RULE_columnArgExpr = 39 RULE_columnLambdaExpr = 40 - RULE_withExprList = 41 - RULE_withExpr = 42 - RULE_columnIdentifier = 43 - RULE_nestedIdentifier = 44 - RULE_tableExpr = 45 - RULE_tableFunctionExpr = 46 - RULE_tableIdentifier = 47 - RULE_tableArgList = 48 - RULE_databaseIdentifier = 49 - RULE_floatingLiteral = 50 - RULE_numberLiteral = 51 - RULE_literal = 52 - RULE_interval = 53 - RULE_keyword = 54 - RULE_keywordForAlias = 55 - RULE_alias = 56 - RULE_identifier = 57 - RULE_enumValue = 58 + RULE_hogqlxTagElement = 41 + RULE_hogqlxTagAttribute = 42 + RULE_withExprList = 43 + RULE_withExpr = 44 + RULE_columnIdentifier = 45 + RULE_nestedIdentifier = 46 + RULE_tableExpr = 47 + RULE_tableFunctionExpr = 48 + RULE_tableIdentifier = 49 + RULE_tableArgList = 50 + RULE_databaseIdentifier = 51 + RULE_floatingLiteral = 52 + RULE_numberLiteral = 53 + RULE_literal = 54 + RULE_interval = 55 + RULE_keyword = 56 + RULE_keywordForAlias = 57 + RULE_alias = 58 + RULE_identifier = 59 + RULE_enumValue = 60 + RULE_placeholder = 61 ruleNames = [ "select", "selectUnionStmt", "selectStmtWithParens", "selectStmt", "withClause", "topClause", "fromClause", @@ -562,11 +579,12 @@ class HogQLParser ( Parser ): "winFrameClause", "winFrameExtend", "winFrameBound", "expr", "columnTypeExpr", "columnExprList", "columnExpr", "columnArgList", "columnArgExpr", "columnLambdaExpr", - "withExprList", "withExpr", "columnIdentifier", "nestedIdentifier", - "tableExpr", "tableFunctionExpr", "tableIdentifier", - "tableArgList", "databaseIdentifier", "floatingLiteral", - "numberLiteral", "literal", "interval", "keyword", "keywordForAlias", - "alias", "identifier", "enumValue" ] + "hogqlxTagElement", "hogqlxTagAttribute", "withExprList", + "withExpr", "columnIdentifier", "nestedIdentifier", "tableExpr", + "tableFunctionExpr", "tableIdentifier", "tableArgList", + "databaseIdentifier", "floatingLiteral", "numberLiteral", + "literal", "interval", "keyword", "keywordForAlias", + "alias", "identifier", "enumValue", "placeholder" ] EOF = Token.EOF ADD=1 @@ -761,14 +779,14 @@ class HogQLParser ( Parser ): YEAR=190 JSON_FALSE=191 JSON_TRUE=192 - ESCAPE_CHAR=193 - IDENTIFIER=194 - FLOATING_LITERAL=195 - OCTAL_LITERAL=196 - DECIMAL_LITERAL=197 - HEXADECIMAL_LITERAL=198 - STRING_LITERAL=199 - PLACEHOLDER=200 + ESCAPE_CHAR_SINGLE=193 + ESCAPE_CHAR_DOUBLE=194 + IDENTIFIER=195 + FLOATING_LITERAL=196 + OCTAL_LITERAL=197 + DECIMAL_LITERAL=198 + HEXADECIMAL_LITERAL=199 + STRING_LITERAL=200 ARROW=201 ASTERISK=202 BACKQUOTE=203 @@ -839,6 +857,10 @@ def selectStmt(self): return self.getTypedRuleContext(HogQLParser.SelectStmtContext,0) + def hogqlxTagElement(self): + return self.getTypedRuleContext(HogQLParser.HogqlxTagElementContext,0) + + def getRuleIndex(self): return HogQLParser.RULE_select @@ -857,21 +879,26 @@ def select(self): self.enterRule(localctx, 0, self.RULE_select) try: self.enterOuterAlt(localctx, 1) - self.state = 120 + self.state = 127 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,0,self._ctx) if la_ == 1: - self.state = 118 + self.state = 124 self.selectUnionStmt() pass elif la_ == 2: - self.state = 119 + self.state = 125 self.selectStmt() pass + elif la_ == 3: + self.state = 126 + self.hogqlxTagElement() + pass + - self.state = 122 + self.state = 129 self.match(HogQLParser.EOF) except RecognitionException as re: localctx.exception = re @@ -927,19 +954,19 @@ def selectUnionStmt(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 124 + self.state = 131 self.selectStmtWithParens() - self.state = 130 + self.state = 137 self._errHandler.sync(self) _la = self._input.LA(1) while _la==176: - self.state = 125 + self.state = 132 self.match(HogQLParser.UNION) - self.state = 126 + self.state = 133 self.match(HogQLParser.ALL) - self.state = 127 + self.state = 134 self.selectStmtWithParens() - self.state = 132 + self.state = 139 self._errHandler.sync(self) _la = self._input.LA(1) @@ -990,21 +1017,21 @@ def selectStmtWithParens(self): localctx = HogQLParser.SelectStmtWithParensContext(self, self._ctx, self.state) self.enterRule(localctx, 4, self.RULE_selectStmtWithParens) try: - self.state = 138 + self.state = 145 self._errHandler.sync(self) token = self._input.LA(1) if token in [146, 189]: self.enterOuterAlt(localctx, 1) - self.state = 133 + self.state = 140 self.selectStmt() pass elif token in [220]: self.enterOuterAlt(localctx, 2) - self.state = 134 + self.state = 141 self.match(HogQLParser.LPAREN) - self.state = 135 + self.state = 142 self.selectUnionStmt() - self.state = 136 + self.state = 143 self.match(HogQLParser.RPAREN) pass else: @@ -1126,81 +1153,81 @@ def selectStmt(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 141 + self.state = 148 self._errHandler.sync(self) _la = self._input.LA(1) if _la==189: - self.state = 140 + self.state = 147 localctx.with_ = self.withClause() - self.state = 143 + self.state = 150 self.match(HogQLParser.SELECT) - self.state = 145 + self.state = 152 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,4,self._ctx) if la_ == 1: - self.state = 144 + self.state = 151 self.match(HogQLParser.DISTINCT) - self.state = 148 + self.state = 155 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,5,self._ctx) if la_ == 1: - self.state = 147 + self.state = 154 self.topClause() - self.state = 150 + self.state = 157 localctx.columns = self.columnExprList() - self.state = 152 + self.state = 159 self._errHandler.sync(self) _la = self._input.LA(1) if _la==68: - self.state = 151 + self.state = 158 localctx.from_ = self.fromClause() - self.state = 155 + self.state = 162 self._errHandler.sync(self) _la = self._input.LA(1) if _la==9 or _la==84 or _la==96: - self.state = 154 + self.state = 161 self.arrayJoinClause() - self.state = 158 + self.state = 165 self._errHandler.sync(self) _la = self._input.LA(1) if _la==129: - self.state = 157 + self.state = 164 self.prewhereClause() - self.state = 161 + self.state = 168 self._errHandler.sync(self) _la = self._input.LA(1) if _la==187: - self.state = 160 + self.state = 167 localctx.where = self.whereClause() - self.state = 164 + self.state = 171 self._errHandler.sync(self) _la = self._input.LA(1) if _la==73: - self.state = 163 + self.state = 170 self.groupByClause() - self.state = 168 + self.state = 175 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,11,self._ctx) if la_ == 1: - self.state = 166 + self.state = 173 self.match(HogQLParser.WITH) - self.state = 167 + self.state = 174 _la = self._input.LA(1) if not(_la==32 or _la==141): self._errHandler.recoverInline(self) @@ -1209,60 +1236,60 @@ def selectStmt(self): self.consume() - self.state = 172 + self.state = 179 self._errHandler.sync(self) _la = self._input.LA(1) if _la==189: - self.state = 170 + self.state = 177 self.match(HogQLParser.WITH) - self.state = 171 + self.state = 178 self.match(HogQLParser.TOTALS) - self.state = 175 + self.state = 182 self._errHandler.sync(self) _la = self._input.LA(1) if _la==74: - self.state = 174 + self.state = 181 self.havingClause() - self.state = 178 + self.state = 185 self._errHandler.sync(self) _la = self._input.LA(1) if _la==188: - self.state = 177 + self.state = 184 self.windowClause() - self.state = 181 + self.state = 188 self._errHandler.sync(self) _la = self._input.LA(1) if _la==122: - self.state = 180 + self.state = 187 self.orderByClause() - self.state = 185 + self.state = 192 self._errHandler.sync(self) token = self._input.LA(1) if token in [99]: - self.state = 183 + self.state = 190 self.limitAndOffsetClause() pass elif token in [118]: - self.state = 184 + self.state = 191 self.offsetOnlyClause() pass elif token in [-1, 150, 176, 236]: pass else: pass - self.state = 188 + self.state = 195 self._errHandler.sync(self) _la = self._input.LA(1) if _la==150: - self.state = 187 + self.state = 194 self.settingsClause() @@ -1307,9 +1334,9 @@ def withClause(self): self.enterRule(localctx, 8, self.RULE_withClause) try: self.enterOuterAlt(localctx, 1) - self.state = 190 + self.state = 197 self.match(HogQLParser.WITH) - self.state = 191 + self.state = 198 self.withExprList() except RecognitionException as re: localctx.exception = re @@ -1357,17 +1384,17 @@ def topClause(self): self.enterRule(localctx, 10, self.RULE_topClause) try: self.enterOuterAlt(localctx, 1) - self.state = 193 + self.state = 200 self.match(HogQLParser.TOP) - self.state = 194 + self.state = 201 self.match(HogQLParser.DECIMAL_LITERAL) - self.state = 197 + self.state = 204 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,18,self._ctx) if la_ == 1: - self.state = 195 + self.state = 202 self.match(HogQLParser.WITH) - self.state = 196 + self.state = 203 self.match(HogQLParser.TIES) @@ -1412,9 +1439,9 @@ def fromClause(self): self.enterRule(localctx, 12, self.RULE_fromClause) try: self.enterOuterAlt(localctx, 1) - self.state = 199 + self.state = 206 self.match(HogQLParser.FROM) - self.state = 200 + self.state = 207 self.joinExpr(0) except RecognitionException as re: localctx.exception = re @@ -1467,11 +1494,11 @@ def arrayJoinClause(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 203 + self.state = 210 self._errHandler.sync(self) _la = self._input.LA(1) if _la==84 or _la==96: - self.state = 202 + self.state = 209 _la = self._input.LA(1) if not(_la==84 or _la==96): self._errHandler.recoverInline(self) @@ -1480,11 +1507,11 @@ def arrayJoinClause(self): self.consume() - self.state = 205 + self.state = 212 self.match(HogQLParser.ARRAY) - self.state = 206 + self.state = 213 self.match(HogQLParser.JOIN) - self.state = 207 + self.state = 214 self.columnExprList() except RecognitionException as re: localctx.exception = re @@ -1562,35 +1589,35 @@ def windowClause(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 209 + self.state = 216 self.match(HogQLParser.WINDOW) - self.state = 210 + self.state = 217 self.identifier() - self.state = 211 + self.state = 218 self.match(HogQLParser.AS) - self.state = 212 + self.state = 219 self.match(HogQLParser.LPAREN) - self.state = 213 + self.state = 220 self.windowExpr() - self.state = 214 + self.state = 221 self.match(HogQLParser.RPAREN) - self.state = 224 + self.state = 231 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 215 + self.state = 222 self.match(HogQLParser.COMMA) - self.state = 216 + self.state = 223 self.identifier() - self.state = 217 + self.state = 224 self.match(HogQLParser.AS) - self.state = 218 + self.state = 225 self.match(HogQLParser.LPAREN) - self.state = 219 + self.state = 226 self.windowExpr() - self.state = 220 + self.state = 227 self.match(HogQLParser.RPAREN) - self.state = 226 + self.state = 233 self._errHandler.sync(self) _la = self._input.LA(1) @@ -1635,9 +1662,9 @@ def prewhereClause(self): self.enterRule(localctx, 18, self.RULE_prewhereClause) try: self.enterOuterAlt(localctx, 1) - self.state = 227 + self.state = 234 self.match(HogQLParser.PREWHERE) - self.state = 228 + self.state = 235 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -1680,9 +1707,9 @@ def whereClause(self): self.enterRule(localctx, 20, self.RULE_whereClause) try: self.enterOuterAlt(localctx, 1) - self.state = 230 + self.state = 237 self.match(HogQLParser.WHERE) - self.state = 231 + self.state = 238 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -1741,31 +1768,31 @@ def groupByClause(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 233 + self.state = 240 self.match(HogQLParser.GROUP) - self.state = 234 - self.match(HogQLParser.BY) self.state = 241 + self.match(HogQLParser.BY) + self.state = 248 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,21,self._ctx) if la_ == 1: - self.state = 235 + self.state = 242 _la = self._input.LA(1) if not(_la==32 or _la==141): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 236 + self.state = 243 self.match(HogQLParser.LPAREN) - self.state = 237 + self.state = 244 self.columnExprList() - self.state = 238 + self.state = 245 self.match(HogQLParser.RPAREN) pass elif la_ == 2: - self.state = 240 + self.state = 247 self.columnExprList() pass @@ -1811,9 +1838,9 @@ def havingClause(self): self.enterRule(localctx, 24, self.RULE_havingClause) try: self.enterOuterAlt(localctx, 1) - self.state = 243 + self.state = 250 self.match(HogQLParser.HAVING) - self.state = 244 + self.state = 251 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -1859,11 +1886,11 @@ def orderByClause(self): self.enterRule(localctx, 26, self.RULE_orderByClause) try: self.enterOuterAlt(localctx, 1) - self.state = 246 + self.state = 253 self.match(HogQLParser.ORDER) - self.state = 247 + self.state = 254 self.match(HogQLParser.BY) - self.state = 248 + self.state = 255 self.orderExprList() except RecognitionException as re: localctx.exception = re @@ -1909,11 +1936,11 @@ def projectionOrderByClause(self): self.enterRule(localctx, 28, self.RULE_projectionOrderByClause) try: self.enterOuterAlt(localctx, 1) - self.state = 250 + self.state = 257 self.match(HogQLParser.ORDER) - self.state = 251 + self.state = 258 self.match(HogQLParser.BY) - self.state = 252 + self.state = 259 self.columnExprList() except RecognitionException as re: localctx.exception = re @@ -1978,38 +2005,38 @@ def limitAndOffsetClause(self): self.enterRule(localctx, 30, self.RULE_limitAndOffsetClause) self._la = 0 # Token type try: - self.state = 283 + self.state = 290 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,26,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 254 + self.state = 261 self.match(HogQLParser.LIMIT) - self.state = 255 + self.state = 262 self.columnExpr(0) - self.state = 258 + self.state = 265 self._errHandler.sync(self) _la = self._input.LA(1) if _la==206: - self.state = 256 + self.state = 263 self.match(HogQLParser.COMMA) - self.state = 257 + self.state = 264 self.columnExpr(0) - self.state = 264 + self.state = 271 self._errHandler.sync(self) token = self._input.LA(1) if token in [189]: - self.state = 260 + self.state = 267 self.match(HogQLParser.WITH) - self.state = 261 + self.state = 268 self.match(HogQLParser.TIES) pass elif token in [18]: - self.state = 262 + self.state = 269 self.match(HogQLParser.BY) - self.state = 263 + self.state = 270 self.columnExprList() pass elif token in [-1, 150, 176, 236]: @@ -2020,43 +2047,43 @@ def limitAndOffsetClause(self): elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 266 + self.state = 273 self.match(HogQLParser.LIMIT) - self.state = 267 + self.state = 274 self.columnExpr(0) - self.state = 270 + self.state = 277 self._errHandler.sync(self) _la = self._input.LA(1) if _la==189: - self.state = 268 + self.state = 275 self.match(HogQLParser.WITH) - self.state = 269 + self.state = 276 self.match(HogQLParser.TIES) - self.state = 272 + self.state = 279 self.match(HogQLParser.OFFSET) - self.state = 273 + self.state = 280 self.columnExpr(0) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 275 + self.state = 282 self.match(HogQLParser.LIMIT) - self.state = 276 + self.state = 283 self.columnExpr(0) - self.state = 277 + self.state = 284 self.match(HogQLParser.OFFSET) - self.state = 278 + self.state = 285 self.columnExpr(0) - self.state = 281 + self.state = 288 self._errHandler.sync(self) _la = self._input.LA(1) if _la==18: - self.state = 279 + self.state = 286 self.match(HogQLParser.BY) - self.state = 280 + self.state = 287 self.columnExprList() @@ -2104,9 +2131,9 @@ def offsetOnlyClause(self): self.enterRule(localctx, 32, self.RULE_offsetOnlyClause) try: self.enterOuterAlt(localctx, 1) - self.state = 285 + self.state = 292 self.match(HogQLParser.OFFSET) - self.state = 286 + self.state = 293 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -2149,9 +2176,9 @@ def settingsClause(self): self.enterRule(localctx, 34, self.RULE_settingsClause) try: self.enterOuterAlt(localctx, 1) - self.state = 288 + self.state = 295 self.match(HogQLParser.SETTINGS) - self.state = 289 + self.state = 296 self.settingExprList() except RecognitionException as re: localctx.exception = re @@ -2283,7 +2310,7 @@ def joinExpr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 303 + self.state = 310 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,29,self._ctx) if la_ == 1: @@ -2291,21 +2318,21 @@ def joinExpr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 292 + self.state = 299 self.tableExpr(0) - self.state = 294 + self.state = 301 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,27,self._ctx) if la_ == 1: - self.state = 293 + self.state = 300 self.match(HogQLParser.FINAL) - self.state = 297 + self.state = 304 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,28,self._ctx) if la_ == 1: - self.state = 296 + self.state = 303 self.sampleClause() @@ -2315,17 +2342,17 @@ def joinExpr(self, _p:int=0): localctx = HogQLParser.JoinExprParensContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 299 + self.state = 306 self.match(HogQLParser.LPAREN) - self.state = 300 + self.state = 307 self.joinExpr(0) - self.state = 301 + self.state = 308 self.match(HogQLParser.RPAREN) pass self._ctx.stop = self._input.LT(-1) - self.state = 319 + self.state = 326 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,32,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -2333,47 +2360,47 @@ def joinExpr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 317 + self.state = 324 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,31,self._ctx) if la_ == 1: localctx = HogQLParser.JoinExprCrossOpContext(self, HogQLParser.JoinExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_joinExpr) - self.state = 305 + self.state = 312 if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") - self.state = 306 + self.state = 313 self.joinOpCross() - self.state = 307 + self.state = 314 self.joinExpr(4) pass elif la_ == 2: localctx = HogQLParser.JoinExprOpContext(self, HogQLParser.JoinExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_joinExpr) - self.state = 309 + self.state = 316 if not self.precpred(self._ctx, 4): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 4)") - self.state = 311 + self.state = 318 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4496) != 0) or ((((_la - 69)) & ~0x3f) == 0 and ((1 << (_la - 69)) & 134250497) != 0) or _la==140 or _la==147: - self.state = 310 + self.state = 317 self.joinOp() - self.state = 313 + self.state = 320 self.match(HogQLParser.JOIN) - self.state = 314 + self.state = 321 self.joinExpr(0) - self.state = 315 + self.state = 322 self.joinConstraintClause() pass - self.state = 321 + self.state = 328 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,32,self._ctx) @@ -2484,21 +2511,21 @@ def joinOp(self): self.enterRule(localctx, 38, self.RULE_joinOp) self._la = 0 # Token type try: - self.state = 365 + self.state = 372 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,46,self._ctx) if la_ == 1: localctx = HogQLParser.JoinOpInnerContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 331 + self.state = 338 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,35,self._ctx) if la_ == 1: - self.state = 323 + self.state = 330 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4368) != 0): - self.state = 322 + self.state = 329 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4368) != 0)): self._errHandler.recoverInline(self) @@ -2507,18 +2534,18 @@ def joinOp(self): self.consume() - self.state = 325 + self.state = 332 self.match(HogQLParser.INNER) pass elif la_ == 2: - self.state = 326 + self.state = 333 self.match(HogQLParser.INNER) - self.state = 328 + self.state = 335 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4368) != 0): - self.state = 327 + self.state = 334 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4368) != 0)): self._errHandler.recoverInline(self) @@ -2530,7 +2557,7 @@ def joinOp(self): pass elif la_ == 3: - self.state = 330 + self.state = 337 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4368) != 0)): self._errHandler.recoverInline(self) @@ -2545,15 +2572,15 @@ def joinOp(self): elif la_ == 2: localctx = HogQLParser.JoinOpLeftRightContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 347 + self.state = 354 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,40,self._ctx) if la_ == 1: - self.state = 334 + self.state = 341 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4496) != 0) or _la==147: - self.state = 333 + self.state = 340 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4496) != 0) or _la==147): self._errHandler.recoverInline(self) @@ -2562,44 +2589,44 @@ def joinOp(self): self.consume() - self.state = 336 + self.state = 343 _la = self._input.LA(1) if not(_la==96 or _la==140): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 338 + self.state = 345 self._errHandler.sync(self) _la = self._input.LA(1) if _la==123: - self.state = 337 + self.state = 344 self.match(HogQLParser.OUTER) pass elif la_ == 2: - self.state = 340 + self.state = 347 _la = self._input.LA(1) if not(_la==96 or _la==140): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 342 + self.state = 349 self._errHandler.sync(self) _la = self._input.LA(1) if _la==123: - self.state = 341 + self.state = 348 self.match(HogQLParser.OUTER) - self.state = 345 + self.state = 352 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & 4496) != 0) or _la==147: - self.state = 344 + self.state = 351 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 4496) != 0) or _la==147): self._errHandler.recoverInline(self) @@ -2616,15 +2643,15 @@ def joinOp(self): elif la_ == 3: localctx = HogQLParser.JoinOpFullContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 363 + self.state = 370 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,45,self._ctx) if la_ == 1: - self.state = 350 + self.state = 357 self._errHandler.sync(self) _la = self._input.LA(1) if _la==4 or _la==8: - self.state = 349 + self.state = 356 _la = self._input.LA(1) if not(_la==4 or _la==8): self._errHandler.recoverInline(self) @@ -2633,34 +2660,34 @@ def joinOp(self): self.consume() - self.state = 352 + self.state = 359 self.match(HogQLParser.FULL) - self.state = 354 + self.state = 361 self._errHandler.sync(self) _la = self._input.LA(1) if _la==123: - self.state = 353 + self.state = 360 self.match(HogQLParser.OUTER) pass elif la_ == 2: - self.state = 356 + self.state = 363 self.match(HogQLParser.FULL) - self.state = 358 + self.state = 365 self._errHandler.sync(self) _la = self._input.LA(1) if _la==123: - self.state = 357 + self.state = 364 self.match(HogQLParser.OUTER) - self.state = 361 + self.state = 368 self._errHandler.sync(self) _la = self._input.LA(1) if _la==4 or _la==8: - self.state = 360 + self.state = 367 _la = self._input.LA(1) if not(_la==4 or _la==8): self._errHandler.recoverInline(self) @@ -2717,19 +2744,19 @@ def joinOpCross(self): localctx = HogQLParser.JoinOpCrossContext(self, self._ctx, self.state) self.enterRule(localctx, 40, self.RULE_joinOpCross) try: - self.state = 370 + self.state = 377 self._errHandler.sync(self) token = self._input.LA(1) if token in [31]: self.enterOuterAlt(localctx, 1) - self.state = 367 + self.state = 374 self.match(HogQLParser.CROSS) - self.state = 368 + self.state = 375 self.match(HogQLParser.JOIN) pass elif token in [206]: self.enterOuterAlt(localctx, 2) - self.state = 369 + self.state = 376 self.match(HogQLParser.COMMA) pass else: @@ -2784,34 +2811,34 @@ def joinConstraintClause(self): localctx = HogQLParser.JoinConstraintClauseContext(self, self._ctx, self.state) self.enterRule(localctx, 42, self.RULE_joinConstraintClause) try: - self.state = 381 + self.state = 388 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,48,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 372 + self.state = 379 self.match(HogQLParser.ON) - self.state = 373 + self.state = 380 self.columnExprList() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 374 + self.state = 381 self.match(HogQLParser.USING) - self.state = 375 + self.state = 382 self.match(HogQLParser.LPAREN) - self.state = 376 + self.state = 383 self.columnExprList() - self.state = 377 + self.state = 384 self.match(HogQLParser.RPAREN) pass elif la_ == 3: self.enterOuterAlt(localctx, 3) - self.state = 379 + self.state = 386 self.match(HogQLParser.USING) - self.state = 380 + self.state = 387 self.columnExprList() pass @@ -2863,17 +2890,17 @@ def sampleClause(self): self.enterRule(localctx, 44, self.RULE_sampleClause) try: self.enterOuterAlt(localctx, 1) - self.state = 383 + self.state = 390 self.match(HogQLParser.SAMPLE) - self.state = 384 + self.state = 391 self.ratioExpr() - self.state = 387 + self.state = 394 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,49,self._ctx) if la_ == 1: - self.state = 385 + self.state = 392 self.match(HogQLParser.OFFSET) - self.state = 386 + self.state = 393 self.ratioExpr() @@ -2925,17 +2952,17 @@ def orderExprList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 389 + self.state = 396 self.orderExpr() - self.state = 394 + self.state = 401 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 390 + self.state = 397 self.match(HogQLParser.COMMA) - self.state = 391 + self.state = 398 self.orderExpr() - self.state = 396 + self.state = 403 self._errHandler.sync(self) _la = self._input.LA(1) @@ -3002,13 +3029,13 @@ def orderExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 397 + self.state = 404 self.columnExpr(0) - self.state = 399 + self.state = 406 self._errHandler.sync(self) _la = self._input.LA(1) if (((_la) & ~0x3f) == 0 and ((1 << _la) & 13194139535360) != 0): - self.state = 398 + self.state = 405 _la = self._input.LA(1) if not((((_la) & ~0x3f) == 0 and ((1 << _la) & 13194139535360) != 0)): self._errHandler.recoverInline(self) @@ -3017,13 +3044,13 @@ def orderExpr(self): self.consume() - self.state = 403 + self.state = 410 self._errHandler.sync(self) _la = self._input.LA(1) if _la==117: - self.state = 401 + self.state = 408 self.match(HogQLParser.NULLS) - self.state = 402 + self.state = 409 _la = self._input.LA(1) if not(_la==62 or _la==93): self._errHandler.recoverInline(self) @@ -3032,13 +3059,13 @@ def orderExpr(self): self.consume() - self.state = 407 + self.state = 414 self._errHandler.sync(self) _la = self._input.LA(1) if _la==26: - self.state = 405 + self.state = 412 self.match(HogQLParser.COLLATE) - self.state = 406 + self.state = 413 self.match(HogQLParser.STRING_LITERAL) @@ -3058,8 +3085,9 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def PLACEHOLDER(self): - return self.getToken(HogQLParser.PLACEHOLDER, 0) + def placeholder(self): + return self.getTypedRuleContext(HogQLParser.PlaceholderContext,0) + def numberLiteral(self, i:int=None): if i is None: @@ -3088,25 +3116,25 @@ def ratioExpr(self): localctx = HogQLParser.RatioExprContext(self, self._ctx, self.state) self.enterRule(localctx, 50, self.RULE_ratioExpr) try: - self.state = 415 + self.state = 422 self._errHandler.sync(self) token = self._input.LA(1) - if token in [200]: + if token in [218]: self.enterOuterAlt(localctx, 1) - self.state = 409 - self.match(HogQLParser.PLACEHOLDER) + self.state = 416 + self.placeholder() pass - elif token in [82, 113, 195, 196, 197, 198, 208, 210, 228]: + elif token in [82, 113, 196, 197, 198, 199, 208, 210, 228]: self.enterOuterAlt(localctx, 2) - self.state = 410 + self.state = 417 self.numberLiteral() - self.state = 413 + self.state = 420 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,54,self._ctx) if la_ == 1: - self.state = 411 + self.state = 418 self.match(HogQLParser.SLASH) - self.state = 412 + self.state = 419 self.numberLiteral() @@ -3162,17 +3190,17 @@ def settingExprList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 417 + self.state = 424 self.settingExpr() - self.state = 422 + self.state = 429 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 418 + self.state = 425 self.match(HogQLParser.COMMA) - self.state = 419 + self.state = 426 self.settingExpr() - self.state = 424 + self.state = 431 self._errHandler.sync(self) _la = self._input.LA(1) @@ -3221,11 +3249,11 @@ def settingExpr(self): self.enterRule(localctx, 54, self.RULE_settingExpr) try: self.enterOuterAlt(localctx, 1) - self.state = 425 + self.state = 432 self.identifier() - self.state = 426 + self.state = 433 self.match(HogQLParser.EQ_SINGLE) - self.state = 427 + self.state = 434 self.literal() except RecognitionException as re: localctx.exception = re @@ -3274,27 +3302,27 @@ def windowExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 430 + self.state = 437 self._errHandler.sync(self) _la = self._input.LA(1) if _la==126: - self.state = 429 + self.state = 436 self.winPartitionByClause() - self.state = 433 + self.state = 440 self._errHandler.sync(self) _la = self._input.LA(1) if _la==122: - self.state = 432 + self.state = 439 self.winOrderByClause() - self.state = 436 + self.state = 443 self._errHandler.sync(self) _la = self._input.LA(1) if _la==133 or _la==143: - self.state = 435 + self.state = 442 self.winFrameClause() @@ -3342,11 +3370,11 @@ def winPartitionByClause(self): self.enterRule(localctx, 58, self.RULE_winPartitionByClause) try: self.enterOuterAlt(localctx, 1) - self.state = 438 + self.state = 445 self.match(HogQLParser.PARTITION) - self.state = 439 + self.state = 446 self.match(HogQLParser.BY) - self.state = 440 + self.state = 447 self.columnExprList() except RecognitionException as re: localctx.exception = re @@ -3392,11 +3420,11 @@ def winOrderByClause(self): self.enterRule(localctx, 60, self.RULE_winOrderByClause) try: self.enterOuterAlt(localctx, 1) - self.state = 442 + self.state = 449 self.match(HogQLParser.ORDER) - self.state = 443 + self.state = 450 self.match(HogQLParser.BY) - self.state = 444 + self.state = 451 self.orderExprList() except RecognitionException as re: localctx.exception = re @@ -3443,14 +3471,14 @@ def winFrameClause(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 446 + self.state = 453 _la = self._input.LA(1) if not(_la==133 or _la==143): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 447 + self.state = 454 self.winFrameExtend() except RecognitionException as re: localctx.exception = re @@ -3525,25 +3553,25 @@ def winFrameExtend(self): localctx = HogQLParser.WinFrameExtendContext(self, self._ctx, self.state) self.enterRule(localctx, 64, self.RULE_winFrameExtend) try: - self.state = 455 + self.state = 462 self._errHandler.sync(self) token = self._input.LA(1) - if token in [33, 82, 113, 175, 195, 196, 197, 198, 208, 210, 228]: + if token in [33, 82, 113, 175, 196, 197, 198, 199, 208, 210, 228]: localctx = HogQLParser.FrameStartContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 449 + self.state = 456 self.winFrameBound() pass elif token in [16]: localctx = HogQLParser.FrameBetweenContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 450 + self.state = 457 self.match(HogQLParser.BETWEEN) - self.state = 451 + self.state = 458 self.winFrameBound() - self.state = 452 + self.state = 459 self.match(HogQLParser.AND) - self.state = 453 + self.state = 460 self.winFrameBound() pass else: @@ -3602,41 +3630,41 @@ def winFrameBound(self): self.enterRule(localctx, 66, self.RULE_winFrameBound) try: self.enterOuterAlt(localctx, 1) - self.state = 469 + self.state = 476 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,61,self._ctx) if la_ == 1: - self.state = 457 + self.state = 464 self.match(HogQLParser.CURRENT) - self.state = 458 + self.state = 465 self.match(HogQLParser.ROW) pass elif la_ == 2: - self.state = 459 + self.state = 466 self.match(HogQLParser.UNBOUNDED) - self.state = 460 + self.state = 467 self.match(HogQLParser.PRECEDING) pass elif la_ == 3: - self.state = 461 + self.state = 468 self.match(HogQLParser.UNBOUNDED) - self.state = 462 + self.state = 469 self.match(HogQLParser.FOLLOWING) pass elif la_ == 4: - self.state = 463 + self.state = 470 self.numberLiteral() - self.state = 464 + self.state = 471 self.match(HogQLParser.PRECEDING) pass elif la_ == 5: - self.state = 466 + self.state = 473 self.numberLiteral() - self.state = 467 + self.state = 474 self.match(HogQLParser.FOLLOWING) pass @@ -3682,9 +3710,9 @@ def expr(self): self.enterRule(localctx, 68, self.RULE_expr) try: self.enterOuterAlt(localctx, 1) - self.state = 471 + self.state = 478 self.columnExpr(0) - self.state = 472 + self.state = 479 self.match(HogQLParser.EOF) except RecognitionException as re: localctx.exception = re @@ -3859,111 +3887,111 @@ def columnTypeExpr(self): self.enterRule(localctx, 70, self.RULE_columnTypeExpr) self._la = 0 # Token type try: - self.state = 521 + self.state = 528 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,66,self._ctx) if la_ == 1: localctx = HogQLParser.ColumnTypeExprSimpleContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 474 + self.state = 481 self.identifier() pass elif la_ == 2: localctx = HogQLParser.ColumnTypeExprNestedContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 475 + self.state = 482 self.identifier() - self.state = 476 + self.state = 483 self.match(HogQLParser.LPAREN) - self.state = 477 + self.state = 484 self.identifier() - self.state = 478 - self.columnTypeExpr() self.state = 485 + self.columnTypeExpr() + self.state = 492 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 479 + self.state = 486 self.match(HogQLParser.COMMA) - self.state = 480 + self.state = 487 self.identifier() - self.state = 481 + self.state = 488 self.columnTypeExpr() - self.state = 487 + self.state = 494 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 488 + self.state = 495 self.match(HogQLParser.RPAREN) pass elif la_ == 3: localctx = HogQLParser.ColumnTypeExprEnumContext(self, localctx) self.enterOuterAlt(localctx, 3) - self.state = 490 + self.state = 497 self.identifier() - self.state = 491 + self.state = 498 self.match(HogQLParser.LPAREN) - self.state = 492 + self.state = 499 self.enumValue() - self.state = 497 + self.state = 504 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 493 + self.state = 500 self.match(HogQLParser.COMMA) - self.state = 494 + self.state = 501 self.enumValue() - self.state = 499 + self.state = 506 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 500 + self.state = 507 self.match(HogQLParser.RPAREN) pass elif la_ == 4: localctx = HogQLParser.ColumnTypeExprComplexContext(self, localctx) self.enterOuterAlt(localctx, 4) - self.state = 502 + self.state = 509 self.identifier() - self.state = 503 + self.state = 510 self.match(HogQLParser.LPAREN) - self.state = 504 + self.state = 511 self.columnTypeExpr() - self.state = 509 + self.state = 516 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 505 + self.state = 512 self.match(HogQLParser.COMMA) - self.state = 506 + self.state = 513 self.columnTypeExpr() - self.state = 511 + self.state = 518 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 512 + self.state = 519 self.match(HogQLParser.RPAREN) pass elif la_ == 5: localctx = HogQLParser.ColumnTypeExprParamContext(self, localctx) self.enterOuterAlt(localctx, 5) - self.state = 514 + self.state = 521 self.identifier() - self.state = 515 + self.state = 522 self.match(HogQLParser.LPAREN) - self.state = 517 + self.state = 524 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 516 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): + self.state = 523 self.columnExprList() - self.state = 519 + self.state = 526 self.match(HogQLParser.RPAREN) pass @@ -4015,18 +4043,18 @@ def columnExprList(self): self.enterRule(localctx, 72, self.RULE_columnExprList) try: self.enterOuterAlt(localctx, 1) - self.state = 523 + self.state = 530 self.columnExpr(0) - self.state = 528 + self.state = 535 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,67,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 524 + self.state = 531 self.match(HogQLParser.COMMA) - self.state = 525 + self.state = 532 self.columnExpr(0) - self.state = 530 + self.state = 537 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,67,self._ctx) @@ -4516,6 +4544,23 @@ def accept(self, visitor:ParseTreeVisitor): return visitor.visitChildren(self) + class ColumnExprTagElementContext(ColumnExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def hogqlxTagElement(self): + return self.getTypedRuleContext(HogQLParser.HogqlxTagElementContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitColumnExprTagElement" ): + return visitor.visitColumnExprTagElement(self) + else: + return visitor.visitChildren(self) + + class ColumnExprTupleContext(ColumnExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.ColumnExprContext @@ -4909,7 +4954,7 @@ def columnExpr(self, _p:int=0): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 660 + self.state = 668 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,80,self._ctx) if la_ == 1: @@ -4917,45 +4962,45 @@ def columnExpr(self, _p:int=0): self._ctx = localctx _prevctx = localctx - self.state = 532 + self.state = 539 self.match(HogQLParser.CASE) - self.state = 534 + self.state = 541 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,68,self._ctx) if la_ == 1: - self.state = 533 + self.state = 540 localctx.caseExpr = self.columnExpr(0) - self.state = 541 + self.state = 548 self._errHandler.sync(self) _la = self._input.LA(1) while True: - self.state = 536 + self.state = 543 self.match(HogQLParser.WHEN) - self.state = 537 + self.state = 544 localctx.whenExpr = self.columnExpr(0) - self.state = 538 + self.state = 545 self.match(HogQLParser.THEN) - self.state = 539 + self.state = 546 localctx.thenExpr = self.columnExpr(0) - self.state = 543 + self.state = 550 self._errHandler.sync(self) _la = self._input.LA(1) if not (_la==186): break - self.state = 547 + self.state = 554 self._errHandler.sync(self) _la = self._input.LA(1) if _la==52: - self.state = 545 + self.state = 552 self.match(HogQLParser.ELSE) - self.state = 546 + self.state = 553 localctx.elseExpr = self.columnExpr(0) - self.state = 549 + self.state = 556 self.match(HogQLParser.END) pass @@ -4963,17 +5008,17 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprCastContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 551 + self.state = 558 self.match(HogQLParser.CAST) - self.state = 552 + self.state = 559 self.match(HogQLParser.LPAREN) - self.state = 553 + self.state = 560 self.columnExpr(0) - self.state = 554 + self.state = 561 self.match(HogQLParser.AS) - self.state = 555 + self.state = 562 self.columnTypeExpr() - self.state = 556 + self.state = 563 self.match(HogQLParser.RPAREN) pass @@ -4981,9 +5026,9 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprDateContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 558 + self.state = 565 self.match(HogQLParser.DATE) - self.state = 559 + self.state = 566 self.match(HogQLParser.STRING_LITERAL) pass @@ -4991,17 +5036,17 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprExtractContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 560 + self.state = 567 self.match(HogQLParser.EXTRACT) - self.state = 561 + self.state = 568 self.match(HogQLParser.LPAREN) - self.state = 562 + self.state = 569 self.interval() - self.state = 563 + self.state = 570 self.match(HogQLParser.FROM) - self.state = 564 + self.state = 571 self.columnExpr(0) - self.state = 565 + self.state = 572 self.match(HogQLParser.RPAREN) pass @@ -5009,11 +5054,11 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprIntervalContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 567 + self.state = 574 self.match(HogQLParser.INTERVAL) - self.state = 568 + self.state = 575 self.columnExpr(0) - self.state = 569 + self.state = 576 self.interval() pass @@ -5021,27 +5066,27 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprSubstringContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 571 + self.state = 578 self.match(HogQLParser.SUBSTRING) - self.state = 572 + self.state = 579 self.match(HogQLParser.LPAREN) - self.state = 573 + self.state = 580 self.columnExpr(0) - self.state = 574 + self.state = 581 self.match(HogQLParser.FROM) - self.state = 575 + self.state = 582 self.columnExpr(0) - self.state = 578 + self.state = 585 self._errHandler.sync(self) _la = self._input.LA(1) if _la==65: - self.state = 576 + self.state = 583 self.match(HogQLParser.FOR) - self.state = 577 + self.state = 584 self.columnExpr(0) - self.state = 580 + self.state = 587 self.match(HogQLParser.RPAREN) pass @@ -5049,9 +5094,9 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprTimestampContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 582 + self.state = 589 self.match(HogQLParser.TIMESTAMP) - self.state = 583 + self.state = 590 self.match(HogQLParser.STRING_LITERAL) pass @@ -5059,24 +5104,24 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprTrimContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 584 + self.state = 591 self.match(HogQLParser.TRIM) - self.state = 585 + self.state = 592 self.match(HogQLParser.LPAREN) - self.state = 586 + self.state = 593 _la = self._input.LA(1) if not(_la==17 or _la==95 or _la==170): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() - self.state = 587 + self.state = 594 self.match(HogQLParser.STRING_LITERAL) - self.state = 588 + self.state = 595 self.match(HogQLParser.FROM) - self.state = 589 + self.state = 596 self.columnExpr(0) - self.state = 590 + self.state = 597 self.match(HogQLParser.RPAREN) pass @@ -5084,28 +5129,28 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprWinFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 592 + self.state = 599 self.identifier() - self.state = 593 + self.state = 600 self.match(HogQLParser.LPAREN) - self.state = 595 + self.state = 602 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 594 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): + self.state = 601 self.columnExprList() - self.state = 597 + self.state = 604 self.match(HogQLParser.RPAREN) - self.state = 599 + self.state = 606 self.match(HogQLParser.OVER) - self.state = 600 + self.state = 607 self.match(HogQLParser.LPAREN) - self.state = 601 + self.state = 608 self.windowExpr() - self.state = 602 + self.state = 609 self.match(HogQLParser.RPAREN) pass @@ -5113,24 +5158,24 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprWinFunctionTargetContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 604 + self.state = 611 self.identifier() - self.state = 605 + self.state = 612 self.match(HogQLParser.LPAREN) - self.state = 607 + self.state = 614 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 606 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): + self.state = 613 self.columnExprList() - self.state = 609 + self.state = 616 self.match(HogQLParser.RPAREN) - self.state = 611 + self.state = 618 self.match(HogQLParser.OVER) - self.state = 612 + self.state = 619 self.identifier() pass @@ -5138,159 +5183,167 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 614 + self.state = 621 self.identifier() - self.state = 620 + self.state = 627 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,75,self._ctx) if la_ == 1: - self.state = 615 + self.state = 622 self.match(HogQLParser.LPAREN) - self.state = 617 + self.state = 624 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 616 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): + self.state = 623 self.columnExprList() - self.state = 619 + self.state = 626 self.match(HogQLParser.RPAREN) - self.state = 622 + self.state = 629 self.match(HogQLParser.LPAREN) - self.state = 624 + self.state = 631 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,76,self._ctx) if la_ == 1: - self.state = 623 + self.state = 630 self.match(HogQLParser.DISTINCT) - self.state = 627 + self.state = 634 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 626 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): + self.state = 633 self.columnArgList() - self.state = 629 + self.state = 636 self.match(HogQLParser.RPAREN) pass elif la_ == 12: + localctx = HogQLParser.ColumnExprTagElementContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 638 + self.hogqlxTagElement() + pass + + elif la_ == 13: localctx = HogQLParser.ColumnExprLiteralContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 631 + self.state = 639 self.literal() pass - elif la_ == 13: + elif la_ == 14: localctx = HogQLParser.ColumnExprNegateContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 632 + self.state = 640 self.match(HogQLParser.DASH) - self.state = 633 + self.state = 641 self.columnExpr(18) pass - elif la_ == 14: + elif la_ == 15: localctx = HogQLParser.ColumnExprNotContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 634 + self.state = 642 self.match(HogQLParser.NOT) - self.state = 635 + self.state = 643 self.columnExpr(12) pass - elif la_ == 15: + elif la_ == 16: localctx = HogQLParser.ColumnExprAsteriskContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 639 + self.state = 647 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -5066549581053953) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or _la==192 or _la==194: - self.state = 636 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -5066549581053953) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or _la==192 or _la==195: + self.state = 644 self.tableIdentifier() - self.state = 637 + self.state = 645 self.match(HogQLParser.DOT) - self.state = 641 + self.state = 649 self.match(HogQLParser.ASTERISK) pass - elif la_ == 16: + elif la_ == 17: localctx = HogQLParser.ColumnExprSubqueryContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 642 + self.state = 650 self.match(HogQLParser.LPAREN) - self.state = 643 + self.state = 651 self.selectUnionStmt() - self.state = 644 + self.state = 652 self.match(HogQLParser.RPAREN) pass - elif la_ == 17: + elif la_ == 18: localctx = HogQLParser.ColumnExprParensContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 646 + self.state = 654 self.match(HogQLParser.LPAREN) - self.state = 647 + self.state = 655 self.columnExpr(0) - self.state = 648 + self.state = 656 self.match(HogQLParser.RPAREN) pass - elif la_ == 18: + elif la_ == 19: localctx = HogQLParser.ColumnExprTupleContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 650 + self.state = 658 self.match(HogQLParser.LPAREN) - self.state = 651 + self.state = 659 self.columnExprList() - self.state = 652 + self.state = 660 self.match(HogQLParser.RPAREN) pass - elif la_ == 19: + elif la_ == 20: localctx = HogQLParser.ColumnExprArrayContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 654 + self.state = 662 self.match(HogQLParser.LBRACKET) - self.state = 656 + self.state = 664 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 655 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): + self.state = 663 self.columnExprList() - self.state = 658 + self.state = 666 self.match(HogQLParser.RBRACKET) pass - elif la_ == 20: + elif la_ == 21: localctx = HogQLParser.ColumnExprIdentifierContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 659 + self.state = 667 self.columnIdentifier() pass self._ctx.stop = self._input.LT(-1) - self.state = 755 + self.state = 763 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,91,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: @@ -5298,36 +5351,36 @@ def columnExpr(self, _p:int=0): if self._parseListeners is not None: self.triggerExitRuleEvent() _prevctx = localctx - self.state = 753 + self.state = 761 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,90,self._ctx) if la_ == 1: localctx = HogQLParser.ColumnExprPrecedence1Context(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 662 + self.state = 670 if not self.precpred(self._ctx, 17): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 17)") - self.state = 666 + self.state = 674 self._errHandler.sync(self) token = self._input.LA(1) if token in [202]: - self.state = 663 + self.state = 671 localctx.operator = self.match(HogQLParser.ASTERISK) pass elif token in [238]: - self.state = 664 + self.state = 672 localctx.operator = self.match(HogQLParser.SLASH) pass elif token in [227]: - self.state = 665 + self.state = 673 localctx.operator = self.match(HogQLParser.PERCENT) pass else: raise NoViableAltException(self) - self.state = 668 + self.state = 676 localctx.right = self.columnExpr(18) pass @@ -5335,29 +5388,29 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprPrecedence2Context(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 669 + self.state = 677 if not self.precpred(self._ctx, 16): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 16)") - self.state = 673 + self.state = 681 self._errHandler.sync(self) token = self._input.LA(1) if token in [228]: - self.state = 670 + self.state = 678 localctx.operator = self.match(HogQLParser.PLUS) pass elif token in [208]: - self.state = 671 + self.state = 679 localctx.operator = self.match(HogQLParser.DASH) pass elif token in [207]: - self.state = 672 + self.state = 680 localctx.operator = self.match(HogQLParser.CONCAT) pass else: raise NoViableAltException(self) - self.state = 675 + self.state = 683 localctx.right = self.columnExpr(17) pass @@ -5365,79 +5418,79 @@ def columnExpr(self, _p:int=0): localctx = HogQLParser.ColumnExprPrecedence3Context(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) localctx.left = _prevctx self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 676 + self.state = 684 if not self.precpred(self._ctx, 15): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 15)") - self.state = 701 + self.state = 709 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,86,self._ctx) if la_ == 1: - self.state = 677 + self.state = 685 localctx.operator = self.match(HogQLParser.EQ_DOUBLE) pass elif la_ == 2: - self.state = 678 + self.state = 686 localctx.operator = self.match(HogQLParser.EQ_SINGLE) pass elif la_ == 3: - self.state = 679 + self.state = 687 localctx.operator = self.match(HogQLParser.NOT_EQ) pass elif la_ == 4: - self.state = 680 + self.state = 688 localctx.operator = self.match(HogQLParser.LT_EQ) pass elif la_ == 5: - self.state = 681 + self.state = 689 localctx.operator = self.match(HogQLParser.LT) pass elif la_ == 6: - self.state = 682 + self.state = 690 localctx.operator = self.match(HogQLParser.GT_EQ) pass elif la_ == 7: - self.state = 683 + self.state = 691 localctx.operator = self.match(HogQLParser.GT) pass elif la_ == 8: - self.state = 685 + self.state = 693 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 684 + self.state = 692 localctx.operator = self.match(HogQLParser.NOT) - self.state = 687 + self.state = 695 self.match(HogQLParser.IN) - self.state = 689 + self.state = 697 self._errHandler.sync(self) _la = self._input.LA(1) if _la==25: - self.state = 688 + self.state = 696 self.match(HogQLParser.COHORT) pass elif la_ == 9: - self.state = 692 + self.state = 700 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 691 + self.state = 699 localctx.operator = self.match(HogQLParser.NOT) - self.state = 694 + self.state = 702 _la = self._input.LA(1) if not(_la==79 or _la==98): self._errHandler.recoverInline(self) @@ -5447,209 +5500,209 @@ def columnExpr(self, _p:int=0): pass elif la_ == 10: - self.state = 695 + self.state = 703 localctx.operator = self.match(HogQLParser.REGEX_SINGLE) pass elif la_ == 11: - self.state = 696 + self.state = 704 localctx.operator = self.match(HogQLParser.REGEX_DOUBLE) pass elif la_ == 12: - self.state = 697 + self.state = 705 localctx.operator = self.match(HogQLParser.NOT_REGEX) pass elif la_ == 13: - self.state = 698 + self.state = 706 localctx.operator = self.match(HogQLParser.IREGEX_SINGLE) pass elif la_ == 14: - self.state = 699 + self.state = 707 localctx.operator = self.match(HogQLParser.IREGEX_DOUBLE) pass elif la_ == 15: - self.state = 700 + self.state = 708 localctx.operator = self.match(HogQLParser.NOT_IREGEX) pass - self.state = 703 + self.state = 711 localctx.right = self.columnExpr(16) pass elif la_ == 4: localctx = HogQLParser.ColumnExprNullishContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 704 + self.state = 712 if not self.precpred(self._ctx, 13): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 13)") - self.state = 705 + self.state = 713 self.match(HogQLParser.NULLISH) - self.state = 706 + self.state = 714 self.columnExpr(14) pass elif la_ == 5: localctx = HogQLParser.ColumnExprAndContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 707 + self.state = 715 if not self.precpred(self._ctx, 11): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 11)") - self.state = 708 + self.state = 716 self.match(HogQLParser.AND) - self.state = 709 + self.state = 717 self.columnExpr(12) pass elif la_ == 6: localctx = HogQLParser.ColumnExprOrContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 710 + self.state = 718 if not self.precpred(self._ctx, 10): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 10)") - self.state = 711 + self.state = 719 self.match(HogQLParser.OR) - self.state = 712 + self.state = 720 self.columnExpr(11) pass elif la_ == 7: localctx = HogQLParser.ColumnExprBetweenContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 713 + self.state = 721 if not self.precpred(self._ctx, 9): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 9)") - self.state = 715 + self.state = 723 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 714 + self.state = 722 self.match(HogQLParser.NOT) - self.state = 717 + self.state = 725 self.match(HogQLParser.BETWEEN) - self.state = 718 + self.state = 726 self.columnExpr(0) - self.state = 719 + self.state = 727 self.match(HogQLParser.AND) - self.state = 720 + self.state = 728 self.columnExpr(10) pass elif la_ == 8: localctx = HogQLParser.ColumnExprTernaryOpContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 722 + self.state = 730 if not self.precpred(self._ctx, 8): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 8)") - self.state = 723 + self.state = 731 self.match(HogQLParser.QUERY) - self.state = 724 + self.state = 732 self.columnExpr(0) - self.state = 725 + self.state = 733 self.match(HogQLParser.COLON) - self.state = 726 + self.state = 734 self.columnExpr(8) pass elif la_ == 9: localctx = HogQLParser.ColumnExprArrayAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 728 + self.state = 736 if not self.precpred(self._ctx, 21): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 21)") - self.state = 729 + self.state = 737 self.match(HogQLParser.LBRACKET) - self.state = 730 + self.state = 738 self.columnExpr(0) - self.state = 731 + self.state = 739 self.match(HogQLParser.RBRACKET) pass elif la_ == 10: localctx = HogQLParser.ColumnExprTupleAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 733 + self.state = 741 if not self.precpred(self._ctx, 20): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 20)") - self.state = 734 + self.state = 742 self.match(HogQLParser.DOT) - self.state = 735 + self.state = 743 self.match(HogQLParser.DECIMAL_LITERAL) pass elif la_ == 11: localctx = HogQLParser.ColumnExprPropertyAccessContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 736 + self.state = 744 if not self.precpred(self._ctx, 19): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 19)") - self.state = 737 + self.state = 745 self.match(HogQLParser.DOT) - self.state = 738 + self.state = 746 self.identifier() pass elif la_ == 12: localctx = HogQLParser.ColumnExprIsNullContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 739 + self.state = 747 if not self.precpred(self._ctx, 14): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 14)") - self.state = 740 + self.state = 748 self.match(HogQLParser.IS) - self.state = 742 + self.state = 750 self._errHandler.sync(self) _la = self._input.LA(1) if _la==115: - self.state = 741 + self.state = 749 self.match(HogQLParser.NOT) - self.state = 744 + self.state = 752 self.match(HogQLParser.NULL_SQL) pass elif la_ == 13: localctx = HogQLParser.ColumnExprAliasContext(self, HogQLParser.ColumnExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_columnExpr) - self.state = 745 + self.state = 753 if not self.precpred(self._ctx, 7): from antlr4.error.Errors import FailedPredicateException raise FailedPredicateException(self, "self.precpred(self._ctx, 7)") - self.state = 751 + self.state = 759 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,89,self._ctx) if la_ == 1: - self.state = 746 + self.state = 754 self.alias() pass elif la_ == 2: - self.state = 747 + self.state = 755 self.match(HogQLParser.AS) - self.state = 748 + self.state = 756 self.identifier() pass elif la_ == 3: - self.state = 749 + self.state = 757 self.match(HogQLParser.AS) - self.state = 750 + self.state = 758 self.match(HogQLParser.STRING_LITERAL) pass @@ -5657,7 +5710,7 @@ def columnExpr(self, _p:int=0): pass - self.state = 757 + self.state = 765 self._errHandler.sync(self) _alt = self._interp.adaptivePredict(self._input,91,self._ctx) @@ -5709,17 +5762,17 @@ def columnArgList(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 758 + self.state = 766 self.columnArgExpr() - self.state = 763 + self.state = 771 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 759 + self.state = 767 self.match(HogQLParser.COMMA) - self.state = 760 + self.state = 768 self.columnArgExpr() - self.state = 765 + self.state = 773 self._errHandler.sync(self) _la = self._input.LA(1) @@ -5764,18 +5817,18 @@ def columnArgExpr(self): localctx = HogQLParser.ColumnArgExprContext(self, self._ctx, self.state) self.enterRule(localctx, 78, self.RULE_columnArgExpr) try: - self.state = 768 + self.state = 776 self._errHandler.sync(self) la_ = self._interp.adaptivePredict(self._input,93,self._ctx) if la_ == 1: self.enterOuterAlt(localctx, 1) - self.state = 766 + self.state = 774 self.columnLambdaExpr() pass elif la_ == 2: self.enterOuterAlt(localctx, 2) - self.state = 767 + self.state = 775 self.columnExpr(0) pass @@ -5841,41 +5894,41 @@ def columnLambdaExpr(self): self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 789 + self.state = 797 self._errHandler.sync(self) token = self._input.LA(1) if token in [220]: - self.state = 770 + self.state = 778 self.match(HogQLParser.LPAREN) - self.state = 771 + self.state = 779 self.identifier() - self.state = 776 + self.state = 784 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 772 + self.state = 780 self.match(HogQLParser.COMMA) - self.state = 773 + self.state = 781 self.identifier() - self.state = 778 + self.state = 786 self._errHandler.sync(self) _la = self._input.LA(1) - self.state = 779 + self.state = 787 self.match(HogQLParser.RPAREN) pass - elif token in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 194]: - self.state = 781 + elif token in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 195]: + self.state = 789 self.identifier() - self.state = 786 + self.state = 794 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 782 + self.state = 790 self.match(HogQLParser.COMMA) - self.state = 783 + self.state = 791 self.identifier() - self.state = 788 + self.state = 796 self._errHandler.sync(self) _la = self._input.LA(1) @@ -5883,9 +5936,9 @@ def columnLambdaExpr(self): else: raise NoViableAltException(self) - self.state = 791 + self.state = 799 self.match(HogQLParser.ARROW) - self.state = 792 + self.state = 800 self.columnExpr(0) except RecognitionException as re: localctx.exception = re @@ -5896,6 +5949,166 @@ def columnLambdaExpr(self): return localctx + class HogqlxTagElementContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LT(self): + return self.getToken(HogQLParser.LT, 0) + + def identifier(self): + return self.getTypedRuleContext(HogQLParser.IdentifierContext,0) + + + def SLASH(self): + return self.getToken(HogQLParser.SLASH, 0) + + def GT(self): + return self.getToken(HogQLParser.GT, 0) + + def hogqlxTagAttribute(self, i:int=None): + if i is None: + return self.getTypedRuleContexts(HogQLParser.HogqlxTagAttributeContext) + else: + return self.getTypedRuleContext(HogQLParser.HogqlxTagAttributeContext,i) + + + def getRuleIndex(self): + return HogQLParser.RULE_hogqlxTagElement + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitHogqlxTagElement" ): + return visitor.visitHogqlxTagElement(self) + else: + return visitor.visitChildren(self) + + + + + def hogqlxTagElement(self): + + localctx = HogQLParser.HogqlxTagElementContext(self, self._ctx, self.state) + self.enterRule(localctx, 82, self.RULE_hogqlxTagElement) + self._la = 0 # Token type + try: + self.enterOuterAlt(localctx, 1) + self.state = 802 + self.match(HogQLParser.LT) + self.state = 803 + self.identifier() + self.state = 807 + self._errHandler.sync(self) + _la = self._input.LA(1) + while (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -5066549581053953) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or _la==192 or _la==195: + self.state = 804 + self.hogqlxTagAttribute() + self.state = 809 + self._errHandler.sync(self) + _la = self._input.LA(1) + + self.state = 810 + self.match(HogQLParser.SLASH) + self.state = 811 + self.match(HogQLParser.GT) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + + class HogqlxTagAttributeContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def identifier(self): + return self.getTypedRuleContext(HogQLParser.IdentifierContext,0) + + + def EQ_SINGLE(self): + return self.getToken(HogQLParser.EQ_SINGLE, 0) + + def STRING_LITERAL(self): + return self.getToken(HogQLParser.STRING_LITERAL, 0) + + def LBRACE(self): + return self.getToken(HogQLParser.LBRACE, 0) + + def columnExpr(self): + return self.getTypedRuleContext(HogQLParser.ColumnExprContext,0) + + + def RBRACE(self): + return self.getToken(HogQLParser.RBRACE, 0) + + def getRuleIndex(self): + return HogQLParser.RULE_hogqlxTagAttribute + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitHogqlxTagAttribute" ): + return visitor.visitHogqlxTagAttribute(self) + else: + return visitor.visitChildren(self) + + + + + def hogqlxTagAttribute(self): + + localctx = HogQLParser.HogqlxTagAttributeContext(self, self._ctx, self.state) + self.enterRule(localctx, 84, self.RULE_hogqlxTagAttribute) + try: + self.state = 824 + self._errHandler.sync(self) + la_ = self._interp.adaptivePredict(self._input,98,self._ctx) + if la_ == 1: + self.enterOuterAlt(localctx, 1) + self.state = 813 + self.identifier() + self.state = 814 + self.match(HogQLParser.EQ_SINGLE) + self.state = 815 + self.match(HogQLParser.STRING_LITERAL) + pass + + elif la_ == 2: + self.enterOuterAlt(localctx, 2) + self.state = 817 + self.identifier() + self.state = 818 + self.match(HogQLParser.EQ_SINGLE) + self.state = 819 + self.match(HogQLParser.LBRACE) + self.state = 820 + self.columnExpr(0) + self.state = 821 + self.match(HogQLParser.RBRACE) + pass + + elif la_ == 3: + self.enterOuterAlt(localctx, 3) + self.state = 823 + self.identifier() + pass + + + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + class WithExprListContext(ParserRuleContext): __slots__ = 'parser' @@ -5931,21 +6144,21 @@ def accept(self, visitor:ParseTreeVisitor): def withExprList(self): localctx = HogQLParser.WithExprListContext(self, self._ctx, self.state) - self.enterRule(localctx, 82, self.RULE_withExprList) + self.enterRule(localctx, 86, self.RULE_withExprList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 794 + self.state = 826 self.withExpr() - self.state = 799 + self.state = 831 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 795 + self.state = 827 self.match(HogQLParser.COMMA) - self.state = 796 + self.state = 828 self.withExpr() - self.state = 801 + self.state = 833 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6027,34 +6240,34 @@ def accept(self, visitor:ParseTreeVisitor): def withExpr(self): localctx = HogQLParser.WithExprContext(self, self._ctx, self.state) - self.enterRule(localctx, 84, self.RULE_withExpr) + self.enterRule(localctx, 88, self.RULE_withExpr) try: - self.state = 812 + self.state = 844 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,98,self._ctx) + la_ = self._interp.adaptivePredict(self._input,100,self._ctx) if la_ == 1: localctx = HogQLParser.WithExprSubqueryContext(self, localctx) self.enterOuterAlt(localctx, 1) - self.state = 802 + self.state = 834 self.identifier() - self.state = 803 + self.state = 835 self.match(HogQLParser.AS) - self.state = 804 + self.state = 836 self.match(HogQLParser.LPAREN) - self.state = 805 + self.state = 837 self.selectUnionStmt() - self.state = 806 + self.state = 838 self.match(HogQLParser.RPAREN) pass elif la_ == 2: localctx = HogQLParser.WithExprColumnContext(self, localctx) self.enterOuterAlt(localctx, 2) - self.state = 808 + self.state = 840 self.columnExpr(0) - self.state = 809 + self.state = 841 self.match(HogQLParser.AS) - self.state = 810 + self.state = 842 self.identifier() pass @@ -6075,8 +6288,9 @@ def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): super().__init__(parent, invokingState) self.parser = parser - def PLACEHOLDER(self): - return self.getToken(HogQLParser.PLACEHOLDER, 0) + def placeholder(self): + return self.getTypedRuleContext(HogQLParser.PlaceholderContext,0) + def nestedIdentifier(self): return self.getTypedRuleContext(HogQLParser.NestedIdentifierContext,0) @@ -6104,29 +6318,29 @@ def accept(self, visitor:ParseTreeVisitor): def columnIdentifier(self): localctx = HogQLParser.ColumnIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 86, self.RULE_columnIdentifier) + self.enterRule(localctx, 90, self.RULE_columnIdentifier) try: - self.state = 821 + self.state = 853 self._errHandler.sync(self) token = self._input.LA(1) - if token in [200]: + if token in [218]: self.enterOuterAlt(localctx, 1) - self.state = 814 - self.match(HogQLParser.PLACEHOLDER) + self.state = 846 + self.placeholder() pass - elif token in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 194]: + elif token in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 195]: self.enterOuterAlt(localctx, 2) - self.state = 818 + self.state = 850 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,99,self._ctx) + la_ = self._interp.adaptivePredict(self._input,101,self._ctx) if la_ == 1: - self.state = 815 + self.state = 847 self.tableIdentifier() - self.state = 816 + self.state = 848 self.match(HogQLParser.DOT) - self.state = 820 + self.state = 852 self.nestedIdentifier() pass else: @@ -6176,23 +6390,23 @@ def accept(self, visitor:ParseTreeVisitor): def nestedIdentifier(self): localctx = HogQLParser.NestedIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 88, self.RULE_nestedIdentifier) + self.enterRule(localctx, 92, self.RULE_nestedIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 823 + self.state = 855 self.identifier() - self.state = 828 + self.state = 860 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,101,self._ctx) + _alt = self._interp.adaptivePredict(self._input,103,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: - self.state = 824 + self.state = 856 self.match(HogQLParser.DOT) - self.state = 825 + self.state = 857 self.identifier() - self.state = 830 + self.state = 862 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,101,self._ctx) + _alt = self._interp.adaptivePredict(self._input,103,self._ctx) except RecognitionException as re: localctx.exception = re @@ -6219,6 +6433,23 @@ def copyFrom(self, ctx:ParserRuleContext): super().copyFrom(ctx) + class TableExprTagContext(TableExprContext): + + def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.TableExprContext + super().__init__(parser) + self.copyFrom(ctx) + + def hogqlxTagElement(self): + return self.getTypedRuleContext(HogQLParser.HogqlxTagElementContext,0) + + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitTableExprTag" ): + return visitor.visitTableExprTag(self) + else: + return visitor.visitChildren(self) + + class TableExprIdentifierContext(TableExprContext): def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.TableExprContext @@ -6242,8 +6473,9 @@ def __init__(self, parser, ctx:ParserRuleContext): # actually a HogQLParser.Tabl super().__init__(parser) self.copyFrom(ctx) - def PLACEHOLDER(self): - return self.getToken(HogQLParser.PLACEHOLDER, 0) + def placeholder(self): + return self.getTypedRuleContext(HogQLParser.PlaceholderContext,0) + def accept(self, visitor:ParseTreeVisitor): if hasattr( visitor, "visitTableExprPlaceholder" ): @@ -6321,19 +6553,19 @@ def tableExpr(self, _p:int=0): _parentState = self.state localctx = HogQLParser.TableExprContext(self, self._ctx, _parentState) _prevctx = localctx - _startState = 90 - self.enterRecursionRule(localctx, 90, self.RULE_tableExpr, _p) + _startState = 94 + self.enterRecursionRule(localctx, 94, self.RULE_tableExpr, _p) try: self.enterOuterAlt(localctx, 1) - self.state = 839 + self.state = 872 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,102,self._ctx) + la_ = self._interp.adaptivePredict(self._input,104,self._ctx) if la_ == 1: localctx = HogQLParser.TableExprIdentifierContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 832 + self.state = 864 self.tableIdentifier() pass @@ -6341,7 +6573,7 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprFunctionContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 833 + self.state = 865 self.tableFunctionExpr() pass @@ -6349,27 +6581,35 @@ def tableExpr(self, _p:int=0): localctx = HogQLParser.TableExprSubqueryContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 834 + self.state = 866 self.match(HogQLParser.LPAREN) - self.state = 835 + self.state = 867 self.selectUnionStmt() - self.state = 836 + self.state = 868 self.match(HogQLParser.RPAREN) pass elif la_ == 4: + localctx = HogQLParser.TableExprTagContext(self, localctx) + self._ctx = localctx + _prevctx = localctx + self.state = 870 + self.hogqlxTagElement() + pass + + elif la_ == 5: localctx = HogQLParser.TableExprPlaceholderContext(self, localctx) self._ctx = localctx _prevctx = localctx - self.state = 838 - self.match(HogQLParser.PLACEHOLDER) + self.state = 871 + self.placeholder() pass self._ctx.stop = self._input.LT(-1) - self.state = 849 + self.state = 882 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,104,self._ctx) + _alt = self._interp.adaptivePredict(self._input,106,self._ctx) while _alt!=2 and _alt!=ATN.INVALID_ALT_NUMBER: if _alt==1: if self._parseListeners is not None: @@ -6377,29 +6617,29 @@ def tableExpr(self, _p:int=0): _prevctx = localctx localctx = HogQLParser.TableExprAliasContext(self, HogQLParser.TableExprContext(self, _parentctx, _parentState)) self.pushNewRecursionContext(localctx, _startState, self.RULE_tableExpr) - self.state = 841 - if not self.precpred(self._ctx, 2): + self.state = 874 + if not self.precpred(self._ctx, 3): from antlr4.error.Errors import FailedPredicateException - raise FailedPredicateException(self, "self.precpred(self._ctx, 2)") - self.state = 845 + raise FailedPredicateException(self, "self.precpred(self._ctx, 3)") + self.state = 878 self._errHandler.sync(self) token = self._input.LA(1) - if token in [36, 62, 77, 91, 194]: - self.state = 842 + if token in [36, 62, 77, 91, 195]: + self.state = 875 self.alias() pass elif token in [10]: - self.state = 843 + self.state = 876 self.match(HogQLParser.AS) - self.state = 844 + self.state = 877 self.identifier() pass else: raise NoViableAltException(self) - self.state = 851 + self.state = 884 self._errHandler.sync(self) - _alt = self._interp.adaptivePredict(self._input,104,self._ctx) + _alt = self._interp.adaptivePredict(self._input,106,self._ctx) except RecognitionException as re: localctx.exception = re @@ -6446,23 +6686,23 @@ def accept(self, visitor:ParseTreeVisitor): def tableFunctionExpr(self): localctx = HogQLParser.TableFunctionExprContext(self, self._ctx, self.state) - self.enterRule(localctx, 92, self.RULE_tableFunctionExpr) + self.enterRule(localctx, 96, self.RULE_tableFunctionExpr) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 852 + self.state = 885 self.identifier() - self.state = 853 + self.state = 886 self.match(HogQLParser.LPAREN) - self.state = 855 + self.state = 888 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 69122459133) != 0): - self.state = 854 + if (((_la) & ~0x3f) == 0 and ((1 << _la) & -33554436) != 0) or ((((_la - 64)) & ~0x3f) == 0 and ((1 << (_la - 64)) & -1) != 0) or ((((_la - 128)) & ~0x3f) == 0 and ((1 << (_la - 128)) & -9) != 0) or ((((_la - 192)) & ~0x3f) == 0 and ((1 << (_la - 192)) & 70263309817) != 0): + self.state = 887 self.tableArgList() - self.state = 857 + self.state = 890 self.match(HogQLParser.RPAREN) except RecognitionException as re: localctx.exception = re @@ -6506,20 +6746,20 @@ def accept(self, visitor:ParseTreeVisitor): def tableIdentifier(self): localctx = HogQLParser.TableIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 94, self.RULE_tableIdentifier) + self.enterRule(localctx, 98, self.RULE_tableIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 862 + self.state = 895 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,106,self._ctx) + la_ = self._interp.adaptivePredict(self._input,108,self._ctx) if la_ == 1: - self.state = 859 + self.state = 892 self.databaseIdentifier() - self.state = 860 + self.state = 893 self.match(HogQLParser.DOT) - self.state = 864 + self.state = 897 self.identifier() except RecognitionException as re: localctx.exception = re @@ -6565,21 +6805,21 @@ def accept(self, visitor:ParseTreeVisitor): def tableArgList(self): localctx = HogQLParser.TableArgListContext(self, self._ctx, self.state) - self.enterRule(localctx, 96, self.RULE_tableArgList) + self.enterRule(localctx, 100, self.RULE_tableArgList) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 866 + self.state = 899 self.columnExpr(0) - self.state = 871 + self.state = 904 self._errHandler.sync(self) _la = self._input.LA(1) while _la==206: - self.state = 867 + self.state = 900 self.match(HogQLParser.COMMA) - self.state = 868 + self.state = 901 self.columnExpr(0) - self.state = 873 + self.state = 906 self._errHandler.sync(self) _la = self._input.LA(1) @@ -6618,10 +6858,10 @@ def accept(self, visitor:ParseTreeVisitor): def databaseIdentifier(self): localctx = HogQLParser.DatabaseIdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 98, self.RULE_databaseIdentifier) + self.enterRule(localctx, 102, self.RULE_databaseIdentifier) try: self.enterOuterAlt(localctx, 1) - self.state = 874 + self.state = 907 self.identifier() except RecognitionException as re: localctx.exception = re @@ -6669,42 +6909,42 @@ def accept(self, visitor:ParseTreeVisitor): def floatingLiteral(self): localctx = HogQLParser.FloatingLiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 100, self.RULE_floatingLiteral) + self.enterRule(localctx, 104, self.RULE_floatingLiteral) self._la = 0 # Token type try: - self.state = 884 + self.state = 917 self._errHandler.sync(self) token = self._input.LA(1) - if token in [195]: + if token in [196]: self.enterOuterAlt(localctx, 1) - self.state = 876 + self.state = 909 self.match(HogQLParser.FLOATING_LITERAL) pass elif token in [210]: self.enterOuterAlt(localctx, 2) - self.state = 877 + self.state = 910 self.match(HogQLParser.DOT) - self.state = 878 + self.state = 911 _la = self._input.LA(1) - if not(_la==196 or _la==197): + if not(_la==197 or _la==198): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) self.consume() pass - elif token in [197]: + elif token in [198]: self.enterOuterAlt(localctx, 3) - self.state = 879 + self.state = 912 self.match(HogQLParser.DECIMAL_LITERAL) - self.state = 880 + self.state = 913 self.match(HogQLParser.DOT) - self.state = 882 + self.state = 915 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,108,self._ctx) + la_ = self._interp.adaptivePredict(self._input,110,self._ctx) if la_ == 1: - self.state = 881 + self.state = 914 _la = self._input.LA(1) - if not(_la==196 or _la==197): + if not(_la==197 or _la==198): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) @@ -6771,15 +7011,15 @@ def accept(self, visitor:ParseTreeVisitor): def numberLiteral(self): localctx = HogQLParser.NumberLiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 102, self.RULE_numberLiteral) + self.enterRule(localctx, 106, self.RULE_numberLiteral) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 887 + self.state = 920 self._errHandler.sync(self) _la = self._input.LA(1) if _la==208 or _la==228: - self.state = 886 + self.state = 919 _la = self._input.LA(1) if not(_la==208 or _la==228): self._errHandler.recoverInline(self) @@ -6788,36 +7028,36 @@ def numberLiteral(self): self.consume() - self.state = 895 + self.state = 928 self._errHandler.sync(self) - la_ = self._interp.adaptivePredict(self._input,111,self._ctx) + la_ = self._interp.adaptivePredict(self._input,113,self._ctx) if la_ == 1: - self.state = 889 + self.state = 922 self.floatingLiteral() pass elif la_ == 2: - self.state = 890 + self.state = 923 self.match(HogQLParser.OCTAL_LITERAL) pass elif la_ == 3: - self.state = 891 + self.state = 924 self.match(HogQLParser.DECIMAL_LITERAL) pass elif la_ == 4: - self.state = 892 + self.state = 925 self.match(HogQLParser.HEXADECIMAL_LITERAL) pass elif la_ == 5: - self.state = 893 + self.state = 926 self.match(HogQLParser.INF) pass elif la_ == 6: - self.state = 894 + self.state = 927 self.match(HogQLParser.NAN_SQL) pass @@ -6863,24 +7103,24 @@ def accept(self, visitor:ParseTreeVisitor): def literal(self): localctx = HogQLParser.LiteralContext(self, self._ctx, self.state) - self.enterRule(localctx, 104, self.RULE_literal) + self.enterRule(localctx, 108, self.RULE_literal) try: - self.state = 900 + self.state = 933 self._errHandler.sync(self) token = self._input.LA(1) - if token in [82, 113, 195, 196, 197, 198, 208, 210, 228]: + if token in [82, 113, 196, 197, 198, 199, 208, 210, 228]: self.enterOuterAlt(localctx, 1) - self.state = 897 + self.state = 930 self.numberLiteral() pass - elif token in [199]: + elif token in [200]: self.enterOuterAlt(localctx, 2) - self.state = 898 + self.state = 931 self.match(HogQLParser.STRING_LITERAL) pass elif token in [116]: self.enterOuterAlt(localctx, 3) - self.state = 899 + self.state = 932 self.match(HogQLParser.NULL_SQL) pass else: @@ -6941,11 +7181,11 @@ def accept(self, visitor:ParseTreeVisitor): def interval(self): localctx = HogQLParser.IntervalContext(self, self._ctx, self.state) - self.enterRule(localctx, 106, self.RULE_interval) + self.enterRule(localctx, 110, self.RULE_interval) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 902 + self.state = 935 _la = self._input.LA(1) if not(_la==37 or ((((_la - 76)) & ~0x3f) == 0 and ((1 << (_la - 76)) & 72057615512764417) != 0) or ((((_la - 145)) & ~0x3f) == 0 and ((1 << (_la - 145)) & 36283883716609) != 0)): self._errHandler.recoverInline(self) @@ -7517,11 +7757,11 @@ def accept(self, visitor:ParseTreeVisitor): def keyword(self): localctx = HogQLParser.KeywordContext(self, self._ctx, self.state) - self.enterRule(localctx, 108, self.RULE_keyword) + self.enterRule(localctx, 112, self.RULE_keyword) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 904 + self.state = 937 _la = self._input.LA(1) if not(((((_la - 2)) & ~0x3f) == 0 and ((1 << (_la - 2)) & -34368126977) != 0) or ((((_la - 66)) & ~0x3f) == 0 and ((1 << (_la - 66)) & -1288627627820033) != 0) or ((((_la - 130)) & ~0x3f) == 0 and ((1 << (_la - 130)) & 8034421735228932089) != 0)): self._errHandler.recoverInline(self) @@ -7571,11 +7811,11 @@ def accept(self, visitor:ParseTreeVisitor): def keywordForAlias(self): localctx = HogQLParser.KeywordForAliasContext(self, self._ctx, self.state) - self.enterRule(localctx, 110, self.RULE_keywordForAlias) + self.enterRule(localctx, 114, self.RULE_keywordForAlias) self._la = 0 # Token type try: self.enterOuterAlt(localctx, 1) - self.state = 906 + self.state = 939 _la = self._input.LA(1) if not(((((_la - 36)) & ~0x3f) == 0 and ((1 << (_la - 36)) & 36030996109328385) != 0)): self._errHandler.recoverInline(self) @@ -7620,19 +7860,19 @@ def accept(self, visitor:ParseTreeVisitor): def alias(self): localctx = HogQLParser.AliasContext(self, self._ctx, self.state) - self.enterRule(localctx, 112, self.RULE_alias) + self.enterRule(localctx, 116, self.RULE_alias) try: - self.state = 910 + self.state = 943 self._errHandler.sync(self) token = self._input.LA(1) - if token in [194]: + if token in [195]: self.enterOuterAlt(localctx, 1) - self.state = 908 + self.state = 941 self.match(HogQLParser.IDENTIFIER) pass elif token in [36, 62, 77, 91]: self.enterOuterAlt(localctx, 2) - self.state = 909 + self.state = 942 self.keywordForAlias() pass else: @@ -7680,24 +7920,24 @@ def accept(self, visitor:ParseTreeVisitor): def identifier(self): localctx = HogQLParser.IdentifierContext(self, self._ctx, self.state) - self.enterRule(localctx, 114, self.RULE_identifier) + self.enterRule(localctx, 118, self.RULE_identifier) try: - self.state = 915 + self.state = 948 self._errHandler.sync(self) token = self._input.LA(1) - if token in [194]: + if token in [195]: self.enterOuterAlt(localctx, 1) - self.state = 912 + self.state = 945 self.match(HogQLParser.IDENTIFIER) pass elif token in [37, 76, 108, 110, 132, 145, 185, 190]: self.enterOuterAlt(localctx, 2) - self.state = 913 + self.state = 946 self.interval() pass elif token in [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 77, 78, 79, 80, 81, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 109, 111, 112, 114, 115, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 186, 187, 188, 189, 191, 192]: self.enterOuterAlt(localctx, 3) - self.state = 914 + self.state = 947 self.keyword() pass else: @@ -7744,14 +7984,14 @@ def accept(self, visitor:ParseTreeVisitor): def enumValue(self): localctx = HogQLParser.EnumValueContext(self, self._ctx, self.state) - self.enterRule(localctx, 116, self.RULE_enumValue) + self.enterRule(localctx, 120, self.RULE_enumValue) try: self.enterOuterAlt(localctx, 1) - self.state = 917 + self.state = 950 self.match(HogQLParser.STRING_LITERAL) - self.state = 918 + self.state = 951 self.match(HogQLParser.EQ_SINGLE) - self.state = 919 + self.state = 952 self.numberLiteral() except RecognitionException as re: localctx.exception = re @@ -7762,13 +8002,63 @@ def enumValue(self): return localctx + class PlaceholderContext(ParserRuleContext): + __slots__ = 'parser' + + def __init__(self, parser, parent:ParserRuleContext=None, invokingState:int=-1): + super().__init__(parent, invokingState) + self.parser = parser + + def LBRACE(self): + return self.getToken(HogQLParser.LBRACE, 0) + + def identifier(self): + return self.getTypedRuleContext(HogQLParser.IdentifierContext,0) + + + def RBRACE(self): + return self.getToken(HogQLParser.RBRACE, 0) + + def getRuleIndex(self): + return HogQLParser.RULE_placeholder + + def accept(self, visitor:ParseTreeVisitor): + if hasattr( visitor, "visitPlaceholder" ): + return visitor.visitPlaceholder(self) + else: + return visitor.visitChildren(self) + + + + + def placeholder(self): + + localctx = HogQLParser.PlaceholderContext(self, self._ctx, self.state) + self.enterRule(localctx, 122, self.RULE_placeholder) + try: + self.enterOuterAlt(localctx, 1) + self.state = 954 + self.match(HogQLParser.LBRACE) + self.state = 955 + self.identifier() + self.state = 956 + self.match(HogQLParser.RBRACE) + except RecognitionException as re: + localctx.exception = re + self._errHandler.reportError(self, re) + self._errHandler.recover(self, re) + finally: + self.exitRule() + return localctx + + def sempred(self, localctx:RuleContext, ruleIndex:int, predIndex:int): if self._predicates == None: self._predicates = dict() self._predicates[18] = self.joinExpr_sempred self._predicates[37] = self.columnExpr_sempred - self._predicates[45] = self.tableExpr_sempred + self._predicates[47] = self.tableExpr_sempred pred = self._predicates.get(ruleIndex, None) if pred is None: raise Exception("No predicate with index:" + str(ruleIndex)) @@ -7839,7 +8129,7 @@ def columnExpr_sempred(self, localctx:ColumnExprContext, predIndex:int): def tableExpr_sempred(self, localctx:TableExprContext, predIndex:int): if predIndex == 15: - return self.precpred(self._ctx, 2) + return self.precpred(self._ctx, 3) diff --git a/posthog/hogql/grammar/HogQLParser.tokens b/posthog/hogql/grammar/HogQLParser.tokens index 10fd925b09195..18c9b75ec7548 100644 --- a/posthog/hogql/grammar/HogQLParser.tokens +++ b/posthog/hogql/grammar/HogQLParser.tokens @@ -190,14 +190,14 @@ WITH=189 YEAR=190 JSON_FALSE=191 JSON_TRUE=192 -ESCAPE_CHAR=193 -IDENTIFIER=194 -FLOATING_LITERAL=195 -OCTAL_LITERAL=196 -DECIMAL_LITERAL=197 -HEXADECIMAL_LITERAL=198 -STRING_LITERAL=199 -PLACEHOLDER=200 +ESCAPE_CHAR_SINGLE=193 +ESCAPE_CHAR_DOUBLE=194 +IDENTIFIER=195 +FLOATING_LITERAL=196 +OCTAL_LITERAL=197 +DECIMAL_LITERAL=198 +HEXADECIMAL_LITERAL=199 +STRING_LITERAL=200 ARROW=201 ASTERISK=202 BACKQUOTE=203 diff --git a/posthog/hogql/grammar/HogQLParserVisitor.py b/posthog/hogql/grammar/HogQLParserVisitor.py index 61c17aecae477..2da4cc9721d89 100644 --- a/posthog/hogql/grammar/HogQLParserVisitor.py +++ b/posthog/hogql/grammar/HogQLParserVisitor.py @@ -329,6 +329,11 @@ def visitColumnExprTrim(self, ctx:HogQLParser.ColumnExprTrimContext): return self.visitChildren(ctx) + # Visit a parse tree produced by HogQLParser#ColumnExprTagElement. + def visitColumnExprTagElement(self, ctx:HogQLParser.ColumnExprTagElementContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by HogQLParser#ColumnExprTuple. def visitColumnExprTuple(self, ctx:HogQLParser.ColumnExprTupleContext): return self.visitChildren(ctx) @@ -424,6 +429,16 @@ def visitColumnLambdaExpr(self, ctx:HogQLParser.ColumnLambdaExprContext): return self.visitChildren(ctx) + # Visit a parse tree produced by HogQLParser#hogqlxTagElement. + def visitHogqlxTagElement(self, ctx:HogQLParser.HogqlxTagElementContext): + return self.visitChildren(ctx) + + + # Visit a parse tree produced by HogQLParser#hogqlxTagAttribute. + def visitHogqlxTagAttribute(self, ctx:HogQLParser.HogqlxTagAttributeContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by HogQLParser#withExprList. def visitWithExprList(self, ctx:HogQLParser.WithExprListContext): return self.visitChildren(ctx) @@ -449,6 +464,11 @@ def visitNestedIdentifier(self, ctx:HogQLParser.NestedIdentifierContext): return self.visitChildren(ctx) + # Visit a parse tree produced by HogQLParser#TableExprTag. + def visitTableExprTag(self, ctx:HogQLParser.TableExprTagContext): + return self.visitChildren(ctx) + + # Visit a parse tree produced by HogQLParser#TableExprIdentifier. def visitTableExprIdentifier(self, ctx:HogQLParser.TableExprIdentifierContext): return self.visitChildren(ctx) @@ -539,5 +559,10 @@ def visitEnumValue(self, ctx:HogQLParser.EnumValueContext): return self.visitChildren(ctx) + # Visit a parse tree produced by HogQLParser#placeholder. + def visitPlaceholder(self, ctx:HogQLParser.PlaceholderContext): + return self.visitChildren(ctx) + + del HogQLParser \ No newline at end of file diff --git a/posthog/hogql/parser.py b/posthog/hogql/parser.py index d1d8ef2a1b7a7..bdb405bde1bef 100644 --- a/posthog/hogql/parser.py +++ b/posthog/hogql/parser.py @@ -151,7 +151,7 @@ def visit(self, ctx: ParserRuleContext): raise e def visitSelect(self, ctx: HogQLParser.SelectContext): - return self.visit(ctx.selectUnionStmt() or ctx.selectStmt()) + return self.visit(ctx.selectUnionStmt() or ctx.selectStmt() or ctx.hogqlxTagElement()) def visitSelectUnionStmt(self, ctx: HogQLParser.SelectUnionStmtContext): select_queries: List[ast.SelectQuery | ast.SelectUnionQuery] = [ @@ -381,8 +381,8 @@ def visitOrderExpr(self, ctx: HogQLParser.OrderExprContext): return ast.OrderExpr(expr=self.visit(ctx.columnExpr()), order=cast(Literal["ASC", "DESC"], order)) def visitRatioExpr(self, ctx: HogQLParser.RatioExprContext): - if ctx.PLACEHOLDER(): - return ast.Placeholder(field=parse_string_literal(ctx.PLACEHOLDER())) + if ctx.placeholder(): + return self.visit(ctx.placeholder()) number_literals = ctx.numberLiteral() @@ -744,6 +744,9 @@ def visitColumnExprAsterisk(self, ctx: HogQLParser.ColumnExprAsteriskContext): return ast.Field(chain=table + ["*"]) return ast.Field(chain=["*"]) + def visitColumnExprTagElement(self, ctx: HogQLParser.ColumnExprTagElementContext): + return self.visit(ctx.hogqlxTagElement()) + def visitColumnArgList(self, ctx: HogQLParser.ColumnArgListContext): return [self.visit(arg) for arg in ctx.columnArgExpr()] @@ -774,8 +777,8 @@ def visitWithExprColumn(self, ctx: HogQLParser.WithExprColumnContext): return ast.CTE(name=name, expr=expr, cte_type="column") def visitColumnIdentifier(self, ctx: HogQLParser.ColumnIdentifierContext): - if ctx.PLACEHOLDER(): - return ast.Placeholder(field=parse_string_literal(ctx.PLACEHOLDER())) + if ctx.placeholder(): + return self.visit(ctx.placeholder()) table = self.visit(ctx.tableIdentifier()) if ctx.tableIdentifier() else [] nested = self.visit(ctx.nestedIdentifier()) if ctx.nestedIdentifier() else [] @@ -801,7 +804,7 @@ def visitTableExprSubquery(self, ctx: HogQLParser.TableExprSubqueryContext): return self.visit(ctx.selectUnionStmt()) def visitTableExprPlaceholder(self, ctx: HogQLParser.TableExprPlaceholderContext): - return ast.Placeholder(field=parse_string_literal(ctx.PLACEHOLDER())) + return self.visit(ctx.placeholder()) def visitTableExprAlias(self, ctx: HogQLParser.TableExprAliasContext): alias: str = self.visit(ctx.alias() or ctx.identifier()) @@ -816,6 +819,9 @@ def visitTableExprAlias(self, ctx: HogQLParser.TableExprAliasContext): def visitTableExprFunction(self, ctx: HogQLParser.TableExprFunctionContext): return self.visit(ctx.tableFunctionExpr()) + def visitTableExprTag(self, ctx: HogQLParser.TableExprTagContext): + return self.visit(ctx.hogqlxTagElement()) + def visitTableFunctionExpr(self, ctx: HogQLParser.TableFunctionExprContext): name = self.visit(ctx.identifier()) args = self.visit(ctx.tableArgList()) if ctx.tableArgList() else [] @@ -883,3 +889,21 @@ def visitColumnExprNullish(self, ctx: HogQLParser.ColumnExprNullishContext): name="ifNull", args=[self.visit(ctx.columnExpr(0)), self.visit(ctx.columnExpr(1))], ) + + def visitHogqlxTagElement(self, ctx: HogQLParser.HogqlxTagElementContext): + kind = self.visit(ctx.identifier()) + attributes = [self.visit(a) for a in ctx.hogqlxTagAttribute()] if ctx.hogqlxTagAttribute() else [] + return ast.HogQLXTag(kind=kind, attributes=attributes) + + def visitHogqlxTagAttribute(self, ctx: HogQLParser.HogqlxTagAttributeContext): + name = self.visit(ctx.identifier()) + if ctx.columnExpr(): + return ast.HogQLXAttribute(name=name, value=self.visit(ctx.columnExpr())) + elif ctx.STRING_LITERAL(): + return ast.HogQLXAttribute(name=name, value=ast.Constant(value=parse_string_literal(ctx.STRING_LITERAL()))) + else: + return ast.HogQLXAttribute(name=name, value=ast.Constant(value=True)) + + def visitPlaceholder(self, ctx: HogQLParser.PlaceholderContext): + name = self.visit(ctx.identifier()) + return ast.Placeholder(field=name) diff --git a/posthog/hogql/resolver.py b/posthog/hogql/resolver.py index 8d971084aa583..ec668c086b973 100644 --- a/posthog/hogql/resolver.py +++ b/posthog/hogql/resolver.py @@ -16,7 +16,7 @@ from posthog.hogql.functions.mapping import validate_function_args from posthog.hogql.functions.sparkline import sparkline from posthog.hogql.parser import parse_select -from posthog.hogql.resolver_utils import lookup_cte_by_name, lookup_field_by_name +from posthog.hogql.resolver_utils import convert_hogqlx_tag, lookup_cte_by_name, lookup_field_by_name from posthog.hogql.visitor import CloningVisitor, clone_expr from posthog.models.utils import UUIDT from posthog.hogql.database.schema.events import EventsTable @@ -197,6 +197,9 @@ def visit_join_expr(self, node: ast.JoinExpr): scope = self.scopes[-1] + if isinstance(node.table, ast.HogQLXTag): + node.table = convert_hogqlx_tag(node.table, self.context.team_id) + # If selecting from a CTE, expand and visit the new node if isinstance(node.table, ast.Field) and len(node.table.chain) == 1: table_name = node.table.chain[0] @@ -299,6 +302,9 @@ def visit_join_expr(self, node: ast.JoinExpr): else: raise ResolverException(f"JoinExpr with table of type {type(node.table).__name__} not supported") + def visit_hogqlx_tag(self, node: ast.HogQLXTag): + return self.visit(convert_hogqlx_tag(node, self.context.team_id)) + def visit_alias(self, node: ast.Alias): """Visit column aliases. SELECT 1, (select 3 as y) as x.""" if len(self.scopes) == 0: diff --git a/posthog/hogql/resolver_utils.py b/posthog/hogql/resolver_utils.py index 2fb8fd6d814f7..e548935742637 100644 --- a/posthog/hogql/resolver_utils.py +++ b/posthog/hogql/resolver_utils.py @@ -1,6 +1,9 @@ from typing import List, Optional + +from posthog import schema from posthog.hogql import ast -from posthog.hogql.errors import HogQLException, ResolverException +from posthog.hogql.errors import HogQLException, ResolverException, SyntaxException +from posthog.hogql.visitor import clone_expr def lookup_field_by_name(scope: ast.SelectQueryType, name: str) -> Optional[ast.Type]: @@ -45,3 +48,35 @@ def get_long_table_name(select: ast.SelectQueryType, type: ast.Type) -> str: return f"{get_long_table_name(select, type.table_type)}__{type.field}" else: raise HogQLException(f"Unknown table type in LazyTableResolver: {type.__class__.__name__}") + + +def ast_to_query_node(expr: ast.Expr | ast.HogQLXTag): + if isinstance(expr, ast.Constant): + return expr.value + elif isinstance(expr, ast.Array): + return [ast_to_query_node(e) for e in expr.exprs] + elif isinstance(expr, ast.Tuple): + return tuple(ast_to_query_node(e) for e in expr.exprs) + elif isinstance(expr, ast.HogQLXTag): + for klass in schema.__dict__.values(): + if isinstance(klass, type) and issubclass(klass, schema.BaseModel) and klass.__name__ == expr.kind: + attributes = expr.to_dict() + attributes.pop("kind") + attributes = {key: ast_to_query_node(value) for key, value in attributes.items()} + return klass(**attributes) + raise SyntaxException(f'Tag of kind "{expr.kind}" not found in schema.') + else: + raise SyntaxException(f'Expression of type "{type(expr).__name__}". Can\'t convert to constant.') + + +def convert_hogqlx_tag(node: ast.HogQLXTag, team_id: int): + from posthog.hogql_queries.query_runner import get_query_runner + from posthog.models import Team + + try: + query_node = ast_to_query_node(node) + runner = get_query_runner(query_node, Team.objects.get(pk=team_id)) + query = clone_expr(runner.to_query(), clear_locations=True) + return query + except Exception as e: + raise ResolverException(f"Error parsing query tag: {e}", start=node.start, end=node.end) diff --git a/posthog/hogql/test/_test_parser.py b/posthog/hogql/test/_test_parser.py index 9b5fa20dcf910..bf66375fac1b5 100644 --- a/posthog/hogql/test/_test_parser.py +++ b/posthog/hogql/test/_test_parser.py @@ -569,6 +569,14 @@ def test_placeholders(self): right=ast.Constant(value=123), ), ) + self.assertEqual( + self._expr("timestamp={timestamp}", {"timestamp": ast.Constant(value=123)}), + ast.CompareOperation( + op=ast.CompareOperationOp.Eq, + left=ast.Field(chain=["timestamp"]), + right=ast.Constant(value=123), + ), + ) def test_intervals(self): self.assertEqual( @@ -1459,10 +1467,70 @@ def test_malformed_sql(self): query = "SELEC 2" with self.assertRaisesMessage( SyntaxException, - "mismatched input 'SELEC' expecting {SELECT, WITH, '('}", + "mismatched input 'SELEC' expecting {SELECT, WITH, '(', '<'}", ) as e: self._select(query) self.assertEqual(e.exception.start, 0) self.assertEqual(e.exception.end, 7) + def test_visit_hogqlx_tag(self): + node = self._select("select event from ") + table_node = cast(ast.SelectQuery, node).select_from.table + assert table_node == ast.HogQLXTag( + kind="HogQLQuery", + attributes=[ast.HogQLXAttribute(name="query", value=ast.Constant(value="select event from events"))], + ) + + node2 = self._select("select event from ()") + assert node2 == node + + def test_visit_hogqlx_tag_alias(self): + node = self._select("select event from as a") + table_node = cast(ast.SelectQuery, node).select_from.table + alias = cast(ast.SelectQuery, node).select_from.alias + assert table_node == ast.HogQLXTag( + kind="HogQLQuery", + attributes=[ast.HogQLXAttribute(name="query", value=ast.Constant(value="select event from events"))], + ) + assert alias == "a" + + node2 = self._select("select event from a") + assert node2 == node + + def test_visit_hogqlx_tag_source(self): + query = """ + select id, email from ( + + } + /> + ) + """ + node = self._select(query) + table_node = cast(ast.SelectQuery, node).select_from.table + assert table_node == ast.HogQLXTag( + kind="PersonsQuery", + attributes=[ + ast.HogQLXAttribute( + name="select", + value=ast.Array( + exprs=[ast.Constant(value="id"), ast.Constant(value="properties.email as email")] + ), + ), + ast.HogQLXAttribute( + name="source", + value=ast.HogQLXTag( + kind="HogQLQuery", + attributes=[ + ast.HogQLXAttribute( + name="query", value=ast.Constant(value="select distinct person_id from events") + ) + ], + ), + ), + ], + ) + return TestParser diff --git a/posthog/hogql/test/test_metadata.py b/posthog/hogql/test/test_metadata.py index fe440243e909d..7752866f0db18 100644 --- a/posthog/hogql/test/test_metadata.py +++ b/posthog/hogql/test/test_metadata.py @@ -73,7 +73,7 @@ def test_metadata_valid_expr_select(self): "inputSelect": "timestamp", "errors": [ { - "message": "mismatched input 'timestamp' expecting {SELECT, WITH, '('}", + "message": "mismatched input 'timestamp' expecting {SELECT, WITH, '(', '<'}", "start": 0, "end": 9, "fix": None, diff --git a/posthog/hogql/test/test_resolver.py b/posthog/hogql/test/test_resolver.py index 1a946c2c3e769..f2ee1d812ea65 100644 --- a/posthog/hogql/test/test_resolver.py +++ b/posthog/hogql/test/test_resolver.py @@ -18,7 +18,7 @@ ) from posthog.hogql.visitor import clone_expr from posthog.hogql.parser import parse_select -from posthog.hogql.printer import print_ast +from posthog.hogql.printer import print_ast, print_prepared_ast from posthog.hogql.resolver import ResolverException, resolve_types from posthog.test.base import BaseTest @@ -1228,3 +1228,39 @@ def test_field_traverser_double_dot(self): assert cast(ast.FieldType, node.select[3].type).resolve_database_field() == DateTimeDatabaseField( name="created_at", array=None, nullable=None ) + + def test_visit_hogqlx_tag(self): + node = self._select("select event from ") + node = cast(ast.SelectQuery, resolve_types(node, self.context)) + table_node = cast(ast.SelectQuery, node).select_from.table + expected = ast.SelectQuery( + select=[ast.Field(chain=["event"])], select_from=ast.JoinExpr(table=ast.Field(chain=["events"])) + ) + assert clone_expr(table_node, clear_types=True) == expected + + def test_visit_hogqlx_tag_alias(self): + node = self._select("select event from a") + node = cast(ast.SelectQuery, resolve_types(node, self.context)) + assert cast(ast.SelectQuery, node).select_from.alias == "a" + + def test_visit_hogqlx_tag_source(self): + query = """ + select id, email from ( + + } + /> + ) + """ + node = cast(ast.SelectQuery, resolve_types(self._select(query), self.context)) + hogql = print_prepared_ast(node, HogQLContext(team_id=self.team.pk, enable_select_queries=True), "hogql") + expected = ( + f"SELECT id, email FROM " + f"(SELECT id, properties.email AS email FROM persons WHERE in(id, " + f"(SELECT DISTINCT person_id FROM events)" + f") ORDER BY id ASC LIMIT 101 OFFSET 0) " + f"LIMIT 10000" + ) + assert hogql == expected diff --git a/posthog/hogql/visitor.py b/posthog/hogql/visitor.py index db6b1ef6fb72e..ae25dd38cc8d3 100644 --- a/posthog/hogql/visitor.py +++ b/posthog/hogql/visitor.py @@ -244,6 +244,13 @@ def visit_window_frame_expr(self, node: ast.WindowFrameExpr): def visit_join_constraint(self, node: ast.JoinConstraint): self.visit(node.expr) + def visit_hogqlx_tag(self, node: ast.HogQLXTag): + for attribute in node.attributes: + self.visit(attribute) + + def visit_hogqlx_attribute(self, node: ast.HogQLXAttribute): + self.visit(node.value) + class CloningVisitor(Visitor): """Visitor that traverses and clones the AST tree. Clears types.""" @@ -512,3 +519,9 @@ def visit_window_frame_expr(self, node: ast.WindowFrameExpr): def visit_join_constraint(self, node: ast.JoinConstraint): return ast.JoinConstraint(expr=self.visit(node.expr)) + + def visit_hogqlx_tag(self, node: ast.HogQLXTag): + return ast.HogQLXTag(kind=node.kind, attributes=[self.visit(a) for a in node.attributes]) + + def visit_hogqlx_attribute(self, node: ast.HogQLXAttribute): + return ast.HogQLXAttribute(name=node.name, value=self.visit(node.value)) diff --git a/requirements.in b/requirements.in index a7c7b18558977..9cedeeaa6ca95 100644 --- a/requirements.in +++ b/requirements.in @@ -88,4 +88,4 @@ django-two-factor-auth==1.14.0 phonenumberslite==8.13.6 openai==0.27.8 nh3==0.2.14 -hogql-parser==0.1.9 +hogql-parser==0.1.11 diff --git a/requirements.txt b/requirements.txt index 4f206a7baef0e..67293519e1b3f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -251,7 +251,7 @@ gunicorn==20.1.0 # via -r requirements.in h11==0.13.0 # via wsproto -hogql-parser==0.1.9 +hogql-parser==0.1.11 # via -r requirements.in idna==2.8 # via