diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a7d2e15..0c64043 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -24,19 +24,6 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Get ClearData Room Data - uses: actions/checkout@v4 - with: - repository: Big-Dungeons/ClearData - ref: main - path: ClearData - - - name: Copy room_data into project - shell: bash - run: | - mkdir -p src/room_data - cp -r ClearData/room_data/* src/room_data/ - - name: Extract version from Cargo.toml id: get_version shell: bash diff --git a/.gitignore b/.gitignore index 29db191..58cd808 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ target/ src/room_data/ src/room_data +/assets/ +/saved_replays +/server/saved_replays .DS_Store \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index e08d067..f7b30cf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,26 +8,19 @@ version = "0.1.0" dependencies = [ "anyhow", "base64", - "blocks", - "bytes", "chrono", - "include_dir", + "enumset", + "fstr", + "glam", "indoc", "rand", - "rand_chacha", - "serde", + "replays", + "reqwest", "serde_json", + "server", "tokio", "uuid", -] - -[[package]] -name = "addr2line" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" -dependencies = [ - "gimli", + "zip", ] [[package]] @@ -37,10 +30,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" [[package]] -name = "android-tzdata" -version = "0.1.1" +name = "aes" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] [[package]] name = "android_system_properties" @@ -53,30 +51,36 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.98" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e16d2d3311acee920a9eb8d33b8cbc1787ce4a264e85f964c2404b969bdcd487" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] -name = "autocfg" -version = "1.5.0" +name = "arbitrary" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" +checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" +dependencies = [ + "derive_arbitrary", +] [[package]] -name = "backtrace" -version = "0.3.75" +name = "arcstr" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" -dependencies = [ - "addr2line", - "cfg-if", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", - "windows-targets", -] +checksum = "03918c3dbd7701a85c6b9887732e2921175f26c350b4563841d0958c21d57e6d" + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "base64" @@ -86,9 +90,18 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bitflags" -version = "2.9.1" +version = "2.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967" +checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] [[package]] name = "blocks" @@ -101,9 +114,9 @@ dependencies = [ [[package]] name = "bumpalo" -version = "3.18.1" +version = "3.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db76d6187cd04dff33004d8e6c9cc4e05cd330500379d2394209271b4aeee" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" [[package]] name = "bytes" @@ -111,33 +124,70 @@ version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" +[[package]] +name = "bzip2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a53fac24f34a81bc9954b5d6cfce0c21e18ec6959f44f56e8e90e4bb7c346c" +dependencies = [ + "libbz2-rs-sys", +] + [[package]] name = "cc" -version = "1.2.30" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "deec109607ca693028562ed836a5f1c4b8bd77755c4e132fc5ce11b0b6211ae7" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ + "find-msvc-tools", + "jobserver", + "libc", "shlex", ] [[package]] name = "cfg-if" -version = "1.0.1" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9555578bc9e57714c812a1f84e4fc5b4d21fcb063490c624de019f7464c91268" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" [[package]] name = "chrono" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" dependencies = [ - "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "wasm-bindgen", - "windows-link", + "windows-link 0.2.1", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "constant_time_eq" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" + +[[package]] +name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", ] [[package]] @@ -147,385 +197,1612 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "getrandom" -version = "0.3.3" +name = "cpufeatures" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" dependencies = [ - "cfg-if", "libc", - "r-efi", - "wasi 0.14.2+wasi-0.2.4", ] [[package]] -name = "gimli" -version = "0.31.1" +name = "crc" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "9710d3b3739c2e349eb44fe848ad0b7c8cb1e42bd87ee49371df2f7acaf3e675" +dependencies = [ + "crc-catalog", +] [[package]] -name = "iana-time-zone" -version = "0.1.63" +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +checksum = "9481c1c90cbf2ac953f07c8d4a58aa3945c425b7185c9154d67a65e4230da511" dependencies = [ - "android_system_properties", - "core-foundation-sys", - "iana-time-zone-haiku", - "js-sys", - "log", - "wasm-bindgen", - "windows-core", + "cfg-if", ] [[package]] -name = "iana-time-zone-haiku" -version = "0.1.2" +name = "crypto-common" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "cc", + "generic-array", + "typenum", ] [[package]] -name = "include_dir" -version = "0.7.4" +name = "darling" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" dependencies = [ - "include_dir_macros", + "darling_core", + "darling_macro", ] [[package]] -name = "include_dir_macros" -version = "0.7.4" +name = "darling_core" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" dependencies = [ + "fnv", + "ident_case", "proc-macro2", "quote", + "syn", ] [[package]] -name = "indoc" -version = "2.0.6" +name = "darling_macro" +version = "0.21.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core", + "quote", + "syn", +] [[package]] -name = "itoa" -version = "1.0.15" +name = "deflate64" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "26bf8fc351c5ed29b5c2f0cbbac1b209b74f60ecd62e675a998df72c49af5204" [[package]] -name = "js-sys" -version = "0.3.77" +name = "deranged" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ - "once_cell", - "wasm-bindgen", + "powerfmt", ] [[package]] -name = "libc" -version = "0.2.174" +name = "derive_arbitrary" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" +checksum = "1e567bd82dcff979e4b03460c307b3cdc9e96fde3d73bed1496d2bc75d9dd62a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "log" -version = "0.4.27" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] [[package]] -name = "memchr" -version = "2.7.5" +name = "displaydoc" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] [[package]] -name = "miniz_oxide" -version = "0.8.9" +name = "encoding_rs" +version = "0.8.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" dependencies = [ - "adler2", + "cfg-if", ] [[package]] -name = "mio" -version = "1.0.4" +name = "enumset" +version = "1.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +checksum = "25b07a8dfbbbfc0064c0a6bdf9edcf966de6b1c33ce344bdeca3b41615452634" dependencies = [ - "libc", - "wasi 0.11.1+wasi-snapshot-preview1", - "windows-sys 0.59.0", + "enumset_derive", ] [[package]] -name = "num-traits" -version = "0.2.19" +name = "enumset_derive" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +checksum = "f43e744e4ea338060faee68ed933e46e722fb7f3617e722a5772d7e856d8b3ce" dependencies = [ - "autocfg", + "darling", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "object" -version = "0.36.7" +name = "equivalent" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" + +[[package]] +name = "errno" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ - "memchr", + "libc", + "windows-sys 0.61.2", ] [[package]] -name = "once_cell" -version = "1.21.3" +name = "fastrand" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] -name = "pin-project-lite" -version = "0.2.16" +name = "find-msvc-tools" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] -name = "ppv-lite86" -version = "0.2.21" +name = "flate2" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +checksum = "dc5a4e564e38c699f2880d3fda590bedc2e69f3f84cd48b457bd892ce61d0aa9" dependencies = [ - "zerocopy", + "crc32fast", + "libz-rs-sys", + "miniz_oxide", ] [[package]] -name = "proc-macro2" -version = "1.0.95" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778" -dependencies = [ - "unicode-ident", -] +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] -name = "quote" -version = "1.0.40" +name = "foreign-types" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "proc-macro2", + "foreign-types-shared", ] [[package]] -name = "r-efi" -version = "5.3.0" +name = "foreign-types-shared" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] -name = "rand" -version = "0.9.1" +name = "form_urlencoded" +version = "1.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" dependencies = [ - "rand_chacha", - "rand_core", + "percent-encoding", ] [[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +name = "fstr" +version = "0.1.0" dependencies = [ - "ppv-lite86", - "rand_core", + "arcstr", + "uuid", ] [[package]] -name = "rand_core" -version = "0.9.3" +name = "futures-channel" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" dependencies = [ - "getrandom", + "futures-core", ] [[package]] -name = "rustc-demangle" -version = "0.1.25" +name = "futures-core" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "989e6739f80c4ad5b13e0fd7fe89531180375b18520cc8c82080e4dc4035b84f" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" [[package]] -name = "rustversion" -version = "1.0.21" +name = "futures-sink" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" [[package]] -name = "ryu" -version = "1.0.20" +name = "futures-task" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" [[package]] -name = "serde" -version = "1.0.219" +name = "futures-util" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ - "serde_derive", + "futures-core", + "futures-task", + "pin-project-lite", + "pin-utils", ] [[package]] -name = "serde_derive" -version = "1.0.219" +name = "generic-array" +version = "0.14.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" +checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" dependencies = [ - "proc-macro2", - "quote", - "syn", + "typenum", + "version_check", ] [[package]] -name = "serde_json" -version = "1.0.140" +name = "getrandom" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" +checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592" dependencies = [ - "itoa", - "memchr", - "ryu", - "serde", + "cfg-if", + "libc", + "wasi", ] [[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - -[[package]] -name = "socket2" -version = "0.5.10" +name = "getrandom" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22376abed350d73dd1cd119b57ffccad95b4e585a7cda43e286245ce23c0678" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" dependencies = [ + "cfg-if", "libc", - "windows-sys 0.52.0", + "r-efi", + "wasip2", ] [[package]] -name = "syn" -version = "2.0.104" +name = "glam" +version = "0.30.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b6f705963418cdb9927482fa304bc562ece2fdd4f616084c50b7023b435a40" +checksum = "e12d847aeb25f41be4c0ec9587d624e9cd631bc007a8fd7ce3f5851e064c6460" + +[[package]] +name = "h2" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3c0b69cfcb4e1b9f1bf2f53f95f766e4661169728ec61cd3fe5a0166f2d1386" dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http", + "indexmap", + "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] -name = "tokio" -version = "1.45.1" +name = "hashbrown" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" + +[[package]] +name = "hmac" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75ef51a33ef1da925cea3e4eb122833cb377c61439ca401b770f54902b806779" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "backtrace", - "bytes", - "libc", - "mio", - "pin-project-lite", - "socket2", - "tokio-macros", - "windows-sys 0.52.0", + "digest", ] [[package]] -name = "tokio-macros" -version = "2.5.0" +name = "http" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +checksum = "f4a85d31aea989eead29a3aaf9e1115a180df8282431156e533de47660892565" dependencies = [ - "proc-macro2", - "quote", - "syn", + "bytes", + "fnv", + "itoa", ] [[package]] -name = "unicode-ident" -version = "1.0.18" +name = "http-body" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http", +] [[package]] -name = "uuid" -version = "1.17.0" +name = "http-body-util" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3cf4199d1e5d15ddd86a694e4d0dffa9c323ce759fea589f00fef9d81cc1931d" +checksum = "b021d93e26becf5dc7e1b75b1bed1fd93124b374ceb73f43d4d4eafec896a64a" dependencies = [ - "getrandom", - "js-sys", - "wasm-bindgen", + "bytes", + "futures-core", + "http", + "http-body", + "pin-project-lite", ] [[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" +name = "httparse" +version = "1.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" +checksum = "6dbf3de79e51f3d586ab4cb9d5c3e2c14aa28ed23d180cf89b4df0454a69cc87" [[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" +name = "hyper" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "eb3aa54a13a0dfe7fbe3a59e0c76093041720fdc77b110cc0fc260fafb4dc51e" dependencies = [ - "wit-bindgen-rt", + "atomic-waker", + "bytes", + "futures-channel", + "futures-core", + "h2", + "http", + "http-body", + "httparse", + "itoa", + "pin-project-lite", + "pin-utils", + "smallvec", + "tokio", + "want", ] [[package]] -name = "wasm-bindgen" -version = "0.2.100" +name = "hyper-rustls" +version = "0.27.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "e3c93eb611681b207e1fe55d5a71ecf91572ec8a6705cdb6857f7d8d5242cf58" dependencies = [ - "cfg-if", - "once_cell", - "rustversion", - "wasm-bindgen-macro", + "http", + "hyper", + "hyper-util", + "rustls", + "rustls-pki-types", + "tokio", + "tokio-rustls", + "tower-service", ] [[package]] -name = "wasm-bindgen-backend" -version = "0.2.100" +name = "hyper-tls" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ - "bumpalo", - "log", - "proc-macro2", - "quote", + "bytes", + "http-body-util", + "hyper", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c6995591a8f1380fcb4ba966a252a4b29188d51d2b89e3a252f5305be65aea8" +dependencies = [ + "base64", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "hyper", + "ipnet", + "libc", + "percent-encoding", + "pin-project-lite", + "socket2", + "system-configuration", + "tokio", + "tower-service", + "tracing", + "windows-registry", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33e57f83510bb73707521ebaffa789ec8caf86f9657cad665b092b581d40e9fb" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200072f5d0e3614556f94a9930d5dc3e0662a652823904c3a75dc3b0af7fee47" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0cde2700ccaed3872079a65fb1a78f6c0a36c91570f28755dda67bc8f7d9f00a" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436880e8e18df4d7bbc06d58432329d6458cc84531f7ac5f024e93deadb37979" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00210d6893afc98edb752b664b8890f0ef174c8adbb8d0be9710fa66fbbf72d3" + +[[package]] +name = "icu_properties" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "016c619c1eeb94efb86809b015c58f479963de65bdb6253345c1a1276f22e32b" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "potential_utf", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "298459143998310acd25ffe6810ed544932242d3f07083eee1084d83a71bd632" + +[[package]] +name = "icu_provider" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c80da27b5f4187909049ee2d72f276f0d9f99a42c306bd0131ecfe04d8e5af" +dependencies = [ + "displaydoc", + "icu_locale_core", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "indexmap" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6717a8d2a5a929a1a2eb43a12812498ed141a0bcfb7e8f7844fbdbe4303bba9f" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "indoc" +version = "2.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c7245a08504955605670dbf141fceab975f15ca21570696aebe9d2e71576bd" + +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + +[[package]] +name = "ipnet" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" + +[[package]] +name = "iri-string" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbc5ebe9c3a1a7a5127f920a418f7585e9e758e911d0466ed004f393b0e380b2" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "jobserver" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afb3de4395d6b3e67a780b6de64b51c978ecf11cb9a462c66be7d4ca9039d33" +dependencies = [ + "getrandom 0.3.4", + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "libbz2-rs-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4a545a15244c7d945065b5d392b2d2d7f21526fba56ce51467b06ed445e8f7" + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "libz-rs-sys" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "840db8cf39d9ec4dd794376f38acc40d0fc65eec2a8f484f7fd375b84602becd" +dependencies = [ + "zlib-rs", +] + +[[package]] +name = "linux-raw-sys" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" + +[[package]] +name = "litemap" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241eaef5fd12c88705a01fc1066c48c4b36e0dd4377dcdc7ec3942cea7a69956" + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "lzma-rust2" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c60a23ffb90d527e23192f1246b14746e2f7f071cb84476dd879071696c18a4a" +dependencies = [ + "crc", + "sha2", +] + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", + "simd-adler32", +] + +[[package]] +name = "mio" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69d83b0086dc8ecf3ce9ae2874b2d1290252e2a30720bea58a5c6639b0092873" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "native-tls" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87de3442987e9dbec73158d5c715e7ad9072fda936bb03d19d7fa10e00520f0e" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "openssl" +version = "0.10.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24ad14dd45412269e1a30f52ad8f0664f0f4f4a89ee8fe28c3b3527021ebb654" +dependencies = [ + "bitflags", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "openssl-probe" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" + +[[package]] +name = "openssl-sys" +version = "0.9.110" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a9f0075ba3c21b09f8e8b2026584b1d18d49388648f2fbbf3c97ea8deced8e2" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "pbkdf2" +version = "0.12.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" +dependencies = [ + "digest", + "hmac", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkg-config" +version = "0.3.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" + +[[package]] +name = "potential_utf" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" +dependencies = [ + "zerovec", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppmd-rust" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c834641d8ad1b348c9ee86dec3b9840d805acd5f24daa5f90c788951a52ff59b" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom 0.3.4", +] + +[[package]] +name = "replays" +version = "0.1.0" +dependencies = [ + "anyhow", + "bytes", + "chrono", + "fstr", + "tokio", + "uuid", +] + +[[package]] +name = "reqwest" +version = "0.12.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" +dependencies = [ + "base64", + "bytes", + "encoding_rs", + "futures-core", + "h2", + "http", + "http-body", + "http-body-util", + "hyper", + "hyper-rustls", + "hyper-tls", + "hyper-util", + "js-sys", + "log", + "mime", + "native-tls", + "percent-encoding", + "pin-project-lite", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper", + "tokio", + "tokio-native-tls", + "tower", + "tower-http", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "ring" +version = "0.17.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.16", + "libc", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustix" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.61.2", +] + +[[package]] +name = "rustls" +version = "0.23.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "751e04a496ca00bb97a5e043158d23d66b5aabf2e1d5aa2a0aaebb1aafe6f82c" +dependencies = [ + "once_cell", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pki-types" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "229a4a4c221013e7e1f1a043678c5cc39fe5171437c88fb47151a21e6f5b5c79" +dependencies = [ + "zeroize", +] + +[[package]] +name = "rustls-webpki" +version = "0.103.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "schannel" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891d81b926048e76efe18581bf793546b4c0eaf8448d72be8de2bbee5fd166e1" +dependencies = [ + "windows-sys 0.61.2", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc1f0cbffaac4852523ce30d8bd3c5cdc873501d96ff467ca09b6767bb8cd5c0" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "server" +version = "0.1.0" +dependencies = [ + "anyhow", + "blocks", + "bytes", + "enumset", + "fstr", + "glam", + "rand", + "replays", + "serde", + "serde_json", + "slotmap", + "tokio", + "uuid", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "slotmap" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" +dependencies = [ + "version_check", +] + +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "syn" +version = "2.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a26dbd934e5451d21ef060c018dae56fc073894c5a7896f882928a76e6d081b" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tempfile" +version = "3.23.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16" +dependencies = [ + "fastrand", + "getrandom 0.3.4", + "once_cell", + "rustix", + "windows-sys 0.61.2", +] + +[[package]] +name = "time" +version = "0.3.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b" + +[[package]] +name = "tinystr" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d4f6d1145dcb577acf783d4e601bc1d76a13337bb54e6233add580b07344c8b" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tokio" +version = "1.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff360e02eab121e0bc37a2d3b4d4dc622e6eda3a8e5253d5435ecf5bd4c68408" +dependencies = [ + "bytes", + "libc", + "mio", + "pin-project-lite", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" +dependencies = [ + "rustls", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14307c986784f72ef81c89db7d9e28d6ac26d16213b109ea501696195e6e3ce5" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tower" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc82fd73de2a9722ac5da747f12383d2bfdb93591ee6c58486e0097890f05f2" +dependencies = [ + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "iri-string", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +dependencies = [ + "pin-project-lite", + "tracing-core", +] + +[[package]] +name = "tracing-core" +version = "0.1.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678" +dependencies = [ + "once_cell", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "typenum" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "getrandom 0.3.4", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", "syn", "wasm-bindgen-shared", ] +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.54" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" +dependencies = [ + "cfg-if", + "js-sys", + "once_cell", + "wasm-bindgen", + "web-sys", +] + [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -533,9 +1810,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -546,31 +1823,41 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] +[[package]] +name = "web-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + [[package]] name = "windows-core" -version = "0.61.2" +version = "0.62.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb" dependencies = [ "windows-implement", "windows-interface", - "windows-link", - "windows-result", - "windows-strings", + "windows-link 0.2.1", + "windows-result 0.4.1", + "windows-strings 0.5.1", ] [[package]] name = "windows-implement" -version = "0.60.0" +version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", @@ -579,9 +1866,9 @@ dependencies = [ [[package]] name = "windows-interface" -version = "0.59.1" +version = "0.59.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", @@ -594,13 +1881,39 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-registry" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b8a9ed28765efc97bbc954883f4e6796c33a06546ebafacbabee9696967499e" +dependencies = [ + "windows-link 0.1.3", + "windows-result 0.3.4", + "windows-strings 0.4.2", +] + [[package]] name = "windows-result" version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-result" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -609,7 +1922,16 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" dependencies = [ - "windows-link", + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091" +dependencies = [ + "windows-link 0.2.1", ] [[package]] @@ -618,16 +1940,25 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", ] [[package]] name = "windows-sys" -version = "0.59.0" +version = "0.61.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" dependencies = [ - "windows-targets", + "windows-link 0.2.1", ] [[package]] @@ -636,14 +1967,31 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link 0.2.1", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -652,42 +2000,84 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + [[package]] name = "windows_i686_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -695,30 +2085,210 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea2f10b9bb0928dfb1b42b65e1f9e36f7f54dbdf08457afefb38afcdec4fa2bb" + +[[package]] +name = "yoke" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +checksum = "5f41bb01b8226ef4bfd589436a297c53d118f65921786300e427be8d487695cc" dependencies = [ - "bitflags", + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38da3c9736e16c5d3c8c597a9aaa5d1fa565d0532ae05e27c24aa62fb32c0ab6" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", ] [[package]] name = "zerocopy" -version = "0.8.26" +version = "0.8.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.8.26" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" +dependencies = [ + "zeroize_derive", +] + +[[package]] +name = "zeroize_derive" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zerotrie" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36f0bbd478583f79edad978b407914f61b2972f5af6fa089686016be8f9af595" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7aa2bd55086f1ab526693ecbe444205da57e25f4489879da80635a46d90e73b" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +checksum = "5b96237efa0c878c64bd89c436f661be4e46b2f3eff1ebb976f7ef2321d2f58f" dependencies = [ "proc-macro2", "quote", "syn", ] + +[[package]] +name = "zip" +version = "6.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb2a05c7c36fde6c09b08576c9f7fb4cda705990f73b58fe011abf7dfb24168b" +dependencies = [ + "aes", + "arbitrary", + "bzip2", + "constant_time_eq", + "crc32fast", + "deflate64", + "flate2", + "getrandom 0.3.4", + "hmac", + "indexmap", + "lzma-rust2", + "memchr", + "pbkdf2", + "ppmd-rust", + "sha1", + "time", + "zeroize", + "zopfli", + "zstd", +] + +[[package]] +name = "zlib-rs" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f06ae92f42f5e5c42443fd094f245eb656abf56dd7cce9b8b263236565e00f2" + +[[package]] +name = "zopfli" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edfc5ee405f504cd4984ecc6f14d02d55cfda60fa4b689434ef4102aae150cd7" +dependencies = [ + "bumpalo", + "crc32fast", + "log", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91ee311a569c327171651566e07972200e76fcfe2242a4fa446149a3881c08a" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.16+zstd.1.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e19ebc2adc8f83e43039e79776e3fda8ca919132d68a1fed6a5faca2683748" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml index f8f2225..04f0d86 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,20 +3,29 @@ name = "RustClear" version = "0.1.0" edition = "2024" +[workspace] +members = [ + "server", + "replays", + "crates/*" +] + [dependencies] -bytes = "1.10.1" -tokio = { version = "1.45.1", features = ["rt", "rt-multi-thread", "macros", "net", "io-util", "sync", "time"] } -anyhow = "1.0.98" -serde_json = "1.0.140" -serde = { version = "1.0.219", features = ["derive"] } +tokio = { version = "1.45.1", features = ["rt", "rt-multi-thread", "macros", "net", "io-util", "sync", "time", "fs"] } +anyhow = "1.0.100" +serde_json = "1.0.145" uuid = { version = "1.17.0", features = ["v4"] } -rand = "0.9.1" +rand = "0.9.2" indoc = "2.0.6" -include_dir = "0.7.4" -blocks = { path = "crates/macros" } -chrono = "0.4.41" -rand_chacha = "0.9.0" +server = { path = "server" } +replays = { path = "replays" } +chrono = "0.4.42" base64 = "0.22.1" +glam = "0.30.5" +reqwest = "0.12.24" +zip = "6.0.0" +enumset = "1.1.10" +fstr = { path = "crates/fstr" } [profile.dev.package."*"] opt-level = 3 @@ -24,3 +33,6 @@ opt-level = 3 [profile.release] codegen-units = 1 lto = "thin" + +[features] +dungeon-breaker = [] diff --git a/crates/fstr/Cargo.lock b/crates/fstr/Cargo.lock new file mode 100644 index 0000000..5935b2e --- /dev/null +++ b/crates/fstr/Cargo.lock @@ -0,0 +1,16 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "arcstr" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03918c3dbd7701a85c6b9887732e2921175f26c350b4563841d0958c21d57e6d" + +[[package]] +name = "fstr" +version = "0.1.0" +dependencies = [ + "arcstr", +] diff --git a/crates/fstr/Cargo.toml b/crates/fstr/Cargo.toml new file mode 100644 index 0000000..5bb7e01 --- /dev/null +++ b/crates/fstr/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "fstr" +version = "0.1.0" +edition = "2024" + +[dependencies] +arcstr = { version = "1.2.0", features = ["substr", "std"] } +uuid = "1.18.1" diff --git a/crates/fstr/src/fstr.rs b/crates/fstr/src/fstr.rs new file mode 100644 index 0000000..dd75c80 --- /dev/null +++ b/crates/fstr/src/fstr.rs @@ -0,0 +1,131 @@ +use std::{fmt::Display, ops::RangeBounds}; + +use arcstr::Substr; + +use crate::{import_shared, inner::Inner, shared::Shared, utils::{bounds_to_range, valid_str}, FString}; + +/// Reference into an owned FString. +/// Think of it as how &str is to String. +/// This doesnt increment the reference count until its converted to an owned value. +/// +/// Fstrs do not implicitely deref into strs to prevent str view methods (ex: most str iterators) from being used over Fstr versions. +#[derive(Debug, Clone, Hash, PartialEq, Eq)] +pub struct Fstr<'a> { + string: &'a Inner, + start: u32, + end: u32, +} + +impl<'a> Fstr<'a> { + pub const EMPTY: Fstr<'static> = Fstr { + string: &Inner::Static(""), + start: 0, + end: 0, + }; + + /// creates a new FStr from a FString given range bounds. + /// + /// # Panics + /// + /// May panic if the index is out of bounds. + pub fn from_fstring(s: &'a FString, range: impl RangeBounds) -> Self { + let (start, end) = bounds_to_range(range, s.len()); + + if valid_str(s.as_str(), start, end) { + // SAFETY: We just checked that the indexes are valid for the substring. + unsafe { Self::new_unchecked(&s.0, start, end) } + } else { + panic!("{}, index by {}..{} is invalid.", s.as_str(), start, end) + } + } + + pub(super) unsafe fn new_unchecked(s: &'a Inner, start: usize, end: usize) -> Self { + Self { + string: s, + start: start as u32, + end: end as u32, + } + } + + /// gets the length of the string. + #[inline(always)] + pub fn len(&self) -> usize { + self.end as usize - self.start as usize + } + + fn parent_len(&self) -> usize { + self.string.len() + } + + /// Creates an owned FString from this FStr. + /// + /// This will inline itself if the str is less than 22 bytes, + /// Increment the referene count if it is backed by an arc, + /// or return a static reference if the underlying data is static. + pub fn to_owned(&self) -> FString { + let (start, end) = (self.start as usize, self.end as usize); + debug_assert!(valid_str(self.string.as_str(), start, end), "Fstr_to_owned"); + + if self.len() <= 22 { + let bytes = self.string.as_str().as_bytes(); + // SAFETY: Fstrs should be valid on construction. + let inner = unsafe { Inner::inline_unchecked(bytes, start..end) }; + return FString(inner) + } + + let inner = match self.string { + Inner::Inline { len: _, bytes: _ } => unreachable!(), // full len inline strs will just create a new inline from the check above. + Inner::Arced(arc) => Inner::Substr(unsafe { Substr::from_parts_unchecked(arc.clone(), start..end) }), + Inner::Substr(str) => { + let range_start = str.range().start; + let start = range_start + start; + let end = range_start + end; + Inner::Substr(unsafe { Substr::from_parts_unchecked(str.parent().clone(), start..end) }) + } + Inner::Static(str) => Inner::Static(unsafe { &str.get_unchecked(start..end) }) + }; + + FString(inner) + } + + import_shared!(); +} + +impl Shared for Fstr<'_> { + #[inline] + fn substr(&self, range: impl RangeBounds) -> Fstr<'_> { + let (range_start, range_end) = bounds_to_range(range,self.parent_len()); + let start = range_start as u32 + self.start; + let end = (range_start + range_end) as u32; + Self { + string: self.string, + start, + end, + } + } + + #[inline] + fn recover(&self, str: &str) -> Fstr<'_> { + let self_ptr = self.as_str().as_ptr() as usize; + let slice_ptr = str.as_ptr() as usize; + + let start = slice_ptr - self_ptr; + let end = start + str.len(); + + self.substr(start..end) + } + + #[inline(always)] + fn as_str(&self) -> &str { + let (start, end) = (self.start as usize, self.end as usize); + // SAFETY: Fstrs should be valid on construction. + unsafe { self.string.as_str().get_unchecked(start..end) } + } +} + +impl Display for Fstr<'_> { + #[inline(always)] + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Display::fmt(self.as_str(), f) + } +} \ No newline at end of file diff --git a/crates/fstr/src/fstring.rs b/crates/fstr/src/fstring.rs new file mode 100644 index 0000000..d22d719 --- /dev/null +++ b/crates/fstr/src/fstring.rs @@ -0,0 +1,156 @@ +use std::{borrow::Borrow, fmt::Display, hash::Hash, ops::RangeBounds, str::Utf8Error}; + +use uuid::Uuid; + +use crate::{import_shared, inner::Inner, shared::Shared, Fstr}; + +/// Cheaply clonable, immutable string, with the same stack size as a String. +/// FStrings have substrings similar to bytes::Bytes, which +/// enables iterators over FStrings to produce references to the same allocation but over different parts. +/// +/// inlined if the string is less than 22 bytes, +/// Arced if more, +/// Static if static. +/// +/// FStrings must be explicitely created to and from string slices to ensure allocations are explicit. +/// if you dont need an owned slice but may pass it around somewhere that does, you can use an Fstr or &FString. +/// &'static strs can be made using FString::from() and will not allocate. +/// non static strs can be made into FStrings using either FString::new() or str.to_fstring() +/// +/// FStrings do not implicitely deref into strs to prevent str view methods (ex: most str iterators) from being used over FString versions. +#[derive(Debug, Clone, Hash, PartialEq, Eq)] +#[repr(transparent)] +pub struct FString(pub(super) Inner); + +impl FString { + pub const EMPTY: FString = FString(Inner::Static("")); + + /// creates an fstring from a static reference. + /// + /// this will never allocate. + #[inline(always)] + pub fn new_static(s: &'static str) -> Self { + Self(Inner::Static(s)) + } + + /// Creates a FString from a string reference. + /// + /// This will allocate if the str is longer than 22 bytes. + #[inline(always)] + pub fn new(s: &str) -> Self { + Self(Inner::new(s)) + } + + /// Creates a Fstr from this FString. + /// + /// This will not clone, copy data, or allocate. + #[inline(always)] + pub fn as_fstr(&self) -> Fstr<'_> { + Fstr::from_fstring(self, ..) + } + + /// creates a new FString from bytes. + /// This will fail if the bytes are not valid UTF-8. + /// + /// This will allocate if the byte slice contains more than 22 bytes. + #[inline(always)] + pub fn from_bytes(bytes: &[u8]) -> Result { + let str = str::from_utf8(bytes)?; + Ok(Self::new(str)) + } + + /// gets the length of the string. + #[inline(always)] + pub fn len(&self) -> usize { + self.0.len() + } + + /// returns true if the string is stored inline on the stack. + #[inline(always)] + pub fn is_inline(&self) -> bool { + matches!(self.0, Inner::Inline { .. }) + } + + import_shared!(); +} + +impl Shared for FString { + #[inline(always)] + fn substr(&self, range: impl RangeBounds) -> Fstr<'_> { + Fstr::from_fstring(self, range) + } + + #[inline] + fn recover(&self, str: &str) -> Fstr<'_> { + let self_ptr = self.as_str().as_ptr() as usize; + let slice_ptr = str.as_ptr() as usize; + + let start = slice_ptr - self_ptr; + let end = start + str.len(); + + self.substr(start..end) + } + + #[inline(always)] + fn as_str(&self) -> &str { + self.0.as_str() + } +} + +impl From<&Fstr<'_>> for FString { + fn from(value: &Fstr<'_>) -> Self { + value.to_owned() + } +} + +impl From<&Uuid> for FString { + fn from(value: &Uuid) -> Self { + FString::new(value.as_hyphenated().encode_lower(&mut Uuid::encode_buffer())) + } +} + +impl From for FString { + fn from(value: Uuid) -> Self { + FString::new(value.hyphenated().encode_lower(&mut Uuid::encode_buffer())) + } +} + +impl From> for FString { + fn from(value: Fstr<'_>) -> Self { + value.to_owned() + } +} + +impl From<&FString> for FString { + #[inline(always)] + fn from(value: &FString) -> Self { + value.clone() + } +} + +impl From<&String> for FString { + #[inline(always)] + fn from(value: &String) -> Self { + Self::new(value) + } +} + +impl From<&'static str> for FString { + #[inline(always)] + fn from(value: &'static str) -> Self { + Self::new_static(value) + } +} + +impl Borrow for FString { + fn borrow(&self) -> &str { + self.as_str() + } +} + +impl Display for FString { + #[inline(always)] + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + Display::fmt(self.as_str(), f) + } +} \ No newline at end of file diff --git a/crates/fstr/src/inner.rs b/crates/fstr/src/inner.rs new file mode 100644 index 0000000..e0d902d --- /dev/null +++ b/crates/fstr/src/inner.rs @@ -0,0 +1,78 @@ +use std::{hash::Hash, ops::Range, str::FromStr}; + +use arcstr::{ArcStr, Substr}; + +use crate::utils::valid_str; + +#[derive(Debug, Clone)] +pub(super) enum Inner { + Inline { + len: u8, + bytes: [u8; 22], + }, + Arced(ArcStr), + Substr(Substr), + Static(&'static str), // technically ArcStr can do static strings, but it doesnt give us a good method of handling them without a macro. +} + +impl Inner { + pub(super) fn new(s: &str) -> Self { + if s.len() <= 22 { + // SAFETY: the entire string will always be valid if its smaller than 22 bytes. + unsafe { + Self::inline_unchecked(s.as_bytes(), 0..s.len()) + } + } else { + Self::Arced(ArcStr::from_str(s).unwrap()) + } + } + + #[inline(always)] + pub(super) fn len(&self) -> usize { + match self { + Self::Inline { len, bytes: _ } => *len as usize, + Self::Arced(str) => str.len(), + Self::Substr(str) => str.len(), + Self::Static(str) => str.len(), + } + } + + #[inline(always)] + pub(super) fn as_str(&self) -> &str { + match self { + Self::Inline { len, bytes } => unsafe { + // SAFETY: FStringInners should always be valid on construction. + str::from_utf8_unchecked(&bytes[..*len as usize]) + } + Self::Arced(str) => str, + Self::Substr(str) => str, + Self::Static(str) => str, + } + } + + pub(super) unsafe fn inline_unchecked(bytes: &[u8], range: Range) -> Self { + let mut buffer = [0u8; 22]; + debug_assert!(valid_str(str::from_utf8(bytes).unwrap(), range.start, range.end)); + let len = range.end - range.start; + unsafe { + buffer.get_unchecked_mut(..len).copy_from_slice(bytes.get_unchecked(range)); + } + Self::Inline { len: len as u8, bytes: buffer } + } +} + +impl PartialEq for Inner { + #[inline(always)] + fn eq(&self, other: &Self) -> bool { + self.as_str() == other.as_str() + } +} + +impl Eq for Inner {} + +impl Hash for Inner { + #[inline(always)] + fn hash(&self, state: &mut H) { + self.as_str().hash(state); + } +} diff --git a/crates/fstr/src/iterator.rs b/crates/fstr/src/iterator.rs new file mode 100644 index 0000000..fd9c795 --- /dev/null +++ b/crates/fstr/src/iterator.rs @@ -0,0 +1,33 @@ +#![allow(private_bounds)] + +use crate::{shared::Shared, Fstr}; + +pub struct FstrIter<'a, T: Shared + ?Sized, I: Iterator> { + string: &'a T, + iter: I, +} + +// FstrIters should never be made with a iterator over a &str other than the Fstr's own. + +impl<'a, T: Shared + ?Sized, I: Iterator> FstrIter<'a, T, I> { + #[inline(always)] + pub fn new(string: &'a T, f: fn(&'a str) -> I) -> Self { + Self { string, iter: f(string.as_str()) } + } + + #[inline(always)] + pub fn new_param

(string: &'a T, p: P, f: fn(&'a str, P) -> I) -> Self { + Self { string, iter: f(string.as_str(), p) } + } +} + +impl<'a, T: Shared, I: Iterator> Iterator for FstrIter<'a, T, I> { + type Item = Fstr<'a>; + + // we can just piggy back off the input iterator and get our cheap copy strings out of it. + // might be faster to not do that but it doesnt copy or allocate or anything i think so its fine. + fn next(&mut self) -> Option { + let next = self.iter.next()?; + Some(self.string.recover(next)) + } +} \ No newline at end of file diff --git a/crates/fstr/src/lib.rs b/crates/fstr/src/lib.rs new file mode 100644 index 0000000..b035127 --- /dev/null +++ b/crates/fstr/src/lib.rs @@ -0,0 +1,12 @@ +mod fstring; +mod inner; +mod iterator; +mod fstr; +mod utils; +mod shared; +mod to_fstring; + +pub use fstring::FString as FString; +pub use fstr::Fstr as Fstr; +pub use iterator::FstrIter as FstrIter; +pub use to_fstring::ToFString as ToFString; \ No newline at end of file diff --git a/crates/fstr/src/shared.rs b/crates/fstr/src/shared.rs new file mode 100644 index 0000000..4f5a804 --- /dev/null +++ b/crates/fstr/src/shared.rs @@ -0,0 +1,74 @@ +use std::ops::RangeBounds; + +use crate::{Fstr, FstrIter}; + +pub(super) trait Shared { + fn recover(&self, str: &str) -> Fstr<'_>; + fn substr(&self, range: impl RangeBounds) -> Fstr<'_>; + + fn with_iter<'a, I: Iterator>(&'a self, iter: fn(&'a str) -> I) -> FstrIter<'a, Self, I> { + FstrIter::new(self, iter) + } + + fn with_iter_param<'a, P, I: Iterator>(&'a self, p: P, iter: fn(&'a str, P) -> I) -> FstrIter<'a, Self, I> { + FstrIter::new_param(self, p, iter) + } + + fn as_str(&self) -> &str; +} + +#[macro_export] +macro_rules! import_shared { + () => { + /// Recovers a Fstr from this &str if it is a reference to the same data. + /// + /// This will never allocate. + #[inline(always)] + pub fn recover(&self, s: &str) -> Fstr<'_> { + ::recover(self, s) + } + + /// Gets a Fstr reference to a substring of this Fstr/FString. + /// + /// This will never allocate. + #[inline(always)] + pub fn substr(&self, range: impl std::ops::RangeBounds) -> Fstr<'_> { + ::substr(self, range) + } + + /// Gets an iterator over this Fstr/FString using a str iterator. + /// + /// strs the backing iterator would normally return are recovered into Fstrs for cheap cloning. + #[inline(always)] + pub fn with_iter<'l, I: Iterator>( + &'l self, + iter: fn(&'l str) -> I, + ) -> super::FstrIter<'l, Self, I> + where + Self: Sized, + { + ::with_iter(self, iter) + } + + /// Gets an iterator with a single parameter over this Fstr/FString using a str iterator. + /// + /// strs the backing iterator would normally return are recovered into Fstrs for cheap cloning. + #[inline(always)] + pub fn with_iter_param<'l, P, I: Iterator>( + &'l self, + p: P, + iter: fn(&'l str, P) -> I, + ) -> super::FstrIter<'l, Self, I> + where + Self: Sized, + { + ::with_iter_param(self, p, iter) + } + + /// gets a &str from this Fstr/FString. + #[inline(always)] + pub fn as_str(&self) -> &str { + ::as_str(self) + } + }; +} \ No newline at end of file diff --git a/crates/fstr/src/to_fstring.rs b/crates/fstr/src/to_fstring.rs new file mode 100644 index 0000000..c563f08 --- /dev/null +++ b/crates/fstr/src/to_fstring.rs @@ -0,0 +1,20 @@ +use uuid::Uuid; + +use crate::FString; + +pub trait ToFString { + fn to_fstring(&self) -> FString; +} + +impl ToFString for &str { + /// this WILL allocate even on static strings. + fn to_fstring(&self) -> FString { + FString::new(self) + } +} + +impl ToFString for Uuid { + fn to_fstring(&self) -> FString { + FString::from(self) + } +} \ No newline at end of file diff --git a/crates/fstr/src/utils.rs b/crates/fstr/src/utils.rs new file mode 100644 index 0000000..dbf2fcd --- /dev/null +++ b/crates/fstr/src/utils.rs @@ -0,0 +1,23 @@ +use std::ops::RangeBounds; + +#[inline] +pub fn bounds_to_range(bounds: impl RangeBounds, len: usize) -> (usize, usize) { + use std::ops::Bound; + let begin = match bounds.start_bound() { + Bound::Included(&n) => n, + Bound::Excluded(&n) => n + 1, + Bound::Unbounded => 0, + }; + + let end = match bounds.end_bound() { + Bound::Included(&n) => n + 1, + Bound::Excluded(&n) => n, + Bound::Unbounded => len, + }; + (begin, end) +} + +#[inline(always)] +pub fn valid_str(s: &str, start: usize, end: usize) -> bool { + s.get(start..end).is_some() +} \ No newline at end of file diff --git a/crates/macros/src/entity_metadata.rs b/crates/macros/src/entity_metadata.rs new file mode 100644 index 0000000..d656be8 --- /dev/null +++ b/crates/macros/src/entity_metadata.rs @@ -0,0 +1,309 @@ +use proc_macro::TokenStream; +use proc_macro2::{Ident, TokenStream as TokenStream2}; +use quote::{format_ident, quote, ToTokens}; +use syn::parse::{Parse, ParseStream}; +use syn::punctuated::Punctuated; +use syn::{parse_macro_input, Attribute, Expr, Token, Type, Visibility}; + +struct MetadataField { + metadata_id: usize, + visibility: Visibility, + ident: Ident, + ty: Type, + default_expr: Option, +} + +impl Parse for MetadataField { + fn parse(input: ParseStream) -> syn::Result { + + let id_lit: syn::LitInt = input.parse()?; + let metadata_id = id_lit.base10_parse::()?; + + let _: Token![=>] = input.parse()?; + + let visibility: Visibility = input.parse()?; + + let ident: Ident = input.parse()?; + let _: Token![:] = input.parse()?; + let ty: Type = input.parse()?; + + let default_expr = if input.peek(Token![=]) { + let _: Token![=] = input.parse()?; + Some(input.parse()?) + } else { + None + }; + + Ok(Self { + visibility, + metadata_id, + ident, + ty, + default_expr, + }) + } +} + +impl ToTokens for MetadataField { + fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { + let vis = &self.visibility; + let ident = &self.ident; + let ty = &self.ty; + + tokens.extend(quote! { + #vis #ident: #ty + }); + } +} + +struct EnumVariant { + pub ident: Ident, + pub fields: Vec, +} + +impl Parse for EnumVariant { + fn parse(input: ParseStream) -> syn::Result { + let ident = input.parse()?; + + let braced; + syn::braced!(braced in input); + let punctuated: Punctuated = + Punctuated::parse_terminated(&braced)?; + Ok(Self { + ident, + fields: punctuated.into_iter().collect(), + }) + } +} + +enum MetadataInput { + Struct { + attrs: Vec, + visibility: Visibility, + ident: Ident, + fields: Vec, + }, + Enum { + attrs: Vec, + visibility: Visibility, + ident: Ident, + variants: Vec, + }, +} + +impl Parse for MetadataInput { + fn parse(input: ParseStream) -> syn::Result { + let attrs: Vec = input.call(Attribute::parse_outer)?; + let visibility: Visibility = input.parse()?; + + if input.peek(Token![struct]) { + let _: Token![struct] = input.parse()?; + let ident = input.parse()?; + + let braced; + syn::braced!(braced in input); + let punctuated: Punctuated = + Punctuated::parse_terminated(&braced)?; + + Ok(Self::Struct { + attrs, + visibility, + ident, + fields: punctuated.into_iter().collect(), + }) + } else { + let _: Token![enum] = input.parse()?; + let ident = input.parse()?; + + let braced; + syn::braced!(braced in input); + let punctuated: Punctuated = + Punctuated::parse_terminated(&braced)?; + + Ok(Self::Enum { + attrs, + visibility, + ident, + variants: punctuated.into_iter().collect(), + }) + } + } +} + +pub fn entity_metadata_serializable_macro(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as MetadataInput); + match input { + MetadataInput::Struct { attrs, visibility, ident, fields } => { + + let mut write_size_stream: Vec = Vec::new(); + let mut write_stream: TokenStream2 = TokenStream2::new(); + + // if this doesn't match length but != 0, + // that means only some implement a default expr + let mut default_expr_counter = 0; + let mut default_stream: TokenStream2 = TokenStream2::new(); + + for field in fields.iter() { + let ident = &field.ident; + let ty = &field.ty; + let id = field.metadata_id as u8; + + write_size_stream.push(quote! { + 1 + self.#ident.write_size() + }); + write_stream.extend(quote! { + u8::write(&(<#ty as MetadataSerializable>::ID << 5 | #id & 31), buf); + <#ty as PacketSerializable>::write(&self.#ident, buf); + }); + + if let Some(expr) = &field.default_expr { + default_expr_counter += 1; + default_stream.extend(quote! { #ident: #expr, }) + } + } + + let default_impl = if default_expr_counter == fields.len() { + quote! { + impl Default for #ident { + fn default() -> Self { + Self { + #default_stream + } + } + } + } + } else if default_expr_counter != 0 { + quote! { + compile_error!("This implements a default value for only some values. It must be implemented for all"); + } + } else { + quote! {} + }; + + quote! { + #(#attrs)* + #visibility struct #ident { + #(#fields),* + } + + impl PacketSerializable for #ident { + fn write_size(&self) -> usize { + 1 + #(#write_size_stream)+* + } + fn write(&self, buf: &mut bytes::BytesMut) { + #write_stream + u8::write(&127, buf); + } + } + + #default_impl + } + } + MetadataInput::Enum { attrs, visibility, ident, variants } => { + + let mut field_stream: TokenStream2 = TokenStream2::new(); + let mut metadata_impls: Vec = Vec::new(); + + let mut write_size_stream: Vec = Vec::new(); + let mut write_stream: TokenStream2 = TokenStream2::new(); + + for variant in variants.iter() { + let ident = &variant.ident; + let fields = &variant.fields; + let metadata_ident = format_ident!("{}{}", ident, "Metadata"); + + // if this doesn't match length but != 0, + // that means only some implement a default expr + let mut default_expr_counter = 0; + let mut default_stream: TokenStream2 = TokenStream2::new(); + + field_stream.extend(quote! { + #ident(#metadata_ident), + }); + + let mut variant_write_sizes: Vec = Vec::new(); + let mut variant_writes: TokenStream2 = TokenStream2::new(); + + for field in fields { + let ident = &field.ident; + let ty = &field.ty; + let id = field.metadata_id as u8; + + variant_write_sizes.push(quote! { + 1 + metadata.#ident.write_size() + }); + variant_writes.extend(quote! { + u8::write(&(<#ty as MetadataSerializable>::ID << 5 | #id & 31), buf); + <#ty as PacketSerializable>::write(&metadata.#ident, buf); + }); + + if let Some(expr) = &field.default_expr { + default_expr_counter += 1; + default_stream.extend(quote! { #ident: #expr, }) + } + } + + write_size_stream.push(quote! { + Self::#ident(metadata) => { + #(#variant_write_sizes)+* + } + }); + write_stream.extend(quote! { + Self::#ident(metadata) => { + #variant_writes + } + }); + + let default_impl = if default_expr_counter == fields.len() { + quote! { + impl Default for #metadata_ident { + fn default() -> Self { + Self { + #default_stream + } + } + } + } + } else if default_expr_counter != 0 { + quote! { + compile_error!("This implements a default value for only some values. It must be implemented for all"); + } + } else { + quote! {} + }; + + metadata_impls.push(quote! { + #(#attrs)* + #visibility struct #metadata_ident { + #(#fields),* + } + + #default_impl + }) + } + + quote! { + #(#attrs)* + #visibility enum #ident { + #field_stream + } + + impl PacketSerializable for #ident { + fn write_size(&self) -> usize { + 1 + match self { + #(#write_size_stream)* + } + } + fn write(&self, buf: &mut bytes::BytesMut) { + match self { + #write_stream + } + u8::write(&127, buf); + } + } + + #(#metadata_impls)* + } + } + }.into() +} diff --git a/crates/macros/src/lib.rs b/crates/macros/src/lib.rs index bc190b6..f1ce0d6 100644 --- a/crates/macros/src/lib.rs +++ b/crates/macros/src/lib.rs @@ -1,6 +1,8 @@ mod packet_serializable; mod packet_deserializable; +mod entity_metadata; +use crate::entity_metadata::entity_metadata_serializable_macro; use crate::packet_deserializable::packet_deserializable_macro; use crate::packet_serializable::packet_serializable_macro; use proc_macro::TokenStream; @@ -17,6 +19,11 @@ pub fn packet_deserializable(input: TokenStream) -> TokenStream { packet_deserializable_macro(input) } +#[proc_macro] +pub fn entity_metadata_serializable(input: TokenStream) -> TokenStream { + entity_metadata_serializable_macro(input) +} + // todo: new file for block stuff // at that point im redoing the macro @@ -46,8 +53,8 @@ pub fn block_macro(input: TokenStream) -> TokenStream { let rotate_arms = build_rotate(enum_name, &input_enum); let expanded = quote! { - use crate::server::block::metadata::BlockMetadata; - use crate::server::block::rotatable::Rotatable; + use crate::block::metadata::BlockMetadata; + use crate::block::rotatable::Rotatable; #input_enum diff --git a/crates/macros/src/packet_deserializable.rs b/crates/macros/src/packet_deserializable.rs index d9a0c0e..e9edf0a 100644 --- a/crates/macros/src/packet_deserializable.rs +++ b/crates/macros/src/packet_deserializable.rs @@ -10,13 +10,13 @@ pub fn packet_deserializable_macro(input: TokenStream) -> TokenStream { let name = &item_struct.ident; let fields = item_struct.fields.iter().map(|field| { let ident = &field.ident; - quote! { #ident: crate::net::packets::packet_deserialize::PacketDeserializable::read(buffer)?, } + quote! { #ident: crate::network::packets::packet_deserialize::PacketDeserializable::read(buffer)?, } }); quote! { #input - impl crate::net::packets::packet_deserialize::PacketDeserializable for #name { - fn read(buffer: &mut bytes::BytesMut) -> anyhow::Result { + impl crate::network::packets::packet_deserialize::PacketDeserializable for #name { + fn read(buffer: &mut impl bytes::Buf) -> anyhow::Result { Ok(Self { #(#fields)* }) @@ -42,9 +42,9 @@ pub fn packet_deserializable_macro(input: TokenStream) -> TokenStream { quote! { #input - impl crate::net::packets::packet_deserialize::PacketDeserializable for #name { - fn read(buffer: &mut bytes::BytesMut) -> anyhow::Result { - let id: i8 = crate::net::packets::packet_deserialize::PacketDeserializable::read(buffer)?; + impl crate::network::packets::packet_deserialize::PacketDeserializable for #name { + fn read(buffer: &mut impl bytes::Buf) -> anyhow::Result { + let id: i8 = crate::network::packets::packet_deserialize::PacketDeserializable::read(buffer)?; match id { #(#variants)* _ => Err(anyhow::anyhow!("Invalid id ({}) for enum {}", id, stringify!(#name))) diff --git a/crates/macros/src/packet_serializable.rs b/crates/macros/src/packet_serializable.rs index 5d66428..f51bfc6 100644 --- a/crates/macros/src/packet_serializable.rs +++ b/crates/macros/src/packet_serializable.rs @@ -2,7 +2,7 @@ use proc_macro::TokenStream; use proc_macro2::Ident; use quote::quote; use syn::parse::{Parse, ParseStream}; -use syn::{parse_macro_input, token, Expr, Generics, Token, Type, Visibility}; +use syn::{parse_macro_input, Attribute, Expr, Generics, Token, Type, Visibility}; struct Field { vis: Visibility, @@ -42,23 +42,29 @@ impl Parse for Field { } struct PacketStruct { + attrs: Vec, vis: Visibility, - struct_token: Token![struct], + // _struct_token: Token![struct], name: Ident, generics: Generics, - brace_token: token::Brace, + // brace_token: token::Brace, fields: Vec, } impl Parse for PacketStruct { fn parse(input: ParseStream) -> syn::Result { + let attrs: Vec = input.call(Attribute::parse_outer)?; let vis: Visibility = input.parse()?; - let struct_token: Token![struct] = input.parse()?; + let _struct_token: Token![struct] = input.parse()?; let name: Ident = input.parse()?; - let generics: Generics = input.parse()?; + let mut generics: Generics = input.parse()?; + + if input.peek(Token![where]) { + generics.where_clause = Some(input.parse()?); + } let content; - let brace_token = syn::braced!(content in input); + let _brace_token = syn::braced!(content in input); let mut fields = Vec::new(); while !content.is_empty() { @@ -66,11 +72,12 @@ impl Parse for PacketStruct { } Ok(Self { + attrs, vis, - struct_token, + // _struct_token, name, generics, - brace_token, + // brace_token, fields, }) } @@ -79,6 +86,7 @@ impl Parse for PacketStruct { pub fn packet_serializable_macro(input: TokenStream) -> TokenStream { let parsed = parse_macro_input!(input as PacketStruct); let PacketStruct { + attrs, vis, name, generics, @@ -121,11 +129,12 @@ pub fn packet_serializable_macro(input: TokenStream) -> TokenStream { }); quote! { + #(#attrs)* #vis struct #name #generics { #(#struct_fields)* } - impl #impl_generics crate::net::packets::packet_serialize::PacketSerializable for #name #ty_generics #where_clause { + impl #impl_generics crate::network::packets::packet_serialize::PacketSerializable for #name #ty_generics #where_clause { fn write_size(&self) -> usize { #(#write_size_fields)+* } diff --git a/replays/.gitignore b/replays/.gitignore new file mode 100644 index 0000000..4d058e2 --- /dev/null +++ b/replays/.gitignore @@ -0,0 +1 @@ +/test_replays \ No newline at end of file diff --git a/replays/Cargo.lock b/replays/Cargo.lock new file mode 100644 index 0000000..d265374 --- /dev/null +++ b/replays/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "replaysystem" +version = "0.1.0" diff --git a/replays/Cargo.toml b/replays/Cargo.toml new file mode 100644 index 0000000..fa03937 --- /dev/null +++ b/replays/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "replays" +version = "0.1.0" +edition = "2024" + +[dependencies] +anyhow = "1.0.100" +bytes = "1.10.1" +chrono = "0.4.42" +tokio = { version = "1.47.1", features = ["rt", "macros", "io-util", "sync", "time", "fs"] } +uuid = { version = "1.18.1" } +fstr = { path = "../crates/fstr"} + +[dev-dependencies] +uuid = { version = "1.18.1", features = ["v4"]} diff --git a/replays/src/error.rs b/replays/src/error.rs new file mode 100644 index 0000000..6a51917 --- /dev/null +++ b/replays/src/error.rs @@ -0,0 +1,55 @@ +use std::{error::Error, fmt::Display, str::Utf8Error}; +use bytes::TryGetError; +use tokio::io; + + +#[derive(Debug)] +pub enum BufferError { + AlreadyOpen, + EndOfFile, + Pending, + Other(anyhow::Error) +} + +impl From for BufferError { + fn from(value: anyhow::Error) -> Self { + Self::Other(value) + } +} + +impl From for BufferError { + fn from(value: io::Error) -> Self { + Self::Other(anyhow::Error::from(value)) + } +} + +impl From for BufferError { + fn from(value: Utf8Error) -> Self { + Self::Other(anyhow::Error::from(value)) + } +} + +impl From for BufferError { + fn from(_: TryGetError) -> Self { + Self::Pending + } +} + +impl From for io::Error { + fn from(value: BufferError) -> Self { + io::Error::other(value) + } +} + +impl Error for BufferError {} + +impl Display for BufferError { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::AlreadyOpen => f.write_str("Buffer already open!"), + Self::EndOfFile => f.write_str("End of File!"), + Self::Pending => f.write_str("Pending packets!"), + Self::Other(e) => e.fmt(f) + } + } +} \ No newline at end of file diff --git a/replays/src/lib.rs b/replays/src/lib.rs new file mode 100644 index 0000000..5f0c06f --- /dev/null +++ b/replays/src/lib.rs @@ -0,0 +1,94 @@ +mod record; +mod replay; +mod error; +mod replay_packet; + +pub use replay::run_replay::ReplayHandler as ReplayHandler; +pub use record::run_record::RecordHandler as RecordHandler; + +pub use replay::replay_callback::ReplayCallback as ReplayCallback; + +pub use replay_packet::ReplayPacket as ReplayPacket; + +pub const VERSION: &str = env!("CARGO_PKG_VERSION"); + +#[cfg(test)] +mod tests { + use std::{path::PathBuf, time::{Duration, Instant}}; + + use bytes::{Buf, Bytes}; + use fstr::ToFString; + use tokio::sync::oneshot; + use uuid::Uuid; + + use crate::{RecordHandler, ReplayCallback, ReplayHandler, ReplayPacket}; + + pub struct Callback { + state: u64 + } + + impl ReplayCallback for Callback { + async fn callback(&mut self, mut packet: ReplayPacket) { + let data = packet.packet.get_u64(); + println!("recieved: {}", data); + assert_eq!(data, self.state); + self.state += 1; + } + } + + #[test] + fn start_replay() { + let rt = tokio::runtime::Builder::new_current_thread().enable_all().build().unwrap(); + let (tx, mut rx) = oneshot::channel::(); + rt.block_on(async { + let recording = RecordHandler::spawn("test_replays"); + + recording.start(Box::new(|mut buf| { + Box::pin(async move { + buf.write(&111u64.to_be_bytes()).await + }) + }), Instant::now()).unwrap(); + + tokio::time::sleep(Duration::from_secs(1)).await; + + for i in 0usize..500usize { + recording.record( + Instant::now(), + Uuid::new_v4(), + Bytes::copy_from_slice(&i.to_be_bytes()) + ).unwrap(); + tokio::time::sleep(Duration::from_micros(100)).await; + } + + tokio::time::sleep(Duration::from_secs(1)).await; + + recording.save(Box::new(move |path_buf| { + Box::pin(async move { + println!("saved to {:?}", path_buf); + tx.send(path_buf).unwrap(); + Ok(()) + }) + })).unwrap(); + + tokio::time::sleep(Duration::from_secs(1)).await; + }); + + rt.block_on(async { + let path = rx.try_recv().unwrap(); + + let replay = ReplayHandler::spawn(|buf| { + Ok(buf.get_u64()) + }, Callback { state: 0 }); + + let res: u64 = replay.load(path.to_str().unwrap().to_fstring()).await.unwrap(); + assert_eq!(res, 111); + + replay.start(Instant::now()).unwrap(); + tokio::time::sleep(Duration::from_secs(3)).await; + + replay.end().unwrap(); + tokio::time::sleep(Duration::from_secs(3)).await; + println!("ended..."); + }) + } +} \ No newline at end of file diff --git a/replays/src/record/mod.rs b/replays/src/record/mod.rs new file mode 100644 index 0000000..bca4930 --- /dev/null +++ b/replays/src/record/mod.rs @@ -0,0 +1,4 @@ +mod record_buffer; +pub mod record_message; +pub mod run_record; +pub mod profile_id; \ No newline at end of file diff --git a/replays/src/record/profile_id.rs b/replays/src/record/profile_id.rs new file mode 100644 index 0000000..d40cac6 --- /dev/null +++ b/replays/src/record/profile_id.rs @@ -0,0 +1,16 @@ +use uuid::Uuid; + +#[derive(Debug)] +pub struct ProfileId { + uuid: Uuid +} + +impl ProfileId { + pub fn new(uuid: Uuid) -> Self { + Self { uuid } + } + + pub fn get_id(&self) -> Uuid { + self.uuid + } +} \ No newline at end of file diff --git a/replays/src/record/record_buffer.rs b/replays/src/record/record_buffer.rs new file mode 100644 index 0000000..28efda4 --- /dev/null +++ b/replays/src/record/record_buffer.rs @@ -0,0 +1,144 @@ +use std::path::PathBuf; + +use chrono::{Local, format::{DelayedFormat, StrftimeItems}}; +use tokio::{fs::{self, File}, io::{self, AsyncWriteExt, BufWriter}}; + +use crate::{VERSION, error::BufferError}; + +pub(super) struct RecordBuffer { + buffer: Option>, + + path: PathBuf, + temp_path: PathBuf, +} + +impl RecordBuffer { + pub async fn open_with(path: PathBuf) -> Result { + let mut buffer = Self::new(path); + buffer.initialize().await?; + Ok(buffer) + } + + pub(crate) fn get_writer<'a>(&'a mut self) -> Option> { + Some(RecordWriter::new(self.buffer.as_mut()?)) + } + + pub fn new(parent: PathBuf) -> Self { + let path = parent.join("replay.tmp"); + Self { + buffer: None, + + path: parent, + temp_path: path, + } + } + + pub async fn initialize(&mut self) -> Result<(), io::Error> { + if self.buffer.is_some() { panic!("Buffer should not be Some!")}; + fs::create_dir_all(&self.path).await?; + if let Err(e) = fs::rename(&self.temp_path, &self.path.join(partial_name())).await { + if e.kind() != io::ErrorKind::NotFound { return Err(e) } + } + Ok(()) + } + + pub async fn new_replay(&mut self) -> Result<(), io::Error> { + if self.buffer.is_some() { return Err(io::Error::other(BufferError::AlreadyOpen)) }; + + let file = File::create(&self.temp_path).await?; + let mut buffer = BufWriter::new(file); + + let version_bytes = const { + const BYTES: &[u8] = VERSION.as_bytes(); + const LEN: usize = BYTES.len(); + const LEN_BYTES: [u8; size_of::()] = (LEN as u64).to_be_bytes(); + let mut buffer = [0u8; size_of::() + LEN]; + let mut i = 0; + while i < LEN_BYTES.len() { + buffer[i] = LEN_BYTES[i]; + i += 1; + } + + let mut j = 0; + while j < LEN { + buffer[LEN_BYTES.len() + j] = BYTES[j]; + j += 1; + } + + buffer + }; + + buffer.write_all(&version_bytes).await?; + self.buffer = Some(buffer); + Ok(()) + } + + pub async fn write(&mut self, data: &[u8]) -> Result<(), io::Error> { + if let Some(buffer) = self.buffer.as_mut() { + buffer.write_all(data).await?; + } + Ok(()) + } + + pub async fn finish(&mut self) -> Result { + if let Some(mut buffer) = self.buffer.take() { + buffer.flush().await?; + } + let path = self.path.join(replay_name()); + fs::rename(&self.temp_path, &path).await?; + + Ok(path) + } +} + +pub struct RecordWriter<'a> { + buffer: &'a mut BufWriter, +} + +impl<'a> RecordWriter<'a> { + pub fn new(buffer: &'a mut BufWriter) -> Self { + Self { buffer } + } + + pub async fn write(&mut self, data: &[u8]) -> Result<(), io::Error> { + self.buffer.write_all(data).await + } +} + + +fn now<'a>() -> DelayedFormat> { + Local::now().format("%d.%m.%y_%H-%M-%S") +} + +fn partial_name() -> String { + format!("{}_partial_{}.rcrp", VERSION, now()) +} + +fn replay_name() -> String { + format!("{}_replay_{}.rcrp", VERSION, now()) +} + +#[cfg(test)] +#[test] +fn test() { + let version_bytes = const { + const BYTES: &[u8] = VERSION.as_bytes(); + const LEN: usize = BYTES.len(); + const LEN_BYTES: [u8; size_of::()] = (LEN as u64).to_be_bytes(); + let mut buffer = [0u8; size_of::() + LEN]; + let mut i = 0; + while i < LEN_BYTES.len() { + buffer[i] = LEN_BYTES[i]; + i += 1; + } + + let mut j = 0; + while j < LEN { + buffer[LEN_BYTES.len() + j] = BYTES[j]; + j += 1; + } + + buffer + }; + println!("bytes: {:?}", version_bytes) +} diff --git a/replays/src/record/record_message.rs b/replays/src/record/record_message.rs new file mode 100644 index 0000000..6745b60 --- /dev/null +++ b/replays/src/record/record_message.rs @@ -0,0 +1,25 @@ +use std::{future::Future, path::PathBuf, pin::Pin, time::Instant}; + +use bytes::Bytes; +use tokio::io; + +use crate::record::{profile_id::ProfileId, record_buffer::RecordWriter}; + +pub type AsyncWriteFn = Box FnOnce(RecordWriter<'a>) -> Pin> + Send + 'a>> + Send>; +pub type AsyncUploadFn = Box Pin> + Send>> + Send>; + +pub enum RecordMessage { + Start { + initializer: AsyncWriteFn, + at: Instant, + }, + Record { + received: Instant, + profile: ProfileId, + packet: Bytes, + }, + Save { + // this is so we can upload to the server directly on the existing record task. + upload: AsyncUploadFn + }, +} \ No newline at end of file diff --git a/replays/src/record/run_record.rs b/replays/src/record/run_record.rs new file mode 100644 index 0000000..54b272c --- /dev/null +++ b/replays/src/record/run_record.rs @@ -0,0 +1,109 @@ +use std::{path::PathBuf, time::Instant}; + +use bytes::Bytes; +use tokio::{sync::mpsc::{UnboundedReceiver, UnboundedSender, error::SendError, unbounded_channel}, task::AbortHandle}; +use uuid::Uuid; + +use crate::{record::{profile_id::ProfileId, record_buffer::RecordBuffer, record_message::{AsyncUploadFn, AsyncWriteFn, RecordMessage}}, replay_packet::ReplayPacket}; + +/// cheaply clonable handle for the record runner task. +#[derive(Debug, Clone)] +pub struct RecordHandler { + tx: UnboundedSender, + abort: AbortHandle +} + +impl RecordHandler { + /// spawns the recording task and returns a handle to it. + pub fn spawn(replay_path: &str) -> Self { + let (tx, rx) = unbounded_channel(); + let runner = RecordRunner::new(rx); + let handle = tokio::spawn(runner.run(PathBuf::from(replay_path))).abort_handle(); + Self { + tx, + abort: handle + } + } + + /// starts the recording with an initializer. + /// + /// # Example + /// ``` + /// handler.start(Box::new(|mut buf| { + /// Box::pin(async move { + /// buf.write(&111u64.to_be_bytes()).await + /// }) + /// }), Instant::now()).unwrap(); + /// ``` + pub fn start(&self, initializer_fn: AsyncWriteFn, at: Instant) -> Result<(), SendError> { + self.tx.send(RecordMessage::Start { initializer: initializer_fn, at }) + } + + /// records data to the replay. + /// + /// recorded data should be sent sequentially from its timing. If a packet is recorded after another but happened before, + /// it will wait for the prior packet(s) and then immedietly send. + pub fn record(&self, at: Instant, profile: Uuid, packet: Bytes) -> Result<(), SendError> { + self.tx.send(RecordMessage::Record { received: at, profile: ProfileId::new(profile), packet }) + } + + /// saves the replay and gives an async closure with the path the replay was saved to. + /// + /// # Examples + /// ``` + /// handler.save(Box::new(move |path_buf| { + /// Box::pin(async move { + /// println!("saved to {:?}", path_buf); + /// tx.send(path_buf).unwrap(); + /// Ok(()) + /// }) + /// })).unwrap(); + pub fn save(&self, upload_fn: AsyncUploadFn) -> Result<(), SendError> { + self.tx.send(RecordMessage::Save { upload: upload_fn }) + } + + pub fn abort(&self) { + self.abort.abort() + } +} + +pub struct RecordRunner { + rx: UnboundedReceiver +} + +impl RecordRunner { + fn new(rx: UnboundedReceiver) -> Self { + Self { + rx + } + } + + async fn run(mut self, replay_path: PathBuf) { + let mut start: Option = None; + let mut buffer: RecordBuffer = RecordBuffer::open_with(replay_path).await.unwrap(); + + while let Some(message) = self.rx.recv().await { + match message { + RecordMessage::Start { initializer, at } => { + start = Some(at); + + buffer.new_replay().await.unwrap(); + initializer(buffer.get_writer().unwrap() /* this unwrap is safe, the rest are for testing */).await.unwrap(); + } + RecordMessage::Record { received, profile, packet } => { + let Some(start) = start else { continue }; + let since_start = received.duration_since(start); + let packet = ReplayPacket { since_start, profile, packet, }.serialize(); + + buffer.write(&packet).await.unwrap(); + } + RecordMessage::Save { upload } => { + let path: PathBuf = buffer.finish().await.unwrap(); + upload(path).await.unwrap(); + } + } + } + + println!("Record thread died"); + } +} \ No newline at end of file diff --git a/replays/src/replay/mod.rs b/replays/src/replay/mod.rs new file mode 100644 index 0000000..acbc5ce --- /dev/null +++ b/replays/src/replay/mod.rs @@ -0,0 +1,4 @@ +mod replay_buffer; +pub mod replay_message; +pub mod run_replay; +pub mod replay_callback; diff --git a/replays/src/replay/replay_buffer.rs b/replays/src/replay/replay_buffer.rs new file mode 100644 index 0000000..3d05596 --- /dev/null +++ b/replays/src/replay/replay_buffer.rs @@ -0,0 +1,114 @@ +use std::{collections::VecDeque, time::Instant}; + +use bytes::{Buf, BytesMut}; +use tokio::{fs::File, io::{self, AsyncReadExt}, time::sleep_until}; + +use crate::{VERSION, error::BufferError, replay_packet::ReplayPacket}; + +#[derive(Debug)] +pub struct ReplayBuffer { + reader: File, + + buffer: BytesMut, + end_of_file: bool, + packets: VecDeque, + pending: usize, + + pub start: Instant, +} + +impl ReplayBuffer { + pub fn new(file: File) -> Self { + Self { + reader: file, + + buffer: BytesMut::with_capacity(8 * 1024), + end_of_file: false, + packets: VecDeque::with_capacity(30), + pending: 30, + + start: Instant::now(), + } + } + + pub async fn initialize(&mut self) -> Result<(), BufferError> { + self.reader.read_buf(&mut self.buffer).await?; + let length = self.buffer.try_get_u64()? as usize; + if self.buffer.remaining() < length { + return Err(BufferError::Pending) + } + + let version_bytes = self.buffer.split_to(length); + let version = str::from_utf8(&version_bytes).map_err(|e| io::Error::other(e))?; + + if version != VERSION { + eprintln!("Versions dont match!"); + } + + Ok(()) + } + + /// This will fill the buffer if the error is ReplayError::Pending, returning any other errors. + /// + /// # Example: + /// ``` + /// let test: Result = self.with_buffer(|buf| { + /// if buf.remaining() < 12 { + /// Err(ReplayError::Pending) + /// } else { + /// let bytes = buf.split_to(12); + /// let str = FString::from_bytes(&bytes)?; + /// Ok(str) + /// } + /// }).await; + /// ``` + pub async fn with_buffer(&mut self, f: fn(&mut BytesMut) -> Result) -> Result { + loop { + let res = f(&mut self.buffer); + let Err(BufferError::Pending) = res else { return res }; + let read = self.reader.read_buf(&mut self.buffer).await?; + if read == 0 { + self.end_of_file = true; + return Err(BufferError::EndOfFile) + } + continue + } + } + + /// this should be cancel safe (hopefully) + pub async fn fill_pending(&mut self) -> Result<(), BufferError> { + while self.pending > 0 { + if self.buffer.remaining() < ReplayPacket::LEN_SIZE { break }; + let size = (&self.buffer.chunk()[..ReplayPacket::LEN_SIZE]).get_u32() as usize; // we need to peek this u32, which is why we get a reference and then get from the reference instead of the buffer directly + if self.buffer.remaining() < ReplayPacket::LEN_SIZE + size { break }; + self.buffer.advance(ReplayPacket::LEN_SIZE); + self.packets.push_back(ReplayPacket::deserialize(&mut self.buffer)); + self.pending -= 1; + } + + if self.pending == 0 { return Ok(()) } + + if !self.end_of_file { + let read: usize = self.reader.read_buf(&mut self.buffer).await?; + if read == 0 { self.end_of_file = true; } + } + + if self.packets.is_empty() { + if self.end_of_file { return Err(BufferError::EndOfFile) } + else { return Err(BufferError::Pending) } + } + + return Ok(()) + } + + /// this should be cancel safe + pub async fn get_packet(&mut self) -> Result { + self.fill_pending().await?; + let packet = self.packets.front().expect("fill_pending() should error with pending or EOF if theres no packets available."); + sleep_until(tokio::time::Instant::from_std(self.start + packet.since_start)).await; + // we grab packet again here instead of popping it before to prevent consuming it before the .await, which could be cancelled. + let packet = self.packets.pop_front().unwrap(); + self.pending = self.pending.saturating_add(1); + Ok(packet) + } +} \ No newline at end of file diff --git a/replays/src/replay/replay_callback.rs b/replays/src/replay/replay_callback.rs new file mode 100644 index 0000000..4186664 --- /dev/null +++ b/replays/src/replay/replay_callback.rs @@ -0,0 +1,5 @@ +use crate::replay_packet::ReplayPacket; + +pub trait ReplayCallback: Send + Sync { + fn callback(&mut self, packet: ReplayPacket) -> impl std::future::Future + Send; +} \ No newline at end of file diff --git a/replays/src/replay/replay_message.rs b/replays/src/replay/replay_message.rs new file mode 100644 index 0000000..e79ec9e --- /dev/null +++ b/replays/src/replay/replay_message.rs @@ -0,0 +1,15 @@ +use std::time::Instant; + +use fstr::FString; +use tokio::{io, sync::oneshot}; + +pub enum ReplayMessage { + Load { + file: FString, + sender: oneshot::Sender> + }, + Start { + at: Instant, + }, + End, +} diff --git a/replays/src/replay/run_replay.rs b/replays/src/replay/run_replay.rs new file mode 100644 index 0000000..05140b2 --- /dev/null +++ b/replays/src/replay/run_replay.rs @@ -0,0 +1,124 @@ +use std::time::Instant; + +use bytes::BytesMut; +use fstr::FString; +use tokio::{fs::File, io, sync::{mpsc::{UnboundedReceiver, UnboundedSender, error::SendError, unbounded_channel}, oneshot}, task::AbortHandle}; + +use crate::{ReplayCallback, error::BufferError, replay::{replay_buffer::ReplayBuffer, replay_message::ReplayMessage}}; + +/// cheaply clonable handle for the Replay runner task. +pub struct ReplayHandler { + tx: UnboundedSender>, + abort: AbortHandle, +} + +impl ReplayHandler { + /// spawns the replay task and returns a handle to it. + /// + /// the init function is used to get data prepended in the replay, such as seed data. + /// It gives a BytesMut, but it should not have data added, only read. + /// if the init function returns a BufferError::Pending, it will poll the buffer for more data and try again if it read bytes. + /// this must match the init data put in the start message initializer for the saved replay. + /// + /// the callback will be run every time a packet is recieved at its correct time. + pub fn spawn(init: fn(&mut BytesMut) -> Result, callback: C) -> Self { + let (tx, rx) = unbounded_channel(); + let runner = ReplayRunner::new(rx, init, callback); + let handle = tokio::spawn(runner.run()).abort_handle(); + Self { tx, abort: handle } + } + + pub async fn load(&self, file: FString, ) -> anyhow::Result { + let (tx, rx) = oneshot::channel(); + self.tx.send(ReplayMessage::Load { file, sender: tx })?; + Ok(rx.await??) + } + + pub fn start(&self, at: Instant) -> Result<(), SendError>> { + self.tx.send(ReplayMessage::Start { at }) + } + + pub fn end(&self) -> Result<(), SendError>> { + self.tx.send(ReplayMessage::End) + } + + pub fn abort(&self) { + self.abort.abort() + } +} + +struct ReplayRunner { + rx: UnboundedReceiver>, + init: fn(&mut BytesMut) -> Result, + callback: C +} + +impl ReplayRunner { + fn new(rx: UnboundedReceiver>, init: fn(&mut BytesMut) -> Result, callback: C) -> Self { + Self { rx, init, callback } + } + + async fn run(mut self) { + let mut buffer: Option = None; + let mut play: Option = None; + + loop { + if let Some(buf) = buffer.as_mut() { + tokio::select! { + res = self.rx.recv() => { + let Some(msg) = res else { continue }; + match msg { + ReplayMessage::Load { file: _, sender: _ } => eprintln!("Already running a replay!"), + ReplayMessage::Start { at } => { + buf.start = at; + play = Some(at) + } + ReplayMessage::End => { + buffer = None; + play = None; + } + } + } + + res = buf.get_packet(), if play.is_some() => { + match res { + Ok(packet) => self.callback.callback(packet).await, + Err(BufferError::Pending) => continue, // hopefully impossible? + Err(BufferError::EndOfFile) => { + buffer = None; + play = None; + } + Err(_) => break, + } + } + } + } else { + while let Some(res) = self.rx.recv().await { + let ReplayMessage::Load { file, sender } = res else { + continue; + }; + match load(file.as_str(), self.init).await { + Ok((buf, res)) => { + buffer = Some(buf); + let _ = sender.send(Ok(res)); + } + Err(e) => { + let _ = sender.send(Err(e)); + } + } + break; + } + } + } + + println!("replay thread died"); + } +} + +async fn load(file: &str, init: fn(&mut BytesMut) -> Result) -> Result<(ReplayBuffer, T), io::Error> { + let file = File::open(file).await?; + let mut buffer = ReplayBuffer::new(file); + buffer.initialize().await?; + let res: T = buffer.with_buffer(init).await?; + Ok((buffer, res)) +} \ No newline at end of file diff --git a/replays/src/replay_packet.rs b/replays/src/replay_packet.rs new file mode 100644 index 0000000..4cc5e0c --- /dev/null +++ b/replays/src/replay_packet.rs @@ -0,0 +1,67 @@ +use std::time::Duration; + +use bytes::{Buf, BufMut, Bytes, BytesMut}; +use uuid::Uuid; + +use crate::record::profile_id::ProfileId; + +#[derive(Debug)] +pub struct ReplayPacket { + pub since_start: Duration, + pub profile: ProfileId, + pub packet: Bytes, +} + +impl ReplayPacket { + pub const LEN_SIZE: usize = size_of::(); + + // im not sure i like the custom serialization handling ive done here for these. it should probably reuse existing networking stuff, but i cant be bothered rn. + // it could also not do an allocation and write directly into the file buffer... + pub fn serialize(&self) -> Bytes { + let data_size = self.data_size(); + let full_size = Self::LEN_SIZE + data_size; + + let mut buffer = BytesMut::with_capacity(full_size); + let buf = &mut buffer; + + buf.put_u32(data_size as u32); + + buf.put_u64(self.since_start.as_secs()); + buf.put_u32(self.since_start.subsec_nanos()); + buf.put_u128(self.profile.get_id().as_u128()); + + buf.put_u32(self.packet.len() as u32); + buffer.put_slice(&self.packet); + + buffer.freeze() + } + + pub fn deserialize(buffer: &mut impl Buf) -> Self { + let secs = buffer.get_u64(); + let nanos = buffer.get_u32(); + let since_start = Duration::new(secs, nanos); + let profile = ProfileId::new(Uuid::from_u128(buffer.get_u128())); + + let data_len = buffer.get_u32() as usize; + + // we cant copy_to_bytes here since it will keep the data alive in the vec. + // we need to ensure the bytesmut arc never increments so it can fix itself rather than allocate again. + let mut packet_data = vec![0u8; data_len]; + buffer.copy_to_slice(&mut packet_data); + let packet = Bytes::from(packet_data); + + Self { + since_start, + profile, + packet, + } + } + + fn data_size(&self) -> usize { + size_of::() + + size_of::() + + size_of::() + + size_of::() + + self.packet.len() + } +} \ No newline at end of file diff --git a/server/Cargo.lock b/server/Cargo.lock new file mode 100644 index 0000000..1d88c0c --- /dev/null +++ b/server/Cargo.lock @@ -0,0 +1,663 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "addr2line" +version = "0.25.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" + +[[package]] +name = "anyhow" +version = "1.0.100" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" + +[[package]] +name = "arcstr" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03918c3dbd7701a85c6b9887732e2921175f26c350b4563841d0958c21d57e6d" + +[[package]] +name = "backtrace" +version = "0.3.76" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-link", +] + +[[package]] +name = "bitflags" +version = "2.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394" + +[[package]] +name = "blocks" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "bytes" +version = "1.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" + +[[package]] +name = "cfg-if" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" + +[[package]] +name = "darling" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cdf337090841a411e2a7f3deb9187445851f91b309c0c0a29e05f74a00a48c0" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1247195ecd7e3c85f83c8d2a366e4210d588e802133e1e355180a9870b517ea4" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "darling_macro" +version = "0.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" +dependencies = [ + "darling_core", + "quote", + "syn", +] + +[[package]] +name = "enumset" +version = "1.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25b07a8dfbbbfc0064c0a6bdf9edcf966de6b1c33ce344bdeca3b41615452634" +dependencies = [ + "enumset_derive", +] + +[[package]] +name = "enumset_derive" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f43e744e4ea338060faee68ed933e46e722fb7f3617e722a5772d7e856d8b3ce" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "fstr" +version = "0.1.0" +dependencies = [ + "arcstr", +] + +[[package]] +name = "getrandom" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi 0.14.7+wasi-0.2.4", +] + +[[package]] +name = "gimli" +version = "0.32.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" + +[[package]] +name = "glam" +version = "0.30.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e12d847aeb25f41be4c0ec9587d624e9cd631bc007a8fd7ce3f5851e064c6460" + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "io-uring" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "046fa2d4d00aea763528b4950358d0ead425372445dc8ff86312b3c69ff7727b" +dependencies = [ + "bitflags", + "cfg-if", + "libc", +] + +[[package]] +name = "itoa" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" + +[[package]] +name = "js-sys" +version = "0.3.81" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.177" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + +[[package]] +name = "memchr" +version = "2.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" + +[[package]] +name = "miniz_oxide" +version = "0.8.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fa76a2c86f704bdb222d66965fb3d63269ce38518b83cb0575fca855ebb6316" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78bed444cc8a2160f01cbcf811ef18cac863ad68ae8ca62092e8db51d51c761c" +dependencies = [ + "libc", + "wasi 0.11.1+wasi-snapshot-preview1", + "windows-sys", +] + +[[package]] +name = "object" +version = "0.37.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "pin-project-lite" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" + +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f7d92ca342cea22a06f2121d944b4fd82af56988c270852495420f961d4ace" + +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "ryu" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" + +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + +[[package]] +name = "serde_core" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", + "serde_core", +] + +[[package]] +name = "server" +version = "0.1.0" +dependencies = [ + "anyhow", + "blocks", + "bytes", + "enumset", + "fstr", + "glam", + "rand", + "serde", + "serde_json", + "tokio", + "uuid", +] + +[[package]] +name = "slab" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" + +[[package]] +name = "socket2" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "syn" +version = "2.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tokio" +version = "1.47.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89e49afdadebb872d3145a5638b59eb0691ea23e46ca484037cfab3b76b95038" +dependencies = [ + "backtrace", + "bytes", + "io-uring", + "libc", + "mio", + "pin-project-lite", + "slab", + "socket2", + "tokio-macros", + "windows-sys", +] + +[[package]] +name = "tokio-macros" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + +[[package]] +name = "uuid" +version = "1.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f87b8aa10b915a06587d0dec516c282ff295b475d94abf425d62b57710070a2" +dependencies = [ + "getrandom", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + +[[package]] +name = "wasi" +version = "0.14.7+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "883478de20367e224c0090af9cf5f9fa85bed63a95c1abf3afc5c083ebc06e8c" +dependencies = [ + "wasip2", +] + +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + +[[package]] +name = "wasm-bindgen" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "windows-link" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "zerocopy" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/server/Cargo.toml b/server/Cargo.toml new file mode 100644 index 0000000..c4c8552 --- /dev/null +++ b/server/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "server" +version = "0.1.0" +edition = "2024" + +[dependencies] +bytes = "1.10.1" +tokio = { version = "1.48.0", features = ["rt", "rt-multi-thread", "macros", "net", "io-util", "sync", "time", "fs"] } +anyhow = "1.0.100" +serde_json = "1.0.140" +serde = { version = "1.0.228", features = ["derive"] } +uuid = { version = "1.18.1", features = ["v4"] } +rand = "0.9.2" +blocks = { path = "../crates/macros" } +fstr = { path = "../crates/fstr"} +replays = { path = "../replays" } +glam = "0.30.8" +enumset = "1.1.10" +slotmap = "1.0.7" diff --git a/src/server/block/block_parameter.rs b/server/src/block/block_parameter.rs similarity index 96% rename from src/server/block/block_parameter.rs rename to server/src/block/block_parameter.rs index a02eeeb..610474b 100644 --- a/src/server/block/block_parameter.rs +++ b/server/src/block/block_parameter.rs @@ -1,10 +1,9 @@ -use crate::server::block::metadata::BlockMetadata; -use crate::server::block::rotatable::Rotatable; -use crate::server::utils::direction::Direction; +use crate::block::metadata::BlockMetadata; +use crate::block::rotatable::Rotatable; +use crate::types::direction::Direction; use blocks::BlockMetadata; /// This type of rotation is used in blocks like Logs, etc -// TODO: This needs Correct rotation #[repr(u8)] #[derive(PartialEq, Debug, Copy, Clone, Eq, BlockMetadata)] pub enum Axis { @@ -201,8 +200,6 @@ impl Rotatable for StairDirection { #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct ButtonDirection(Direction); - -// todo: fix rotation, its still broken even with fixed direction values impl Rotatable for ButtonDirection { fn rotate(&self, direction: Direction) -> Self { ButtonDirection(self.0.rotate(direction)) diff --git a/src/server/block/blocks.rs b/server/src/block/blocks.rs similarity index 97% rename from src/server/block/blocks.rs rename to server/src/block/blocks.rs index 9e6925d..1d2994f 100644 --- a/src/server/block/blocks.rs +++ b/server/src/block/blocks.rs @@ -1,8 +1,8 @@ #![allow(unused)] -use crate::server::block::block_parameter::{Axis, ButtonDirection, HorizontalDirection, LeverOrientation, StairDirection, TorchDirection, TrapdoorDirection, VineMetadata}; -use crate::server::block::metadata::{u2, u3}; -use crate::server::utils::direction::Direction; +use crate::block::block_parameter::{Axis, ButtonDirection, HorizontalDirection, LeverOrientation, StairDirection, TorchDirection, TrapdoorDirection, VineMetadata}; +use crate::block::metadata::{u2, u3}; +use crate::types::direction::Direction; use blocks::block_macro; block_macro! { diff --git a/src/server/block/metadata.rs b/server/src/block/metadata.rs similarity index 100% rename from src/server/block/metadata.rs rename to server/src/block/metadata.rs diff --git a/server/src/block/mod.rs b/server/src/block/mod.rs new file mode 100644 index 0000000..01fb110 --- /dev/null +++ b/server/src/block/mod.rs @@ -0,0 +1,4 @@ +pub mod block_parameter; +pub mod blocks; +pub mod metadata; +pub mod rotatable; \ No newline at end of file diff --git a/server/src/block/rotatable.rs b/server/src/block/rotatable.rs new file mode 100644 index 0000000..5dfa730 --- /dev/null +++ b/server/src/block/rotatable.rs @@ -0,0 +1,31 @@ +use crate::types::direction::Direction; +use glam::IVec3; + +pub trait Rotatable { + fn rotate(&self, direction: Direction) -> Self; +} + +impl Rotatable for f32 { + fn rotate(&self, dir: Direction) -> f32 { + let offset = match dir { + Direction::North => 0.0, + Direction::East => 90.0, + Direction::South => 180.0, + Direction::West => 270.0, + Direction::Up | Direction::Down => 0.0, + }; + (self + offset) % 360.0 + } +} + +impl Rotatable for IVec3 { + fn rotate(&self, direction: Direction) -> Self { + match direction { + Direction::North => Self { x: self.x, y: self.y, z: self.z }, + Direction::East => Self { x: -self.z, y: self.y, z: self.x }, + Direction::South => Self { x: -self.x, y: self.y, z: -self.z }, + Direction::West => Self { x: self.z, y: self.y, z: -self.x }, + _ => Self { x: self.x, y: self.y, z: self.z }, + } + } +} \ No newline at end of file diff --git a/server/src/constants/entity_variants.rs b/server/src/constants/entity_variants.rs new file mode 100644 index 0000000..0e4c5b9 --- /dev/null +++ b/server/src/constants/entity_variants.rs @@ -0,0 +1,33 @@ +use crate::network::packets::packet_serialize::PacketSerializable; +use bytes::BytesMut; + +#[repr(i8)] +#[derive(Copy, Clone)] +pub enum EntityVariant { + Zombie = 54, + Bat = 65, +} + +#[repr(i8)] +#[derive(Copy, Clone)] +pub enum ObjectVariant { + FallingBlock = 70 +} + +impl PacketSerializable for ObjectVariant { + fn write_size(&self) -> usize { + size_of::() + } + fn write(&self, buf: &mut BytesMut) { + (*self as i8).write(buf) + } +} + +impl PacketSerializable for EntityVariant { + fn write_size(&self) -> usize { + size_of::() + } + fn write(&self, buf: &mut BytesMut) { + (*self as i8).write(buf) + } +} \ No newline at end of file diff --git a/server/src/constants/mod.rs b/server/src/constants/mod.rs new file mode 100644 index 0000000..bbb5608 --- /dev/null +++ b/server/src/constants/mod.rs @@ -0,0 +1,10 @@ +pub mod particle; +pub mod potions; +pub mod sounds; +pub mod entity_variants; + +pub use entity_variants::EntityVariant; +pub use entity_variants::ObjectVariant; +pub use particle::Particle; +pub use potions::PotionEffect; +pub use sounds::Sound; diff --git a/server/src/constants/particle.rs b/server/src/constants/particle.rs new file mode 100644 index 0000000..eaffe9d --- /dev/null +++ b/server/src/constants/particle.rs @@ -0,0 +1,59 @@ +use crate::network::packets::packet_serialize::PacketSerializable; +use bytes::BytesMut; + + +#[repr(i32)] +#[derive(Copy, Clone)] +pub enum Particle { + Explosion = 0, + LargeExplosion = 1, + HugeExplosion = 2, + FireworkSpark = 3, + WaterBubble = 4, + WaterSplash = 5, + WaterWake = 6, + Suspended = 7, + SuspendedDepth = 8, + Crit = 9, + MagicCrit = 10, + Smoke = 11, + SmokeNormal = 12, + Spell = 13, + SpellInstant =14, + SpellMob = 15, + SpellMobAmbient = 16, + SpellWitch = 17, + WaterDrip = 18, + LavaDrip = 19, + VillagerAngry = 20, + VillagerHappy = 21, + TownAura = 22, + Note = 23, + Portal = 24, + EnchantmentTable = 25, + Flame = 26, + Lava = 27, + Footstep = 28, + Cloud = 29, + Redstone = 30, + SnowballPoof = 31, + SnowShovel = 32, + Slime = 33, + Heart = 34, + Barrier = 35, + ItemCrack = 36, + BlockCrack = 37, + BlockDust = 38, + Droplet = 39, + ItemTake = 40, + MobAppearance = 41, +} + +impl PacketSerializable for Particle { + fn write_size(&self) -> usize { + (*self as i32).write_size() + } + fn write(&self, buf: &mut BytesMut) { + (*self as i32).write(buf) + } +} \ No newline at end of file diff --git a/server/src/constants/potions.rs b/server/src/constants/potions.rs new file mode 100644 index 0000000..9c89b79 --- /dev/null +++ b/server/src/constants/potions.rs @@ -0,0 +1,39 @@ +use crate::network::packets::packet_serialize::PacketSerializable; +use bytes::BytesMut; + +#[repr(i8)] +#[derive(Copy, Clone)] +pub enum PotionEffect { + Speed = 1, + Slowness = 2, + Haste = 3, + MiningFatigue = 4, + Strength = 5, + InstantHealth = 6, + InstantDamage = 7, + JumpBoost = 8, + Nausea = 9, + Regeneration = 10, + Resistance = 11, + FireResistance = 12, + WaterBreathing = 13, + Invisibility = 14, + Blindness = 15, + NightVision = 16, + Hunger = 17, + Weakness = 18, + Poison = 19, + Wither = 20, + HealthBoost = 21, + Absorption = 22, + Saturation = 23, +} + +impl PacketSerializable for PotionEffect { + fn write_size(&self) -> usize { + (*self as i8).write_size() + } + fn write(&self, buf: &mut BytesMut) { + (*self as i8).write(buf) + } +} \ No newline at end of file diff --git a/server/src/constants/sounds.rs b/server/src/constants/sounds.rs new file mode 100644 index 0000000..4dcd9a1 --- /dev/null +++ b/server/src/constants/sounds.rs @@ -0,0 +1,30 @@ +use crate::network::packets::packet_serialize::PacketSerializable; +use bytes::BytesMut; + +#[derive(Debug, Copy, Clone)] +pub enum Sound { + EnderDragonHit, + ZombieRemedy, + FireIgnite, + NoteHat, +} + +impl Sound { + fn get_sound(&self) -> &'static str { + match self { + Sound::EnderDragonHit => "mob.enderdragon.hit", + Sound::ZombieRemedy => "mob.zombie.remedy", + Sound::FireIgnite => "fire.ignite", + Sound::NoteHat => "note.hat", + } + } +} + +impl PacketSerializable for Sound { + fn write_size(&self) -> usize { + self.get_sound().write_size() + } + fn write(&self, buf: &mut BytesMut) { + self.get_sound().write(buf) + } +} \ No newline at end of file diff --git a/server/src/entity/entity.rs b/server/src/entity/entity.rs new file mode 100644 index 0000000..90a34e9 --- /dev/null +++ b/server/src/entity/entity.rs @@ -0,0 +1,126 @@ +use crate::entity::entity_appearance::EntityAppearance; +use crate::network::packets::packet_buffer::PacketBuffer; +use crate::network::protocol::play::clientbound::DestroyEntites; +use crate::network::protocol::play::serverbound::EntityInteractionType; +use crate::world::chunk::get_chunk_position; +use crate::{Player, World, WorldExtension}; +use glam::DVec3; +use std::ptr::NonNull; + +pub type EntityId = i32; + +#[allow(unused_variables)] +pub trait EntityExtension { + fn tick(&mut self, entity: &mut EntityBase, chunk_buffer: &mut PacketBuffer); + + fn interact( + &mut self, + entity: &mut EntityBase, + player: &mut Player, + action: EntityInteractionType + ) {} +} + +pub struct EntityBase { + world: NonNull>, + pub id: EntityId, + + pub position: DVec3, + pub velocity: DVec3, + pub yaw: f32, + pub pitch: f32, + + pub last_position: DVec3, + pub last_yaw: f32, + pub last_pitch: f32, + + pub ticks_existed: u32, +} + +impl EntityBase { + + pub fn world<'a>(&self) -> &'a World { + unsafe { self.world.as_ref() } + } + + pub fn world_mut<'a>(&mut self) -> &'a mut World { + unsafe { self.world.as_mut() } + } +} + +pub struct Entity { + pub base: EntityBase, + appearance: Box>, + extension: Box>, +} + +impl Entity { + + pub fn new + 'static, E : EntityExtension + 'static>( + world: &mut World, + entity_id: EntityId, + position: DVec3, + yaw: f32, + pitch: f32, + appearance: A, + extension: E, + ) -> Self { + let mut base = EntityBase { + world: NonNull::from_mut(world), + id: entity_id, + position, + velocity: DVec3::ZERO, + yaw, + pitch, + last_position: position, + last_yaw: yaw, + last_pitch: pitch, + ticks_existed: 0, + }; + appearance.initialize(&mut base); + Self { + base, + appearance: Box::new(appearance), + extension: Box::new(extension), + } + } + + pub fn tick(&mut self) { + let base = &mut self.base; + base.ticks_existed += 1; + + let (chunk_x, chunk_z) = get_chunk_position(base.position); + let Some(chunk) = base.world_mut().chunk_grid.get_chunk_mut(chunk_x, chunk_z) else { + // maybe should allow ticking if not in chunk + return; + }; + + self.extension.tick(base, &mut chunk.packet_buffer); + + if base.position != base.last_position { + self.appearance.update_position(base, &mut chunk.packet_buffer); + base.last_position = base.position; + } + if base.yaw != base.last_yaw || base.pitch != base.last_pitch { + self.appearance.update_rotation(base, &mut chunk.packet_buffer); + base.last_yaw = base.yaw; + base.last_pitch = base.pitch; + } + } + + pub fn interact(&mut self, player: &mut Player, action: EntityInteractionType) { + self.extension.interact(&mut self.base, player, action); + } + + pub fn enter_view(&mut self, player: &mut Player) { + self.appearance.enter_player_view(&mut self.base, player); + } + + pub fn leave_view(&mut self, player: &mut Player) { + self.appearance.leave_player_view(&mut self.base, player); + } + + pub fn destroy(&mut self, packet: &mut DestroyEntites) { + self.appearance.destroy(&mut self.base, packet); + } +} \ No newline at end of file diff --git a/server/src/entity/entity_appearance.rs b/server/src/entity/entity_appearance.rs new file mode 100644 index 0000000..c0542b1 --- /dev/null +++ b/server/src/entity/entity_appearance.rs @@ -0,0 +1,192 @@ +use crate::constants::EntityVariant; +use crate::entity::entity::EntityBase; +use crate::entity::entity_metadata::{EntityMetadata, PlayerMetadata}; +use crate::network::binary::var_int::VarInt; +use crate::network::packets::packet_buffer::PacketBuffer; +use crate::network::protocol::play::clientbound::{DestroyEntites, EntityRotate, EntityTeleport, EntityYawRotate, PlayerData, PlayerListItem, SpawnMob, SpawnPlayer}; +use crate::{GameProfile, GameProfileProperty, Player, WorldExtension}; +use fstr::FString; +use std::collections::HashMap; +use uuid::Uuid; + +pub trait EntityAppearance { + fn initialize(&self, entity: &mut EntityBase); + + fn destroy(&self, entity: &mut EntityBase, packet: &mut DestroyEntites); + + fn enter_player_view(&self, entity: &mut EntityBase, player: &mut Player); + + fn leave_player_view(&self, entity: &mut EntityBase, player: &mut Player); + + fn update_position(&self, entity: &mut EntityBase, chunk_buffer: &mut PacketBuffer); + + fn update_rotation(&self, entity: &mut EntityBase, chunk_buffer: &mut PacketBuffer); +} + +pub struct MobAppearance { + pub variant: EntityVariant, + pub metadata: EntityMetadata, +} + +impl EntityAppearance for MobAppearance { + fn initialize(&self, _: &mut EntityBase) {} + + fn destroy(&self, entity_base: &mut EntityBase, packet: &mut DestroyEntites) { + packet.entities.push(VarInt(entity_base.id)) + } + + fn enter_player_view(&self, entity: &mut EntityBase, player: &mut Player) { + player.write_packet(&SpawnMob { + entity_id: entity.id, + entity_variant: self.variant, + x: entity.position.x, + y: entity.position.y, + z: entity.position.z, + yaw: entity.yaw, + pitch: entity.pitch, + head_yaw: entity.yaw, + velocity_x: entity.velocity.z, + velocity_y: entity.velocity.y, + velocity_z: entity.velocity.z, + metadata: self.metadata, + }); + player.write_packet(&EntityYawRotate { + entity_id: entity.id, + yaw: entity.yaw, + }) + } + + fn leave_player_view(&self, entity: &mut EntityBase, player: &mut Player) { + player.write_packet(&DestroyEntites { + entities: vec![VarInt(entity.id)], + }) + } + + fn update_position(&self, entity: &mut EntityBase, packet_buffer: &mut PacketBuffer) { + packet_buffer.write_packet(&EntityTeleport { + entity_id: entity.id, + pos_x: entity.position.x, + pos_y: entity.position.y, + pos_z: entity.position.z, + yaw: entity.yaw, + pitch: entity.pitch, + on_ground: false, + }) + } + + fn update_rotation(&self, entity: &mut EntityBase, packet_buffer: &mut PacketBuffer) { + packet_buffer.write_packet(&EntityRotate { + entity_id: entity.id, + yaw: entity.yaw, + pitch: entity.pitch, + on_ground: false, + }); + packet_buffer.write_packet(&EntityYawRotate { + entity_id: entity.id, + yaw: entity.yaw, + }); + } +} + +pub struct PlayerAppearance { + metadata: PlayerMetadata, + uuid: Uuid, + texture: &'static str, + signature: &'static str, +} + +impl PlayerAppearance { + + pub fn new( + metadata: PlayerMetadata, + texture: &'static str, + signature: &'static str + ) -> Self { + Self { + metadata, + uuid: Uuid::new_v4(), + texture, + signature, + } + } +} + +impl EntityAppearance for PlayerAppearance { + fn initialize(&self, _: &mut EntityBase) {} + + fn destroy(&self, entity: &mut EntityBase, packet: &mut DestroyEntites) { + packet.entities.push(VarInt(entity.id)) + } + + fn enter_player_view(&self, entity: &mut EntityBase, player: &mut Player) { + player.write_packet(&PlayerListItem { + action: VarInt(0), + players: &[PlayerData { + ping: 0, + game_mode: 0, + profile: &GameProfile { + uuid: self.uuid, + username: FString::EMPTY, + properties: HashMap::from([("textures".into(), GameProfileProperty { + value: self.texture.into(), + signature: Some(self.signature.into()), + })]), + }, + display_name: None, + }], + }); + player.write_packet(&SpawnPlayer { + entity_id: entity.id, + uuid: self.uuid, + x: entity.position.x, + y: entity.position.y, + z: entity.position.z, + yaw: entity.yaw, + pitch: entity.pitch, + current_item: 0, + metadata: self.metadata, + }); + player.write_packet(&EntityRotate { + entity_id: entity.id, + yaw: entity.yaw, + pitch: entity.pitch, + on_ground: false, + }); + player.write_packet(&EntityYawRotate { + entity_id: entity.id, + yaw: entity.yaw, + }); + player.add_delayed_profile_remove(self.uuid); + } + + fn leave_player_view(&self, entity: &mut EntityBase, player: &mut Player) { + player.write_packet(&DestroyEntites { + entities: vec![VarInt(entity.id)], + }) + } + + fn update_position(&self, entity: &mut EntityBase, packet_buffer: &mut PacketBuffer) { + packet_buffer.write_packet(&EntityTeleport { + entity_id: entity.id, + pos_x: entity.position.x, + pos_y: entity.position.y, + pos_z: entity.position.z, + yaw: entity.yaw, + pitch: entity.pitch, + on_ground: false, + }) + } + + fn update_rotation(&self, entity: &mut EntityBase, packet_buffer: &mut PacketBuffer) { + packet_buffer.write_packet(&EntityRotate { + entity_id: entity.id, + yaw: entity.yaw, + pitch: entity.pitch, + on_ground: false, + }); + packet_buffer.write_packet(&EntityYawRotate { + entity_id: entity.id, + yaw: entity.yaw, + }); + } +} diff --git a/server/src/entity/entity_metadata.rs b/server/src/entity/entity_metadata.rs new file mode 100644 index 0000000..4c67f6b --- /dev/null +++ b/server/src/entity/entity_metadata.rs @@ -0,0 +1,44 @@ +use crate::entity::entity_metadata_serializable::MetadataSerializable; +use crate::network::packets::packet_serialize::PacketSerializable; +use blocks::entity_metadata_serializable; +use enumset::{EnumSet, EnumSetType}; + +#[derive(EnumSetType)] +pub enum SkinLayers { + Cape, + Jacket, + LeftSleeve, + RightSleeve, + LeftPantsLeg, + RightPantsLeg, + Hat +} + +entity_metadata_serializable! { + #[derive(Copy, Clone)] + pub struct PlayerMetadata { + 10 => pub layers: EnumSet = EnumSet::all(), + } +} + +entity_metadata_serializable! { + #[derive(Debug, Copy, Clone)] + pub enum EntityMetadata { + Zombie { + 12 => pub is_baby: bool = false, + 13 => pub is_villager: bool = false, + }, + Bat { + 16 => pub hanging: bool = false, + } + } +} + + +// entity_metadata_serializable! { +// pub enum ObjectMetadata { +// FallingBlock { +// +// } +// } +// } \ No newline at end of file diff --git a/server/src/entity/entity_metadata_serializable.rs b/server/src/entity/entity_metadata_serializable.rs new file mode 100644 index 0000000..e9a9f6e --- /dev/null +++ b/server/src/entity/entity_metadata_serializable.rs @@ -0,0 +1,67 @@ +use crate::inventory::item_stack::ItemStack; +use crate::network::packets::packet_serialize::PacketSerializable; +use bytes::BytesMut; +use enumset::{EnumSet, EnumSetType}; +use glam::IVec3; + +// used on types that can be represented in an entities metadata +pub trait MetadataSerializable: PacketSerializable { + const ID: u8; +} + +impl MetadataSerializable for bool { + const ID: u8 = 0; +} + +impl MetadataSerializable for u8 { + const ID: u8 = 0; +} + +impl MetadataSerializable for i8 { + const ID: u8 = 0; +} + +impl MetadataSerializable for i16 { + const ID: u8 = 1; +} + +impl MetadataSerializable for i32 { + const ID: u8 = 2; +} + +impl MetadataSerializable for f32 { + const ID: u8 = 3; +} + +impl MetadataSerializable for &str { + const ID: u8 = 4; +} + +impl MetadataSerializable for String { + const ID: u8 = 4; +} + +impl MetadataSerializable for ItemStack { + const ID: u8 = 5; +} + +impl MetadataSerializable for Option { + const ID: u8 = 5; +} + +impl MetadataSerializable for IVec3 { + const ID: u8 = 6; +} + +impl PacketSerializable for EnumSet { + fn write_size(&self) -> usize { + u8::write_size(&self.as_u8()) + } + fn write(&self, buf: &mut BytesMut) { + u8::write(&self.as_u8(), buf) + } +} + +impl MetadataSerializable for EnumSet { + const ID: u8 = 0; +} \ No newline at end of file diff --git a/server/src/entity/mod.rs b/server/src/entity/mod.rs new file mode 100644 index 0000000..ce5ffab --- /dev/null +++ b/server/src/entity/mod.rs @@ -0,0 +1,6 @@ +// pub mod old_entity; +// pub mod old_entity_metadata; +pub mod entity; +pub mod entity_appearance; +pub mod entity_metadata; +mod entity_metadata_serializable; \ No newline at end of file diff --git a/server/src/inventory/inventory.rs b/server/src/inventory/inventory.rs new file mode 100644 index 0000000..100d590 --- /dev/null +++ b/server/src/inventory/inventory.rs @@ -0,0 +1,135 @@ +use crate::inventory::item::{get_item_stack, Item}; +use crate::network::packets::packet_buffer::PacketBuffer; +use crate::network::protocol::play::clientbound::SetSlot; +use crate::network::protocol::play::serverbound::{ClickMode, ClickWindow}; + +pub struct Inventory { + pub items: [Option; 45], + pub dragged_item: Option +} + +impl Inventory { + + pub const fn new() -> Self { + Self { + items: [const { None }; 45], + dragged_item: None + } + } + + pub fn set_slot(&mut self, index: usize, item: Option) { + if index >= 45 { + return; + } + self.items[index] = item + } + + pub fn get_hotbar_slot(&self, index: usize) -> &Option { + let index = index + 36; + if index >= 36 && index <= 44 { + return &self.items[index]; + } + &None + } + + pub fn handle_packet( + &mut self, packet: &ClickWindow, + packet_buffer: &mut PacketBuffer, + ) -> bool { + let mut requires_sync = false; + + // doesn't take into consideration items that can be split + match packet.mode { + ClickMode::NormalClick => { + // doesn't take into consideration items that can be split + if packet.slot_id < 0 { + packet_buffer.write_packet(&SetSlot { + window_id: -1, + slot: 0, + item_stack: get_item_stack(&self.dragged_item), + }) + } else { + let slot = packet.slot_id as usize; + if is_valid_range(slot) { + let item = &mut self.items[slot]; + let dragged = &mut self.dragged_item; + + if let Some(item) = &item && !item.can_move_in_inventory() { + return true + } + + if get_item_stack(item) != packet.clicked_item { + requires_sync = true; + } + std::mem::swap(item, dragged); + } + } + } + ClickMode::ShiftClick => { + let slot = packet.slot_id as usize; + if is_valid_range(slot) { + // check if it is moveable first + let item = &mut self.items[slot]; + if let Some(item) = &item && !item.can_move_in_inventory() { + return true + } + + let item = item.take(); + + if let Some(item) = &item && !item.can_move_in_inventory() { + return true + } + + if get_item_stack(&item) != packet.clicked_item { + requires_sync = true; + } + + let range = if slot >= 36 { 9..36 } else { 36..45 }; + for index in range { + if self.items[index].is_none() { + self.items[index] = item; + break; + } + } + } + } + ClickMode::NumberKey => { + let slot = packet.slot_id as usize; + let button = packet.used_button as usize; + + if is_valid_range(slot) && button <= 9 { + + let to_slot = 36 + button; + let item = &mut self.items[slot]; + + if let Some(item) = &item && !item.can_move_in_inventory() { + return true + } + + // this is what hypixel did to allow ghost pickaxes + if to_slot == slot { + packet_buffer.write_packet(&SetSlot { + window_id: 0, + slot: slot as i16, + item_stack: get_item_stack(item), + }); + } else { + let item = item.take(); + let item_to = self.items[to_slot].take(); + self.items[to_slot] = item; + self.items[slot] = item_to; + } + } + } + ClickMode::Drop => { + requires_sync = true; + } + _ => {} + } + requires_sync + } +} + +fn is_valid_range(index: usize) -> bool { + index >= 9 && index <= 44 +} \ No newline at end of file diff --git a/server/src/inventory/item.rs b/server/src/inventory/item.rs new file mode 100644 index 0000000..481f685 --- /dev/null +++ b/server/src/inventory/item.rs @@ -0,0 +1,13 @@ +use crate::inventory::item_stack::ItemStack; + +pub trait Item { + + fn get_item_stack(&self) -> ItemStack; + + // this is small workaround to not require needing a custom inventory implementation. + fn can_move_in_inventory(&self) -> bool; +} + +pub fn get_item_stack(item: &Option) -> Option { + item.as_ref().map(|item| item.get_item_stack()) +} \ No newline at end of file diff --git a/server/src/inventory/item_stack.rs b/server/src/inventory/item_stack.rs new file mode 100644 index 0000000..7e9ca21 --- /dev/null +++ b/server/src/inventory/item_stack.rs @@ -0,0 +1,46 @@ +use crate::network::binary::nbt::NBT; +use crate::network::packets::packet_deserialize::PacketDeserializable; +use crate::network::packets::packet_serialize::PacketSerializable; +use blocks::packet_serializable; +use bytes::{Buf, BytesMut}; + +packet_serializable! { + #[derive(Debug, Clone, PartialEq)] + pub struct ItemStack { + pub item: i16, + pub stack_size: i8, + pub metadata: i16, + pub tag_compound: Option, + } +} + +impl PacketSerializable for Option { + fn write_size(&self) -> usize { + match self { + Some(item_stack) => item_stack.write_size(), + None => size_of::() + } + } + fn write(&self, buf: &mut BytesMut) { + match self { + Some(item_stack) => item_stack.write(buf), + None => (-1i16).write(buf) + }; + } +} + +impl PacketDeserializable for Option { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + let id = buffer.get_i16(); + if id >= 0 { + let item_stack = ItemStack { + item: id, + stack_size: buffer.get_i8(), + metadata: buffer.get_i16(), + tag_compound: PacketDeserializable::read(buffer)?, + }; + return Ok(Some(item_stack)); + } + Ok(None) + } +} \ No newline at end of file diff --git a/server/src/inventory/menu.rs b/server/src/inventory/menu.rs new file mode 100644 index 0000000..f807c7a --- /dev/null +++ b/server/src/inventory/menu.rs @@ -0,0 +1,113 @@ + +use crate::inventory::item::get_item_stack; +use crate::inventory::item_stack::ItemStack; +use crate::network::protocol::play::clientbound::{OpenWindow, SetSlot, WindowItems}; +use crate::network::protocol::play::serverbound::ClickWindow; +use crate::player::player::{Player, PlayerExtension}; +use crate::types::chat_component::ChatComponent; + +pub trait Menu

{ + + fn container_name(&self, player: &mut Player

) -> &str; + + fn container_items(&self, player: &mut Player

) -> Vec>; + + fn click_window(&mut self, player: &mut Player

, packet: &ClickWindow); + +} + +pub enum OpenContainer

{ + None, + Inventory, + Menu(Box>) +} + +impl

OpenContainer

{ + + pub fn open(&mut self, player: &mut Player

) { + if let OpenContainer::None = self { + return; + } + match self { + OpenContainer::Inventory => { + if player.inventory.dragged_item.is_some() { + player.write_packet(&SetSlot { + window_id: -1, + slot: 0, + item_stack: get_item_stack(&player.inventory.dragged_item), + }) + } + } + OpenContainer::Menu(menu) => { + let name = menu.container_name(player); + let items = menu.container_items(player); + debug_assert!(items.len() % 9 == 0); + + player.write_packet(&OpenWindow { + window_id: player.window_id, + inventory_type: "minecraft:container".into(), + window_title: ChatComponent::new(name), + slot_count: items.len() as u8, + }); + player.write_packet(&WindowItems { + window_id: player.window_id, + items, + }) + } + _ => {} + } + } + + pub fn click_window(&mut self, player: &mut Player

, packet: &ClickWindow) { + match self { + OpenContainer::None => { + player.sync_inventory() + } + OpenContainer::Inventory => { + if player.inventory.handle_packet(packet, &mut player.packet_buffer) { + player.sync_inventory(); + player.write_packet(&SetSlot { + window_id: -1, + slot: 0, + item_stack: get_item_stack(&player.inventory.dragged_item), + }) + } + } + OpenContainer::Menu(menu) => { + if player.window_id != packet.window_id { + return; + } + menu.click_window(player, packet); + self.sync_container(player); + } + } + } + + pub fn sync_container(&mut self, player: &mut Player

) { + match self { + OpenContainer::Inventory => { + // the rest of the inventory is synced in player + player.write_packet(&SetSlot { + window_id: -1, + slot: 0, + item_stack: get_item_stack(&player.inventory.dragged_item), + }) + } + OpenContainer::Menu(menu) => { + let items = menu.container_items(player); + debug_assert!(items.len() % 9 == 0); + + player.write_packet(&WindowItems { + window_id: player.window_id, + items, + }); + player.write_packet(&SetSlot { + window_id: -1, + slot: 0, + item_stack: None, + }) + } + _ => {} + } + } +} \ No newline at end of file diff --git a/server/src/inventory/mod.rs b/server/src/inventory/mod.rs new file mode 100644 index 0000000..3cc17d0 --- /dev/null +++ b/server/src/inventory/mod.rs @@ -0,0 +1,6 @@ +pub mod inventory; +pub mod item; +pub mod item_stack; +pub mod menu; + +pub use inventory::Inventory as Inventory; diff --git a/server/src/lib.rs b/server/src/lib.rs new file mode 100644 index 0000000..6f372da --- /dev/null +++ b/server/src/lib.rs @@ -0,0 +1,14 @@ +#![allow(clippy::collapsible_if, clippy::too_many_arguments, clippy::new_without_default)] + +pub mod block; +pub mod constants; +pub mod entity; +pub mod inventory; +pub mod network; +pub mod player; +pub mod types; +pub mod utils; +pub mod world; + +pub use player::player::*; +pub use world::world::*; diff --git a/server/src/network/binary/mod.rs b/server/src/network/binary/mod.rs new file mode 100644 index 0000000..e45a032 --- /dev/null +++ b/server/src/network/binary/mod.rs @@ -0,0 +1,2 @@ +pub mod var_int; +pub mod nbt; \ No newline at end of file diff --git a/server/src/network/binary/nbt.rs b/server/src/network/binary/nbt.rs new file mode 100644 index 0000000..43b951a --- /dev/null +++ b/server/src/network/binary/nbt.rs @@ -0,0 +1,393 @@ +use fstr::FString; + +use crate::network::packets::packet_deserialize::PacketDeserializable; +use crate::network::packets::packet_serialize::PacketSerializable; +use anyhow::bail; +use bytes::{Buf, BufMut, BytesMut}; +use std::collections::HashMap; + +pub const TAG_END_ID: u8 = 0; +pub const TAG_BYTE_ID: u8 = 1; +pub const TAG_SHORT_ID: u8 = 2; +pub const TAG_INT_ID: u8 = 3; +pub const TAG_LONG_ID: u8 = 4; +pub const TAG_FLOAT_ID: u8 = 5; +pub const TAG_DOUBLE_ID: u8 = 6; +pub const TAG_BYTE_ARRAY_ID: u8 = 7; +pub const TAG_STRING_ID: u8 = 8; +pub const TAG_LIST_ID: u8 = 9; +pub const TAG_COMPOUND_ID: u8 = 10; +pub const TAG_INT_ARRAY_ID: u8 = 11; +pub const TAG_LONG_ARRAY_ID: u8 = 12; + + +/// NBT +/// +/// This struct represents the root NBT Tag Compound. +#[derive(Debug, Clone, PartialEq)] +pub struct NBT { + pub root_name: FString, + pub nodes: HashMap, +} + +impl NBT { + + /// Creates a new [NBT] struct with the provided nodes. + /// It does not have a root name + pub fn with_nodes(nodes: Vec<(FString, NBTNode)>) -> NBT { + let mut map = HashMap::new(); + for (name, node) in nodes { + map.insert(name, node); + } + NBT { + root_name: "".into(), + nodes: map, + } + } + + /// creates a string nbt node + /// used for [NBTNode::Compound] and [NBT] + pub fn string(name: impl Into, value: impl Into) -> (FString, NBTNode) { + (name.into(), NBTNode::String(value.into())) + } + + /// creates a compound node + /// used for [NBTNode::Compound] and [NBT] + pub fn compound(name: impl Into, nodes: Vec<(FString, NBTNode)>) -> (FString, NBTNode) { + let mut compound_map = HashMap::new(); + for (name, node) in nodes { + compound_map.insert(name, node); + } + (name.into(), NBTNode::Compound(compound_map)) + } + + /// creates a list node + /// used for [NBTNode::Compound] and [NBT] + pub fn list(name: impl Into, type_id: u8, list: Vec) -> (FString, NBTNode) { + (name.into(), NBTNode::List { type_id, children: list }) + } + + pub fn byte(name: impl Into, value: i8) -> (FString, NBTNode) { + (name.into(), NBTNode::Byte(value)) + } + + pub fn short(name: impl Into, value: i16) -> (FString, NBTNode) { + (name.into(), NBTNode::Short(value)) + } + + pub fn int(name: impl Into, value: i32) -> (FString, NBTNode) { + (name.into(), NBTNode::Int(value)) + } + + pub fn long(name: impl Into, value: i64) -> (FString, NBTNode) { + (name.into(), NBTNode::Long(value)) + } + + /// takes a string, + /// splits it into lines and creates a list nbt node representing strings. + pub fn list_from_string(name: impl Into, string: impl Into) -> (FString, NBTNode) { + let list = string + .into() + .with_iter(str::lines) + .map(|line| NBTNode::String(line.to_owned())) + .collect(); + + (name.into(), NBTNode::List { type_id: TAG_STRING_ID, children: list }) + } +} + +#[derive(Debug, Clone, PartialEq)] +pub enum NBTNode { + Byte(i8), + Short(i16), + Int(i32), + Long(i64), + Float(f32), + Double(f64), + ByteArray(Vec), + String(FString), + List { type_id: u8, children: Vec }, + Compound(HashMap), + IntArray(Vec), + LongArray(Vec), +} + +impl PacketSerializable for NBT { + fn write_size(&self) -> usize { + let mut size = 1; + size += string_size(self.root_name.as_str()); + for (name, node) in self.nodes.iter() { + size += 1 + string_size(name.as_str()) + node_size(node); + } + size += 1; + size + } + fn write(&self, buf: &mut BytesMut) { + buf.put_u8(TAG_COMPOUND_ID); + write_string_nbt(buf, self.root_name.as_str()); + for (str, node) in self.nodes.iter() { + write_node(buf, Some(str.as_str()), node); + } + buf.put_u8(TAG_END_ID) + } +} + +impl PacketSerializable for Option { + fn write_size(&self) -> usize { + match self { + None => size_of::(), + Some(nbt) => nbt.write_size() + } + } + fn write(&self, buf: &mut BytesMut) { + match self { + None => 0u8.write(buf), + Some(nbt) => nbt.write(buf) + } + } +} + +pub fn write_node(buffer: &mut BytesMut, name: Option<&str>, node: &NBTNode) { + match node { + NBTNode::Byte(value) => { + if let Some(name) = name { + buffer.put_u8(TAG_BYTE_ID); + write_string_nbt(buffer, name); + } + buffer.put_i8(*value) + } + NBTNode::Short(value) => { + if let Some(name) = name { + buffer.put_u8(TAG_SHORT_ID); + write_string_nbt(buffer, name); + } + buffer.put_i16(*value) + } + NBTNode::Int(value) => { + if let Some(name) = name { + buffer.put_u8(TAG_INT_ID); + write_string_nbt(buffer, name); + } + buffer.put_i32(*value) + } + NBTNode::Long(value) => { + if let Some(name) = name { + buffer.put_u8(TAG_LONG_ID); + write_string_nbt(buffer, name); + } + buffer.put_i64(*value) + } + NBTNode::Float(value) => { + if let Some(name) = name { + buffer.put_u8(TAG_FLOAT_ID); + write_string_nbt(buffer, name); + } + buffer.put_f32(*value) + } + NBTNode::Double(value) => { + if let Some(name) = name { + buffer.put_u8(TAG_DOUBLE_ID); + write_string_nbt(buffer, name); + } + buffer.put_f64(*value) + } + NBTNode::ByteArray(value) => { + if let Some(name) = name { + buffer.put_u8(TAG_BYTE_ARRAY_ID); + write_string_nbt(buffer, name); + } + buffer.put_slice(&value) + } + NBTNode::String(string) => { + if let Some(name) = name { + buffer.put_u8(TAG_STRING_ID); + write_string_nbt(buffer, name); + } + write_string_nbt(buffer, string.as_str()) + } + NBTNode::List { type_id, children } => { + if let Some(name) = name { + buffer.put_u8(TAG_LIST_ID); + write_string_nbt(buffer, name); + } + buffer.put_u8(*type_id); + buffer.put_i32(children.len() as i32); + for child in children { + write_node(buffer, None, child) + } + } + NBTNode::Compound(nodes) => { + if let Some(name) = name { + buffer.put_u8(TAG_COMPOUND_ID); + write_string_nbt(buffer, name); + } + for (string, node) in nodes { + write_node(buffer, Some(string.as_str()), node); + } + buffer.put_u8(TAG_END_ID) + } + NBTNode::IntArray(values) => { + if let Some(name) = name { + buffer.put_u8(TAG_INT_ARRAY_ID); + write_string_nbt(buffer, name); + } + buffer.put_i32(values.len() as i32); + for value in values { + buffer.put_i32(*value); + } + } + NBTNode::LongArray(values) => { + if let Some(name) = name { + buffer.put_u8(TAG_LONG_ARRAY_ID); + write_string_nbt(buffer, name); + } + buffer.put_i32(values.len() as i32); + for value in values { + buffer.put_i64(*value); + } + } + } +} + +// different format from normal strings +fn write_string_nbt(buffer: &mut BytesMut, name: &str) { + buffer.put_u16(name.len() as u16); + buffer.put_slice(name.as_bytes()); +} + +fn string_size(str: &str) -> usize { + 2 + str.len() +} + +fn node_size(node: &NBTNode) -> usize { + match node { + NBTNode::Byte(_) => 1, + NBTNode::Short(_) => 2, + NBTNode::Int(_) => 4, + NBTNode::Long(_) => 8, + NBTNode::Float(_) => 4, + NBTNode::Double(_) => 8, + NBTNode::ByteArray(bytes) => 4 + bytes.len(), + NBTNode::String(s) => string_size(s.as_str()), + NBTNode::List { type_id: _, children } => { + let mut size = 1 + 4; + for child in children { + size += node_size(child); + } + size + } + NBTNode::Compound(nodes) => { + let mut size = 0; + for (name, node) in nodes { + size += 1 + string_size(name.as_str()) + node_size(node); + } + size += 1; + size + } + NBTNode::IntArray(values) => 4 + (values.len() * 4), + NBTNode::LongArray(values) => 4 + (values.len() * 8), + } +} + +impl PacketDeserializable for NBT { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + let name = read_string_nbt(buffer)?; + let node = read_node(buffer, TAG_COMPOUND_ID)?; + + if let NBTNode::Compound(nodes) = node { + return Ok(NBT { + root_name: name, + nodes, + }) + } + bail!("Somehow read something other than NBTNode::Compound") + } +} + +impl PacketDeserializable for Option { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + if u8::read(buffer)? != TAG_COMPOUND_ID { + return Ok(None); + }; + Ok(Some(NBT::read(buffer)?)) + } +} + +fn read_string_nbt(buffer: &mut impl Buf) -> anyhow::Result { + let length = u16::read(buffer)? as usize; + if buffer.remaining() < length { + bail!("Not enough bytes for string") + } + let str = FString::from_bytes(&buffer.chunk()[..length])?; + buffer.advance(length); + Ok(str) +} + +fn read_node(buffer: &mut impl Buf, tag: u8) -> anyhow::Result { + let node = match tag { + TAG_BYTE_ID => NBTNode::Byte(PacketDeserializable::read(buffer)?), + TAG_SHORT_ID => NBTNode::Short(PacketDeserializable::read(buffer)?), + TAG_INT_ID => NBTNode::Int(PacketDeserializable::read(buffer)?), + TAG_LONG_ID => NBTNode::Long(PacketDeserializable::read(buffer)?), + TAG_FLOAT_ID => NBTNode::Float(PacketDeserializable::read(buffer)?), + TAG_DOUBLE_ID => NBTNode::Double(PacketDeserializable::read(buffer)?), + + + TAG_BYTE_ARRAY_ID => { + // would be faster to do one check for the whole array + // and do an unchecked read for u8, but im too lazy + let length = u8::read(buffer)? as usize; + let mut vec: Vec = Vec::with_capacity(length); + for _ in 0..length { + vec.push(u8::read(buffer)?) + } + NBTNode::ByteArray(vec) + } + TAG_STRING_ID => { + let value = read_string_nbt(buffer)?; + NBTNode::String(value) + } + TAG_LIST_ID => { + let type_id = u8::read(buffer)?; + let list_len = i32::read(buffer)?; + let mut nodes: Vec = Vec::new(); + for _ in 0..list_len { + let node = read_node(buffer, type_id)?; + nodes.push(node) + } + NBTNode::List { type_id, children: nodes } + } + TAG_COMPOUND_ID => { + let mut nodes: HashMap = HashMap::new(); + loop { + let tag = u8::read(buffer)?; + if tag == TAG_END_ID { + break; + } else { + let name = read_string_nbt(buffer)?; + let node = read_node(buffer, tag)?; + nodes.insert(name, node); + } + } + NBTNode::Compound(nodes) + } + TAG_INT_ARRAY_ID => { + let length = i32::read(buffer)? as usize; + let mut vec: Vec = Vec::with_capacity(length); + for _ in 0..length { + vec.push(i32::read(buffer)?) + } + NBTNode::IntArray(vec) + } + TAG_LONG_ARRAY_ID => { + let length = i64::read(buffer)? as usize; + let mut vec: Vec = Vec::with_capacity(length); + for _ in 0..length { + vec.push(i64::read(buffer)?) + } + NBTNode::LongArray(vec) + } + _ => unreachable!() + }; + Ok(node) +} \ No newline at end of file diff --git a/src/net/var_int.rs b/server/src/network/binary/var_int.rs similarity index 59% rename from src/net/var_int.rs rename to server/src/network/binary/var_int.rs index 0567ef7..a9411d1 100644 --- a/src/net/var_int.rs +++ b/server/src/network/binary/var_int.rs @@ -1,18 +1,27 @@ -use bytes::{Buf, BufMut, BytesMut}; +use bytes::{Buf, BufMut}; +use std::ops::Deref; -#[derive(PartialEq, Eq)] +#[repr(transparent)] +#[derive(Debug, PartialEq, Eq)] pub struct VarInt(pub i32); -pub fn peek_var_int(buf: &BytesMut) -> Option<(i32, usize)> { +impl Deref for VarInt { + type Target = i32; + fn deref(&self) -> &i32 { + &self.0 + } +} + +pub fn peek_var_int(buf: &impl Buf) -> Option<(i32, usize)> { let mut num_read = 0; let mut result = 0; loop { - if num_read >= 5 || num_read >= buf.len() { + if num_read >= 5 || num_read >= buf.remaining() { return None; } - let byte = buf[num_read]; + let byte = buf.chunk()[num_read]; let value = (byte & 0x7f) as i32; result |= value << (7 * num_read); num_read += 1; @@ -25,13 +34,13 @@ pub fn peek_var_int(buf: &BytesMut) -> Option<(i32, usize)> { Some((result, num_read)) } -pub fn read_var_int(buf: &mut BytesMut) -> Option { +pub fn read_var_int(buf: &mut impl Buf) -> Option { let (int, len) = peek_var_int(buf)?; buf.advance(len); Some(int) } -pub fn write_var_int(buf: &mut BytesMut, mut value: i32) { +pub fn write_var_int(buf: &mut impl BufMut, mut value: i32) { loop { if (value & !0x7F) == 0 { // buf.reserve(1); @@ -44,7 +53,7 @@ pub fn write_var_int(buf: &mut BytesMut, mut value: i32) { } } -pub fn var_int_size(value: i32) -> usize { +pub const fn var_int_size(value: i32) -> usize { if value == 0 { 1 } else { diff --git a/server/src/network/client.rs b/server/src/network/client.rs new file mode 100644 index 0000000..85dc7c1 --- /dev/null +++ b/server/src/network/client.rs @@ -0,0 +1,238 @@ +use std::collections::HashMap; + +use anyhow::bail; +use bytes::{Buf, Bytes, BytesMut}; +use fstr::FString; +use slotmap::new_key_type; +use tokio::{io::{AsyncReadExt, AsyncWriteExt}, net::TcpStream, sync::mpsc::{UnboundedReceiver, UnboundedSender, error::SendError, unbounded_channel}, task::JoinHandle}; +use uuid::Uuid; + +use crate::{ClientId, GameProfile, GameProfileProperty, network::{binary::var_int::{VarInt, peek_var_int}, connection_state::ConnectionState, internal_packets::{MainThreadMessage, NetworkThreadMessage}, packets::{packet_buffer::PacketBuffer, packet_deserialize::PacketDeserializable}, protocol::{handshake::serverbound::Handshake, login::{clientbound::LoginSuccess, serverbound::LoginStart}, play::serverbound::Play, status::{clientbound::{StatusPong, StatusResponse}, serverbound::StatusPing}}}, types::status::StatusBytes}; + +new_key_type! { + pub struct ClientKey; +} + +#[derive(Debug, Clone)] +pub struct Client { + pub id: ClientId, + pub connection_state: ConnectionState, + // pub game_profile: Option, +} + +pub struct ClientHandler { + writer: UnboundedSender, + handle: JoinHandle<()> +} + +impl ClientHandler { + pub fn spawn( + client_id: ClientId, + socket: TcpStream, + network_tx: UnboundedSender, + main_tx: UnboundedSender, + status: StatusBytes + ) -> Self { + let (tx, rx) = unbounded_channel(); + let handle = tokio::spawn(run_client(client_id, socket, rx, network_tx, main_tx, status)); + Self { writer: tx, handle } + } + + #[inline(always)] + pub fn send(&self, data: Bytes) -> Result<(), SendError> { + self.writer.send(data) + } + + #[inline(always)] + pub fn abort(self) { + self.handle.abort(); + } +} + +async fn run_client( + client_id: ClientId, + mut socket: TcpStream, + mut rx: UnboundedReceiver, + network_tx: UnboundedSender, + main_tx: UnboundedSender, + status: StatusBytes +) { + let mut client = Client { + id: client_id, + connection_state: ConnectionState::Handshaking, + // game_profile: None, + }; + let mut bytes = BytesMut::new(); + + loop { + tokio::select! { + res = socket.read_buf(&mut bytes) => { + match res { + Ok(0) => break, + Ok(_) => { + if let Err(err) = read_packets( + &mut bytes, + &mut client, + &network_tx, + &main_tx, + &status + ).await { + eprintln!("client {client_id:?} errored: {err}"); + break; + } + }, + Err(e) => { + eprintln!("Client {client_id:?} read error: {e}"); + break; + } + } + } + + // we dont need a drop task if we just drop the tx... + opt = rx.recv() => { + match opt { + Some(bytes) => { + if let Err(e) = socket.write_all(&bytes).await { + eprintln!("Socket write error: {}", e); + break + } + } + None => break, + } + } + } + } + + println!("client reader closed"); + let _ = network_tx.send(NetworkThreadMessage::ConnectionClosed { client_id, connection_state: client.connection_state }); +} + +async fn read_packets( + buffer: &mut BytesMut, + client: &mut Client, + network_tx: &UnboundedSender, + main_tx: &UnboundedSender, + status: &StatusBytes +) -> anyhow::Result<()> { + while let Some(mut buffer) = try_read_packet_slice(buffer) { + match client.connection_state { + ConnectionState::Handshaking => handle_handshake(&mut buffer, client)?, + ConnectionState::Status => handle_status(client.id, &mut buffer, network_tx, status)?, + ConnectionState::Login => handle_login(&mut buffer, client, network_tx, main_tx)?, + ConnectionState::Play => { + let packet = Play::read(&mut buffer)?; + if let Play::Invalid(packet_id) = packet { + eprintln!("invalid packet: 0x{packet_id:02x}"); + continue; + } + main_tx.send(MainThreadMessage::PacketReceived { client_id: client.id, packet })?; + } + } + } + Ok(()) +} + +fn try_read_packet_slice(buf: &mut impl Buf) -> Option { + if !buf.has_remaining() { + return None; + } + + let (packet_len, var_int_len) = peek_var_int(buf)?; + let packet_len = packet_len as usize; + + if buf.remaining() < packet_len + var_int_len { + // packet incomplete + return None; + } + + buf.advance(var_int_len); + Some(buf.copy_to_bytes(packet_len)) +} + +fn handle_handshake(buffer: &mut impl Buf, client: &mut Client) -> anyhow::Result<()> { + match *VarInt::read(buffer)? { + 0x00 => { + let handshake = Handshake::read(buffer)?; + client.connection_state = ConnectionState::from_id(handshake.next_state.0)?; + } + _ => bail!("Unknown pack id during handshake."), + } + Ok(()) +} +fn handle_status( + client_id: ClientId, + buffer: &mut impl Buf, + network_tx: &UnboundedSender, + status: &StatusBytes +) -> anyhow::Result<()> { + let packet_id = *VarInt::read(buffer)?; + let mut packet_buffer = PacketBuffer::new(); + match packet_id { + 0x00 => { + packet_buffer.write_packet(&StatusResponse { + status: status.get_str(), + }); + } + 0x01 => { + let status_ping = StatusPing::read(buffer)?; + packet_buffer.write_packet(&StatusPong { + client_time: status_ping.client_time, + }); + } + _ => bail!("Unknown packet id during status") + } + + // we cannot directly send to socket since the read task cant own the write half, at least not without Arc> i think + network_tx.send(NetworkThreadMessage::SendPackets { client_id, buffer: packet_buffer.split_into_bytes() })?; + Ok(()) +} + +const FLAME_OF_WAR: &str = "ewogICJ0aW1lc3RhbXAiIDogMTc1OTQzODI1MzM2OCwKICAicHJvZmlsZUlkIiA6ICI4YTdhZDkyMzc3MjI0ZjIyOGMwNDI4Y2I1YmQ5NzJkYSIsCiAgInByb2ZpbGVOYW1lIiA6ICJGbGFtZU9mV2FyIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2JiNDg4Njc1YjMxYTQyZTc5MDI0ZGUzOGY1YmQ3ODZhMzlmNzVhMmE2ZGJhMDk0NDc5MmQ0NDNjNjA1ZDE4ZjkiCiAgICB9CiAgfQp9"; +const FLAME_OF_WAR_SIG: &str = "UvRQflcS0w4KTJSN+fpqYxVBTwo6wb66JMp6seThrmSGwUmbPfs8WEK2TPBIcipG0kBjWWdDMUpXFZ5YMBshnb7kHh588oPeL0gja/m9yHGEgtfucyqudL3m4sq3iZnJbdO3yKnF/00WqelBI5fZ3zc9SDyAjLUL4QHIXPm4U/z3UH1ZnVjGc5bZbV7qXILw7pF00al8ks1kpOUeds8zjSpVMRMTF9WQww89jNjbpvzcKP97KOOBXPJB1cuTUi3DEe3/9omZhcfgDyZDDJkmF3hTVZx1ijKtknlKRJqFcUEmsL1XUgRxqLSYNt1D1XCjEJeWAyT5YDVtvuj3Oa/zEeWQa9WVSXaUTGpVpQBRJrTJmtLH4O4hDMz4j7M2T0lsbOg7sIqvWVRvmKptKlLWKSWk8tlYXrx+Ef4YN5iva8/xhnKZmfe/JmT8uIKtNiv8Zcrj1WXasJ4wz0JCEQBOJDJXnEU548Sk1nxAcmX/W8jHkMnXArE3LKkLdxD7e++Hw60pv3GcyvTou5Mlrmgo6rHk188Li4CU826i+z0OuodRtdY+vsQIoFWLnnHu4HdqKA3IevcV7+Gl3FDzbzPXiSbUmSAV4drpLELTTPMnhhvMK85zS8138LTuScBiFRKVaSuXZJS7UIJ6VtjYK+iEuVblN9BJihP2NiuubCeL484="; + +fn handle_login( + buffer: &mut impl Buf, + client: &mut Client, + network_tx: &UnboundedSender, + main_tx: &UnboundedSender, +) -> anyhow::Result<()> { + let packet_id = *VarInt::read(buffer)?; + match packet_id { + 0x00 => { + // todo: skin authentication whatever + let login = LoginStart::read(buffer)?; + let mut packet_buffer = PacketBuffer::new(); + + let uuid = Uuid::new_v4(); + + let game_profile = GameProfile { + uuid, + username: FString::new(&login.username), + properties: HashMap::from( + [( + "textures".into(), + GameProfileProperty { + value: FLAME_OF_WAR.into(), + signature: Some(FLAME_OF_WAR_SIG.into()), + } + )] + ), + }; + + client.connection_state = ConnectionState::Play; + + packet_buffer.write_packet(&LoginSuccess { + uuid: uuid.hyphenated().to_string(), + name: game_profile.username.clone(), + }); + network_tx.send(NetworkThreadMessage::SendPackets { client_id: client.id, buffer: packet_buffer.split_into_bytes() })?; + + main_tx.send(MainThreadMessage::NewPlayer { + client_id: client.id, + profile: game_profile, + })?; + } + _ => bail!("Unknown packet id during login") + } + Ok(()) +} \ No newline at end of file diff --git a/src/net/connection_state.rs b/server/src/network/connection_state.rs similarity index 83% rename from src/net/connection_state.rs rename to server/src/network/connection_state.rs index 7348178..349f3c5 100644 --- a/src/net/connection_state.rs +++ b/server/src/network/connection_state.rs @@ -1,4 +1,4 @@ -use anyhow::{bail, Result}; +use anyhow::bail; #[derive(Debug, Clone, PartialEq, Eq, Hash)] pub enum ConnectionState { @@ -9,7 +9,7 @@ pub enum ConnectionState { } impl ConnectionState { - pub fn from_id(id: i32) -> Result { + pub fn from_id(id: i32) -> anyhow::Result { Ok(match id { -1 => ConnectionState::Handshaking, 0 => ConnectionState::Play, diff --git a/src/net/internal_packets.rs b/server/src/network/internal_packets.rs similarity index 61% rename from src/net/internal_packets.rs rename to server/src/network/internal_packets.rs index 686b38a..68f7259 100644 --- a/src/net/internal_packets.rs +++ b/server/src/network/internal_packets.rs @@ -1,23 +1,26 @@ -use crate::net::protocol::play::serverbound::Play; -use crate::server::player::player::{ClientId, GameProfile}; +use crate::network::connection_state::ConnectionState; +use crate::network::protocol::play::serverbound::Play; +use crate::player::player::{ClientId, GameProfile}; +use crate::types::status::StatusUpdate; use bytes::Bytes; -// too many comments because theres 4 different client disconnect related messages and theyre all needed and do different things... - pub enum NetworkThreadMessage { + UpdateStatus(StatusUpdate), + SendPackets { client_id: ClientId, buffer: Bytes, }, /// received when the client's handler is closed. - /// sends a client disconnected message to the main thread + /// sends a client disconnected message to the main thread if the connect state is play ConnectionClosed { client_id: ClientId, + connection_state: ConnectionState, }, /// Disconnects the client from the server. - /// This sends a close handler message to the client's handler. + /// This aborts the client's read task and drops the write half. /// It should be sent after the vanilla disconnect packet is sent. /// the main thread should wait for a ClientDisconnected response to handle actually removing the player. DisconnectClient { @@ -25,12 +28,6 @@ pub enum NetworkThreadMessage { }, } -pub enum ClientHandlerMessage { - Send(Bytes), - /// Closes the handler for this client. This then sends a connection closed message to the network thread. - CloseHandler, -} - pub enum MainThreadMessage { PacketReceived { client_id: ClientId, diff --git a/src/net/mod.rs b/server/src/network/mod.rs similarity index 60% rename from src/net/mod.rs rename to server/src/network/mod.rs index ac0a5d3..49dca10 100644 --- a/src/net/mod.rs +++ b/server/src/network/mod.rs @@ -1,7 +1,7 @@ pub mod client; -pub mod var_int; pub mod packets; -pub mod run_network; +pub mod network; pub mod connection_state; pub mod internal_packets; -pub mod protocol; \ No newline at end of file +pub mod protocol; +pub mod binary; \ No newline at end of file diff --git a/server/src/network/network.rs b/server/src/network/network.rs new file mode 100644 index 0000000..f874aad --- /dev/null +++ b/server/src/network/network.rs @@ -0,0 +1,83 @@ +use crate::network::client::{ClientHandler, ClientKey}; +use crate::network::connection_state::ConnectionState; +use crate::types::status::Status; +use core::panic; +use slotmap::SlotMap; +use tokio::net::TcpListener; +use tokio::sync::mpsc::{unbounded_channel, UnboundedReceiver, UnboundedSender}; + +use crate::network::internal_packets::{MainThreadMessage, NetworkThreadMessage}; + +type Sender = UnboundedSender; +type Receiver = UnboundedReceiver; + + +pub fn start_network( + ip: &'static str, + status: Status, +) -> (Sender, Receiver) { + let (network_tx, network_rx) = unbounded_channel::(); + let (main_tx, main_rx) = unbounded_channel::(); + tokio::spawn(run_network_thread(ip, status, network_rx, network_tx.clone(), main_tx)); + (network_tx, main_rx) +} + +async fn run_network_thread( + ip: &'static str, + mut status: Status, + mut network_rx: Receiver, + network_tx: Sender, + main_tx: Sender, +) { + let listener = TcpListener::bind(ip).await.unwrap(); + println!("Network thread listening on {ip}"); + + // slotmap is faster than a hashmap and works just as well for us here + let mut clients: SlotMap = SlotMap::with_key(); + + loop { + tokio::select! { + // a client failing to connect here is recoverable and doesnt really do anything, so we can just ignore it. + // we do need to continue on a failed connection though, otherwise it would need to wait for network_rx to receive + // before attempting to get a new connection. + result = listener.accept() => { + let Ok((socket, _)) = result else { continue }; + + clients.insert_with_key(|key| { + ClientHandler::spawn(key, socket, network_tx.clone(), main_tx.clone(), status.get()) + }); + } + + // this can never be none since this function owns a network_tx. + Some(msg) = network_rx.recv() => { + // we can just discard main thread -> network thread messages with a disconnected client_id + // as the main thread either already has or will be be informed shortly of this issue + match msg { + NetworkThreadMessage::UpdateStatus(update) => status.set(update), + NetworkThreadMessage::SendPackets { client_id, buffer } => { + if let Some(handler) = clients.get(client_id) { + if let Err(e) = handler.send(buffer) { + eprintln!("Client {:?} handler dropped its reciever {}", client_id, e); + clients.remove(client_id); + main_tx.send(MainThreadMessage::ClientDisconnected { client_id }).expect("Main thread should never drop its network reciever."); + } + } + } + + NetworkThreadMessage::DisconnectClient { client_id } => { + if clients.remove(client_id).is_some() { + main_tx.send(MainThreadMessage::ClientDisconnected { client_id }).expect("Main thread should never drop its network reciever."); + } + } + + NetworkThreadMessage::ConnectionClosed { client_id, connection_state } => { + // we probably shouldnt tell the main thread a client it never added got disconnected? + if clients.remove(client_id).is_some() && connection_state == ConnectionState::Play { + main_tx.send(MainThreadMessage::ClientDisconnected { client_id }).expect("Main thread should never drop its network reciever."); + } + } + } + } + } + } +} \ No newline at end of file diff --git a/src/net/packets/mod.rs b/server/src/network/packets/mod.rs similarity index 100% rename from src/net/packets/mod.rs rename to server/src/network/packets/mod.rs diff --git a/server/src/network/packets/packet.rs b/server/src/network/packets/packet.rs new file mode 100644 index 0000000..1207ceb --- /dev/null +++ b/server/src/network/packets/packet.rs @@ -0,0 +1,72 @@ +use crate::player::player::{Player, PlayerExtension}; + +/// Used to identify packets sent to the client. +pub trait IdentifiedPacket { + const PACKET_ID: i32; +} + +/// Must be used on packets sent from a valid player to process them. +pub trait ProcessPacket { + /// processes (play) packet sent by the player. + /// + /// this must be run on the main thread. + fn process

(&self, player: &mut Player

); +} + +/// Implements IdentifiedPacket for all entries with the corresponding packet id. +#[macro_export] +macro_rules! register_packets { + ($($packet:ty = $id:expr);* $(;)?) => { + $( + impl IdentifiedPacket for $packet { + const PACKET_ID: i32 = $id; + } + )* + }; +} + +// since this doesn't need to be imported often (unlike client bound packets) +// it can use an enum just fine, (no annoying importing) +#[macro_export] +macro_rules! register_serverbound_packets { + ( + $enum_name:ident; + $( $packet_type:ident = $id:literal );* $(;)? + ) => { + pub enum $enum_name { + Invalid(i32), // temporary, since not all packets are implemented, and without this it will error + $( $packet_type($packet_type), )* + } + + impl $crate::network::packets::packet_deserialize::PacketDeserializable for $enum_name { + fn read(buffer: &mut impl bytes::Buf) -> anyhow::Result { + if let Some(packet_id) = $crate::network::binary::var_int::read_var_int(buffer) { + match packet_id { + $( + $id => Ok($enum_name::$packet_type( + <$packet_type as $crate::network::packets::packet_deserialize::PacketDeserializable>::read(buffer)? + )), + )* + _ => Ok($enum_name::Invalid(packet_id)), + } + } else { + anyhow::bail!("failed to read var_int") + } + } + } + + impl $crate::network::packets::packet::ProcessPacket for $enum_name { + fn process

(&self, player: &mut $crate::player::player::Player

) { + match self { + $( + $enum_name::$packet_type(inner) => { + <_ as ProcessPacket>::process(inner, player) + } + )* + $enum_name::Invalid(_) => unreachable!() + } + } + } + }; +} + diff --git a/server/src/network/packets/packet_buffer.rs b/server/src/network/packets/packet_buffer.rs new file mode 100644 index 0000000..f8e24d7 --- /dev/null +++ b/server/src/network/packets/packet_buffer.rs @@ -0,0 +1,55 @@ +use crate::network::binary::var_int::{var_int_size, write_var_int}; +use crate::network::internal_packets::NetworkThreadMessage; +use crate::network::packets::packet::IdentifiedPacket; +use crate::network::packets::packet_serialize::PacketSerializable; +use crate::player::player::ClientId; +use bytes::{Bytes, BytesMut}; + +#[derive(Debug)] +pub struct PacketBuffer { + buffer: BytesMut, +} + +impl PacketBuffer { + + pub fn new() -> Self { + Self { + buffer: BytesMut::new() + } + } + + pub fn write_packet

(&mut self, packet: &P) { + let write_size = (var_int_size(P::PACKET_ID) + packet.write_size()) as i32; + self.buffer.reserve(write_size as usize + var_int_size(write_size)); + + write_var_int(&mut self.buffer, write_size); + write_var_int(&mut self.buffer, P::PACKET_ID); + packet.write(&mut self.buffer); + } + + /// gets a message for network thread to send the packets inside the buffer to the client. + #[inline] + pub fn get_packet_message(&mut self, client_id: ClientId) -> NetworkThreadMessage { + NetworkThreadMessage::SendPackets { client_id, buffer: self.split_into_bytes() } + } + + #[inline] + pub fn split_into_bytes(&mut self) -> Bytes { + self.buffer.split().freeze() + } + + #[inline] + pub fn copy_from(&mut self, buf: &PacketBuffer) { + self.buffer.extend_from_slice(&buf.buffer) + } + + #[inline] + pub fn clear(&mut self) { + self.buffer.clear(); + } + + #[inline] + pub fn is_empty(&self) -> bool { + self.buffer.is_empty() + } +} \ No newline at end of file diff --git a/server/src/network/packets/packet_deserialize.rs b/server/src/network/packets/packet_deserialize.rs new file mode 100644 index 0000000..b4eda7d --- /dev/null +++ b/server/src/network/packets/packet_deserialize.rs @@ -0,0 +1,115 @@ +use crate::{network::binary::var_int::{read_var_int, VarInt}, utils::get_vec}; +use anyhow::bail; +use bytes::Buf; +use fstr::FString; + +pub trait PacketDeserializable: Sized { + fn read(buffer: &mut impl Buf) -> anyhow::Result; +} + +impl PacketDeserializable for u8 { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + Ok(buffer.try_get_u8()?) + } +} + +impl PacketDeserializable for bool { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + Ok(u8::read(buffer)? != 0) + } +} + + +impl PacketDeserializable for i8 { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + Ok(u8::read(buffer)? as i8) + } +} + +impl PacketDeserializable for u16 { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + Ok(buffer.try_get_u16()?) + } +} + +impl PacketDeserializable for i16 { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + Ok(buffer.try_get_i16()?) + } +} + +impl PacketDeserializable for u32 { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + Ok(buffer.try_get_u32()?) + } +} + +impl PacketDeserializable for i32 { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + Ok(buffer.try_get_i32()?) + } +} + +impl PacketDeserializable for u64 { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + Ok(buffer.try_get_u64()?) + } +} + +impl PacketDeserializable for i64 { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + Ok(buffer.try_get_i64()?) + } +} + +impl PacketDeserializable for f32 { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + Ok(buffer.try_get_f32()?) + } +} + +impl PacketDeserializable for f64 { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + Ok(buffer.try_get_f64()?) + } +} + +impl PacketDeserializable for VarInt { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + match read_var_int(buffer) { + Some(int) => Ok(VarInt(int)), + None => bail!("Failed to read VarInt"), + } + } +} + +impl PacketDeserializable for String { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + let length = *VarInt::read(buffer)? as usize; + if buffer.remaining() < length { + bail!("not enough bytes for string") + } + if length > 32767 { + bail!("String too long. {:?} > 32767", length); + } + match String::from_utf8(get_vec(buffer, length)) { + Ok(string) => Ok(string), + Err(_) => bail!("failed to read string"), + } + } +} + +impl PacketDeserializable for FString { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + let length = *VarInt::read(buffer)? as usize; + if buffer.remaining() < length { + bail!("not enough bytes for string") + } + if length > 32767 { + bail!("String too long. {:?} > 32767", length); + } + let str = Self::from_bytes(&buffer.chunk()[..length])?; + buffer.advance(length); + Ok(str) + } +} \ No newline at end of file diff --git a/src/net/packets/packet_serialize.rs b/server/src/network/packets/packet_serialize.rs similarity index 79% rename from src/net/packets/packet_serialize.rs rename to server/src/network/packets/packet_serialize.rs index f219c3b..40ee0c5 100644 --- a/src/net/packets/packet_serialize.rs +++ b/server/src/network/packets/packet_serialize.rs @@ -1,9 +1,10 @@ -use crate::net::var_int::{var_int_size, write_var_int, VarInt}; +use crate::network::binary::var_int::{var_int_size, write_var_int, VarInt}; use bytes::{BufMut, BytesMut}; +use fstr::FString; +use glam::{IVec3, Vec3}; use uuid::Uuid; pub trait PacketSerializable { - fn write_size(&self) -> usize; fn write(&self, buf: &mut BytesMut); @@ -122,16 +123,17 @@ impl PacketSerializable for &[u8] { self.len() } fn write(&self, buf: &mut BytesMut) { - buf.put_slice(*self) + buf.put_slice(self) } } -impl PacketSerializable for &[u8; N] { +impl PacketSerializable for [u8; N] { fn write_size(&self) -> usize { - N + var_int_size(N as i32) + N } fn write(&self, buf: &mut BytesMut) { - buf.put_slice(*self) + write_var_int(buf, N as i32); + buf.put_slice(self) } } @@ -178,10 +180,37 @@ impl PacketSerializable for Uuid { const { size_of::() } } fn write(&self, buf: &mut BytesMut) { - let bytes = self.as_u128(); - let most = (bytes >> 64) as i64; - let least = bytes as i64; - most.write(buf); - least.write(buf); + buf.put_u128(self.as_u128()); + } +} + +impl PacketSerializable for Vec3 { + fn write_size(&self) -> usize { + size_of::() * 3 } -} \ No newline at end of file + fn write(&self, buf: &mut BytesMut) { + self.x.write(buf); + self.y.write(buf); + self.z.write(buf); + } +} +impl PacketSerializable for IVec3 { + fn write_size(&self) -> usize { + size_of::() * 3 + } + fn write(&self, buf: &mut BytesMut) { + self.x.write(buf); + self.y.write(buf); + self.z.write(buf); + } +} + +impl PacketSerializable for FString { + fn write_size(&self) -> usize { + var_int_size(self.len() as i32) + self.len() + } + + fn write(&self, buf: &mut BytesMut) { + self.as_str().write(buf); + } +} diff --git a/src/net/protocol/handshake/mod.rs b/server/src/network/protocol/handshake/mod.rs similarity index 100% rename from src/net/protocol/handshake/mod.rs rename to server/src/network/protocol/handshake/mod.rs diff --git a/server/src/network/protocol/handshake/serverbound.rs b/server/src/network/protocol/handshake/serverbound.rs new file mode 100644 index 0000000..f9c5623 --- /dev/null +++ b/server/src/network/protocol/handshake/serverbound.rs @@ -0,0 +1,14 @@ +use crate::network::binary::var_int::VarInt; +use crate::types::sized_string::SizedString; +use blocks::packet_deserializable; + +// 0x00 +packet_deserializable! { + #[derive(Debug)] + pub struct Handshake { + pub protocol_version: VarInt, + pub server_address: SizedString<255>, + pub server_port: u16, + pub next_state: VarInt, + } +} \ No newline at end of file diff --git a/src/net/protocol/login/clientbound.rs b/server/src/network/protocol/login/clientbound.rs similarity index 65% rename from src/net/protocol/login/clientbound.rs rename to server/src/network/protocol/login/clientbound.rs index 71a2d28..311318e 100644 --- a/src/net/protocol/login/clientbound.rs +++ b/server/src/network/protocol/login/clientbound.rs @@ -1,8 +1,9 @@ -use crate::net::packets::packet::IdentifiedPacket; -use crate::net::packets::packet_serialize::PacketSerializable; +use crate::network::packets::packet::IdentifiedPacket; +use crate::network::packets::packet_serialize::PacketSerializable; use crate::register_packets; use blocks::packet_serializable; use bytes::BytesMut; +use fstr::FString; register_packets! { // LoginDisconnect = 0x00; @@ -14,6 +15,6 @@ register_packets! { packet_serializable! { pub struct LoginSuccess { pub uuid: String, - pub name: String, + pub name: FString, } } \ No newline at end of file diff --git a/src/net/protocol/login/mod.rs b/server/src/network/protocol/login/mod.rs similarity index 100% rename from src/net/protocol/login/mod.rs rename to server/src/network/protocol/login/mod.rs diff --git a/server/src/network/protocol/login/serverbound.rs b/server/src/network/protocol/login/serverbound.rs new file mode 100644 index 0000000..9be1954 --- /dev/null +++ b/server/src/network/protocol/login/serverbound.rs @@ -0,0 +1,9 @@ +use crate::types::sized_string::SizedString; +use blocks::packet_deserializable; + +// 0x00 +packet_deserializable! { + pub struct LoginStart { + pub username: SizedString<16> + } +} \ No newline at end of file diff --git a/src/net/protocol/mod.rs b/server/src/network/protocol/mod.rs similarity index 100% rename from src/net/protocol/mod.rs rename to server/src/network/protocol/mod.rs diff --git a/src/net/protocol/play/clientbound.rs b/server/src/network/protocol/play/clientbound.rs similarity index 82% rename from src/net/protocol/play/clientbound.rs rename to server/src/network/protocol/play/clientbound.rs index 77249d5..268385c 100644 --- a/src/net/protocol/play/clientbound.rs +++ b/server/src/network/protocol/play/clientbound.rs @@ -1,16 +1,21 @@ -use crate::net::packets::packet::IdentifiedPacket; -use crate::net::packets::packet_serialize::PacketSerializable; -use crate::net::var_int::{var_int_size, write_var_int, VarInt}; +use crate::constants::particle::Particle; +use crate::constants::potions::PotionEffect; +use crate::constants::{EntityVariant, ObjectVariant, Sound}; +use crate::entity::entity_metadata::{EntityMetadata, PlayerMetadata}; +use crate::inventory::item_stack::ItemStack; +use crate::network::binary::var_int::{var_int_size, write_var_int, VarInt}; +use crate::network::packets::packet::IdentifiedPacket; +use crate::network::packets::packet_serialize::PacketSerializable; +use crate::player::attribute::AttributeMap; +use crate::player::player::GameProfile; use crate::register_packets; -use crate::server::block::block_position::BlockPos; -use crate::server::entity::entity_metadata::EntityMetadata; -use crate::server::items::item_stack::ItemStack; -use crate::server::player::attribute::AttributeMap; -use crate::server::utils::chat_component::chat_component_text::ChatComponentText; -use crate::server::utils::player_list::player_profile::PlayerData; -use crate::server::utils::sized_string::SizedString; +use crate::types::block_position::BlockPosition; +use crate::types::chat_component::ChatComponent; +use crate::types::sized_string::SizedString; use blocks::packet_serializable; use bytes::BytesMut; +use enumset::{EnumSet, EnumSetType}; +use glam::{IVec3, Vec3}; use uuid::Uuid; register_packets! { @@ -35,14 +40,16 @@ register_packets! { EntityVelocity = 0x12; DestroyEntites = 0x13; // Entity => 0x14; - EntityMove = 0x15; + EntityRelativeMove = 0x15; EntityRotate = 0x16; EntityMoveRotate = 0x17; EntityTeleport = 0x18; EntityYawRotate = 0x19; EntityStatus = 0x1a; EntityAttach = 0x1b; + // implements identified packet manually due to generics PacketEntityMetadata = 0x1c; + PacketPlayerMetadata = 0x1c; AddEffect = 0x1d; RemoveEffect = 0x1e; // SetExperience 0x1f; @@ -54,11 +61,11 @@ register_packets! { // BlockBreakAnimation = 0x25; // ChunkDataBulk = 0x26; // Explosion = 0x27; - // Effect = 0x28 - SoundEffect<'_> = 0x29; + // Effect = 0x28; + SoundEffect = 0x29; Particles = 0x2a; - // ChangeGameState = 0x2b - // SpawnGlobalEntity = 0x2c + // ChangeGameState = 0x2b; + // SpawnGlobalEntity = 0x2c; OpenWindow = 0x2d; CloseWindow = 0x2e; SetSlot = 0x2f; @@ -73,7 +80,7 @@ register_packets! { PlayerListItem<'_> = 0x38; PlayerAbilities = 0x39; TabCompleteReply = 0x3a; - ScoreboardObjective<'_> = 0x3b; + ScoreboardObjective = 0x3b; UpdateScore = 0x3c; DisplayScoreboard = 0x3d; Teams = 0x3e; @@ -110,7 +117,7 @@ packet_serializable! { packet_serializable! { pub struct Chat { - pub component: ChatComponentText, + pub component: ChatComponent, pub chat_type: i8, } } @@ -130,6 +137,15 @@ packet_serializable! { } } +#[derive(EnumSetType)] +pub enum Relative { + X, + Y, + Z, + Yaw, + Pitch +} + packet_serializable! { pub struct PositionLook { pub x: f64, @@ -137,13 +153,13 @@ packet_serializable! { pub z: f64, pub yaw: f32, pub pitch: f32, - pub flags: u8, + pub flags: EnumSet => &self.flags.as_u8(), } } packet_serializable! { pub struct SpawnPlayer { - pub entity_id: VarInt, + pub entity_id: i32 => &VarInt(self.entity_id), pub uuid: Uuid, pub x: f64 => &((self.x * 32.0).floor() as i32), pub y: f64 => &((self.y * 32.0).floor() as i32), @@ -151,7 +167,7 @@ packet_serializable! { pub yaw: f32 => &((self.yaw * 256.0 / 360.0) as i8), pub pitch: f32 => &((self.pitch * 256.0 / 360.0) as i8), pub current_item: i16, - pub metadata: EntityMetadata, + pub metadata: PlayerMetadata, } } @@ -166,13 +182,14 @@ const MOTION_CLAMP: f64 = 3.9; packet_serializable!{ pub struct SpawnObject { - pub entity_id: VarInt, - pub entity_variant: i8, + pub entity_id: i32 => &VarInt(self.entity_id), + pub variant: ObjectVariant, pub x: f64 => &((self.x * 32.0).floor() as i32), pub y: f64 => &((self.y * 32.0).floor() as i32), pub z: f64 => &((self.z * 32.0).floor() as i32), pub pitch: f32 => &((self.pitch * 256.0 / 360.0) as i8), pub yaw: f32 => &((self.yaw * 256.0 / 360.0) as i8), + // IDK how to serialize this, in correlation to the metadata provided pub data: i32, pub velocity_x: f64 => &((self.velocity_x.clamp(-MOTION_CLAMP, MOTION_CLAMP) * 8000.0) as i16), pub velocity_y: f64 => &((self.velocity_y.clamp(-MOTION_CLAMP, MOTION_CLAMP) * 8000.0) as i16), @@ -182,8 +199,8 @@ packet_serializable!{ packet_serializable! { pub struct SpawnMob { - pub entity_id: VarInt, - pub entity_variant: i8, + pub entity_id: i32 => &VarInt(self.entity_id), + pub entity_variant: EntityVariant, pub x: f64 => &((self.x * 32.0).floor() as i32), pub y: f64 => &((self.y * 32.0).floor() as i32), pub z: f64 => &((self.z * 32.0).floor() as i32), @@ -213,20 +230,20 @@ packet_serializable! { } packet_serializable! { - pub struct EntityMove { - pub entity_id: VarInt, - pub pos_x: i8, - pub pos_y: i8, - pub pos_z: i8, + pub struct EntityRelativeMove { + pub entity_id: i32 => &VarInt(self.entity_id), + pub pos_x: f64 => &((self.pos_x * 32.0).floor() as i32 as i8), + pub pos_y: f64 => &((self.pos_y * 32.0).floor() as i32 as i8), + pub pos_z: f64 => &((self.pos_z * 32.0).floor() as i32 as i8), pub on_ground: bool, } } packet_serializable! { pub struct EntityRotate { - pub entity_id: VarInt, - pub yaw: i8, - pub pitch: i8, + pub entity_id: i32 => &VarInt(self.entity_id), + pub yaw: f32 => &((self.yaw * 256.0 / 360.0) as i32 as i8), + pub pitch: f32 => &((self.pitch * 256.0 / 360.0) as i32 as i8), pub on_ground: bool, } } @@ -257,8 +274,8 @@ packet_serializable! { packet_serializable! { pub struct EntityYawRotate { - pub entity_id: VarInt, - pub yaw: i8, + pub entity_id: i32 => &VarInt(self.entity_id), + pub yaw: f32 => &((self.yaw * 256.0 / 360.0) as i32 as i8), } } @@ -292,11 +309,18 @@ packet_serializable! { } packet_serializable! { - pub struct AddEffect { + pub struct PacketPlayerMetadata { pub entity_id: VarInt, - pub effect_id: u8, + pub metadata: PlayerMetadata, + } +} + +packet_serializable! { + pub struct AddEffect { + pub entity_id: i32 => &VarInt(self.entity_id), + pub effect_id: PotionEffect, pub amplifier: i8, - pub duration: VarInt, + pub duration: i32 => &VarInt(self.duration), pub hide_particles: bool, } } @@ -320,14 +344,14 @@ packet_serializable! { packet_serializable! { pub struct BlockChange { - pub block_pos: BlockPos, + pub block_pos: IVec3 => &BlockPosition(self.block_pos), pub block_state: u16 => &VarInt(self.block_state as i32), } } packet_serializable! { pub struct BlockAction { - pub block_pos: BlockPos, + pub block_pos: IVec3 => &BlockPosition(self.block_pos), pub event_id: u8, pub event_data: u8, pub block_id: u16 => &VarInt((self.block_id & 4095) as i32), @@ -335,8 +359,8 @@ packet_serializable! { } packet_serializable! { - pub struct SoundEffect<'a> { - pub sound: &'a str, + pub struct SoundEffect { + pub sound: Sound, pub pos_x: f64 => &((self.pos_x * 8.0) as i32), pub pos_y: f64 => &((self.pos_y * 8.0) as i32), pub pos_z: f64 => &((self.pos_z * 8.0) as i32), @@ -347,14 +371,10 @@ packet_serializable! { packet_serializable! { pub struct Particles { - pub particle_id: i32, + pub particle: Particle, pub long_distance: bool, - pub x: f32, - pub y: f32, - pub z: f32, - pub offset_x: f32, - pub offset_y: f32, - pub offset_z: f32, + pub position: Vec3, + pub offset: Vec3, pub speed: f32, pub count: i32, // maybe figure out args, @@ -366,7 +386,7 @@ packet_serializable! { pub struct OpenWindow { pub window_id: i8, pub inventory_type: SizedString<32>, - pub window_title: ChatComponentText, + pub window_title: ChatComponent, pub slot_count: u8, } } @@ -483,15 +503,16 @@ packet_serializable! { } } +// hard coded render_type, maybe bad idea?? #[derive(Debug)] -pub struct ScoreboardObjective<'a> { +pub struct ScoreboardObjective { pub objective_name: SizedString<16>, - pub objective_value: SizedString<32>, - pub render_type: &'a str, + pub objective_value: SizedString<64>, + // pub render_type: &'a str, pub mode: i8, } -impl<'a> PacketSerializable for ScoreboardObjective<'a> { +impl PacketSerializable for ScoreboardObjective { fn write_size(&self) -> usize { let mut size = 0; size += self.objective_name.write_size() + self.mode.write_size(); @@ -500,7 +521,9 @@ impl<'a> PacketSerializable for ScoreboardObjective<'a> { const UPDATE_NAME: i8 = 2; if self.mode == ADD_OBJECTIVE || self.mode == UPDATE_NAME { - size += self.objective_value.write_size() + self.render_type.write_size(); + // inline integer type since its always this + const S: usize = (*b"integer").len(); + size += self.objective_value.write_size() + var_int_size(S as i32) + S; } size @@ -514,7 +537,7 @@ impl<'a> PacketSerializable for ScoreboardObjective<'a> { if self.mode == ADD_OBJECTIVE || self.mode == UPDATE_NAME { self.objective_value.write(buf); - self.render_type.write(buf); + PacketSerializable::write(&(*b"integer"), buf) } } } @@ -557,8 +580,8 @@ packet_serializable! { pub struct Teams { pub name: SizedString<16>, pub display_name: SizedString<32>, - pub prefix: SizedString<16>, - pub suffix: SizedString<16>, + pub prefix: SizedString<32>, + pub suffix: SizedString<32>, pub name_tag_visibility: SizedString<32>, pub color: i8, pub players: Vec>, @@ -615,7 +638,7 @@ impl PacketSerializable for Teams { } } -// todo test, this might not work +// test this, it might not work packet_serializable! { pub struct CustomPayload<'a> { pub channel: SizedString<20>, @@ -625,54 +648,62 @@ packet_serializable! { packet_serializable! { pub struct Disconnect { - pub reason: ChatComponentText + pub reason: ChatComponent } } packet_serializable! { pub struct PlayerListHeaderFooter { - pub header: ChatComponentText, - pub footer: ChatComponentText, + pub header: ChatComponent + pub footer: ChatComponent, } } +#[derive(Debug)] +pub struct PlayerData<'a> { + pub ping: i32, + pub game_mode: i32, + pub profile: &'a GameProfile, + pub display_name: Option +} + pub struct PlayerListItem<'a> { pub action: VarInt, - pub players: Vec<&'a PlayerData> + pub players: &'a [PlayerData<'a>] } impl PacketSerializable for PlayerListItem<'_> { - + fn write_size(&self) -> usize { const ADD_PLAYER: i32 = 0; const UPDATE_GAME_MODE: i32 = 1; const UPDATE_LATENCY: i32 = 2; const UPDATE_NAME: i32 = 3; const REMOVE_PLAYER: i32 = 4; - + let mut size = self.action.write_size() + var_int_size(self.players.len() as i32); for player in self.players.iter() { match self.action.0 { ADD_PLAYER => { size += player.profile.uuid.write_size() + player.profile.username.write_size(); - + let properties = &player.profile.properties; - size += + size += var_int_size(properties.len() as i32) + - var_int_size(player.game_mode.id()) + + var_int_size(player.game_mode) + var_int_size(player.ping); - + for (key, property) in properties.iter() { size += key.write_size() + property.value.write_size() + 1; - + if let Some(signature) = &property.signature { size += signature.write_size(); } } } UPDATE_GAME_MODE => { - size += player.profile.uuid.write_size() + var_int_size(player.game_mode.id()); + size += player.profile.uuid.write_size() + var_int_size(player.game_mode); } UPDATE_LATENCY => { size += player.profile.uuid.write_size() + var_int_size(player.ping); @@ -689,7 +720,7 @@ impl PacketSerializable for PlayerListItem<'_> { } } } - + size } fn write(&self, buf: &mut BytesMut) { @@ -698,7 +729,7 @@ impl PacketSerializable for PlayerListItem<'_> { const UPDATE_LATENCY: i32 = 2; const UPDATE_NAME: i32 = 3; const REMOVE_PLAYER: i32 = 4; - + self.action.write(buf); write_var_int(buf, self.players.len() as i32); @@ -721,12 +752,12 @@ impl PacketSerializable for PlayerListItem<'_> { false.write(buf) } } - write_var_int(buf, player.game_mode.id()); + write_var_int(buf, player.game_mode); write_var_int(buf, player.ping); } UPDATE_GAME_MODE => { player.profile.uuid.write(buf); - write_var_int(buf, player.game_mode.id()); + write_var_int(buf, player.game_mode); } UPDATE_LATENCY => { player.profile.uuid.write(buf); diff --git a/src/net/protocol/play/mod.rs b/server/src/network/protocol/play/mod.rs similarity index 100% rename from src/net/protocol/play/mod.rs rename to server/src/network/protocol/play/mod.rs diff --git a/src/net/protocol/play/serverbound.rs b/server/src/network/protocol/play/serverbound.rs similarity index 79% rename from src/net/protocol/play/serverbound.rs rename to server/src/network/protocol/play/serverbound.rs index b8513d0..13a40fa 100644 --- a/src/net/protocol/play/serverbound.rs +++ b/server/src/network/protocol/play/serverbound.rs @@ -1,16 +1,15 @@ -use crate::net::client::Client; -use crate::net::packets::packet::ProcessPacket; -use crate::net::packets::packet_deserialize::PacketDeserializable; -use crate::net::protocol::play::serverbound::ClientStatus::{OpenInventory, PerformRespawn, RequestStats}; -use crate::net::var_int::VarInt; +use crate::inventory::item_stack::ItemStack; +use crate::network::binary::var_int::VarInt; +use crate::network::packets::packet::ProcessPacket; +use crate::network::packets::packet_deserialize::PacketDeserializable; +use crate::network::protocol::play::serverbound::ClientStatus::{OpenInventory, PerformRespawn, RequestStats}; use crate::register_serverbound_packets; -use crate::server::block::block_position::BlockPos; -use crate::server::items::item_stack::ItemStack; -use crate::server::utils::fvec3::FVec3; -use crate::server::utils::sized_string::SizedString; +use crate::types::block_position::BlockPosition; +use crate::types::sized_string::SizedString; use anyhow::bail; use blocks::packet_deserializable; -use bytes::BytesMut; +use bytes::Buf; +use glam::{IVec3, Vec3}; register_serverbound_packets! { Play; @@ -55,7 +54,7 @@ packet_deserializable! { } packet_deserializable! { - #[derive(Debug, PartialEq)] + #[derive(Debug, PartialEq, Copy, Clone)] pub enum EntityInteractionType { Interact, Attack, @@ -66,18 +65,18 @@ packet_deserializable! { pub struct UseEntity { pub entity_id: VarInt, pub action: EntityInteractionType, - pub hit_vec: Option + pub hit_vec: Option } impl PacketDeserializable for UseEntity { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - let entity_id: VarInt = PacketDeserializable::read(buffer)?; - let action: EntityInteractionType = PacketDeserializable::read(buffer)?; + fn read(buffer: &mut impl Buf) -> anyhow::Result { + let entity_id: VarInt = VarInt::read(buffer)?; + let action: EntityInteractionType = EntityInteractionType::read(buffer)?; let hit_vec = if action == EntityInteractionType::InteractAt { - Some(FVec3::new( - PacketDeserializable::read(buffer)?, - PacketDeserializable::read(buffer)?, - PacketDeserializable::read(buffer)?, + Some(Vec3::new( + f32::read(buffer)?, + f32::read(buffer)?, + f32::read(buffer)?, )) } else { None @@ -139,14 +138,14 @@ packet_deserializable! { packet_deserializable! { pub struct PlayerDigging { pub action: PlayerDiggingAction, - pub position: BlockPos, + pub position: BlockPosition, pub direction: i8, } } packet_deserializable! { pub struct PlayerBlockPlacement { - pub position: BlockPos, + pub position: BlockPosition, pub placed_direction: i8, pub item_stack: Option, pub facing_x: i8, @@ -177,7 +176,7 @@ pub enum PlayerActionType { } impl PacketDeserializable for PlayerActionType { - fn read(buffer: &mut BytesMut) -> anyhow::Result { + fn read(buffer: &mut impl Buf) -> anyhow::Result { let var_int: VarInt = PacketDeserializable::read(buffer)?; Ok({ match var_int.0 { @@ -242,19 +241,16 @@ packet_deserializable! { pub struct TabComplete { pub message: String, - pub target_block: Option + pub target_block: Option } impl PacketDeserializable for TabComplete { - fn read(buffer: &mut BytesMut) -> anyhow::Result { + fn read(buffer: &mut impl Buf) -> anyhow::Result { Ok(Self { - message: { - let msg: SizedString<32767> = SizedString::read(buffer)?; - msg.into_owned() - }, + message: PacketDeserializable::read(buffer)?, target_block: { if u8::read(buffer)? != 0 { - Some(BlockPos::read(buffer)?) + Some(BlockPosition::read(buffer)?.0) } else { None } @@ -264,6 +260,7 @@ impl PacketDeserializable for TabComplete { } packet_deserializable! { + #[derive(Debug)] pub struct ClientSettings { pub lang: SizedString<7>, pub view_distance: i8, @@ -280,7 +277,7 @@ pub enum ClientStatus { } impl PacketDeserializable for ClientStatus { - fn read(buffer: &mut BytesMut) -> anyhow::Result { + fn read(buffer: &mut impl Buf) -> anyhow::Result { let var_int: VarInt = PacketDeserializable::read(buffer)?; Ok({ match var_int.0 { diff --git a/server/src/network/protocol/status/clientbound.rs b/server/src/network/protocol/status/clientbound.rs new file mode 100644 index 0000000..2a929fe --- /dev/null +++ b/server/src/network/protocol/status/clientbound.rs @@ -0,0 +1,22 @@ +use crate::network::packets::packet::IdentifiedPacket; +use crate::network::packets::packet_serialize::PacketSerializable; +use crate::register_packets; +use blocks::packet_serializable; +use bytes::BytesMut; + +register_packets! { + StatusResponse<'_> = 0x00; + StatusPong = 0x01; +} + +packet_serializable! { + pub struct StatusResponse<'a> { + pub status: &'a str, + } +} + +packet_serializable! { + pub struct StatusPong { + pub client_time: i64, + } +} diff --git a/src/net/protocol/status/mod.rs b/server/src/network/protocol/status/mod.rs similarity index 100% rename from src/net/protocol/status/mod.rs rename to server/src/network/protocol/status/mod.rs diff --git a/server/src/network/protocol/status/serverbound.rs b/server/src/network/protocol/status/serverbound.rs new file mode 100644 index 0000000..5bd2202 --- /dev/null +++ b/server/src/network/protocol/status/serverbound.rs @@ -0,0 +1,16 @@ +use blocks::packet_deserializable; + +// 0x00 +// unused since it doesn't do any reading, +// but im keeping it to remind myself that this packet exists +packet_deserializable! { + pub struct StatusRequest; +} + +// 0x01 +packet_deserializable! { + pub struct StatusPing { + pub client_time: i64, + } +} + diff --git a/src/server/player/attribute.rs b/server/src/player/attribute.rs similarity index 87% rename from src/server/player/attribute.rs rename to server/src/player/attribute.rs index 88e3a7c..5bd5485 100644 --- a/src/server/player/attribute.rs +++ b/server/src/player/attribute.rs @@ -1,8 +1,7 @@ -use crate::net::packets::packet_serialize::PacketSerializable; -use crate::net::var_int::{var_int_size, VarInt}; +use crate::network::binary::var_int::{var_int_size, VarInt}; +use crate::network::packets::packet_serialize::PacketSerializable; use bytes::BytesMut; use std::collections::HashMap; -use std::hash::Hash; use uuid::Uuid; #[derive(Clone, Debug)] @@ -28,7 +27,7 @@ impl AttributeMap { map: HashMap::new(), } } - + pub fn insert(&mut self, attribute: Attribute, value: f64) { self.map.insert(attribute, AttributeInstance { value, @@ -76,14 +75,14 @@ impl PacketSerializable for AttributeMap { for (attribute_type, value) in &self.map { size += attribute_type.id().write_size() + - value.value.write_size() + - var_int_size(value.modifiers.len() as i32); - + value.value.write_size() + + var_int_size(value.modifiers.len() as i32); + for modifier in &value.modifiers { - size += + size += modifier.id.write_size() + - modifier.amount.write_size() + - modifier.operation.write_size() + modifier.amount.write_size() + + modifier.operation.write_size() } } size diff --git a/server/src/player/mod.rs b/server/src/player/mod.rs new file mode 100644 index 0000000..3de1e57 --- /dev/null +++ b/server/src/player/mod.rs @@ -0,0 +1,4 @@ +pub mod player; +pub mod packet_handling; +pub mod attribute; +pub mod sidebar; \ No newline at end of file diff --git a/server/src/player/packet_handling.rs b/server/src/player/packet_handling.rs new file mode 100644 index 0000000..978a041 --- /dev/null +++ b/server/src/player/packet_handling.rs @@ -0,0 +1,240 @@ +use crate::inventory::menu::OpenContainer; +use crate::network::packets::packet::ProcessPacket; +use crate::network::protocol::play::clientbound::Chat; +use crate::network::protocol::play::serverbound; +use crate::network::protocol::play::serverbound::{ArmSwing, ChatMessage, ClickWindow, ClientSettings, ClientStatus, HeldItemChange, PlayerAction, PlayerActionType, PlayerBlockPlacement, PlayerDigging, PlayerLook, PlayerPosition, PlayerPositionLook, PlayerUpdate, TabComplete, UseEntity}; +use crate::player::player::{Player, PlayerExtension}; +use crate::types::chat_component::ChatComponent; +use crate::types::direction::Direction; +use enumset::EnumSet; +use glam::IVec3; + +impl ProcessPacket for serverbound::KeepAlive { + fn process

(&self, _: &mut Player

) { + // if player.last_keep_alive == self.id { + // if let Ok(since) = SystemTime::now().duration_since(UNIX_EPOCH) { + // let since = since.as_millis() as i32 - player.last_keep_alive; + // player.ping = (player.ping * 3 + since) / 4; + // println!("Ping: {}", player.ping); + // } + // } + } +} + +impl ProcessPacket for ChatMessage { + fn process

(&self, player: &mut Player

) { + player.write_packet(&Chat { + component: ChatComponent::new(String::from_utf8(self.message.as_bytes().to_vec()).unwrap()), + chat_type: 0, + }) + } +} + +impl ProcessPacket for UseEntity { + fn process

(&self, player: &mut Player

) { + if let Some(index) = player.world_mut().entity_map.get(&self.entity_id.0) { + let entity = &mut player.world_mut().entities[*index]; + entity.interact(player, self.action) + } + } +} + +// I don't know if any implementation will be needed, +// but just in case imma keep it here +impl ProcessPacket for PlayerUpdate { + fn process(&self, _: &mut Player

) { + + } +} + +// anti cheat stuff vvv important to do for all 3 + +impl ProcessPacket for PlayerPosition { + fn process

(&self, player: &mut Player

) { + player.position.x = self.x; + player.position.y = self.y; + player.position.z = self.z; + } +} + +impl ProcessPacket for PlayerLook { + fn process

(&self, player: &mut Player

) { + player.yaw = self.yaw; + player.pitch = self.pitch; + } +} + +impl ProcessPacket for PlayerPositionLook { + fn process

(&self, player: &mut Player

) { + player.position.x = self.x; + player.position.y = self.y; + player.position.z = self.z; + player.yaw = self.yaw; + player.pitch = self.pitch; + } +} + +impl ProcessPacket for PlayerDigging { + fn process

(&self, player: &mut Player

) { + P::dig(player, self.position.0, &self.action); + } +} + +pub struct BlockInteractResult { + pub position: IVec3, + pub direction: Direction, +} + +impl ProcessPacket for PlayerBlockPlacement { + fn process

(&self, player: &mut Player

) { + if !player.sent_block_placement { + player.sent_block_placement = true; + + let block_hit_result = if self.position.y.is_negative() { + None + } else { + Some(BlockInteractResult { + position: *self.position, + direction: match self.placed_direction { + 0 => Direction::Down, + 1 => Direction::Up, + 2 => Direction::North, + 3 => Direction::South, + 4 => Direction::West, + 5 => Direction::East, + _ => unreachable!() + }, + }) + }; + P::interact(player, self.item_stack.clone(), block_hit_result); + } + } +} + +impl ProcessPacket for HeldItemChange { + fn process

(&self, player: &mut Player

) { + // warn player if invalid packets + let item_slot = self.slot_id.clamp(0, 8) as u8; + player.held_slot = item_slot; + } +} + +// will be useful if we want to add stuff like mage beam +impl ProcessPacket for ArmSwing { + fn process(&self, _: &mut Player

) { + // lc + } +} + +impl ProcessPacket for PlayerAction { + fn process

(&self, player: &mut Player

) { + match self.action { + PlayerActionType::StartSneaking => player.is_sneaking = true, + PlayerActionType::StopSneaking => player.is_sneaking = false, + _ => {} + } + } +} + +impl ProcessPacket for serverbound::CloseWindow { + fn process

(&self, player: &mut Player

) { + player.open_container(OpenContainer::None) + // player.open_ui(UI::None) + } +} + +impl ProcessPacket for ClickWindow { + fn process

(&self, player: &mut Player

) { + let container = unsafe { player.open_container.get().as_mut().unwrap() }; + container.click_window(player, self); + } +} + +impl ProcessPacket for serverbound::ConfirmTransaction { + fn process(&self, _: &mut Player

) { + // anti cheat + } +} + +impl ProcessPacket for TabComplete { + fn process(&self, _: &mut Player

) { + // for commands, we should have some tree system instead of recreating the mess that is mc 1.8.9 CommandBase + } + // fn process

(&self, player: &mut Player

) { + // if !self.message.starts_with("/") { + // return; + // } + // let parts: Vec<&str> = self.message.split_whitespace().collect(); + // let command_name = parts[0].strip_prefix("/").unwrap(); + // + // if command_name.is_empty() { + // player.write_packet(&TabCompleteReply { + // matches: Command::list().iter().map(|cmd| format!("/{}", cmd.name())).collect(), + // }); + // return + // } + // + // if let Some(command) = Command::find(command_name) { + // let args = &parts[1..]; + // + // let next_arg = self.message.ends_with(' '); + // + // if args.is_empty() && !next_arg { + // // user input a valid command but has not hit space, so we shouldn't provide any completions. + // // there might be a better way to do this somewhere else but idk atm. + // return; + // } + // + // let current_arg = if next_arg { + // args.len() + // } else { + // args.len().saturating_sub(1) + // }; + // + // let command_args = command.args(player.world_mut(), player); + // + // if current_arg >= command_args.len() { + // // user has input too many arguments; so we just return here. + // return; + // } + // + // let completions = { + // let arg = &command_args.get(current_arg); + // if arg.is_none() { return; } + // &arg.unwrap().completions + // }; + // + // let matches: Vec = if next_arg || args.is_empty() { + // completions.to_vec() + // } else { + // completions.iter().filter(|cmp| cmp.starts_with(args.last().unwrap_or(&""))).cloned().collect() + // }; + // + // player.write_packet(&TabCompleteReply { + // matches + // }); + // } else { + // let commands = Command::list().iter().filter(|cmd| cmd.name().starts_with(command_name)).map(|cmd| format!("/{}", cmd.name())).collect(); + // player.write_packet(&TabCompleteReply { + // matches: commands + // }); + // } + // } +} + +impl ProcessPacket for ClientSettings { + fn process(&self, player: &mut Player

) { + if player.metadata.layers.as_u8() != self.skin_parts { + player.metadata.layers = EnumSet::from_u8(self.skin_parts); + player.dirty_metadata = true; + } + } +} + +impl ProcessPacket for ClientStatus { + fn process

(&self, player: &mut Player

) { + if let ClientStatus::OpenInventory = self { + player.open_container(OpenContainer::Inventory) + } + } +} \ No newline at end of file diff --git a/server/src/player/player.rs b/server/src/player/player.rs new file mode 100644 index 0000000..9109883 --- /dev/null +++ b/server/src/player/player.rs @@ -0,0 +1,346 @@ +use crate::constants::Sound; +use crate::entity::entity::EntityId; +use crate::entity::entity_metadata::PlayerMetadata; +use crate::inventory::item::{get_item_stack, Item}; +use crate::inventory::item_stack::ItemStack; +use crate::inventory::menu::OpenContainer; +use crate::inventory::Inventory; +use crate::network::binary::var_int::VarInt; +use crate::network::client::ClientKey; +use crate::network::packets::packet::IdentifiedPacket; +use crate::network::packets::packet_buffer::PacketBuffer; +use crate::network::packets::packet_serialize::PacketSerializable; +use crate::network::protocol::play::clientbound; +use crate::network::protocol::play::clientbound::{ConfirmTransaction, PacketPlayerMetadata, PlayerData, PlayerListItem, SoundEffect, WindowItems}; +use crate::network::protocol::play::serverbound::PlayerDiggingAction; +use crate::player::packet_handling::BlockInteractResult; +use crate::types::aabb::AABB; +use crate::world::chunk::chunk::get_chunk_position; +use crate::world::chunk::chunk_grid::{ChunkDiff, ChunkGrid}; +use crate::world::world::VIEW_DISTANCE; +use crate::world::world::{World, WorldExtension}; +use fstr::FString; +use glam::{dvec3, DVec3, IVec3, Vec3}; +use std::cell::UnsafeCell; +use std::collections::HashMap; +use std::f32::consts::PI; +use std::ops::{Deref, DerefMut}; +use std::ptr::NonNull; +use uuid::Uuid; + +pub type ClientId = ClientKey; + +#[derive(Debug, Clone)] +pub struct GameProfileProperty { + pub value: FString, + pub signature: Option +} + +#[derive(Debug, Clone)] +pub struct GameProfile { + pub uuid: Uuid, + pub username: FString, + pub properties: HashMap +} + +#[allow(unused_variables)] +pub trait PlayerExtension : Sized { + type World: WorldExtension; + type Item: Item; + + fn tick(player: &mut Player); + + // maybe make a separate enum that actually only has player digging actions + fn dig(player: &mut Player, position: IVec3, action: &PlayerDiggingAction) { + + } + + fn interact(player: &mut Player, item: Option, block: Option) { + + } +} + +pub struct Player { + world: NonNull>, + + pub packet_buffer: PacketBuffer, + + pub profile: GameProfile, + pub client_id: ClientId, + pub entity_id: EntityId, + + pub metadata: PlayerMetadata, + pub dirty_metadata: bool, + + pub position: DVec3, + pub yaw: f32, + pub pitch: f32, + pub on_ground: bool, + + pub last_position: DVec3, + pub last_yaw: f32, + pub last_pitch: f32, + + pub is_sneaking: bool, + + pub window_id: i8, + pub(super) open_container: UnsafeCell>, + pub inventory: Inventory, + pub held_slot: u8, + + // todo: do this for other packets too + pub sent_block_placement: bool, + pub ticks_existed: u32, + + // removes npc from tab list after some ticks + npc_profiles_for_removal: HashMap, + + pub extension: E +} + +impl Player { + + pub fn new( + world: &mut World, + game_profile: GameProfile, + client_id: ClientId, + entity_id: EntityId, + position: DVec3, + yaw: f32, + pitch: f32, + extension: E, + ) -> Self { + Self { + world: NonNull::from_mut(world), + packet_buffer: PacketBuffer::new(), + profile: game_profile, + client_id, + entity_id, + metadata: PlayerMetadata { layers: Default::default() }, + dirty_metadata: false, + position, + yaw, + pitch, + on_ground: false, + last_position: position, + last_yaw: yaw, + last_pitch: pitch, + is_sneaking: false, + + open_container: UnsafeCell::new(OpenContainer::None), + window_id: 0, + inventory: Inventory::new(), + held_slot: 0, + + sent_block_placement: false, + ticks_existed: 0, + + npc_profiles_for_removal: HashMap::new(), + + extension, + } + } + + pub fn world<'a>(&self) -> &'a World { + unsafe { self.world.as_ref() } + } + + pub fn world_mut<'a>(&mut self) -> &'a mut World { + unsafe { self.world.as_mut() } + } + + pub fn write_packet

(&mut self, packet: &P) { + self.packet_buffer.write_packet(packet) + } + + pub fn flush_packets(&mut self) { + if !self.packet_buffer.is_empty() { + let tx = &self.world().network_tx; + let _ = tx.send(self.packet_buffer.get_packet_message(self.client_id)); + } + } + + pub fn tick(&mut self) { + + self.ticks_existed += 1; + self.write_packet(&ConfirmTransaction { + window_id: 0, + action_number: -1, + accepted: false, + }); + + self.npc_profiles_for_removal.retain(|k, v| { + *v -= 1; + if *v == 0 { + self.packet_buffer.write_packet(&PlayerListItem { + action: VarInt(4), + players: &[PlayerData { + ping: 0, + game_mode: 0, + profile: &GameProfile { + uuid: *k, + username: FString::EMPTY, + properties: HashMap::new(), + }, + display_name: None, + }] + }); + }; + *v != 0 + }); + + // tick extension + E::tick(self); + + if self.dirty_metadata { + self.write_packet(&PacketPlayerMetadata { + entity_id: VarInt(self.entity_id), + metadata: self.metadata, + }); + self.dirty_metadata = false; + } + + // send new and remove chunks (and entities) + let (chunk_x, chunk_z) = get_chunk_position(self.position); + let (last_chunk_x, last_chunk_z) = get_chunk_position(self.last_position); + + if chunk_x != last_chunk_x || chunk_z != last_chunk_z { + + let world = self.world_mut(); + let chunk_grid = &mut world.chunk_grid; + + if let Some(old_chunk) = chunk_grid.get_chunk_mut(last_chunk_x, last_chunk_z) { + old_chunk.remove_player(self.client_id) + } + if let Some(new_chunk) = chunk_grid.get_chunk_mut(chunk_x, chunk_z) { + new_chunk.insert_player(self.client_id) + } + + self.world().chunk_grid.for_each_diff( + (chunk_x, chunk_z), + (last_chunk_x, last_chunk_z), + VIEW_DISTANCE, + |x, z, diff| { + let Some(chunk) = chunk_grid.get_chunk_mut(x, z) else { + return; + }; + if diff == ChunkDiff::New { + chunk.write_chunk_data(x, z, true, &mut self.packet_buffer); + chunk.write_spawn_entities(self); + } else { + chunk.write_despawn_entities(self); + self.write_packet(&ChunkGrid::get_unload_chunk_packet(x, z)); + } + } + ) + } + + // copy packet buffers from chunks around + let min_x = chunk_x - VIEW_DISTANCE; + let min_z = chunk_z - VIEW_DISTANCE; + let max_x = chunk_x + VIEW_DISTANCE; + let max_z = chunk_z + VIEW_DISTANCE; + + for x in min_x..=max_x { + for z in min_z..=max_z { + if let Some(chunk) = self.world_mut().chunk_grid.get_chunk(x, z) { + self.packet_buffer.copy_from(&chunk.packet_buffer); + } + } + } + + self.sent_block_placement = false; + self.last_position = self.position; + self.flush_packets(); + } + + pub fn play_sound_at(&mut self, sound: Sound, volume: f32, pitch: f32, position: DVec3) { + self.write_packet(&SoundEffect { + sound, + pos_x: position.x, + pos_y: position.y, + pos_z: position.z, + volume, + pitch, + }) + } + + pub fn play_sound(&mut self, sound: Sound, volume: f32, pitch: f32) { + self.play_sound_at(sound, volume, pitch, self.position) + } + + pub fn collision_aabb(&self) -> AABB { + let w = 0.3; + let h = 1.8; + AABB::new( + dvec3(self.position.x - w, self.position.y, self.position.z - w), + dvec3(self.position.x + w, self.position.y + h, self.position.z + w), + ) + } + + pub fn collision_aabb_at(&self, position: &DVec3) -> AABB { + let w = 0.3; + let h = 1.8; + AABB::new( + dvec3(position.x - w, position.y, position.z - w), + dvec3(position.x + w, position.y + h, position.z + w), + ) + } + + pub fn get_held_item(&self) -> &Option { + self.inventory.get_hotbar_slot(self.held_slot as usize) + } + + pub fn open_container(&mut self, mut container: OpenContainer) { + if matches!(*self.open_container.get_mut(), OpenContainer::Menu(_)) { + self.write_packet(&clientbound::CloseWindow { + window_id: self.window_id, + }) + }; + self.window_id += 1; + container.open(self); + self.open_container = UnsafeCell::new(container); + } + + pub fn get_container(&mut self) -> &mut OpenContainer { + self.open_container.get_mut() + } + + pub fn sync_inventory(&mut self) { + let mut items = Vec::new(); + for item in self.inventory.items.iter() { + items.push(get_item_stack(item)); + } + self.write_packet(&WindowItems { + window_id: 0, + items, + }); + let container = unsafe { self.open_container.get().as_mut().unwrap() }; + container.sync_container(self); + } + + pub fn rotation_vec(&self) -> Vec3 { + let (yaw_sin, yaw_cos) = (-self.yaw.to_radians() - PI).sin_cos(); + let (pitch_sin, pitch_cos) = (-self.pitch.to_radians()).sin_cos(); + Vec3::new(yaw_sin * -pitch_cos, pitch_sin, yaw_cos * -pitch_cos) + } + + pub(crate) fn add_delayed_profile_remove(&mut self, uuid: Uuid) { + self.npc_profiles_for_removal.insert(uuid, 40); + } +} + +impl

Deref for Player

{ + type Target = P; + + fn deref(&self) -> &Self::Target { + &self.extension + } +} + +impl

DerefMut for Player

{ + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.extension + } +} + diff --git a/server/src/player/sidebar.rs b/server/src/player/sidebar.rs new file mode 100644 index 0000000..2735214 --- /dev/null +++ b/server/src/player/sidebar.rs @@ -0,0 +1,206 @@ +use crate::network::binary::var_int::VarInt; +use crate::network::packets::packet_buffer::PacketBuffer; +use crate::network::protocol::play::clientbound::{DisplayScoreboard, ScoreboardObjective, Teams, UpdateScore}; +use crate::types::sized_string::SizedString; +use std::convert::Into; +use std::ops::Deref; + +const OBJECTIVE_NAME: SizedString<16> = unsafe { SizedString::slice_truncated(*b"sidebar") }; + +pub struct Sidebar { + lines: Vec>, + previous: Vec>, +} + +impl Sidebar { + + pub fn new() -> Self { + Self { + lines: Vec::new(), + previous: Vec::new(), + } + } + + pub fn push(&mut self, string: &str) -> &mut Self { + self.lines.extend(string.lines().map(|str| SizedString::truncated(str))); + self + } + + pub fn new_line(&mut self) -> &mut Self { + self.lines.push(SizedString::EMPTY); + self + } + + pub fn write_init_packets(&self, packet_buffer: &mut PacketBuffer) { + packet_buffer.write_packet(&ScoreboardObjective { + objective_name: OBJECTIVE_NAME, + objective_value: OBJECTIVE_NAME.deref().into(), + mode: 0, + }); + packet_buffer.write_packet(&DisplayScoreboard { + position: 1, + score_name: OBJECTIVE_NAME, + }); + } + + pub fn flush(&mut self, packet_buffer: &mut PacketBuffer) { + + // still uses a lot of non-sized strings + // i don't to write + + let old_len = self.previous.len(); + let new_len = self.lines.len(); + let is_size_different = new_len != old_len; + + if is_size_different && old_len != 0 { + for (index, _) in self.previous.iter().enumerate() { + if index == 0 { + continue + } + + let name = format!("{}", index); + let team = format!("team_{}", old_len - index); + + packet_buffer.write_packet(&UpdateScore { + name: hide_name(&name), + objective: OBJECTIVE_NAME, + value: VarInt(0), + action: VarInt(1), + }); + packet_buffer.write_packet(&Teams { + name: team.into(), + display_name: SizedString::EMPTY, + prefix: SizedString::EMPTY, + suffix: SizedString::EMPTY, + name_tag_visibility: "always".into(), + color: -1, + players: vec![], + action: REMOVE_TEAM, + friendly_flags: 0, + }) + } + } + + for index in 0..new_len { + + let current_line = &self.lines[index]; + let previous_line = &self.previous.get(index); + + if !is_size_different && previous_line.is_some_and(|str| str == current_line) { + continue; + } + + // index 0 is header + if index == 0 { + packet_buffer.write_packet(&ScoreboardObjective { + objective_name: OBJECTIVE_NAME, + objective_value: *current_line, + // render_type: "integer", + mode: UPDATE_NAME, + }) + } else { + let line_index = new_len - index; + let name = format!("{}", index); + let team = format!("team_{}", line_index); + + let (first_half, second_half) = split_string(current_line); + + if is_size_different { + packet_buffer.write_packet(&Teams { + name: SizedString::truncated(&team), + display_name: SizedString::truncated(&team), + prefix: SizedString::EMPTY, + suffix: SizedString::EMPTY, + name_tag_visibility: "always".into(), + color: 15, + players: vec![], + action: CREATE_TEAM, + friendly_flags: 3, + }); + packet_buffer.write_packet(&UpdateScore { + name: hide_name(&name), + objective: OBJECTIVE_NAME, + value: VarInt(line_index as i32), + action: VarInt(0), + }); + } + + packet_buffer.write_packet(&Teams { + name: SizedString::truncated(&team), + display_name: SizedString::truncated(&team), + prefix: first_half, + suffix: second_half, + name_tag_visibility: "always".into(), + color: 15, + players: vec![], + action: UPDATE_TEAM, + friendly_flags: 3, + }); + + if is_size_different { + packet_buffer.write_packet(&Teams { + name: SizedString::truncated(&team), + display_name: SizedString::truncated(&team), + prefix: SizedString::EMPTY, + suffix: SizedString::EMPTY, + name_tag_visibility: "always".into(), + color: -1, + players: vec![hide_name(&name)], + action: ADD_PLAYER, + friendly_flags: 0, + }); + } + } + } + + std::mem::swap(&mut self.lines, &mut self.previous); + self.lines.clear() + } +} + +fn hide_name(key: &str) -> SizedString<40> { + debug_assert!(key.len() < 40, "hide_name key is too long"); + let mut result = String::new(); + for char in key.chars() { + result.push('§'); + result.push(char); + result.push_str("§r") + } + result.into() +} + +fn split_string(string: &SizedString<64>) -> (SizedString<32>, SizedString<32>) { + let mut first_half = String::with_capacity(32); + let mut second_half = String::with_capacity(32); + let mut last_char = None; + let mut last_color_code = None; + for (i, c) in string.chars().enumerate() { + if i < 16 { + if last_char == Some('§') { + last_color_code = Some(c); + } + last_char = Some(c); + first_half.push(c); + } else { + if let Some(last_code) = last_color_code { + second_half.push('§'); + second_half.push(last_code); + last_color_code = None; + } + second_half.push(c); + } + } + + (first_half.into(), second_half.into()) +} + +// for team packet: +const CREATE_TEAM: i8 = 0; +const REMOVE_TEAM: i8 = 1; +const UPDATE_TEAM: i8 = 2; +const ADD_PLAYER: i8 = 3; +// const REMOVE_PLAYER: i8 = 4; + +// for scoreboard objective packet +// const ADD_OBJECTIVE: i8 = 0; +const UPDATE_NAME: i8 = 2; \ No newline at end of file diff --git a/server/src/types/aabb.rs b/server/src/types/aabb.rs new file mode 100644 index 0000000..76007ab --- /dev/null +++ b/server/src/types/aabb.rs @@ -0,0 +1,49 @@ +use glam::DVec3; + +#[derive(Debug, Clone)] +pub struct AABB { + pub min: DVec3, + pub max: DVec3, +} + +impl AABB { + + pub const ZERO: AABB = AABB { + min: DVec3::ZERO, + max: DVec3::ZERO, + }; + + pub const fn new(min: DVec3, max: DVec3) -> Self { + Self { + min, + max, + } + } + + pub const fn intersects(&self, other: &AABB) -> bool { + self.min.x <= other.max.x && self.max.x >= other.min.x && + self.min.y <= other.max.y && self.max.y >= other.min.y && + self.min.z <= other.max.z && self.max.z >= other.min.z + } + + pub const fn volume(&self) -> f64 { + let dx = (self.max.x - self.min.x).max(0.0); + let dy = (self.max.y - self.min.y).max(0.0); + let dz = (self.max.z - self.min.z).max(0.0); + dx * dy * dz + } + + pub const fn intersection_volume(&self, other: &AABB) -> f64 { + let dx = (self.max.x.min(other.max.x) - self.min.x.max(other.min.x)).max(0.0); + let dy = (self.max.y.min(other.max.y) - self.min.y.max(other.min.y)).max(0.0); + let dz = (self.max.z.min(other.max.z) - self.min.z.max(other.min.z)).max(0.0); + dx * dy * dz + } + + pub const fn from_height_width(height: f64, width: f64) -> Self { + Self { + min: DVec3 { x: -width / 2.0, y: 0.0, z: -width / 2.0 }, + max: DVec3 { x: width / 2.0, y: height, z: width / 2.0 } + } + } +} \ No newline at end of file diff --git a/server/src/types/block_position.rs b/server/src/types/block_position.rs new file mode 100644 index 0000000..6693f7b --- /dev/null +++ b/server/src/types/block_position.rs @@ -0,0 +1,57 @@ +use crate::network::packets::packet_deserialize::PacketDeserializable; +use crate::network::packets::packet_serialize::PacketSerializable; +use bytes::{Buf, BytesMut}; +use glam::{ivec3, IVec3}; +use std::ops::{Deref, DerefMut}; + +/// new-type wrapper for IVec3, +/// which implements PacketSerializable and PacketDeserializable. +/// +/// Note: You should try to always directly use IVec3 +pub struct BlockPosition(pub IVec3); + +const XZ_BITS: i32 = 26; +const Y_BITS: i32 = 12; + +const X_SHIFT: i32 = 38; +const Y_SHIFT: i32 = 26; + +const XZ_MASK: i64 = 0x3FFFFFF; +const Y_MASK: i64 = 0xFFF; + +impl PacketSerializable for BlockPosition { + fn write_size(&self) -> usize { + const { size_of::() } + } + fn write(&self, buf: &mut BytesMut) { + let long: i64 = (self.0.x as i64 & XZ_MASK) << X_SHIFT + | (self.0.y as i64 & Y_MASK) << Y_SHIFT + | (self.0.z as i64 & XZ_MASK); + long.write(buf); + } +} + +impl PacketDeserializable for BlockPosition { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + let long = buffer.get_i64(); + Ok(BlockPosition(ivec3( + (long << (64 - X_SHIFT - XZ_BITS) >> (64 - XZ_BITS)) as i32, + (long << (64 - Y_SHIFT - Y_BITS) >> (64 - Y_BITS)) as i32, + (long << (64 - XZ_BITS) >> (64 - XZ_BITS)) as i32, + ))) + } +} + +impl Deref for BlockPosition { + type Target = IVec3; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl DerefMut for BlockPosition { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.0 + } +} diff --git a/src/server/utils/chat_component/chat_component_text.rs b/server/src/types/chat_component.rs similarity index 55% rename from src/server/utils/chat_component/chat_component_text.rs rename to server/src/types/chat_component.rs index c71c935..47ec1b4 100644 --- a/src/server/utils/chat_component/chat_component_text.rs +++ b/server/src/types/chat_component.rs @@ -1,10 +1,61 @@ -use crate::net::packets::packet_serialize::PacketSerializable; -use crate::server::utils::color::MCColors; +use crate::network::packets::packet_serialize::PacketSerializable; use bytes::BytesMut; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Debug, Clone)] -pub struct ChatComponentText { +pub struct ClickEvent { + pub action: ClickAction, + pub value: String, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct HoverEvent { + pub action: HoverAction, + pub value: Box, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +#[serde(rename_all = "snake_case")] +pub enum ClickAction { + OpenUrl, + RunCommand, + SuggestCommand, + ChangePage, + CopyToClipboard, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +#[serde(rename_all = "snake_case")] +pub enum HoverAction { + ShowText, + ShowItem, + ShowEntity, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +#[serde(rename_all = "snake_case")] +pub enum MCColors { + Black, + DarkBlue, + DarkGreen, + DarkCyan, + DarkRed, + DarkPurple, + Gold, + Gray, + DarkGray, + Blue, + Green, + Aqua, + Red, + LightPurple, + Yellow, + White, + Reset, +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct ChatComponent { text: String, #[serde(skip_serializing_if = "Option::is_none")] color: Option, @@ -20,7 +71,7 @@ pub struct ChatComponentText { obfuscated: Option, #[serde(skip_serializing_if = "Option::is_none")] #[serde(rename = "extra")] - siblings: Option>, + siblings: Option>, #[serde(skip_serializing_if = "Option::is_none")] #[serde(rename = "clickEvent")] click_event: Option, @@ -29,149 +80,97 @@ pub struct ChatComponentText { hover_event: Option, } -impl ChatComponentText { - pub fn serialize(&self) -> String { - serde_json::to_string(self).unwrap() - } -} - -impl PacketSerializable for ChatComponentText { - fn write_size(&self) -> usize { - self.serialize().write_size() - } - fn write(&self, buf: &mut BytesMut) { - self.serialize().write(buf); - } -} - -/// Builder for ChatComponentText. -/// -/// # Example: -/// ``` -/// let chat = ChatComponentTextBuilder::new("RC") -/// .color(Color::Gold) -/// .bold() -/// .append(ChatComponentTextBuilder::new(" >> ").color(Color::Gray).build()) -/// .append( -/// ChatComponentTextBuilder::new("Hello World!") -/// .color(Color::White) -/// .on_hover(HoverAction::ShowText, -/// ChatComponentTextBuilder::new("Hello World!") -/// .color(Color::Blue) -/// .build() -/// ) -/// .build() -/// ) -/// .build(); -/// ``` -pub struct ChatComponentTextBuilder { - component: ChatComponentText, -} - -impl ChatComponentTextBuilder { - pub fn new(text: impl Into) -> Self { +impl ChatComponent { + + pub fn new(string: impl Into) -> Self { Self { - component: ChatComponentText { - text: text.into(), /*.replace("&", "§")*/ - color: None, - bold: None, - italic: None, - underlined: None, - strikethrough: None, - obfuscated: None, - siblings: None, - click_event: None, - hover_event: None, - } + text: string.into(), + color: None, + bold: None, + italic: None, + underlined: None, + strikethrough: None, + obfuscated: None, + siblings: None, + click_event: None, + hover_event: None, } } - + + #[inline(always)] pub const fn color(mut self, color: MCColors) -> Self { - self.component.color = Some(color); + self.color = Some(color); self } + #[inline(always)] pub const fn bold(mut self) -> Self { - self.component.bold = Some(true); + self.bold = Some(true); self } + #[inline(always)] pub const fn italic(mut self) -> Self { - self.component.italic = Some(true); + self.italic = Some(true); self } + #[inline(always)] pub const fn underlined(mut self) -> Self { - self.component.underlined = Some(true); + self.underlined = Some(true); self } - + + #[inline(always)] pub const fn strikethrough(mut self) -> Self { - self.component.strikethrough = Some(true); + self.strikethrough = Some(true); self } + #[inline(always)] pub const fn obfuscated(mut self) -> Self { - self.component.obfuscated = Some(true); + self.obfuscated = Some(true); self } + #[inline(always)] pub fn on_click(mut self, action: ClickAction, value: impl Into) -> Self { - self.component.click_event = Some(ClickEvent { + self.click_event = Some(ClickEvent { action, value: value.into(), }); self } - pub fn on_hover(mut self, action: HoverAction, value: ChatComponentText) -> Self { - self.component.hover_event = Some(HoverEvent { + #[inline(always)] + pub fn on_hover(mut self, action: HoverAction, value: ChatComponent) -> Self { + self.hover_event = Some(HoverEvent { action, value: Box::new(value), }); self } - pub fn append(mut self, component: ChatComponentText) -> Self { - if let Some(siblings) = &mut self.component.siblings { + #[inline(always)] + pub fn append(mut self, component: ChatComponent) -> Self { + if let Some(siblings) = &mut self.siblings { siblings.push(component); } else { - self.component.siblings = Some(vec![component]); + self.siblings = Some(vec![component]); } self } - - pub fn build(self) -> ChatComponentText { - self.component + + pub fn serialize(&self) -> String { + serde_json::to_string(self).unwrap() } } -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct ClickEvent { - pub action: ClickAction, - pub value: String, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -pub struct HoverEvent { - pub action: HoverAction, - pub value: Box, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -#[serde(rename_all = "snake_case")] -pub enum ClickAction { - OpenUrl, - RunCommand, - SuggestCommand, - ChangePage, - CopyToClipboard, -} - -#[derive(Serialize, Deserialize, Debug, Clone)] -#[serde(rename_all = "snake_case")] -pub enum HoverAction { - ShowText, - ShowItem, - ShowEntity, +impl PacketSerializable for ChatComponent { + fn write_size(&self) -> usize { + self.serialize().write_size() + } + fn write(&self, buf: &mut BytesMut) { + self.serialize().write(buf); + } } \ No newline at end of file diff --git a/src/server/utils/direction.rs b/server/src/types/direction.rs similarity index 96% rename from src/server/utils/direction.rs rename to server/src/types/direction.rs index 0e526c3..dfe5d70 100644 --- a/src/server/utils/direction.rs +++ b/server/src/types/direction.rs @@ -1,5 +1,5 @@ -use crate::server::block::metadata::BlockMetadata; -use crate::server::block::rotatable::Rotatable; +use crate::block::metadata::BlockMetadata; +use crate::block::rotatable::Rotatable; use blocks::BlockMetadata; #[repr(u8)] diff --git a/server/src/types/mod.rs b/server/src/types/mod.rs new file mode 100644 index 0000000..a2796a8 --- /dev/null +++ b/server/src/types/mod.rs @@ -0,0 +1,7 @@ +pub mod sized_string; +pub mod block_position; +pub mod direction; +pub mod aabb; +pub mod chat_component; +pub mod sized_string_mut; +pub mod status; \ No newline at end of file diff --git a/server/src/types/sized_string.rs b/server/src/types/sized_string.rs new file mode 100644 index 0000000..81649d4 --- /dev/null +++ b/server/src/types/sized_string.rs @@ -0,0 +1,139 @@ +use crate::network::binary::var_int::{var_int_size, write_var_int, VarInt}; +use crate::network::packets::packet_deserialize::PacketDeserializable; +use crate::network::packets::packet_serialize::PacketSerializable; +use crate::types::sized_string_mut::SizedStringMut; +use anyhow::bail; +use bytes::{Buf, BufMut, BytesMut}; +use std::fmt::{Debug, Display, Formatter}; +use std::ops::Deref; +use std::str; + +// S is size of bytes not char len + +// should have the underlying data size be S * 4, +// and then also ensure that the actual amount of characters doesnt surpass S + +#[derive(Debug, PartialEq, Copy, Clone)] +pub struct SizedString { + pub length: usize, + pub(super) data: [u8; S] +} + +impl SizedString { + + pub const EMPTY: SizedString = SizedString { + length: 0, + data: [0; S], + }; + + pub const unsafe fn slice_truncated(slice: [u8; N]) -> Self { + // need to do this for it to work const + let mut data = [0; S]; + let mut i = 0; + + while i < N && i < S { + data[i] = slice[i]; + i += 1; + } + Self { + length: i, + data, + } + } + + pub fn truncated(str: &str) -> Self { + let mut data = [0u8; S]; + let len = floor_char_boundary(str, S); + let bytes = str.as_bytes(); + + data[..len].copy_from_slice(&bytes[..len]); + Self { length: len, data } + } + + // fn to_string(&self) -> String { + // unsafe { + // String::from_utf8_unchecked(self.data[..self.length].to_vec()) + // } + // } +} + +impl Display for SizedString { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + Display::fmt(&self.deref(), f) + } +} + +impl From> for SizedString { + fn from(value: SizedStringMut) -> SizedString { + value.inner + } +} + +impl From<&str> for SizedString { + fn from(value: &str) -> Self { + SizedString::truncated(value) + } +} + +impl From for SizedString { + fn from(value: String) -> Self { + SizedString::truncated(&value) + } +} + +impl PacketSerializable for SizedString { + fn write_size(&self) -> usize { + var_int_size(self.length as i32) + self.length + } + fn write(&self, buf: &mut BytesMut) { + write_var_int(buf, self.length as i32); + buf.put_slice(&self.data[..self.length]) + } +} + +impl PacketDeserializable for SizedString { + fn read(buffer: &mut impl Buf) -> anyhow::Result { + let len = *VarInt::read(buffer)? as usize; + if buffer.remaining() < len { + bail!("not enough bytes for sized string") + } + if len > S { + bail!("String too long. {:?} > {}", len, S); + } + let mut data = [0u8; S]; + let read = buffer.copy_to_bytes(len); + let _ = str::from_utf8(&read)?; + data[..len].copy_from_slice(&read); + + Ok(SizedString { + length: len, + data, + }) + } +} + +impl Deref for SizedString { + type Target = str; + + fn deref(&self) -> &Self::Target { + // should be fine, since it shouldn't be initialized without using a str + unsafe { str::from_utf8_unchecked(&self.data[..self.length]) } + } +} + +// std has this but its flagged as unstable and i dont wanna enable nightly for the whole thing just to use this. Update to std if it becomes stable. +#[inline] +fn floor_char_boundary(str: &str, index: usize) -> usize { + if index >= str.len() { + str.len() + } else { + let lower_bound = index.saturating_sub(3); + let new_index = str.as_bytes()[lower_bound..=index] + .iter() + .rposition(|b| (*b as i8) >= -0x40); + + // SAFETY: we know that the character boundary will be within four bytes + unsafe { lower_bound + new_index.unwrap_unchecked() } + } +} + diff --git a/server/src/types/sized_string_mut.rs b/server/src/types/sized_string_mut.rs new file mode 100644 index 0000000..99b4c07 --- /dev/null +++ b/server/src/types/sized_string_mut.rs @@ -0,0 +1,56 @@ +use crate::types::sized_string::SizedString; + +// essentially a builder for sized string + +#[repr(transparent)] +pub struct SizedStringMut { + pub(super) inner: SizedString +} + +impl SizedStringMut { + + pub fn new() -> Self { + Self { + inner: SizedString::EMPTY, + } + } + + pub fn from(string: impl Into>) -> Self { + Self { + inner: string.into(), + } + } + + pub fn append_char(&mut self, char: char) -> &mut Self { + let inner = &mut self.inner; + let len = char.len_utf8(); + assert!( + inner.length + len <= S, + "tried appending a char into a full sized string, len: {}, char len: {len}", self.inner.length + ); + match len { + 1 => inner.data[inner.length] = char as u8, + _ => { + let mut arr = [0; 4]; + let encoded = char.encode_utf8(&mut arr); + let bytes = encoded.as_bytes(); + inner.data[inner.length..inner.length + bytes.len()].copy_from_slice(bytes); + } + } + inner.length += len; + self + } + + pub fn append_str(&mut self, str: &str) -> &mut Self { + let inner = &mut self.inner; + let bytes = str.as_bytes(); + assert!( + inner.length + bytes.len() <= S, + "tried appending a str into a full sized string, len: {}, char len: {}", self.inner.length, bytes.len(), + ); + inner.data[inner.length..inner.length + bytes.len()].copy_from_slice(&bytes); + inner.length += bytes.len(); + self + } + +} \ No newline at end of file diff --git a/server/src/types/status.rs b/server/src/types/status.rs new file mode 100644 index 0000000..2e8eda4 --- /dev/null +++ b/server/src/types/status.rs @@ -0,0 +1,62 @@ +use bytes::Bytes; +use crate::types::chat_component::ChatComponent; + +pub struct Status { + players: u32, + max_players: u32, + + serialized_info: String, + icon: &'static str, + + cached: Option, +} + +impl Status { + pub fn new(players: u32, max_players: u32, info: ChatComponent, icon: &'static str) -> Self { + Self { players, max_players, serialized_info: info.serialize(), icon, cached: None, } + } + + pub fn set(&mut self, update: StatusUpdate) { + match update { + StatusUpdate::Players(count) => self.players = count, + StatusUpdate::MaxPlayers(count) => self.max_players = count, + StatusUpdate::Info(component) => self.serialized_info = component.serialize(), + StatusUpdate::Icon(icon_data) => self.icon = icon_data, + } + self.cached = None; + } + + pub fn get(&mut self) -> StatusBytes { + self.cached.get_or_insert_with(|| { + StatusBytes(Bytes::from(format!(r#"{{ + "version": {{ + "name": "1.8.9", + "protocol": 47 + }}, + "players": {{ + "max": {}, + "online": {} + }}, + "description": {}, + "favicon": "data:image/png;base64,{}" + }}"#, self.max_players, self.players, self.serialized_info, self.icon))) + }).clone() + } +} + +pub enum StatusUpdate { + Players(u32), + MaxPlayers(u32), + Info(ChatComponent), + Icon(&'static str), +} + +#[derive(Debug, Clone)] +pub struct StatusBytes(Bytes); +impl StatusBytes { + #[inline(always)] + pub fn get_str(&self) -> &str { + // SAFETY: These should always be constructed from a String. + unsafe { str::from_utf8_unchecked(&self.0) } + } +} diff --git a/src/utils/bitset.rs b/server/src/utils/bitset.rs similarity index 100% rename from src/utils/bitset.rs rename to server/src/utils/bitset.rs diff --git a/src/utils/hasher/deterministic_hasher.rs b/server/src/utils/hasher/deterministic_hasher.rs similarity index 100% rename from src/utils/hasher/deterministic_hasher.rs rename to server/src/utils/hasher/deterministic_hasher.rs diff --git a/src/utils/hasher/mod.rs b/server/src/utils/hasher/mod.rs similarity index 100% rename from src/utils/hasher/mod.rs rename to server/src/utils/hasher/mod.rs diff --git a/src/utils/hasher/rapidhash.rs b/server/src/utils/hasher/rapidhash.rs similarity index 100% rename from src/utils/hasher/rapidhash.rs rename to server/src/utils/hasher/rapidhash.rs diff --git a/src/utils/hasher/wyrand.rs b/server/src/utils/hasher/wyrand.rs similarity index 100% rename from src/utils/hasher/wyrand.rs rename to server/src/utils/hasher/wyrand.rs diff --git a/server/src/utils/mod.rs b/server/src/utils/mod.rs new file mode 100644 index 0000000..791595c --- /dev/null +++ b/server/src/utils/mod.rs @@ -0,0 +1,12 @@ +use bytes::Buf; + +pub mod bitset; +pub mod hasher; + +// not sure where to put this +pub fn get_vec(buf: &mut impl Buf, take: usize) -> Vec { + let len = take.min(buf.remaining()); + let mut data = vec![0u8; len]; + buf.copy_to_slice(&mut data); + data +} \ No newline at end of file diff --git a/server/src/world/chunk/chunk.rs b/server/src/world/chunk/chunk.rs new file mode 100644 index 0000000..c5f9945 --- /dev/null +++ b/server/src/world/chunk/chunk.rs @@ -0,0 +1,193 @@ +use crate::block::blocks::Blocks; +use crate::entity::entity::EntityId; +use crate::network::packets::packet_buffer::PacketBuffer; +use crate::network::protocol::play::clientbound::ChunkData; +use crate::player::player::ClientId; +use crate::{Player, PlayerExtension}; +use glam::DVec3; +use std::collections::HashSet; + +pub struct ChunkSection { + solid_block_amount: u16, + data: Box<[u16; 4096]>, +} +pub struct Chunk { + pub chunk_sections: [Option; 16], + pub packet_buffer: PacketBuffer, + + pub players: HashSet, + pub entities: HashSet, + + // contains the chunk data packet, + // and is updated when a player tries to access it and is dirty, + // ideally we would somehow store blocks in the packet buffer, + // however it'd be annoying + cached_chunk_data: PacketBuffer, + dirty: bool, +} + +impl Chunk { + + pub fn new() -> Self { + Self { + chunk_sections: [const { None }; 16], + packet_buffer: PacketBuffer::new(), + players: HashSet::new(), + entities: HashSet::new(), + + cached_chunk_data: PacketBuffer::new(), + dirty: true, + } + } + + pub fn get_block_at(&self, local_x: i32, y: i32, local_z: i32) -> Blocks { + if let Some(section) = &self.chunk_sections[(y / 16) as usize] { + let index = ((y & 15) << 8) | (local_z << 4) | local_x; + return Blocks::from(section.data[index as usize]) + } + Blocks::Air + } + + pub fn set_block_at(&mut self, block: Blocks, local_x: i32, y: i32, local_z: i32) { + let section_index = (y / 16) as usize; + if self.chunk_sections[section_index].is_none() { + self.chunk_sections[section_index] = Some(ChunkSection { + solid_block_amount: 0, + data: Box::new([0; 4096]), + }) + } + if let Some(section) = &mut self.chunk_sections[section_index] { + let block_state_id = block.get_block_state_id(); + let index = ((y & 15) << 8) | (local_z << 4) | local_x; + + if section.data[index as usize] != 0 { + section.solid_block_amount -= 1; + } + if block != Blocks::Air { + section.solid_block_amount += 1; + } + section.data[index as usize] = block_state_id; + self.dirty = true; + } + } + + pub fn write_chunk_data(&mut self, x: i32, z: i32, new: bool, into: &mut PacketBuffer) { + // this only writes chunks if the x and z are the same, + // so for an empty chunk this doesn't work + if self.dirty { + + let mut bitmask = 0u16; + + for index in 0..16 { + if let Some(section) = &self.chunk_sections[index] && section.solid_block_amount != 0 { + bitmask |= 1 << index; + } + } + + let section_count = bitmask.count_ones() as usize; + let data_size: usize = section_count * 12288 + if new { 256 } else { 0 }; + + let mut data = vec![0u8; data_size]; + let mut offset = 0; + + for section in self.chunk_sections.iter().flatten() { + if section.solid_block_amount == 0 { + continue + } + for block in section.data.iter() { + let block = *block; + data[offset] = (block & 0xFF) as u8; + data[offset + 1] = ((block >> 8) & 0xFF) as u8; + offset += 2; + } + }; + + // currently all blocks have max skylight and regular light, + // however ive come across issues, where it seems clients recalculate light (due to it being invalid?) + // causing massive fps drops + + if section_count != 0 { + for _ in 0..4096 { + data[offset] = 255; + offset += 1; + } + } + if new { + for _ in 0..256 { + data[offset] = 1; + offset += 1; + } + } + self.cached_chunk_data.clear(); + self.cached_chunk_data.write_packet(&ChunkData { + chunk_x: x, + chunk_z: z, + is_new_chunk: new, + bitmask, + data, + }); + self.dirty = false; + } + into.copy_from(&self.cached_chunk_data); + } + + pub fn insert_player(&mut self, client_id: ClientId) { + debug_assert!(!self.players.contains(&client_id), "player already in chunk"); + self.players.insert(client_id); + } + + pub fn insert_entity(&mut self, entity_id: EntityId) { + debug_assert!(!self.entities.contains(&entity_id), "entity already in chunk"); + self.entities.insert(entity_id); + } + + pub fn remove_player(&mut self, client_id: ClientId) { + debug_assert!(self.players.contains(&client_id), "player was never in this chunk"); + self.players.remove(&client_id); + } + + pub fn remove_entity(&mut self, entity_id: EntityId) { + debug_assert!(self.entities.contains(&entity_id), "entity was never in this chunk"); + self.entities.remove(&entity_id); + } + + pub fn has_players(&self) -> bool { + !self.players.is_empty() + } + + pub fn has_entities(&self) -> bool { + !self.entities.is_empty() + } + + pub fn write_spawn_entities

( + &self, + player: &mut Player

+ ) { + let world = player.world_mut(); + for entity_id in self.entities.iter() { + if let Some(index) = world.entity_map.get(entity_id) { + let entity = &mut world.entities[*index]; + entity.enter_view(player) + } + } + } + + pub fn write_despawn_entities

( + &self, + player: &mut Player

+ ) { + let world = player.world_mut(); + for entity_id in self.entities.iter() { + if let Some(index) = world.entity_map.get(entity_id) { + let entity = &mut world.entities[*index]; + entity.leave_view(player) + } + } + } +} + +pub fn get_chunk_position(position: DVec3) -> (i32, i32) { + let x = (position.x.floor() as i32) >> 4; + let z = (position.z.floor() as i32) >> 4; + (x, z) +} \ No newline at end of file diff --git a/src/server/chunk/chunk_grid.rs b/server/src/world/chunk/chunk_grid.rs similarity index 76% rename from src/server/chunk/chunk_grid.rs rename to server/src/world/chunk/chunk_grid.rs index 067e623..12f2900 100644 --- a/src/server/chunk/chunk_grid.rs +++ b/server/src/world/chunk/chunk_grid.rs @@ -1,7 +1,7 @@ -use crate::net::protocol::play::clientbound::BlockChange; -use crate::server::block::block_position::BlockPos; -use crate::server::block::blocks::Blocks; -use crate::server::chunk::chunk::Chunk; +use crate::block::blocks::Blocks; +use crate::network::protocol::play::clientbound::{BlockChange, ChunkData}; +use crate::world::chunk::chunk::Chunk; +use glam::{ivec3, IVec3}; use std::cmp::{max, min}; /// Chunk grid @@ -15,6 +15,7 @@ pub struct ChunkGrid { index_offset_z: usize, } +#[derive(PartialEq)] pub enum ChunkDiff { New, Old, @@ -43,13 +44,9 @@ impl ChunkGrid { let chunk_z = z >> 4; if let Some(chunk) = self.get_chunk(chunk_x, chunk_z) { - let section_index = (y / 16) as usize; - if let Some(section) = chunk.get_section(section_index) { - let local_x = x & 15; - let local_y = y & 15; - let local_z = z & 15; - return section.get_block_at(local_x, local_y, local_z); - } + let local_x = x & 15; + let local_z = z & 15; + return chunk.get_block_at(local_x, y, local_z) } Blocks::Air } @@ -62,15 +59,11 @@ impl ChunkGrid { let chunk_z = z >> 4; if let Some(chunk) = self.get_chunk_mut(chunk_x, chunk_z) { - let section_index = (y / 16) as usize; - if let Some(section) = chunk.get_or_put_section(section_index) { - let local_x = x & 15; - let local_y = y & 15; - let local_z = z & 15; - section.set_block_at(block, local_x, local_y, local_z); - } + let local_x = x & 15; + let local_z = z & 15; + chunk.set_block_at(block, local_x, y, local_z); chunk.packet_buffer.write_packet(&BlockChange { - block_pos: BlockPos::new(x, y, z), + block_pos: ivec3(x, y, z), block_state: block.get_block_state_id(), }) } @@ -104,7 +97,7 @@ impl ChunkGrid { } self.chunks.get_mut(z as usize * self.size + x as usize) } - + pub fn for_each_in_view( &mut self, chunk_x: i32, @@ -118,7 +111,7 @@ impl ChunkGrid { let min_z = max(chunk_z - view_distance + self.index_offset_z as i32, 0); let max_x = min(chunk_x + view_distance + self.index_offset_x as i32, self.size as i32); let max_z = min(chunk_z + view_distance + self.index_offset_z as i32, self.size as i32); - + for x in min_x..max_x { for z in min_z..max_z { if let Some(chunk) = self.chunks.get_mut(z as usize * self.size + x as usize) { @@ -129,7 +122,7 @@ impl ChunkGrid { } pub fn for_each_diff( - &mut self, + &self, new: (i32, i32), old: (i32, i32), view_distance: i32, @@ -154,7 +147,7 @@ impl ChunkGrid { for z in min_z..=max_z { let in_old_range = x >= old_min_x && x <= old_max_x && - z >= old_min_z && z <= old_max_z; + z >= old_min_z && z <= old_max_z; if !in_old_range { callback(x - self.index_offset_x as i32, z - self.index_offset_z as i32, ChunkDiff::New); @@ -166,7 +159,7 @@ impl ChunkGrid { for z in old_min_z..=old_max_z { let in_new_range = x >= min_x && x <= max_x && - z >= min_z && z <= max_z; + z >= min_z && z <= max_z; if !in_new_range { callback(x - self.index_offset_x as i32, z - self.index_offset_z as i32, ChunkDiff::Old); @@ -174,4 +167,47 @@ impl ChunkGrid { } } } + + pub fn fill_blocks(&mut self, block: Blocks, start: IVec3, end: IVec3) { + iterate_blocks(start, end, |x, y, z| { + self.set_block_at(block, x, y, z) + }) + } + + pub fn get_unload_chunk_packet(chunk_x: i32, chunk_z: i32) -> ChunkData { + ChunkData { + chunk_x, + chunk_z, + is_new_chunk: true, + bitmask: 0, + data: vec![], + } + } +} + +/// iterates over the blocks in area between start and end +/// and runs a function +#[inline(always)] +pub fn iterate_blocks( + start: IVec3, + end: IVec3, + mut callback: F, +) where + F : FnMut(i32, i32, i32) +{ + let x0 = start.x.min(end.x); + let y0 = start.y.min(end.y); + let z0 = start.z.min(end.z); + + let x1 = start.x.max(end.x); + let y1 = start.y.max(end.y); + let z1 = start.z.max(end.z); + + for x in x0..=x1 { + for z in z0..=z1 { + for y in y0..=y1 { + callback(x, y, z); + } + } + } } \ No newline at end of file diff --git a/server/src/world/chunk/mod.rs b/server/src/world/chunk/mod.rs new file mode 100644 index 0000000..6ede76c --- /dev/null +++ b/server/src/world/chunk/mod.rs @@ -0,0 +1,4 @@ +pub mod chunk; +pub mod chunk_grid; + +pub use chunk::*; diff --git a/server/src/world/mod.rs b/server/src/world/mod.rs new file mode 100644 index 0000000..f108fbb --- /dev/null +++ b/server/src/world/mod.rs @@ -0,0 +1,2 @@ +pub mod world; +pub mod chunk; \ No newline at end of file diff --git a/server/src/world/world.rs b/server/src/world/world.rs new file mode 100644 index 0000000..076f4d4 --- /dev/null +++ b/server/src/world/world.rs @@ -0,0 +1,277 @@ +use crate::constants::Particle; +use crate::entity::entity::{Entity, EntityExtension, EntityId}; +use crate::entity::entity_appearance::EntityAppearance; +use crate::network::binary::var_int::VarInt; +use crate::network::internal_packets::{MainThreadMessage, NetworkThreadMessage}; +use crate::network::packets::packet::ProcessPacket; +use crate::network::protocol::play::clientbound::{DestroyEntites, JoinGame, Particles, PlayerData, PlayerListItem, PositionLook}; +use crate::player::player::{ClientId, GameProfile, Player, PlayerExtension}; +use crate::types::status::StatusUpdate; +use crate::world::chunk::chunk_grid::ChunkGrid; +use crate::world::chunk::get_chunk_position; +use enumset::EnumSet; +use glam::{DVec3, Vec3}; +use slotmap::SecondaryMap; +use std::collections::HashMap; +use std::ops::{Deref, DerefMut}; +use tokio::sync::mpsc::UnboundedSender; + +pub const VIEW_DISTANCE: i32 = 6; + +pub trait WorldExtension: Sized { + type Player: PlayerExtension; + + fn tick(world: &mut World); + fn on_player_join(world: &mut World, profile: GameProfile, client_id: ClientId); + fn on_player_leave(world: &mut World, player: &mut Player); +} + +pub struct World { + pub network_tx: UnboundedSender, + + pub players: Vec>, + pub player_map: SecondaryMap, + + entity_id: i32, + pub entities: Vec>, + pub entity_map: HashMap, + entities_for_removal: Vec, + + pub chunk_grid: ChunkGrid, + + pub extension: W, +} + +impl World { + + pub fn new(network_tx: UnboundedSender, extension: W) -> Self { + Self { + network_tx, + players: Vec::new(), + player_map: SecondaryMap::new(), + entity_id: 0, + entities: Vec::new(), + entity_map: HashMap::new(), + entities_for_removal: Vec::new(), + chunk_grid: ChunkGrid::new(16, 13, 13), + extension, + } + } + + pub fn new_entity_id(&mut self) -> i32 { + self.entity_id += 1; + self.entity_id + } + + pub fn spawn_player( + &mut self, + position: DVec3, + yaw: f32, + pitch: f32, + profile: GameProfile, + client_id: ClientId, + extension: W::Player, + ) -> &mut Player { + let entity_id = self.new_entity_id(); + let mut player = Player::new( + self, profile, client_id, entity_id, position, yaw, pitch, extension, + ); + + player.write_packet(&JoinGame { + entity_id: player.entity_id, + gamemode: 0, + dimension: 0, + difficulty: 0, + max_players: 0, + level_type: "", + reduced_debug_info: false, + }); + + let (chunk_x, chunk_z) = get_chunk_position(player.position); + if let Some(chunk) = self.chunk_grid.get_chunk_mut(chunk_x, chunk_z) { + chunk.insert_player(client_id) + } + + self.chunk_grid + .for_each_in_view(chunk_x, chunk_z, VIEW_DISTANCE + 1, |chunk, x, z| { + chunk.write_chunk_data(x, z, true, &mut player.packet_buffer); + }); + + player.write_packet(&PositionLook { + x: player.position.x, + y: player.position.y, + z: player.position.z, + yaw: player.yaw, + pitch: player.pitch, + flags: EnumSet::new(), + }); + + player.write_packet(&PlayerListItem { + action: VarInt(0), + players: &[PlayerData { + ping: 0, + game_mode: 0, + profile: &player.profile.clone(), + display_name: None, + }], + }); + + self.chunk_grid + .for_each_in_view(chunk_x, chunk_z, VIEW_DISTANCE, |chunk, _, _| { + chunk.write_spawn_entities(&mut player); + }); + + player.flush_packets(); + + let index = self.players.len(); + self.players.push(player); + self.player_map.insert(client_id, index); + &mut self.players[index] + } + + pub fn spawn_entity + 'static, E: EntityExtension + 'static>( + &mut self, + position: DVec3, + yaw: f32, + pitch: f32, + appearance: A, + extension: E, + ) -> &mut Entity { + let entity_id = self.new_entity_id(); + let mut entity = Entity::new(self, entity_id, position, yaw, pitch, appearance, extension); + + let (chunk_x, chunk_z) = get_chunk_position(position); + + if let Some(chunk) = self.chunk_grid.get_chunk_mut(chunk_x, chunk_z) { + chunk.insert_entity(entity_id); + + self.chunk_grid + .for_each_in_view(chunk_x, chunk_z, VIEW_DISTANCE, |chunk, _, _| { + if chunk.has_players() { + for player in self.players.iter_mut().filter(|p| chunk.players.contains(&p.client_id)) { + entity.enter_view(player) + } + } + }); + } + + let index = self.entities.len(); + self.entities.push(entity); + self.entity_map.insert(entity_id, index); + &mut self.entities[index] + } + + pub fn spawn_particle(&mut self, particle: Particle, position: Vec3, offset: Vec3, count: i32) { + let chunk_x = (position.x.floor() as i32) >> 4; + let chunk_z = (position.z.floor() as i32) >> 4; + + if let Some(chunk) = self.chunk_grid.get_chunk_mut(chunk_x, chunk_z) { + chunk.packet_buffer.write_packet(&Particles { + particle, + long_distance: false, + position, + offset, + speed: 0.0, + count, + }) + } + } + + pub fn remove_player(&mut self, client_id: ClientId) { + // order isn't preserved doing this. + // however with old implementation, it did use std hashmap to iterate, + // and order wasn't preserved there so it should be fine. + if let Some(index) = self.player_map.remove(client_id) { + let last_index = self.players.len() - 1; + + let mut player = self.players.swap_remove(index); + W::on_player_leave(self, &mut player); + + if last_index != index { + let moved_id = self.players[index].client_id; + self.player_map.insert(moved_id, index); + } + + let (chunk_x, chunk_z) = get_chunk_position(player.position); + + if let Some(chunk) = self.chunk_grid.get_chunk_mut(chunk_x, chunk_z) { + chunk.remove_player(client_id) + } + } + } + + pub fn remove_entity(&mut self, entity_id: EntityId) { + self.entities_for_removal.push(entity_id); + } + + pub fn tick(&mut self) { + // tick extension + W::tick(self); + + let mut packet_destroy_entities = DestroyEntites { entities: vec![] }; + for entity_id in self.entities_for_removal.drain(..) { + if let Some(index) = self.entity_map.remove(&entity_id) { + let last_index = self.entities.len() - 1; + let mut entity = self.entities.swap_remove(index); + + + entity.destroy(&mut packet_destroy_entities); + + if last_index != index { + let moved_id = self.entities[index].base.id; + self.entity_map.insert(moved_id, index); + } + } + } + + for entity in self.entities.iter_mut() { + entity.tick() + } + + for player in self.players.iter_mut() { + player.write_packet(&packet_destroy_entities); + player.tick(); + } + + for chunk in self.chunk_grid.chunks.iter_mut() { + chunk.packet_buffer.clear() + } + } + + pub fn process_event(&mut self, event: MainThreadMessage) { + match event { + MainThreadMessage::NewPlayer { client_id, profile } => { + W::on_player_join(self, profile, client_id); + let _ = self.network_tx.send(NetworkThreadMessage::UpdateStatus( + StatusUpdate::Players(self.players.len() as u32), + )); + } + MainThreadMessage::PacketReceived { client_id, packet } => { + if let Some(index) = self.player_map.get(client_id) { + let player = &mut self.players[*index]; + packet.process(player) + } + } + MainThreadMessage::ClientDisconnected { client_id } => { + self.remove_player(client_id); + let _ = self.network_tx.send(NetworkThreadMessage::UpdateStatus( + StatusUpdate::Players(self.players.len() as u32), + )); + } + } + } +} + +impl Deref for World { + type Target = W; + + fn deref(&self) -> &Self::Target { + &self.extension + } +} + +impl DerefMut for World { + fn deref_mut(&mut self) -> &mut W { + &mut self.extension + } +} diff --git a/src/assets/assets.rs b/src/assets/assets.rs new file mode 100644 index 0000000..eb426df --- /dev/null +++ b/src/assets/assets.rs @@ -0,0 +1,87 @@ +use crate::assets::load_asset::{DoorDataAssets, DungeonStorageAssets, FaviconAssets, LoadAsset, RoomDataAssets}; +use crate::dungeon::door::door::DoorType; +use crate::dungeon::room::room_data::RoomData; +use anyhow::anyhow; +use server::block::blocks::Blocks; +use server::utils::hasher::deterministic_hasher::DeterministicHashMap; +use std::collections::HashMap; +use std::{io::{Cursor, Read}, path::{Path, PathBuf}, sync::OnceLock}; +use tokio::fs; +use zip::ZipArchive; + +static ASSETS: OnceLock = OnceLock::new(); + +pub struct Assets { + pub dungeon_seeds: Vec<&'static str>, + pub door_data: HashMap>>, + pub room_data: DeterministicHashMap, + pub icon_data: &'static str, +} + +impl Assets { + pub async fn try_load(asset_path: &Path) -> anyhow::Result { + Ok(Self { + dungeon_seeds: DungeonStorageAssets::load_asset(asset_path).await?, + door_data: DoorDataAssets::load_asset(asset_path).await?, + room_data: RoomDataAssets::load_asset(asset_path).await?, + icon_data: FaviconAssets::load_asset(asset_path).await?, + }) + } +} + +pub async fn load_assets(asset_path: &str, repo: &str) -> anyhow::Result<()> { + println!("Loading assets!"); + let asset_path = Path::new(asset_path); + + let assets = match Assets::try_load(asset_path).await { + Ok(assets) => assets, + Err(_) => { + download_assets(asset_path, repo).await?; + Assets::try_load(asset_path).await? + } + }; + + ASSETS.set(assets).map_err(|_| anyhow!("Failed to set assets!"))?; + + println!("Finished loading assets!"); + Ok(()) +} + +pub fn get_assets() -> &'static Assets { + ASSETS.get().expect("load_assets should've been called first!") +} + +async fn download_assets(base: &Path, url: &str) -> anyhow::Result<()> { + println!("downloading assets..."); + fs::create_dir_all(base).await?; + + let resp = reqwest::get(url).await?; + let bytes = resp.bytes().await?.to_vec(); + + let reader = Cursor::new(bytes); + let mut zip = ZipArchive::new(reader)?; + + for i in 0..zip.len() { + let mut file = zip.by_index(i)?; + let path = file.mangled_name(); + + let components = path.components().collect::>(); + if let Some(pos) = components.iter().position(|c| c.as_os_str() == "assets") { + let rel_path: PathBuf = components[pos + 1..].iter().collect(); + let out = base.join(rel_path); + + if file.is_dir() { + fs::create_dir_all(&out).await?; + } else if !out.exists() { + if let Some(parent) = out.parent() { + fs::create_dir_all(parent).await?; + } + let mut contents = Vec::new(); + Read::read_to_end(&mut file, &mut contents)?; + fs::write(&out, contents).await?; + } + } + } + + Ok(()) +} \ No newline at end of file diff --git a/src/assets/favicon.png b/src/assets/favicon.png deleted file mode 100644 index 4ba4be4..0000000 Binary files a/src/assets/favicon.png and /dev/null differ diff --git a/src/assets/load_asset.rs b/src/assets/load_asset.rs new file mode 100644 index 0000000..26305e2 --- /dev/null +++ b/src/assets/load_asset.rs @@ -0,0 +1,116 @@ +use crate::dungeon::door::door::DoorType; +use crate::dungeon::room::room_data::RoomData; +use anyhow::Context; +use base64::{engine::general_purpose, Engine}; +use server::block::blocks::Blocks; +use server::utils::hasher::deterministic_hasher::DeterministicHashMap; +use std::collections::HashMap; +use std::path::Path; +use tokio::fs; + +pub(super) trait LoadAsset { + const SUBPATH: &'static str; + type Output; + + async fn load_asset(path: &Path) -> anyhow::Result; +} + +pub(super) struct RoomDataAssets; +pub(super) struct DoorDataAssets; +pub(super) struct FaviconAssets; +pub(super) struct DungeonStorageAssets; + +impl LoadAsset for RoomDataAssets { + const SUBPATH: &'static str = "room_data"; + type Output = DeterministicHashMap; + + async fn load_asset(path: &Path) -> anyhow::Result { + let path = path.join(Self::SUBPATH); + let mut map: DeterministicHashMap = DeterministicHashMap::default(); + let mut entries = fs::read_dir(path).await?; + while let Some(file) = entries.next_entry().await? { + let name = file.file_name(); + let file = fs::read(file.path()).await?; + let contents = std::str::from_utf8(&file)?; + let room_data = RoomData::from_raw_json(contents); + + let name_parts: Vec<&str> = name + .to_str() + .context("Failed to convert file name to str")? + .split(",") + .collect(); + let room_id = name_parts.first().unwrap().parse::().unwrap(); + + map.insert(room_id, room_data); + } + Ok(map) + } +} + +impl LoadAsset for DoorDataAssets { + const SUBPATH: &'static str = "door_data/doors.txt"; + type Output = HashMap>>; + + async fn load_asset(path: &Path) -> anyhow::Result { + let path = path.join(Self::SUBPATH); + let storage = String::from_utf8(fs::read(path).await?)?; + + // Might be a good idea to make a new format for storing doors so that indexes etc don't need to be hard coded. + // But this works for now... + let door_data: Vec> = storage + .split("\n") + .map(|line| { + let mut blocks: Vec = Vec::new(); + + for i in (0..line.len() - 1).step_by(4) { + let substr = line.get(i..i + 4).unwrap(); + let state = u16::from_str_radix(substr, 16).unwrap(); + blocks.push(Blocks::from(state)); + } + + blocks + }) + .collect(); + + Ok(HashMap::from_iter( + vec![ + (DoorType::Blood, vec![door_data[0].clone()]), + (DoorType::Entrance, vec![door_data[1].clone()]), + ( + DoorType::Normal, + vec![ + door_data[1].clone(), + door_data[2].clone(), + door_data[3].clone(), + door_data[4].clone(), + door_data[5].clone(), + door_data[6].clone(), + door_data[7].clone(), + ], + ), + ] + .into_iter(), + )) + } +} + +impl LoadAsset for DungeonStorageAssets { + const SUBPATH: &'static str = "dungeon_storage/dungeons.txt"; + type Output = Vec<&'static str>; + + async fn load_asset(path: &Path) -> anyhow::Result { + let path = path.join(Self::SUBPATH); + let storage = Box::leak(String::from_utf8(fs::read(path).await?)?.into_boxed_str()); + Ok(storage.split("\n").collect()) + } +} + +impl LoadAsset for FaviconAssets { + const SUBPATH: &'static str = "favicon.png"; + type Output = &'static str; + + async fn load_asset(path: &Path) -> anyhow::Result { + let bytes = fs::read(path.join(Self::SUBPATH)).await?; + Ok(Box::leak(general_purpose::STANDARD.encode(&bytes).into_boxed_str())) + } +} diff --git a/src/assets/mod.rs b/src/assets/mod.rs new file mode 100644 index 0000000..1b86ed6 --- /dev/null +++ b/src/assets/mod.rs @@ -0,0 +1,5 @@ +mod assets; +mod load_asset; + +pub use assets::get_assets as get_assets; +pub use assets::load_assets as load_assets; \ No newline at end of file diff --git a/src/door_data/doors.txt b/src/door_data/doors.txt deleted file mode 100644 index 65a37c3..0000000 --- a/src/door_data/doors.txt +++ /dev/null @@ -1,8 +0,0 @@ -072600000000000007260700000000000000070007000000000000000700070000000000000007000727000000000000072709010000000000000901023e000000000000023e023e000000000000023e023e000000000000023e0901000000000000090107260000000000000726023e000000000000023e023e000000000000023e023e000000000000023e07270000000000000727023e072500000724023e070000000000000007000700000000000000070007000000000000000700023e072500000724023e023e023e02c6023e023e023e023e023e023e023e023e023e023e023e023e023e023e023e023e023e023e023e02c6023e023e -06d600000000000006d606200000000000000620062000000000000006200620000000000000062006d700000000000006d708b000000000000008b000400000000000000040004000000000000000400040000000000000004008b000000000000008b006d200000000000006d206200000000000000620062000000000000006200620000000000000062006d300000000000006d3062006500650065006200620000000000000062006200000000000000620062000000000000006200620065006500650062006d406d502cd06d406d500400040004000400040004000400040004000400040004000400040004006d406d502cd06d406d5 -08b000000000000008b006200000000000000620062000000000000006200620000000000000062008b000000000000008b0065000000000000006500620000000000000062006200000000000000620062000000000000006200650000000000000065008b000000000000008b006200000000000000620062000000000000006200620000000000000062008b000000000000008b006d206d102c506d006d206200000000000000620062000000000000006200620000000000000062006d306d102c506d006d30620062006200620062006200620062006200620062006200620062006200620062006200620062006200620062006200620 -06d600000000000006d606200000000000000620062000000000000006200620000000000000062006d700000000000006d7090100000000000009010a2c0000000000000a2c0a2c0000000000000a2c0a2c0000000000000a2c0901000000000000090106d200000000000006d20a2c0000000000000a2c0a2c0000000000000a2c0a2c0000000000000a2c06d300000000000006d3062006d5000006d40620062000000000000006200620000000000000062006200000000000000620062006d5000006d40620062006d102c506d00620062006200620062006200620062006200620062006200620062006200620062006d102c506d00620 -04320000000000000432004000000000000000400040000000000000004000400000000000000040043300000000000004330a2c0000000000000a2c0a2c0000000000000a2c0a2c0000000000000a2c0a2c0000000000000a2c0a2c0000000000000a2c0a2c0000000000000a2c0a2c0000000000000a2c0a2c0000000000000a2c0a2c0000000000000a2c0a2c0000000000000a2c04360435000004340436004000000000000000400040000000000000004000400000000000000040043704350000043404370040004000400040004000400040004000400040004000400040004000400040004000400040004000400040004000400040 -06d200000000000006d206200000000000000620062000000000000006200620000000000000062006d300000000000006d30016000000000000001606200000000000000620062000000000000006200620000000000000062000160000000000000016001600000000000000160620000000000000062006200000000000000620062000000000000006200016000000000000001606d600000000000006d606200000000000000620062000000000000006200620000000000000062006d700000000000006d70016001600160016001600160620062006200016001606200620062000160016062006200620001600160016001600160016 -0862000000000000086200510000000000000051005100000000000000510051000000000000005108630000000000000863011c000000000000011c005100000000000000510051000000000000005100510000000000000051011c000000000000011c011c000000000000011c005100000000000000510051000000000000005100510000000000000051011c000000000000011c086607e9000007e90866005100000000000000510051000000000000005100510000000000000051086707e9000007e908670862086100510860086200510051005100510051005100510051005100510051005100510051005108630861005108600863 -086600000000000008660051000000000000005100510000000000000051005100000000000000510867000000000000086709010000000000000901005100000000000000510051000000000000005100510000000000000051090100000000000009010866000000000000086600510000000000000051005100000000000000510051000000000000005108670000000000000867005107e9000007e90051005100000000000000510051000000000000005100510000000000000051005107e9000007e900510862086100510860086200510051005100510051005100510051005100510051005100510051005108630861005108600863 \ No newline at end of file diff --git a/src/dungeon/crushers.rs b/src/dungeon/crushers.rs deleted file mode 100644 index 362986e..0000000 --- a/src/dungeon/crushers.rs +++ /dev/null @@ -1,163 +0,0 @@ -use crate::server::block::block_position::BlockPos; -use crate::server::block::blocks::Blocks; -use crate::server::player::player::Player; -use crate::server::utils::direction::Direction; -use crate::server::world::World; -use serde_json::Value; - -#[derive(Debug)] -pub struct Crusher { - pub block_pos: BlockPos, - pub direction: Direction, - pub width: i32, - pub height: i32, - pub max_length: u16, - tick_per_block: u16, - pause_duration: u16, - - current_length: u16, - tick: u16, - - is_paused: bool, - is_reversed: bool, -} - -impl Crusher { - - pub fn new( - block_pos: BlockPos, - direction: Direction, - width: i32, - height: i32, - max_length: u16, - tick_per_block: u16, - pause_duration: u16, - ) -> Crusher { - Crusher { - block_pos, - direction, - width, - height, - max_length, - tick_per_block, - pause_duration, - current_length: 0, - tick: 0, - is_paused: false, - is_reversed: false, - } - } - - pub fn from_json(json_entry: &Value) -> Crusher { - - let pos_vec = json_entry["position"].as_array().unwrap().iter().map(|x| { - x.as_i64().unwrap() as i32 - }).collect::>(); - - let direction = json_entry["direction"].as_number().unwrap().as_i64().unwrap() as usize; - let width = json_entry["width"].as_number().unwrap().as_i64().unwrap() as i32; - let height = json_entry["height"].as_number().unwrap().as_i64().unwrap() as i32; - let max_length = json_entry["max_length"].as_number().unwrap().as_i64().unwrap() as u16; - let tick_per_block = json_entry["tick_per_block"].as_number().unwrap().as_i64().unwrap() as u16; - let pause_duration = json_entry["pause_duration"].as_number().unwrap().as_i64().unwrap() as u16; - - let direction = Direction::from_index(direction); - let block_pos = BlockPos { - x: pos_vec[0], - y: pos_vec[1], - z: pos_vec[2] - }; - - Crusher::new(block_pos, direction, width, height, max_length, tick_per_block, pause_duration) - } - - pub fn tick(&mut self, player: &Player/*world: &mut World, network_tx: UnboundedSender*/) { - let server = player.server_mut(); - self.tick += 1; - server.world.set_block_at(Blocks::RedstoneBlock, self.block_pos.x, self.block_pos.y - 1, self.block_pos.z); - - let world = &mut server.world; - - if self.is_paused { - if self.tick == self.pause_duration { - self.is_reversed = !self.is_reversed; - self.is_paused = false; - self.tick = 0; - } - } else { - if self.tick % self.tick_per_block == 0 { - let (dx, _, dz) = self.direction.get_offset(); - - if !self.is_reversed { - let x = self.block_pos.x + (self.current_length as i32 * dx); - let y = self.block_pos.y; - let z = self.block_pos.z + (self.current_length as i32 * dz); - self.set_blocks(world, Blocks::Stone { variant: 2 }, x, y, z, dx, dz); - - for (id, player) in &server.world.players { - // let entity = player.get_entity_mut(world).unwrap(); - - if self.is_in_way(player, x, y, z) { - // PositionLook { - // x: player.position.x + dx as f64, - // y: player.position.y, - // z: player.position.z + dz as f64, - // yaw: player.yaw, - // pitch: player.pitch, - // flags: 0, - // }.send_packet(*id, &server.network_tx).unwrap(); - } - } - } else { - let x = self.block_pos.x + ((self.max_length - self.current_length) as i32 * dx); - let y = self.block_pos.y; - let z = self.block_pos.z + ((self.max_length - self.current_length) as i32 * dz); - self.set_blocks(world, Blocks::Air, x, y, z, dx, dz) - } - self.current_length += 1; - } - if self.is_reversed && self.current_length == self.max_length || !self.is_reversed && self.current_length > self.max_length { - if self.pause_duration != 0 { - self.is_paused = true - } else { - self.is_reversed = !self.is_reversed - } - self.tick = 0; - self.current_length = 0; - } - } - } - - fn set_blocks(&self, world: &mut World, block: Blocks, x: i32, y: i32, z: i32, dx: i32, dz: i32) { - for w in 0..self.width { - for h in 0..self.height { - world.set_block_at( - block, - x + (w * dz), - y + h, - z + (w * dx) - ); - } - } - } - - fn is_in_way(&self, entity: &Player, x: i32, y: i32, z: i32) -> bool { - let (x_offset, z_offset) = match self.direction { - Direction::North => (1, 0), - Direction::East => (0, 0), - Direction::South => (0, 0), - Direction::West => (0, 1), - _ => unreachable!(), - }; - let (width, length) = match self.direction { - Direction::North => (-self.width, 1), - Direction::East => (1, self.width), - Direction::South => (self.width, 1), - Direction::West => (1, -self.width), - _ => unreachable!(), - }; - // TODO: FINISH - false - // entity.is_in_box_i32(x + x_offset, y, z + z_offset, width, self.height, length) - } -} \ No newline at end of file diff --git a/src/dungeon/door.rs b/src/dungeon/door.rs deleted file mode 100644 index 04d5e86..0000000 --- a/src/dungeon/door.rs +++ /dev/null @@ -1,220 +0,0 @@ -use crate::net::packets::packet_buffer::PacketBuffer; -use crate::net::protocol::play::clientbound::{DestroyEntites, EntityAttach, SpawnObject}; -use crate::net::var_int::VarInt; -use crate::server::block::block_parameter::Axis; -use crate::server::block::block_position::BlockPos; -use crate::server::block::blocks::Blocks; -use crate::server::entity::entity::{Entity, EntityImpl}; -use crate::server::entity::entity_metadata::{EntityMetadata, EntityVariant}; -use crate::server::utils::dvec3::DVec3; -use crate::server::world; -use crate::server::world::World; -use crate::utils::seeded_rng::seeded_rng; -use rand::prelude::IndexedRandom; -use std::collections::HashMap; - -#[derive(Debug, PartialEq, Eq, Hash)] -pub enum DoorType { - NORMAL, - ENTRANCE, - WITHER, - BLOOD, -} - -impl DoorType { - const fn get_block(&self) -> Blocks { - match self { - DoorType::NORMAL => Blocks::Air, - DoorType::ENTRANCE => Blocks::SilverfishBlock { variant: 5 }, - DoorType::WITHER => Blocks::CoalBlock, - DoorType::BLOOD => Blocks::StainedHardenedClay { color: 14 } - } - } -} - -#[derive(Debug, PartialEq)] -pub struct Door { - pub x: i32, - pub z: i32, - - pub direction: Axis, - pub door_type: DoorType, -} - -impl Door { - - pub fn load_into_world( - &self, - world: &mut World, - // maybe somehow make this constant? idk - door_blocks: &HashMap>>, - ) { - // Area to fill with air - let (dx, dz) = match self.direction { - Axis::X => (3, 2), - _ => (2, 3), - }; - - // Doors have a thick bedrock floor usually - world.fill_blocks( - Blocks::Bedrock, - BlockPos { x: self.x - dx, y: 67, z: self.z - dz }, - BlockPos { x: self.x + dx, y: 66, z: self.z + dz }, - ); - - // Might need to replace with a random palette of cobble, stone, gravel etc if we want to mimic hypixel FULLY, but this works fine. - world.fill_blocks( - Blocks::Stone { variant: 0 }, - BlockPos { x: self.x - (dz - 2) * 2, y: 68, z: self.z - (dx - 2) * 2 }, - BlockPos { x: self.x + (dz - 2) * 2, y: 68, z: self.z + (dx - 2) * 2 }, - ); - - world.fill_blocks( - Blocks::Air, - BlockPos { x: self.x - dx, y: 69, z: self.z - dz }, - BlockPos { x: self.x + dx, y: 73, z: self.z + dz }, - ); - - // Pretty much just to get a normal self from a wither one, - // since wither doors are just normal doors with coal blocks. - let door_type = match self.door_type { - DoorType::BLOOD => DoorType::BLOOD, - DoorType::ENTRANCE => DoorType::ENTRANCE, - DoorType::WITHER | DoorType::NORMAL => DoorType::NORMAL, - }; - - let block_data = door_blocks.get(&door_type).unwrap(); - let chosen = block_data.choose(&mut seeded_rng()).unwrap(); - let self_direction = self.direction.get_direction(); - - for (i, block) in chosen.iter().enumerate() { - let x = (i % 5) as i32; - let z = ((i / 5) % 5) as i32; - let y = (i / (5 * 5)) as i32; - - let bp = BlockPos { x: x - 2, y, z: z - 2 }.rotate(self_direction); - - let mut block_to_place = block.clone(); - block_to_place.rotate(self_direction); - world.set_block_at(block_to_place, self.x + bp.x, 69 + bp.y, self.z + bp.z); - } - - world.fill_blocks( - self.door_type.get_block(), - BlockPos { x: self.x - 1, y: 69, z: self.z - 1 }, - BlockPos { x: self.x + 1, y: 72, z: self.z + 1 }, - ); - } - - - pub fn open_door(&self, world: &mut World) { - if cfg!(debug_assertions) { - assert_ne!(self.door_type, DoorType::NORMAL); - } - - let start = BlockPos { x: self.x - 1, y: 69, z: self.z - 1 }; - let end = BlockPos { x: self.x + 1, y: 72, z: self.z + 1 }; - - let mut entities = Vec::new(); - world::iterate_blocks(start, end, |x,y, z| { - world.set_block_at(Blocks::Barrier, x, y, z); - world.interactable_blocks.remove(&BlockPos { x, y, z }); - - let id = world.spawn_entity( - DVec3::new(x as f64 + 0.5, y as f64 - DOOR_ENTITY_OFFSET, z as f64 + 0.5), - EntityMetadata { - variant: EntityVariant::Bat { hanging: false }, - is_invisible: true - }, - DoorEntityImpl::new(self.door_type.get_block(), 5.0, 20), - ).unwrap(); - entities.push(id); - }); - - world.server_mut().schedule(20, move |server| { - world::iterate_blocks(start, end, |x,y, z| { - server.world.set_block_at(Blocks::Air, x, y, z); - }); - }); - - // world.server_mut().dungeon.test.push(OpenDoorTask { - // ticks_left: 20, - // door_index: self.id, - // }); - } -} - -// this maybe could be used in places other than doors, ie when you flick lever - -/// this entity implementation is used for doors in dungeons to animate them. -/// -/// it spawns a falling block entity that rides the entity. -/// every tick it lowers the y position, you must remove the entity to make it stop -#[derive(Debug)] -pub struct DoorEntityImpl { - pub block: Blocks, - distance_per_tick: f64, - ticks_left: u32, -} - -impl DoorEntityImpl { - pub fn new(block: Blocks, distance: f64, ticks: u32) -> Self { - Self { - block, - distance_per_tick: distance / ticks as f64, - ticks_left: ticks, - } - } -} - -/// offset so that the falling block riding the bat -pub const DOOR_ENTITY_OFFSET: f64 = 0.65; - -impl EntityImpl for DoorEntityImpl { - - fn spawn(&mut self, entity: &mut Entity, buffer: &mut PacketBuffer) { - let world = entity.world_mut(); - let entity_id = world.new_entity_id(); - - let object_data = { - let block_state_id = self.block.get_block_state_id() as i32; - let block_id = block_state_id >> 4; - let metadata = block_state_id & 0b1111; - block_id | (metadata << 12) - }; - - buffer.write_packet(&SpawnObject { - entity_id: VarInt(entity_id), - entity_variant: 70, - x: entity.position.x, - y: entity.position.y + DOOR_ENTITY_OFFSET, - z: entity.position.z, - yaw: 0.0, - pitch: 0.0, - data: object_data, - velocity_x: 0.0, - velocity_y: 0.0, - velocity_z: 0.0, - }); - - buffer.write_packet(&EntityAttach { - entity_id, - vehicle_id: entity.id, - leash: false, - }); - } - - fn despawn(&mut self, entity: &mut Entity, buffer: &mut PacketBuffer) { - buffer.write_packet(&DestroyEntites { - entities: vec![VarInt(entity.id + 1)], - }); - } - - fn tick(&mut self, entity: &mut Entity, _: &mut PacketBuffer) { - entity.position.y -= self.distance_per_tick; - self.ticks_left -= 1; - if self.ticks_left == 0 { - entity.world_mut().despawn_entity(entity.id); - } - } -} \ No newline at end of file diff --git a/src/dungeon/door/door.rs b/src/dungeon/door/door.rs new file mode 100644 index 0000000..baeaadb --- /dev/null +++ b/src/dungeon/door/door.rs @@ -0,0 +1,172 @@ +use crate::dungeon::door::door_entity::{DoorEntityAppearance, DoorEntityExtension}; +use crate::dungeon::dungeon::Dungeon; +use crate::dungeon::seeded_rng::seeded_rng; +use glam::{ivec3, DVec3, IVec3}; +use rand::prelude::IndexedRandom; +use server::block::block_parameter::Axis; +use server::block::blocks::Blocks; +use server::block::rotatable::Rotatable; +use server::world::chunk::chunk_grid::ChunkGrid; +use server::World; +use std::collections::HashMap; + +#[derive(Hash, Eq, PartialEq)] +pub enum DoorType { + Normal, + Entrance, + Wither, + Blood, +} + +pub struct Door { + pub x: i32, + pub z: i32, + pub axis: Axis, + door_type: DoorType, + + inner_start: IVec3, + inner_end: IVec3, + + pub is_open: bool, +} + +impl Door { + + pub fn new(x: i32, z: i32, axis: Axis, door_type: DoorType) -> Self { + Self { + x, + z, + axis, + is_open: door_type == DoorType::Normal, + door_type, + inner_start: ivec3(x - 1, 69, z - 1), + inner_end: ivec3(x + 1, 72, z + 1), + } + } + + pub const fn get_type(&self) -> &DoorType { + &self.door_type + } + + const fn get_block(&self) -> Blocks { + match self.door_type { + DoorType::Normal => Blocks::Air, + DoorType::Entrance => Blocks::SilverfishBlock { variant: 5 }, + DoorType::Wither => Blocks::CoalBlock, + DoorType::Blood => Blocks::StainedHardenedClay { color: 14 } + } + } + + pub fn load_into_world( + &self, + chunk_grid: &mut ChunkGrid, + door_blocks: &HashMap>> + ) { + // Area to fill with air + let (dx, dz) = match self.axis { + Axis::X => (3, 2), + _ => (2, 3), + }; + + // Doors have a thick bedrock floor usually + chunk_grid.fill_blocks( + Blocks::Bedrock, + ivec3(self.x - dx, 67, self.z - dz), + ivec3(self.x + dx, 66, self.z + dz), + ); + + // Might need to replace with a random palette of cobble, stone, gravel etc if we want to mimic hypixel FULLY, but this works fine. + chunk_grid.fill_blocks( + Blocks::Stone { variant: 0 }, + ivec3(self.x - (dz - 2) * 2, 68, self.z - (dx - 2) * 2), + ivec3(self.x + (dz - 2) * 2, 68, self.z + (dx - 2) * 2), + ); + + chunk_grid.fill_blocks( + Blocks::Air, + ivec3(self.x - dx, 69, self.z - dz), + ivec3(self.x + dx, 73, self.z + dz), + ); + + // Pretty much just to get a normal self from a wither one, + // since wither doors are just normal doors with coal blocks. + let door_type = match self.door_type { + DoorType::Blood => DoorType::Blood, + DoorType::Entrance => DoorType::Entrance, + DoorType::Wither | DoorType::Normal => DoorType::Normal, + }; + + let block_data = door_blocks.get(&door_type).unwrap(); + let chosen = block_data.choose(&mut seeded_rng()).unwrap(); + let self_direction = self.axis.get_direction(); + + for (index, block) in chosen.iter().enumerate() { + let x = (index % 5) as i32; + let y = (index / (5 * 5)) as i32; + let z = ((index / 5) % 5) as i32; + + let bp = ivec3(x - 2, y, z - 2).rotate(self_direction); + + let mut block_to_place = *block; + block_to_place.rotate(self_direction); + chunk_grid.set_block_at(block_to_place, self.x + bp.x, 69 + bp.y, self.z + bp.z); + } + + chunk_grid.fill_blocks( + self.get_block(), + ivec3(self.x - 1, 69, self.z - 1), + ivec3(self.x + 1, 72, self.z + 1), + ); + } + + pub fn can_open(&self, world: &World) -> bool { + if self.is_open { + return false + } + match self.door_type { + DoorType::Wither => world.wither_key_count != 0, + DoorType::Blood => world.blood_key_count != 0, + _ => true + } + } + + pub fn open(&mut self, world: &mut World) { + assert!(!self.is_open, "door is already open"); + + match self.door_type { + DoorType::Wither => { + assert_ne!(world.wither_key_count, 0, "opened a wither door with 0 keys"); + world.wither_key_count -= 1; + } + DoorType::Blood => { + assert_ne!(world.blood_key_count, 0, "opened blood door with 0 keys"); + world.blood_key_count -= 1; + } + _ => {} + } + + self.is_open = true; + + world.chunk_grid.fill_blocks( + Blocks::Barrier, + ivec3(self.x - 1, 69, self.z - 1), + ivec3(self.x + 1, 72, self.z + 1), + ); + // door entity gets rid of blocks when it disappears + world.spawn_entity( + DVec3::new(self.x as f64 - 1.0, 69.0, self.z as f64 - 1.0), + 0.0, + 0.0, + DoorEntityAppearance { block: self.get_block() }, + DoorEntityExtension {} + ); + } + + // inner bit of door, blocks abilities + pub fn contains(&self, block_pos: &IVec3) -> bool { + let (x ,y , z) = (block_pos.x, block_pos.y, block_pos.z); + (x >= self.inner_start.x && x <= self.inner_end.x) && + (y >= self.inner_start.y && y <= self.inner_end.y) && + (z >= self.inner_start.z && z <= self.inner_end.z) + } +} \ No newline at end of file diff --git a/src/dungeon/door/door_entity.rs b/src/dungeon/door/door_entity.rs new file mode 100644 index 0000000..ca02b24 --- /dev/null +++ b/src/dungeon/door/door_entity.rs @@ -0,0 +1,133 @@ +use crate::dungeon::dungeon::Dungeon; +use crate::dungeon::dungeon_player::DungeonPlayer; +use glam::ivec3; +use server::block::blocks::Blocks; +use server::constants::{EntityVariant, ObjectVariant}; +use server::entity::entity::{EntityBase, EntityExtension}; +use server::entity::entity_appearance::EntityAppearance; +use server::entity::entity_metadata::EntityMetadata; +use server::network::binary::var_int::VarInt; +use server::network::packets::packet_buffer::PacketBuffer; +use server::network::protocol::play::clientbound::{DestroyEntites, EntityAttach, EntityRelativeMove, SpawnMob, SpawnObject}; +use server::Player; + +pub(super) struct DoorEntityAppearance { + pub block: Blocks, +} + +impl EntityAppearance for DoorEntityAppearance { + + fn initialize(&self, entity: &mut EntityBase) { + // reserve 72 entity ids + let world = entity.world_mut(); + for _ in 0..72 { + world.new_entity_id(); + } + } + + fn destroy(&self, entity: &mut EntityBase, packet: &mut DestroyEntites) { + packet.entities.extend((entity.id..entity.id + 72).map(VarInt)) + } + fn enter_player_view(&self, entity: &mut EntityBase, player: &mut Player) { + // println!("player {}, entity pos {:?}", player.profile.username, entity.position); + let mut iter = 0; + for x in 0..3 { + for y in 0..4 { + for z in 0..3 { + let x = entity.position.x + (x as f64) + 0.5; + let y = entity.position.y + (y as f64); + let z = entity.position.z + (z as f64) + 0.5; + + player.write_packet(&SpawnMob { + entity_id: entity.id + iter, + entity_variant: EntityVariant::Bat, + x, + y: y - 0.65, + z, + yaw: 0.0, + pitch: 0.0, + head_yaw: 0.0, + velocity_x: 0.0, + velocity_y: 0.0, + velocity_z: 0.0, + metadata: EntityMetadata::Bat(Default::default()), + }); + + let object_data = { + let block_state_id = self.block.get_block_state_id() as i32; + let block_id = block_state_id >> 4; + let metadata = block_state_id & 0b1111; + block_id | (metadata << 12) + }; + + player.write_packet(&SpawnObject { + entity_id: entity.id + iter + 1, + variant: ObjectVariant::FallingBlock, + x, + y, + z, + pitch: 0.0, + yaw: 0.0, + data: object_data, + velocity_x: 0.0, + velocity_y: 0.0, + velocity_z: 0.0, + }); + + player.write_packet(&EntityAttach { + entity_id: entity.id + iter + 1, + vehicle_id: entity.id + iter, + leash: false, + }); + + iter += 2; + } + } + } + } + + fn leave_player_view(&self, entity: &mut EntityBase, player: &mut Player) { + player.write_packet(&DestroyEntites { + entities: (entity.id..entity.id + 72).map(VarInt).collect(), + }) + } + + fn update_position(&self, entity: &mut EntityBase, packet_buffer: &mut PacketBuffer) { + // only y can be updated + let difference = entity.position.y - entity.last_position.y; + + for entity_id in (entity.id..entity.id + 72).step_by(2) { + packet_buffer.write_packet(&EntityRelativeMove { + entity_id, + pos_x: 0.0, + pos_y: difference, + pos_z: 0.0, + on_ground: false, + }); + } + } + + fn update_rotation(&self, _: &mut EntityBase, _: &mut PacketBuffer) {} +} + +pub(super) struct DoorEntityExtension; + +impl EntityExtension for DoorEntityExtension { + + fn tick(&mut self, entity: &mut EntityBase, _: &mut PacketBuffer) { + entity.position.y -= 0.25; + + if entity.ticks_existed == 20 { + let world = entity.world_mut(); + let x = entity.position.x as i32; + let z = entity.position.z as i32; + + world.chunk_grid.fill_blocks( + Blocks::Air, + ivec3(x, 69, z), + ivec3(x + 2, 72, z + 2), + ); + world.remove_entity(entity.id); + } + } +} \ No newline at end of file diff --git a/src/dungeon/door/door_positions.rs b/src/dungeon/door/door_positions.rs new file mode 100644 index 0000000..3c33730 --- /dev/null +++ b/src/dungeon/door/door_positions.rs @@ -0,0 +1,75 @@ +use crate::dungeon::dungeon::DUNGEON_ORIGIN; +use glam::IVec2; + +pub const DOOR_POSITIONS: [IVec2; 60] = [ + IVec2::new(DUNGEON_ORIGIN.x + 31, DUNGEON_ORIGIN.y + 15), + IVec2::new(DUNGEON_ORIGIN.x + 63, DUNGEON_ORIGIN.y + 15), + IVec2::new(DUNGEON_ORIGIN.x + 95, DUNGEON_ORIGIN.y + 15), + IVec2::new(DUNGEON_ORIGIN.x + 127, DUNGEON_ORIGIN.y + 15), + IVec2::new(DUNGEON_ORIGIN.x + 159, DUNGEON_ORIGIN.y + 15), + + IVec2::new(DUNGEON_ORIGIN.x + 15, DUNGEON_ORIGIN.y + 31), + IVec2::new(DUNGEON_ORIGIN.x + 47, DUNGEON_ORIGIN.y + 31), + IVec2::new(DUNGEON_ORIGIN.x + 79, DUNGEON_ORIGIN.y + 31), + IVec2::new(DUNGEON_ORIGIN.x + 111, DUNGEON_ORIGIN.y + 31), + IVec2::new(DUNGEON_ORIGIN.x + 143, DUNGEON_ORIGIN.y + 31), + IVec2::new(DUNGEON_ORIGIN.x + 175, DUNGEON_ORIGIN.y + 31), + + IVec2::new(DUNGEON_ORIGIN.x + 31, DUNGEON_ORIGIN.y + 47), + IVec2::new(DUNGEON_ORIGIN.x + 63, DUNGEON_ORIGIN.y + 47), + IVec2::new(DUNGEON_ORIGIN.x + 95, DUNGEON_ORIGIN.y + 47), + IVec2::new(DUNGEON_ORIGIN.x + 127, DUNGEON_ORIGIN.y + 47), + IVec2::new(DUNGEON_ORIGIN.x + 159, DUNGEON_ORIGIN.y + 47), + + IVec2::new(DUNGEON_ORIGIN.x + 15, DUNGEON_ORIGIN.y + 63), + IVec2::new(DUNGEON_ORIGIN.x + 47, DUNGEON_ORIGIN.y + 63), + IVec2::new(DUNGEON_ORIGIN.x + 79, DUNGEON_ORIGIN.y + 63), + IVec2::new(DUNGEON_ORIGIN.x + 111, DUNGEON_ORIGIN.y + 63), + IVec2::new(DUNGEON_ORIGIN.x + 143, DUNGEON_ORIGIN.y + 63), + IVec2::new(DUNGEON_ORIGIN.x + 175, DUNGEON_ORIGIN.y + 63), + + IVec2::new(DUNGEON_ORIGIN.x + 31, DUNGEON_ORIGIN.y + 79), + IVec2::new(DUNGEON_ORIGIN.x + 63, DUNGEON_ORIGIN.y + 79), + IVec2::new(DUNGEON_ORIGIN.x + 95, DUNGEON_ORIGIN.y + 79), + IVec2::new(DUNGEON_ORIGIN.x + 127, DUNGEON_ORIGIN.y + 79), + IVec2::new(DUNGEON_ORIGIN.x + 159, DUNGEON_ORIGIN.y + 79), + + IVec2::new(DUNGEON_ORIGIN.x + 15, DUNGEON_ORIGIN.y + 95), + IVec2::new(DUNGEON_ORIGIN.x + 47, DUNGEON_ORIGIN.y + 95), + IVec2::new(DUNGEON_ORIGIN.x + 79, DUNGEON_ORIGIN.y + 95), + IVec2::new(DUNGEON_ORIGIN.x + 111, DUNGEON_ORIGIN.y + 95), + IVec2::new(DUNGEON_ORIGIN.x + 143, DUNGEON_ORIGIN.y + 95), + IVec2::new(DUNGEON_ORIGIN.x + 175, DUNGEON_ORIGIN.y + 95), + + IVec2::new(DUNGEON_ORIGIN.x + 31, DUNGEON_ORIGIN.y + 111), + IVec2::new(DUNGEON_ORIGIN.x + 63, DUNGEON_ORIGIN.y + 111), + IVec2::new(DUNGEON_ORIGIN.x + 95, DUNGEON_ORIGIN.y + 111), + IVec2::new(DUNGEON_ORIGIN.x + 127, DUNGEON_ORIGIN.y + 111), + IVec2::new(DUNGEON_ORIGIN.x + 159, DUNGEON_ORIGIN.y + 111), + + IVec2::new(DUNGEON_ORIGIN.x + 15, DUNGEON_ORIGIN.y + 127), + IVec2::new(DUNGEON_ORIGIN.x + 47, DUNGEON_ORIGIN.y + 127), + IVec2::new(DUNGEON_ORIGIN.x + 79, DUNGEON_ORIGIN.y + 127), + IVec2::new(DUNGEON_ORIGIN.x + 111, DUNGEON_ORIGIN.y + 127), + IVec2::new(DUNGEON_ORIGIN.x + 143, DUNGEON_ORIGIN.y + 127), + IVec2::new(DUNGEON_ORIGIN.x + 175, DUNGEON_ORIGIN.y + 127), + + IVec2::new(DUNGEON_ORIGIN.x + 31, DUNGEON_ORIGIN.y + 143), + IVec2::new(DUNGEON_ORIGIN.x + 63, DUNGEON_ORIGIN.y + 143), + IVec2::new(DUNGEON_ORIGIN.x + 95, DUNGEON_ORIGIN.y + 143), + IVec2::new(DUNGEON_ORIGIN.x + 127, DUNGEON_ORIGIN.y + 143), + IVec2::new(DUNGEON_ORIGIN.x + 159, DUNGEON_ORIGIN.y + 143), + + IVec2::new(DUNGEON_ORIGIN.x + 15, DUNGEON_ORIGIN.y + 159), + IVec2::new(DUNGEON_ORIGIN.x + 47, DUNGEON_ORIGIN.y + 159), + IVec2::new(DUNGEON_ORIGIN.x + 79, DUNGEON_ORIGIN.y + 159), + IVec2::new(DUNGEON_ORIGIN.x + 111, DUNGEON_ORIGIN.y + 159), + IVec2::new(DUNGEON_ORIGIN.x + 143, DUNGEON_ORIGIN.y + 159), + IVec2::new(DUNGEON_ORIGIN.x + 175, DUNGEON_ORIGIN.y + 159), + + IVec2::new(DUNGEON_ORIGIN.x + 31, DUNGEON_ORIGIN.y + 175), + IVec2::new(DUNGEON_ORIGIN.x + 63, DUNGEON_ORIGIN.y + 175), + IVec2::new(DUNGEON_ORIGIN.x + 95, DUNGEON_ORIGIN.y + 175), + IVec2::new(DUNGEON_ORIGIN.x + 127, DUNGEON_ORIGIN.y + 175), + IVec2::new(DUNGEON_ORIGIN.x + 159, DUNGEON_ORIGIN.y + 175), +]; \ No newline at end of file diff --git a/src/dungeon/door/mod.rs b/src/dungeon/door/mod.rs new file mode 100644 index 0000000..ddfe4ba --- /dev/null +++ b/src/dungeon/door/mod.rs @@ -0,0 +1,3 @@ +pub mod door; +pub(super) mod door_positions; +mod door_entity; \ No newline at end of file diff --git a/src/dungeon/dungeon.rs b/src/dungeon/dungeon.rs index feda8f4..4e1b8c2 100644 --- a/src/dungeon/dungeon.rs +++ b/src/dungeon/dungeon.rs @@ -1,190 +1,349 @@ -use crate::dungeon::door::{Door, DoorType}; -use crate::dungeon::dungeon_state::DungeonState; +use crate::dungeon::door::door::{Door, DoorType}; +use crate::dungeon::door::door_positions::DOOR_POSITIONS; +use crate::dungeon::dungeon_player::DungeonPlayer; +use crate::dungeon::items::dungeon_items::DungeonItem; use crate::dungeon::map::DungeonMap; use crate::dungeon::room::room::{Room, RoomNeighbour, RoomSegment}; use crate::dungeon::room::room_data::{get_random_data_with_type, RoomData, RoomShape, RoomType}; -use crate::net::protocol::play::clientbound::Maps; -use crate::server::block::block_interact_action::BlockInteractAction; -use crate::server::block::block_parameter::Axis; -use crate::server::block::block_position::BlockPos; -use crate::server::player::player::Player; -use crate::server::server::Server; -use crate::server::world; -use crate::utils::hasher::deterministic_hasher::DeterministicHashMap; use anyhow::bail; +use glam::{ivec3, DVec3, IVec2}; +use server::block::block_parameter::Axis; +use server::block::rotatable::Rotatable; +use server::inventory::menu::OpenContainer; +use server::network::binary::var_int::VarInt; +use server::network::protocol::play::clientbound::{Chat, EntityProperties, PlayerAbilities}; +use server::player::attribute::{Attribute, AttributeMap, AttributeModifier}; +use server::player::sidebar::Sidebar; +use server::types::aabb::AABB; +use server::types::chat_component::ChatComponent; +use server::utils::hasher::deterministic_hasher::DeterministicHashMap; +use server::{ClientId, GameProfile, Player, World, WorldExtension}; +use std::cell::{Cell, RefCell}; +use std::collections::HashMap; +use std::rc::Rc; +use uuid::Uuid; + +pub const DUNGEON_ORIGIN: IVec2 = IVec2::new(-200, -200); + +pub enum DungeonState { + NotStarted, + Starting { starts_in_ticks: usize }, + Started { ticks: usize } +} -// The top leftmost corner of the dungeon -pub const DUNGEON_ORIGIN: (i32, i32) = (-200, -200); - -// The positions of the doors in the world -pub const DOOR_POSITIONS: [(i32, i32); 60] = [(DUNGEON_ORIGIN.0 + 31, DUNGEON_ORIGIN.1 + 15), (DUNGEON_ORIGIN.0 + 63, DUNGEON_ORIGIN.1 + 15), (DUNGEON_ORIGIN.0 + 95, DUNGEON_ORIGIN.1 + 15), (DUNGEON_ORIGIN.0 + 127, DUNGEON_ORIGIN.1 + 15), (DUNGEON_ORIGIN.0 + 159, DUNGEON_ORIGIN.1 + 15), (DUNGEON_ORIGIN.0 + 15, DUNGEON_ORIGIN.1 + 31), (DUNGEON_ORIGIN.0 + 47, DUNGEON_ORIGIN.1 + 31), (DUNGEON_ORIGIN.0 + 79, DUNGEON_ORIGIN.1 + 31), (DUNGEON_ORIGIN.0 + 111, DUNGEON_ORIGIN.1 + 31), (DUNGEON_ORIGIN.0 + 143, DUNGEON_ORIGIN.1 + 31), (DUNGEON_ORIGIN.0 + 175, DUNGEON_ORIGIN.1 + 31), (DUNGEON_ORIGIN.0 + 31, DUNGEON_ORIGIN.1 + 47), (DUNGEON_ORIGIN.0 + 63, DUNGEON_ORIGIN.1 + 47), (DUNGEON_ORIGIN.0 + 95, DUNGEON_ORIGIN.1 + 47), (DUNGEON_ORIGIN.0 + 127, DUNGEON_ORIGIN.1 + 47), (DUNGEON_ORIGIN.0 + 159, DUNGEON_ORIGIN.1 + 47), (DUNGEON_ORIGIN.0 + 15, DUNGEON_ORIGIN.1 + 63), (DUNGEON_ORIGIN.0 + 47, DUNGEON_ORIGIN.1 + 63), (DUNGEON_ORIGIN.0 + 79, DUNGEON_ORIGIN.1 + 63), (DUNGEON_ORIGIN.0 + 111, DUNGEON_ORIGIN.1 + 63), (DUNGEON_ORIGIN.0 + 143, DUNGEON_ORIGIN.1 + 63), (DUNGEON_ORIGIN.0 + 175, DUNGEON_ORIGIN.1 + 63), (DUNGEON_ORIGIN.0 + 31, DUNGEON_ORIGIN.1 + 79), (DUNGEON_ORIGIN.0 + 63, DUNGEON_ORIGIN.1 + 79), (DUNGEON_ORIGIN.0 + 95, DUNGEON_ORIGIN.1 + 79), (DUNGEON_ORIGIN.0 + 127, DUNGEON_ORIGIN.1 + 79), (DUNGEON_ORIGIN.0 + 159, DUNGEON_ORIGIN.1 + 79), (DUNGEON_ORIGIN.0 + 15, DUNGEON_ORIGIN.1 + 95), (DUNGEON_ORIGIN.0 + 47, DUNGEON_ORIGIN.1 + 95), (DUNGEON_ORIGIN.0 + 79, DUNGEON_ORIGIN.1 + 95), (DUNGEON_ORIGIN.0 + 111, DUNGEON_ORIGIN.1 + 95), (DUNGEON_ORIGIN.0 + 143, DUNGEON_ORIGIN.1 + 95), (DUNGEON_ORIGIN.0 + 175, DUNGEON_ORIGIN.1 + 95), (DUNGEON_ORIGIN.0 + 31, DUNGEON_ORIGIN.1 + 111), (DUNGEON_ORIGIN.0 + 63, DUNGEON_ORIGIN.1 + 111), (DUNGEON_ORIGIN.0 + 95, DUNGEON_ORIGIN.1 + 111), (DUNGEON_ORIGIN.0 + 127, DUNGEON_ORIGIN.1 + 111), (DUNGEON_ORIGIN.0 + 159, DUNGEON_ORIGIN.1 + 111), (DUNGEON_ORIGIN.0 + 15, DUNGEON_ORIGIN.1 + 127), (DUNGEON_ORIGIN.0 + 47, DUNGEON_ORIGIN.1 + 127), (DUNGEON_ORIGIN.0 + 79, DUNGEON_ORIGIN.1 + 127), (DUNGEON_ORIGIN.0 + 111, DUNGEON_ORIGIN.1 + 127), (DUNGEON_ORIGIN.0 + 143, DUNGEON_ORIGIN.1 + 127), (DUNGEON_ORIGIN.0 + 175, DUNGEON_ORIGIN.1 + 127), (DUNGEON_ORIGIN.0 + 31, DUNGEON_ORIGIN.1 + 143), (DUNGEON_ORIGIN.0 + 63, DUNGEON_ORIGIN.1 + 143), (DUNGEON_ORIGIN.0 + 95, DUNGEON_ORIGIN.1 + 143), (DUNGEON_ORIGIN.0 + 127, DUNGEON_ORIGIN.1 + 143), (DUNGEON_ORIGIN.0 + 159, DUNGEON_ORIGIN.1 + 143), (DUNGEON_ORIGIN.0 + 15, DUNGEON_ORIGIN.1 + 159), (DUNGEON_ORIGIN.0 + 47, DUNGEON_ORIGIN.1 + 159), (DUNGEON_ORIGIN.0 + 79, DUNGEON_ORIGIN.1 + 159), (DUNGEON_ORIGIN.0 + 111, DUNGEON_ORIGIN.1 + 159), (DUNGEON_ORIGIN.0 + 143, DUNGEON_ORIGIN.1 + 159), (DUNGEON_ORIGIN.0 + 175, DUNGEON_ORIGIN.1 + 159), (DUNGEON_ORIGIN.0 + 31, DUNGEON_ORIGIN.1 + 175), (DUNGEON_ORIGIN.0 + 63, DUNGEON_ORIGIN.1 + 175), (DUNGEON_ORIGIN.0 + 95, DUNGEON_ORIGIN.1 + 175), (DUNGEON_ORIGIN.0 + 127, DUNGEON_ORIGIN.1 + 175), (DUNGEON_ORIGIN.0 + 159, DUNGEON_ORIGIN.1 + 175)]; - -// contains a vec of rooms, -// also contains a grid, containing indices pointing towards the rooms, -// -// contains a vec of doors (for generation) pub struct Dungeon { - pub server: *mut Server, - pub doors: Vec, - pub rooms: Vec, - entrance_room: usize, + pub rooms: Vec>>, + pub doors: Vec>>, + room_index_grid: [Option; 36], + entrance_room_index: usize, - pub room_grid: [Option; 36], pub state: DungeonState, pub map: DungeonMap, + + // there can be only 1 blood key in hypixel, + // but what if we ever want to do some fun stuff with more than 1 + pub blood_key_count: usize, + pub wither_key_count: usize, } -impl Dungeon { +impl WorldExtension for Dungeon { - pub fn from_layout(doors: Vec, mut rooms: Vec) -> anyhow::Result { - let mut room_grid: [Option; 36] = [const { None }; 36]; - let mut grid_max_x = 0; - let mut grid_max_y = 0; + type Player = DungeonPlayer; - for (index, room) in rooms.iter().enumerate() { - for segment in room.segments.iter() { - let x = segment.x; - let z = segment.z; - let segment_index = x + z * 6; - - if segment_index > room_grid.len() - 1 { - bail!("Segment index for {},{} out of bounds: {}", x, z, segment_index); - } - if room_grid[segment_index].is_some() { - bail!("Segment at {},{} is already occupied by {:?}!", x, z, room_grid[segment_index]); - } - room_grid[segment_index] = Some(index); - - if x > grid_max_x { - grid_max_x = x; - } - if z > grid_max_y { - grid_max_y = z; + fn tick(world: &mut World) { + let dungeon = &mut world.extension; + + match &mut dungeon.state { + DungeonState::Starting { starts_in_ticks: tick } => { + *tick -= 1; + if *tick == 0 { + dungeon.state = DungeonState::Started { ticks: 0 }; + Dungeon::start_dungeon(world); + } else if *tick % 20 == 0 { + + let seconds_remaining = *tick / 20; + let s = if seconds_remaining == 1 { "" } else { "s" }; + let str = format!("§aStarting in {} second{}.", seconds_remaining, s); + + for player in world.players.iter_mut() { + player.write_packet(&Chat { + component: ChatComponent::new(str.clone()), + chat_type: 0, + }); + } } } - } - - // i hate this - for room in rooms.iter_mut() { - let segments = &mut room.segments; - - let segment_positions = segments.iter() - .map(|segment| (segment.x, segment.z)) - .collect::>(); - - for segment in room.segments.iter_mut() { - let x = segment.x as isize; - let z = segment.z as isize; - let center_x = segment.x as i32 * 32 + 15 + DUNGEON_ORIGIN.0; - let center_z = segment.z as i32 * 32 + 15 + DUNGEON_ORIGIN.1; - - let neighbour_options = [ - (x, z - 1, center_x, center_z - 16), - (x + 1, z, center_x + 16, center_z), - (x, z + 1, center_x, center_z + 16), - (x - 1, z, center_x - 16, center_z), - ]; - - for (index, (nx, nz, door_x, door_z)) in neighbour_options.into_iter().enumerate() { - if nx < 0 || nz < 0 || segment_positions.iter().find(|(x, z)| *x as isize == nx && *z as isize == nz).is_some() { + DungeonState::Started { ticks } => { + *ticks += 1; + + for player in world.players.iter_mut() { + let Some((new_room, new_segment)) = world.extension.get_room(&player.position, player.collision_aabb()) else { + if let Some((old_room, _)) = &player.extension.current_room { + // was in a room, now in no room + old_room.borrow_mut().remove_player_ref(player.client_id); + player.extension.current_room = None + } continue; + }; + if let Some((old_room, old_segment)) = &mut player.extension.current_room { + if !Rc::ptr_eq(old_room, new_room) { + // was in a different room, moved to new room + old_room.borrow_mut().remove_player_ref(player.client_id); + new_room.borrow_mut().add_player_ref(player.client_id, new_segment); + player.extension.current_room = Some((new_room.clone(), new_segment)); + } else if *old_segment != new_segment { + // same room, different segment + new_room.borrow_mut().update_player_segment(player.client_id, new_segment); + *old_segment = new_segment; + } + } else { + // no previous room + new_room.borrow_mut().add_player_ref(player.client_id, new_segment); + player.extension.current_room = Some((new_room.clone(), new_segment)); } + } + + // iterate over rooms and sections , + // if room has any players, tick it + // and for sections if it has a player, try to spawn its neighbours + + // tick puzzles, etc + + for room_rc in world.extension.rooms.iter_mut() { + let mut room = room_rc.borrow_mut(); - let door = doors.iter().enumerate().find(|(_, door)| { - door.x == door_x && door.z == door_z - }); - - if let Some((door_index, _)) = door { - segment.neighbours[index] = Some(RoomNeighbour { - door_index, - room_index: room_grid[(nx + nz * 6) as usize].expect("Neighbor should be Some") - }); + if !room.players.is_empty() && !room.discovered { + room.discovered = true; + world.extension.map.draw_room(&room); + } + } + + if let Some(packet) = world.extension.map.get_packet() { + for player in world.players.iter_mut() { + player.write_packet(&packet) } } } + _ => {} } + } + + fn on_player_join(world: &mut World, profile: GameProfile, client_id: ClientId) { + let entrance = world.extension.entrance_room().clone(); + let entrance = entrance.borrow(); - // idk if we should error if no entrance room - // also could do basically all of this function is one loop but im too lazy + let mut position = entrance.get_world_block_position(ivec3(15, 72, 18)).as_dvec3(); + position.x += 0.5; + position.z += 0.5; - let mut entrance_room_index: Option = None; - for (index, room) in rooms.iter().enumerate() { - if room.room_data.room_type == RoomType::Entrance { - entrance_room_index = Some(index); - break + let player = world.spawn_player( + position, + 180.0.rotate(entrance.rotation), + 0.0, + profile, + client_id, + DungeonPlayer { + is_ready: false, + sidebar: Sidebar::new(), + current_room: None, + cooldowns: HashMap::new(), + active_abilities: Cell::new(Vec::new()), + + #[cfg(feature = "dungeon-breaker")] + pickaxe_charges: 20, + #[cfg(feature = "dungeon-breaker")] + broken_blocks: vec![], + } + ); + + let speed: f32 = 500.0 * 0.001; + + let mut attributes = AttributeMap::new(); + attributes.insert(Attribute::MovementSpeed, speed as f64); + attributes.add_modify(Attribute::MovementSpeed, AttributeModifier { + id: Uuid::parse_str("662a6b8d-da3e-4c1c-8813-96ea6097278d").unwrap(), + amount: 0.3, // this is always 0.3 for hypixels speed stuff + operation: 2, + }); + + player.write_packet(&EntityProperties { + entity_id: VarInt(player.entity_id), + properties: attributes, // this gets sent every time you sprint for some reason + }); + player.write_packet(&PlayerAbilities { + invulnerable: false, + flying: false, + allow_flying: false, + creative_mode: false, + fly_speed: 0.0, + walk_speed: speed, + }); + + player.extension.sidebar.write_init_packets(&mut player.packet_buffer); + + player.inventory.set_slot(37, Some(DungeonItem::Hyperion)); + player.inventory.set_slot(39, Some(DungeonItem::Pickaxe)); + player.inventory.set_slot(42, Some(DungeonItem::TacticalInsertion)); + player.inventory.set_slot(43, Some(DungeonItem::AspectOfTheVoid)); + player.inventory.set_slot(44, Some(DungeonItem::SkyblockMenu)); + player.sync_inventory(); + player.flush_packets() + } + + fn on_player_leave(world: &mut World, player: &mut Player) { + #[cfg(feature = "dungeon-breaker")] + { + for (position, block, _) in player.broken_blocks.iter() { + world.chunk_grid.set_block_at(*block, position.x, position.y, position.z) } } - if entrance_room_index.is_none() { - bail!("No entrance room found.") + } +} + +impl Dungeon { + + pub fn has_started(&self) -> bool { + matches!(self.state, DungeonState::Started { .. }) + } + + pub fn start_dungeon(world: &mut World) { + for player in world.players.iter_mut() { + if let OpenContainer::Menu(_) = player.get_container() { + player.open_container(OpenContainer::None) + } + player.inventory.set_slot(44, Some(DungeonItem::MagicalMap)); + player.sync_inventory(); + } + + { + let entrance_room = world.entrance_room(); + entrance_room.borrow_mut().discovered = true; + world.map.draw_room(&entrance_room.borrow()); + } + + for neighbour in world.entrance_room().borrow().neighbours() { + neighbour.door.borrow_mut().open(world); + neighbour.room.borrow_mut().discovered = true; + world.map.draw_room(&neighbour.room.borrow()); } - - let map_offset_x = (128 - (grid_max_x + 1) * 20) / 2; - let map_offset_y = (128 - (grid_max_y + 1) * 20) / 2; - - Ok(Dungeon { - server: std::ptr::null_mut(), - doors, - rooms, - entrance_room: entrance_room_index.unwrap(), - room_grid, - state: DungeonState::NotReady, - map: DungeonMap::new(map_offset_x, map_offset_y), - }) } - pub fn from_str(layout_str: &str, room_data_storage: &DeterministicHashMap) -> anyhow::Result { - let mut rooms: Vec = Vec::new(); - let mut doors: Vec = Vec::new(); + pub fn update_ready_status(world: &mut World, player: &mut Player) { + assert!(!matches!(world.state, DungeonState::Started { .. }), "tried to ready up when dungeon has already started"); - let mut room_id_map: DeterministicHashMap> = DeterministicHashMap::default(); + let is_ready = player.extension.is_ready; + let message = format!("§7{} {}!", player.profile.username, if is_ready { "§ais now ready" } else { "§cis no longer ready" }); + + let packet = Chat { + component: ChatComponent::new(message), + chat_type: 0, + }; + + for player in world.players.iter_mut() { + player.write_packet(&packet) + } + + if is_ready { + let mut should_start = true; + + for player in world.players.iter() { + if !player.extension.is_ready { + should_start = false + } + } + if should_start { + world.state = DungeonState::Starting { starts_in_ticks: 100 } + } + } else { + world.state = DungeonState::NotStarted + } + } - for (index, (x, z)) in DOOR_POSITIONS.into_iter().enumerate() { - let type_str = layout_str.get(index + 72..index+73).unwrap(); + pub fn from_string( + layout_str: &str, + room_data_storage: &DeterministicHashMap, + ) -> anyhow::Result { + + let mut rooms: Vec>> = Vec::new(); + let mut doors: Vec>> = Vec::new(); - let door_type = match type_str { - "0" => Some(DoorType::NORMAL), - "1" => Some(DoorType::WITHER), - "2" => Some(DoorType::BLOOD), - "3" => Some(DoorType::ENTRANCE), + for (index, position) in DOOR_POSITIONS.into_iter().enumerate() { + let Some(type_string) = layout_str.get(index + 72..index+73) else { + bail!("Failed to parse door type."); + }; + let door_type = match type_string { + "0" => Some(DoorType::Normal), + "1" => Some(DoorType::Wither), + "2" => Some(DoorType::Blood), + "3" => Some(DoorType::Entrance), _ => None, }; - if let Some(door_type) = door_type { - let direction = match ((x - DUNGEON_ORIGIN.0) / 16) % 2 { - 0 => Axis::Z, - 1 => Axis::X, - _ => unreachable!(), - }; - - let door = Door { - x, - z, - direction, - door_type + let axis = match ((position.x - DUNGEON_ORIGIN.x) / 16) % 2 == 0 { + true => Axis::Z, + false => Axis::X, }; - - doors.push(door); + doors.push(Rc::new(RefCell::new(Door::new(position.x, position.y, axis, door_type)))); } } - for i in 0..36 { - let substr = layout_str.get(i*2..i*2+2); - let x = i % 6; - let z = i / 6; + // used in room neighbours as a temporary value, + // if the reference count of this != 1 after finishing initializing it will fail + let placeholder_neighbour = Rc::new(RefCell::new(Room::new(vec![RoomSegment { + x: 0, + z: 0, + neighbours: [const { None }; 4], + player_ref_count: 0, + }], RoomData::dummy()))); - // Shouldn't happen if data is not corrupted - if substr.is_none() { - panic!("Failed to parse dungeon string: too small.") - } + let mut room_id_map: DeterministicHashMap> = DeterministicHashMap::default(); + + for index in 0..36 { + let x = index % 6; + let z = index / 6; - let id = substr.unwrap().parse::()?; + let Some(id) = layout_str.get(index * 2..index * 2 + 2) else { + bail!("Failed to parse dungeon string: too small.") + }; + let Ok(id) = id.parse::() else { + bail!("Failed to parse dungeon string: invalid number.") + }; - // No room here + // no room here if id == 0 { continue; } - // Special rooms + let mut segment = RoomSegment { + x, + z, + neighbours: [const { None }; 4], + player_ref_count: 0, + }; + + // find neighbouring doors + let center_x = x as i32 * 32 + 15 + DUNGEON_ORIGIN.x; + let center_z = z as i32 * 32 + 15 + DUNGEON_ORIGIN.y; + + let door_options = [ + (center_x, center_z - 16), + (center_x + 16, center_z), + (center_x, center_z + 16), + (center_x - 16, center_z) + ]; + for (index, (door_x, door_z)) in door_options.into_iter().enumerate() { + let door = doors.iter().enumerate().find(|(_, door)| { + let door = door.borrow(); + door.x == door_x && door.z == door_z + }); + if let Some((_, door)) = door { + segment.neighbours[index] = Some(RoomNeighbour { + room: placeholder_neighbour.clone(), + door: door.clone(), + }); + } + } + if id <= 6 { let room_type = match id { 1 => RoomType::Entrance, @@ -208,167 +367,128 @@ impl Dungeon { room_data_storage, &rooms ); - room_data.room_type = room_type; - - rooms.push(Room::new( - vec![RoomSegment { x, z, neighbours: [const { None }; 4] }], - &doors, - room_data - )); - - continue + rooms.push(Rc::new(RefCell::new(Room::new(vec![segment], room_data)))); + continue; } - - // Normal rooms, add segments to this specific room id - let entry = room_id_map.entry(id).or_default(); - entry.push(RoomSegment { x, z, neighbours: [const { None }; 4] }); + + let entry = room_id_map.entry(id).or_default(); + entry.push(segment) } - - // Make the normal rooms + rooms.reserve(room_id_map.len()); - for (_, segments) in room_id_map { - let shape = RoomShape::from_segments(&segments, &doors); - - rooms.push(Room::new( - segments, - &doors, - get_random_data_with_type( - RoomType::Normal, - shape, - room_data_storage, - &rooms - ) - )); - } - - Self::from_layout(doors, rooms) - } - - pub fn server_mut<'a>(&self) -> &'a mut Server { - unsafe { self.server.as_mut().expect("server is null") } - } - - pub fn entrance_room(&self) -> &Room { - &self.rooms[self.entrance_room] - } - - pub fn get_room_at(&mut self, x: i32, z: i32) -> Option { - if x < DUNGEON_ORIGIN.0 || z < DUNGEON_ORIGIN.1 { - return None; + + for segments in room_id_map.into_values() { + let shape = RoomShape::from_segments(&segments); + let data = get_random_data_with_type(RoomType::Normal, shape, room_data_storage, &rooms); + rooms.push(Rc::new(RefCell::new(Room::new(segments, data)))) } - let grid_x = ((x - DUNGEON_ORIGIN.0) / 32) as usize; - let grid_z = ((z - DUNGEON_ORIGIN.1) / 32) as usize; + // populate room index grid + let mut room_grid: [Option; 36] = [const { None }; 36]; + let mut grid_max_x = 0; + let mut grid_max_y = 0; + let mut entrance_room_index = 0; - let entry = self.room_grid.get(grid_x + (grid_z * 6)); - entry.and_then(|e| *e) - } + for (index, room) in rooms.iter().enumerate() { + let room = room.borrow(); + if room.data.room_type == RoomType::Entrance { + entrance_room_index = index; + } + for segment in room.segments.iter() { + let x = segment.x; + let z = segment.z; + let segment_index = x + z * 6; - /// returns the index of the room the player is in, - /// and the index of the segment containing the player. - pub fn get_player_room(&mut self, player: &Player) -> Option<(usize, Option)> { - let room_index = self.get_room_at( - player.position.x as i32, - player.position.z as i32 - ); - if let Some(index) = room_index { - let player_aabb = player.collision_aabb(); + if segment_index > room_grid.len() - 1 { + bail!("Segment index for {},{} out of bounds: {}", x, z, segment_index); + } + if room_grid[segment_index].is_some() { + bail!("Segment at {x}, {z} is already occupied by {:?}!", room_grid[segment_index]); + } + room_grid[segment_index] = Some(index); - for room_bounds in self.rooms[index].room_bounds.iter() { - if player_aabb.intersects(&room_bounds.aabb) { - return Some((index, room_bounds.segment_index)) + if x > grid_max_x { + grid_max_x = x; + } + if z > grid_max_y { + grid_max_y = z; } } } - None - } - - pub fn start_dungeon(&mut self) { - let world = &mut self.server_mut().world; - for (index, door) in self.doors.iter().enumerate() { - if door.door_type == DoorType::ENTRANCE { - door.open_door(world); - continue; - } - if door.door_type == DoorType::NORMAL { - continue; + // replace placeholder_neighbour with its actual neighbours + for room_rc in rooms.iter() { + for segment in room_rc.borrow_mut().segments.iter_mut() { + for (index, neighbour) in segment.neighbours.iter_mut().enumerate() { + if let Some(neighbour) = neighbour { + // shouldn't be possible to error unless its an invalid dungeon + let neighbour_position = match index { + 0 => segment.x + ((segment.z - 1) * 6), + 1 => (segment.x + 1) + (segment.z * 6), + 2 => segment.x + ((segment.z + 1) * 6), + 3 => (segment.x - 1) + (segment.z * 6), + _ => unreachable!() + }; + neighbour.room = rooms[room_grid[neighbour_position].unwrap()].clone() + } + } } + } - world::iterate_blocks( - BlockPos { x: door.x - 1, y: 69, z: door.z - 1 }, - BlockPos { x: door.x + 1, y: 72, z: door.z + 1 }, - |x, y, z| { - let action = match door.door_type { - DoorType::WITHER => BlockInteractAction::WitherDoor { door_index: index }, - DoorType::BLOOD => BlockInteractAction::BloodDoor { door_index: index }, - _ => unreachable!() - }; - world.interactable_blocks.insert(BlockPos::new(x, y, z), action); - } - ); + if Rc::strong_count(&placeholder_neighbour) > 1 { + bail!("Placeholder neighbour is leaked, likely caused by invalid room layout") } - // probably mark room connected to entrance as entered - } - pub fn tick(&mut self) { - let server = self.server_mut(); + // temp + let mut wither_key_count = 0; - match &mut self.state { - DungeonState::NotReady | DungeonState::Finished => {} + for door in doors.iter() { + let door = door.borrow(); + if let DoorType::Wither = door.get_type() { + wither_key_count += 1; + } + } - DungeonState::Starting { tick_countdown: tick } => { - *tick -= 1; - if *tick == 0 { - self.state = DungeonState::Started { current_ticks: 0 }; - self.start_dungeon(); - } else if *tick % 20 == 0 { + let map_offset_x = (128 - (grid_max_x + 1) * 20) / 2; + let map_offset_y = (128 - (grid_max_y + 1) * 20) / 2; - let seconds_remaining = *tick / 20; - let s = if seconds_remaining == 1 { "" } else { "s" }; - let str = format!("§aStarting in {} second{}.", seconds_remaining, s); + Ok(Dungeon { + rooms, + doors, + room_index_grid: room_grid, + entrance_room_index, + state: DungeonState::NotStarted, + map: DungeonMap::new(map_offset_x, map_offset_y), + wither_key_count, + blood_key_count: 1, - for (_, player) in server.world.players.iter_mut() { - player.send_message(&str); - } - } - } + }) + } - DungeonState::Started { current_ticks } => { - *current_ticks += 1; - for (_, player) in &mut server.world.players { - if let Some((room_index, _)) = self.get_player_room(player) { - let room = self.rooms.get_mut(room_index).unwrap(); + pub fn entrance_room(&self) -> Rc> { + self.rooms[self.entrance_room_index].clone() + } - for crusher in room.crushers.iter_mut() { - crusher.tick(player); - } + pub fn get_room(&self, position: &DVec3, aabb: AABB) -> Option<(&Rc>, Option)> { + let grid_index = grid_position(position.x as i32, position.z as i32)?; + let room_index = *self.room_index_grid.get(grid_index)?.as_ref()?; + let room_rc = &self.rooms[room_index]; - if !room.entered { - room.entered = true; - self.map.draw_room(&self.rooms, &self.doors, room_index); - - // this needs to happen once a tick, - // but currently the ticking stuff is a mess - if let Some((region, data)) = self.map.get_updated_area() { - let width = region.max_x - region.min_x; - let height = region.max_y - region.min_y; - - player.write_packet(&Maps { - id: 1, - scale: 0, - columns: width as u8, - rows: height as u8, - x: region.min_x as u8, - z: region.min_y as u8, - map_data: data, - }); - }; - } - } - } + for room_aabb in room_rc.borrow().room_bounds.iter() { + if room_aabb.aabb.intersects(&aabb) { + return Some((room_rc, room_aabb.segment_index)) } } + None } } + +fn grid_position(x: i32, z: i32) -> Option { + if x < DUNGEON_ORIGIN.x || z < DUNGEON_ORIGIN.y { + return None; + } + let grid_x = ((x - DUNGEON_ORIGIN.x) / 32) as usize; + let grid_z = ((z - DUNGEON_ORIGIN.y) / 32) as usize; + Some(grid_x + (grid_z * 6)) +} \ No newline at end of file diff --git a/src/dungeon/dungeon_player.rs b/src/dungeon/dungeon_player.rs new file mode 100644 index 0000000..c12f897 --- /dev/null +++ b/src/dungeon/dungeon_player.rs @@ -0,0 +1,391 @@ +use crate::dungeon::dungeon::{Dungeon, DungeonState}; +use crate::dungeon::items::ability::{Ability, ActiveAbility, Cooldown}; +#[cfg(feature = "dungeon-breaker")] +use crate::dungeon::items::dungeon_breaker::dungeon_breaker_dig; +use crate::dungeon::items::dungeon_items::DungeonItem; +use crate::dungeon::room::room::Room; +use chrono::Local; +use glam::IVec3; +use indoc::{formatdoc, indoc}; +use server::constants::PotionEffect; +use server::inventory::item::get_item_stack; +use server::inventory::item_stack::ItemStack; +use server::network::protocol::play::clientbound::{AddEffect, BlockChange, Chat}; +use server::network::protocol::play::serverbound::PlayerDiggingAction; +use server::player::packet_handling::BlockInteractResult; +use server::player::sidebar::Sidebar; +use server::types::chat_component::ChatComponent; +use server::types::direction::Direction; +use server::{Player, PlayerExtension, World}; +use std::cell::{Cell, RefCell}; +use std::collections::HashMap; +use std::rc::Rc; +use std::time::{SystemTime, UNIX_EPOCH}; + +pub struct DungeonPlayer { + pub sidebar: Sidebar, + pub is_ready: bool, + + pub current_room: Option<(Rc>, Option)>, + + // maybe disallow multiple of the same, + // however if you pair with cooldowns it should be fine + pub active_abilities: Cell>, + pub cooldowns: HashMap, + + #[cfg(feature = "dungeon-breaker")] + pub pickaxe_charges: usize, + #[cfg(feature = "dungeon-breaker")] + pub broken_blocks: Vec<(IVec3, server::block::blocks::Blocks, usize)>, + +} + +impl PlayerExtension for DungeonPlayer { + type World = Dungeon; + type Item = DungeonItem; + + fn tick(player: &mut Player) { + if player.ticks_existed.is_multiple_of(60) { + player.write_packet(&AddEffect { + entity_id: player.entity_id, + effect_id: PotionEffect::Haste, + amplifier: 2, + duration: 200, + hide_particles: true, + }); + player.write_packet(&AddEffect { + entity_id: player.entity_id, + effect_id: PotionEffect::NightVision, + amplifier: 0, + duration: 600, + hide_particles: true, + }); + } + + if player.ticks_existed.is_multiple_of(2) { + DungeonPlayer::update_sidebar(player); + } + + let mut abilities = player.active_abilities.take(); + abilities.retain_mut(|active| { + active.ticks_active += 1; + active.ability.tick(active.ticks_active, player); + active.ticks_active != active.ability.duration() + }); + player.active_abilities.set(abilities); + + player.cooldowns.retain(|_, cooldown| { + cooldown.ticks_remaining -= 1; + cooldown.ticks_remaining != 0 + }); + + #[cfg(feature = "dungeon-breaker")] + { + if player.ticks_existed.is_multiple_of(20) { + if player.extension.pickaxe_charges != 20 { + let min = std::cmp::min(20 - player.extension.pickaxe_charges, 2); + player.extension.pickaxe_charges += min; + } + } + + let chunk_grid = &mut player.world_mut().chunk_grid; + player.extension.broken_blocks.retain_mut(|(position, block, ticks)| { + *ticks -= 1; + if *ticks == 0 { + // for last 3 seconds, every second plays a particle and sound + chunk_grid.set_block_at(*block, position.x, position.y, position.z); + } + *ticks != 0 + }); + } + } + + fn dig(player: &mut Player, position: IVec3, action: &PlayerDiggingAction) { + + #[cfg(not(feature = "dungeon-breaker"))] + { + let mut restore_block = false; + match action { + PlayerDiggingAction::StartDestroyBlock => { + if let Some(item) = *player.inventory.get_hotbar_slot(player.held_slot as usize) { + if matches!(item, DungeonItem::Pickaxe) { + restore_block = true; + } + } + + // only doors can be interacted with left click I think + let world = player.world_mut(); + DungeonPlayer::try_open_door(player, world, &position); + } + PlayerDiggingAction::FinishDestroyBlock => { + restore_block = true; + } + _ => {} + } + if restore_block { + let block = player.world().chunk_grid.get_block_at(position.x, position.y, position.z); + player.write_packet(&BlockChange { + block_pos: position, + block_state: block.get_block_state_id(), + }) + } + } + + #[cfg(feature = "dungeon-breaker")] + { + let world = player.world_mut(); + + // try open doors with left click before continuing with dungeon breaker + if DungeonPlayer::try_open_door(player, world, &position) { + return; + } + + if !dungeon_breaker_dig(player, world, position, action) { + let block = world.chunk_grid.get_block_at( + position.x, + position.y, + position.z + ); + player.write_packet(&BlockChange { + block_pos: position, + block_state: block.get_block_state_id(), + }) + } + } + } + + fn interact(player: &mut Player, item: Option, block: Option) { + if let Some(block) = block { + { + let mut pos = block.position; + match block.direction { + Direction::Down => pos.y -= 1, + Direction::Up => pos.y += 1, + Direction::North => pos.z -= 1, + Direction::South => pos.z += 1, + Direction::West => pos.x -= 1, + Direction::East => pos.x += 1, + } + let block = player.world().chunk_grid.get_block_at(pos.x, pos.y, pos.z); + player.write_packet(&BlockChange { + block_pos: pos, + block_state: block.get_block_state_id(), + }); + } + + let world = player.world_mut(); + DungeonPlayer::try_open_door(player, world, &block.position); + } + + let held_item = *player.inventory.get_hotbar_slot(player.held_slot as usize); + + if get_item_stack(&held_item) != item { + player.sync_inventory(); + } + if let Some(held_item) = held_item { + held_item.on_right_click(player) + } + } +} + +impl DungeonPlayer { + + pub fn item_cooldown(&self, item: &DungeonItem) -> Option<&Cooldown> { + self.cooldowns.get(item) + } + + pub fn add_item_cooldown(&mut self, item: &DungeonItem, cooldown: Cooldown) { + self.cooldowns.insert(*item, cooldown); + } + + pub fn add_item_ability(&mut self, ability: Ability) { + let active_ability = ActiveAbility { + ability, + ticks_active: 0, + }; + self.active_abilities.get_mut().push(active_ability) + } + + pub fn ready(player: &mut Player) { + player.is_ready = !player.is_ready; + Dungeon::update_ready_status(player.world_mut(), player); + } + + pub fn get_current_room(&self) -> Option>> { + if let Some((room, _)) = &self.current_room { + return Some(room.clone()) + } + None + } + + pub fn try_open_door(player: &mut Player, world: &mut World, position: &IVec3) -> bool { + if world.has_started() { + if let Some(room_rc) = player.extension.get_current_room() { + for neighbour in room_rc.borrow().neighbours() { + { + let mut door = neighbour.door.borrow_mut(); + + if !door.contains(position) || door.is_open { + continue; + } + if !door.can_open(world) { + // todo: proper chat message and sound + player.write_packet(&Chat { + component: ChatComponent::new("no key"), + chat_type: 0, + }); + continue; + } + door.open(world); + } + neighbour.room.borrow_mut().discovered = true; + world.map.draw_room(&neighbour.room.borrow()); + return true; + } + } + } + false + } + + fn update_sidebar(player: &mut Player) { + // really scuffed icl + + let now = Local::now(); + let date = now.format("%m/%d/%y").to_string(); + let time = now.format("%-I:%M%P").to_string(); + + let room_id = if let Some(room_rc) = player.extension.get_current_room() { + let room = room_rc.borrow(); + &*room.data.id.clone() + } else { + "" + }; + + let (sb_month, sb_day, day_suffix) = get_sb_date(); + let sidebar = &mut player.extension.sidebar; + + sidebar.push(&formatdoc! {r#" + §e§lSKYBLOCK + §7{date} §8local {room_id} + + {sb_month} {sb_day}{day_suffix} + §7{time} + §7⏣ §cThe Catacombs §7(F7) + + "#, + + }); + + let world = player.world(); + match &world.state { + DungeonState::NotStarted | DungeonState::Starting { .. } => { + // can't use one outside because of borrow checker + let sidebar = &mut player.extension.sidebar; + + for player in world.players.iter() { + let color = if player.extension.is_ready { 'a' } else { 'c' }; + sidebar.push(&format!("§{color}[M] §7{}", player.profile.username)); + } + sidebar.new_line(); + if let DungeonState::Starting { starts_in_ticks } = world.state { + sidebar.push(&format!("Starting in: §a0§a:0{}", (starts_in_ticks / 20) + 1)); + sidebar.new_line(); + } + } + DungeonState::Started { ticks } => { + let sidebar = &mut player.extension.sidebar; + + // this is scuffed but it works + let seconds = ticks / 20; + let time = if seconds >= 60 { + let minutes = seconds / 60; + let seconds = seconds % 60; + format!( + "{}{}m{}{}s", + if minutes < 10 { "0" } else { "" }, + minutes, + if seconds < 10 { "0" } else { "" }, + seconds + ) + } else { + let seconds = seconds % 60; + format!("{}{}s", if seconds < 10 { "0" } else { "" }, seconds) + }; + // TODO: cleared percentage + // clear percentage is based on amount of tiles that are cleared. + + let (has_blood_key, wither_key_count) = ( + if world.blood_key_count != 0 { "§a✓" } else { "§c✖" }, + world.wither_key_count, + ); + + sidebar.push(&formatdoc! {r#" + Keys: §c■ {has_blood_key} §8■ §a{wither_key_count}x + Time elapsed: §a§a{time} + Cleared: §c{clear_percent}% §8§8({score}) + + "#, + clear_percent = "0", + score = "0", + }); + + // temp + #[cfg(feature = "dungeon-breaker")] + sidebar.push(&formatdoc!{r#" + charges {charges} + + "#, + charges = player.extension.pickaxe_charges, + }); + + if world.players.len() == 1 { + sidebar.push(indoc! {r#" + §3§lSolo + + "#}); + } else { + for p in world.players.iter() { + if p.client_id != player.client_id { + sidebar.push(&format!("§e[M] §7{}", p.profile.username)); + } + } + sidebar.new_line(); + } + } + } + + player.extension.sidebar.flush(&mut player.packet_buffer); + } +} + +fn get_sb_date() -> (&'static str, u64, &'static str) { + const SKYBLOCK_EPOCH_START_MILLIS: u64 = 1_559_829_300_000; + const SKYBLOCK_YEAR_MILLIS: u64 = 124 * 60 * 60 * 1000; + const SKYBLOCK_MONTH_MILLIS: u64 = SKYBLOCK_YEAR_MILLIS / 12; + const SKYBLOCK_DAY_MILLIS: u64 = SKYBLOCK_MONTH_MILLIS / 31; + + const SKYBLOCK_MONTHS: [&str; 12] = [ + "Early Spring", "Spring", "Late Spring", + "Early Summer", "Summer", "Late Summer", + "Early Autumn", "Autumn", "Late Autumn", + "Early Winter", "Winter", "Late Winter", + ]; + + let now = SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_millis() as u64; + let elapsed = now.saturating_sub(SKYBLOCK_EPOCH_START_MILLIS); + let day = (elapsed % SKYBLOCK_YEAR_MILLIS) / SKYBLOCK_DAY_MILLIS; + let month = (day / 31) as usize; + let day_of_month = (day % 31) + 1; + + let suffix = match day_of_month % 100 { + 11..=13 => "th", + _ => match day_of_month % 10 { + 1 => "st", + 2 => "nd", + 3 => "rd", + _ => "th", + }, + }; + // sb_month = SKYBLOCK_MONTHS[month], day = day_of_month, day_suffix = suffix + (SKYBLOCK_MONTHS[month], day_of_month, suffix) +} diff --git a/src/dungeon/dungeon_state.rs b/src/dungeon/dungeon_state.rs deleted file mode 100644 index 033a7b8..0000000 --- a/src/dungeon/dungeon_state.rs +++ /dev/null @@ -1,11 +0,0 @@ - -// probably should put all data when dungeon is started here -#[derive(Debug)] -pub enum DungeonState { - NotReady, - Starting { tick_countdown: u16 }, - Started { - current_ticks: u64 - }, - Finished, -} \ No newline at end of file diff --git a/src/dungeon/entities/mod.rs b/src/dungeon/entities/mod.rs new file mode 100644 index 0000000..4ba9cfa --- /dev/null +++ b/src/dungeon/entities/mod.rs @@ -0,0 +1 @@ +pub mod npc; \ No newline at end of file diff --git a/src/dungeon/entities/npc.rs b/src/dungeon/entities/npc.rs new file mode 100644 index 0000000..3c0253f --- /dev/null +++ b/src/dungeon/entities/npc.rs @@ -0,0 +1,49 @@ +use crate::dungeon::dungeon::Dungeon; +use crate::dungeon::dungeon_player::DungeonPlayer; +use server::entity::entity::{EntityBase, EntityExtension}; +use server::network::packets::packet_buffer::PacketBuffer; +use server::network::protocol::play::serverbound::EntityInteractionType; +use server::Player; + +pub struct InteractableNPC { + pub default_yaw: f32, + pub default_pitch: f32, + pub interact_callback: fn(player: &mut Player), +} + +impl EntityExtension for InteractableNPC { + + fn tick(&mut self, entity: &mut EntityBase, _: &mut PacketBuffer) { + if entity.ticks_existed.is_multiple_of(5) { + return; + } + + let player: Option<&Player> = entity.world().players.iter() + .filter(|p| entity.position.distance(p.position) <= 5.0) + .min_by(|a, b| { + let dist_a = entity.position.distance(a.position); + let dist_b = entity.position.distance(b.position); + dist_a.partial_cmp(&dist_b).unwrap() + }); + + if let Some(player) = player { + let direction = player.position - entity.position; + let horizontal_dist = (direction.x.powi(2) + direction.z.powi(2)).sqrt(); + + entity.yaw = (direction.z.atan2(direction.x).to_degrees() - 90.0) as f32; + entity.pitch = (-direction.y.atan2(horizontal_dist).to_degrees()) as f32; + } else { + entity.yaw = self.default_yaw; + entity.pitch = self.default_pitch; + } + } + + fn interact( + &mut self, + _: &mut EntityBase, + player: &mut Player, + _: EntityInteractionType + ) { + (self.interact_callback)(player) + } +} diff --git a/src/dungeon/items/ability.rs b/src/dungeon/items/ability.rs new file mode 100644 index 0000000..0f5df29 --- /dev/null +++ b/src/dungeon/items/ability.rs @@ -0,0 +1,89 @@ +use crate::dungeon::dungeon_player::DungeonPlayer; +use enumset::EnumSet; +use glam::DVec3; +use server::constants::Sound; +use server::network::protocol::play::clientbound::PositionLook; +use server::Player; + +#[derive(Copy, Clone)] +pub struct Cooldown { + pub ticks_remaining: usize, + pub silent: bool, +} + +impl Cooldown { + + pub fn from_ticks(ticks: usize, silent: bool) -> Self { + Self { + ticks_remaining: ticks, + silent + } + } + + pub fn from_seconds(seconds: usize, silent: bool) -> Self { + Self { + ticks_remaining: seconds * 20, + silent, + } + } + +} + +pub struct ActiveAbility { + pub ability: Ability, + pub ticks_active: usize, +} + +pub enum Ability { + TacticalInsertion { + position: DVec3, + yaw: f32, + pitch: f32, + } +} + +impl Ability { + pub fn tick(&mut self, ticks_active: usize, player: &mut Player) { + match self { + Ability::TacticalInsertion { position, yaw, pitch } => { + let (sound, volume, sound_pitch) = match ticks_active { + 1 => (Some(Sound::ZombieRemedy), 1.0, 0.75), + 2 => (Some(Sound::ZombieRemedy), 1.0, 1.1), + + 10 => (Some(Sound::NoteHat), 0.8, 1.20), + 20 => (Some(Sound::NoteHat), 0.85, 1.35), + 30 => (Some(Sound::NoteHat), 0.85, 1.45), + 40 => (Some(Sound::NoteHat), 0.9, 1.55), + 50 => (Some(Sound::NoteHat), 1.0, 1.7), + + // todo: correct these, these sound off by quite a lot + 61 => (Some(Sound::ZombieRemedy), 0.7, 1.9), + 63 => (Some(Sound::ZombieRemedy), 0.6, 1.75), + 66 => (Some(Sound::ZombieRemedy), 0.5, 1.55), + _ => (None, 0.0, 0.0), + }; + + if let Some(sound) = sound { + player.play_sound(sound, volume, sound_pitch) + } + + if ticks_active == 60 { + player.write_packet(&PositionLook { + x: position.x, + y: position.y, + z: position.z, + yaw: *yaw, + pitch: *pitch, + flags: EnumSet::new(), + }) + } + } + } + } + + pub fn duration(&self) -> usize { + match self { + Ability::TacticalInsertion { .. } => 70, + } + } +} \ No newline at end of file diff --git a/src/dungeon/items/dungeon_breaker.rs b/src/dungeon/items/dungeon_breaker.rs new file mode 100644 index 0000000..2632fc8 --- /dev/null +++ b/src/dungeon/items/dungeon_breaker.rs @@ -0,0 +1,62 @@ +use crate::dungeon::dungeon::Dungeon; +use crate::dungeon::dungeon_player::DungeonPlayer; +use crate::dungeon::items::dungeon_items::DungeonItem; +use glam::{dvec3, IVec3}; +use server::block::blocks::Blocks; +use server::network::protocol::play::serverbound::PlayerDiggingAction; +use server::types::aabb::AABB; +use server::{Player, World}; + +// if returns false should +pub fn dungeon_breaker_dig( + player: &mut Player, + world: &mut World, + position: IVec3, + action: &PlayerDiggingAction, +) -> bool { + + if !matches!(action, PlayerDiggingAction::StartDestroyBlock) { + return false + } + + if !world.has_started() || player.pickaxe_charges == 0 { + return false + } + + if matches!(player.get_held_item(), Some(DungeonItem::Pickaxe)) { + let Some((room_rc, _)) = &player.extension.current_room else { + // not in room + return false + }; + + let chunk_grid = &mut world.chunk_grid; + let room = room_rc.borrow(); + + let block_aabb = AABB::new( + position.as_dvec3() + dvec3(-0.75, -0.75, -0.75), + position.as_dvec3() + dvec3(1.5, 1.5, 1.5), + ); + + // check if room doesn't allow, check if overlaps with secrets + + let mut volume_inside = 0.0; + + for bounds in room.room_bounds.iter() { + volume_inside += block_aabb.intersection_volume(&bounds.aabb); + } + + if block_aabb.volume() == volume_inside { + let previous = chunk_grid.get_block_at(position.x, position.y, position.z); + if previous == Blocks::Bedrock { + return false; + } + player.extension.broken_blocks.push((position, previous, 200)); + + chunk_grid.set_block_at(Blocks::Air, position.x, position.y, position.z); + player.extension.pickaxe_charges -= 1; + return true; + } + } + + false +} \ No newline at end of file diff --git a/src/dungeon/items/dungeon_items.rs b/src/dungeon/items/dungeon_items.rs new file mode 100644 index 0000000..c7ad5bd --- /dev/null +++ b/src/dungeon/items/dungeon_items.rs @@ -0,0 +1,236 @@ +use crate::dungeon::dungeon_player::DungeonPlayer; +use crate::dungeon::items::ability::{Ability, Cooldown}; +use crate::dungeon::items::etherwarp::etherwarp; +use crate::dungeon::items::instant_transmission::instant_transmission; +use indoc::indoc; +use server::inventory::item::Item; +use server::inventory::item_stack::ItemStack; +use server::network::binary::nbt::TAG_COMPOUND_ID; +use server::network::binary::nbt::{NBTNode, NBT}; +use server::network::protocol::play::clientbound::Chat; +use server::types::chat_component::ChatComponent; +use server::Player; +use std::collections::HashMap; + +#[derive(Debug, Copy, Clone, Hash, Eq, PartialEq)] +pub enum DungeonItem { + TacticalInsertion, + AspectOfTheVoid, + SkyblockMenu, + MagicalMap, + Hyperion, + Pickaxe, +} + +impl Item for DungeonItem { + + fn get_item_stack(&self) -> ItemStack { + match self { + DungeonItem::TacticalInsertion => ItemStack { + item: 369, + stack_size: 1, + metadata: 0, + tag_compound: Some(NBT::with_nodes(vec![ + NBT::compound("display", vec![ + NBT::string("Name", "§6Tactical Insertion"), + NBT::list_from_string("Lore", indoc! {r#" + §6Ability: Gorilla Tactics §e§lRIGHT CLICK + §7Marks your location and teleport back there + §7after §a3s§7. + + §6§l§kU§r§6§l LEGENDARY §kU + "#}) + ]), + NBT::compound("ExtraAttributes", vec![ + NBT::string("id", "TACTICAL_INSERTION"), + ]), + ])), + }, + DungeonItem::AspectOfTheVoid => ItemStack { + item: 277, + stack_size: 1, + metadata: 0, + tag_compound: Some(NBT::with_nodes(vec![ + NBT::compound("display", vec![ + NBT::string("Name", "§6Aspect of the Void"), + NBT::list_from_string("Lore", indoc! {r#" + + §6Ability: Instant Transmission §e§lRIGHT CLICK + §7Teleport §a12 blocks §7ahead of you and + §7gain §a+50 §r✦ Speed §7for §a3 seconds. + + §6Ability: Ether Transmission §e§lSNEAK RIGHT CLICK + §7Teleport to your targeted block up + §7to §a61 blocks §7away + + §6§l§kU§r§6§l LEGENDARY SWORD §kU + "#}) + ]), + NBT::compound("ExtraAttributes", vec![ + NBT::string("id", "ASPECT_OF_THE_VOID"), + ]), + NBT::byte("Unbreakable", 1), + NBT::byte("HideFlags", 127), + ])), + }, + DungeonItem::SkyblockMenu => ItemStack { + item: 399, + stack_size: 1, + metadata: 0, + tag_compound: Some(NBT::with_nodes(vec![ + NBT::compound("display", vec![ + NBT::string("Name", "§aSkyBlock Menu"), + NBT::list_from_string("Lore", indoc! {r#" + §7View all of your SkyBlock progress, + §7including your Skills, Collections, + §7Recipes, and more! + "#}) + ]), + ])), + }, + DungeonItem::MagicalMap => ItemStack { + item: 358, + stack_size: 1, + metadata: 1, + tag_compound: Some(NBT::with_nodes(vec![ + NBT::compound("display", vec![ + NBT::string("Name", "§bMagical Map"), + NBT::list_from_string("Lore", indoc! {r#" + §7Shows the layout of the Dungeon as + §7it is explored and completed. + "#}) + ]), + ])), + }, + DungeonItem::Hyperion => ItemStack { + item: 267, + stack_size: 1, + metadata: 0, + tag_compound: Some(NBT::with_nodes(vec![ + NBT::compound("display", vec![ + NBT::list_from_string("Lore", indoc! {r#" + + §aScroll Abilities: + §6Ability: Wither Impact §e§lRIGHT CLICK + §7Teleport §a10 blocks§7 ahead of you. + §7Then implode dealing §c10,000 + §7damage to nearby enemies. Also + §7applies the wither shield scroll + §7ability reducing damage taken and + §7granting an absorption shield for §e5 + §7seconds. + + §d§l§kE§r§d§l MYTHIC DUNGEON SWORD §kE + "#}), + NBT::string("Name", "§dHyperion"), + ]), + NBT::byte("Unbreakable", 1), + NBT::byte("HideFlags", 127), + ])), + }, + DungeonItem::Pickaxe => if cfg!(feature = "dungeon-breaker") { + ItemStack { + item: 278, + stack_size: 1, + metadata: 0, + tag_compound: Some(NBT::with_nodes(vec![ + NBT::list("ench", TAG_COMPOUND_ID, vec![ + NBTNode::Compound({ + let mut map = HashMap::new(); + map.insert("lvl".into(), NBTNode::Short(10)); + map.insert("id".into(), NBTNode::Short(32)); + map + }) + ]), + NBT::compound("display", vec![ + NBT::list_from_string("Lore", indoc! {r#" + + §9§l§kE§r§9§l RARE PICKAXE §kE + "#}), + NBT::string("Name", "§cDungeon Breaker"), + ]), + NBT::byte("Unbreakable", 1), + NBT::byte("HideFlags", 127), + ])), + } + } else { + ItemStack { + item: 278, + stack_size: 1, + metadata: 0, + tag_compound: Some(NBT::with_nodes(vec![ + NBT::list("ench", TAG_COMPOUND_ID, vec![ + NBTNode::Compound({ + let mut map = HashMap::new(); + map.insert("lvl".into(), NBTNode::Short(10)); + map.insert("id".into(), NBTNode::Short(32)); + map + }) + ]), + NBT::compound("display", vec![ + NBT::list_from_string("Lore", indoc! {r#" + §8Breaking Power 4 + + §9Efficiency X + §7Increases how quickly your tool + §7breaks blocks. + + §9§l§kE§r§9§l RARE PICKAXE §kE + "#}), + NBT::string("Name", "§9Diamond Pickaxe"), + ]), + NBT::byte("Unbreakable", 1), + NBT::byte("HideFlags", 127), + ])), + } + } + } + } + + fn can_move_in_inventory(&self) -> bool { + match self { + DungeonItem::SkyblockMenu | DungeonItem::MagicalMap => false, + _ => true + } + } +} + +impl DungeonItem { + pub fn on_right_click(&self, player: &mut Player) { + if let Some(cooldown) = player.extension.item_cooldown(self) { + if !cooldown.silent { + let string = format!("§cThis ability is on cooldown for {}s.", cooldown.ticks_remaining / 20); + player.write_packet(&Chat { + component: ChatComponent::new(string), + chat_type: 0, + }) + } + return; + } + match self { + DungeonItem::TacticalInsertion => { + player.extension.add_item_ability(Ability::TacticalInsertion { + position: player.position, + yaw: player.yaw, + pitch: player.pitch, + }); + player.extension.add_item_cooldown(&DungeonItem::TacticalInsertion, Cooldown::from_seconds(20, false)) + } + DungeonItem::AspectOfTheVoid => { + if player.is_sneaking { + etherwarp(player); + } else { + instant_transmission(player, 12.0); + } + } + DungeonItem::Hyperion => { + // todo: sounds, particles + // add some cooldown system + // and every 5 seconds allow wither shield to be activated? + // and also for the wither impact itself as it as a very short cooldown + instant_transmission(player, 10.0); + } + _ => {} + } + } +} \ No newline at end of file diff --git a/src/dungeon/items/etherwarp.rs b/src/dungeon/items/etherwarp.rs new file mode 100644 index 0000000..b36e761 --- /dev/null +++ b/src/dungeon/items/etherwarp.rs @@ -0,0 +1,126 @@ +use crate::dungeon::dungeon_player::DungeonPlayer; +use crate::dungeon::room::room_data::RoomType; +use glam::{dvec3, vec3, DVec3}; +use server::constants::{Particle, Sound}; +use server::network::protocol::play::clientbound::{PositionLook, Relative}; +use server::utils::bitset::BitSet; +use server::world::chunk::chunk_grid::ChunkGrid; +use server::Player; + +pub(super) const VALID_ETHER_WARP_BLOCK_IDS: BitSet<3> = BitSet::new( + &[ + 0, 6, 9, 11, 30, 31, 32, 36, 37, 38, 39, 40, 50, 51, 55, 59, 65, 66, 69, 76, 77, 78, + 93, 94, 104, 105, 106, 111, 115, 131, 132, 140, 141, 142, 143, 144, 149, 150, 157, 171, 175 + ] +); + +enum EtherResult { + Valid(i32, i32, i32), + Failed, +} + +pub fn etherwarp(player: &mut Player) { + // temporary, but just to test, + // since some puzzles let you teleport in them, and others don't + if let Some(room_rc) = player.extension.get_current_room() { + match room_rc.borrow().data.room_type { + RoomType::Trap | RoomType::Puzzle => return, + _ => {} + } + }; + + let mut start_pos = player.position; + start_pos.y += 1.54; // assume always sneaking + let mut end_pos = player.rotation_vec().normalize().as_dvec3() * 61.0; + end_pos += start_pos; + + if let EtherResult::Valid(x, y, z) = traverse_voxels(&player.world().chunk_grid, start_pos, end_pos) { + + let position = dvec3(x as f64 + 0.5, y as f64 + 1.05, z as f64 + 0.5); + let dungeon = &player.world().extension; + + if let Some((room_rc, _)) = dungeon.get_room(&position, player.collision_aabb_at(&position)) { + if room_rc.borrow().data.room_type == RoomType::Puzzle { + return; + } + } + player.world_mut().spawn_particle( + Particle::SpellWitch, + player.position.as_vec3(), + vec3(0.25, 1.0, 0.25), + 25 + ); + player.write_packet(&PositionLook { + x: position.x, + y: position.y, + z: position.z, + yaw: 0.0, + pitch: 0.0, + flags: Relative::Yaw | Relative::Pitch, + }); + player.play_sound_at(Sound::EnderDragonHit, 1.0, 0.54, position); + } +} + +fn traverse_voxels(chunk_grid: &ChunkGrid, start: DVec3, end: DVec3) -> EtherResult { + let (x0, y0, z0) = (start.x, start.y, start.z); + let (x1, y1, z1) = (end.x, end.y, end.z); + + + let (mut x, mut y, mut z) = start.floor().as_ivec3().into(); + let (end_x, end_y, end_z) = end.floor().as_ivec3().into(); + + let dir_x = x1 - x0; + let dir_y = y1 - y0; + let dir_z = z1 - z0; + + let step_x = dir_x.signum() as i32; + let step_y = dir_y.signum() as i32; + let step_z = dir_z.signum() as i32; + + let inv_dir_x = if dir_x != 0.0 { 1.0 / dir_x } else { f64::MAX }; + let inv_dir_y = if dir_y != 0.0 { 1.0 / dir_y } else { f64::MAX }; + let inv_dir_z = if dir_z != 0.0 { 1.0 / dir_z } else { f64::MAX }; + + let t_delta_x = (inv_dir_x * step_x as f64).abs(); + let t_delta_y = (inv_dir_y * step_y as f64).abs(); + let t_delta_z = (inv_dir_z * step_z as f64).abs(); + + // t_max initialization follows the "next voxel boundary" logic + let mut t_max_x = ((x as f64 + if step_x > 0 { 1.0 } else { 0.0 } - x0) * inv_dir_x).abs(); + let mut t_max_y = ((y as f64 + if step_y > 0 { 1.0 } else { 0.0 } - y0) * inv_dir_y).abs(); + let mut t_max_z = ((z as f64 + if step_z > 0 { 1.0 } else { 0.0 } - z0) * inv_dir_z).abs(); + + for _ in 0..1000 { + // Check block at current voxel coordinates + let current_block = chunk_grid.get_block_at(x, y, z); + + if !VALID_ETHER_WARP_BLOCK_IDS.contains((current_block.get_block_state_id() >> 4) as usize) { + let block_up1 = chunk_grid.get_block_at(x, y + 1, z).get_block_state_id() >> 4; + let block_up2 = chunk_grid.get_block_at(x, y + 2, z).get_block_state_id() >> 4; + + return if VALID_ETHER_WARP_BLOCK_IDS.contains(block_up1 as usize) && VALID_ETHER_WARP_BLOCK_IDS.contains(block_up2 as usize) { + EtherResult::Valid(x, y, z) + } else { + EtherResult::Failed + } + } + + if x == end_x && y == end_y && z == end_z { + return EtherResult::Failed; + } + + if t_max_x <= t_max_y && t_max_x <= t_max_z { + t_max_x += t_delta_x; + x += step_x; + } else if t_max_y <= t_max_z { + t_max_y += t_delta_y; + y += step_y; + } else { + t_max_z += t_delta_z; + z += step_z; + } + } + + EtherResult::Failed +} \ No newline at end of file diff --git a/src/dungeon/items/instant_transmission.rs b/src/dungeon/items/instant_transmission.rs new file mode 100644 index 0000000..7dca1a4 --- /dev/null +++ b/src/dungeon/items/instant_transmission.rs @@ -0,0 +1,98 @@ +use crate::dungeon::dungeon_player::DungeonPlayer; +use crate::dungeon::items::etherwarp::VALID_ETHER_WARP_BLOCK_IDS; +use crate::dungeon::room::room_data::RoomType; +use glam::{dvec3, DVec3, IVec3}; +use server::network::protocol::play::clientbound::{PositionLook, Relative}; +use server::world::chunk::chunk_grid::ChunkGrid; +use server::Player; + +// it appears hypixel uses a generic stepping algorithm for ray-casting +pub fn instant_transmission( + player: &mut Player, + distance: f64, +) { + if let Some(room_rc) = player.extension.get_current_room() { + match room_rc.borrow().data.room_type { + RoomType::Trap | RoomType::Puzzle => return, + _ => {} + } + }; + + let chunk_grid = &player.world().chunk_grid; + + let mut start = player.position; + start.y += 1.62; + + const STEP_LEN: f64 = 0.5; + let step_amount = (distance / STEP_LEN).ceil() as usize; + let direction_vec = player.rotation_vec().normalize().as_dvec3() * STEP_LEN; + + let mut current_position = start; + let mut last_checked: IVec3; + let mut current_block: Option = None; + let mut block_in_way: bool = false; + + // this small section acts as the first iteration. + // because even if it is invalid teleport position, + // it still sets last checked, and won't stop the ray-cast. + last_checked = mc_floor_vec3(current_position); + current_position += direction_vec; + + if is_valid(chunk_grid, last_checked) { + current_block = Some(last_checked); + } + + for _ in 1..step_amount { + let block_pos = mc_floor_vec3(current_position); + current_position += direction_vec; + + if block_pos == last_checked { + continue; + } + if !is_valid(chunk_grid, block_pos) { + block_in_way = true; + break; + } + + last_checked = block_pos; + current_block = Some(block_pos); + } + + // todo: sounds + if let Some(position) = current_block { + let position = dvec3(position.x as f64 + 0.5, position.y as f64, position.z as f64 + 0.5); + let dungeon = &player.world().extension; + + if let Some((room_rc, _)) = dungeon.get_room(&position, player.collision_aabb_at(&position)) { + if room_rc.borrow().data.room_type == RoomType::Puzzle { + return; + } + } + player.write_packet(&PositionLook { + x: position.x, + y: position.y, + z: position.z, + yaw: 0.0, + pitch: 0.0, + flags: Relative::Yaw | Relative::Pitch, + }) + } + if block_in_way { + // play block in the way sound + } +} + +fn is_valid(chunk_grid: &ChunkGrid, position: IVec3) -> bool { + let block1 = chunk_grid.get_block_at(position.x, position.y, position.z).get_block_state_id() >> 4; + let block2 = chunk_grid.get_block_at(position.x, position.y + 1, position.z).get_block_state_id() >> 4; + VALID_ETHER_WARP_BLOCK_IDS.contains(block1 as usize) && VALID_ETHER_WARP_BLOCK_IDS.contains(block2 as usize) +} + +fn mc_floor(value: f64) -> i32 { + let i = value as i32; + if value < i as f64 { i - 1 } else { i } +} + +fn mc_floor_vec3(v: DVec3) -> IVec3 { + IVec3::new(mc_floor(v.x), mc_floor(v.y), mc_floor(v.z)) +} diff --git a/src/dungeon/items/mod.rs b/src/dungeon/items/mod.rs new file mode 100644 index 0000000..19a62fc --- /dev/null +++ b/src/dungeon/items/mod.rs @@ -0,0 +1,7 @@ +pub mod dungeon_items; +pub mod ability; +mod etherwarp; +mod instant_transmission; + +#[cfg(feature = "dungeon-breaker")] +pub mod dungeon_breaker; \ No newline at end of file diff --git a/src/dungeon/map.rs b/src/dungeon/map.rs index 2fc9be8..29e9a71 100644 --- a/src/dungeon/map.rs +++ b/src/dungeon/map.rs @@ -1,14 +1,17 @@ -use crate::dungeon::door::{Door, DoorType}; +use crate::dungeon::door::door::DoorType; use crate::dungeon::room::room::Room; use crate::dungeon::room::room_data::{RoomData, RoomShape, RoomType::*}; -use crate::server::block::block_parameter::Axis; +use server::block::block_parameter::Axis; +use server::network::protocol::play::clientbound::Maps; use std::cmp::{max, min}; +const DUNGEON_MAP_ID: i32 = 1; + const RED: u8 = 4 * 4 + 2; const GREEN: u8 = 7 * 4 + 2; const GRAY: u8 = 11 * 4 + 3; const WHITE: u8 = 14 * 4 + 2; -const ORANGE: u8 = 15 * 4 + 2; +const ORANGE: u8 = 15 * 4 + 2; const PURPLE: u8 = 16 * 4 + 2; const PINK: u8 = 20 * 4 + 2; const BLACK: u8 = 29 * 4; @@ -25,15 +28,17 @@ const CHECKMARK_POSITIONS: [(usize, usize); 30] = [ (4, 5), (0, 6), (1, 6), (2, 6), (3, 6), (1, 7), (2, 7), (3, 7), (1, 8), (2, 8), ]; -pub struct DirtyMapRegion { - pub min_x: usize, - pub min_y: usize, - pub max_x: usize, - pub max_y: usize, +struct DirtyMapRegion { + min_x: usize, + min_y: usize, + max_x: usize, + max_y: usize, } +const PIXEL_COUNT: usize = 128 * 128; + pub struct DungeonMap { - pub map_data: [u8; 128 * 128], + pixels: Box<[u8; PIXEL_COUNT]>, offset_x: usize, offset_y: usize, dirty_region: Option @@ -46,14 +51,14 @@ impl DungeonMap { pub fn new(offset_x: usize, offset_y: usize) -> Self { Self { - map_data: [0; 128 * 128], + pixels: Box::new([0u8; PIXEL_COUNT]), offset_x, offset_y, dirty_region: None, } } - pub fn get_updated_area(&mut self) -> Option<(DirtyMapRegion, Vec)> { + pub fn get_packet(&mut self) -> Option { if let Some(region) = self.dirty_region.take() { let width = region.max_x - region.min_x; let height = region.max_y - region.min_y; @@ -62,20 +67,23 @@ impl DungeonMap { for row in region.min_y..region.max_y { let start = row * 128 + region.min_x; let end = row * 128 + region.max_x; - - pixels.extend_from_slice(&self.map_data[start..end]); + pixels.extend_from_slice(&self.pixels[start..end]); } - return Some((region, pixels)) + + return Some(Maps { + id: DUNGEON_MAP_ID, + scale: 0, + columns: width as u8, + rows: height as u8, + x: region.min_x as u8, + z: region.min_y as u8, + map_data: pixels, + }) } None } - - fn set_px(&mut self, x: usize, y: usize, color: u8) { - let x = x + self.offset_x; - let y = y + self.offset_y; - debug_assert!(x < 128); - debug_assert!(y < 128); - + + fn mark_region_dirty(&mut self, x: usize, y: usize, width: usize, height: usize) { let region = self.dirty_region.get_or_insert(DirtyMapRegion { min_y: 128, min_x: 128, @@ -84,10 +92,18 @@ impl DungeonMap { }); region.min_x = min(region.min_x, x); region.min_y = min(region.min_y, y); - region.max_x = max(region.max_x, x + 1); - region.max_y = max(region.max_y, x + 1); + region.max_x = max(region.max_x, x + width); + region.max_y = max(region.max_y, y + height); + } - self.map_data[y * 128 + x] = color + fn set_px(&mut self, x: usize, y: usize, color: u8) { + let x = x + self.offset_x; + let y = y + self.offset_y; + debug_assert!(x < 128); + debug_assert!(y < 128); + + self.mark_region_dirty(x, y, 1, 1); + self.pixels[y * 128 + x] = color } fn fill_px( @@ -104,53 +120,43 @@ impl DungeonMap { debug_assert!(x + width < 128); debug_assert!(y + height < 128); - let region = self.dirty_region.get_or_insert(DirtyMapRegion { - min_y: 128, - min_x: 128, - max_x: 0, - max_y: 0, - }); - region.min_x = min(region.min_x, x); - region.min_y = min(region.min_y, y); - region.max_x = max(region.max_x, x + width); - region.max_y = max(region.max_y, y + height); + self.mark_region_dirty(x, y, width, height); for x in x..x+width { for y in y..y+height { - self.map_data[y * 128 + x] = color + self.pixels[y * 128 + x] = color } } } - - pub fn draw_room(&mut self, rooms: &[Room], doors: &[Door], room_index: usize) { - let room = &rooms[room_index]; - let color = get_room_color(&room.room_data); - + + pub fn draw_room(&mut self, room: &Room) { + let color = get_room_color(&room.data); + for segment in room.segments.iter() { let x = segment.x * 20; let y = segment.z * 20; - + self.fill_px(x, y, 16, 16, color); - if room.segments.iter().find(|seg| seg.x == segment.x + 1 && seg.z == segment.z).is_some() { + if room.segments.iter().any(|seg| seg.x == segment.x + 1 && seg.z == segment.z) { self.fill_px(x + 16, y, 4, 16, color); } - if room.segments.iter().find(|seg| seg.x == segment.x && seg.z == segment.z + 1).is_some() { + if room.segments.iter().any(|seg| seg.x == segment.x && seg.z == segment.z + 1) { self.fill_px(x, y + 16, 16, 4, color); } - + for (index, neighbour) in segment.neighbours.iter().enumerate() { if neighbour.is_none() { continue; } - + let (neighbour_room, door) = { let neighbour = neighbour.as_ref().unwrap(); - (&rooms[neighbour.room_index], &doors[neighbour.door_index]) + (neighbour.room.borrow(), neighbour.door.borrow()) }; - + let mut x = segment.x * 20 + 6; let mut y = segment.z * 20 + 6; - + match index { 0 => y -= 10, 1 => x += 10, @@ -158,20 +164,20 @@ impl DungeonMap { 3 => x -= 10, _ => unreachable!() } - - let (width, height) = match door.direction { + + let (width, height) = match door.axis { Axis::X => (4, 5), Axis::Z => (5, 4), _ => unreachable!() }; - - if neighbour_room.entered { - let color = get_door_color(room, neighbour_room); + + if neighbour_room.discovered { + let color = get_door_color(room, &neighbour_room); self.fill_px(x, y, width, height, color); } else { - let color = match door.door_type { - DoorType::WITHER => BLACK, - DoorType::BLOOD => RED, + let color = match door.get_type() { + DoorType::Wither => BLACK, + DoorType::Blood => RED, _ => GRAY, }; self.fill_px(x, y, width, height, color); @@ -195,15 +201,16 @@ impl DungeonMap { } } } - - // fill in hole - if room.room_data.shape == RoomShape::TwoByTwo { + + // fill in hole caused by 2x2 + if room.data.shape == RoomShape::TwoByTwo { let x = room.segments[0].x * 20 + 16; let y = room.segments[0].z * 20 + 16; self.fill_px(x, y, 4, 4, color) } - + { + // render checkamrk let x = room.segments[0].x * 20 + 4; let y = room.segments[0].z * 20 + 4; @@ -227,15 +234,15 @@ fn get_room_color(room_data: &RoomData) -> u8 { } fn get_door_color(room: &Room, neighbour: &Room) -> u8 { - match room.room_data.room_type { + match room.data.room_type { Puzzle | Trap | Blood | Yellow | Fairy => { - return get_room_color(&room.room_data) + return get_room_color(&room.data) } _ => {} }; - match neighbour.room_data.room_type { + match neighbour.data.room_type { Puzzle | Trap | Blood | Yellow => { - return get_room_color(&neighbour.room_data) + return get_room_color(&neighbour.data) } _ => {} }; diff --git a/src/dungeon/menus.rs b/src/dungeon/menus.rs new file mode 100644 index 0000000..ee8966f --- /dev/null +++ b/src/dungeon/menus.rs @@ -0,0 +1,95 @@ +use crate::dungeon::dungeon_player::DungeonPlayer; +use fstr::ToFString; +use server::inventory::item_stack::ItemStack; +use server::inventory::menu::Menu; +use server::network::binary::nbt::TAG_COMPOUND_ID; +use server::network::binary::nbt::{NBTNode, NBT}; +use server::network::protocol::play::serverbound::ClickWindow; +use server::Player; +use std::collections::HashMap; + +pub struct MortMenu; + +impl Menu for MortMenu { + + fn container_name(&self, _: &mut Player) -> &str { + "Ready Up" + } + + fn container_items(&self, player: &mut Player) -> Vec> { + // background + let mut items = vec![ + Some(ItemStack { + item: 160, + stack_size: 1, + metadata: 15, + tag_compound: Some(NBT::with_nodes(vec![NBT::compound( + "display", + vec![NBT::string("Name", "")] + )])), + }); + 54 + ]; + + let (item_name, color) = if player.extension.is_ready { + ("§aReady", 13) + } else { + ("§cNot Ready", 14) + }; + + items[4] = Some(ItemStack { + item: 397, + stack_size: 1, + metadata: 3, + tag_compound: Some(NBT::with_nodes(vec![ + NBT::compound( + "display", + vec![ + NBT::string("Name", &format!("§7{}", player.profile.username)), + NBT::list_from_string("Lore", item_name.to_fstring()), + ], + ), + NBT::compound( + "SkullOwner", + vec![ + NBT::string("Id", player.profile.uuid.to_fstring()), + NBT::compound( + "Properties", + vec![NBT::list( + "textures", + TAG_COMPOUND_ID, + vec![NBTNode::Compound(HashMap::from([( + "Value".into(), + NBTNode::String( + player.profile.properties["textures"].value.clone(), + ), + )]))], + )], + ), + ], + ), + ])), + }); + items[13] = Some(ItemStack { + item: 95, + stack_size: 1, + metadata: color, + tag_compound: Some(NBT::with_nodes(vec![NBT::compound( + "display", + vec![NBT::string("Name", item_name)], + )])), + }); + + items + } + + fn click_window(&mut self, player: &mut Player, packet: &ClickWindow) { + match packet.slot_id { + 4 | 13 => DungeonPlayer::ready(player), + // 49 => { + // close + // }, + _ => {} + } + } +} diff --git a/src/dungeon/mod.rs b/src/dungeon/mod.rs index aba6f65..695e1b8 100644 --- a/src/dungeon/mod.rs +++ b/src/dungeon/mod.rs @@ -1,6 +1,9 @@ +pub mod dungeon; +pub mod dungeon_player; pub mod room; pub mod door; -pub mod crushers; -pub mod dungeon_state; -pub mod dungeon; -pub mod map; \ No newline at end of file +mod items; +mod map; +pub mod menus; +pub mod entities; +pub mod seeded_rng; \ No newline at end of file diff --git a/src/dungeon/room/mod.rs b/src/dungeon/room/mod.rs index 675189b..9097d5d 100644 --- a/src/dungeon/room/mod.rs +++ b/src/dungeon/room/mod.rs @@ -1,3 +1,2 @@ pub mod room; -pub mod room_data; -pub mod secrets; \ No newline at end of file +pub mod room_data; \ No newline at end of file diff --git a/src/dungeon/room/room.rs b/src/dungeon/room/room.rs index 425fa0e..9941652 100644 --- a/src/dungeon/room/room.rs +++ b/src/dungeon/room/room.rs @@ -1,386 +1,282 @@ -use crate::dungeon::crushers::Crusher; -use crate::dungeon::door::Door; +use crate::dungeon::door::door::Door; use crate::dungeon::dungeon::DUNGEON_ORIGIN; -use crate::dungeon::room::room_data::{RoomData, RoomShape, RoomType}; -use crate::server::block::block_position::BlockPos; -use crate::server::block::blocks::Blocks; -use crate::server::block::rotatable::Rotatable; -use crate::server::utils::aabb::AABB; -use crate::server::utils::direction::Direction; -use crate::server::utils::dvec3::DVec3; -use crate::server::world::World; -use std::collections::HashSet; - -#[derive(Debug)] +use crate::dungeon::room::room_data::RoomData; +use glam::{dvec3, ivec3, IVec3}; +use server::block::blocks::Blocks; +use server::block::rotatable::Rotatable; +use server::types::aabb::AABB; +use server::types::direction::Direction; +use server::world::chunk::chunk_grid::ChunkGrid; +use server::ClientId; +use std::cell::RefCell; +use std::collections::{HashMap, HashSet}; +use std::rc::Rc; + pub struct RoomSegment { pub x: usize, pub z: usize, - pub neighbours: [Option; 4] + pub neighbours: [Option; 4], + pub player_ref_count: usize, } -#[derive(Debug)] pub struct RoomNeighbour { - pub door_index: usize, - pub room_index: usize, + pub room: Rc>, + pub door: Rc> } -#[derive(Debug)] pub struct RoomBounds { pub aabb: AABB, pub segment_index: Option } -#[derive(Debug)] pub struct Room { pub segments: Vec, pub room_bounds: Vec, - pub room_data: RoomData, + pub rotation: Direction, + pub data: RoomData, - pub tick_amount: u32, - pub crushers: Vec, - - pub entered: bool, + pub discovered: bool, + // idk if a bool value, + pub completed: bool, + + // usize is index of the section they're in + pub players: HashMap> } impl Room { - + pub fn new( - mut segments: Vec, - dungeon_doors: &[Door], - room_data: RoomData - ) -> Room { - // Sort room segments by z and then x - segments.sort_by(|a, b| a.z.cmp(&b.z)); - segments.sort_by(|a, b| a.x.cmp(&b.x)); - - let rotation = Room::get_rotation_from_segments(&segments, dungeon_doors); - let corner_pos = Room::get_corner_pos_from(&segments, &rotation, &room_data); - - let crushers = room_data.crusher_data.iter().map(|data| { - let mut crusher = Crusher::from_json(data); - - crusher.direction = crusher.direction.rotate(rotation); - crusher.block_pos = crusher.block_pos.rotate(rotation); - - // This is fucking aids - match rotation { - Direction::North => match crusher.direction { - Direction::East | Direction::West => crusher.block_pos.add_z(crusher.width - 1), - _ => crusher.block_pos.add_x(crusher.width - 1), - }, - Direction::South => match crusher.direction { - Direction::East | Direction::West => crusher.block_pos.add_z(-crusher.width + 1), - _ => crusher.block_pos.add_x(-crusher.width + 1), - } - _ => crusher.block_pos, - }; - - crusher.block_pos = crusher.block_pos - .add_x(corner_pos.x) - .add_z(corner_pos.z); - - crusher - }).collect::>(); - + segments: Vec, + room_data: RoomData, + ) -> Self { + let rotation = get_rotation_from_segments(&segments); let mut room_bounds: Vec = Vec::new(); for (index, segment) in segments.iter().enumerate() { - let x = (segment.x as i32 * 32 + DUNGEON_ORIGIN.0) as f64; + let x = (segment.x as i32 * 32 + DUNGEON_ORIGIN.x) as f64; let y = room_data.bottom as f64; - let z = (segment.z as i32 * 32 + DUNGEON_ORIGIN.1) as f64; + let z = (segment.z as i32 * 32 + DUNGEON_ORIGIN.y) as f64; let max_y = (room_data.bottom + room_data.height) as f64; room_bounds.push(RoomBounds { - aabb: AABB::new(DVec3::new(x, y, z), DVec3::new(x + 31.0, max_y, z + 31.0)), + aabb: AABB::new(dvec3(x, y, z), dvec3(x + 31.0, max_y, z + 31.0)), segment_index: Some(index), }); - - if segments.iter().find(|seg| seg.x == segment.x + 1 && seg.z == segment.z).is_some() { + if segments.iter().any(|seg| seg.x == segment.x + 1 && seg.z == segment.z) { let x = x + 31.0; - let z = z; room_bounds.push(RoomBounds { - aabb: AABB::new(DVec3::new(x, y, z), DVec3::new(x + 1.0, max_y, z + 31.0)), + aabb: AABB::new(dvec3(x, y, z), dvec3(x + 1.0, max_y, z + 31.0)), segment_index: None, }); } - if segments.iter().find(|seg| seg.x == segment.x && seg.z == segment.z + 1).is_some() { - let x = x; + if segments.iter().any(|seg| seg.x == segment.x && seg.z == segment.z + 1) { let z = z + 31.0; room_bounds.push(RoomBounds { - aabb: AABB::new(DVec3::new(x, y, z), DVec3::new(x + 31.0, max_y, z + 1.0)), + aabb: AABB::new(dvec3(x, y, z), dvec3(x + 31.0, max_y, z + 1.0)), segment_index: None, }); } - if segments.iter().find(|seg| seg.x == segment.x + 1 && seg.z == segment.z + 1).is_some() { + if segments.iter().any(|seg| seg.x == segment.x + 1 && seg.z == segment.z + 1) { let x = x + 31.0; let z = z + 31.0; room_bounds.push(RoomBounds { - aabb: AABB::new(DVec3::new(x, y, z), DVec3::new(x + 1.0, max_y, z + 1.0)), + aabb: AABB::new(dvec3(x, y, z), dvec3(x + 1.0, max_y, z + 1.0)), segment_index: None, }); } } - - Room { + + Self { segments, room_bounds, - room_data, rotation, - tick_amount: 0, - crushers, - entered: false, + data: room_data, + discovered: false, + completed: false, + players: HashMap::new(), } } - pub fn get_corner_pos(&self) -> BlockPos { - Room::get_corner_pos_from(&self.segments, &self.rotation, &self.room_data) + pub fn neighbours(&self) -> impl Iterator { + self.segments.iter().flat_map(|seg| seg.neighbours.iter().flatten()) } - pub fn get_corner_pos_from(segments: &[RoomSegment], rotation: &Direction, room_data: &RoomData) -> BlockPos { + pub fn get_corner_pos(&self) -> IVec3 { + Room::get_corner_pos_from(&self.segments, &self.rotation, &self.data) + } + + pub fn get_corner_pos_from( + segments: &[RoomSegment], + rotation: &Direction, + room_data: &RoomData + ) -> IVec3 { let min_x = segments.iter().min_by(|a, b| a.x.cmp(&b.x)).unwrap().x; let min_z = segments.iter().min_by(|a, b| a.z.cmp(&b.z)).unwrap().z; - let x = min_x as i32 * 32 + DUNGEON_ORIGIN.0; + let x = min_x as i32 * 32 + DUNGEON_ORIGIN.x; let y = 68; - let z = min_z as i32 * 32 + DUNGEON_ORIGIN.1; - + let z = min_z as i32 * 32 + DUNGEON_ORIGIN.y; + match rotation { - Direction::North => BlockPos { x, y, z }, - Direction::East => BlockPos { x: x + room_data.length - 1, y, z }, - Direction::South => BlockPos { x: x + room_data.length - 1, y, z: z + room_data.width - 1 }, - Direction::West => BlockPos { x: x, y, z: z + room_data.width - 1 }, + Direction::North => ivec3(x, y, z), + Direction::East => ivec3(x + room_data.length - 1, y, z), + Direction::South => ivec3(x + room_data.length - 1, y, z + room_data.width - 1), + Direction::West => ivec3(x, y, z + room_data.width - 1), _ => unreachable!(), } } + + pub fn load_into_world(&self, chunk_grid: &mut ChunkGrid) { + let corner = self.get_corner_pos(); - pub fn tick(&mut self) { - self.tick_amount += 1; - } - - pub fn get_1x1_shape_and_type(segments: &[RoomSegment], dungeon_doors: &[Door]) -> (RoomShape, Direction) { - let center_x = segments[0].x as i32 * 32 + 15 + DUNGEON_ORIGIN.0; - let center_z = segments[0].z as i32 * 32 + 15 + DUNGEON_ORIGIN.1; - - // Actual doors found in the world - let doors_opt = [ - (center_x, center_z - 16), - (center_x + 16, center_z), - (center_x, center_z + 16), - (center_x - 16, center_z) - ].iter().map(|pos| { - dungeon_doors.iter() - .find(|door| door.x == pos.0 && door.z == pos.1) - .is_some() - }).collect::>(); - - let mut num: u8 = 0; - for i in 0..4 { - num <<= 1; - num |= doors_opt[i] as u8; - } + for (index, block) in self.data.block_data.iter().enumerate() { + if *block == Blocks::Air { + continue; + } + // not sure if editing room data might ruin something, + // so to be safe im just cloning it + let mut block = *block; + block.rotate(self.rotation); - // println!("{:04b} {:?}", num, doors_opt); - - match num { - // Doors on all sides, never changes - 0b1111 => (RoomShape::OneByOneCross, Direction::North), - // Dead end 1x1 - 0b1000 => (RoomShape::OneByOneEnd, Direction::North), - 0b0100 => (RoomShape::OneByOneEnd, Direction::East), - 0b0010 => (RoomShape::OneByOneEnd, Direction::South), - 0b0001 => (RoomShape::OneByOneEnd, Direction::West), - // Opposite doors - 0b0101 => (RoomShape::OneByOneStraight, Direction::North), - 0b1010 => (RoomShape::OneByOneStraight, Direction::East), - // L bend - 0b0011 => (RoomShape::OneByOneBend, Direction::North), - 0b1001 => (RoomShape::OneByOneBend, Direction::East), - 0b1100 => (RoomShape::OneByOneBend, Direction::South), - 0b0110 => (RoomShape::OneByOneBend, Direction::West), - // Triple door - 0b1011 => (RoomShape::OneByOneTriple, Direction::North), - 0b1101 => (RoomShape::OneByOneTriple, Direction::East), - 0b1110 => (RoomShape::OneByOneTriple, Direction::South), - 0b0111 => (RoomShape::OneByOneTriple, Direction::West), - - _ => (RoomShape::OneByOne, Direction::North), - } - } + let index = index as i32; - pub fn get_rotation_from_segments(segments: &[RoomSegment], dungeon_doors: &[Door]) -> Direction { - let unique_x = segments.iter() - .map(|segment| segment.x) - .collect::>(); - let unique_z = segments.iter() - .map(|segment| segment.z) - .collect::>(); - - let not_long = unique_x.len() > 1 && unique_z.len() > 1; - - match segments.len() { - 1 => { - let (_, direction) = Room::get_1x1_shape_and_type(segments, dungeon_doors); - direction - }, - 2 => match unique_z.len() == 1 { - true => Direction::North, - false => Direction::East, - }, - 3 => { - // L room - if not_long { - let corner_value = segments.iter().find(|x| { - segments.iter().all(|y| { - x.x.abs_diff(y.x) + x.z.abs_diff(y.z) <= 1 - }) - }).expect("Invalid L room: Segments:"); - - let min_x = segments.iter().min_by(|a, b| a.x.cmp(&b.x)).unwrap().x; - let min_z = segments.iter().min_by(|a, b| a.z.cmp(&b.z)).unwrap().z; - let max_x = segments.iter().max_by(|a, b| a.x.cmp(&b.x)).unwrap().x; - let max_z = segments.iter().max_by(|a, b| a.z.cmp(&b.z)).unwrap().z; - - if corner_value.x == min_x && corner_value.z == min_z { - return Direction::East - } - if corner_value.x == max_x && corner_value.z == min_z { - return Direction::South - } - if corner_value.x == max_x && corner_value.z == max_z { - return Direction::West - } - return Direction::North - } + let x = index % self.data.width; + let z = (index / self.data.width) % self.data.length; + let y = self.data.bottom + index / (self.data.width * self.data.length); - match unique_z.len() == 1 { - true => Direction::North, - false => Direction::East, - } - }, - 4 => { - if unique_x.len() == 2 && unique_z.len() == 2 { - return Direction::North - } + let bp = ivec3(x, y, z).rotate(self.rotation); - match unique_z.len() == 1 { - true => Direction::North, - false => Direction::East, - } - }, - _ => unreachable!(), + chunk_grid.set_block_at(block, corner.x + bp.x, y, corner.z + bp.z); } } - fn load_default(&self, world: &mut World) { - for segment in self.segments.iter() { - - // Temporary for room colors, will be changed later on to paste saved room block states - let block = match self.room_data.room_type { - RoomType::Normal => Blocks::Stone { variant: 0 }, - RoomType::Blood => Blocks::Stone { variant: 0 }, - RoomType::Entrance => Blocks::Stone { variant: 0 }, - RoomType::Fairy => Blocks::Stone { variant: 0 }, - RoomType::Trap => Blocks::Stone { variant: 0 }, - RoomType::Yellow => Blocks::Stone { variant: 0 }, - RoomType::Puzzle => Blocks::Stone { variant: 0 }, - RoomType::Rare => Blocks::Stone { variant: 0 }, - }; - - world.fill_blocks( - block, - BlockPos { - x: segment.x as i32 * 32 + DUNGEON_ORIGIN.0, - y: self.room_data.bottom, - z: segment.z as i32 * 32 + DUNGEON_ORIGIN.1, - }, - BlockPos { - x: segment.x as i32 * 32 + DUNGEON_ORIGIN.0 + 30, - y: self.room_data.bottom, - z: segment.z as i32 * 32 + DUNGEON_ORIGIN.1 + 30, - } - ); - - // Merge to the side - // if self.segments.contains(&(x+1, *z)) { - // world.fill_blocks( - // block, - // BlockPos { - // x: *x as i32 * 32 + 31 + DUNGEON_ORIGIN.0, - // y: self.room_data.bottom, - // z: *z as i32 * 32 + DUNGEON_ORIGIN.1, - // }, - // BlockPos { - // x: *x as i32 * 32 + 31 + DUNGEON_ORIGIN.0, - // y: self.room_data.bottom, - // z: *z as i32 * 32 + DUNGEON_ORIGIN.1 + 30, - // } - // ); - // } - // - // // // Merge below - // if self.segments.contains(&(*x, z+1)) { - // world.fill_blocks( - // block, - // BlockPos { - // x: *x as i32 * 32 + DUNGEON_ORIGIN.0, - // y: self.room_data.bottom, - // z: *z as i32 * 32 + 31 + DUNGEON_ORIGIN.1, - // }, - // BlockPos { - // x: * x as i32 * 32 + DUNGEON_ORIGIN.0 + 30, - // y: self.room_data.bottom, - // z: *z as i32 * 32 + 31 + DUNGEON_ORIGIN.1 + 30, - // } - // ); - // } + pub fn add_player_ref(&mut self, client_id: ClientId, segment: Option) { + debug_assert!(!self.players.contains_key(&client_id), "player already in room"); + self.players.insert(client_id, segment); + if let Some(segment) = segment { + self.segments[segment].player_ref_count += 1; } } - pub fn load_into_world(&self, world: &mut World) { - if self.room_data.block_data.is_empty() { - self.load_default(world); - return; - } - - let corner = self.get_corner_pos(); - - for (i, block) in self.room_data.block_data.iter().enumerate() { - if *block == Blocks::Air { - continue; - } - // not sure if editing room data might ruin something, - // so to be safe im just cloning it - let mut block = block.clone(); - block.rotate(self.rotation); - - let ind = i as i32; + pub fn remove_player_ref(&mut self, client_id: ClientId) { + debug_assert!(self.players.contains_key(&client_id), "player wasn't in the room"); + let segment = self.players.remove(&client_id).unwrap(); - let x = ind % self.room_data.width; - let z = (ind / self.room_data.width) % self.room_data.length; - let y = self.room_data.bottom + ind / (self.room_data.width * self.room_data.length); + if let Some(segment) = segment { + self.segments[segment].player_ref_count -= 1; + } + } - let bp = BlockPos { x, y, z }.rotate(self.rotation); + pub fn update_player_segment(&mut self, client_id: ClientId, new: Option) { + let old = self.players.get_mut(&client_id).unwrap(); + debug_assert!(*old != new, "tried updated player section, when section hasn't changed"); - world.set_block_at(block, corner.x + bp.x, y, corner.z + bp.z); + if let Some(segment) = *old { + self.segments[segment].player_ref_count -= 1; + }; + if let Some(segment) = new { + self.segments[segment].player_ref_count += 1; } + *old = new; } - // pub fn get_world_pos(&self, position: DVec3) -> DVec3 { - // let corner = self.get_corner_pos(); - // position.clone() - // .rotate(self.rotation) - // .add_x(corner.x as f64) - // .add_z(corner.z as f64) - // } - - pub fn get_world_block_pos(&self, room_pos: &BlockPos) -> BlockPos { + pub fn get_world_block_position(&self, room_position: IVec3) -> IVec3 { let corner = self.get_corner_pos(); - - room_pos.clone() - .rotate(self.rotation) - .add_x(corner.x) - .add_z(corner.z) + let mut position = room_position.rotate(self.rotation); + position.x += corner.x; + position.z += corner.z; + position } } +fn get_rotation_from_segments(segments: &[RoomSegment]) -> Direction { + let unique_x = segments.iter() + .map(|segment| segment.x) + .collect::>(); + let unique_z = segments.iter() + .map(|segment| segment.z) + .collect::>(); + + let not_long = unique_x.len() > 1 && unique_z.len() > 1; + + match segments.len() { + 1 => { + let segment = &segments[0]; + let mut bitmask: u8 = 0; + for index in 0..4 { + bitmask <<= 1; + bitmask |= segment.neighbours[index].is_some() as u8 + } + match bitmask { + // Doors on all sides, never changes + 0b1111 => Direction::North, + // Dead end 1x1 + 0b1000 => Direction::North, + 0b0100 => Direction::East, + 0b0010 => Direction::South, + 0b0001 => Direction::West, + // Opposite doors + 0b0101 => Direction::North, + 0b1010 => Direction::East, + // L bend + 0b0011 => Direction::North, + 0b1001 => Direction::East, + 0b1100 => Direction::South, + 0b0110 => Direction::West, + // Triple door + 0b1011 => Direction::North, + 0b1101 => Direction::East, + 0b1110 => Direction::South, + 0b0111 => Direction::West, + _ => Direction::North, + } + } + 2 => match unique_z.len() == 1 { + true => Direction::North, + false => Direction::East, + }, + 3 => { + // L room + if not_long { + let corner_value = segments.iter().find(|x| { + segments.iter().all(|y| { + x.x.abs_diff(y.x) + x.z.abs_diff(y.z) <= 1 + }) + }).expect("Invalid L room: Segments:"); + + let min_x = segments.iter().min_by(|a, b| a.x.cmp(&b.x)).unwrap().x; + let min_z = segments.iter().min_by(|a, b| a.z.cmp(&b.z)).unwrap().z; + let max_x = segments.iter().max_by(|a, b| a.x.cmp(&b.x)).unwrap().x; + let max_z = segments.iter().max_by(|a, b| a.z.cmp(&b.z)).unwrap().z; + + if corner_value.x == min_x && corner_value.z == min_z { + return Direction::East + } + if corner_value.x == max_x && corner_value.z == min_z { + return Direction::South + } + if corner_value.x == max_x && corner_value.z == max_z { + return Direction::West + } + return Direction::North + } + + match unique_z.len() == 1 { + true => Direction::North, + false => Direction::East, + } + }, + 4 => { + if unique_x.len() == 2 && unique_z.len() == 2 { + return Direction::North + } + + match unique_z.len() == 1 { + true => Direction::North, + false => Direction::East, + } + }, + _ => unreachable!(), + } +} \ No newline at end of file diff --git a/src/dungeon/room/room_data.rs b/src/dungeon/room/room_data.rs index d4d8385..1297eb1 100644 --- a/src/dungeon/room/room_data.rs +++ b/src/dungeon/room/room_data.rs @@ -1,20 +1,21 @@ -use crate::dungeon::door::Door; use crate::dungeon::room::room::{Room, RoomSegment}; -use crate::server::block::blocks::Blocks; -use crate::utils::hasher::deterministic_hasher::DeterministicHashMap; -use crate::utils::seeded_rng::seeded_rng; +use crate::dungeon::seeded_rng::seeded_rng; use rand::seq::IteratorRandom; use serde_json::Value; +use server::block::blocks::Blocks; +use server::utils::hasher::deterministic_hasher::DeterministicHashMap; +use std::cell::RefCell; use std::collections::HashSet; +use std::rc::Rc; #[derive(Debug, Clone, PartialEq)] pub enum RoomShape { - OneByOne, // Fairy room, doors can vary - OneByOneEnd, // A dead end, only one door - OneByOneCross, // Four doors + OneByOne, // Fairy room, doors can vary + OneByOneEnd, // A dead end, only one door + OneByOneCross, // Four doors OneByOneStraight, // Two doors opposite each other - OneByOneBend, // Two doors making an L bend - OneByOneTriple, // Two opposite with one in the middle + OneByOneBend, // Two doors making an L bend + OneByOneTriple, // Two opposite with one in the middle OneByTwo, OneByThree, @@ -42,13 +43,14 @@ impl RoomShape { } } - pub fn from_segments(segments: &[RoomSegment], dungeon_doors: &[Door]) -> RoomShape { - - let unique_x = segments.iter() + pub fn from_segments(segments: &[RoomSegment]) -> RoomShape { + let unique_x = segments + .iter() .map(|segment| segment.x) .collect::>(); - let unique_z = segments.iter() + let unique_z = segments + .iter() .map(|segment| segment.z) .collect::>(); @@ -57,10 +59,37 @@ impl RoomShape { // Impossible for rooms to have < 1 or > 4 segments match segments.len() { 1 => { - let (shape, _) = Room::get_1x1_shape_and_type(segments, dungeon_doors); - - shape - }, + let segment = &segments[0]; + let mut bitmask: u8 = 0; + for index in 0..4 { + bitmask <<= 1; + bitmask |= segment.neighbours[index].is_some() as u8 + } + match bitmask { + // Doors on all sides, never changes + 0b1111 => RoomShape::OneByOneCross, + // Dead end 1x1 + 0b1000 => RoomShape::OneByOneEnd, + 0b0100 => RoomShape::OneByOneEnd, + 0b0010 => RoomShape::OneByOneEnd, + 0b0001 => RoomShape::OneByOneEnd, + // Opposite doors + 0b0101 => RoomShape::OneByOneStraight, + 0b1010 => RoomShape::OneByOneStraight, + // L bend + 0b0011 => RoomShape::OneByOneBend, + 0b1001 => RoomShape::OneByOneBend, + 0b1100 => RoomShape::OneByOneBend, + 0b0110 => RoomShape::OneByOneBend, + // Triple door + 0b1011 => RoomShape::OneByOneTriple, + 0b1101 => RoomShape::OneByOneTriple, + 0b1110 => RoomShape::OneByOneTriple, + 0b0111 => RoomShape::OneByOneTriple, + + _ => RoomShape::OneByOne, + } + } 2 => RoomShape::OneByTwo, 3 => match not_long { true => RoomShape::L, @@ -113,6 +142,7 @@ pub struct RoomData { pub width: i32, pub length: i32, pub height: i32, + // do we need to keep this once loaded into world? pub block_data: Vec, pub crusher_data: Vec, // Needs to be parsed when rooms are generated } @@ -130,18 +160,21 @@ impl RoomData { let length = json_data["length"].as_number().unwrap().as_u64().unwrap() as i32; let height = json_data["height"].as_number().unwrap().as_u64().unwrap() as i32; - let crusher_data: Vec = json_data["crushers"].as_array().unwrap_or(&Vec::new()).to_vec(); + let crusher_data: Vec = json_data["crushers"] + .as_array() + .unwrap_or(&Vec::new()) + .to_vec(); let hex_data = json_data["block_data"].as_str().unwrap(); let mut block_data: Vec = Vec::new(); for i in (0..hex_data.len()).step_by(4) { - let hex_str = hex_data.get(i..i+4).unwrap(); - + let hex_str = hex_data.get(i..i + 4).unwrap(); + let num = u16::from_str_radix(hex_str, 16).unwrap(); let block = Blocks::from(num); - + block_data.push(block) } @@ -179,16 +212,16 @@ pub fn get_random_data_with_type( room_type: RoomType, room_shape: RoomShape, data_storage: &DeterministicHashMap, - current_rooms: &[Room], + current_rooms: &[Rc>], ) -> RoomData { - data_storage.iter() + data_storage + .values() .filter(|data| { - data.1.room_type == room_type && - data.1.shape == room_shape && - !current_rooms.iter().any(|room| room.room_data == *data.1) // No duplicate rooms + data.room_type == room_type + && data.shape == room_shape + && !current_rooms.iter().any(|room| room.borrow().data == **data) // No duplicate rooms }) - .map(|x| x.1) .choose(&mut seeded_rng()) .unwrap_or(&RoomData::dummy()) .clone() -} \ No newline at end of file +} diff --git a/src/dungeon/room/secrets.rs b/src/dungeon/room/secrets.rs deleted file mode 100644 index 8a21a1a..0000000 --- a/src/dungeon/room/secrets.rs +++ /dev/null @@ -1,298 +0,0 @@ -use crate::server::block::block_interact_action::BlockInteractAction; -use crate::server::block::block_position::BlockPos; -use crate::server::block::blocks::Blocks; -use crate::server::entity::entity::NoEntityImpl; -use crate::server::entity::entity_metadata::{EntityMetadata, EntityVariant}; -use crate::server::items::item_stack::ItemStack; -use crate::server::player::player::Player; -use crate::server::utils::aabb::AABB; -use crate::server::utils::direction::Direction; -use crate::server::utils::dvec3::DVec3; -use crate::server::world::World; -use std::cell::{RefCell, RefMut}; -use std::rc::Rc; - -pub enum SecretType { - WitherEssence { - // have rotation here - }, - Chest { - direction: Direction - }, - Item { - item: ItemStack - }, - // ill do this one later - Bat, -} - -pub struct DungeonSecret { - secret_type: SecretType, - block_pos: BlockPos, // might not even need? - spawn_aabb: AABB, - pub has_spawned: bool, - pub obtained: bool, -} - -// when this is integrated into rooms, remove this and just inline the spawning stuff -pub fn tick(dungeon_secret: &Rc>, player: &Player) { - let mut secret = dungeon_secret.borrow_mut(); - if !secret.has_spawned && player.collision_aabb().intersects(&secret.spawn_aabb) { - secret.has_spawned = true; - DungeonSecret::spawn_into_world(dungeon_secret, secret, player.world_mut()) - } -} - -impl DungeonSecret { - - pub fn new(secret_type: SecretType, position: BlockPos, spawn_radius: f64) -> Self { - Self { - secret_type, - block_pos: position, - spawn_aabb: { - let (x, y, z) = (position.x as f64, position.y as f64, position.z as f64); - AABB { - min: DVec3::new(x - spawn_radius, y - spawn_radius, z - spawn_radius), - max: DVec3::new(x + spawn_radius, y + spawn_radius, z + spawn_radius), - } - }, - has_spawned: false, - obtained: false, - } - } - - fn spawn_into_world( - secret_rc: &Rc>, - secret: RefMut, - world: &mut World - ) { - match &secret.secret_type { - SecretType::WitherEssence { .. } => { - world.set_block_at( - Blocks::Skull { direction: Direction::Up, no_drop: false }, - secret.block_pos.x, - secret.block_pos.y, - secret.block_pos.z - ); - world.interactable_blocks.insert(secret.block_pos, BlockInteractAction::WitherEssence { - secret: secret_rc.clone() - }); - } - SecretType::Chest { direction } => { - world.set_block_at( - Blocks::Chest { direction: direction.clone() }, - secret.block_pos.x, - secret.block_pos.y, - secret.block_pos.z, - ); - world.interactable_blocks.insert(secret.block_pos, BlockInteractAction::Chest { - secret: secret_rc.clone() - }); - } - SecretType::Item { item } => { - world.spawn_entity( - DVec3::from_centered(&secret.block_pos), - EntityMetadata::new(EntityVariant::DroppedItem { - item: item.clone() - }), - NoEntityImpl, - ).unwrap(); - } - SecretType::Bat => {} - } - } - - pub fn player_collides(&mut self, player: &Player) -> bool { - player.collision_aabb().intersects(&self.spawn_aabb) - } -} - -// pub struct ItemSecretEntity; -// -// // this isn't necessarily a secret, simply an animation for one, can be re-used for blessings -// impl EntityImpl for ItemSecretEntity { -// fn spawn(&mut self, entity: &mut Entity, buffer: PacketBuffer) { -// let metadata_packet = &PacketEntityMetadata { -// entity_id: VarInt(entity.id), -// metadata: entity.metadata.clone(), -// }; -// let velocity_packet = &EntityVelocity { -// entity_id: VarInt(entity.id), -// velocity_x: 0, -// velocity_y: 0, -// velocity_z: 0, -// }; -// for player in entity.world_mut().players.values_mut() { -// player.write_packet(metadata_packet); -// player.write_packet(velocity_packet); -// } -// } -// -// fn tick(&mut self, entity: &mut Entity) { -// if entity.ticks_existed == 20 { -// // this makes sure entity is on ground and prevents it jitter-ing in air -// entity.position.y -= 0.5; -// } else if entity.ticks_existed % 20 == 0 { -// // re-sync position and velocity, -// // since it is really easy for item drop to de-sync -// entity.last_position = DVec3::ZERO; -// -// for player in entity.world_mut().players.values_mut() { -// player.write_packet(&EntityVelocity { -// entity_id: VarInt(entity.id), -// velocity_x: 0, -// velocity_y: 0, -// velocity_z: 0, -// }); -// } -// } -// -// // todo get correct values -// const W: f64 = 3.0; -// const H: f64 = 3.0; -// -// let aabb = AABB::new( -// DVec3::new(entity.position.x - W, entity.position.y - H, entity.position.z - W), -// DVec3::new(entity.position.x + W, entity.position.y + H, entity.position.z + W), -// ); -// for player in entity.world_mut().players.values_mut() { -// if player.collision_aabb().intersects(&aabb) { -// player.write_packet(&CollectItem { -// item_entity_id: VarInt(entity.id), -// entity_id: VarInt(player.entity_id), -// }); -// player.write_packet(&SoundEffect { -// sound: "random.pop", -// pos_x: player.position.x, -// pos_y: player.position.y, -// pos_z: player.position.z, -// volume: 0.2, -// pitch: 1.7619047, -// }); -// entity.world_mut().despawn_entity(entity.id); -// break; -// } -// } -// } -// -// } -// -// pub struct EssenceEntity; -// -// impl EntityImpl for EssenceEntity { -// -// fn spawn(&mut self, entity: &mut Entity) { -// for player in entity.world_mut().players.values_mut() { -// player.write_packet(&EntityEquipment { -// entity_id: VarInt(entity.id), -// item_slot: 4, -// item_stack: Some(ItemStack { -// item: 397, -// stack_size: 1, -// metadata: 3, -// tag_compound: Some(NBT::with_nodes(vec![ -// NBT::compound("SkullOwner", vec![ -// NBT::string("Name", ""), -// NBT::string("Id", "e0f3e929-869e-3dca-9504-54c666ee6f23"), -// NBT::compound("Properties", vec![ -// NBT::list("textures", TAG_COMPOUND_ID,vec![ -// NBTNode::Compound({ -// let mut map = HashMap::new(); -// map.insert("Value".into(), NBTNode::String("ewogICJ0aW1lc3RhbXAiIDogMTYwMzYxMDQ0MzU4MywKICAicHJvZmlsZUlkIiA6ICIzM2ViZDMyYmIzMzk0YWQ5YWM2NzBjOTZjNTQ5YmE3ZSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEYW5ub0JhbmFubm9YRCIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS9lNDllYzdkODJiMTQxNWFjYWUyMDU5Zjc4Y2QxZDE3NTRiOWRlOWIxOGNhNTlmNjA5MDI0YzRhZjg0M2Q0ZDI0IgogICAgfQogIH0KfQ==".into())); -// map.insert("Signature".into(), NBTNode::String("Mnf7PDLe+FPiO+wQ2St6XNRiiIXtZ3GuPTcLlM7pNQ6d6MXuzI7xXG24qaAMFuVwMB+F3dLYcaFlc+bWyi3Qm9msSq2mMUXdvzTamAslZHcdcTFNpppkYgdvkOhWK7W/amQyd2Q+pLDECe8Mg6gxBY17+xfaWlIynzEWEmHR+ye+hTC44kgiTZaYiRg7gpU002deY8WpX875cc5zJIroxVR52qHIV+suIMPwq47mpCp520J9R1HuYvvP/V3+PwL7skMlC1F/HHkG5A13fvSKMqq9XMsdqXR8qvWlcL5IQTS7ijtD9TZo8jcmhz/7HCXuJ912I1GqJp4hZ0Lqa0NB0TuI/giHr2i4yNzORe6oan47bpMXLoZWIrYZIOsF6wSObhwniF1jM/zUEkum9XswRImIvYYlmyLH+Kkh5uQJm244rOLPXmOZEid6PW5bhaSRpMOMpxboeOtjLbGC56Ev+DwoI37SrAYY6/LC7HwjVhvkcsLd/9BrF+Wl10bdLdsJEbd+TII59/45MM1x7+xgeAFU/ip0TjkMPfRLdNmfxOGssMFZOaM55iOb+8t4tOvXxnqeXpFCByDgPnqKV5zPXS1XMF2+5qEAv7ZKrqK8BLAHbWsKHHOMt1hJ8K+EgYfRDKq72YvN01ST288ysUv8b5stRu8O5uC+KvZXtnlGrKc=".into())); -// map -// }) -// ]) -// ]) -// ]), -// ])), -// }), -// }); -// } -// } -// -// fn tick(&mut self, entity: &mut Entity) { -// entity.position.y += 0.04; -// entity.yaw += 15.0; -// -// if entity.ticks_existed % 5 == 0 { -// // todo, constants -// let particle_packet = Particles { -// particle_id: 29, -// long_distance: true, -// x: entity.position.x as f32, -// y: entity.position.y as f32 + 1.5, -// z: entity.position.z as f32, -// offset_x: 0.0, -// offset_y: 0.0, -// offset_z: 0.0, -// speed: 0.06, -// count: 5, -// }; -// let sound_packet = SoundEffect { -// sound: "note.harp", -// pos_x: entity.position.x, -// pos_y: entity.position.y + 1.5, -// pos_z: entity.position.z, -// volume: 1.0, -// pitch: 0.8 + ((entity.ticks_existed / 5) as f32 * 0.1), -// }; -// for player in entity.world_mut().players.values_mut() { -// player.write_packet(&particle_packet); -// player.write_packet(&sound_packet); -// } -// } -// -// if entity.ticks_existed == 20 { -// let sound_packet = SoundEffect { -// sound: "random.orb", -// pos_x: entity.position.x, -// pos_y: entity.position.y, -// pos_z: entity.position.z, -// volume: 1.0, -// pitch: 1.5, -// }; -// for player in entity.world_mut().players.values_mut() { -// // for whatever reason, this sent twice on hypixel -// player.write_packet(&sound_packet); -// player.write_packet(&sound_packet); -// } -// entity.world_mut().despawn_entity(entity.id); -// } -// } -// } - -/* -door success -[12:55:46] sound note.pling, 8.0 4.047619 -140.75 69.0 -154.75 -[12:55:47] Stivais opened a WITHER door! - -door fail -[12:58:06] sound mob.endermen.portal, 8.0 0.0 -58.0 69.0 -171.75 -[12:58:06] You do not have the key for this door! -*/ - -/* -unrelated to secrets, but this is dungeon countdown -[12:43:22] Stivais is now ready! -[12:43:22] sound random.click, 0.55 2.0 -119.625 69.0 -173.375 -[12:43:22] Starting in 4 seconds. -[12:43:23] sound random.click, 0.55 2.0 -117.75 69.0 -172.375 -[12:43:23] Starting in 3 seconds. -[12:43:24] sound random.click, 0.55 2.0 -118.75 69.0 -173.0 -[12:43:24] Starting in 2 seconds. -[12:43:25] sound random.click, 0.55 2.0 -118.75 69.0 -173.0 -[12:43:25] Starting in 1 second. -[12:43:26] sound mob.enderdragon.growl, 1.0 1.0 -118.75 69.0 -173.0 -*/ - -/* -[12:43:26] sound mob.villager.haggle, 1.0 0.6984127 -118.75 69.0 -173.0 -[12:43:26] §e[NPC] §bMort§f: Here, I found this map when I first entered the dungeon. - -[12:43:28] sound mob.villager.haggle, 1.0 0.6984127 -117.875 69.0 -175.875 -[12:43:28] §e[NPC] §bMort§f: You should find it useful if you get lost. -[12:43:29] sound mob.villager.haggle, 1.0 0.6984127 -110.875 71.0 -184.375 -[12:43:29] §e[NPC] §bMort§f: Good luck. - -*/ \ No newline at end of file diff --git a/src/utils/seeded_rng.rs b/src/dungeon/seeded_rng.rs similarity index 91% rename from src/utils/seeded_rng.rs rename to src/dungeon/seeded_rng.rs index 7394987..cc8dfa2 100644 --- a/src/utils/seeded_rng.rs +++ b/src/dungeon/seeded_rng.rs @@ -1,11 +1,10 @@ -use crate::utils::hasher::wyrand::WyRandRNG; use rand::RngCore; +use server::utils::hasher::wyrand::WyRandRNG; use std::cell::UnsafeCell; use std::rc::Rc; + // this can be moved to a value inside the dungeon type (since all rng should be per dungeon) if ever needed but itd need to be passed through to every function that needs it. -// it would also avoid the Rc overhead (and unsafecell but i think thats basically 0 overhead). // technically doesnt need to be thread local since its only used in the main thread, but it does need it to call non const functions in the static... - // this is basically a 1:1 copy of rand::ThreadRng but with a seed, thus its logic of unsafeCell usage applies here as well. /// A thread-local RNG that can be seeded. diff --git a/src/dungeon_storage/dungeons.txt b/src/dungeon_storage/dungeons.txt deleted file mode 100644 index 8fc8e75..0000000 --- a/src/dungeon_storage/dungeons.txt +++ /dev/null @@ -1,20991 +0,0 @@ -060108080200091008041100121213041100121213031100141413151100141404160500999190399190109990999990099999999999290999999990999909999009 -080803090900080804101100021213101100141204101100141415101600061701040500929999999099999919099990099199999999999909099100990300909999 -080805030900080810090900111210021300111410040600151610171800150104181804909299999999999990991990119999999090999099090109993009999990 -050108090904100808090900111112121200111302140400151617140600181804140300999900399991909919099999999999999111090099999090909099999929 -080904101004080902100300080905110600080912131300141512121600040117181600999909909299119999999999909990099090999199990099903099999009 -080801040900080810101000060211121300141411051500141611171804031617170400999099939099099909910991199919909999099999099009029990999999 -050808010900040808100900110412131300111402131300111515161704031518180600099999993990990999019909999990999111999099099990029900999999 -080804091000010811121200131311021200141511160500061511161700041504160300990099999090009990999999909999109099990999999091999092909999 -080601030900081011050900081010020900081213130900141516161700040416041700999299039999109999999909119900999999990090099999900909999999 -080503090400101011091200101002091300141506091304161616171700040118181700092990999099910999199991999199999909901099099909903099999999 -030408091000110608091000120508091000131408091500021617181504161601181804909992999999099919999999999109909990091090999109019399999990 -080109091004081109091004081212051004131412060200151616171800151616190300999909399990191090999999090099919099090099199991999919999929 -050803090400061009091100121202131100121204131100011414131100041514161600092999099090999990199999199999999909999099993910999990900999 -080808080400090210101000090411110300091204131300141516171300050106171700999090999991199990199999929999999109999190990009903099999999 -040808080300090210111104121205111300141215161300061717171300181801191304999290919990199091999999999990099090990109999999990309999900 -040803090900101010020900110412130600111413130400111516171700051501171700092999099999911999190990999991999909099010990999999399909999 -040808091004050808111010031212041306041212041415161602141415171818180115099009990990909999990929909999900099909010999999909113999999 -030809041011041213041014051202041414151216161717151216161717151818060104219099919900990099199999099091909999199999999999990003009999 -040808080806090905041004091111121313141402151313140316171717041818180104099909999099099999900099999090099919999910092999909113099999 -050401080910111213080810141515151516021704180616191920182121191903182121999900039091109919999009999199909009991999999000999999992999 -080809011004080809111213051414111516021714111816191920200616032120200416909909993099910009199099909919909199991909099999991999929909 -040608090903101111121213101111021213101415151504101617041804050119191919990990009929999199919999199910999999909199990099003000999999 -050809090310011112091010131414150216131414170416131819042016131819060416099929009993099991991909110999999990909990990099099990999099 -080808091010051112090913141415151516031417170418060217171920212121210104999999909900009999909099999299090999909199900191099903099999 -050808040904030808101111120613141111121513161718120213191720212113012020099009999099909929909999909909990901009991901199990939999999 -040809090104060808051011121313131314121516021704121518181919041518031919099999909300990199099109991999190091099919099999999999909299 -040809090104050409091011121314151516121314041516121714031802120414061818009999999309099109099199090999999909099999910092999999190099 -050408080104091008081111061010121104131313131404031515161717041818021717909990999300990999909099099099019999999999102919999919909019 -080909041004061112101003131312141415131312141415161712180515041701192002099900090999099999909290999999999999999990990019909310199911 -080109101011081213101004081213131414081515020414161515170306160405181920990909309900199999990999999909109999990991999999999912009010 -080808080406030509101111120909131111121202141414150416171717151819040104999099900909099929909999909999909911999999919909990003000999 -080808010400091010111200091013141400050613141400030402151600171717170400999999903099900999919909199009999999999910999090929190999999 -030408080909101011050909101202131313041414141415161718192015040619190115909092909999999999009911199999190999990900190099909993990999 -060808090909010808021004111213131415111213131605111703161618041904201818090999999993910099919990990999900099099029999999090999909009 -080809100304081112101302111112051414041512041414161612171717161618190106909299909909991199999190909999999099099099199909999903090099 -040503080910111208080910131313140915041616020917011816191917062021191917999990029999999900919099990090199999099991993999991099901190 -080404091004081102090300081213131300141415061600011417161600181818180500999109009290119991999999999910999990999909993009990999999909 -040808090903100808090911121212130414051516160214011716181920212121210620999990999920999909909199909009099999119099993190090900999999 -080809090104080809091011121212131411151502061611171518190411030519192020909999999309999099091999119991909919091909999909029999090999 -080804090909030802101011121212101013040404051414151516171418151504060118999992909909119999999099090099919999999000999000099003999999 -080109090909080810101004111213131414041502161414171819202020030419190605999999309999999919099019999010999910099919901199929999090909 -080909061011050909120211011314121504161314041515171314180403041319191919090900999099991990991931190999099099990999929900909909999999 -080809090903080502040410111112130614111115151514011617171818041917171804999929919999099009109091099999909999909109993090990999909990 -080109090909081010111204021010050404131414151617131818192020130318062020999999390090909099999919099190900990009099999900999909929999 -040808010409040808101009111111110409061213141409151617040218051717031818099999993090909099919999909999199000999909190909100999999929 -080403090906081010020911081213131314081215151515041204161601171819201605092999999909991999019099999999910099999999199999300099900000 -080503090909081011040612081004131414080215161714181915152020212121012020999999029909199999900099099919099999000190999990901139999999 -030809061004111209131314111509161314110209161714110518192020212121040120299909190099999991999999999919909911909991909001909003999999 -080809090406011009090211121013141515051013161615171013180403040413191919919999199003991099091909909099099999999999920900900909999999 -080109090909080810110212130410111412151510110316150517110418060419191904999999319109191900999999919099920999999909909099909900090999 -030608050904101108120913101111140915101617170918021917172018191901210418909992990909999999009099990909099909901999099190919309999909 -080802090900080810101100120410100300121313140400121315160400050116160600991999909199999909992990999991999090099999999090903099999909 -080909010500081009111204131002141500131004160600131718181900130318181904999999993090991099091901119990099999099190999990992999999990 -080909011004080809111004061213141000031202141500051617141504181920141500999909993999001099999909119991909299999119999199009999900099 -050108090904101112091300061415161304171415021304181415190300181415191900990900309990099991999991910099199091909990290999999999999999 -080809091000080811111004120611110300131415041600011715181904171715020500999099990999999009999999999000929010999199193991099919999109 -050804090900010808090900041010111200131010020600130404140300151515141400099999909993999991909909009999909091999001999999909992999999 -080804010400080809091000020409091100121313140500120615161600120317171700909999993099199910990999909190009999999990999009999990929999 -030808040900100808110900120613141500120516141504021718141500171701141504999992990999990910090999999990999909901909999100919399999990 -080401090500080809090600101112120200131412121504161703181504161919191500999099039999190991999901919099919099909099990921099909999999 -030808080400090905101100091202131300061214130100151516171804151519191904999992990099900991990991999991999999390911999010099990999990 -050408090900101112121204131114140600131515140200131515161700130103180400909990900990999099099999999909909091199999199991993910999299 -080808090600100411110100051211111300140215160400141515171700140318181704990090990990993999999900909991909110999990999999999909929990 -080909011000060909111000041212111300141212151300141602051300140304041300099990993999990999090909199999999990999910991199999099929909 -080909100400080209100100081111101200131111101200030414040500151516170600091099199999993991999999909999999199992909099009999099990009 -080809101004040809111004051209110100131414111500131414061600031718190200999909999990990090999909039909999990199990190999999991921119 -030808090400100408090900101102120400131415151500161616171700050106171700299999999099999990109909109909199099990919999909903099999999 -030808050900100808040904110602120900111314141400151617181800041601181800990992999991999099109990199999109009990019999909909399999999 -040808090106020808091011120504101013141515161713140318191913140420191913099999999301911010099099999199909990099999992909099099990999 -030808091004111208091000131402091500131316091500171717170400060501180400990902999991990991999991999991999991099091999990900309999909 -060805090300041010110400121002111100131414141400151515161600040117171700099299001999990909999991199019999999990910999999903099999999 -040803050900101112120900021314140900150614140900151616170400151601181804929090199999999901099919999199999999099000991990999309999990 -080804090300100409091100121202060400121213131400151515151400040105041400909990999290991909199991099999909999991909999990903009999999 -080809090500081009090100111012121200111006131400150204031604151517180400999099999990193909909999999999009990999199099099091920991199 -080809100300111109101000061112130200040414140400151514140500151501160400909290999999999909991990919990199909090999999090999309999909 -080501091004081109091004041213141000151516170200181806191900181803191900099909939990099099199990119009019990990909199999999999999299 -080802090900080810091100031010121200040604121200131405150100041616161600919999919999990929990999199999999990990091990903990909909999 -060408090900101008110100101012111300141502111300040416051300031616041300999990090999113999999991999901999099090010999999999999929909 -080509011004081111101000121311141400020604141404151617181800191903181800909909903991919910990999999109999990901999091199909299999999 -060508030900100408110900101008121200131302121200041314150100041617171700909990992999999990910990999990999991999919990093999119900999 -080809090105030802101112131306141512131616161612171718192012171718040421999992911309191990990999000999909999999999999900099909090990 -080808080909101106040909121113141401151113141416050404041716031818180219999090090999999909090999993099999990910009099990999999129911 -030808060400090410101100090902101200131414141400151516161600151501040500999992900099099999990991199999109099990919999999999300999999 -060808090400100811111200101313021200101313041200141414151200040105160300099099990999999990099999119999099099999199999909903902999099 -080910010400080210101100121205111100121204131300031415131300161606170400019999193099990991999990999999099909992099999099990009999909 -050801090900100811090900121111131404151502040600150416161700181816160300999990939999009909990909900919099919999019099990909999999929 -050809100600111212020400030413131400011513131404161617171400161618181800000099909991910929919990999999999319909099999090999909999999 -080910101104040510121104131313121100031415151100160215151700181906011700009900999999090099099999999990999919992199099990911939910999 -080809090300040209100600111212131300141212131300011516050400171717181804999299099999190901909999999099999090999910093199999099999090 -080109090400081009111200081010111300081404110400050206151500161616160300999999399091000999999999909990909199990190999099991999999929 -080404090900101010100100111212131300140415021300140516160600140316160400099990900999993999199909099091999091999991099099999999992909 -080801060500080809101100121213131300031202141404151617141400041818191904999999930099019999910999999291099919909909990099909090999990 -030408080900101108080904051112120900130212120904141516161700061801161700909992999991999099099999909019999199901990991199990399909909 -080809041000080409101000061109120500130209141400131504160100130317171700909099999990909999999901199919109199999091999093999909929999 -080803090900100804090900101112120200101104131300041114131500051601061700992999999999999990091999999999019090999999990010990390909909 -040108040900100808110900121212111100131314021500131316041500050604031500999990390999999901990999199900199999199909999909900099999929 -080609040000081010030000111110120000111102010000041313130000000000000000990999009990999999929999199991999919999193990999999999999999 -040108040000090909090000060210100000111111100000031212040000000000000000939990910999999991099909999919999999992900999999999999999999 -080806090000080810090000040410110000031210010000121202040000000000000000909999999999099900909999199999399999992919999109999999999999 -040808060000030808020000040910110000120904110000121201110000000000000000099999990992919999019900999999999090999999999939999999999999 -020808080000090903060000100411110000101011110000120113040000000000000000199991920999999919999909999999999909991909993909999999999999 -010809090000041009090000111104120000060212120000131313030000000000000000309999199990999991999999999010999919999902999999999999999999 -040401080800091010101000061111111200131314021500130414140300051616161600999990030990999909199999919909919999199991999999990912909999 -080909101004081109101000051213021404151516170300151518181800191901060400999909999990999990011900190991929991999991999099909300999999 -050108091004111111091204131414091200150214161200171818161200190618030400990000309099999019999909999199999190990199999999909990909299 -080808010500090410111200091314151600061714021604181819191604181819031600999999903099010999109900909999999001909091999999099999999299 -050808091010110808121013041415160613011704021813191920201813212121201803099099990990909000999991109919199399199009999999990099999992 -060408080808090909091010111212131310141212150216171819042020050121210320999990009999999909990999999099099991110910910199903092999999 -080909090903080402040410081112120513061412121313151616161617150118192017999929919999009099199009909009999909999919090999993099999000 -040608080909101112130903100414150516101717171716181819200216180121212121999990009990090999909299009900999099999099999191193119999999 -080809090903080804101010110412021304141412121504141416161717050401161806909999999929999900019999100099999919099999909190900390099999 -080802090904081010090911030412130414150613131614151717171814151920010514911999999909909929919090999990909999999091099990099039900990 -040809090406100809111213101414141405101516161702181816160419181801032019999990999000900099990909999909990999119099019099999399999921 -080909051010111109021003120413131304121415161718121919191906120120202004099990990929991909919999999901990910009199990999093909999990 -040809091011010809091213140802040513140815160413141704161818061717031804019009999903990999190909099991999991099099909099909929999990 -080809090909080810111205131414111203041414061215011604021515171718192004999999909999090009999909099999992090999099993991991019991100 -030808090110111105121010111102131415040416160415040616161715181818041717990992990399099999901991910001109999999999999099009009999999 -080803091011080409091011121302061014151515151014041617181801192004181805992999999999999900199009999091099999909919099019300999909090 -040801090604100811091202131314090415131316091715041816051915181816191903999090939909091100199199109999999990099999099009909999299999 -080910021111080804041111011212121203131414151617131414180604051919202020911199190999099991999239999909099099009990909990900999999099 -030809101106121209131313121202041414041516171414151504181801040519191919219009990999999999199099999001099901999991099909300909999999 -080609090310111209091310011205131314151216021704151216180419150416201919099990999290099999099039990999109091909999999100999999909009 -080808080909101011110909100611110512130214151612170418151912200318150104999099099999999999999090999999009111991999099091019993029099 -080808080909011010110904121010131415121616021718121916200318120405202106999999099993909999900009900919999991119999990909290099999900 -080109091010080809091010111213141504111602171717111819190603112005212104999999399999199990910999100901999091999999929099990000909990 -080808040503090410111212091314021212091314141504091316061517040118191717999990990029009999099991119999999999099900900999903099999009 -040108090909101112120413101415120213101617171813101903181805040620202020990990309990199990990990910990919909999099999929900990099999 -080109090405081009090411081213141111081515161704181515160603180402191919999099399900099091099999009919999990000999099999990199299199 -080409101006080209041001081111111204080413131415030513161617181818161604991909099991190399990999900909099999002990909999990999099099 -060403080904101004080909101011081212131313021212141414141516171705040104992900099999999999090999999900199999199909919990190003099999 -080808091010111111121001130402051415131316171415181920200315040620200415990199991999919300199999090991999991199099290099909999990990 -080804030910080811120213141512121617140618041617141818191617140501190417999219909919901100999990900991999900999999999990999390909999 -030604080909101112080904131402151617180519151617181919151617182004150117999992009999999910000011199999999099999999999901090093909999 -050809041006110309021213140409151617141415151618191920201621191920200121919090299009910909919009999999990909199999909990099993990999 -080409051010111109021203111109131415161613131718161619192006040119212121099990990129991999919999990090900919999909009990903999999099 -080804090106080810101010111111111212131302141205150404141403161718191904990999990309999990991999919901999991900999999999200009900990 -060308091002111213140415051213161617041218181817191920202117191920200117921110999910900909909190999999909999990999099090199993999999 -050208080904101008080901100411110904031211111304141516171706141404181818019109199999999399999990900299999909909099090009999009099999 -080909090904041010111204031002131401151515151404060516161417181818161917099900990999990099190929913991199999900099999999099990999009 -080804040304080809090910110402061213141415161213051416161713181818040113909999990209999909199009909091999991999999099091009003999999 -080801091011121213091402121215091414161606091703161604181717041905182004999119039919919199099990999909902909999990999099990990909090 -040801091006111111110412131313141412151502161412041717161812051703160404099009030999999091999999099919999911990909099999099990009299 -080809020504010810111111121313140403151313161706151819191717152019192121991099911903999991109209909099999999009090999999990999990909 -060108090204101111111212101313141515101313041503161616161717181904040517991190319100999999091999099999092999990999999990909909900990 -080808010905021011111212131004111212131014151604171004181806031919181804999901913099090919999999999990090990091909099999020999999990 -080401090906081010090911081010121311080214150511161614171711160304181920099909939999909999909919900999099109099199999999099999029000 -080109101111080812051111131414151515160614021704181818181919042020200403990999300999099901990999099099999091100999199999900990299999 -040809091010111111121010030502121314151504121313151516121701061819201717009099999999999929199099190900999999199999199009399909900099 -080806020909081011120909011314141503041614141504171717171518041919202005909199091999119991999230999909999099099909909999009009099999 -060108091010111108091003121113090204121415161616121718190405122020202021999990399929909999991901110990099099999009999900990999099990 -080809101010081109030502041209131415161606171815161604191818202020200104999999092919999090999100009909909990099999919900999903099999 -080909100311080509101211081313100211141313100404151516171706040118171920999929999999999190091999919099990991990199099099903099099000 -040809100111040212101311141415061311161417031311161819202021161919202005001999919390191091999991909991999092999999900909990999099999 -080808080105060909101011120413101014121516171818120417171818120319192002999999909309909909999090090999919000099999999099999999192911 -030808080809060405020409101011111213101014141404151516171718151501170404299999991999900900919099990991900909990919999909099399099909 -080809090909100311111102101012121314151612121704061818181919052004210119909999999909299199999190991999910009090990199999990903909099 -040809041010011109120210131409121503131617170406130517171818130419191918000999999193191990999209109909909909999999900999999900990999 -080906031005080909041011120413021011121414150411121414151611120117181904999299909909999909009909919990199999909999990910093099999000 -040808091011021203091304141506131305141516171818141519202018141501202004099909129001999919909999999990090990099990991109999399099999 -030809090909100808111104101202111101040413051404151613171718151513171706299999999099999099199900193999909909090999009009090999099999 -080808080609100311021209041313141209150404161217151518191717202020200105999900911999291909099999909909090990999999199090999003099999 -080808080104040910111213140904111505140902111504041616111717061616180317999990990309001099999099009999999091909919090999999999909129 -060808090910020803090510111212041310141212151617141818181819140401202021999900929991999919990999099199900999099900901999990309099990 -040809090410031112131310141512131310051602171710181804191720181819190106099999090099999920999919199911919919900999999090099993090999 -080809101010080809090403051111061213141415021212141415161718040115192004909999990999990900999299991909099999199991999199003910099109 -050808090304100408090902100411121213101414141515161617181515161606011904099299999900999199099190091999919099999900999091999030999990 -040808010904100808090904061112131313141415161617141404160502181803191919999900993990909999919000099990091909999999919909090999199299 -040809100411121303101011120205061411121516171811191916172020190116212020019099129999999991990990909919909910990999009199993999999009 -080808080409050310110409121212131309060214131309151516171718041501171719999099990999299909100999999919999011999991909019999399009990 -080808040905030402090906101112121314101115121614101115171819101115200104999902910999919990991099999999919999999990100090099903099099 -040108080910111208080513141516160317141516021817041519190417061519192020999000399900999001099991992999999991119999090099999999909909 -020808010909101108121314101106151504101104151516031117171819052017172121199991993909010099009999999999990909902999909990090990909999 -080806090404080809090310110212121210131415040410161617171717160118180504909099999909992990199911999199999909991000009999993099099909 -080309090905080802061001111111121213040414121215161617171819161620202020299909919199190399090999990999990900990999909990099999090999 -040108090904101108090912101314141212100215141605101715181818190615030420999900399991009999090919999919999999009199999119909929009990 -080909050106080909101112080413141512041616171512181816021512031919191504990999999300901099919990090090199999999091999999999919929990 -080910101011050912131111010914141404150916170418191902060320191921212020009990999999900999099930999999990100091999909109999192999919 -020809101111121309031106121314151617121314181818121314192020050104210420111991992999999999990099909999090900999999091909903909999009 -040108090406101112131313141515161616140415021703141819192020141819190520990990300000099901999999999999102901999909090999999999999909 -040108080808090909100404111205130614110215151614111715151819111720031818999990309909990919909919909910099909009199909999099999991299 -080809090306040509091010111202131014151515161614041717161614041801041914909299999909099909199909909901099999909199990909990399909900 -080109090906081010110405081010041213141516161717181818181717021919200304999909390991900999909099990199909009091999999999919999019129 -050809090909011011111111101012021314150412161604170318161919200618041919019999119993999999919999000099190909990999099219909909909999 -080808090506101010111212131415021203131404161718131419162021131401042121999099900909999909909991119999012909919999090199099399999909 -060405030808090909090210111111121204041313121214041313151616171815150104999290009919990199991999990990999099919999919900909993000999 -080910101010110405121313041402121313151416121718031616191918042006190118009990999900909999999901199999990190102999199999990093909999 -080901100411081212101311081212141411080415141611170502040318190620202018099999039099900999999999199909999991000919909009909192909999 -040108060904101010090911121313141414121315150216121715151819121703052004990990309909919009019999999999910999199999900999099290999900 -080910050111080912131111080904141506080916041504171718021503171919202020090999909399000999001999990999099909900909999991999019299999 -080808010904101111120909131114140215130614141615170418051915202020032115999900903999919909190999910909919999990900190999999091999929 -050108080909101108080604121113131415121113021615121117171815040417041903999090399900099999990901999999909991119999999090900990299909 -080808080104091010111112091010041306051414141415161616020417031818180419999999900309999099991909990099019999909991909990999019029990 -080809091006030809090411120213041411121513131404121616051401120417181404999002999099099991999991090999999909109999990990390099999000 -080401091011121313091411151502091611171518191611172003211606172020041605099000939991900919990991999991999091999091999929099999999900 -080109101004081109121213081106121214081115160417021818191905041818031904990999399909009099099919990999990900091990901999909999999290 -080804090310041112131010061415150204161617171717011618181919052018181919990920090999909990091999919001990999999919993199990999909909 -080808020405040903101111121213141415041216141415171717181815040406180115991999191009299909919090099090999999999909199999000993999099 -030808040609100508021109101213131409101213151516101718151516041920210116299999990099019999910999999999100909999999990009099903900099 -050808090906100308090911121302041415041616171815191919202015212121200115099999999902909919990011990991099091199999199909099993999099 -080602091005081112121303081415151515161717181804161717181904160120041919091109919199199291099999999019999999909999990900993099099099 -040809090905101112021313101404151504161417151503011417181804061417181819009909099099119991919990990099999099929999993099999999009090 -080901101011081213100514080415151617181815150217181906202017041903202004099909039909099990100099909999999909199009199999909999099299 -080903101106080912131404081502161605081717161618191917201818191921200104929009990999199099100900990991999999999990999911999993090099 -030808040409100808111209100402041209131415161209051414171201181818171706299999990099990999109990999091999091109999999900309999999090 -050809101010031111040412061111131412041502161612011717161618191919190418009999909902999999900909909991909001909999993919090999999909 -050808080809101111111109120413130206141413131515141416041718040119191903999900909990999909999999910009919919999909199999103009299999 -050404080804091011080804121213131415121216171406181816171419180116021403990900099999009900999090990999999919999199909909193999299119 -080809090110111209091310021415150510141404041610031717181906041720202020999999099391191019909919990990999999002999099909099900909999 -080808080909101112120901101112121314040215041614171718192014170306050414999099999999091399990909990991909019099199099900999000929999 -040808080803091002111204051311111415041316161415171816161415060104191915999920919990999090190909999991999099999099990190903009999990 -080804030409080810111111121313141502121313141604171818141919200518010619999909902909999990099199991999919090109909990990909930909999 -020803090906100808090911121213131313121214141415161616171804040105171904199991929909999919909090999999990909991990009999903990999090 -040108080909101108080909121113131415041116021703181116041906180516202020999990399990190999199909991090112999199990090999090999999099 -080808080910011111040212041111131403151516171717151518061920052118181920999919090113999999991209119900999990999990099999000999990999 -050809090310111109090610120413040210121415161604121718181819120120202020099929099999090999099990901990919911999199900099093099999999 -080808030909021010040909050611121301141515041313161617041819161620202020992991999991990999190990113090099999990909099099099909099999 -060808030909101111111104101012021314151617171304041617171301051618041304099299099199999999919099190901990099999999990091399999900090 -040809090110111109091210111313121210050414150210161616161718191903202106009999999399990190999999099099999900019999199990090991099219 -030808080804091011121206131302121414151515151414161718181920040118212105999902909991109099199991999199999999091909991990003999099099 -040801091010110808120210131415151617061415151817191420051817042121210317999190931199919909091000999099919999999990990099909092999999 -080309040406081009111213081009021405151516161401151716161404171704041418929999990009900099999990190099199909939999999091999009099990 -080804091010111212091010111212131403110615141416111715050418040115190220999999009999990999909999099999092990999099910109903990199111 -040808060909030808050909101112131415101104161414101117161804021920011818090999999999999929009099090999099999999909099910910139011999 -080910101010080811051212011314151212161616021718061919201704041919201703009999999999009999099930009919999999109191900919999999909992 -080809031011120809061111131314151602131305171618041919171620041919011604999219999990999909009199009999991999990009919901199939909990 -080909031011020404121211131415121211131616171804131616061919130120201905192901999099999910099990099909990990099990091999993099099999 -030808080809101104121309041102141313040414141515161616161515041705180106999992990991999009009991999991990999190099999990990903009099 -080809101004110502060312111314151516111704151518191919191818040120202020991990919209009999199091999919990999990100999999903099099999 -080105091010081112131010081412120415161717061819161717022020032121212004990999390999099991909099990019990099009999909910999919029999 -080910111112131305111112131415160603171804160219202020161919040121212121000900999999999999099990909009992009190999199919903099999999 -080909060105100409111213141516161313171516160218191920202018191903210418099990990309009109909990909099910999990999199999999919999290 -040809090910041112131410151617131803151717131819152021131806150121210205099999009999900000999909999999992099919999990109093991999910 -080808040105090310111212090902131212061414040415161616161515171717181920999990210309990999199999119990090999900999999999999009099900 -040809011005020811111111120613141415161713141418190413202018032121202018019909913091999919090009999199990909991099999999929099999990 -040808040903060808101111121212131302041414131315051616161604171717011804090929999190909999909199999090991999919901999999000930999990 -050809100304110212120613111414120413151414041613171717171813040119191818011299109901999099999999999199909199999190099990903909099999 -080809050110080811111210131415110416131402171616131404171819132004170306900999909399991000999099190991999991999909909991990992090999 -080509090604080809101111011213101111021414100415161414171717181903202004909099990909090999099931999991999199901990909999919990012999 -080801090610081111090412131114141415130402161615130417161615131804050315999909939900900999999001990901999991999909999999990002909999 -030809101006110809101005110812131414150212161714181812192021181812010404999902999999999999009009999199099199909190099910099930091999 -080809090909080810101105031210111113141215151617140615151801140219042004999999909999999990999099099290990909009999999091399100911990 -040305080904101104080912111113130914021513131614171819191614040619190114990990299909990909099099990199999119999991990091009993990999 -080809090403081009091112051314041115011614140217181818191917062004191917999099999920999900099191991919019399199099999909990099909990 -030808090909100808051111121313131415161704061815021920202115191901200415999992999099999910900999999109009099991909099190019399999909 -080809091011041204091303141516160217141816161717191919192020210506012020999919009120999990901990991999999009999990199991909039909999 -030808080910040604020910111213141410151513141416150513171718041913011720299999991999991900091900999999990900999991909099999939000990 -080808010909061010110909021004120413141516161713181916160413180305202013999990903999910999909019009199999109900199099999992999999090 -080909011006081109121304080214151313041614171718191914171720030514212121999909193099910091009909999919090099999199909999929999090999 -030808090910050808020910111111121304141516121204141718192020140406012020299909999999910909919999990090909909909009199901990039999999 -040809090909100808030611020405121311141515161311011515170418041919191818099999909991929919990909099199099199099990903900990999909909 -060108080209101108081209131415040309161414171718161920201721161920200405999110399990199109092909099099999990909909909099999999099909 -040102080808090910111203091313141515051313141515161718181819040406201919991990310929990991190999099099999999999009900999900909999099 -080209090104080609091011080512131414030415161414171717170418191919191818119999999309091099009090999299099900999999009999999909999909 -080808080104090909101011041213101011061402151616051718191616032018191904999999990309999009099990199901090099999010990999999999921990 -040803010904100804090905110802121213111414061516111417170416110417171816929900993999999009091901190999900099099909999999990990999990 -080808080910111206131310041204131301041202141515161217051815031919191818999099999090909009999999093999199911090990991099929099099999 -080804091010080809091010051112131303061415130416171818181819170120200221999999909999999990090900999909992090999009010999993199199911 -080404090903081011091213081411041502161611171718161611191918040501191906999999009929909190991990091099991909999990999919100399999990 -080809090909081010111202061003130414050415151514161717171714181919200104909999999909901109919199209999999999900099999999109903009099 -060108090905101008110912101008111104131408151515041617020403041817191919990990399909190099999099999909099099990019999919990910209999 -080409100404080809111213031415161713141415021813191915202001191905202006090099990909099099900999909299999911909991099099399999999090 -040808010600020804091000111212131404111503051400111616171400111618181400999990993091900911910999190999999129099999999900999999990999 -080808090400040510101100121212101100021314140100131314140600030415160400990099990999999900999999109199199199399999999990929009990909 -080509061004080909111000081203131400081215151604171815150200040119191900999909090999900999990999219999919999900099190199903191999999 -080808090600101009090200011112131400041516131404171718131400170405130300999990999099991990191931099900999099909009999999990092999999 -080909101000080903100400040211121300041411150600161611150100161604150500999999929990999991900909009919999019099999999013999999999009 -060808080800030909091000111112021000041314151504161718151500041818010500099999999099990929999991119990919009909999990909900930999999 -040408080900100308020900101011110900041213131400041513131400051606011400909990991999299999919990919999919009999099990991990039909999 -080901101000080911101000020912060400130914140500131504161700130316160400999999939991909919190991099199999909999090099090999990929999 -080801090904080810091104051213140600151616141400150217171704151819200300999909939999190091000909099919999999999109990999091999991129 -080804010900080810110900121212130900141403060900140415150200000000000000999999903999901909999999009099099999999929199091999999999999 -030808090910040208090910041112130510011412151510161706151518161619202004299999999990199991909901009999999310909099900099999999090099 -080809030000080809090000061002040000041111010000121212130000000000000000992999999999999990199909099901999099999913999919999999999999 -080809090300080409101000111111020500121212120400040601130400000000000000909999099299999999019999109919999999090030999990999999999999 -080809090904081010111204031010051204131415160100060217161604000000000000999909990990900099999999990290099199399109990119099999999999 -080808040904030210111100040410111100121313131300120514010600000000000000999002199099199990999999199099199099999903099099999999999999 -040601080400091010111100051010041100031212120200131304141400151515151400999090030990919909999999099999919299199999099999990009999999 -080801090900080810090900040410021100121310141504160605171500161603171700999999939999019909991990919999199009000091999909999999999299 -080801040904080810101000111112131304141516131300170218180500061919190300999009939099199991999999090910999009990199099099901999999929 -030408090600101010021100121213141400121213140100051513041604171713181600900992990099911999991999999999999990399090990099090999999009 -060808010900100808090904111112131400041516131400041705021400031818181400999990993990909099091999919000999909999991990999990019929999 -080808080500091006110100090212121200131314151600131314171600031804041604999099101990993991909999999910099999099990999999920909990990 -040808010900101108090900041213141400151515151604171717021600031806051600099999993990919900109990999991909999909991999919991009929999 -040603080800091005081100041010120200131314121500131314121500041601171500992990099190099999991999919090999999999999999019990309909909 -080808090600020403101000110412101000131314140500151314140400150104161600999091920990999919999990999190099909099999990990993009999999 -030809050600101011021204101313131300141516171704141819171700141819010400219999910099919099910909999099919900909099999909999930999999 -080806010400090910111200090911111200131414151204041414021600031717051800909999093099001999999999999999999099100991099919999190929909 -060508010400091010101000111111111200131314141200031516140200041718181804909990903099999909919999919099999999999999192111999990900990 -080109091000081109051000080612121300081412121304020403151304161718151500999099399991009999099909909999999099901090999999019299911999 -020808010904100808090900101112130500100614151500031616171700041604171700199901993999919999000990999900099999992909099999999999909099 -050106040800090909090800101010020400111212131300141415131300141404040300999990300999990919999999109009199999990999999099999002999999 -080805010904080810090904060211121300141411151300141611171300031819191304999909903999009099991901119919099999999190999999991909929990 -080501090400080810091100030412091300141406091500141402151504161616171700999999039099099999190990199299909990999991999119099009999999 -040803090600100811111104120813130200120813141400121516171400040116180500992090991999999009991999919999999909999910990109903909999909 -080109091004081109090600121113140500121115161700021818191704041818031700999009399090099999999999009990999100091999991919009929999999 -080910101100120313131100020514131100151616171700151816171704150406010400199091299999999919999990999190009999999999991119090030999999 -030809100200111111111200131304141204131305141200151516171200151504010600211199990099999999999990990999999990999090999001999930990999 -040801091000111212091000051212091304141502131300161616170600030418171700099999039990900909999999900991999119991990099999929999990099 -080809090900081011120100041004131304051006141400151016141400031717180200909999090999903909019999990999199999990909990909999991929119 -060108080904101108080900120413130900141402131500161617180500161604180300999900399991099919099909909199909919999019099919999999990929 -080105040400080910111100081213111100081202140400151516141400061517170300999999300091999999099910099999999910090919999999909199999929 -040605080900101002080300101011110400121213111400121215141400041616010400999190009299919999199999909909999900999901999999999030909999 -080906040400080310111200021010131200011415161200171418181204171718180500199999200099999919909919999991099310099909999999099990990999 -060808010400090808101100121314051100121515041104121616171100031817170200999990993090901999009900999990999990909999999909999991921919 -080809010500080809091000110412061300111412021304151612171704181912031700909999993099991999091990999999099909100091999999000999909929 -040801090600101011110400101012021300141212151500140516151504171717180300099099030999199999990991109099199999999909999099099019999929 -030804090900040810090400020810111200131313131400151516160600050116160400290999999990990999909919909190909999099919999190903999999909 -030808050900100408111200100602111200101314141200151514161700151504010400299099999090999999199999199909199099099099999010999030999999 -040108080200090909091000061112131400051515041400161615040300161617171700999190319199999900991990099909099099999999299099999009999999 -040809050300101011111200061311111400041515021400011515161400171718181804090999009299991990999909999909199099999991993990991919991990 -060809090900100811110400120211030400131314151604131314141700181818010500999990909099999900929991999019909999009990999190999030999999 -060808030500090810101100041212021300141404151500141416151500171717010400992990919090999999190999119099919990999999999009999030999999 -080808010904061011090904121213131304121415021600031718181900202018180500999909003990909099991990990999199911099190092999999990990999 -030809101000040809101000110809120100130205141404151616170400061616181800299999999999999909909999039019199990900191090919909999999099 -050808090900040808091004011111110400030612121200130214141500161718151500090999999090999090990939999901999999992919999199911099919099 -080809090500101009090100100611111200040211111200131314151200130304040400909099099999993999919990909999999019999100999999999000929999 -080104090900081010101000080611121204130214031200151515160400051718161600999999300991999999009990990199999192999119099909999099900999 -060804090900030808090900101010021100041213131400121213131504161717010500099999909999999929090999119999919099199999099099009930909999 -080304090900081011050900081012131404021004061400151617171400151817011400290999999999909999090999000190999199099199999190990939909999 -080903101000111213141000021213151504161613151504171713181904171701050600129991990999999919909990990199999999909199099100099300999999 -080901101000061111101000031212131404151212051404161702181400041919181800099990039999919999919999100299099999901919991109909099999999 -080905101000111111120300131414021500131616151504131616170400130106180400009990991299999990919999199919999090909990099999993009999909 -040809090900101111111104120502130300141414131300151516170600150116180400909990099999999009192999099001999999991999999090993909999009 -050801090400101010101100121313111100141313151500140403060200140416161700099099030999999999199909199099919999999099199990999291909919 -080403091000081106041200081113130200141413130400141415151500050104161600092199999199999999001909919099999999999991099199903090999999 -030808090500101108091200021304091200140615151200161615150400041601171700999992999091909991999919099199099909091999999190909309999999 -040809090400061009090500011010111200131402151204131617181200031617171200009099099990999999990939109999199111909999999990929909990999 -040801091004110812121313050812121413151502061416151717031416041717181904999000930990190999999909909919090919999919999999909920999190 -080809091006040809111012131415021016031718181919041718181919202020200105999999990900090999999011111299991909999999999990909903099999 -080406050404091011111111091202131313091212040403091414151516170118151516099990900000099999999999199991992199999990091999903099999090 -030805040904060810090904110802121213111415121216111417171801111404191818299009909999909909990091199999990909909900199999399999909009 -080809041010081109120410051309121415041609121415030617181415191920020115999099999090999990999000999999999000199991999009029913991199 -080808080504020903041010111212121010131404151516171718151516170106191916999991920000999910999999909199999909991099999009093009999999 -080809051004080802111012130311111006131415161017131819192017212121210104919099919909919092999999990990199909199099190990099903099999 -080801050900021011090900121313141400121313141400030604150400000000000000999991130999109919009999999999999999992090999900999999999999 -080909010504100909111112041313141516171318020416170618191916170320191916099990993009919009190999190999199099099091999999999099992199 -030808091010111108090410041202091314151515091617181919201604061919011605299999999999990990199091900019990991909991900909909939999990 -030809090909101104121301101402121515061616121515041604171718191904171705909992099099091399990911999991999091999990990909090999099099 -040808080909041010040906041010111213030514111513161714111513041802110113099099999990999999900009090999999900192999991999091993901199 -050809091003041102090412041113131212141115151617181815151917181806040117099129099990919999190999919099919909900999199090999003999999 -080104091004080811091012131304090612131314090412151614021703051814171719999009309999119090099999909999999990090991990999990919209991 -030809100400111102121200041313121200141413151504050106151504000000000000219099910999999990199909099919099999900309999999099999999999 -080801050900080810090900041010110400030612121200131302040400000000000000999999930999099909909999009901999999992919099109999999999999 -040104040400080809090900080810101100051210021100041313131300141415030600999990300099199999199999909909999091999991990999990190999299 -020803050904101111121304141516171704181516171700181516191900180116061900199001129099990019909999990199999900999999991909993999999909 -060308090400101010111200131305021200141414140400151516171700150104171700921090991999999990919999909900199999099919999109993999999099 -030808080800050910020600111112121200111113141400041513160100041515170400299999991990000999919999999991909999990099999913999099909009 -040808080800090906101100011210101300021415160500171815191904031815191904099999099999090990990931999991909110991990991999099999929990 -080808010400060905101000111111101200021304041200131314041200030014041200999999093090099990990999199190099199999999999090920999999909 -080806010900040810100900111111120900130204040900141515150300141416170500909999993990190991999999909019099909990199999992999999990009 -030408080904101011021200131006141500131316141500050417141500181818011500999002099099111999991999999990999900999999999001909039999999 -040805090900100811121304100603141300101516161300101716160200040118181800999990900990009099999999219909999099999999190199903191999999 -040809060400010809091000040811021200131311051400131311141400151511040300010999999093999999010909919909019999999999999999999902990999 -080409090300080510110400081202130400081406131500161617131500160117171500099299991990910999199911009990999199099199999099993999999999 -030808080900101011020900101012121200041314150500161617170400040117170600299999919999919999910999999909199001099919999190903999999909 -080808080400090610110100091212131300041212040500141402151500141404031500999090990999013999109999999999099099999919099019999999990929 -080808090904021003090500111004121304111014151600171718181900170118180600999901929999999919900990990999009900991099099090993999999909 -080909011004080909111004080412131400081212061500161717170200050318181900999909993999991099001990099999019999990999190990909991992919 -080803090600101004111200101013110200141414111504161616161700050104181800992990991099999999090999919900919999909909199991903009999999 -080109101004080809101004111109120600111113141500021616171804191919030500999909399999909091909990909999999900091999091919009920999999 -080809101104120809031304141509050200161617171700161618190600202001191904999100992199999009991900909990919999999919999000990399999990 -080809010600041010101000111112041300111105141500161616021704031818181700909999903090999999091990099990919999199991999910029099999999 -020808080900101111030500101111121200101313140400101313151600040106150400199091992099999999999909099999999990099999991900903090999999 -050802090900101011121200031006121200131313130400140415161600140417011600000999911999199929999999999990109999990991999009999039990999 -040108080400090910101100090910101200041313060400051302141400151515031400999090309999090999990999999019009999999919990919990999999929 -030809100200111106121204131414121200131414150400161616171804191919010500211199999199999090099909999999199990099991999900090930999999 -080809090600080809090300100211120400130405141500131617181504161601181500999099999999992990199911909199099099999900991100099399999999 -040804090300101011110400101206110200131214141400131515151500130104040500009299091999999999990999919090919999999019990999993000999999 -060809030400080809101100120213131300121214141400151515151600040104040500992990999099100991999999999910999999991909099999903000999999 -030809090900100811121300100804141300100214140500101515151500061601040400299999909099909999909999999910999199099990991999990300909999 -080804050300080809091000111209091300111114021500161414061704160104181800909999990299999990991999999901119909199999090990093990999099 -030804090904101005111200101002121200131313140600011516170400151518181800909902099099900999999991199999109999999091993110999999990999 -050404010400080909101000021109101000121313140600120413141500120304141500999990003090919991999919999199009990999099999999999099929909 -050808010600090808101004091112101000091314150400090216161604171717180300999990993099999090999990199991999010099109999999091999999129 -080804090300081010101004111102120500131114121500131617121804191901120600909299991999999009199999999991909991999099090010090399999909 -080409040400080410101000080311020500121111131300121414131300061414010400909999900099099999909999199029109999999999990909999930909999 -080809101000011109101204111109131204141509021200140516171800140319060400909999999993199099909999100909199099999091099919999100992999 -080909010600080910111100121205111304121202141300151617181300031604191304099999903099909990091999990999999991199919991190929909999090 -080808080500090910111100041212110300011212021300041415161300171717060400999999099099099999099909999999029391999001990991999000999999 -030608010400090910111200090902121200131304141400131315151500161605041700909992903099901999999991199900909999999990999999909090999909 -080801090600080809091000111213041000111213140200151213160400040513170300999099939999091909009990999999919999190991099999909919990929 -040108090900101108120600131111120500141403120400141415161604021718161600999990390999000909999919909199999999099920999999019199911999 -080409040400100909111100121213131300121214150400161602150100160306150500090990999090999999009999999991199909099919999193999099929909 -080809100400060811110100041211111300141415151300141616020500041616170300990090909999093990999909999901999999099991999910999999909129 -060809100400010809110500120809131300120814130400151414160400021717170300090099990993099999900919999999909999991999999900910999919929 -030809090900080804040400060210101100121210100100041313131300000000000000209999999999099991900901909999999999399090990999999999999999 -040809090910011112120610131412121510160405151510170218181919032020211919099909009093099991999919999199099990991099991199999199929009 -080805010400080909090900101103121300101114021504061116161700181116041700999999903099999909919992919999919011109990999990909999909909 -080909090904080510110100121314111100121515020400161515170300180406171700099909990999913990199900999991909991990991999999909992909099 -040808010400090808101000031111101000121113140400121502161700151506051700999990993090999999099999199291009999999910991190999009999999 -080910010500080210111204081310141504081310161500031316161500171718060400919999193091910099909990990999099999992999999990990090999099 -080808080600010909101100040909121300041404121300141415151500051602040300999099090993990999900909999919999099999909999999991192901099 -050809090400011009091100121212061300021414151300161617151300161603041304009999999093190999109999999199999199999919999000999209999990 -060805091000111204091000111113090100141415151500141416021700031616040400909990099990990999099990139991999909999991099919999990929099 -060805040900080810031100021213111100141515040400141515161600140117171700099099909099129919999919099910909990999999990909993099999999 -080801090900081011120900041004121300021003041300141515061300051515040400999999039999100999099999909099999199091929991990909990999099 -080601050300090910111200090911111200130414151200131414150200040416150400099990930299999999199990999001999991999999199991909999990009 -030608090900101008090900041002111200131311111400131315161704040518011700909992999999999999090901999991909909199999199901009039990999 -080903010600080910111200040913141400151515021404051617181800161604181800999999923090990999119990999091999991100099099909999099999999 -080809031004080809091000111213021000041415161600141417181800060105181804992909999999999909919901109019999909999900999909903099999990 -060108090400101010111100121302111100131314040400150516160300151717171700990090309999909919999911999991009999990919999992990909999999 -040308080500090904080200090910041100011212131400151212061400151516161400929990999099091999991999099900919391199999990990999999990999 -080409010600081011111200080511111300141415151304141404161300031717180200909999903090090999999990919999099909909999999900999990929119 -050809010600041010111200130410111100131414141500130416021500171717170300009999903099900909999999999909919099999990999911990199999929 -080901101000080911111000080912131404080912150400040216170500031616180600999999939999190999009909900999009999990190999190999909929909 -080904051000080311061000020412121000131312120400131314151600041414011600199099209999990919099999909109999999999909099110999939909999 -040601080800090910080800090910101100041213021100141212150300141605171804999990039999199999909999909019999911999991990999990912990910 -030408050904101010020900061111121300141516171700141818171700141818010400990902009999910999919999919009919000999999999909999930999999 -080109090500080809040400101111111100101206131400100215131400031617130400999099399999099991900999999919909199999909991109999199921909 -080209100400081111120300081111130600141405151604011717151600041717181600911099191990992999999999909910099999909199993909999999909009 -040103060800091011120800041011130804141411150800141602171700051616171700999990320990999999909999900019099999999110999199909999999099 -080805090300100811111100101202131300101415151604100615151700181801041904990299991999999990199901099919999919009099099999909390999900 -080806040900030810101100121310101404121516171700120216181804051916011800999099909099999920990999990909009909999990991919091939901999 -040808090400010808091000041112121200111113021400150405061400151516031400099999999093909991990901999991999991190099999990999099990929 -040108090900101108040200041208131300141404131500141616031500061616051500991990399190109990991999999009909999999002999999999999909099 -080809031000080811111000121306021004141414151504161617150500160118190400992999919999999909919990900009199991909199099099993099999009 -060809031000111111101000121314020400121514161704121515181800120105181804009299909999999990919999199909909919009990990909993099999990 -040408080400090208030500091010111200091010041200041313131200141401061200909090992999199991990999009999999090990199999999990399999909 -080808090900011011090900061213141504161602151504161617171704180519190300999999909993109999199991000019999919909919999999009092909999 -080804010900050810110900121212121300141414021500160417170600160317170400999999903999001909901999999990919999190991099099999999992909 -040803090900101111090900101011120200041305121400061516121700181501121704092999099999999990991999999909919090199099999010909399909990 -080809011000080811111000041212111000131415051000130616021704031818180400909999903999999909999999019990999009099999199001099910929999 -080609090300080209090400100511111100121313131400151516141400150104040400999299099991199919990999999100999999991099999009993000999999 -040308080400091008081100090912020600050413131400151515151400161604011400999990299099190999199990109999199999990019999990990039999999 -030405080400090910101100121310141100060214141100011515151100161616170400990992090099999919909919999919999019999991993990990909999909 -080910040300080211121200131314120600131314141500041616161600171704010500000999999299119901999999999999909999999109090999990030999999 -030804010400060910101000111102121300111415131300041615171700051615171700299999103090999991991991119999999090990099099999999999909999 -040809041000110612131000141212131000141402130400151515131600030517011600009999900990999909999999109901999999099919999990929039990999 -080605010904081011110900081211110900081313141400030402150400161718151500099909903990999990999990909999199991999910999090929199911999 -040401080600091011081200131404081200131415050200131616171700131603171700999090039990011909999900999999919900999909199999999999999299 -060809010400101009111200041009131300140204151500141616151500140316170500099999093099990999919901199910099199999099999999999999929009 -080903061004080911021204081314141504081314161600171318161600171701190500929009999099119099910999900999999099999919990009999309999909 -080809031000080811111004121211021300141414141300151617181304040106190500992999919999999009910999999099199999999199990000003009999909 -080910111204081314151515161614170503161614040618191914202118190120200218900009099999999900909999009999992999990990099119993990999911 -080808080404090910110612090913141515040513141515161617181818031602040104999099099909900999099090999099999991099011999999929103091999 -080910101104031213101100050213141500161613171504061818191504201818011500199902199999999991900901999999099901909991999900009939909999 -040808010909061008111212130414141212131314141516030502171516181920041516099999993900090990019999999999909909909991999019929199911909 -080801090404080809091011041212130411141414131311150416020603051717171718999999939009999090109999999091909999900919099019909919299991 -060809091010110809041010120213141504121617171501121617181519121603040405999090990990099909990991190919199999139990999999099900092999 -080901101005080911100403060902121213041414151504161414151517181818180404999909939990109999990209191911999099999999900909009999099909 -040308060909100808111204130205041404131515161417131515181818130119191919929990990099909001900910999999990190099999909999993009999999 -080909100304080909111111080412130514151506021414151516171801191916162004999299991900999999919990090099199909999991099999390911990910 -080209090909080610111101120413141515030413141515160413141704161618141905119999099199909319090990909299999909999999909990990090990990 -080309101111080809121205040213121206141516171818191919191818040401202020299099990999909091999990090019999100091999999999900309999999 -080803090904080810090902111213141414111115151515161616161718051906040118992999999909009199999190099909991999999999109990990003909999 -060809040403041002111111121212121313141516161313171515181805170104181804000999099020919990199999909019999909990999909909993999999090 -080809090300080510100400111202041300141414141500011616171700041616061700999299919999999900190911999199009999999199093909999909909999 -080801040900080810110900120213130500141413131500141616161700030604181804999999930999100919090919999919999999099990099999920090999990 -080808010400090906101104090912121304141512051300141617171300031817170200999999093099909099910990910909099999999099990999999991921919 -030808010904100808090900111202130500141414141500161718191504061704191500999902993999999919019911909991199999090990999009009099999999 -060808020900100808110904011213031400121215051400161715181800040415181800991190999990991099129931999990999990999099090909900999999999 -080809031000110409061000121309021004141409151000141416160100051716160400999290999999999900909999910009199901999919999993999999900909 -080808010400091011121300090214121304090615151300161718181300030418180500999999903099190991199919190990999099991990990999920999999909 -080109090904081011030400081212131400051213131500161602171804161619190600999909309990999991020999999099909999999119099100099900999999 -080909090904080310021100121314061500051614171800191914171804191914011804999909911999291909991909999009019909199999999009099939999990 -040108080800091002110300091011110600091213131400091215130400051204160400999990319290919999999991909990999909099909099999909009999909 -080509010400080809101100030409101100121313101100141402101500041406041600909999993099090990999999099299999991991919099199999090909909 -050808090400010808101000111204101000111212041300140206031300041515151300090099999993909991099919999999009999991999991999901029999999 -080809060300080810111104121202130500121414141400151617181804040119191900900999999299919009199991009999999999991090991099003099999999 -050801090904101111120600101111131300100414131500031602171700161604171700099909030990900999999999199999999901099919099199929099999999 -080109090900081010110400081010111204130605021400131304151500161718031500999999309999999999990909190000109999199999199999909029900999 -080805010400090910111204090910101300020414151500160314151500161606171800999999003099110099999999909100909999991999999999992990999009 -080401090400081011091200081304141400151316021400151317170300061317170500999999039099011990991900999999199091999919999992999999909909 -080801090900101010090904111212121200061314050200131315161700040418160300999999039999909009199999999000019999999909199991909099990929 -080808010600020910111200131304111400131315111404160305171700161604171700999999113091910919090999999999999909901909092999999999999099 -080309100500081109121300111109141300021515141300041516141300041706010400299099990999909919999999099199999191999999990900990030909999 -030808090900040508021000111213101004141513160100171713160600171713180400299999990999919900919999190009999001399099999990999909999909 -040406080800091011080300090912020500131412150400131412161600130112161600999990009299099999019999109909999990099999990199993999999099 -040809041000080809101000111112120100111112121300060514021504031617181800999990990999909990909990939999999999190099199911099190921999 -040806030900101010111104121314141100151516170200151818181800050119191904909290099199999009999909999900919999199901990999903909999990 -080809090900011011060400121213131404121213020400051515160300171515161800999999000993199990190999900999909991999901999999909992909919 -080809090300080809090600041002041104121313131400151616161700150118051700999299999999990990199999900001909199091999091999993099999099 -060104080800091010080400111010120400111302140400111315141400161616050300999990309090999909909999009919999911099909999999999092999099 -060808090400100803090400040205091100041213141100151516141100151516011100999090929990999991990900999919099011099009999999999939999999 -060809101000010804101000040811110500121314140300151316171700041302171700000999909993999999999900909919999019990919299999909199999199 -080809031000040809101004111209131400051515150200161717171700160106180400999999992999099009919900919909919099999099190999993909999009 -060404080910111111110312131314141415131316160415171716161802051901181820990000099909999299099199999999099909099099919999990319109991 -080808080910050411120310131314061510131302161717181819201717180104202121999009990999909900092991909991919991199199999900993090999999 -080909090304080510111112081010111113081414021515160404171701181920171706999999090209999999999099090990199999990991099999300099900090 -030608091011121208041311121214140511040214141516171717171515181819200104990092099099999099909999990919990999990190909991999903090099 -080906101112080513101112080213031112081404151512161717151518192017010404009099999990919999929991999919999909990199909919000930009999 -040108080808090909050610111112131010111114021516171818190420171821212103999990309099999991909990009999999911110990010999999909299999 -080309091010111212131405151212161414021717171701041818191919061818200404299991990099990919999099009199909199939999090909999909009909 -050108080204090909101112131314101112131516101112171718100312170619200404999190310109999090099999999990999909999099299099999099090009 -050108080409101108080209101213131409101516131709100616160403181819202121999090399990191199990900999909909909999999020999909099999009 -040804090905061011090912131314021516131317180316011717181816191919202016009999099900909090099991100999199999999199293999990999999099 -040808080804010904061005111212121313111415161313111715041803111702181819099909099093099091909909999919099919099990990999999199299191 -080104060910081111120910081111131415081617171404021804171404051818031404999999300991990099909999090999990009091909991999009999999290 -080801090909080810101111120405101304021415161313171706180404171703191919999999930099199910999099909190999000991900909990999909992999 -040809101111050604101101121314101515161317021515181317041920181317031919000199009999999309990990999090199991990990909999099999909299 -040808060905100808111213040211111414151617171401181917172020031921212121099099999000909909990091999919199199131999099099929999099999 -080902101104121313101104031415101101141416101117181819191717181806052021111101909999999029999990093990999999909009999999999099099900 -050808040904100808110909121313111415161617111803161617170219060120202004990900999999999900990999991090912910999999199991003099099999 -030808040904100808020911121213140911121516160911171705181911170420180106999992990901911999999990009909999999099099199990099093090099 -030401080806091011081213091415161613090204161613051718181913171718182020999902039999010099919991199919999190999999999990009999090999 -040809090909041011040504041213141403151513161617151513181617060113180217099999000900999990090909999909092990999999999199903999999111 -040806040905101111120901100411120913101402121515101414031515161617181904009009099990911390999999990991990919999999999929909099999000 -080806090904080410090911121314151516011317041516181317191919051317022003990999999909909000099900990999999310999999090999909911999192 -080801090909050810111212131414151512061414151502161616041718041919032021999999939099011909099909099099991999999099019990990999109921 -080806091010111112091010111113050403141516161617181818021920040121212121990990999999900999090999099090992009999911919991103099999999 -050108091011121208131311121208131304141504021617181904061616181820202003990000399999119999999999999090190099100090999099999999290999 -060808040409100511111111101012131314041502131314161718181801030419191919999900900909099999999090199091999919909199191999329990990999 -040805090400011010101000111212060400111213131300021415161600171717031600090099090993999991900999999990999199991099999009919999999299 -080804060300080509101100121314141504161314021700161318191904160118191900999999900299909900091999990099919999199901990199093999999199 -050809101000060411110100121311111404121516171400121802191904121818031900000999909999993900999999900901099009999910999199099999999299 -080801090904080810090900111112121304051415160200171715180600170415190300999909939999019990091999990090919909199091099999990919999929 -050809100300110204120400111113141400151513141400151617171804060117171800011299199999990991009999999199999990999999091099003999999909 -060803050900101112021304141515151500141616161700141818171704191918010400929090199099111009991909999999199999999991999909099930990999 -030804060900040808100900110402121300111114141300151514141300051604011300299999900990990999109990119999999909199099999999990039909999 -030808090400101010100500111212061300111214141504021614171700181901171704990092099999999919990999999999009909901999099109911399919990 -050809090900041002110300121212121300061415161304171718181900171701181904099999011990092999199999999919999000009199999190999399999990 -080801090900050810110900121212120200131414041500131414041500130604031500999999930999109901999999919909019099999999999909990099999929 -080406090500081011091204081303090200081415161600171715181800171701041800999099009999091090991909299909919991999099999009999309999999 -080804010300080809101100121213061100141415021100160417051100161617170400999999903299019909109999999091999991190900999099999999999909 -040508080904101111120300011314020600131315161600171718161604171719191900999100091290999990919939109991099919990999999099099099999999 -080909011000080809111004121314111000150616161600040317021804191919190500999999993999009099999900009099199099999999199291009110999999 -080304090500080410090600080410091100021213090100141212151500041616151500299099909990999999990909009199999191390919999909909099999999 -050806090300100211111204131311141200131315161704181818181700040119191700909290091991199019999999909999099900909199999999903099999909 -080809090300100206041100101212131100101214151100101614041100050114040400919299199991999999009999099999999900099090991999903990999099 -080809011000041109091000121212131000141402150500141416170600030404171700909999993999190901999999909991099919099990999090920099999999 -080809090904061003050200111112121300111114121500161617171700161601041804909909929190990990991999999999919909099009199999999390999900 -030804091004111213091000121213091004050213141000151513161700061819011700909902099999999919999999990019099999099190999910991139901999 -080809090904080802100300111213140400111215041600011217161600051817170600999909991299919909109991909999999090999909993099999909900909 -050401030800090910110800090910020800041210131300141215041300040415150600999290039999091999919999999999199991990909990009909990990999 -080809010600100809111104101209041100101309141500030402141600171818140500999999993099019090999909909999909900999019099999929190919999 -080801090600101011090900101012120200131412121504131617171804050417031900999099039999999999111990999009919999909099199099009991990929 -080803090900080210111104121212111100131314151504131316170600050118190400929999990991199099199999999919099900909909999990903009999009 -030808090200100411121300101414141404100515161704101515180100191906181800291199999199000999991999990999919999109091990903990999999099 -060809011000111209101000131409150500130415151604130317021800131919191804009999993990909900919990999999909909009919999910992919999990 -040809101100120802050300130814141500040814141504011616161500061717171700991190919299909909199909999999999099909019993990990999909999 -080808090300051010101100121202131100121415131304161718180600040118180400990290991999999999199991909999999100909199090099903999999909 -040108080800091011041204131314151200130205161200171818161200171818030600999990399090009091999990009999999109090199999999999990999299 -080404010900101111120900131106121400150216121400171818121400170318051404099990903999919909990909009919999190991909999999999999929900 -080809090900080810100200051112121304011412151604061717181904202020200300999999909999191901091999990919019399909900199999009902999999 -030809100500111111021200061314140400151514141604151717171700181801191904211999991099990990919999999009909999909919099999900309999990 -080902100400110910101204030913141200151513161200151517161200061804010500111091999999999029019999999999199999999999999000900930990999 -040806091004051111111004121213141500121202161500171819191500031819011500090909090990999099900999199991199919991991999090929939999999 -050801030900100811040900120813020900060813140400041516161700151516161700999290939999909909199900919999199091099009990999999999999909 -080905010400080910111200081314151204081313161204171706180200170319191900999999903099001999099900900999099999900990199909999991992999 -030809101004050609091100121202131100121214131104011516131100171718190400219909099099990909199999199999999911909199993099999099990009 -080109091000080809091004111212120500131415161704021806171700191919030400999099399999099019099999909190999900001099999099919990999299 -080803090900080804100900111112130200111114150500011616151504061717171704992999990999909990991999119991999990099019993999090999909990 -050106080300091011121304091415161304091715021304181815191300181815191900999290301990990091019991990909199991909090999999999999999999 -030508080400090608080400091010111200091010131400021515130100041617171700909092999999999990900999999999009991091919991993990909909999 -030808080600090905021004090911121200011111130400041415151600171815151600299999991099900099919990999999199391999909099099900999909909 -040404080900101105120900011113120900141102120600141115121600031515161600990990090990099999999931109999999091999919099990999999929999 -030808060900040408020900101010111100040412111100131314141500131305010400299999990999019909910999999000999990999991099099999930990999 -040108090300101108120500131402121200131515061604131517181604131919191600999290391999990901099999199911999099909900999900090999999999 -080809091000030809041000110204121000111314151000161616161700040105061700999992999999099991909990909919099100991999999990903009999999 -040108040900101108121200101108121300101108021300100404141400060315140500999090399099999999999909099999999911099091999999909099992109 -040104060800091010111200091010111104091302051400151617141400151818180300999090309099900999999919990999099119999919990019999919999929 -040408010900101008090900101008110400020612131300140412131300151503160500999990093999119999909999909190099099991999990999919909992909 -080904101000080905031000110912130200110612040400141412151600141412010400909999992999999909091900119999999909999990099010999930999999 -060808010400091011111100121314141500121314141600120305020400121717171704099999093090099909199999909999909909999901099999992919999990 -080109090400081009111200081010111300041415041300030502041300161616160600999999399090999999090999009091999900999019999999929109999909 -060803090900101112090904021313131300141516170500141818192004141801192004929990199991009019999999999190999900099099991900099399999990 -080109090400081009091100041012020600131005141400131004031500131617171700999999399090190909019999909990199099999999199092990999990999 -050108090900100808090900041112041300140215131300140616161700140316161704990990399990999991909901999991999119999900999090999999929990 -080808091000111202040600111213131300141415050300141416171700040104171700990090999099109999199999999019929900999909999909903999999099 -080808010600091011121200131411111204131502161700131819202004031805202004999990993090019990999909990999109911999109099999099099929990 -050804090300101109091200101302141400101515161600101515171700060104171704009999099290991999199911099999999990999999991909903999999090 -080801090300080810091104121210091304121210141500161718180200160518060400999999939299009009991999990999919991999991190091999900990999 -050808010400091010111100061010111100121202131400041515161400031715041400999990903090909999999909999909919991190910999999999909921999 -030808040500090908021000090911061204131111141500131617171700131818010400299999990099911999991999990909019090099999199099990930999999 -030808060900040808020900101112131300041112041300051112141500161612010400299999990999910909919909999099999999999990190001999930990999 -080809101000010809101000111109120500131114151604130402171604130318190600909999999993909991909999909999099019009919999019099919992109 -040809090300100811021200131313121200011414141400041516160400051716160600999290919999919900919999999909199399999099090999990999900909 -080109100500081111120600081311141400151516141404151516031704181802192004990099309999900991999909099919999999909999999192009191999110 -080909090900081011121204011314031504051614141500171718021500171706041500999999909990909090099939920919999009999199999111999909990999 -080808010500090910111100090912111100061212021300141414151504160404031500999999003099909999999999999999199099199909199909009099909929 -040106080500090910111200131310141204130210151200161610041200160317171700999090300999000919999999090999099199999190999999999099929999 -030808080904100611020900101012130904140515150900161617181900161604011900299909991999099999019999910090999099090999199001999939990999 -040108080904101008080900111213130900021415150500160615151704181903171700999900399999190999199911999190909909991099999990019999912999 -060408090400101009090200101011121300011414141300041516031300051616171700900090999999991999911991199919999399999909990092999990909999 -040108080900101010100900111206131300141502131300040516171700031616170400999990390999990991909910999199999119990019099999999990929999 -050108080800091011111204131011110600131314151500040216041500171818180300999990390999090009990999999919099919999919999109901999909929 -050808091000040802040300111112061300141414151300161617171304161617011300091199919290909990199999999991099991999991999090099939999999 -040803091004050806111200131313140200041515161600171515161600171701181800092109999199909900901999909909919099999999990919999309999999 -080806090900041003090200111213131300051415151600171715151600171704010400990999099190929990991909999009199909099999999099999030999999 -040809100200040309111100121304111100121313140600120515161600121717011600011199299199999909999999099999199090099991999909990039999999 -050809101000111111100100061204131304121214131300150216171804031919191800000999909999993909919999990990999991991110999190029909999999 -080808050400090909101100121202131100120314131100151414161100040601040400999999900099990991199999199929999991999999990900900300999999 -080808030900021011050900121314150904121316150900011317171800041304170600992991999991909991099999990990999009099990993090999990900999 -080804030500080809101104120210101300121206141500161616161700181801041700999999902099099090990911999999909909091990099999990309999999 -080808010900101010090900030602111200041313041400051313041500161604151500999999903999999929191990119990009099999999090909990099999999 -080809040500080809101100121209130400141202131300141516161600030404010600900999999099900999990999999990999111999099199999920030999999 -080609090300080209091004081105121200081314120400151516161700150401181800999999099299191091999999999910999990990190099190990309999999 -080109090900080810110400121314141404151515151600021717161604060318190500999999390099009910999990990199999999991999991909009199992009 -080910011104081213131104141413131100141415160600051702040300171718191900009909903999090090999999999991999990090910999099999192999199 -080909100500030909100400110212101300111412150600161612171804160112191904199092999999999991990919909999099900991090099990093999999090 -080209091000081109061000081111121000030413130100141413130500141404150400199999199999099999909999109299199909399999999090999909999009 -040808080500010909090900101011121300101011140400061502140300041616141700099999099093999991999991009999909999990019999919990992909919 -080909090900100211111100031206130400121214140500151614140100041604171700199991199999999921909999909990099919090999999093909009999999 -080501060904081011110900081011111200021013141504160317181900161617170400099909930990190999999999909990909199001900999990992990999999 -080801090904080810100904111210051300021415151600171415151600041403061600999909939999190091990919099190909199990999999999909909992999 -080403090904080410101000081102120600081312121400011516161700181816160500092909991999999990199999999901909099999091093190999990990999 -080808080600091010040400111111121204011314121200151302160300151505171800999090099999999909900999990911999390999919999919990012999919 -050208091000061111040300121311141400121516141404121517181800121501181804011199199290909999999900999991999900909919999909999399999990 -040809091004111209131000011415151504161402170500161418191900161406190300909900090990990990999930990999909991999911990199999999990929 -080809010400101009111200101309051404021309151600171318151904031818150600999999093099110999990999090199909190999909091999029990999999 -050106080800090910080800090410111100121310021100041410151500041616031700999990309999109999999999199009199099990091999999990991909929 -080909041000110309121304021415121600171415121600181815121604061815010500199091299099999019990999999199999909991999999110099930909999 -080808080400090910110100090902060300120413131304141415161700141415160500999090911999993999109999999001929999900909099909999990999999 -040801090500100811111200100811131200100802131300141414151600031704060400999090930999990999999991099999999019999919099909920900990999 -080109090904081011120500081013141500080416161704180216171700061919190300999909390990100999199999009901909999909999990199901999999929 -050304010800091011110800121010130800041402151600171715151600171704061600999990203999991909999909919991109001999999999099999099999909 -080808010900101112120900051112121300141104131300060415021600031515040400999990993990090999999909919990999099990091999910999900929999 -050808090900100808040600101102121304101111140400151516170300151501181800090999999099999999009991100999109999990911999092999309999999 -050808090900101111090904121313141400061313141504011617021800191919040300999990909999909009909909999999999099109091193919991102999999 -080804090900041010090900061010041100120213141500121613171700120301051700990999099990909999999909909911909990099199991909999309929999 -080808080600010910101004111212131404151216161400171819021400050419190300999099099993999091099909000099999919990091999919900999999929 -080601040300080909101100080912130400141412021500141412160400051717161600099999930299991999119909909999199999099991099019900999999999 -080909090500080403100200081112101304081415161300171515181300171706011304999999990099991990291909190909999909190991999909999039999990 -080804010400090910101000090911111200131304021200131314151200060316051700909999093099999999901990999900999999199991999919909190992909 -040804090900101011090300101011111200011314051200041515021200061515161600009999099999999999902990999909999300999199990911999909909999 -040401080800090910111100041210111100131310141500131616021700031616050600999990039099009900999999999909999991099991099919999900929999 -080109090600080809090400101011120200131011051400130411151600171717030400999099399999190990199999119999919099099999199991900920999999 -080801091004080811120200041313141504161713051500160618181500191919180300999109931199019909901999090999099009999009999999999992999099 -040804090900051010090300111010021200111113140400150616160100151717171700099999009299999909919999909990109901999919999093999099909999 -040501080800091011110800121311111404041515021400031617171800161617170600999990030990099909999909910009999999199991992190999990999999 -080901101004021112101004131114151600131114140500131117181904030620201900199901139999109019909999909999909909999909999900020099999999 -080803090900081010090900021010110600120405131300121415150100120416150400999999929999999909909919099109909999999900991193999099990909 -080809100600010811100400121213131404151213131600150402170500150318181800900099999993199990190999900099909999999019099919999919992999 -080304090900080410100600081110101200021313121200041314141400041516010500299999900999990990999999999100999191990991999999999030900999 -040402080804091011121200131411120300151511160600151511161600051701181800991900011999999900999990929099999900999999099999990309909999 -080805090300080810090900041010110200121206131400151617171400040117170400999299909999999990991999099099019990990990990191903999999909 -080809060400081002111100101004111100041212130300141414150400050116161600900999999099119909999990999919199999290190999990903909999999 -080109050400080909101104081212131400081215021600171715061600041815031600999999390090919090910999909999199990199090999999990999909929 -080809090400080802090300101112130400101415151600141415151600040605011600999099919999992990199999009901999099099999999099900039999999 -080909050300080904101100081212130200141215161604141715161600140401180600999999990290091999919999919099919909909999990019990309999909 -060808080804020905100100110909121300111415160400111718181900031718181904999900101991993919999999909999009000999099999090929999999990 -040803090400100808091100121202041100121213131100051414151100041401160600929990999099990909199999999991099919999199990900999309909909 -030805090600101109091200131415121204130215160100171715180400171719191904909092099999999910099990090999999119399991999010999909999990 -040808090900100804030900061112130200011415161704181815161700181805161700999990992990099990991901119910999390009999999099999999999099 -030808010500090808101104091213141500160214140400171718181804191919190600999992993099900099910991199119909199999090999999099090999999 -080801040900080810101004111213130600111213130200111405031504111616171800999099939099099009190909999999999999199909190999090921999919 -040808090300100208110500121212131300141415161604141718161600060119191904099299991991119919990999999199099990909909991099903099999990 -060508090900101008090904101008110300120213141504161616161700041801171700999990099999999099909999099099029111101999999990990399909999 -080903100600080911121304080902141300041515151500161616161700050401171700992099991999919099199900199099109999999991099999900399999999 -030808080900100411020904101012130600141515161700141515051800141901181804299999991999090099019990999990109991099999099909990399909990 -080309100600081109101204081113101405081115161704180219200100182121212104999999299099999099090999090990909099009100990913991199999990 -050808010904060808090900100211111200101311041200101415160400031718181800099909993990919991090909999919999999999100999909991090929999 -080501090904081011111100121206130400121214151600171702180300171718181904999909030999199901909990999999009919090919999999999192999910 -080910040500080910021100080910120300010910121204131415150600161717170400990999999099910999919901999999929399909099990090909999909909 -040108090904101112131400151516171400151505171400020603181800191919181804990900309991000919099999099990999999991990990999919299999990 -080809051000040809111004121313131300141502161604171818161600060118190300999999990999900000909999999011999991900199990999903919999929 -080804090500030802090400101112091300101415151604171715150100171718180600909092999999199999190909999901009999009099999093999099999909 -030809101100120513021104121313041400121515161604121515161600171701180600211999991990919099990999909991909999909999999909900309999909 -080909010500080909101104081212131304141412131300061516021700031819192004999999993090901099991999990999999900999999190111991990929900 -080109100500081111111100121314141500020616141500171716041500031704041500990099309990999999190911999190999099991999999990999099929909 -060104040800091011080800091213131400091504131400091502160300051517171700999990300999009991999900999910999999099999999119909912999999 -080808080400010909100400110909120600111104021300141415151600140315150500999099909993990999909909199999109990099091099999999990992999 -030809090400101011111100061002120400130504121200131415161600131701161600299999109099999999900991199099999099999901999019990399909999 -040808080800091002110300091011110400091005041200131415121200130116170600999990919299109999999999909999099009990199999099993009999009 -040803090900100808090904111213140200111113151600061713151600051801150400992990999999999000919999919909919901190099999999990399909909 -080801090904080810090900111213131304141506161600141703160200051819191904999909939999009990199909990009199909999099199999990291909990 -040808080900100611020900101012120300131312141500131316141704051801140400999190991999099999012999999099999900099919099999090390909999 -080409041000081109031000111109121004131415051000011616170200061818181800999099099990999999929999910090999009099099193991991919909999 -080806010400080809091000031109091200130214051200151614171200150414170400999999903099999990990999909201099919991199991909999990990999 -080801090500080810110400121314151504121316170200061317171804191303181800999099930999000999199909190990919909999999199991009299909999 -040408010900101008090900111208131300110508131300141414140200060315160400909990993999009909919990999909999999999999199991909910992199 -060504010800091010110800091010121300091415121600090217041600031717041600999990003990910999990999099991909919999190999199999999929909 -080903100400110205121204131415121200131415151600131417181804191901061800129091990991099091999999999999909999099990990109090309999999 -080803090400080810091100021010091200051314121204151614171700060114180400929999999099999919990919999919099910900999990109903999999009 -080404090300081011090900080402121200081313131200050614151600171717011600999999009299019999199909199999999099199991099009909039999999 -080609010500081009091100031002121304141015121600171819121600041919121604909999993090991999991999110291999119999999990099909999999000 -050801090400100811091204100813131300140815150200161717151800061717040300999990939090000099199999999099919999190999990991909902999999 -080809101104050809111100121309141500161702181504192020181504032020010600990909990999099909999990199001199099009919991999029930999999 -050808080800030409090900101104121200131104121200130214150100061616161600099999099099999929990919099999999990999190990193999119909999 -080109040400081009111100121013111100121006020500121415161600120404031600990999399090099999999901199999109909999991990099999099909929 -040803050900101011120900131302140900131515160904061515170400181801171700029999190999199999109990999991099999009990990900990399999999 -080805060900081004030904111213140900110213150900111617181800191901181804909099999999099000929909999999199111099999991109990399999990 -080809010500030809101100121313131300120614151604120217151800041717150400999999993099990920019999999991909990909019091199999990909999 -050801090900100811090900060812131404151502161400171518041404171718190300999990939990109909909991900991999900990910999999099999999129 -080903101100081212131100011212140200060414140500151516171700151504170400092999091999991999991939919991999909090900999099999990990999 -080910100400080305021100081212131400061212131400041516131404171718011400919999291099991999091909999999999099199099990009099039990999 -080601090500081009091100121313131100141502161104041717181100031717181804999099039990190991999909999019999910900910999999999999929990 -060801040900041011110900121213110900121213040900140215160500141417170300099999030990190991999999099999999999999190099009991999991929 -080910111200030502111204131314141200131315161200041718180400171701180600119992919999910090919999999999199901990919999090999399999909 -080804091000030802091004110412091000131415161600171806161600171818010500909992999999199099199909109099199000999009990999999930999999 -080109040400081009111200081009051300080409041300140215161300061515160300999999390099000999990919099999999090991999991119909999999929 -040108080400091008111100121314111104151316160500171302180300171306181800999990390099099901999991990091909099999919999919999992900999 -030806050900100811110904100811111204130814151200021617181204191919011200999092909999999099990999990199099990091009999019019139999999 -040308090904020808090900101112061304141111151600141718180500140119191900929900999991999919990910090999909990099199990090993909999999 -080808090905011011090904121213131304021415161700181920202104032220212106990909099993199099199990990991999110091909091999091999929990 -080910030600081102121204131314121200041314150500161714181800160104181800912999199099199009199999999999009099999090990109993099999999 -080809090600081009091100121212120100131414151504131402040300130516171804999999099099990990099999939019099999909999999109999192990110 -050308080600090402081000111112041300111114141300011515041300161616160400929990999090910909199999909991999919099199993999999009999909 -040308080900100608110200101213111404101213111500161617111800161601050400929190999190999999991999990999919090999099199011999300999999 -080910100500080910100400080311121200131415120400011615021704061815171700909099999999990999099992199099999099999091093919091999901099 -080309040400081009111200050209110400061314140400151514140100151516161600299999990091990901990990999919099019099999999093999099999999 -060404080800091011080800121211130100121202131300140415151500140416050300990990099990919990919990939991999999990919990999999092990099 -050808090600100802111200101313131204101415160300171718161604171701190400999090990999911990199999990919929010999019999999099309999909 -080809100500081109121204131409121204031502161600061718160100191920202004990099099999999090999919990210099919999019990993999119990990 -080808030900020510100904111213100400111413150600111613171700110113170400992991999999990010099999909909999090099999991009993990999999 -040801090900050810111100120813111100120414151500121616021700121603040600099999939099999909199900199990199909999991099919999900992999 -050808080600090910100100090911100400021213141500121216171500030404171500999090990999193999099999999190009199099900999999920099999999 -060808080300090204041000111112121000111112131300141516171700050104171700999290199999999901009999999999909909991990991009903999999099 -030808090904101008020500111012120600131414141404151617180100191919190400299909990999910999919909909091999999900919990913990909999909 -080409010500080810111204131310141500021310140600161610141700161603141704909999903099010099900991999199909999991999999990999999992990 -080802090900101011030904101011060400121212121300011415161700141418040500991990919999992099999999099091909999099919993100999090999099 -060809100200011112121304141512121304140516161300141716160300181819202004001199919193199099999900990990999099999999299099990099999090 -060809051000041112131004141515131304141515160100170218181900171718180300009999900990099090990909190999199999399199999191990992999999 -060804090900101112090100100412131300100314131300051514140200041617171700099999009990003990919999999999999929999999190091990990909999 -040809091000031102101000121213131304121214141500060414141500051617011500019999119992999999109999990999199909090999999099999039900999 -060801090500040809091004110812121300140215151300161718181300190318181304099099939999990009910999999001999019999199991990919999929990 -050108080904101112130900141415130904140602130900161617180400031619191900999900309990090991999991190999999091999910999190929909999999 -080904101000081112120400081312121400081302151404161315151700060103180500909999090099099999999991909991999991900999990990903910999299 -080801090900080810111204131313111400060215110500161704110400160318181800999999939099019099090999909999909011999199991090999909929999 -080409101000111209101000131309141500041303050200161616171704060118181700099990999990999990990999119992919099999090199919003099999999 -080905100300080210101100081204131100121214141400151617170400040117170600909299099999199991999999099099009999991909991090903999999909 -080504090300080209091000081104121200081313121204141516161600060117171700999999009291191999999990999909999190900199999099903099999999 -040104050804091010111100091012130600091415131600171702131600170318131600999000309099909999999901999901909999999019999910999999992199 -030808090600100208090100101011090400121212131300041414131300041504040500991092999999193991999999009990099999990099999999990000909999 -080309101100080404121100081314021100151516161700151516161704051818010600921999991999909990919990109091999909999999999990099030909999 -040809101000111112120600111112120400130214140100131303151600041717170500009999900999990999999991909919199199399990999290900990999999 -080808090900101112120500101312120100100604141500161602171804160317170400990999909090099999999990939909199990199999199111099990929999 -080109031000080809041000111209021000051309141500131316171500180616041504999299399999999919909911119009099999099900999999909909909990 -080909031004080911061000011212021000131212141000131516141700131805040400999209999990909990099939119999999099999099999000990900990999 -060808010500090810111200090204131200141413131200141415161204031715180400099999913099910991909990999019999999999999999990091900929099 -030809090900101104051200101102131304101406041300151516171700151518011700299999109099990999990991190909999099999900199909999039990999 -080309090900080806100200111112121200111113130400141513131604140401051700929999991999991990091999999991999909090999999090090390999909 -080809100600011112131304141415131300161417181804160502180300160419191900990099000993199090199999999091999999909019299919999909909999 -040809090400031011120500131414140600131516171704131515170100021818181800099099090999000929099999909990999990909999999903919919919999 -080809101100011209090400051313131300140215151500140616171700140304170400990099099093199999199909999910999199999009999909999090929999 -030801091000110809091004120813140500150216161604170406181800171719181800999992939999990019919990009199199119909090999909999999990099 -040501080400091010101000111212131300021212131400151606171400181803171404999090030991999910999999099199909999991090999099919999992990 -080401091000111109091004041112131000141414151000031602150600171605151800099990939999990099199900199999199991999919999199929090919909 -080809101004080809101104121209021304031414051500161614171800161619010600999909999999990090990991110299919999099999199901999030990999 -080802040600080909101100030909121100131313131104141414151100041617010500919999910099999929909999199999199999909901999990999030900999 -080804040900080410061100120210131100120410131100121410131100031415010500999099909090909909999911999999999909999999999910929030990999 -030805091000110812121004110412121000110213141400111516141700041801061700990092999999099099999990999999009111999099999910990309909999 -040104080500091011111200041011111300141415151300021406151300161616030400990990390090990909999990999919999909091999999099919990999299 -080109090400080809090600101004111200101314140500151515150300040216161600999099399999090991909990909919909999999109999999901992991999 -080808010400091010111200091013141200040415051200160306021200161617171700999990903099901999909999099090999909099909999991992919991999 -030808060400090410111200090502131300091414131300091515160100041715161600299999910099090999190999999901999090999199999913990999909999 -040401080800091011111100121202131400121515131300031515050600041617171700999990030990999990991991119999999990992999099909990099909999 -040809100400111111120100021313141400151313141400150416051700150316061700000099099999913999109919999199999999999009099990999999929099 -040809100500010909111100121213131300121214140400150614020400031616161600009099990993909991999990999999999919090991990990999919929999 -080909010600100909111204041313111100141313151600140205150400141717170300099990993099910009199999999999099099099199099099991999999929 -080609090900080802101000110312100400041314140500041314140100041315161600909999909999199919190929999091099999099999990093999099909099 -040809090300100806091100100802121100100813130400101415161700050104171700999290999999999999019999109991999119999999091009903009999999 -080910050400060211111100031213130400121214141504011614141500171717171500009990900099199991199999999291909999009999993199999099999999 -080309091004111111121004130214121000060415121000161617181900161617010500299001999999999091999901199099999900999991099900999930990999 -060308080500091011120200131314141500131314141504161617181504191919010400929990991090091999091999999999999999909009999001009930999999 -040308080800090906100200090911111104121213141500121216161700051818010400929990999199900999991990990999919900999990199991999030909999 -040809010400100809111100040805111100021213131400150416131400151503061400009999993090909909999999099999199119091999999009999999992909 -050808060400010808090900101004090900111012120200111113031400041513161700090999999093919990999999099999919999099009199999990921909919 -030608090900101105090900121111131400150204131400041616130100041616171700900992999999909919990999109110999199990999999903999909909999 -080304090904101010090900060211121200041314141200151614141700050118181700299901909999909991999909099910999019999999990199903909999909 -080809090904081010110100121302140600151616161604030517181904202020191900999909011999993999109911909199099999902900999090099999999099 -050808040900100808040900110212120900130614150900160314171700181818011704990990999990990999099911999109199999091991992909999039999990 -080910011104120210131100031415131104161717130500161717130400181818190600199901193999910921199991990999999090099999999990990999999009 -040108080800090910100500090911121300141415020600141615171700040415031700999990309999099999990991009091999991099991999099900999999929 -080808090900041010090900111110120600031102131400050415131600171717010400999990909999909999999999109291199919099999099009909030999999 -080109101000081109101000081213141500161613020500170413181800060413031804999999399999199999109900009999909901990091999999909999990920 -080509101104080812101104131302101100141315100600031616161700041819011700900909999999099099099991109999999191992919099990999039900999 -040808010900040808090900051011121200021311121200141506041600141703161600099999993990919991909909099919999199991900091999991999992999 -040108080400091008080400091111121200091304121400090215030600051515161600999090399991099990990999099990909199999199099929901999999099 -080910101104080910031200080904051300081415151604171715150200060118181900999009999099992999991999999900019909900999199199903191999919 -060808091000040808091000110502090300111213141400110415160100111515170400099999999999991909092999199901999900999919999093999919909109 -080609090300081011120400081302141400151316161404151316041700151301051800999299091999919990190991999099999999009999090109999390999909 -080808080300091011051204091311141504161611171500011618180200061918180400999999099299999090901999990009099909999990193191990999909909 -080609101000080811101000030412041300140512121500141616171500140204011500909999909999009990990999999299009909099911999999991939910999 -080802090500080810101000031111120600011311141500161718041500160418181504919099910999999929199999009999999310099900990099990999999990 -040809010500101010101100120206131404151516161400151716161800031704181800009999903099990919900919090919999999099099099999929099999999 -050108090600101010111100121213110400140215151500161717180300041717181804990090309999999991099999009199999119990099299909909999999990 -060401080800020909080400100909111100121305111400121315161400031304041400999990039991900919909999999100909999999990999909929099999909 -080809090400011009110400121013140300121015141600121002141600040506141600909099990993990999099991929991999099999919999910900099999999 -050809010300101010101104121213131100121213021100141516171800141504060400009999903299999090199999999999999991190009999900999000999999 -080901101104120909101100131406021100151516160400150416161700051818180300099900939999911909099909919909199999099999999991900902999999 -040801090900101010100400110612131404151212161700151802051700151818031700099999030999999909910909100099099999099919999109999999999299 -080808030904101011111204101011051304011414140200151617171800191917170600999209099199999099991999990900019399999199190191909999999909 -080801090400101009091100051212131300021212131400151504161700151503060400999999039099099909100999999999909199991990099909999900992999 -080808030900101105090900061213021404151213161400151513171400040113180400999990992990999990091999910099199911999190999999903909999909 -060108080400091008081100091213041100141215021100141216161100040316050400999090399990190990199999099991999091999991999999909900992999 -080409090300081011121200081302121200051313141400061515151504161718010400999299019999099999199909199999919099999099199999009030900999 -080903060400100405111200021314111500131316111500171716111504171701181800129991990099999910090990999199999919999999999000099390999999 -080809010400081009111100041202131300121206131300031414151600051414041700999999993090999990091901199990999999992990099909999990909909 -080404010900101011110900060211110900051213140900121215161600031715150400099990903999199991999909909919099990990909099999991990929999 -030809041000041111101004120502131400121515061600121515171600121818011600219999910999999009109990119999919999999990999901999039909999 -040809090400101103091200101305021200101415151200161715151204161701061800099999029099999990919999919900999999990099990091099390999909 -040808030900051011111100121314020400121514141600121515171600120604011600099299909190999990910990199999999099099919999919990039999999 -080809090500100209090100101111120400101111131400031516041700061504171700999099099991993991919999109999099999092090099099999099909999 -080808010400090909091000111105121304111102141400150316061400151517181804999999903099991990901999090999919991999919999990992190991990 -080504040300080910021100040910121100010913131100040913141100151515160600099999900290919999919909919991999319999999990990999009999909 -080808080900011011120900131314050904131315150904031602151700061616041800999999099993100999199990090991999999909919992990999190909909 -060808040900030808100900111112130900041102131300141516161600171704010500099999990999990929099999199991909919990991990099990030999999 -080801090900081010101004110512131400061515150200041616171804191919190300999999030999999000199999119099019999999999190991099019999929 -080801090900080810091100121212041300021404151600061705151600171703041600999999939999000999100999999190909199090199999099999909992999 -030809051000111112131000141402151504141416150600011717181800041704181800219999910999990990109999190999999991999019093909999099909999 -080509090600101109031200101314121204100404021500161617181500161601181500099090999999092990099999090909199990190999999011999399999999 -080109091000081112091000081313021000141516171004180405171704061919190300999999399990111990999999919090199099900009999999009902999999 -080903101000080909041000080411120200080413120500141515121600060401121600992999999999909999091990919990909901990919990990900399999999 -080909030500081010111200080213111404081313111404061516171400041819011400999999902099919991990901990999999999909919990010999039900999 -040809100400111111121200130514121204131515160300131515171700130102170600000099909999999999099990990990099090999999299999993190999199 -060808030400020808040900101112120900131112140900131115150400050104150400992990999091909919999990999199999999099990991090903099999909 -080901101000041112101300051111021300141403151300141416151300040406171700099990039999100999999909199909199999999929999919900009999999 -080105090900081011121300141411121504140211121600171711121800170304061904999999300990000991990999990999909199999199099999999090929900 -080909010400080810111200021314111100151314161600171314161600040305040600999999903099110919999919099099099999990999999999902000999999 -020808090300100808110500101204131400101215161400171717170600040118181804191291999999990999909999999990099999091000999999903090999990 -080809091004080811111200061313141500021313161700181905201704181803011704999009999099999990900909909999099191091091999099099939992990 -060801050400080809091000111109091200131114140400130214140400041515150300099999930099199991990999909990909999999199990990991999909929 -080909030500020410101000111212121200041313141500161617170400160117170600192991999099999910099919999019099999099199099099993999999909 -030508090900101111110900101004121300040214121300151515151300061604010400900992909999999999909999999910999011199999999991990930900999 -080409060300080209091000111111110500121204130400121214131300040115151500990999099299191901999999909199999909999999099099903090999999 -050809040600101109121300101009021300011409041300151516171300150416170300090999099099919990919991919919099399999009999999999992990099 -080809090900101011120100041011130400141411151500141406021504031617180500999990990999993999919990909099199900999909999991099919921109 -080109100400080811111104121314060500121315161600120217161600120418180300990099309999099019000909999990999990999999991199990199999929 -080109090500081009091104121213021100121414141104151617171800190406170300999999399090999091119991919909999999900099199099909092909999 -030808090200041010111100120410111100121306140100151515151600051717170400291199999199999909999999099909199990390090999990909090999999 -080309090400101009090400100211111100041212131400151212131400040106051400299091999999990991099999999910999999090999990909903099999909 -050804010400091010111200061010131300141414021300031515161600171717160400909990093090900999919909999999999991199190992999999090999999 -080609090900101103120200131313141400041515141400161717171704051818010400099990991190929990991999099999999990990991990999099030909999 -030804040400060809101000110809091200110205121200111304140100151616161600209999990090999999909999999919099990999190999993901019909999 -040108080900101108080900111105120200131314141500131316151500170604030400999090399999199909019999919909919909999909999999909020909999 -060308080500090404081000090911021200131314141200150414141200161617011200929990999099999990010990199901999999999999990990909039990999 -040408010500091010111200091310141400061302141404151316171700031318181700909990903090991999991999999990999911900909090999999099929999 -060808080400090910110100121212130400040413130400141402151500140305151500099099909999903909019999909909999999990910099199999099929999 -040809090400080809090400101011040300101011061200131302141400050115041400999090999999990990099999099999929910991919199919903099999909 -080803040900081004110900021010120900131415150904161615150100161606170500929999990999909919909999999190099119009999999093999009999909 -080808090300101011090400041212091300141412021500141416151504170601180500999299909999999990090909909999199911999999999109009309909909 -050808010600090808101000111204101000130214141500131616041500131617031504099999993090919901999999099019009999999199999909999999991290 -080808080300091010051104091010061100121213021100011214150400041617151500999999909299909099999909099909999991199919093909991199901999 -080910050300080910111204080913141504080916141704181819200200180120200600999999990299999099001990990999919900900909199191993199999909 -080801090900101010090900111112131300111114141404150504060200040316171800999999039999919999019990999999199999900909190999909901992119 -080901101100081213141104061505141104031602141704161618141700191919191700099099030999019090099909990999999291009919999199999909999999 -080401090900081010090900081010040500031102121300111114121500040614140400999999039990909999900999999991999910092909099999900990999999 -080808080400040209101000111212040300111205130400111414151600111401150600999099099999119901902999999999999990999190099900999390909999 -030406080400090909021000111111111000120413141000041313151500161605011500999092000999911999999999999000999990190991999999990039999999 -080808080400040910021100011212131400041205031400061515151600171717171600999990119099910991919939919999999009299099999990900999999999 -080809010400080809091000061112121000040204131300141414131300150304040500999999993099190901909999999919909909990199999999919000929999 -080808010500060910111204131310121200131302141500161617171700031618040400999999093099001009999999999999109911999199099999929990990099 -080805090600020810110300121204111300141415041300141416161300040116160400909099990991112919999999909190999900999999999099903990999999 -080801090904020810091104121310141100151310141100160310140400170518190600999901939999100019999990999199999999991999992900909099909009 -030605080400090210081100121204081100131314080100131315161600171717041600990092099999110911999999099999999900399900999999999009999999 -080805030904080810110900120206131400121515131600121515171600041801191604909909992999119991990919909990999190999999999909990309909900 -080909100300080911101000081202131304081414151600171414051804060119190400999299999990919999199911090999999990091999091909003090999999 -030408090900101011090900101002120600130414151600130417151600130517011600900992999999919999119991999099109900999999999000999939990999 -080104090900080810111100121302111104141415051604141415151700181819030600999999300999909919099911990091009999909999099999909190999299 -080808090900101105090100041111121300140215041300140416161300140604031300990999999990903909919999109919999019099019999999999029909999 -040809010400101011111200101004111200131313131200061414021200031414150500009999903099091999099999999999999999090999999991999910929199 -040808080400091011110200011010051200131313131200141504161200041515060300999990990090191999991939099990999999990090999909909902999999 -080609101004080909101000081111120500081111120100131404120300040215161700999909099999909999909999909999999991390199990909991992901119 -030808090600100208091100121305091400121504091400011616161604171717180400299999999091190919999910999919999909999190093999090999999009 -040108080900101111050900101213140900101212020900101516170300040604171700999990309990999990109999109999199999999901999099900092999999 -080909011000020909111004121313111104141513161704181906051700032020201700199991993999910010999999990109909990901000999999920999999999 -040108090904101112090200100512041300101412151300141412151300161718060300991900319990191999991909099999999999990999999909909992900099 -080909030500080909101104121213021400121215161600171515181800040104061800999999992090991099091999919990199991990090999999903099999909 -080109040600080809101104121213141400121215141400161602040500170318181800999999390099000091999991099991999999999919999199919000929999 -080601090900081011111100121212120400131302141400131315141604041703051800999999030990999990199999909919999911999999099919090290909909 -080809010500080810111100121212111304141502131304161517181800030619181804909999903099909999999999910990999111901990999909929099990990 -080403090900101005040900101011120200011313130400141414140600151515161600092990999999090999991991119919999399099099999990990999999099 -080808080600090909100400111112130100110212141500160412151500160312040500999099990999910999119999939999099119091999990999999990929099 -050808090904100811020900121311040300121314150100121316161600121704180600999900991990919990992999099991999901399909990999990909990909 -080803090500080809091000110402061200131414141204131516171700130401171700992999999099990909199909099091999999909991090019990399999999 -030808010400090808101100121213131400120213130500151617171700061604181804999992993099999919010999909919909919990090999999909990990990 -040806010500091011121200021313131200140415151600141415151604170318181600909990093091119919909999999199909909099999999999019909929999 -040805090400040810090400111110091200011110090600131403151500130216151500009099999999099909990999909999999309099190991929999999911199 -080809090904030810110500120210130400041415150600011415151600171717171800909902990999990991999901009091999999999999093199999090999909 -040808090900101111120600131111021400151617041400011618181404051618180300999990090999909909990999119010999090999999993999099992900999 -080809011000080809091000110212131400150604131400160304131400171704051400999999993999091999991911119109999990991999992909909999990909 -040809031000111109121000061113021004140515151000161715180100161919191904092999099999919999919990100001999999990991990993990909999990 -050108090400101010100600111112131400110212151400041616151400041616031400990090309999990919009999909919999999099199990999999999909299 -040808010600090908101100090912131404151512161704030502181700191919191700999990993099019999190999000999099909909010999990929199999999 -080109090600081009111100080412111100081312140300151316141704051302141804999099390990199990199999999999999099990919299999009191999110 -080903101100121310101100021314041500051314151500161614171804161601060400129991999999099919990919099999999019999990999000099300999999 -040803090904101011090900121213140200151613141704151513141800050113190600092909099999099999091999999909919999909099199111903999999009 -080808080600091011120100091311141504090211161504171716161500170318051504999099090990913999999991000919999999909199999199999199992900 -040805010900080810090900111210131400061510041400161610021400031717170400099999903999019999900900999009099999999099999919999910929999 -040804090900080810101000110404021200131314141200011314141200051506040300990990999099999909909999919000199999999999993199990002909999 -040809031000111109041000111109051200131309140200151316161600040117170600909290099999990999991999099999919999199901990199903099999909 -080401091000111109091200111113140200040515140400161615140300161615140600099190939199099999091999919000909999999999999092999999999909 -080904031004081112101000080613020400081414151500161718181500160118180500909209099999099990019999999990109991990109990999993999999909 -040804091000061111121000051111130100141413131500141416021500031716041500090999090990990999909999939090999909199999999911999999921909 -060809091000111109031004121202131004121214151504161617180100161619200500099999092999999090199991000999909919909919999913999909990009 -080809090904010810111100021212111104131212061400150516041400170318181400909909990993199999199919990199009999991909999090919099929999 -060401080500091010081100121013021100121414151100041414151100041617150300999090039999911909999909019990199999999999990999999099900929 -080801090300080810091100121314151600171314021604051314041600061318181604999999939299199901901991199099199999100999999909999999909900 -080801090600080810091104121304091100141516090200171518181904051503181900999099939999019090099909909099999909190909199991009299999999 -080803090900101112090400101002131400151515151400161616161404040617010500929999199999199999100999999901099999199999999991009030990999 -080105090400081010101004081111110300081213021400061516171704151518181800999099300990999091999999999919929911990901199999099099990999 -080404030900081011040900081012020900081314140500150614160100171717161600999299009999909999099990919990199009090999990913999099999999 -080910031100120410041100131414021100131315150600161615151700161605010400009290999999999900909999019999199999999099099090999030999999 -080309090900080805041000110212061000111212041000041314151000161616010400299999999099990991099909909919999999999190999110909030999999 -080109101100081212100500041212131400150216041400150416161400150306171400990099309090999999999909009991099119999999999099999909929099 -080901040000080910110000080910060000040912030000040212120000000000000000999999930999909999999901099999999092999199990199999999999999 -010804090000101009090000111206020000110313130000110413130000000000000000909993099999199900919990999999199929999999990999999999999999 -040809100300040809101000110809120200110812121300111415160400050601171700099299999999999909991999999990919909199919990000900309999999 -050208090900101011110900101011031204041314061500161616171700040118181800019999119999990999990999290919909000999199099999903099999999 -040801090904080810111100121212111100050213141400031516041400171717061800099909930999109919999999999019909919999919992109999090999909 -040809021000010811121000130814031004130815151000131617151804060517181800019199911993919999099999920990999099999009099999000999999999 -080801090500080810101004061112040400111113130200141515161700141515180300999099930999999000190990099991999999190909199991999919999929 -080109090900081011110500080611110400081213141500121216021504171718040300999999309990190999999909909991999099199911999919090092999099 -050108080400091011121200131011111400151004021400161017171400040317170600999990309090109909990999999090199999990991999999909999992909 -040108080800091011050200121013131400121013131504121006161704121818160300999990319190109999991909909999919999909999199900090992999999 -080910011100020612131100141515131604141517131600140418181604030518181600119991913990910919090999990999999990999909999099029999990999 -050308080400090908081004111213021400151212161700151816161700150106191704929990999099999009910901109999999099099199999099993999999000 -040804010900040808100900051112130900060214150900031614151700161614151700009999993990910999199901099910099099999199999999929999999909 -080109100400081109120600081113131300081114141504041116160300050216161700990099390990090999099999999999909999009999990999991992901919 -080808040900031002110900051004120900131012120900141015160400140601161600999992910999199999909909009999999099990909099109990399999999 -040809011000111109101000031109121300060209140500151515140400041616161700009999993999999929919999909919109011999909999999999900909909 -060808010900101112090904021314140400151514141600151517041600180317170500999990903990119091900919999199999999099900999999919999929909 -080808080300040910021104051210131400121210150100161610171800160619191804999999990290919090911990919099999991399090999990990999999900 -080910110500021213110100141504161700140616161704141818191900031818191904111091909990993910009999909909999999909999090999929999999990 -040809091000031111091000120511061000121313131300120214150100041617150400009999999999900929999999999909009999999990991193999199900109 -050808010900100808110900121313110900021413111504041604111500031606171800999990993990909999999919109199999199000199999909999990929009 -080809091000080211031000120413131000121213130400141414060400050115161700999099912991199919999999999909999999091909999999903000999009 -080808010600090910111204090913141400151616161600151502171804190305170400999999903099909099010990999999199999999991099119019090929999 -060808030900020808040900101011041204101013141500161717141500050117181500992990999991909919990999090990909909999199990990903909999099 -080503090600101011121304141411110200141515161704181515191900202001191904092990991099991009991999999999019990900999190919909399999990 -080809090400080809091000110212121304141506121300161616030400050117171700909999999099990990999911900199999009991992999999903090999999 -080909011000020909111004120513141000121514141000161718191904030418061900199991993999910019009990999999999909991099999009020909999999 -080809031000080811121004131313021000141516171704181616041700060119190500992999919999910009919999999099199091909099990990903090999999 -080809031000010811041000121314021504121314161600121314171600041814050600919299919993999990101999110999999090999999999909999900900999 -060801090900100811111204130811111200020514151200161704181204191903181800999990939091199019999999909190099909991990990099019999992999 -030808090600101008110400051213111400150213111604151713111800151717010400999092090999999991990909999919909999909199090910999130999999 -080601090900101112131304140515161300171715161800171715020400031919191904099990930990009009199909199999909909999991099999999919929990 -040809100600111111110500011213131300141402151500161717151500161604040300009099900999990991199939999991999901990909999999999902990999 -030404010800091010110800091210130800090206130800051414131500041614171700999992003999919999999991009910999199999099990990999990900999 -080409100300081112131400151104051400151104061400151616170200150116171700900999900299099909909990999999999009999090199999993991999199 -080809010400080805101000040211101200131314141500130414141500031616061500909999903099999990999901909911109999999999999999920009999999 -080109101004081112061004081313131300051414150300161414021704181919202000990909309999099091909909999909199099999991290999009911909999 -080309041000081109121204080213121200041414151500161718151500051818010600299099999099099090999911199999199999990909990009999930909999 -050809090300100809111100121302111100141415160400141417171704060118191904999290999990999909199991999019099990099909999099003099999090 -080804040900080810101104061212101300141212151300141617150100031802150500999099909099090009999999999999099991099919991993921199991909 -040408010900101010090900111212130400111212141400110605141400031516160200909990903999909999010909999999199999999009999999999991921919 -080901041000080911121000080911131300080411141304150611140200050316171800999999930990009999990999199909999999900999199090909991992119 -030808090900100808090904111212051300110204131300041415160100061718181800999992999999909010999999909909999199999100990993991019901999 -060808090400100808110100101212121200041314051500031602151500161604171700099099990990903999919999999991909000999919999199929909990999 -080809040400080809101100061209130100021414131304151516031700151505181700999999990099990990909900939990999191901999099129999999999009 -080509020400080610110300081210111100081210130400141510161700181801171704901099911990999999992909999999999909099090990909909309999990 -080801040600091010111100041010121100131302140500131315161700031515181804999990930090919999919909999909109991999910999990999990929990 -030508090600101010111104121202111100121313131300141515151500041616010400900092990999999099199990199999919999999991990999909030999999 -060408030900101010110900120213141400121215141404161615170400160115180500992990019999990991909919099990999999909199999000993999999009 -080801040904080810110900051213111104141414150200161717180600161717190300999009939999010999099900990909919999190091099999999919999929 -080309090900080510100200080404101100081213141500041613131500171701061500929999999199099999991999019909199009999091990990990309999999 -080808090904101111090904101111031200011302141500061305160400171318191900999900099999909099999999929911919391199909999990909909900099 -060805090900101004090900111112120100110213140400040413130300151616161600009999099999999909009991939999099119099999999992900099909999 -030604080800091010050800090911121200130214150100161717171704041818181800999992009999999999000999199911199019390909999999009990999999 -030808060400040808090904101002090900111212121200131415160100171717170500299999990099999009199999199099919999990991990003999909999909 -040808080800040909100200010909101100121213131404151617131800060517170300099999099990911999991939999900919999909099190099900992999999 -080109100400081109090500081112121200080213141400151515141404041617030600990099399991099999990999999999909100999199999999091990901299 -080309090900081010051100081010121100021314121204041516170100061804171700299999909999999999909999999109909190900109999113990999900999 -040108090900101011060900101012131300141515051304021616160300171717180400990990309999099999909990099109099999901999991992909909999909 -060805090300101112091304101412131300101512021600171712181804171701181804009999099299909090999999999909199009199999199019099399999990 -030809090900080810111100020512131300140415131300161616160100060417170400299999900999999919099909099199999909991900999993909909990909 -020808080300090909090400100411111200131411111500011414161704181806160500199291999999999919990909999199909199099909993900090990990999 -050108090400101111111100121212120200131404041500161417171500161606031500990090309990999990991999999000019999990999999990999999990929 -080401090904081011121200040506121200131415021600031718181600171718181600999909030990019999099999999009919111192099999990999999999999 -080309100400080802101100121213051400041213151400161613061400040113171400921999999099919990190999999999099900990999999199903909999009 -080806010900100811120900101313121400100213121400100404121500160305171804999999903999000999999999199999999119099999990900919990929000 -030804040900080805100900021111120900131314150900131316171700040616011700209999990999099919909919909991999991099991999009909939990999 -030804090900100811091200021111131200141504131200161517130400051501130600299999909991909919999999999109999199099909990100909399999909 -040804090900100811090100100812120600130212121400130515161600130304161600099999909999993999019909999909909119099900990999999099929999 -080809010600080809091004111112120400020513141400151617141404031819191900999999993099090099919991999100009999991909991999091099929999 -030809100600080809101100020409051200131415151600170415150100171718181804299999999099909919990909909190909119099999999093999909990990 -050808090600100808091104121212120100131314151600041414021600031718191604999990999099990000909999939090199999199999990991999919921190 -040108090900101011050400101012121200131406151600040215151600171717170300990990300999099999990990999199999109999199999191900992999999 -080809011000040809091000111212121200041314021504061617051500181818031500909990993999999999910909999009919991109010990999999199999299 -050408090900101108090904011108120400131103141500161617021500161618180600990990099990999099999931199999109099990921999990999119999909 -080909090904081011111200131011141200151002141400161017041804060119050300999909909999999909999991909091999091999909190909003092999099 -080105060900081010110900081010120900130214140900150416160300040417171700999999300991999999909999099199999119190909290999909099990999 -050108080400091008081100121010130200141516131700151516041700061816031704999990399090090909999999119099919009999999999909990999909920 -030809091000040808021000111112121000131312120400131314150100051604170600299099999999910909919999999099999909099919999913990009909909 -030804090400100804111100100806121200101314051200021515161600171515011600990992990099909999990999999900999999091009099919919939919999 -060508080804091011121200130214121204131315160100171818191904031818202000999900090999919900199991990910199999391909999999029909999099 -080801030900101111090900101112021300100412061300141512041300041604051300999299039999999999919901109909999990999999990009900999990909 -050608040300090408101100091208131300091214021300151516160400151501160400900990999290991999919999999990199911990199999190999399999909 -040108080800090910041100090910041200041313141400151502141400150304060500999990309999990999990991999091009999999919999109999000929999 -080401091000080409091000081112131000141512131300061602170300051818181804099099939999999990109901999019999999990199999192999119909990 -030808080200090909091000061112131004051414151604171414181604171920011600299199999199999999909900090999019090009999999991099039900999 -080809011004080809091004110204121000131412121500051617061500031819191500999909993999190019909910999019909999990199999090991099929999 -040808090900100808090100111202131300141505131304141516171804141616030600999990999990913901999991199099999009909991099999099920909999 -080401040900101011111100101012131300141406150200141416150400171705150300099090939099999999019990999909919909199999099099990099999929 -080809100300080811021204131415121200131617171804011619190500061619190400901299919999919099919991199919999099009909093099999999909909 -080809090200010809101100121213041100121213141100150516140300170406140400919199999193909990009999999999999990990909290999909099909909 -030608010400090508101000111208101004110213141500111617171804111617171800909992993099019919999991990919909190099009099999099999999999 -080805090300080810111204131302141200061315161704181920201704180120201700999299901999919090199991909999099019909910990190093999999999 -050808080800090603101000111213041004021414141400151516160100150417171700999990999090999909299911990199009999991990999193999909990999 -080809090400080809091000111111120600031302141400151316161600050417010400999999999099990990909999909990099911992999191999909030990999 -080104090900080810090900111213141404151213130600161204170500021818180300999999309999009919909999990199999009091900999990919999919929 -080305090400081010091100081004091100020412091100131313131400061515010400290999999099909999999999999190999090091990099999909030999999 -080909101000080409100300111212020400111313050600111313041400110115161700999999999299999900019999109991999090999999099909993090999009 -080809101000020803111200131405151200161414171204181818180600040119191904919991920999999919909990909199099990901909099999903099999990 -080801090400100811120400101314140400101314140500100215161600171717060300999099930990000999199991909999999999099199999119909902999999 -080809010600081010101000111212131400041212131400050215031400161617040400909999903099999999100909999099999999999199990929991190991099 -080109101000080809091100121213050200121214151604171804061600191919031604999999390999191909001999999990919990900090999099909999999920 -080809010500100609091100121314151600031718181604191918181604191902202004909999993090990909919900009999199299909199999999099919991190 -080306090904101010090900050211110400121314111504161617181900161617011900290901999999999991909991999091909009909919099910999939990999 -040805090900011011111200101011111200131306041200130214151600041717170300009999090993090999999999999919099909999999991111900992999999 -020808080300090905101000091112121300061412121300151414161300040104040400199291999999099999909919909019999909999999990909903000999999 -080809100400111111110100121313141400120204141500121617051500120618031504990099009999993909109999999919909990999190999199999199909290 -080909090900080604100100041111121200131111051400131515031600130415170200099999090999903909919999099999019099999999199929990991999119 -080909100400080909110100081204111100130206031400131515161400051515041400099099990999913991999999099919909009999192999919999999909099 -080808080400090410110100091213130600090213141400031516171700181805171704999099990999013999199901909919099999999190999099921099999990 -060809101000110212031004111314140100110414140400151515161600051717161600011999192999199099199900939999999999999000099999990999909999 -080909090904081011110100120611111304141414141300150216161604171805190300999909909999093900999999900091999999999199990199009919900929 -040405040800091011120800041013130600141013021500141016161500140116031500999090009990090909909999909999999019199911999999993999999929 -080509090600081009090100110412131300041412131300141402151500041617031500999099099990093900199999099099999999999919999019999099900929 -080804010600040809090900051010101000111213131400040215141400041616160300999990903099999990199999999010999099999199990909991099909929 -080604091000081112101004081314141400131302150300161717171700050118180400990099099999009099909999999091199919291999991999903090999999 -080104091000081112091000131415091000060415090200161615041700051603171700999999309990099901999991119009919999999999199009909999999299 -080404010600080910101100080910100400081212121200041313021400031313050400099999903090090999990999999991999999990991099919999900929999 -050401080800090909080800041011111100121010060200131415041600171703161600999990039999909999199999999090019099999909190009909999999299 -040808090600011009090300111112121300111102141300041515151300041605041300099099099993999991092999999999099911190999999990990009909999 -080808020500030906100400040411111100121313141400151513140100161717171700991099191992999999010999999009199099999999999903909909909999 -080309090900081010100200111105041200111113141500161717181804060417011800999999299099991909991999909990919900190991999909009939990999 -040108090900101008090900111112060400111313131300040414020500031516161600999990399999909991099999999910009999990091999919999190921999 -080909011004080811121000061314151005161718021004191918200300191918212104999909903999001990909999090000999099109091999999999912999990 -040809031004051109101000121309021400121515041400160615171400181818011400099209099990999990919999019909999999990990990901909039999999 -080604030900021010100900111104121300111114141400151616171700050116041700099990902991990919999999009999909999999109990909903999999099 -030805091000110808121200041302061204141415151500141416171700181818010400990092999091999991999901090991909909999999199909999030999999 -060808080800090910100100091110100500041202131300141215161300170415040300099999099999193991999999909919999011999999990009909902909999 -060809011000111112101000111113131304141502160500141517181900031504191904009999903999909999991990990999199111099999999000929999999090 -040808090400030608090100100211090500121204090400131314141500041314141500091099999999993920199991909119999990099090999999909999999909 -080509090900080304061004081112131400081504021400011617171800161617171800099999999099999092000991199999199099099001993199999999999909 -080910010400060410101100121204130500021214131500161614131500031714131500009990093099990999019999999999909111991999999990991999929999 -080809011004080809101000111111110600120213141504121604051500121718031500999909993999909909910999999991099019009190999099991999991299 -080808010400091011111204091313111200141313021200140615161200140317051804999999093099090099199999999099999091999091999919999190992900 -020809091000110312051000111313041000111313141000111516171700060116041704119991919999290999999999099999999190099109999909903909999990 -040108080800091011040400091211131400051211021400031516161400061716161400999990309090199999909990999099099991999991992199990999909909 -080803091000080811091004121302091404121515151405011617181400061920211404999099929999199091999901090991999999909919993990991109901090 -040809090900020803050400101111110600101212041300101214151600100114141700019999929091999919909909999999909999999990091090993990999909 -050108080804090909090400101112131300021414151300161606151700031618150400999900309999990999109911999199999099091999099999999090929099 -080910110500080910120300081313061404081313141400011516020400151517180400999099990999909990092999990999099099999091993190999119999109 -040808080300090210050400111212061300111212131300111414141400110115040400099299199991909919090999999999099990999099991999993090999099 -030808090904101111121304101111141504100616161600021718180100192018180500990902990999990099990999000999909999991090990993919999911909 -050808091000010808101004111111121200130614121200151602171700041604031700090099999993999091999999099091999099990919999019909999990929 -040601080400090910081100090912081300021415051300161615170400031615171700999990039099009999190999909991999119091999999900999999929999 -060801091004111213131400111515131400111616161600041717021800031717040500099009030090099999999909999999199999999991990910999900929999 -080603091000080411121004081302141400081315141400161617181800160105180400092999991990910099199999999991999119991990999009993090999999 -080609090900101011110300101011020400121213141504011616161604171718190500099990909999992999999999199909109911009199993999090999990009 -080804010400080909091000051111111000121204130400121206131300031415160200999999003099990909919999999909109909999999999909999991921119 -040408080800091010040300111204131300111414131300111414021500050116160600999990009990999990902909099999999999999991990990903110999999 -040108091000111102120300051314151500161317151504161317170400161306181800991190319299919901919991199999999009909999999990999009999999 -080808090900020503090900101104121300101415151300141415151600060104170400999991929999999910909999999900099999091999099099903900999099 -080309100500081112130400081112021400081512161600171818161604171704010600921099991999999999910909919909919909999909990909099030999999 -080809040600031002111200101013041200041313141200041515141200051515010400919992910099090999199999999999099091999909990990999930909999 -060108080400091010101000111102121300141115161600141415161600040317050400999990390090999990910999199091909999999999999999909190992099 -080809091000030411090500120611131300121411151500121611151500021704010400909099999099099929909999999909099909999999999119911030919999 -080909041000080911041000081212041000051212131000141506021600140103171600990999999999909990099909999999099991090191990091993999999219 -080808010900021011090904121314151600121306041700121805191904031818191900999999903991199019119990109990009999999999099909029999999099 -080808010600040909091000111213101000031414141404150216161700181905161704999999903099999909109900999991999999902919099199911999919090 -080805010600080809090900021010111100120410131100141414130400150304160400999999903099099999199919099109999999091999099999919009929909 -080808080600090210101004111212130100140315151604171818151904202020200500999099191991999019919999039199099299000909099999009990999999 -080808090904101010031100021213111100041415150400161715181800060501181800999900999099929919999910099919999099099190990199900399999999 -060108040500090908101100090908100400121213101400150213100400041616160300990990399099000999990999999910999999091999091999901999999929 -050808091000111212091004131212021000141516171704011515171700061819040300999990099999999009909999109091199099909919993999990992900099 -080901101000080909101000111112121300030512121404150616171800151502040400999999939990999999190990909999999909002910099099999100991999 -080910061104080912111100130914150100131316161604031717171704181920022105990909909999909909099999939900199909909991999999029991911110 -080603091000081102091000081111090400011213141400151504051400000000000000092999999990910999190999999910099399999000999999999999999999 -040308080904101010100211121313141516120613051516121717181519041717011504929190999109999099901999900999999099999900990901099939009999 -050808010600030808091000111102121200111104121300140415151300000000000000099999993099901929991991199999909909990999990990999999999999 -040809090500031009111100121314111100120214150100120414150600000000000000099999099099999920099990099999999119399999999010999999999999 -040809100500061111120100131111121200130214141500130414031500000000000000009099900990913999999909999919909919999092999999999999999999 -080804090300081002090900061011111100121013141400120105040400000000000000999299909990919999199901999999099009999300099999999999999999 -080809100300080802040500041111111100011213131300041214140600000000000000991299919999109991990909999910999399999990090999999999999999 -080808090900041004110400121212120500131302140100031306141400000000000000990999990990090990909999909991199919399909992999999999999999 -060804010900101011110900120511130900121202141400030415141400000000000000009999093999099990909999909991099919992909999099999999999999 -060108090900101008081100101012020500131314141400131304040300000000000000990990399999090999990991199999199909999900299999999999999999 -080808080900051011090904121013140100121515150200121606031700161604181904999999909990909099099990139991999099199009199999999921990910 -030808080800040910061100120402131100141515161100141515170500181801171704299999919990099999109909199099199099099991099919990399999990 -060809100400010808100200111213101404150413131400161617181400161605180300091999919093991999091900990099999099990909999909999092999999 -040508010300090808101100121313131400121506021404161617181404161619191400909990993290919909191999999909199990109099999900099099999999 -080808090400011010090900111010020400111205131300111415131304061617170300991099199993999999910909999900199999999099999099090092909999 -080910111111080410101205081314141503081614140417011618191717202020210206000999999999999090990999909909992009099999993119999011999910 -030809091004041112121000021112121004131415160500131718191900130601191900299909109999999909999919900190909190999100999199990399999999 -080503090400081011110600121013110200121013141400121013151404161701180400999099020990999999990999919999919999999999999011000309909909 -080903101000080911100600080902120400081304141404151617171800150117170500999999929999910999919911199999909009901990091099993990999999 -080902100500081111121300031111141300041515041300011515161600041717170600119099910999999929909999009919999090999999993909999090909999 -080809090909080810101112011304141415161616161404171704050318060219201818909999999909090990990030999919990999991990999999901092991119 -040805010400080809091000030409091100120213141100121213141500061613140400999990903099090990999999909299199911999199099999999990900999 -080903101100120206101100131313131100041414151500161414151700160401050400129091999991099991909999999019999999999999990900990300999999 -080809090900101006111100101002111100120413131404151617180300050119191904999990990999099999999991199190919099901999291009903909999990 -040108090904101111060900051111121200131415121200031402160400171717161600990900309990909999999999099001999099999910999999929190999999 -030806090900080810101104121302101100121415161100121718181804120401190500299999909099999091999991199999199000999091099999090309999909 -080901100500081112101004081313131400021516171404180619201400181803201404099999039099009099199999999910999190001009999909999999992990 -040308080800091010110400090210121200131415121200041415150500161401170600999990290099909999999911999199999190999999999190909309909909 -080509100111080809101111121314101516060417101819202020200219040321212119999999099399901909990900090099990900199990199999909991992999 -060108040904101011110904101011021200131414151200161405171200181803191200990900309999191099991999919099199099990991999909909919999299 -030809090200040504091000111111101000041204131300141415131300161616010600219199999199999900099999099999919099999009999009999030999999 -040801040600040910111200131313141200020515141200160315151200161717171700099999030090009999109999909199999099991999999990992999919999 -040408030900101112130904051106130900141115130200161117181800160117181800909290909990099099999990999099919000990999199119993999999999 -050104080400090904081000090911111000121311110600121402150300120416151500990990399099909999909999909019999999099109999192999199909199 -050108080804091010111200131010121200141516160200171506181800041504180300999900390990909909999999099091999909190999199909909999990929 -030802090900080810090900110410120500131310141400061515141400041604010400919992919999999999909909999099009901990099999999990930900999 -080909101000081111120100081111131300031414041300151414021600041705061804090999900999993999919999999999999999992990191911900990990900 -040804010400050809090900100802111100041213111100141515161600140315061600099999903099999909991900199991999009999919090999999999992909 -080803091000080806041100121314050200121315151504121616170400120116181800992199990199999909091990099999919099909091999919993900999999 -080106090900081010101100081212130400081214020500041516171704181818031700999999300090999999190999199999199991099019990919090929999999 -080909100300080909111200130402041204141516161200141515160600140105171800999299991999919909199990990091099099099999999919993000999909 -080809031000081111111200131414151604131414150200011718191904062005191904909299909199990999991999990999919099199901993119090999900990 -060809090300040209091000111112121200051314151600131314171700041801171704099999099290191991999990999919909019099990999999990399909990 -080808090900031004090400060211111100121213141400121215161400040105171700999992109999990991909909999919909900999999999009903009999999 -080609101000080809101104051209131104141503161100011718191104202020190200909999999999999090909990990009099092199099993119099091999919 -080309101004080509111000081212020400081212131400151616161704061801191900929909999999910990919999999999109999190909190991090309909999 -080809090600080809101104011212131400151212050400151602170300181819191904999999999099990090009939009999909199999990991109990192999990 -050408090300100208090900111213131300111414151500111414151500110401040600999290099999119901999999999910999999999999990909999300909999 -040808010300090808101100091204131100091213131100041405150200041615150600099999993299909990019909999999999999999091190901999990900999 -080904010500081010111200081313111100061313021400151616161600040317170400009999093099900990999999999999919099199991990999909910992999 -080901040400080909101000081112101000111113131400060415020500031616161600999999930090999999199990999991099999090991099009999919929999 -080806091004080811021004031111121000131414151000131416171800130519011804990909990999019099919929919990999099199991999900999039990990 -080509010400101109121300061414141400151516171700151516021704031819191904099990993090001909991999999909919999999991999909099919921990 -030809100200111105121200131104121204131414150100161617151800161606150400211199999199909999999999090909199990390999999000999990999099 -040408090300100411120500131311121400131311021500011617171500061617171500909290901999999900990999909999199909999091993999999999901909 -080405030900080810110900040210100900121313141400151616141400041616010600099999902999919990999991999019909099999919990919909930999999 -060801091000111213141504111616021704111616181704111919202005212119200300099099030099109091990909190999199999909091999999009992999999 -080806091000080809091000111111120100130314151600130414141704130218040500999099909999099999909999039999199291099999099999090190911099 -080501091000111212091004041204091000021314151000160317151800161606151800099990939990900099099999999019099190991909099999992099999999 -080109100400080909111104081212111100131212140600040215160500171717170300990099399990999091999999099999999099090910999100991999999929 -080809100600080311121300041415160200171415161804051915161804191901161800900099990999211999991909919999999009900999999010099399999999 -050308080800090410110200121213131400150413131400151516160100040616160400929990901999091909991990999099999909199991999993909999990909 -060809101000110209101000111213130100110513130400031415151600041715041600000999999991999991909991939999999999092090999090990909909999 -040809090400080809090100101010110400121302140500121315141400120616170300009099999999993999199999009019099919099919999999990199999129 -040808090900051011090400101012021300031414141500161717181500061717011504090999999990099999000999019999119299999999990901909939999990 -080903101000110212101000061313141404151316161604171718190500171701202004129991999991009991999999990099099909900190099199999309999990 -080909010500080409101104081213131400081213131500040216031500061716161500099999993099000099919991909999909999999199990199990929909999 -080910100300080410101100121204111100121213141504161717180200161701050600909999099299999909909999999990919901900911199991999300999999 -080109061000081112101004051314150400161617181800161617181804021919190300990999309990099091909900099910909990999999999999019999919929 -040608080400091011080100021011051200131411151200130411161200130316160400909090999991113919909999999199999900099099999909999999929909 -080509010400080809101000111109120400040206121200131313030400000000000000099999993099919990909991909919999009999199099929999999999999 -080309041000080509091000021111111000121213140400121201150600000000000000299999990999099919099999909190099919099930999990999999999999 -080804050400060909100200010909041100121213111100121213130300000000000000999999000090911999901939999990999909999999299999999999999999 -060408050900101008030900041008111200131314151200130114021200000000000000900990999999099999920999999009199919999391999910999999999999 -040808030900100208050900041111120900131111121400060401141400000000000000992990999990109901999999009999999099090039999999999999999999 -060803091000040811050200041211131300141411151500141401151500000000000000092199999190990990991900199999099909999939999999999999999999 -080109090300080809091000051104021000121213141500121204061500000000000000999999399299199990919909019909009990999900999999999999999999 -060809091000030809091000110802121200110813141200110504010400000000000000099999999992990999119991999999199090999003099999999999999999 -080509091000081109091000081213131300121202141500030406010400000000000000999999099999090999099909999991199919092003099999999999999999 -030508091000111112131004021112131004141515130100161515171800190417170600900092999999999099999919000199999191390990999990909990909999 -040808080300090210111100121210131100121214131300151515060400050116170400999290199990199999999991999999909990999100099999903099999009 -040808010400090808101000061112101304031412151300161414151300171802150500999990993090999990999900000999199999992999999909919999911109 -080910100300080204040600111111121304141414141500011617171800161617170500919299199999999901000999090991909999999919093190999990999999 -080809030600080510101104121310021400121516161404121517181400121501190400992999919099999000990909119999999999909990990011999309999909 -080109090900080810060400111213131300141502050300161517171804161617170400999999309099009919999919999011029919990909999990099990999999 -080309091000080509111000080212131000061412120400151515151600041717010400299999999999009999909911909999099009999919099990909030999999 -040804010400040910111100020912131100141412131500141412151500160312060500099999003090119999909910999199909999999999999999919990929099 -050808010400091011121200091011111200091013020600091004141500040316171500099999903099019999999999999999199909999901090990909919992199 -080109101004080809111100121309141100041315020600161315171800051315030400999909390999119900919999999099109991999999990900909990999299 -040308080500090408081000111106021200111113141400151516141700150116041700929990999099999900910999099999109991990919999190993909999999 -080404030900080810111100121210020500040410041300141410151500140106151500999299009199099999910990199999999999090099099109993999999099 -080809010500101009111100041009111204131415021200031617061200181818041200909999993099909999999990910099999011199190992099999099999909 -080809090300050209100400111104120100131314150400131616161600171717170600999299099999100901999999939910199911999909099999999099999909 -080909011000081109121000081104051000131402151500160417151500031717040600099999993999001999999990909999919111991999999009929900999999 -080609101004110402050300121314041500121616161500121717171500120118181500091900919299909900199909999991099999999919990999993099999909 -040809050300101011111100101002121204061313121200141415161600140117041600900990099299999999199991990919999099999919099109993099999099 -080903051000080909101000021106121304141516121300171518121300041501041300929999990991999919909910990019999919990919999900909399999909 -040308080500091010080200111112121304111114151500161617150400161601180600929990999099991909091999990990919999999009099019999309999909 -080808090900020403090904100406111200131415111200161717111800050117181800999991029999999019909909999190999190090199999909903999999099 -080306090904081011091204080213141200151513161600151513170100051813190400299909909999099090909919009919999990999999999113990999909009 -080808050300040909090900041002061100121013141400151616141400151517010400999999900290999999199999909091909919990199999919999030990999 -030808090900100808111200020613111400151313111604011717181800051717041804299999999091999919990999999109909190909919093909999909909990 -040809100300060909051100121302141104121515161100121515170400181801171700001299999990909999199900190999199999099991099919990399999999 -060208080800090910040300090911111100121213041400121516171400051801171704019999199299009999999999999910999919099019999900990399909990 -080909010400101009111204061313131400151502161400151517161400030405161400099990993099901009991999919999199911999909999999920099999999 -030808040900100808040900100502110900101212110100061213130400041413150400299099999999999999109990909991999099390911999990999909900909 -080808090900101003090200111112121300041412121500051616161604171806010400999999099199929909991990999999919009999990199999000930900999 -060804090300100209090400101104121200101313121400151313161400040501161400009299099999199991990990999919999090090999999909900399999999 -080809100500111112120300111112121304011414041500041416021500171717170600990099009999999999992990990990919399999990990911991199999909 -080809030400080809041000110209101000111212130600011212040500141414151600992999999099990990999911999999099190099990993999999090999009 -060809091000111209090300041305021404131315151400161715150400160118181800009199099290999909919999900990199999999099990199993090999999 -020809100300110512121304111415131300111406161600111417161600040104181800111291999999999090909990099999999999999909991009903009999999 -080910101004080211111105031213140100151617181804192020181804192020210600199909190999999021119991939990099009900909999999099999999009 -060809090300100209091100100412121104101312121100141504161700050118181700019299199991999999999909990999999909091090991099903909999909 -080109090900080810021100051213041100121214041104151617170300061818181800999999311999191990909990999090999990900999290099900999999999 -080401050400090910111204091314141200151302141200161718181200061718180300099990930099009090199999909099999991990919990999909999999929 -080910100300080610020400081112121304081114121304151116171700180501171700099299099999910999919999990999999009909901090919909399909999 -040508010600091008081100121212131304141502131300141416171704181818190300999990093090090999190999990019999919999919999919009919999929 -040308091000111111040200051212131300141212130400141516160600141501160400921190999199999909001999999999999099099001999990999399999909 -040108080800091010101100121314141100120204140600121515161700120515030400999990390999990901099919999990999199099190999990990990999299 -080905101000111111101000011213131300141415021604171715041800171706031904009990999999919991919939999909199990109990199099999991990920 -040108090900101108091200131415161200130516161204130304021200061717171700999990399990009991999901199909999999909991999909992910909999 -080306090400080802090400100511091200101313090400141313041500140116151500299099909999190999199999009901909999990990990999993099999099 -040406010500080909090900080210110400081210131300081214141300030415140400999990003099999999910911999999199901999909999999929990990099 -080809010600100409111100021209131100140409151500141616161504140317180500999990993099099909919911199109909999999909999999099099929009 -080909100500080809100100061112101304141516171300141818021304141903041300990099999999093999999900010990999009199991999919091909992999 -080909010500080909101100121202131304121214151300161714180400060319191904999999993099901909991999190991999919090190999990902909999990 -050808090300100808090900101106120200131314121500131316121704040401171700999290999999999990991999999000919999999909199011000399999999 -080809090900101010100100060511110400120411131300141502130400160317171700999990909999993909919990999999909090990919991199919090929999 -030808080200090410051100091210101300091214151500161717151504041717010600299199999199099999901999999999019900990999990909009930999999 -050808080800010910111100121310100200141515151500141617171704041806030400099999090993199990999909919099919999999991999099000920990999 -080906100500080911120100080411110200131313131400151617171700041616030400099099900999013999999990919990919999990999190999909920999999 -050403080804091010020800111010121300041415151300161615150600160117171700992900099999991909919909909909199019999199999990993099999999 -080808010900040410110900121213141500021206161504171818161500051803161500999990903999919990100991909990099199901999991999909999992999 -030406080900101112040900131312050900130212140900151516171804151516011800990092099990909919999999999999099111199909199091099939999999 -080809040600030809101000111109041200051113131300140215160100041717171700990999999099999920990999999990009999990190990193909119999999 -040801090500101111121200131104121200131414040200131414151500061603171700099099030990919909099999999909919999099999199999990991909299 -080409090300081011091200081302141404081515160400171718180600170118180500999999099299911990199911090999999990091099999090993999999909 -040104080800090910111200131314121204131306150200161717151800051717150300990990390999909991099991190990919999190999990991909992999999 -080809090400101010090100111213141500111604041500110517170200110317170600999090999999903999019900919900099999999099199991999990992999 -040801090400060809090400100811111100100805120200100413141400151503141400099099939990099999910909999999919990099999199009909999999299 -080309101000081104100200121212121300050406141300151516161600151501040400921999999190909990991999999990099999990090199099999300999999 -060808090500101111090900011111120400131414150400131404020400031616161600990090909990999999909939909991999091099991999990999019929999 -040804030900101104120900101314020900101514161600101515171700050106171700009999092999091990999999119909999990999919990909903099999999 -050808080300090210111100121310111100121306041400121515151600120401041700999290199999099901999999999990909099099199099990999390909909 -060809090500031009091104121314151100121614151104120217150100121818150400099099099992999091099999909919999990909199999193999199909109 -080802050904080810110900030610111200130410111400131510161700151501180400910909919999999929990990909999999999099099090000999309999909 -040808090900020808101100121212030400131404041500131316161500060116160500990990999091919919920999999109999909999990999090903999999909 -050808010900041008110900121313041400121516021400121718181400120318061404099999993990001999091999909999999900199091990999999999992900 -080909090900080410031100081213041400041313151400161616160200060501171700999999909999992990091909999009099999999900199999900311999999 -080808090400101010100100111112131300041112131300030402061400151515051600999099900999993990199999099099999999999919099009929190999909 -060804090909040804101111120810101103120813131415121613131715050118190204090999990999099909999999999990902099099099999199103191999110 -080910030400080911120200080913141400151513161404151516161700180601051904992999919099911999991999999009999909909999199091909390909900 -080909101000111212101004111113130100021413131500161705181504192003061504099990999999909099909990939999999119991090999090019909912990 -060802090500101011121300101011121400151611031704151518181700040104181700091099011999990999990999999909209919909199999099903999999099 -080803091000080811121000130514060200151515161600171717181800040401181804992999991999091999091909909090919991999919999909900399999990 -080808080300040209100600111104101200111113131300051415160100141415170400999299199990119999990999999990109909999091990903999999999009 -030809101104050412101100131302101400131315151500161617061804160119181800219909919999999900190991099999909909991999999009093099999099 -080809050400031010101004111212130600141212151500160217180100191919181804909999900099999029909999909199099990991909991193999199999190 -080808010900101112120900060412120904130214150900131316171800050316041800999999903990090900999999990991099919999190099199909909992999 -080901101000081112131000080512130400081414130200151414061600040403171700099999030999019999999990909990999999199999190990900991999299 -080903101004110212101000131312061400151316161700040516161804191919011800129901999991099991900999999099909919990099099990099039999999 -040308080600020908041000111212131300051404131300011515151500161617171700929990999091190919990919999919999009999190993999990999990999 -040501080900101010101100121213130200121206131404151603141400041617171700999190031199999909901999999999919909900099999929909990999999 -040808080400010910101100090912061300041415150400141415150300050216161600099099009993990999990990099010909999999999999999901992991999 -040808090904100808090100061112131400151116131704151502131800191919030500990900999990993999019900909999909991909919099199991990999299 -030808090904050808021000111112131000111112121000141516171000140404010600299909990999919909919999919999999909999090990901990030999999 -080808010500090909101100121213141504121616161604171718021900031718040600999999903099991999001990090999919999909991999910999900921999 -080808010400040509101104121212101100131415021100031617181100161618180600999999903099001009099999999999999111192999999000999990999999 -080405090900081002110900081012131404081013130300151016061700040116181700999999009999911999191991990999929009999999990099903909999009 -040408010900101010090900050211111100121204131300121206131300141403040400909990903999909909991991999910909999999999999099991900992999 -040106080800091010101000111213130400141413151500141402160300041705161600999990300999999900190909999099099999999919999919900992990999 -080808090400011005111104121013111100121213141500021613061700161618030400990099099993999099099990099919099999091999099909919990991299 -050106080800090910111100091212111100130212140400131516160300040416160400999990300999909999099909999199999199099190999192900999999909 -080909011000111111111000041212131000051206141000151515021600031717040400099990993999991909909999099999999999190901099919999100929999 -060108080900101011120900041011120900021311141504161611171800161603050400999090399999999999999991099099909110001990999990999900992999 -040808091000110808120300111314020600111304151500111616151700040116051700099199991299999999019991109999999009999199999900903999999099 -020808090300101104120400131111121404151505161400151517181400060117171400191291909990990919999999090199999990099990999099903909999999 -080104090600081011121200081314141204081302151500161317181500041305180300999099300991009999999910990999999911990991999099909099999929 -080808010400060910111100121213111104141516171700050416171700031818180200999999903090999990099990090900199099990999999999990991929919 -080409030500100409111100100209111100101213130400141515131600040615011600092990999090999999999991999919099919990999090900909939990999 -080805090904080603090900101112131400151616160200151717181904151701041900909909999999999900209900119999919999199199990900099399999909 -080808080900100511120900101004130904021414150100161414171804191903170600999999909999009999909990900909099191391999999900019990992999 -050809090900021011110600121004110100121013131400151013131600030417170400009999909091199919999999039999099999091999099999920900999999 -080909011000080909111004120513141000120215161004121706181804191920031800999999993990909009919909109991099919909190999099091999991299 -040809090904040810101000110805120200110806131400151515151600171701031800099909990999999909990990919999119999990001199999990391999929 -080905101004080911031000080911041204081311061400151611170200151601181900999909909999992999991990090999919000990999199019999311999919 -080601090900081011090900080412121204041302141500131305161600031717181600099999939990019990919999990091099919099909099999929999999009 -040809100600110312101300110414100500111515151500021617171804161617011800009999909092990999099999909900099999991191991990099939999999 -080801090500080810091100121204091300141404091304141415021300031515061600999999939099010990099999909909999999909901999919999990929909 -030802091000111204091000131313091004141415090600140416161700051816011700911992199991900999999999990990999900099991999090999939900999 -080909040500081003041100081004121100021314141100040614141100151515010400990999099099299999909919099199099119090999999099999030999999 -050308080600091008081100121013021404121213131500161616161500041704011500929990999099999909910990990909109999199999999991990039909999 -080804090900080805020900041011110300011012130400141015060400141016161600909999991999909990912901999999999390099909999009999990900999 -080104090900081011091200080413121200080213061400031513161400171705041400999999309991009999009909999999909190999199999909921909990999 -040106080500091010111200131313141400151515141400160217181804161603041800990990390090900999109999999991999999999910991199099909992999 -030809090904101006110400101002111104121212121300141414151600171718010500299909190999099999990991990991909999199999199901999030990999 -040808090400020803091000111212041300110514141500111614171700110106171700099999929091990919990909999909009999099999991009993099999999 -080910010400081110121204081110121200081310140600050215151604171717180300009999993099119099999999999919999990999190090990091999999129 -040801090900051010101000041112120300061312121400151516161400150417021400099999030990999999199900999999929909990091999999999919990019 -080809100500031111120400130411141400131502141400160617170100161617170400900099990992990999909990999991999009999910999093999999990909 -080809051000080804111000041213111000031402151500161617150100061818181804900999999999999990099901999911009299999919999093999119909990 -080809090400010804091000111111121200131402060400131515151500130405160300909999999093099991990999099199999110999919099999999019909929 -080910100600080910100400081112121304141512160100051702040300171718181800999099999999099999900909900909999011390199999199999102999999 -040108040600091010101000090411111200091302111200141515161200051503161200990990309090999999919999909909999091990919999909909999992999 -080801090900080810111100040612111300041415160200171715181804170503181800999999930999019909099990919999019000999999199099090999999299 -080401090900081010090400081004111100121212120500131402151500160306151500099999939999919999010999999099109999999910991199919099929999 -040809090300100211110400101011120600131313140500151515161600170401161600919290199999990991999991009991999990099919999909909399909999 -080801040400080909090900041002110500101012111300031415151300061615150400999999030099999909910991999991999991092990999099990999909909 -080808080900101011020900031111040900051212121304141516171800041616010600999099999999011999999929999999019999900900190091909930999999 -060805030904101112090904011312141400041315150200161315151700181319171700909900092990999090919930999999919919190999999999909999900099 -080809100500040809101104011209101300061415160200171718161900171703191904999990999099990090999931119900919099099909199099999999999290 -080809090900080810100100061112101300141102050400151116161704150416160300999999909999093909999991109999009019990919999991090992999999 -080609101004111209031304141409150200141409151600171717151804191901150500099900992190999090991999999999919990999099199911009390999999 -080808090400011011120400041111120500131313140400150216160600151516160300990099090993990991999909909919999990091999991190999999999929 -030805090400101112121204021313140600151516161700181816161700181801041700209099190991999019099999009190999919099999999099999309999999 -030809091000051112121000041302141004151614141000151718191904150601191900299999109990999991909901190999999099099019099099090399999999 -080305091000081106121200081314121204021313150100161616151704041819171700990099299099999991099909090999099199191999999919099099900099 -080809091000080811031000021213041004141415161000141415171704061801170500999999909999129991999919090190999990099999999109090399909909 -080901101100051213130600121214140400021514141604171717171804031919191800099090030099999999199991999199909199009199099999020999999999 -060804040903100811121313141111021313141515161717141818181717141905010404999920900190999909909999019999199991099919999999990930000999 -080808080400090210110100051204131300141515131304141615171700140306171700999099191990093901009999999919999099909190999999992099999999 -080808090904011011111200131411110200051515151600041717181904061717031900990909099993191999991900999090919999999999190901099929909999 -060805090904031011090900121311141404121511141404120216170100121818181800009909099999999920990999990909999909909900991193999119999999 -040808010600091010111200021010111200131305111200130414111200150316160400999990093091910919999999999199999999999909999009919900929999 -080809091004081109091000121313131300041402050600011516161600171717040300999909999990099909990909999911909099999110993999990902999999 -080309041000080409041000080211111000050611111000121314150400120401151500299099999990999999009911999009999999099919090009990399999999 -040401040800091010101100121313111100121313060200121415151500120503161600999090039090991999099909999999919999099099199999990991999299 -060208080400090903081000090911041000041211131300051411151500041601151500919090199999929999999991099909909090999999990009990399909999 -060808080300090204101004090911101000041213141500161613141700161601140500999290199999999091099999099919099090099199099199999390999999 -050809090900101111040300101104121304141414141300011516161300061716160200009999099990999999902999000909999999999909993999991991901919 -040809101000010808101000111213140500040613151500161617151500031602181804090999909993999999199900009009099999999919999999929190991990 -080806090400080810111100121212120100021314151504160514141500171803191904990999990099909909099999939910099199901099999999919990912990 -080802090900080310090900110510121200131410121200151515151600040401060400919999919992999999909909999099999009999910099999900300999999 -080309101000081109091200130214061500131605171700131818171704041818010400299999990991990991990990099919909999999109990919099930909999 -080808010600020910101000110404121200131414121200131515151500030504160400999999113091999919009909999199999990999999099999920900999099 -040809011000111213131000140613131000050215161704181815191700180315191904009999903990099909999999909009199911009190999999999999929990 -080809010400080809101100121213100400140213100400140513150600140313160400999999993099990990090991199919999199099999990900999909929909 -080104040900081011040900081212121200131402151500131616150500130616170300999099309991009990990999999199999111999099999990999919909929 -030809101000050411061200131302141200131314141200151617171200150401170400219999919099999900109991999999999919990019999990990399999909 -080306090900080510090900080410110400021210131300041410131500041414011500290999999999099999909999999109009119999999990910999039909999 -080808080400030402090900041011120400131314121200131315151500161605010600999092019999999999100909099901999999999919999099990030999999 -050804010904101011110900101011111200021304141400151316141700061303171700909900093999190999990999999190909199999999090199909299999999 -040401080800091011121300031414121300150414121300150416051300150216160600999990039090009999199999909209999999999919999099999909911909 -080909010300080809101100121212131400150616161704150416160200150418180500999999993299909990011999999099119909909999199091999900909999 -080804010900100811120900101314150900030614151500161614021700161604050400999999903999001990999909919999999999992091099119999900990999 -080809090400041009110100121202131300141405131300141515160300061515170400999099091990093990199999199900999999999090299999909909999909 -080901101000081112101004081312121404151302161704181319200600181305200300099999039999009099999990900999109091900919099919999999990929 -080109100400080909100200081112101304081415161304171515161300051819060300999099399990991991991991190909099909900999999999900992990099 -080803090900101011091200101013061204140515021200161717181804041701181800999990929999909999199999990091099091190999190919009399999999 -080808030904021010100900111112060904111112130900011412150400051612171700999909092991999919999999090999999900099199993900990999909099 -030804040900061011120900131302120900131314121500041414151500041616010500299099109999909901999991999991909991190999999999999030909999 -050801090900100811111100060812131304041414130200151414161700151504180300099999930990099909919990990990919099999999190991999019999929 -080909040300080909101100120413101000141414021500161617181500061601051504990999999299999909091990099099199999199909999011999309909990 -080106090900080810090904111213130400140215150400141415150300161616160500999999309999009019090919999919999919099099999992990999999909 -080909090900080803101104121306101400121502141404121617181900120117040500999999999099929090990999999900199111909999991000993900999999 -080903101004110204101000061212131304141215131300141415161700051819011700129901999991099991990909190999999999999991999900990039900999 -080909010400080909101100081213100400081204101400150216160500061717160300999999993090910991990999099990999999090199099199900999999929 -030805090904101106090900121202131400121515141400041616161600171818010400909902099991999991090991199909199999999999199999900930909999 -040108090904101108090900121108020500121206131300140415131300161715150300999900399999919909910901999999199909990999990999909992900999 -080803040400090810111100091205111100091213021400011506161400041515171400999999920090919999999909999990199900999901993999999919909109 -080909090904081010100300080211110600080511111204131415161700131301181904099909999999992991999910999999909099901999091109999300999900 -080109101004081109120600081309141404081502141400151516171704051819200300990909399990100999999990190909999991999919999919099902900099 -080808091000111111111000050206120100131314141500131614141500030404041500999099900999999991919909939910099999099999999099920009999999 -050108090400101010111100121313021100141304151600140617171604141817170300991090311999999909919909999999199090999991999991090992990999 -080805040400080309101100120609131400121209130400020409130100151515161600909999990092999919900990909999999999091099999913919109999999 -080506010900081011110900101012130900141415020900141404160300040417171700999999003990099999199999109090199999999901999999900912999999 -080809090600080809090100041005111204131311111200041415151200031617180200999099999999093990019909990999999909199090990999999991921119 -050804090400011010101100121213141400121313141400021515061600171717030400099099000993990991090999999999999999991990091999991990999299 -040308080800090410100200111212131300111212141304111516171800110506011800929990999190999909901999999999999990909090190901990039999999 -080808030900021011040900101011110900051212131404011212151600171706041800992991999991999999909999999910909099009990993900990090999909 -080906101000031102101000051213130400041213131400151216161700150401161700199992109999119999919909999999909099099919090099999399909999 -040809030400061009090200111104051200041313141200151513161200151501161200092999099090991990991999999900099990990099999911999399999999 -040808091000110812090600131312090100051412091504161616021700031819171704990090999099999909999999939909999000109999199911999199921990 -080804090900080804090300061010021100040510121100131313130100141415160400909999999299999990019909109999999991990091999993999909990009 -040803090400100808020500111111121300141515131300141515161700140618011704929090990990919999910999199991999990999999090919999039990990 -080801060500090810111200091314151504091604151500091617021800031717041800999999930090000999199909190900999999999991099919999999929909 -080902101100081212120400031313141504061316161500051716161504181818011500119099910099999929919999990990199099999099990990099039999999 -040808080300090205100600111212101300140412101500161717181804161601181800999290199999099901990999999099909909990910090909099399999999 -080909090300081011121200081002131200041415150400160615151704161618010500999299919999999999199901909919099019099999999090099030990999 -080909101004080909100300081112121304061112051400011516161700041816160200999909999990909999902999990999919000999099193199999991900919 -030808040900051008020900111010121300111415161300111718161300060104161304299999990999919909910999199991999910999109990990903099999990 -080909010500080909101104120213131400121513131604121515031700120406181800999999993090901099991901919919909999909999099929999090909999 -080909011000050909101004041112121200131313041400031515160200061515171700099990993999909099991909999909919999099909192911999990909999 -050808010600090808101000090411101000041212120400041302141500161616031500099999993090909999999990099099109999999919990011999099999929 -060104080800090909080800101112121300141112020400141115161600050417031600999990309999999991990901909099999991099991999909909099990929 -080305090900081010111100081010110400021212130600141212150400161601170400299999900999909999999999909190999990091990991990909309999909 -040108080500091008021100121313111100041313140400151506140300151516161600999090391999199900919909999099109999999099999092999999990999 -080306090900081005110900080212111104081313141400041313151600171717010400990999299991999999090919090919099991999991090999990930999999 -080801091000080811091004061212131000021212131404151617181900032005181804999999939999009099199909999999909190901999091000991999920990 -080309100400080909111204081313130400021414050600011414151600171715151800999099290991990099900999999190999190999999093999990090999909 -080910111200031302111204041415110500161615110600171615181900171715011904119992019999990090199909909999999909099990999910990939999990 -080409090300080810110400061202111100131414151500131414151500041605010400099299919999999990190999199009919999999999990909990030909999 -040809031000050409111200130409111200141409110200011415110600041515161600009299999199099909999909999099919911199999993990990999909099 -080104040500080909101100080909120400080213121200141516171700140316160600999999300091900999990999099999999109999100991999999990929999 -080609090900081002111100081213111104081414150300051414161704181901161704909999909999199991199999190919199099299999999900000399909990 -080808010600090410101100051212131400150212131600171718131604170304131600999990903099090909919999109919909199991999999099099099929999 -040308080400091011080200121212121300061415131300161415171700041415010500929090999990091999091999999990999090999991990099909930999999 -080808010900101011110904121311110900020405141500161717061804031717181800999999903999090099999911999190009099991990091999099999929999 -040801091000110808091000121313091000060514021504161617180300161604181800999990939999919909999909019090919999109001999099999992999099 -080903101100081213101104051202141104151206161100151217181900151717010400092999099999919099199900110999999090199991999900999930999999 -080409101000081109101000011213140500151515150200161616041700060403171700990999099990999990099930009919999999190999199909900999999299 -040804090400101002091100101012051300031415161300171715161300170615011300009999099099109999190999999911099291999099999990999939990999 -080901101004110912101000111314141500110602141500051617181500031904181804099900939999109991999991909901999999999910990199991099929990 -080809061000080809101004110309120400130409141400150516140100021717171700999999990999099099909929909199099090991999990913919199919999 -040108091000111102060300111112121200131313140400151516141400041716160500991190319299909999199999999911909999999009999999999909900909 -080809011000041109091000121212121000041314151004161302170300051306171700999999093999990900919999999909199991900919990919999092909999 -080109041000081112051000081314150200161615151700161818191704061818031704990999309990999991000991119999919909999990999909009999999920 -060809010400041010111200131010141404050315021400161615171800161615171800009999903090991999991909090099199991999290099199999999999999 -080809020400080805101100011212041100131412150300131414150600130404150400911099991999091991999939099909929990999999990990990099999909 -080804010400080809091000110209091200041314061200151516161200051503171700999999903099190919990919999010999990999109999999909990992999 -080901051000060911111000120904111000120902131300120414151500121617040300099990930999190999099909999999999910999919999019999992900099 -030108040900101112060900101313140900101313150400021616151500050416171700990992309999999991009999909999099999091199991909900999999099 -060804090900100811090300100805121200130814120200011516171700181804171704099999909999009999992999999090999099199009193119990999999090 -050108080800091010101104121306141500120216160400121717181804120317181800999990390991990010900990999999009199999190999999099999992999 -060805010904100811110900100812111300100814141504160414140200160317181900009909993999091999091999999990919099900999199099999991992119 -080808020600030909101104120509131100141515161104171704180100171719181800991092991999999099919909009099199090909991999993999099990099 -080808080900011011110900061213110900141516170200141504181804051504180300999099009993999991999901999991999001199999199099009999990929 -080904101104080902100300081213101400151613131400171818051404060118191400999109909299919990199999999009999019999199990990003999999009 -080909100400080909100100051112101300141415101604141718190200060318191904090099999999993999999909019900919909909999199111902999999990 -060808090400101111120500011111121300141515121600140217120400140417170300990090099990999999990939009919999199099999091199990999999929 -080403090900080804021000111213141400041213141400051215151500041204010600992999099199991990019909999099999999999909190099999030909999 -030809101000060909101000111202131300111414130500151515151604041718010400299999199999999901990991999991999999090190999990099030900999 -080601040900101111111100121205131300141415151300140415150200040316161700099090939090999990019999999909099999999099199999909991992919 -080509091000110406091000110212131000111414151000161717171704031818010400099990999999999990009919999910099991091991999999029030999999 -080808080400010910100200111210131400111115041404161715031400160618051400999999191093991999991900099999099909900999999092990099999099 -080806090300101104091204130414141200151614021200171718181200170118180500909999099290999009009909999099999019199111999999993999999909 -040809101004080809110100061209041300141402131300141415160500171717180300991900991999093990909909999991999909999910999910999919999029 -080808080300040905061000090902111200131414151500041414161600171701160400999999099299999909001999119091999090999990990999990390999999 -080909040300080209101000081112040400131314151500131314051500040114040600999999990299119991990999099010999900999990999999903990999099 -050308090904100411090200121314151604171714151500171718181800191919010600921900999999091909091900990999919900999991999999999030999999 -080808040900030602100900041110101200051313131200141415041200140116041200999992910999099999190900999991999099099199999009993099999099 -050809090900011010100400111112121300111112041404151602171700151806031700099999009993999991990990909999999999000199099119990999990929 -080901040400020910101000110912121300110914151500110504161500031716160600199991930099199919090999999999909990999900999999920990990999 -040105080400090909080800101104021200131414151200131304031200061616161600999090309999999901909999019019199991999909999992999990909999 -080109091000080811051000121211111000121203130600140215130400041604130400999099309999009991999999999999999992091999991110990999909009 -080808080900011011090900101012040200131304141400150506141400161717031804999999099993119999091999099099919990990999990909909991909920 -040308090900101104120200041106131400151516161400150516161400171717011400921990999190909999901909919900199909999999999099999039999999 -040809031010111202061010111314141415051304161617181304161601181919191904912990199999190999199009999090910999909999999909390990909990 -080109100605081112101314081111041414080215150404161718181919200318181919990099309901090099999999999999099199099109901090919999929999 -080909090903081010110205120404131415121616131315121616171815061920210115099929901999991999991099991900999099999999099900199903900099 -080809010406080810101010040211111111121213140415120516171718031919170418919999913009999991909909999910000999999900909099929090999999 -080909091010080811111012030404131312141516131312171502181912041505060104999999990999099099909999099209999191999919190190009003099999 -060809050110111213131410040404131516171718181516171719021516032019191516900990099390099099991999910000199909999991999919999999921999 -040809090904011010110212061010130412041415131316171715180403171715181805009999909903991199910909199900991099999099929900999999999990 -080804091004080811120403131314141516131317041516051818191516061801191902909009990099909909099299999990999900999909990910999399109991 -080809060110050411121310141516121210140217181810140419191820140319190420909999900399909000091990999999919111999990990999099999929909 -040108080909101108081204131114141504161117140205061818181919202020200319999090399990090009999991910099919990900909199999990999999992 -080809100405080811041213141515160206141515161717141818041917140120191903990099909909090009990099919999919991999919990999993009299099 -080109091011081209090211080613131411080415161717181819161703181805162004999109399190199999901909999999019900999909929099999999999000 -080804010905080810111111021213140415161718191915031718181915061720200415999909903099119910909090909190999199909999992999999909909990 -060108080804091011110200121314111505161314171804191314202104191914200300999900319190199900991990990099919990900990199999099992999999 -080309101100080812040500130212121400151504061400151516161400171701041400290099909099909991999910999199099909999999999190990399999909 -080805010900040810110900121210131400020610041400151510161400031504041400999999903990110991999999009199999900991999999990999909920999 -080804090900030802101000061111101000121213130400121214131500041601040500999992909099119999999909999990199909999919099990990300909999 -040108090400101011061200101013131200041413130200151516171700051516170300990090309999009999999991909999999009199099199999909999999029 -080509101100081212111104081212031300041415150200161616161704181818010600900099999999999099921909999909919909190919099999099030999999 -080109090400080809090500101112130200041412121500061416161500041404031500999099399999190999019900919009919999999990990999999099909929 -030808090900100208091100101212051100041212061100011314151100041304161700299999999999190991999909099999999099999910993109999900909009 -080309101000080609101004080411121300021414150400161414151500161601170500299999999999099099090990009190999990091999999999991309999909 -050809010400040909101000061112121300031412121500161414021500171717041500099999093090999999091909919909909999992991991919999099999909 -080601050400090909091000110412120400110212121300141515161600140315161600099990930099990900190999999999999919099199091999999999929999 -030808090904101108090900101202130400011415161600171815161604170515190600299909999990999990109999199909109311999099990999099999990009 -060809010400040209091000111111121300141404151300031416151300051716151300019999193090990991909999909910099999999999992099990999909999 -080806010900080810090900041111111200131313121200040205140400151617170300999999903999009909919999909919999999999100999990901999901929 -080808090600101109090100100204121304101415161600101715181804031905181800990099999991193999909919000919909990999190999999091099929999 -080109090900080810101000111213141500161617020600161617181804040405031800999999309999199990190909199090109999999991999999000099999929 -080409090300081011111200080611111304141415021600141715180500040115181800999999090299099999991990990090919999199091099199903999999199 -080801040900080810110900120613110900041313110900040214151500031616051500999099939999099900199999009099999999999199090199999109929999 -080401090900101011120900131011121400020611121400150404121400151603170500099990930999109919999999909199999909991999990909999909912909 -080801090900101011090600101012130400140215151504031617170500181919191904999999039099199999009999009190999199909109999999921990919990 -030808090500100808091100121202091300120414091504161718191500160618011504999992999099999910990991999991909991100099999001990939999990 -020808010500091010111200091010131400090304151600171718181904170618181904199991193099919999900999909999009290999990099099090999999990 -080804040300080809101100011213131100051413131100151617170200151616040600999999900299909990909931999999999099999019199091999900909999 -080801040400090909091000111213041000110414050200111414151500110603151500999999030099991990009909999990919099099999199999990999999299 -080802040300090810101000090911120400131311050600131314141500040114141600910999919299999991909999909919999909999990099099903990999909 -080809031000020411101000120413141400151513131600151517170600050117170400912991999999009919099909999199099999099909099099903999999909 -030808080600090410021100121210131300121214151500161717181504051717010400299999991090900909919999999999199991999019990919009930999999 -030808080800040209100400111213101004141213151500160513150100171713180600299999919999190901999999090099999919990999990913909999990009 -080105090900080810090904111112021300141414141304151516041300061718190300990999399999009019999991119909999999909099999099990002909099 -080109040300080810061100121213051400121213021404150413161400151717171400990999309299009991991991099999999991100090999999999909999999 -080801090904080810090904111112130500141502160600141718191904141717200300999909939999019090919999109991999000099919990919099919999929 -040406010800090910100800090905100800041112121300141403120200151515041600999990003999091999999990999999919909990029199991909990999909 -050108091000110808121000130414151000131314150400040414020600031616161600990990390990990999199990099999999909090999999010999919929999 -080801060904081011120900101013140900041515040900161616020500031717171700999909030999009999109999909091999999999910099919999919929999 -060808090904101112090904131312140100051315160400170318191900171702191900990900999990099099909999039999199001099910992999999199991999 -080809090500030802101000041112101300141415041300141415161300040115040600999992909099199999190901099919999999999990999009903990999099 -040809030500100809111104040809111200131409150200131616171700130116180600999990992090999099991999999009919911199199990999993900999099 -050108040300091011121300141511121600141511021700141811061700141818041704990990309290199900991999199999119999199090999999999999999090 -060809031000110809091000110812020400111212041300141516171700050104171700092999999999990999919999199909909099099199090009903099999999 -060304080800090904080800090210111200131314151200131617171200051604011200990990299999999999090919099919099911999091999990909039999999 -040108090900101010090900060511121300141411020400151411161604150317161600990990309999999909190990199999109909990991999999099999992199 -080808060400040910101100090905021200131313131200141415041200140116040300990999099099990909909999919900199999999190999099993092999099 -080602090400080410111100081210130300081210141500161617170500160117170400901099911990999999919999929999999010099109099999993999999909 -080901040400080909101000080411101000021213050600141516171700141503171700999999930091909990099999999190009199990109999909999999992999 -040108080800091011060500091011121300091014140400090402140300041515151500999990309990099999900999009999999919099919990999909192999999 -040501080804091010080800111112130600111102141404151516171400151803191900999900039999909901909991909991099999909910999199991909992999 -030504080900101108080900101202130900041414140900041515161700061515011700990092099999099999999911119999999099999990190901999939909999 -080809040300080810101000111102050400111212121300141414141500040106161600990999909299999909199991099999909099991999099990903009999999 -080306091000111202091000041313090500041314151500161614151500161614010400299991909991190909199999199999109990990999999999999930990999 -080109100500080809101104121309101100121415161104120204031100121717180600999099399999109009999991999910999990009109999999991929999109 -080808020900031010090904111213130600111213141500111216171800041205010400991992991999909099919900999999109999099991099909999030909999 -040108080300091008081100121010061100051314021100151616171700151616040400999990399299999909099909099001999991199090990999999900999999 -080104091000081111091000121111091000051306090200141516171704141404170300990999399999911909999909999909919099999009190099099099999929 -060804010900101010090904051111121300140215151300041615151300161617031300099999003999909099910999199019999019999099990999999199999299 -030805010900101011110904021211110904131415160900171704160600171718181800299999103999990019999911990999999000090999099909999909999999 -080603091000080211111000121212111300141414141304151617181300050104191304992999091991199919990999909199999999901999991009903909999090 -080804090900101010090900060511021200041314151200161717181204161717010300999990909999909909099990119991999001999991999909099932909999 -060108080400091011111200050411110200041314151500161303151500161317171700999990309090191900991999999990919009999999999929999999900999 -080806090300080409091000111212041300141212021300151515160400050117171700999999909290999909091999999099099999190901999990903119999999 -080409090300080809091000051112131004041415131000161417170200061401171800099999999299999900099999090909999000999909190999909391999919 -080609090300080209090500081011111100121213141400121215150400040104160400999299099999199991990919999190999900999999999090903009999909 -080804030909080810110909121213140402121513161718050619191919202020012121999299909999909990909190990999091090110091999999999030999999 -040808080609101112131309031414131301151514041616151502171605041819191919999990990090099099099999993299919999999900999111999990000999 -060108090900101108050400100408121300100402121400101515160400031515161600990990399990109990990999109999909091999910099999999999929999 -080808010900101010100900041111050900120204131300141406130400140304150400999999903999990901999999909910909199991999099909992909999009 -080109090400080810110300120405131304141402151500141416151500170618181800999099390999009910092999990199199911999909999999909099909999 -080109091000080809090400110412121204110513140300110215161600110617171600999099399099099910099999990999999091299919991109999099909999 -080808080600010910101104121210100400131313141400021515161700041515030500999999099093090091999999909199099999991999991900999990909299 -080809010400040809101100121204131100061205021100141516161100140316160400909999993099901900099999919999199090999991990199992999999909 -040108080600091008080300111012121304111412151604111417020500111417181900999090399990099999992901990909919999109911999919999990999009 -080809011000111112121000111312121000141502161600140417041604140618050300909999903999090999999991999919999011999909999009099092990099 -060108080900101010100900111112130900051415040200161617041800161603181804999990309999999990019999919900919090999009199909999999999290 -040809090600101009090500021111121300141104120100141503161600141718161604009099999999999909900919109190999999399999991299999999900090 -080808010500090910101100120404101100041314151100131306161100031717170200999999903099099900099999919099099900999999999900999991929919 -080909090900051011120300131304121200011415150200161615151704061604181800099990099999092990099999999909919319999099199991009009999999 -080809101100031202130400141204131300141215160600041216160100051717171700919092910099919999999999999990199009099999990993990909909999 -030808080900100506020900101111120900040411130900141415160100141404171700299999991990999999019909919999999990190001999093999009999999 -080409090403080809090610051111021213141515161718141519191720140119191704099099999929090990999199911090199991909909900999993999099909 -030808080409101004020909111112121212111113141505040616171818191919200118299909991999909990919099999999199909199909109900900903999099 -060403010408091010111112091010130214090405041514161617171704161618181818999900023909999199999199111900909999090999009999999099990999 -080808080109101112121309111114151509161714151504060414021805031920211818999990990390999099901999099999999009900991099099099919921199 -050108080808090909090410111212131314111212020415110404161606041717171803999990309009999909199099199999100999999001909999999919909912 -080809040110080411121210131314121210131515150210160317051818040619202020909999900399009199099990999999999999110910099299909099090999 -030809101106121209041314021209131305151515151604171818191620041818011620290009199999999099909019099190999999909919990910009939999999 -060108080910111108080410111112040410131414021504131314161616170518180403999000399999990999009990999019909991109999199999909099209909 -080809090310111104090410111104120210041314141415161717171706161601041805909929999999900999909990901909919909900919909999990390999900 -030809100400111112020500111112121300141414151500161616161704060401181800211099991999999999910990999991909990999919999990000390999999 -080809010600080810111200131414111504131416111504171802191504200305191500909999903099900999990999990990999091909919991109019099929999 -080109101104081212131404081212131500160217170400181817060500180319191900990009309090999099990999099991909119991999999999992000999999 -080409101000080411101000121212120100131406151604021717151600051717031600909999909999909900909999939919099109901999991990909999999299 -040808080800090909090100101111111200100213141504161705061500041717031500999990909999993999199999909919009009900100999999909999999299 -030804040900101112121200101113141400100213150500101613171700061801171704299099109099999999099999999919099199999990091109990399909990 -080809090400010809091000111213140500110413141404110613151500021617180300999099999993090991090919099909999999909999990909919999911129 -080104090900081010110904121010130200121404051500121616061500121616031700999999300999909009999909119900019999999099999990999991999929 -040808010600040808091000111112121000111304141000151305161000031302171700099999993090900990919999999999199909999991991999929019991199 -030808090900100808021100121212121304061414151600171819191604052019011604999992999091911999991999910099199999099901990999000939990990 -080309060400080809101100120209131400121515161404121515171800120405011800929999990099990990990991909919099999909990990910990039999999 -080406090400081005090100081010091100031213091100140415161100141402171700990099099999903999999909909909999901992019999909999109991999 -080105090900081010111100081012111100080412040600131302140300041315160400999999309090999999999991099999009909999919999092999119909109 -080803091000080611021204131411150500141411161604171711181804171701181800992199999199011009999909009999999999909090999009099399999999 -050809100300111112131300141402131300141515150400161616161700040104061700000999990299919990199999999991999199091999999990903009999999 -060108080804090909091000111213040500111114020400151515160300171718161600999900309999990990190909099991999991099091999999999992990099 -030809090900080810111100121202131104141405130400141415130600041601131700299999999099199999199999100909999999099909999019990390909909 -060108080800090910100400090910100400111212131304021415160300171717180500999990309999090999999999909919099199901999991112909999999009 -080809011000080811121000051314151500161717171504160618040200160318181904909999903999990999019900099999999099009999199090999991992910 -080801090400080809091000111104120600111102121200041313130500141414150300999999939099990909019999999999909901999919990990999019999929 -060809101000111109031000111109120200041309141504161617171804190501171800009999992999999999991999119909999009009910099099009399909999 -080808091004111111121000061314151604021718151504191920212100191903012105990909990999909999900900000999999111901991999199999239999990 -030808080800090610100400111102120500131313141500011616171700041604171700999992909999090919099991199999109999099901993919999099909999 -080910100500031111101204040213131404151513130600151516171800191919011800199992199099990091990999900019999999099990999110999039999999 -080109090400080809101100121314140400120214140600121515161700120318051704999099399999090919000919999919999999099199999900999199992090 -060809101000031109101000051209131400151602130400151517181800040117181804009999999992909991909901909991909119999990999099903999999990 -080808030900101010061100011212021100051212130400141415161600141404170400999299909199999990909939919999199991090099999009999009999909 -060809101004031112101004131314021500161617170400181817170500180119191900009909909992119099910999199901909909999999999199993900999999 -030808080900041011020900040412120400131312121400131315151500061616010500299999991990010999199990999099909909999991099999999030909999 -080806010400080809101100121209051300021209141400151609141700041603041700909999993099010999900991999199909999991999091999999909902999 -080809090600101009050400101011111200011311110400141402150300041617151500999099099999009999990990909999909399999109999919901192991999 -080808040904031002090900111213131400150513131400161717181800041717010600999909090999199921109919999999999099090991990909999930909999 -080409100300080409101000081109121200131309020600041314141400051501160400099299999999999990919909999099199911090999999199990309909909 -040108090904101111090200121311141500121617181504121917181500120506180300991900319190999999991900099909099990909099999999990992999099 -080909100400080511100300121211101304121211140400011511021600061718161600990099099999999909992999910999199999099091993199990119909199 -040804010600090810111200090913141400151502141400161616051704031818181800009999993099901990091990999909999991999919099990029990999999 -080501040400080910111200081313130600021414141400151516041700031516161700999999030099090999109919909109999999991990999099999999929909 -080305060900081011121300140212121300140415151300161615151700161604010400299099909091909991999901999999199909999999099090999930990999 -080504060400080809091000110209090100111213131400111515031400040415041400999999000099990990999901939910999999099199999929900999999909 -080809031004080811121004130211121000141516121704181919171700060119200500992909919999999009999991999019909100901999991999903909999009 -040801040600091010111100090410111100020512121300141412030400041515151500099999030091909999999990999199909099991999099129990999909999 -040408090300101011121200101013121400051515021400061516171704181801171700909290901999909999999990099999199091999999090109090399999999 -050608090300100211041200101314151500101314151504161617180100161619191904991290019999190991990999999999999099909100999113999909999990 -080809090904101011060300051213041400151515151604171718181900170118180200999900909999909990092909099900919999909909199199993991999919 -080909090300080204101000111112101000111112131404151617181404050619011400999299199990909991999999099999999911009991990009009039990999 -080609090500081003090200081010111100121212111100131415161704181804010400999999029090991999991999999990999990999901990090009030999999 -050808080800090903100400090911101200041304100200141313151600140106150400099999099999929999990990909900999999190999190911993090999999 -050808080400091011121300101014021300151514140300151516171704060118171704999090909990091999919999199909929919999909999999003099999090 -080903010600100205111200131314151604131315151604171818191604171820202000129991993091990991019991100999999999909990990909099099999999 -080309100500080809041100060209121100041309041400151516161600151501171700290099999999999991909901909999909019099199099199999390999999 -040408080800091011110200090912121300140412151500161616151500060401050300999990099090991999191999999009919999990919999999900302999999 -060408080804091010100100111213131400150213131404160517181400190317181400999900090999993901099909909919999199901900990999919999929999 -080809011000080509111004121309141500161616161700040418021700031818061700999999993999901000901900999999019999990099999911999909929999 -040108040900101010090900111212131400111212021400110415160300050617161600990990309999919900919999999999199999099901999099909092990999 -080905061000080911021000081213141400151515141400011616040300041616170400999999900990919999110900999991999999999199293909999999909009 -080808010500091006111200090913131200021413131200151604171204151503170400999999093099990990019991999919999199991090999099099990992999 -060809090400100804031100120813041100011415021100161615171700161605171700909090999999992909099901999911099391199090999999999099999999 -080806091000041111111000121202131300121214131300011516160300041705160400990099090999999901199999199999999909999109293999990999900909 -030809100500111112101300111102101304141516171700140418171704191919010600219099919999999999199991900919909019999919990919099030999999 -030809101000080809101004020509110600121212131404151516171800151519011804299999999999999019909990099190909999009910999910999039990990 -080809031000040809091100121213131100121213130200140615161704180501191904999290999199099990999999999999919909990911199091009309909990 -080109090500081010101000080411121300080204041400061516171700151516031700999999309091999999099909009990909199990190099199999999999299 -050108080904101108060900121213140400121204150300160217171800161617171800999000399991999919009990009999999909290191999199999999999909 -080601090500080810111200041314111500131302111604171818111604031919191600099099930999010999990999199091909919901099999999029909999999 -050808090600100808110300120213131300141404151600141417181604040117181600990090999999909909902911999199909909099990999099003999999999 -050806090900101010100900111213141400111202140400111516171804111903011804009999099999999999090900199991909999999911999190091939992990 -080109041004080811041000121213141400121202141400151617050600181817170300990909309999099991900990099999999919990919090909990999999929 -080809061000031109121000040209121000131314141000151314141600040417010500990992199999999991999901099901999999990999099990909030990999 -060404010500080909090900101112131400021115131400160417171400161603171400999990003099999901999910009190999999991009999999999999992999 -050308090900100808090904110212130600111414150400161617181800161604011800929990999990999091909900009919999991099091999909999039999999 -060808010904100808090900111213131400151613131404150417170200150318170500999900993999909909901900999909999099909999199091999190992999 -080809100300010909101104121212120200130614151600171714050400171714180400999299099993991091991999919090909900990990099999999999999009 -040808030400090910101104090212131400151612171700181612171700051612010600992990199099999091090991909999099099990999999019909930999999 -080401040900081011110900081204130900061212020900031415150400161616150500999999030999091990099909919999199099999991092199999999999009 -080104091004081109091000121314061000151516171700150216171700050416180300999909309991990910099990909199999999999199999119900919999929 -080910100400050910100100040211110400031206110400131415161600131515161600019090999999993991909909909919999909092190991909999999999999 -030404080909101106080409101111081213140405081215021617181215191919011215990992099999909099999099009199990999991009999010019139999999 -080409090905100311041212101013131314151516020614151717171714040401181914099900900999299999190999999909199911099199999999900309999900 -030408040904101008111212101008131212050214131515161617131804160401181806999002099099999999909999099019909911999099099919090309999990 -040508080808090910100404000910101111120313131404121215151515060216040117909990990909999909990990999990900299999990099999991103001999 -050808091010030411111010121313131415121204161606040204161601171717171804099099900999999920990999990999000990999199990909391991999910 -040508080903100608080909111213131302111415161718111415151919042004011919909920999999999900099109999990991999119991990090990939900999 -080909011004050909111112131313111112021414150412161404171806191903041818099900993099919991999999990199999090091900909990919909992999 -050108040904100808111213141515111104141515161616140217031818140619191818990900399090999091990019099999909999999999901199999129990999 -080503090410081112131010081412150216061712181816192020211816192020040116992099091999099999910909911909999000919909999909999903909999 -080804090910080511020603121304141516171717181816191920201816191920200104999919901929909900910909999900109999999909999990099993090999 -080803050909080810101010021112120613141512121617141515181818140401192004929999990909999919999019909919990999009909990909990309999900 -030808091004041106021012131404151005131616151017131616151817130401041818291999991909909000919990990909999999099999990910990309099999 -040808080809101002111213141516111213030617111201051819112020042119192020099909999909019099199911999299999900139999090099999999900909 -040803090910041105121202061104041213041114151613171718181613171718180113092919099910909999999109999990009000999990999090199993999999 -080409100104081111121314081112121514081606171814192020021821032020051821900999990309990099091999999909919090099999991911029999999909 -040108080808090909091010111106040412111102130014151504160414151503160514999990309999990919009099990999990911900901999990999999999290 -030808091000111111021204131313141500051616170400061616181804191901181800990092999099910099919999909090109999999991990919090399999999 -060808040900100808030904020511110900121314151600171818151500171818010400999090999991929019999999999100909199090109999919999930999999 -080106030900081010040904081110020904081213141500121216171800191919170500999299309990909099999990910901199991099990099099999090999999 -040809100500111111110100021213131404151616131404151717171400180306191400000099990999993999919911900199999990909990999999919999929009 -080109101000080809101000041105121300141412120400141404151500061602170300990999399999099901999999909910909909999999999099901912991199 -030804091000080811091000021213131000141513130600141616171804051616010400299999909999900919909919999019999919999991099900099930909999 -080906010400081010101100121313131300120214151500031605151500161604170400909999093099999909910909999999199911999199999099929900999099 -030809090900101011121200100602121200131415160400131417181804130501181804299999199099199990199999999991099991099991990019099399909990 -040809090904011011120500131415161604131417060200131818191900131818190300099909009993110990919900990990919990999099199999999999999929 -080805090400061010110400121010130100121214141400150216161604151517180300990090090999990999909999039999199999990991999199091999991129 -080803090500101112121204041302141400151516140600171718191904171701191900992990991090099099199901999919999990999109099109099399999999 -080801090904080810090904110210121200131410151600041414170500031806191900999909939999109019999919099019099999090999099909991909920999 -030809090600101112021304101414151500101614151500161617171700041805010400219999991090910090199999999999999999999910999099990930900999 -080909010400081010101000080611111100121202130500121214151500030404160400999999903090999999991909999991009999999910999199920009999909 -080804091004110212131000110514151000111617171000030617171804191919011800990909090991199999109990909991099909992099099999099039999999 -080309090904101112121300060214151300161617171300181817171904181805010400299901909991099991999901909991099909999099999990099930990999 -080809090400080809101004111111101000120213140400120615141400120301160500999999999099099099099999099911999190099019999999999309929909 -080804040900080810090900011111050400121313131300121203140200061515151500909999990999009999099939999919009999999099199929999911909999 -050403080904101112121300011412060200151616161604151717181800191919181800992100099190099999991931999991019099909909999909999099999999 -080910100300110510101204131414141204151617171204061817170200191901202000009990999290999009999999990009999099909099199099900311999999 -040108080800091011061200131014151200131616021200131616041700130504031700999990309990999999009999099910999091199999199909999099909929 -040809091000011109091204131313140400151502140500061616161600171818180300019099199093999099190999099991999999099019999999909092909999 -080808080400040910101004010911030600120911111300140215151600140515151700999090099999999099099939999999209199991919091199990990999909 -060401080800090909101000111112041000111100040200041314141400131303050400999990030999919990999990909990919999090099199999999200999999 -050108090400101008111204101308021200141516161200041717181200061717180300999090390999919091919991999009199999190099999990999992909999 -040809090600100809111200011314020400151305161600151317171604151817170300999090999990910990110931999999199090999999999999099992900999 -080909031000080902041000081112131300081414141400151617040500040117170600992999999999199999100991099919999099999199090009903999999909 -080906010400051010111200031310111200141315111200161702111204181818191904009990093099990999999999099299999991991019991199099909999090 -080306090500080810110400120213141500121313141500121616161600120104170400299099900999000991999991999999999990999199090999993909999009 -050808080300090204101000111112100600111112130400141412131500140116171804999290199991099919999999909999099999999199099009993090999000 -080808030900101005040900101006110900121213140200151216170400150116160400999290999999099999909990999909019991199910990190993999999909 -080909101000080309101000021105120600041313131300141515151600040401161600199999299999999919900919999910099999990199990999900309999999 -050108090900101008090904111208061300141516021304171819191300171704031300990990399999199009999990099001999991100099999099999099999929 -030808090400100408091100101202091300101206091400151515151600051717010400299999999099099999190999199999909999190009199991909030999999 -080809090904100811120100101313060300101415021604171718192004171718180500909909990990913999199999099991929901909001199991099999999909 -080109090200081009091100061204131100041212131400151617130300051717130400999199399190199990099909999999919090999099290099909999999909 -030408080900101006041100121013141400120213141404121513161700151513010500999092099099090999990999999919999999909199099910909930991999 -080909051000080904111000120613131000120313130100121415161700120215040400990999999990909909909990909999999999399219991900999900911999 -080809101000080809110100041209111100130209141500130516040600170318181804909999990999913999999901999919909190999900090999919099929990 -080409101100081202040300081213130600081213141400011205150400041616151500901199919299109999999990909999999090999999993900990999909099 -080803010400090210111200091313140400091315150400161615150600161605171700929991993091190999119999109999099999099099999990999009999999 -080609041000111209131000021409131000151616041000150516171804150301171700099990990990999990999919099110999999099099099900099399929999 -080306090400080410111200081314141200021314141200151616161600150404010500299099900999900990999999999199999119099919990999990030999999 -080809060300080409101000111202101000111313130400111415151600110105150400999999990299999900099999199901999199999999091090993099999909 -030802090900101106090900101212120100101314141500051604141500041616040400911992199991909999919999939990999909099099990099999900909999 -080909090900081004110100080205110400121313040600140313151500141404151500099999101999993991999990909019099999990999099209999999999099 -080808090904101011090100121314151500161606151500051718021904032020202004990909999999003999019900999090999999999999190001099919929990 -030808090400100808090900050402110600041212111300141415151500141416010400299999999090999909109990999991909091199999199999999030990999 -040809010600101009091100120413141100120515161100121717021104031717181800009999993099091909999990009999099900999999999911099990929999 -080109060500081010101004081112131404081516021400171718190300172020191904990999309090999091999991910901199991999000299999999099999990 -080902100300080905101100060904121200010913131200141513131600041515041700911999999290091999999909999990999309099999090099909990999909 -080809090400030802101100050412101100131415101600171818101604061818011600999992909099199999199999909001999999990019990910099939909999 -080910051100081202111104080313141504081617171500181819202000181806012004910999119999999092109999190999199099099091999009999039999990 -040308080400091008080200111112061300111112121404151515151600051717011600929990999090991990991999999999019909109991999990900939999999 -080904060400080410101100121210100500121213130200141414141500040103151500009999990099990900999999999990909919199199199999903999999299 -050808060300040808091000111202131400111516161604111517171704110118191900099999990299909900991911119999999199909909999099093099999099 -080808090300100211111200101013061204041414151200161414171200040501171700991299199999999991099999900010999990099999990909900399999999 -060804010400091011111204091311111400090515141400091616021700031818181700099999003099091099991900999990999909999991099909999919929999 -030808080800091011020600051213131400041513161404171718181404171701181400999992990091119999919909999909999009009910999099099399999999 -060308090900100411111100101004020500041213140400011313151500161616151500929990919099999990910990999909199091099099993999990999999099 -080804010900080810110904041212131400150216170600151516181800050316181800909999993999110001909999909919909100999990999999902999999999 -060108091000111111120500131302141500131316141504041716141500171718031504990090309099909919909991909991999999900099999999999199999290 -050809100600110309021204131313121200011415161600171717041600041818181800919090290999919009919999999990199311999099999999900909999999 -040808010600040809090900041010110400121010131300120214141500121605140300099999993090199991909909909999099099999199999191999992900999 -080808080200010904041000110909041000111213141000121204140300060504141500999199100193999999999909909900999999099909299999900999999009 -040809101000061102100300121212120100131314141400151616161704180405171700009999909299119901999999939909099999990909099999009099909999 -060803040900101112121200041314151500050214161600171714160100171818181804929090199090999991990909999919909099999199999903991919999990 -080501090900080810100900111210100400041206131400151216160200150316160400999999039999090999999900909099199990199999190991999990992999 -080808010400090210101000031111121204131415121604171718181900051718180600999991193099999921109999990999909000900909099999909990999999 -080909090904081010111201081314051212150216061718192020212118040320212118099909999099911399109991999019990919000919999999002999999999 -050104080806091011080812131313141212151515151616170218181916202020040304999900309991009919909999909199999999090199999191909992099099 -040804040909011010100909111212131405111215150206111617171818110417170318099999000993999991990909000999999919109099199099999999909992 -040805010909100811111213100811110406020814151616171704151616031718151904009999993099190099999019909199999900091999999999999090920990 -080808010404091011111111091010121305090612121415161617041802161603191804999990903009999999991099909990919099919900919099199999099219 -080809090110060809091010111213131313041415020416031405171816041919191916909990999399990999999100999099190911909999992900099999909990 -050809041010011109121010041309121406151502121617151819191620030419192020010999199993909990990009909991999919009909909099920999999999 -080509090406080309091011081212120213141404151516171718151919171720040119909999999009999992900099911099991990919099199909999093990099 -030808050909101108120909040402131414151616131414151617131801150617192004999992990991199990100999999091999999999919090911390909999900 -050808010400090808101100121313141400060215141400031615151700181818041704099999993090900909919999199010999999999199099999921909999990 -080909090300080210041100121314141104151514140600011516171804191919190500999299199999109909199900900999999999999919093100099099999909 -080808080909041010100901111112131414040415061414050403161617181818181902999999990999990309901990099090099909999999919929900991199901 -080401040906081011111111121313141504121213141617181802140405181819191903999099039009099909199099109999909909909999009019999199999992 -040809090104101111091212131111141212150216171805150416171818150319172006009999999300991909919999199019900919099099999999999190992990 -030408090410110512131410151502130610041616131710041616171718191919190118900992900099099019999991109099999999109999990909099903999999 -080808080904100511021204130411141501160311141506161617141518040417171518999100091199919009901909993099999929909999999909000999999999 -080506040109081010101009081112131409081115021616171818191616040318192004999999000390999999991990001999991991190910999999902990999990 -030808080904101112040913101012050914040212151516170612151518171719190104999992099909090099999099999919090011999099909999099093090999 -060808090404010810090911051210131404151510161404171710041403171702181818090099999903199099909000909999999900909090999999999199299199 -080909021004080909111212050411111303141516131304171718181818171719200106999109991190999999099299999009199900990999109999999903090099 -080809100111080812101311141515100511041516170211181816171920180604170321909999909399900199999909099099909909919099199909199999109092 -050808090403101008090611101012121311141512120216171819191919040401202020099099999929909999090999991099919099919009910099900309999999 -020809090909100404111201101313131414100404151414030516161717061819191919119991999199900390990999999900099999092999909090999999000999 -040805090906101104090912131414141412131315151612011715151618031920200204090909099990999909090999999990999909999999903191099991921910 -030808080205091011111204091013111204091415161217091819201217040620200117299109999199099099999999009990090009999990999009000993999999 -040408080104090908081011040212121213141415150516171415181818031919191906909990999309990000991091999910990999909999901999929099099999 -080609090410110409091210131415040316171717181816191902180516190120202016099990999099990000099909099900929999991919999919993090999990 -080808080109100211110909121203110413141406051516141417171818040417171904999999191391991919999092909099090909909999099099909999990900 -040808040409050808101009061112101009131314141414031502161717181804190117099909990990999990999900990990990999999091199119921903999099 -080801091006080811111012131411041012151404051003161402171717041418191919999009930999199901999999090090999999090999929119909999990099 -080909090105080810101112131410100615041414161616030402171818192021171818999999990309091099999009999091900999999019909990929199911999 -080104090903081004090911121313021411151305161611171818191911201804191906990929399991099919991919110090999999990990999909909099009999 -040305080904101102081204101314081515101616081504101717171818061919011818999900209099910991199091999990999099099991909990999039909999 -060804090904020808090901101112121313101415121616100317171616100404051819999900909991919319099990909909999909099909992999999099009900 -080904101011051213141111151515151601171717020603181804192020181821212020009990099099091999011999993990199999090991929991999009999999 -030804091010111213020414111515161414111515161717011819161717051806162004290999190909110999919999999999990099999909993119999090909900 -080808080509101111040909101213141504101617140218101920200618040120200318999090999999909999090990999909900011119199099099903999999992 -040809090500101109090100101212131300101212141504161616021700031818060400909090099990993999019999999999919999109991099919929000999999 -030408080400091010080100091011120400090213120400091415121600061405121600909092999999903999919999109991999119099909999090909999990999 -030808090600101004090500101104091200131114091200021515161200171501041200999092099999090999999999999190999900991909999900919309919999 -080304090600080810091100120513091100021414091100041415151500161604010400299999909099999919099909099199999199999990090199990930990999 -030808050904100408110900100612130904100214150900101617181800161601181800999902990999099999009909090990999111999091099919999399999999 -080109090900081010111200131010040400141506160300051515021704181818171700999999300999990909990909099919999090990990299919090919999999 -080401050400080910111200080613131300080414141500021616141500171716031500999999030091190999009990999999009099991999991999909999999299 -080805010900080810100900021110100900121106131404151603041400150417181400999999903999099999999911909199009990901999991290999999990009 -040809091000050803090400040804021100121212121100131414151500041414010600009099929090999999919999919090999999090909199999909930999999 -050809101000031104101004121113140600121113151500161718150100021919191904000999999999999029009999999999009999991009999913910199919990 -030802010600091011121305141511161700181911161704181919161704202021161704919992113091990090919909109099999999909999999909099099990990 -040608090300101011091200101011091204131311020500011311140400151516171800909990909299999999999999910909199999099991993919991100991909 -030806010500091004111200090902131300141414131300151516041704181818181700209999193099901991991991199909999999999090999099099099999909 -080105040900081011110900081211111300141215160300141217180600041202181804999999300990199990990999909091999999299911999999999190909190 -080909011000080209111004081212121000080313140400061516171800151505170400999999993991999091019999909990999290990900099090999099999909 -050808090904041008111100031212110600131212140100151616171700180204171700099909999090909990999999909299099991391919999909911099919999 -040809090300100809090600050802111200131414121200131414151600130401150400999290999990999999190900199999199099999991999910999390909999 -080109090900081011111200081313111400151502060500151516170400040417170300999999309991090990990999999199909910999919999990900199999929 -040808030900100802050904111213141500061616140400011616141700181818171700992990999990109099190909009001999999999999093999990999999099 -050809090904100803111100120213111104141515160600141515171800141904011800919900929999999901999909090910999999099990990910999939900999 -030408080800091011020600041213140400151513141600151713141600171701140500909992990991110999919900909909999999999099999910999399999909 -080404010900081011110900081004120900081314020900151514161700150314060500099999903990091999999999019999199901999090099999999900992999 -030804090400060808021000111111111000051212121300141414131300040415010400290099990990911999999999909999919099999990999909909030990999 -040801090900100811090900120811131404121516060200121718191904171705190300999990939990909999999990110990919009099009199999099099999929 -050801090600041010101000111213131400151513131400161702041400161717030400099099030999999900910999999009999999990910999199999990999299 -060808010900100808110904100412130900141515151504141617021800031717190500999990993990991099009999099909919999909099190911999909929909 -050809091000010808060200041112131400151512041400151512161400171712040300099199910193999999091990099009099999999999999909990902999999 -080808030904021010050900111010120900131414150904061616171700181901041700992901999999999919909999099190999199009910999909900309909999 -080909100500080909111200130314121200151614171804190214171804062014011804099099990999990999099929999199099919001199991919099939900990 -080909011000040909111000120604111000121302141400121505161400031716161804099990993999901990099999999999919011999109999999991990929900 -020808080900101104030900121313131304141515061600141515171800140105170400199991992999099910990909990199909990999999091909993090999999 -080809051000080803061000040211121000131411121500131316121700041616010400919099929999990991999991999099909909999019099910999930909999 -040306080800091011080800120213051400151515141400161717181804161717010400999990209999199909190901999919099999999919090919099930999999 -040804090400010804100500040811111100120813130200121413131500061403151500009099990993900999909901999999919009999999190999999999909299 -040104080800090909090800101006110200101012121300041414051300151614031300999990300999999990919990919999919909999099999909900999909929 -080109090400081010101100081213131404081513130500041606021700161603171700999999309090990990190999990909909999990091999901999999999299 -040801040500060909101000110912121200131304141400131303140200041516161600099999030099919909991909999909919909999999199999990291909999 -080804010900080810100900061110100900120204131400121203131400041516051400999999903999090909999991999919909109099999999299990999900099 -080808080300090210101100120610041100131404151500011414160500171717170400999299199991099910999999999199009190999990993900990999999909 -030809090400040808021000111111111000041212131000041212141000051515010600299999990099911909909999999099999999199991990909999030909999 -030808040900100808050900101111040900100612131300021415131300041615010400990992999999990999099999099990909990991099991919991930901999 -030808090400100808090900101102040500120613141500161617141500041601141500290099999999999999100900999991999091990999999010909399999999 -080409101100080402050300081212131400061204131400151516161400150116160400901199919299009999199909099990999099099190999999993999999909 -080910100400041110100100121111021300121406150400121405151600121403151600009090999999193999999909109909109909999999999090999999999299 -050108080800090909100600111213141400151616161600170402180300171704181804999990300999990901909991999091999999990019999919999092999990 -080401090900080410090400081010110600080502121200131414121200031414151500099999939999910990919909909909199991999919991999929909999999 -080904101000080902100300080911121304141414140600051515161700041515011700999999909299919999199999100009109999990901999990999939909999 -080801060900041010111100121010131400120415160200121717161600051717040300999099039090909999999909119909919990199909999999999902909999 -030808080800040909021000111109101000111112060400131415161700050115181804299999991990999999919999199991999990990919090100903999999090 -080309050400101009111100101209111300021414141300150416161300040617011300299991990099999999999990099109999199990091999990909039990999 -050103080900101111061204101313130200101404150400101616171700181816171700992190399190909091991999919909099909099999990999990999999099 -030809091000041109051000021112131400150612131600171712131804171701130400299999199999990909090919999199909999091099999100099390999999 -050809010400101011121200101013121200141414151500030604151600171717021604009999903099099999099999099990199999999999999999920019999100 -040404080500091011111200091311111200091302141500091316141500040106140300990990090090990999999991999991999999999919990910903999999029 -080801090400101112120600101312141400101502141400101616170400031605170400999090930999190991909999999919999919999919090909999099929909 -080801091000080811091004121212041000131402051000151616030400171716180600999999939999900090109999999019999919090919099999909929999109 -030408080900101011080900120402130900121414151500120614151504161718010500909992999999199999109990119999919999999999999909000030900999 -080808090400031002111100121213061404121213131404151516171800151501051900990099119992999999190999990999099999000991999010999390999909 -080808010400091011111204061311111200131314151504031602151500171819190500999999903090090009999990999991909999909919999199921990910999 -080801090904080810090904061111111100040212131400031512161700151518180500999909939999099099109909999999109011999199099990929900999999 -080401090900101011090900101012120200131404121500131617041500050617031500099990939999099999111999999000919999999099999090900999999929 -080909101104080803050200120604131300141414131300151516171800151504011800991109929199990909991909999090999999999909199001999039999999 -080801060400080809091000111212091000051202131400041516131400031704131400999999930099090999099909999099199991099919990199991999929099 -080906011000051111121000041102041000131415161600131515161600130304171700099990003999910999999901999991099000999999999999992009999999 -080806090900080810090400111112120200111113131404151516041700150105031800999999909999900909099999919991919919909100199999993091999929 -060308080900101112080900131313020900141515040904141515161700051818010400929990999990099999019999919990999099909990199901999030909999 -030809090600101109091204021314141200151514161204151517170400050118181800299099199991999019099911999999999910009909099999903099999999 -050809091011011212131011061212141011151617181911021616040420212121032020009999090993999999909999909010999990000990001999919999999299 -060408080903101008080911121013130911121213130411141516171802050104171904999990099929999999099999909909999909999909010111103099999900 -040308080902100411080412100411131412100411151612101717181616051717180106929110999910999999990990909999099909919900990900999993009999 -040808080804040609091004111213091010141502161616141717171818031905011818099909999099999900999000009999099111999999199991920939990999 -060808090909040808101004041112101002131111141415131605171415131804010319099999999000999999099909091999911090999099999901990939190992 -040809090304080809090410041102121313051114151506161718151501171719191919909290999909999909910099199991909909900019990919399990999999 -030809090909100811110504120813141415160217141401181819191920180621042020999992909999999919900090090199999119939911999099999000990999 -020808080306090410101010111213141404041215141616171215151818050104191818199291099909999919099010999999909099999990990099903009999909 -080910051111041212131401041212131415031602131715181904171715062020202015009090909099901399999909990999909911992109991999999999909990 -060408091011121213041411121215151411050416161411171716161819031702011804900000999999090999099999999009099999999999009990029139091999 -080904011010021111111010120413131414120513151414121616151704030416061819199991103999990910909999909999999900999909099999929990090090 -080809100304040811041213141402150616141717151818191717051818190120202020991299919900990090199091999999900990991999991999993009099999 -080806090000040802090000101011090000101012030000040113130000000000000000999999909999919900199999999991299919990309999999999999999999 -080802030000080809090000011011120000101004060000131313040000000000000000919999912999999930099999099990099999999099999909999999999999 -080409100000080609100000081109120000031309010000131302040000000000000000909999999999999990909900199999399999992919999109999999999999 -060804040900040802090900100811110300100811110100040412121200000000000000099999900999919909192999999999999009390090999999999999999999 -080609090900080410040400080211110100081211131300031204131300000000000000099999909099009999099919939919099919992999999909999999999999 -040809090110110612091310110212141510111612041515111712181819032020202105009999099399990999991991110919999999099199901909929990099909 -080801060900081010110904121004130904120514150200120316171700181819171700999099939990911099909909090999919900199991999219999099990999 -080809100400110809100600111109101204131409151600130205151700131803010400999099999999999990990999090909909911099199091909999930912999 -020809090300100411111100100412121300141412040500141415151600060115150400119291099999999999099999909109009999999909999090903990999999 -080804090900080810090100111212121204110213131404031516051400171819061400990999999999013909199999990919909909909199999009921099919099 -080805010904080810110904120613130900121214040900151616160200150317181900909909993999001000909999999990099999990909199999999991992119 -030808010500090210101100121210100400131214151600130417061600181818181604999992113099990911990999999099099990099009999909909999999990 -080910031104021204131100141414131100151516131104151516131700051801061700112901999990099919999999999199999919909999099900990309909999 -040808030900100808090900101111020600101112131400101516171800050104171804099299999999999990919999199999909990099109990009903099999900 -050108080600091008081100120413021100141413151100161617151100041604150300999090399990190900019999999099199999990909999999909099999929 -080808010500060910111204021314151200161717151204181717151200180304191900999999903099110001009919999190999999901999999999999909929099 -040804090300100811091200131302090500131314151500011617181800161606181804999990909290091999099991199999909900999199993009999099999990 -060808080500090402100300111212131300111212141400111515040400110115161700999090911999092909199999999999099990999199990999993900999009 -080803090904101111020900101111121200101314141404101516170500060118192004992900999999991999919999999909199999909091990119903090999000 -060808030900101112120900100412020900101314151600100414141704181818010500999290099999099999999999019909199001099999099099099030999999 -040405080600090910100200090910101100121203111100131313140100151516170400999090000999091999991999999092999999999991999903999009990909 -030808090900100408021100101213141100101513161100101515171100040401050600299999999099919990919990909999199999999901990919900300999999 -080809091004080811090600011213141504161616140200171718031900171705202004999009909099999990099931110909919999990999199099999021999990 -060808080804091010110100121010111104121302141400051315141404161718190300999900911990993999999909990991099999999919999099009199900129 -030808080200091010061104091012121100091312141100051516171100041818010400299199909199990099999999999999999009199001990909999030909999 -080304091000081104121000081314121000021414151000051616161604171718010600990999290999099991999919909199999199090190999999099030990999 -080109041000081109091000081212121304141415050200141616171804061616190300990999399990191999901999990090019999999909199991009919999929 -080509030400021009091104121206111100121213131300141516170400140118181800099990992091199019999990999999099909990109999909993900999999 -040308080800091010040200090910051100041213141100041515141100061515010400929990999199990999991990099900999090199999990909999930909999 -030809101000111112131305111102131304141516171800190620201804212120011804290999109999099099999991190999919000190991999099009939999990 -040809010500021009111200131009141400150616141400151516171700030416170400919990193091910919999999099100999999999999999999920999999009 -050803090900080810090904021112120600131414121500131616161600041701180400999990929999199091909919999190909999999909091999990309909909 -080801090500080810101104121310101104121415160200170418181800171703190600999099930999999090999900900990199909190099199999999910999299 -080808080400060910111200011304021200131304141200151616141200151517050300999099909990119991919930919999999999990009999909999092999099 -080809100600081109101000051109120300011109131400151515041604171718021904999999999090999999909909999999029300999199199909099191990110 -080909100400080909111200080213131400151503131400161705181400060104181404090099999999900999990991999019999992991990991099903999999090 -080109100400081111111104121313061400121513160400121502160300121505171800990099309990999091990909909909909999999919999919999012999919 -040808040300091010101100121202130500041213131400151616171400061616011400990990099299991909199991999999909919990919990910909939999999 -040808090900100208090900101111120500101113121400031515121600041704010600099999999991909991909999109999999990092909099999990030909999 -030808080200040609091000111112131404111504131400151516131400051718011400299199999199099909091999090999999909990999999001999039900999 -030808050600040808040900101002111100041213111100141213131500161616010400290999999090909999190990199999999999990991090999909030999999 -050809101100031202101104131404101100150616100100150416161700181818181700091099019999199021999919099009999999399990999099999909999909 -060108080400090909091000111213131400041204131400151205031400021617171400999990390099990991090909999090999999999999991099919929911999 -080803040900081004111200021013111200041014111200051516161200171716010600929099999099999919099919099999999010999919990090999930990999 -040805090904101112120900021113131300141115160100171115161600180315040600909900099999990909990911999190199999391999999999919990929099 -030809090200051011041200131314141500131316161500171716161500041706010400219199099190909999091999999999099909999999999091999030909999 -030408080800091006110400091211110500091313141500021313141400161604010400999992090999090990999999999900909991991999091999990030999999 -080903101000080806101000021112131300041112131400151112161400041101050400129999999999999919009919999999999990990990990190999300909999 -040803090900100811090900121305140200151515141400041617171700161601060400999990929999919900991999999000919999999909190099999300999999 -030809090600051009091100021213041400151515161400041716161404171701181800299999199099999901090919999190099999099919990099099309999999 -050809101000041112121200061303141404151515141404011617170200161617171800000999099990099990909909290999999999909909193999999991991919 -040809031000111202041000110513141400111515141400161617171700161604010600912990199999199999100990999991999091999991999099999030999999 -060809090900011010101000111112051304111112121300021415041304161617031300009999099993999991909990990999999999091999991109009199999299 -060104080900101112120904130412120900131414050900130215151500131616170300990990390990190000999999999991999990999199999199990919999929 -040501080800091010080800111010040400021213130600141415151500031404161600999990039999909909990919099190999199999109099999999909920999 -030806090900101104121204131314121200131514161604021517161600181501190500909992099099999010099999099999099999901999999109919309919909 -040808030900100804040900110212060900111312140900111314141500110116170500992990999999090901999991099999999999999919090190993099999009 -040809010400101011111204101011111200061314151500161702051500160318181800009999903099990099999999999901909009999919991190999990929999 -040801090904100811090900100811051200101302141500101616140400061716180300999900939990909999990991909919909919099919099999990999909129 -080808010900101011120900101314151600131317041600030502041604181818061600999999003999900990919999109991099999999919999009029199999909 -040803090400080810090400021010111200131314110500131314111500040401110600929090999999909919990999909109999999999999099100900399999909 -040808030900101011050900121013021400121515151504121617180600120119191904099299099999009999991991119919999999909190990090993099999990 -080109091000081109091000121314140400051514140200161506171700041504170300999999399990190990199909999009909999199909190999909999990929 -080109090900080810110200121210111300041210050300141510161604171806161604999999319199191909999999919099029999999999990009009999900990 -080309090900080802051000111112121000041312121000141515161700041506010400299999999099190999199999999909999909090091990990909930990999 -050808090904101010110904121212131300141402131504141416171800031920010600999900909999900099990999999990999991109919199091999130921999 -040806090500031010111200131010121200131314140100040214140400151515161600099099000999990929999999999990099999399199990990991919999199 -060308090400101005091100100412021300141516161300171717161304181818011300921990909099999999910990919090999009999909999991099039999999 -040809101000010809021000111109120300111104121200131313140400051516170600091999991993199990919999999999929909999990999900999909900009 -080901100400080909100400081112131400081104151600061117021600051117170300999099939990909990190999109999199990990991999910999999909929 -040809011000111213131000021415151000161415150500161617170400040317170600009999903991190919909990999199909999999990999990902999999909 -080804030900101011040900121314060900121313150200120416160100120516160400999290909999909990099909909990919991199019999993999999990909 -030808090900050808101100121202131100011415161100061515040400171717170400299999990990999990109999199999199311099990099999900999999909 -050104080804090909080200101011121300101006121404151616121700151616120300999900309199919909901999099990919999900099199999999992999999 -040809010600101011111200041311111400151516161700151818021700031818051704009999903099099999990909909901999909099991999919999999929090 -030808010500090908101100121202131400120415151500041616161600041717170600299999993099091999191990119999909099990990999999999909909909 -080809031000080809111004121314151000161702181800161919181804160106050400999999992999919009199909909901099110999999991999093000999999 -080509100300081112021300081114151300081616171804191616201804191906011804901299919999919999919909199901909991909991999990090039999990 -080909050300080909101100081210100200121213141504161717171800040401061800099999990299991999999909919999919900100991099999900309999999 -080910041100031210131300050214131304151515150600161617181800191919011804199092199099909991999991990091099999099901999999990039999990 -060508090300101112090400111112090200131412151504011412161500041417181800909290909999999909990999919099919099909999993111999099909099 -080909040300080904101100121202130600011214141404151616171700051616171700990999999290991909019999199991909399909119990909909999999999 -080309090500080809091000110212121200131313130600141515160400170401181804999999299099990919909911999999109999990991999910909309909990 -080409101000081109121000081309120600081302040400141315151600050115170300990999099999009999990991999991999090999919090990903919999929 -080501091004081109091000081213141500081613131700060218181704041918180300099909939999190991999900009919909999990199999199099999900929 -040809090900011010111100061012111100051314021500161617171504160317171504099999090993919999999900999990199909090091999999099999992990 -030808090904100208091100101212121200101314140600041514141604171701180500299909999999190991990999999919999099990199099190090309999909 -080808090300040204100600111213101404111515051400161615171400161601181400991299109990999991990909090910999999999990999009999309999909 -080808040600090909091000031102121304141405121500161717121800161701120400999999900099999929190990190909909990999999090910999399999909 -080504090400081011120300080211131300141415131300141415160100060415160400090099990990999990902991199919999919999999999913909999990909 -040108060900101108120900131108141400151108140200041105161604171717160300990990399990100909999999199099919999990909199999090999999929 -080801090904080810090904111212120400111102131400151516171800031616050600999909939999019009919999909999199991099010099999999900929999 -080909100300080409100500111202041300141406151300141416171300040116161300999299999990919909190911099199999909099990999099903909999999 -080801090400081011111100121005060400121002131300120404131400121516160300999099930990199909000999999999999911999009999991999992900999 -080801050400080809091000111213131300140215161600171704161604171818030600999999930099990990199911999199909190999109999999091990999299 -030808090200101010051104120613141500121313161704121818192000121818012004291199999199999099001909919999109999909901090909999939999990 -080805090900100811090400121213141404121202141400151516171800060104170300999999909990999909000999990990999911991900199999903092999999 -080803010900101005110900101002120900131414141404041515161700181818040600929999193999909999919991909091199999900090099999990900999999 -060808080800091011111100091003040200091212131404091515161700040115180500999990999099999999291909999999019999909090190911903909999909 -080609011000081109091000111112131400050402151600041717181800031717181804999999093999999909910990019099919901199919090999999999929990 -060808080800010909101100041209130500140215130400140415131600140317131600099999090993990999900901999919999019999099099990999199992999 -080109101000081111061000081111121304041414021300051414151500161718031504990999309990999999909999000991999091999991999999909099900920 -080808090904031002090904061011121204131415121600131317181900202020010500999902199999199099109999990091999909099010099919999030999999 -080109090500081009091100081012120600081314031500131302161604040417161600999099399999190999190909999991999099299919199919009099990999 -080808080000010402040000090910100000111112100000111103060000000000000000999993019999999999109990999991999909999920999999999999999999 -080609030400080510111200081314021504081316161500171316180100191919181804909999902099991990091999910990199999990999990013909999999990 -030808091000111112021000110413061000050413141000151513141600151513010400990992990999111999909990999099999909199999099009999930999999 -050808090904010808100400111213130600041213130200141215161700141415180300090909999993900991999901909099999999199999190091999919999929 -080304091000081112120200131415041604141417171600051817171600181806011600990099299099191909991909090990999909999999999091909039999999 -080910011100060910101100120913141504120216171804121919170400120319170500099990993999990999100991990919009019909919099999999999992909 -080309090904101011040400100211121300051411121200151515150100161617180600299901909999999999900919999919909910990919999993909099999009 -080801090904080810101000111213141404111202141404111516170600110518190300999909939099099990919999190991999999909910990090990199999129 -080809090300080809101104121302141404151515061400161718191904050118191900999999999299991009019991190019999999991990991099003999999099 -080809100300080209111100121304141100011515140600161515171700050404171700991299999991199919999919909910999390999999090909900099999999 -080910051100080410111100121212120600040213141400151515141400040316010400000999999999999990009999909091199919999199999999909130992999 -060501040800091010101104121314151600021717151600181717151900181803151904999090039099990009190911099190999999991999999990999999992990 -040808090600010808100200111105121300140415041300141615151300171717170300091999991093991990091999909909099999999999990990990902999999 -030808060400090808101004111202101004131314151600171714181600051914011600990992999099909019999911190999199900199999999091999939900999 -030808090200101010061100120413131300121214140400041514141600151504010500291199900199999999991909999999199999099099990090999930990999 -080406091004081111101000121111130100120514150400120316171700181802171700090909990990999999909999139991099909999910092999919199991999 -040108080400091011020400091211130500141411131300141415150300041615150600999090311990190999919909909909999999999909299999990999909909 -020809090900100411030500101011121204011311121400151516160600151516160400119991992999999990990990090919999399099909099099999999999909 -030608040900101008021104101008121300140515151504161717181800191917011800999092099099111099991999919999199099900991990909999939990999 -040308080400090908080600041011021200050411131200141511131200141411011200999090299999190999919900919999999999990099999001999939990999 -080104090904080810110900121306111400121315020400121316171800121305031800999909300999119900090999999999109909999901999991999099999929 -030802090500100811091200131311091400131311091500040616171500041616010400919992919091999999990999909999999909090910999919990930909999 -080910030511021212121211131313131414151516171414151516181904060401181804112991999099999910999099999919999919099990999909000390999990 -050108080804090910101010090911121314151617021806191920201818212121200403999990309909099999999991000091990091199099999099990990299999 -030808040900101004110900101012120900040212121300051415151600061701151600299999190999909999909999999019909919999091090990990399909999 -050804010900041011090900101012131300141512131300140412060200140316171700009999093990009999919999099999999009999099199999999901992199 -080809100400040804110500011212121200131314141400030602151500161616151500900099990990090990999939999909199999999910999099929199999999 -080109101104080809021100121209131404121209151400161718151400190406030500991909391999190990910999990999199999990999990099909020909999 -080309100500080909101100080212101100131212041100141516171104140118040600929099999999999991999909909919999199091999991000093090999099 -080904010600080910111100120913111104050914151600030402171600181818171600999999903099099909999900990090199991099919999009929199999999 -060408090900101108090100101102120400101113141500100413131500050316041500999990099999113999909901909991099999099999999099909199992909 -080809030400080810101000051104121200131314150200011616171700061604171700909999902099999999991909999900919901199910993999999999900999 -080105090900081010090900111010120400111314151600110217041604110617170300990999399990909999999919009990999190099190999199090999999929 -080804010600040809090900101011111200130211111200031415161200141404051200999999903090099999910999999119999919992009999990999009999999 -030808080400050609021000110909121004131414151000161717171700161618010400299999991099999900919999090099199999190909199999999030990999 -030808090900100808040500100611111200130411110400021414140100151515160400990992999999909999090990909199909999991090999993919109999909 -080910010600081111121200031111121204130204051400131315151600171818180400009999903099919999999999990210009999999199099990909999909909 -080805090400080803090900101006041100020412111100131414141400151504010400909999999099299991990999909190999999991000991999909030999999 -040108080400090908081000111212121300140215151300140515150600140304160400999990399099090919999919909919999109999999990990999909929009 -040508080300091006111200131304111200131314111200151414110200150116170400999990090290909990999990999999999999999099190991993119999109 -080409010400080409091000081111111100081206051300121214140200040315150400909999993099999990910999999999019999990909199091909910992999 -040108090900101108090900121313021400041315151400161615151400060517040300999990399991909919909919119990999099999999999099900092999099 -060808090900010808090400101011020400051213141400151516140400151503171700099999999093919990919999109901099099999919999090999209999999 -030808080200040909101100120909100400131314100100061414100500151604171700299199999199991909990909099909999999399999999900900909909099 -040808030400090810101100120210131300120414131300151515151600050106171600999990992099999900990911999999999900991990999999903009999909 -040808090900010808101000041112121000130212120400131304141400060304150500090999999093999990199909999999999119099900999999902909999009 -080910110500021213130100041213141504161203141500171818191500061818191504111091991991993999999909000999999029990999990909999999909990 -050809090300100811121300140811150400141411020400161617170600160117171804999990909299991909919999909909199919099111999999993990999900 -080909011000080809111004030602121000131314121500131304161700181818040500999999993999190020119999999991909901999990099099909900999999 -080809040300080810111204130610111200141510051204011617170200181818181900900999999299999009999909099099999000909099193099991991999919 -080104090600081010111100081010121100080413021400151617181404150305181400999099300990909999999999199909199991090910999199092999999099 -050108040903101108090912101108130612101413130212101516161616041704180404990990399920909999999999999910909919119909990999990909000909 -040809100300110809101204111109101300040609021300141516171700051801171700999990999299091090999999999999199909190909190019990399909999 -080808080300090204100600091110101200091314140500151504160400150117171700999299199999999991090919909990909109999100999999993900999999 -050108030900101112090900041313021404151313161400151717171704150618191900992990319990919991910909990999199091999909999999099099909099 -080808090900101011051204101004131200140213130600150416171700180301171700999990999099009099999990909909999119991091099919919399929999 -080109101000080909101104080412131104140215131100161717130600050318131900999999399990909099109990900991999019990199999999909190992909 -050808010400090410111200090610101300090402141300090415141400161616160300999990003099991999991909919991999901999909999099909092999999 -040803090904100806111100120813110200141313151600171717181800040501181800992900991999909909999990919099919999190901999919900399999999 -050809090904011010101000041112021300141415161604171718181600170618180300009909099993999990991909019900199999909009999999990992999999 -080805090904101010090900111212021300141212061500161718041500040118180300909900999999909909999999119099019099999199990009903992999999 -040801090600040810101100120810101100121313140200121315031600051515171804099099930990999999999900999991909991199909199999999921909910 -080609090300081010111100081010111100081204020400011314151500041414150500099999990299999999999909999999199009999091093919991990909999 -080306090900081002111100051213111400151516171404151518191404202020011404299999909091119999999900999990199999909901999000090939999990 -080404010900101010100900110412131300111414131300150214061600151503051700099990903999990999109990999991999099999990091199999990992909 -040808090400010808090900021011110600121011131300141503131300040416160500090099999993999999190911999199099999991999991299900900999999 -080801090900080810090900061110021200131310141200131515151604051703040400999999939999019990991909919909199999999991099999090200909999 -030608040900101010110900120402131300121415131300121617170500161601170400909992900999990999190999999901999991999091999090909399999909 -030408050900101011110900121004110900120213130400121413130600041501161600909092909999990999999999999910099199099999991190990309909999 -080109091000081109041000081112131004080604141000151617021800031605181800999099399990099999909991190900199999999991991119929909990999 -080109061000080809111000051209131004141209021500141617171804140417031900990999399999990991909991090099999091199909199099090991999929 -080109090400080809090600101112021304101415161300171718161300170405160300999099399999190900019999910900999990999009999999990092999999 -080809010600020909101104121313131300140515151600171815151600031819041604909999993091999019110999999109009999991999999999929099990090 -040308020904100808110900121213140100120415151500161617170500161617170600991100299990991999919990039990999099990909099999999999999909 -080809101000030802111000121314110600120415150400121615151700121605010400990992909999119999999900009999199909999999099090999030999999 -060803040900100808021100101205131304101214131300151216171700150104181700929090999099919999910999990990999991990919990109993909999099 -080808090300101111090900100412130200101412150100101612171704050612041700999299909999999999091990119999999001399099999909000999999099 -040508080800091002040300111112131300041112131300141512161600140112061600909990919290999990109999999999999019999190990909993999999099 -030804091004111109091000111102121000131415161004170518160100171706191900209909199999999999099991119999999000100999999003999009999999 -040801050600090808101100121314101100121302041100151316031100041717171700999990930090900991999901999991999990999919990999909129999999 -060801040500090810111200040813131200140815130200141615171700140403171700099999930090011909099999999999919099999099199909990999999299 -080401090904081011090900081012131304141516161300140206160500141718190300999909039990109999090999990010999999999109099999991999991129 -030808091000111111041200051302141400151504141400151516161600061717010400990092999099999999100900199990999999999991999099999030909999 -040108040500090909091000111212101000111213130200141513131600140603041700990990309099991909099999999999919999199999990090999290909909 -030804090400100808020400110604121200111313131200051414141400151515010400990092990991910999919999999900999099099999190999990930999999 -080806010500091010101004020411111100120313141400151617181404191919181800999990903091999019099909999190909999991209991909009999999999 -040108080900101111080900101112120900100513030900021413061500040413161700999990399991999999909999999990999092991999091109909990990009 -030809091000051112021000060412131000141512161604011712041600171718181800219999991990090999919990999099199091909099993109999999990999 -080803090900051011090900121314060200131314151600011717180400041717181804999999029999919900991999099099919999199001093919999999909990 -040808090400010808090200101112131300100614051300101515161704101518180300091999999093991990091909999900999999999900199909099902999999 -080808030909020410041112131410101115131616170518131616192020130401062020992991999909990910999099909900990190909990909990990309999999 -080109101004080809101000110409031200110413141500160213171700050613181700999909399999999919990909299991909990091099991199900909999099 -080910110300080212121200131313130500141415151604141417041800060117170400911299109991999919999999909199999909009990099099903990999999 -080803040904101011110900121011110900130414020900131315161700061801051700999000929999999909999999999099199909199909199011990399909909 -040508010900100808110900040412120900041314141400031502161600151506161600909990993990909909919999909909199099999019099199929099999999 -050808080900021003090900111010120400110604131400111516161400110116160400999990099991999919209999909999099099999900991090993999999909 -030808091000040406021000111205131000041212130400141415131600141401131600291999991999909900919909009099999990099999999010999399999999 -080109090600081009091104080512131400080212121504161617041500181819031500999999399091090090999999009999909199909109999190990199999299 -080109060500081011111200080411111200081302140300041515161600171717160400990999309091090990999999999999999111990901299999990999999909 -030809101000080809110400020412131400151617061404181817171400181805011400299999990999990919009999099100999110900999999990999039999999 -080909100300081104101000081206130200081214151600171414181804050401181800099299999990099999991999099999019901190990990999000399999999 -040809100500011111121200131311141400131315161400040415020600031717171700000099909993999990990999099991999991990091099999999919929999 -040408010900100211110900101211111300100514151604031714180600171714181800909990903991990991999991909990909909002990099099999999999999 -080809101000011112101000131114151600051717021600181817041604180406031600900999999993009999999901199009199999199090999999090099999929 -080801090900080810090904111213131300140503150200161617171804191917060400999999939999019090991909999009919999190921099999009900999999 -080809031004080809051104121209131400121209150200161616151700040118180600999209999199999009901999099999919999190909099919903090999999 -080801090904081011090400051212121300141414151600061717021804031717191900999909939990019999910909909909109999990991099919099990929999 -050808010600090808101100090412101300091415131300030402161700181818171704099999993090909999090990999990199909999091999919929109999990 -060108050900101112130904141512160904171512181800171712041800021919190300990990309991000019999909090199099999999999999909919999919929 -080309101100080909120500080406020400081314141500011616161500041717171700929099990099919999919999009909199099999091993990990999909999 -080904100300080909101104121302141400151616141404151616170600150501181900990999999299909000991991199019999999909990990999990300999909 -080809010400080809091000111212130500021212131300140615151500141603040400999999993099190919000999999199999999991999099099999900912999 -050408080400091010080300111010021200131314041200131514161200171701061200999090099999912909999909119999099909999999999011990309999999 -080909101004080905101000011112131300140215131300160415170600180319191904999909999990099990909931199999999111991999999000919099929990 -080809090400080810090100041110121200131314121200130414150200060316170500999099999999003900919999999909999990999999199091909910992199 -080808080400091010110500091010120100131314151500041606151504031717170200999099900999990999999909039999199900999009990999099991929919 -030809051000060211121004131314121000151516121700151518121700040119191904210999919990199091999991909991999919999999999000903099999990 -080910100400080910100500040906111100121302111100141313151500041603010400009099999999999999900999999090999991990919190999991930902999 -040808091000110808121004111113141000151602061000151617030400050118181800999090990999909099009991999911099999999919990999903120999999 -080306091000081111091000081211041000021213141500041216171700051204011700290999999999990999999999999190009199099909090119999039909999 -080910030600080910111204130910020500140915151600141715151600040118191604992999999099990009900909199999199099999099999199903099999000 -050106080902101111080812131111141412131516040412130417181803131919181804999910309110919999999909099900909990999009929909999999909990 -020809090105100409111213101414150413100316171813191916162020191906042020119991091309991099909999090999099299909990099099999009999999 -060808091011010808041212131314150404131614021717051614181717041618180403090009990903999999199090109999199909190990999999999999209909 -080909090104080810111212131010141212131515160217181515190420060503212121999999990309990909999999009999991091110990909990900299099999 -080901101104021213101405151617101818151617101818151619192020031604192106199901139099100019990909099999999999999999909099929999990900 -080809100404080809111212131409111506160209111705031819191919181820012121999099990909099999990919990119909909092190909999999139091999 -080808010909101011110909100511110412131414151602131714181904202020062103999999903999091999999199909000991990919090199999090901999992 -080309011011080909121311080214120511151617120611150418121904152018191904299909993099990999099919009919999911999999099909090909900990 -040804050909040810100909110802100312130814141414151617171806150119191904099999900999999909199091929099990199991909991099093090999990 -080404060909080810110909120403131405120213131415121617171715121819012015999999000999009999900999299909990919099199999999991130901990 -040108080808091011111212090611111313090205140413091503041617181818041917999990309991090990999999909990009199999190909999091290999909 -060808090310111209090413141215161613141215161602141215170504140104181920099929909910099909990999999999991991919999999109993900099000 -040408080409101112060309131114140409131114150416131115151702050118181818999900009999099209909999909999991909909999910191103099999999 -080109101112081313101006081313051415160417171815161617171903042002212121990009309900999999999999090091909909999999099990990199209199 -080309101112081313141512051316021704181816041717181816191901200616191904921909991090999999010999199099990909999990099919309999909990 -080909011010080811121010131414141404020615041616170315181616171915050404999999093999019999190019999190009099991999999990992900019999 -080904011010080911121010081313131414081504021616151517181616051920060403009999993999019999190999909909199990199999999900999000200999 -030809041010110809121010050809131415040209130415011617131819061616181804999992990991909999990909900919999019999919093909099109009999 -040108050906101112090913101114151513100404151513100216161718191916160304990900309991009999099999099990999099909999991190009999099929 -080409100404081112101013081114141414081115151604171818020503060118191919990999009009099099999990999999909919900191990999903910299999 -080909090104080804101112131313131415040306021616041717170516181818181919999999900309990190990199909099991990199291990999999990099909 -080808080104050909090910111213131415161702131415180604191415032019192121999999990309999000919009999999999111901909999990920999090999 -080808080910110512130210110314141415110616171515181819202121181804040121999090999099000199991192999999999990099009919090999003999999 -080301040509080410111112081314111516021714181519202014211519202014212106299909930909909090199099990109990110999990999099999999999990 -080905100611080909120411080313131311081415160411011715021819171720202021990909990999900999909992999999199099999091003199999110099990 -060108080808091010111111091010121305090404021404151516161414170404161803999990309990999999900099199990199099190990909999900991999092 -060108090910110808090910121314020510121504160404121704161603181818181919991900399990999999019900909999190909099099990099290999999909 -060809090909011011120204041311141515161616171715181805171703181819192004019999101993991090901909999909099999990909929999999999990900 -080409100106080811121313141111021313151617171718190304052018192121212118900999990309990909999909199919110099990209999990999990999990 -050808090310111111121010041314140215161717181815061717181815041920210115090999990299991990919900911999999099990999999999190003909099 -080609101004081109101012081309141415081609020503171718192020170121192004999999099900909090999991991919192991099199999090993099099099 -030808080804060909021010110404121305141516161717151516181717191919190104299909991999909909910099999000109099199999999090999903099999 -080809040603100411111112100405021212101313141515101316161515040116161704990990909020999999990999019909199991999999990090903999999900 -080808060409041011111209031311111409151515151604171702181801171919181805999999900090999090990921999991900999999919099919390099999990 -080910101010081102121314081515050403081615171717181619202020040119190406909999099999911190199299099919909990990909990909903999099909 -080910100104110910101212111113141212151613170218151613192003051613062104009990999309990999999999009999991099119991999991209990990090 -080910110104081206131313141215021616141215041616171215031818051920041818000999090309099999999109119999999999090999909929900999990099 -040408030000090902040000091010100000010611110000000000000000000000000000992990019999909999199919999300999999999999999999999999999999 -030802040000060809090000040804090000101004010000000000000000000000000000210999919990999999099909999909399909999999999999999999999999 -060808040000090908100000110204010000031212120000000000000000000000000000090999999999119991939910999209999999999999999999999999999999 -030408040000090208010000091008110000090608040000000000000000000000000000990992099991999991939991199999999900999999999999999999999999 -040108040900101108120900131308120900130508121400150316021400041716160600999090399990999991999991909999999901090991999999902919991909 -080309091004081106091004080212131000081414150500161617181904161620011900999909299991999099009919909910099999099910999910099039990999 -060809011000111112101000110213131300141414151500161717171700030404051804919990113999919991990999999919909999991909999999920090999900 -030408090909100511121213141502160413171706161613171718181913202018180104909992909909009019999911199999909999999901999091099993090999 -080809090904080810041111121313141111121202151604171819191605060103191604999999909909909900099999099999009919001919991999003999999290 -040108091010111212131010141212151516061717181916201702180316042121210516990990300990990999999009099019999999199919290919900999999909 -030808040609100808040909100402111212131313131212051414151601171717181904290999999099909999199099119009999999099999199909309000999900 -040408080109101108081209131313131209051414141509031602171518161604040619909990999390990090909999999099919999199991909119929009099990 -040806010909101111120913021114151613171814051613031914202013212121202004909990093990910099900919099199999199099199992999099099999990 -080301090406080510111213080214141513161617180413191918180413191920202020299099930909910090919911909999009900999999999999099099990999 -080910101112080909131304080214141503081614040504171819192020060119192020999909990000909999999911912999009199999109900999903999999909 -080809091010080809090310041112040602131114151616171118181805171719012004909999999299999990999199090090991990090999199099099030990990 -080808080105090904101112091313141415041616141415171616020603040418191919999999090309090090991999990909999099999991090999909019290999 -080805060104080809101112131414151516131317150418031919190218202020202118999999900309900090991999091990991909909999992991199990999909 -060808091011010808091213141505161213170418161613191920020413191920200304099009999903919990019909909099999909990901999910999999099929 -060808030409020808101011121204131011121205131411151617131818150104131918992900999901999919999999099999909909009199990009993090999909 -020809100304111104121314110512121506161717181819161717181819160120202021111291999909909099990099999109009199999999999909993099099990 -040808091010010808051010041112121212131114151617180214151920181803150604090099999993909991999991999091900099099999901199099990092999 -080808091003050609091011121213041415121616170218191616202018040104202018999099009929999909099199091990919091199999990909003999999099 -080808080109041010101109120204131109141404151116141718181119030406051919999999990399991001909909099919999990009999909090920099999909 -080801090400061010101100121313041100021313041100141415031100140515160400999099030999990909109919999199999999091999999129999999990009 -080504030904080410111200081313111200081413110200151616161600060117181800099209909199099999099999999999919099199001990999903099999099 -080504090400080610091100081210090100121210091300141415021600031404171600090999999099090999999999939099999900199999199111999909929099 -030802091000111112091000110513091004140615091604141717171700141818010400919992119999990999199990990991999909009919090999999030999999 -080806090400080809090100101112131400020513131404151617171704031819191900909099999999093999109911909109999999901990991999091099929999 -040809031000110809101000110209120500131414150400011414160400061717171700992990999999909990999991909019099099099990993900990999909999 -030808060900041008020900051111040900121111130900121415161700121415010400299999990990911990999909909999999990999990190001999930999999 -080304090600081010101000081112021300081111141300051516171704181804011700999099200999999999199999119999999099199901990009090039999999 -080803090900080610101000021112120400131412120500041515161600041515011600929999990999999910909909909199999199090190999919999939909999 -080909100300080909110600081202131404081516161604171515181804050119181800999299991999999999010911100999999199909909990999003099999099 -040804090900011011090904121213130600121214021500161616170300181805171700099999009993199090109999999990109999099901999999990992990999 -080809100200080311111204051314151504161717151504181919191900202020010600911199299199999099901900090990999099900999199999909930999999 -040809100600110809120300130809021400131516141400131515051704130118191704999090990999999909902990199991199099999919999999093009999000 -080808080900011010020400041010111100121213051100121214140300061504140400999099191093999999919909999900999990999999299099900999990909 -050808010600090910101004111112131400111102131500161717131804031717130400999990903099099099091990919999909991999919091999029990999999 -050404080300091010080400111010081200131314021200131314141200060104151500999290009999990909999999999009199919099991999999903009999999 -030808080600090504101000091104121000091111120100021314150400161616160400999992990099909990999999009999999999391901991110999909999909 -060108080900101004080900101011111200131302141200131315161200041705040300999990399999990999090990999919999911199909999909900902990999 -080809011000041111121000041111131000051414141404151516061700031816160200909999903990909999919909919999919099909990199099999991921919 -080801040900081011090904121313131300121415151600121405060200120317181904999999930990009099199909999901999999199900199999999991992110 -040406010400080910111100051212111100021212131400151616131400171703131400999990003090099999099999199099909190991099999999919999992999 -040508080300091010021100121010131400121516160400121516160600120117171704999990090290919999911999919991999999099999990190993099999990 -080603091000080405111000081212120200041313141400151513141400150116040400092999991999999990010909919999919999990999999119993090999099 -080910101004081112120100131402120500151416171804031919202004061919202000099909009999093999999911999191109991002990999909099999909999 -080801091004080811121004131314151000051617171000181818020600031920202004999009930999009090199999199909199099999901999990999919921990 -080409090900081002040300111010120500131314121200131315161604170601161600999999019299909909199909999919909919999910999909009399909999 -040809090600011009111100101012111100131313020500141515151500040304161600099999099093199999199999199990199999090991999999902909999099 -020809011000110812131000111104131000140415131000030616161704051816161700119991913999910999999999999100999999992900099999090999900999 -050104080600091008081100121314141404151516161704151516181800021919190300999990309099090901099999990010999999009999099999919999919929 -080809090300080804101100051212130600141212021500141617151504140401181800909999999299991990019909999999109999199909990019099390909999 -080910031100021204131100141414131300151515150400011616171704051616170600112991999999090910999999999919009999999199993999099999909009 -080808080400010910100400110910021200110906131400111504161700051515160300999099119993999999910909919990919999099990190909909992999999 -080405090300080610101100081202100400081314151604171818151600171818011600090999990290991999999991109919999011009909990999999939999999 -060108090900101008090900101008041100120408111104130214151600051717150300990990399999099999999999099199999900901999991111909092999999 -040106050800090910101000090911041200130214151204161617181200160317181200999090309099999999099990999919099010000910999999999999992999 -080804040400080809021000031111051000121213141000121213151000161613010600909999990099111929909999999990999900999990999991990930999999 -080909090300080510101004111202041300141516161300171816161300170119061304999299919999999000190990909091999119991999991999993099999090 -050104080400090909101000111213141000111506141400110216171704111818180300990990390099909991909919099990999199999199999119090992999999 -040308080800090910050200090910111200061314140400041314141500041301161600929990999199990999991990919090199909999999090990999309909999 -080109100600081111111100081213141400150413130200151617181804150503181804990099309990999991999991199099919909999909199099090999999290 -080801060910111111110912051314140912151502161612041517161612031819042021999909030909990990919909999991099999999919990099999199021900 -080804091003080811121306141516021304141517171318190417171318191920010518999129901999999090019999910990999099100999999999990039990990 -080809090909080810050406011010111202131415151617181415151619041420200321909999999009999990909939111900991099090999919999909999190992 -080401091005080611111213081411110413141415151513040216171713031819172020099099930009099099990901999999099999990190999199999199021999 -080306090400080804091000050211091000121204091300141515151500141401040400290099999999999991099991199090909999999091090999999300999999 -060809091000011109091000121212040400131314151500131304050300040216161600009099099993999991990999999910099990999990999099901992991999 -030405040400080809101100120802101100120613101400121515161600041501161600999992000099999999099991999991909991999091090919999399909999 -030809090400100811111200100811111300100804140400021514140100151506160500999992990099999999990999909999099999091009999193919009999909 -080809010400081009111100120209111100120413131400120413150500030616171700919999193099919991999919999909009999999990099099929009990999 -080601090900101010101100121212130400021404131300151616030500041617171700099990930999990991900999999919999109991999991929909990990999 -080801060904101010100900110212130900111414151500111414050400031617181904999900930999990999919911199999099990999990999999920990990000 -080910101004050911110600010911121200131415121200041616021700031618180400009900999099999999999931199990999009990991999910999900929999 -050809100300110809121300140809150200160617171804161617171904202001191904999290991990091909991999099099019909109999099999009399999990 -040803060904100811090904121213051400120215151500011617181800191919181800999900920999999000190991909919909919999919993999991199999099 -080409090300081009090500060402111104121314111100151614171700181814011700909299999990099999190990190099999099999099190009909939999999 -050804030900060810090900111112021300111114041300151516161300150116160400099999902999999900091999119991999999099019999199993999999909 -080805030900080810111200131410020600131415151604131417161604131401180400999299909199991909919999009999199919909999990109099309999909 -020808010400090808101100090412131404090312151500161612151500051718180600199991993099919999900990900999099299999999999009999909900909 -040809090900100803110200101004121200061314121200150416161600151517010500999990991199929990991999999000999909999001999999999030990999 -080901100300041111101200061111121200041313021400151304041400051616161400099990039299909999999909999919199991090990990099900999999999 -080809090500010809091000111213140400110615161704111818021704111819190300999999999093190990199909109999199900009991999919099199999929 -080910111104120513130100141413130400141515160600171515021800170403181800009900900990993999999990909991999991090991999991990999999299 -080406090300080209091000080411121200131111121200011415161704181818160500990999099291191999999999999109999199999199093000090999999909 -080401090500081010091100041010091200131402090400130415161600130615150300099999939090910909999999909909909091999019999919999992909999 -030808090500100808090100101011091200060213091204141516161200041718191904990092999999993999999999109911999919900990990999900990990090 -080309091000111209091000060204131300141414141300151516161600040417010500299991999991990991990999999010999999999091099999909030990999 -080909090900081011110100020611110400121212131400151616040500150316170400999999909991193919999909999199009999091090099999999999929009 -080910100500060910101104120913021100121214151104161718181900160118040300099990999099990099099990199991199919909191990991993902999999 -080808090904011010090900111010121200111313120200051415041600061703181904999909099993999999909909199999919990999909190099990901909210 -040806010400090910101100090912101300051414151300160204171300161603171300099999003099990999999991109919099999990100991999999999992999 -040808080804090910100100111110101200111302051200141515151500060416170300099909990999193991999999909919999910990919999999900199999129 -080806091004030802091000041112091000131111141404151617181800050119181800999902909999109999199999909091999090909199990099903099999099 -030808080900101010020900041112130900141515060900141416161700040516010400299999991999909999919900919990099999999909199091909930990999 -040408050900100608110900100208110900101212130900100414140100030414150400900990999999099999999919999910099990099919999093929999990009 -080809011000080409101000110609041200040309051200131302141200151515041200909999993999019909900990999099999999099219999990991109999999 -080909030600080909101100080212131404151515141404161717180500160117190400992999999099990991909999090010999999900910999900993909999909 -080301090400080409091000110212131000141516131000171516131000061504130500299099939999099919919911109090999909990999999999909090999999 -030508040109100208111209131408151209161608171218041917172020191904062020999992090399199911909919110999990999090099909099999999990909 -080808010409101111111109060412131414031212131414150416171818192002051818999990093099999909910099099909999999992991909019919199911909 -080808050909101011041204030613131415161713131815161920202115160220200115999099009099990999090099999209909909999909099191091993919999 -080809091011030809091011050206121211131314121211151614170418040114192021909992999999999091999990999019999999991990901099903900099000 -050809011010041112131010111114141414151616171818151902171818150304172006009999903990990999019999999909190999999909991119999090929990 -080808080503090910101112131314111112131315150212041615170412061801192004999999990029999990099999099999119999910099999009990300909900 -080404090403081011121313081011021313081014151616171014151516040114050604099999900029909999999990919999109991990999990199903900099999 -050809090410110808121310140315150410160415171710160418171701021919191906999900990999900009999929999199909909909909999999310019919990 -060808080809040410100909111111121314031515120516171715121819171702012004099999090099999909990099009999990991992999009999099130991990 -080609090905100411111213140411111515141616171515141618021903140118191904099990990000999009999009999990999091999991999099293919999990 -030808080209040405100909111212131306141414131301151604171818041917171818299119099999900909991099999090999990939990090999900099990999 -080901101005080911101012130414141414131315061602041718192020212121032020999999939900019900919099999990019999919009910991999029999999 -040809101003060811101012050811040412040813140212011515141404161515171818090999909920999999999900099999909009119099993919099999909009 -080809100400080809111204131415161600061415160300011715021804051915181800900999990099990090999909999099929999999091993919091999901099 -040108090900101010110200121311110600041403151500161605151500041717171700991990319199991909990909999909199092999099999999999009909999 -080609090904080810110400011212111304141412110200141415161700051815190300999909009999090990999939110909919999999999199091990919909929 -060808040900100805111200130214111504131616111500131616111500031704011500999090999090990990099911990991999991999999999990920939990999 -040801090600080810101100121310101100141515051100140216161100140404160300999090930999090999999900999091099999999199999199990099999929 -060808030900101008041100101213021400051213151604011213171600181813041600999290999199990990091999919999199091909990993190999999990099 -050804090906100811020903120811131313140815160404171718181819171704011919909900991999919209999999999091099009099910909099999930990999 -040105080804091011120804031013141500161017140600161018141900160218141900999900309990990099009990009299909909999909999999991999919909 -080809100500080809090600041112130100141516171704151516171704031819190200999099990999090990999999039000199009909999999999099991921919 -080808040900031002111100121213131100041413131500061617171700161605010400999092919099099990199999999999909009999991090099999030999999 -080809100500010810101104121306021400121315151604121315151700041318180300911999999093990090919999919990919009909999199999909992990999 -080401050900081010100900081112131300081415041300040216160600171717160300999999030999990991999900099910999990999199099199900999999929 -050806010900101112120900041313140900151313141404030402161600171717161600909990093990090999919999999099999091909910999099929199999999 -040401080500090910080600090910080400021111111200130404121200131303141500999090039999190999999999909199099099991990990909999909992909 -060508090104101010111112130414111104130415151616130317021616131717181919900990990309999099099009999990109909999991999919992909909909 -080601040909081010100909111212131414021215161414171715181905031715042021999999030991990910909999909199999900991990999990999990029090 -040801090909100811121313100814141313101516141702101819040620181805032120099999930999011999099909999990991099099000019999999099999921 -080109091011081213140604081213151505080413151516021703181819201717181804999009300901090999999999099999990099901999099999019299019999 -080109090403081009090211121010041314121515040604120515161617121819161617999099399920991999191199091990999990999999009909990099900990 -040308080808091006110204091012131415161017171718161019202018052101202018929990999199909999901000099999910999999919990009090399909999 -060805090909021010111212131010141401131516141417131819190420031818192104099999000991900919999999193999999900909009909999929990099909 -080904101003111102121212131314151504131314151516171714180506170114192021009990990929119991099999999999990999909190999909993990099000 -040808091004010808091112131313091414041516090414171502181805171506181803090099999003999091999999909091999909099919990919099999990992 -080809050104080809091011041212021311031415150411061615151711181818181704909999990309990109999999111919099299909999990999090999099909 -040808050910010808021103121304041111121214151515161717171819162020202006099919990123911990009999999909999900990999990999090990099999 -080910110412081310140612081313151612081718181818191904020403190105202020000099999999900999999909000999999019999191999090993919299099 -080808080904041006111101031010111105121313131414121502161404121717041804999009909090999399999999099299010999999999991111099090999900 -080405090310081104121010131313130206041414141516171718181916041718180116990929090999990900091999990990919099919990999990109993990999 -080209101111120413141406151613141401031613171718191604171718191604040518111991991099009019999990993299099999909999999909999900900999 -080401091010111213141010151204161717181202160517181219160604031919162020099090930990019999910900999099999991099919999990999999029909 -080809100403080811041212061314141215011314140215161317180504161619191904990099900929099990999909999999919319109999909000990999990990 -080804090909080410111111121310050414121210151614030610171814191920020114999999909909999900999090099999909900199991199099029913991199 -080808080105090902101010090904111213031411111515161718191515042020062121999999911309199999900999090299990909999099990900909090999909 -080909041010080911111111081212040405131212061414151515021403040116171819999999990909999990099909099999900099990990999991903111299191 -080509100104080211121314081515061614080315161614171718180414171718180419991999011300191991900999990999999929990909999999099999099990 -080309051004080809091000110206121300141414151300161617181300161604010400299909990999999919900910999919099999999910999010999030999999 -040801060400090910111100091212111100131313050400020403141400151616161400099999030099109999999999999109999999991990090999919299919909 -080909041000110912121300110212030500140415151500161616171700040106171700099090999099990999929911999199909099991900999999903999999099 -080909010400080910111200080613131200141413131200040305151204161718180200999999903090901990909999999999999909999990999909002991901919 -080109090904080810110400121314021500121605171804121616170600121919170300999909309999919991110901909990109099909999099999999999909929 -080809100400080809111100121309111100051302141400011315041400061316040300990099999999909909999901999991999091999909993909999092909099 -080809010400020809091004110612120500131415161600171415161600031415180400919999993091990019900999999109099900991999999999929999999009 -080808010400091011121300140512121500141616021500141716040600140318181804999999903090001900991999999999999991199190099999992099999990 -080808090300100511111100120404130200121414141404151516170600151501171700999290991990999909991999919900199099909919999000999399999999 -080309101000080809101000050206110400121212121304141415161700141415010400299999999999909991909909999910009999909991099000999930999999 -040308091002110412131314111115131314161616061718191920202020212121210105921110999919009999999990099999901999999900019099999903099999 -040808090106100808090911041213131314121202151616040317151616051817150419990990999300999009991090999999190991990919999999992999001990 -080609091010080809090511121212130211141415161711141819192011040119190403999999099909999009099999911990199991099019099199903990299999 -080405090306100211091213141516161718151516161718191920200418190120202118099290909901119019990910999999999999099199999090993999999900 -080804060000080809020000011011120000101004030000000000000000000000000000999999900999919990119931999990299999999999999999999999999999 -010408030000090608100000111102100000111104100000121212120000000000000000909993992990919919199991999990999999999099999999999999999999 -080808080400010909090400041010110200121010111300140515061600141417031600999099099993990990919999919099919099999009199909999099990929 -080803091005080811120413141512121613141517041818141502191818041519190106999009920999999909190909999991900909999910999991999193009999 -040106080809101010080809041111121309141111121215140216051718031616041904999900309999999901990999009999999099909199909190099990929900 -080910101111080910100403080912131415080906021404161718041404050118181919999099999999099999990291191999199999100100990099003999999909 -060108091011121208131111121208141504160508171818021919041818202020032121999090390099009999999999000199909900991900999999919990999299 -040808090404100811091212100413091212100313041414100613151414160213150105999090999900909999099909999999990299099999999991910993011199 -060808080104090909091011121313041415121616170215121616030515181819202115999990990309990199099109901999919991199999099929999999990000 -080109101104081213131415081213130615041216161616021717171718191920030405990009309990090999990999999990990099999199901999919990091299 -050809100306040204111112131415161617181415161617191915202117191901202017011299199909099901909099999099999999990190999100099399999999 -080309090905101102041212061314151212161717171701041819192020181819192121299991999001109999199909109909199099930999099099999990999909 -040804091003061102090512131313041412151616170412151618181912150118181919009129099999919900100999990919999099099990999090093999999999 -030808040904100808041105101202131415061617171415161617041415040118181818990902999090909999990011199999199099099999999199903009099999 -030808080805091011020412091010131412151515161612171818161612061818190104299909919999910999919909919909919990990999999999009903099099 -080808091011011212121206131314140503131315160217181804191717181804192004999009900903999990199999999991902991190990199099999999990900 -050108091011120808091011040613091011141402041511141604171718031619171704999090399990919000999999199991909919999900099999029999090099 -080909090910061112051010011312021403041315141404161617041818161619041818099990099099109991999939192999199909990009009909999999990099 -080909040403080909101112080513041406081515150216171718181916171701202016999999990029900199091999090909919999910099999091199309999999 -080808080904101111111103101212120413141516161713041816160219181801062005999000999999999990999209909909999099190099119099199390099909 -080808080000060409100000040211010000121211110000031313130000000000000000999990009999919999139901999919999999992990999999999999999999 -040809030000010809090000100802040000110812120000131313060000000000000000099999992999999939199991099199999109990999999909999999999999 -080109040000080809100000041111110000031212020000061212040000000000000000939999990999019909919999999999199291999990990999999999999999 -040808010000090808100000090611100000121202100000031213040000000000000000093999999990909990199999999991999919999909992909999999999999 -080804090000081010090000111102090000111112130000010406030000000000000000999999909999999900999991199990199999993002999999999999999999 -040408030000090908040000090902100000061111100000121101100000000000000000992990099999909999199999999901999990990999990399999999999999 -030806040000080802090000011010100000111112120000111113040000000000000000209999990999199999109999999319999909999999999009999999999999 -080301090000080810090000041102090000121212090000041313060000000000000000993999299999199999199900199990999999990909999909999999999999 -040809090000100811110000100802110000100812130000010604030000000000000000999990909999999999099911999991999991993002999999999999999999 -080801040000091011110000090411110000091212020000090312060000000000000000999999030990099990999999999999199991999290999999999999999999 -080804060300080809091004051109091000121212121300141415160200140117160400999999900299999090999999999009019999990999199191993199999109 -030809090500060808021000110404121304141414141500161616171700181818011700299999990099919909910909010099919999199991999909990939999999 -080808090900011011020600121011131300141011041300151011040300150516170400990999099993910999919901999099999990990999299909999099990009 -080801090400080809090500041010101000111213021400150413161400060317161400999099939999090999199909999909919091190099999990909199992999 -060501040800090909080800041011110200121313111400121313041400120415031600999090039999999901909991919909919099999999999909999091990929 -080809060300101011111100101002120400130414121200131315151500050116170400990999009299999999190991999109999990999909999099903099999009 -080808090300061011090904121311141500121617021504121819201500181801051504999299909990999090919999999900199909109099990011999309999990 -080909010500081009111200081313141200061513141200031502161200171504040400999999993090910990109999999999999099999910999199929900910999 -080902101004080904111004081212120300081314151600171819190600170119190500911909999999909091902999999910999090090199099099993999999909 -080804030900040810110900040210120900041314121500131306120100051616161600999999902990019999999901999919909911090999999903909909999999 -080809031000061109041000121209021300121214151600041717181600051717011604909299999990009990991999919990199991990919999910999939909990 -030809101104080812050600131302041400151516141400151517181804191901181800200009990099199999199990999991099910999999999109009399999999 -080904011004021112121000131412121000151416170500151418171704031419190600109901193999199919999990909190099999999909099999029090999999 -050308080804090610110200121310111100141410150400141410161600041701161600929900999199991900999990999099199999099991999019990399909999 -080109100400080809101100121302101400120415101400120515151600120317060400999999399099999919090911009901999999999999990990999190992099 -080910101000041111061200041313131300051414140100151502161700150316160400099990099099999999000909999999099999390991999190999190929999 -040804010400050909101000110909101000111212121300060314141500041616160200099999003090909999999909999999019999990990199999992991909919 -080809101104041212131100030412141100150216140100151506141700181818180500900900990999909999999999109201999919399199999900999900999999 -030808050900101008110900041002041200131414151500161717151500061717010400999992990999990999090991999091009999990199990919999930909999 -080104090600081010091100081004051100081213131100021415161600040317161600990999399091900999999990909999999909991090991199909199992999 -040408080800091002040300111105121200111106121200131415161700130115151700999990019290109991999990999999999999990100999009993999999909 -060805010900101010100900041112120900041312140900041515021600031515161600909990093999991999099900999909999099199991990919999909929999 -040405080300091011080800121313130200121214141500161718181500060118181504999290009999099900991999919991999909099919990199903999999990 -080801090500080810091104020412131304141506131600171518181600190318181600999999939099190010009999090190999999991990990990919999929999 -050804090900010810100900060811111100121202130400121214141500030414040400090999999993190999919909999991909910999990999990929900990999 -080905101104080902120300080913140600081513141604171718192000171701202004909109991299119999999991999999909000909919099000999399999990 -080809090500100809111200101314021500101614041504171714181500060414010300999999999099990990009990119999999090909099999019900932999999 -080910100400080205100100081112131400151612061400031712041400171718181404019099199999903991909999009919999190992999999009999099999990 -080803091000080804101004111112120200131412121500161717180600051701191904992999991999909090991999919009909909990919099909909309999990 -080803060400080809091000021109121200111113121200041413151600041401050400929999990099999919990999999190999910999999090009999300909999 -080809090400081010110100050210121300141404151304141416151300031706151300909099911999993999909901909910999999009999999909991099929999 -080301090900081011090500080211121200131411041200151411161600041406161604999999239991900999999919099919999010990999999909909999990990 -030808080500091011111204021311141200151617141204181919141204202019010600299999199091999019999990999109999909901909991910090930999999 -040108091000111111110600121202131300121214141400151603171700041605171704990090309099999999919991199999909999990190999299909999999090 -040804090900010810090400110812131400060812151400161602051400160317171400099999909093009999909901999099099999099919999109999099929999 -080806010400080909101100020909121100131304141100131304141100040304140500999999003099919999909919909190099999999999999909902999999009 -080801040900080810090900051111111200131302141204041315141200031617180600999999930999919990919909909991099909900919999999999109921909 -060804090900101011090100100204121300141516161700051516161704031518181800009999099999113999909919009019009999990999999999099990929999 -060808030500020808091000111204091300141415091300011415091300041615041300992990999091999919990990909109999999999999993009990999909909 -080609090900100411121200131111021200141516170300181516191904050116191904099990909999999900909909199910199099990991299999003999999990 -080809090500080409090100101010111200131314021200151617181800060304181804909099999999093999919999019999999911190199099909902099999990 -080109100400080909111200081314141204151514140200150316171804191919060500990099399990910999919909990909999999199999199211099000999999 -060808010409100811121209101311121209101313041409101516031702051804191904099999993099999190999999099990999999009909910099100921090999 -050108090406101011111111101203131414151616161614021718181804041919192020990090309909099999999992909119099999991199901999900090999999 -080809051000010811121000041311110600141415150300141404161600041702161600990999909993000991999999909019999909999999299999991099901199 -080809041010040809041110121209131114121215161114031705181101191919022006990999999999999000909999099999099990109001999999320910999190 -080904100411080210101211081314040311081514041616151514171616050106181919009999999099191991992991099999990099999990999100903990999009 -040808091011050808041212131402151212131616161718030619191717202020190104090009999909990909999911199999190999102999999090999993099099 -040809090909061002110312051314140412151314140412161717181919040117181919099999011990992990199999909099999999990019000909903999999909 -080309090405081010091112080210131415081604131717011618131717191919192006999999299009999999900011999999900199999909993000990990999990 -080404040105080809090909021010101111120413141111150413061616170318181616999999000309099999919019999199999900091999909009919999929909 -080109090909081010100304081112121212131302141415131316041405041718181906999999309991999999992019999911099919909999909009990999900900 -060408080808090910111104090910111112030502131212011415130404041416131718999990009999999099999991099291999999099019093999999199001000 -080910110104120913131414120913131514031602151504061717181818191717202105000990990309991999990999999991990299999119099999909909909900 -080808080909101011020903101011121212131314041516131317171704180501192006999990999999910999919299999901099909909919009999909309909900 -080409050104080610111213080411111415081617181415191918181402191903202020909999900309000099991990991999099000999999919099999999199299 -080304090909081011121301080214141504040516061515171819192020171719192020299999909099111391990919900990999909090999900099999999999909 -060809101010111112051313111415161313011417171804030417171818191919022004000999909999099990909999099990909319099099909999929919999100 -080808080109040605101109121212121313041415161313041717161818041717021803999999090399999009001999919990199009999909990999999919209919 -080309040405081009111213101009141415161602171715161618171715190404010615929999990000990999909099990901999991999999999009009030909999 -050408091010111208061304041408021313151408161617151418161603150118181904900090999990009909999099119999091919999999920909993999999900 -080801050909020810101011120404061311141403131311141415151515041617041804999991930009199919000909999199999929999999909999990990900090 -080808080104090909091010051112021313111114151313160617181819200403212121999999990309990909099190919999199991990019009999909299009999 -040806090110111112091310111414090510151414160210151717180419151703200419090999099399000199999999009999999099119901009999999919999209 -080409101010080802111212131314140403131314140604011504041616051718181818909999900999911990190299999999999919099109903999990909000999 -030809091010111109090412111102131312141516171312141818181812061920040105299099199999999099099991999991999001199999199999090993000099 -080409090906080510101010080311121212081111131304040214131301151617181919099999999009099999990992999999909099909199999199300110909199 -030809090610040811091010121302141504121617051818121619041818120120202020299099999999199909100911009999990990999909991009993090999999 -050108080904101108120913141516171813141916160413141902202013141906202003999900399990909091000901909909999999909919999919999099999992 -080809100104080811101212130214100512131515101604130615171717030418191904900999999309911999199911909999999990009999090999929090990990 -080809090909101011110604101011121313141515160213171515051803040104041804999990909099099999999099099099919091199999020909903099999900 -040801090910111111111210130614141210021514041216171819192020030519192020099999030999990010909999999199090199999109901999920999999999 -050803040600040809091000110802121300111114151500011414151500161616170400099999920099999909910991199919909919999999993909999099999009 -030808090900040808101000110402100500111112131300141415131300160601170400299999990990999999199999199909109909999909999019909309909909 -060809100500030909100200041111111200131314141400041315161604171801161600009999999092911999991909909999919999999919999009000399909999 -080109090900080810021100121213051100121214141104041516170300151506180400999999311999191990009999999990999999909099290009999009999909 -080809011004080909111004121313141004120615161005121703180200121719202100999909993990900099919909090990199909909991990991999291999119 -080809051000031109041000111109041000021212121200131314150100130616170400900999999992990999999999099190909999991909999113990099999009 -080805030900080804040900101112130900141412040200151512161600150112160600909299999999999990009909909099919999099099199119993999999909 -030804010600090810101100120413131400120213041400121516161400050416161400909992993099090910910999999999999110999909999099900999999999 -040805010400060909101100121213131300120214151500161614151500160314040400099999003099990909019991999919099909999199999999999900929999 -080804090900011011090900101012130200041415051600171815061600181815031604999999009993109999199999119900019999990099990909999999999920 -080909090400081003111200080213141400081516160400171515181804050106181800999999120099990991999910099999999909991999091909003099999999 -040508040300090908041000090908111000061213131000141513130200140104161600990990099299999999909999999900099009999999190199993011999999 -050809011004111112131004111102131000141516130600171718191904170320201900009909903999119099999991909901999099090910999999099199992999 -080808080900101104120900061302120900141415150904141415151600040117030500999990999990999990099991099011999999009999099999903190999299 -080801090500081011120600021313120400141404121500161603171700161604171700999099130999100919099999999190909999099190999299999999990999 -060801090900101010110904121213131300121214020400151605170300151804171700099999039999910090919999999991999991099001999999990992900999 -080902101000080909101000111205040300041313130400141515151500040116160600911999999990999991902909999010999999099199990999903090999999 -040808090300100608090900111112130200111114131504161714181804050114181800999290999999099909091999099990919909909999190119003999999999 -080809101004111112100100111113141504161617181500161602191504060319190500909909909999913999109990990091099999099919999919009990992999 -080806030900080810040904111110020900111112131300141516130400050117171700909299999999999090909999119991999919999199990009903090999999 -080808080300090210111100121305141504131316171504181819191500180120061504999999099291119919999999000199099900901909999999993099999090 -050408090400100808110100121212131300041414141300031502161600171706161600909090990999903909019999999099199999999910999199921099999999 -040801090900100811090400050811110400121313131300020414141500161616030600999990939090199909909999909919999199991990990990919990999299 -080809010600100909111104121314111100151316021700151318041700041305031700999990993099919000199909999991999991199909990909999999900929 -080808010600090909091000111111111200131314041200150216161700040403160500999999903099990999910999999910999990999199090199900990999299 -080809101000011112101000041314050400151514021600171714181804171706031800900999099993199990199909099909909991190999199999099999990929 -030808090200060808101104121205101300041214151600171718191600171718011604291199999199999009991999099999019000999009999901999939999990 -080209090903041010111111041012131405151516141417151518191920040118191906019920199999999999909900099919990900999999909009003999999990 -080802091010041112131003141415131616141404171616181919191920060121212105911199109920999991099999099999999999099100900999903099099999 -080809090106080809091011040212041013141404151013161715150418030519191919999999999309991090199001999919099990091999009099920999099999 -080808020903051010111213011414141212151617171818191917171818190620040404999199901120919199199939999909999099990999999090990090099099 -080809101004040909111012131415111617031802111917051820212117061801212117999999099900909999990011909291999991199999190019999399909990 -050308091010111104121310111114021304061516161617181515191919202020200104990090209999991099919991199999910999990999109999900903099999 -060809090104101011091213141415161613141417171713181920200213040320200504009999009309990199009990999999999999919999190091909990092999 -080910020104030611111212040411111212131313131414151516171714051816161920111992991309099999999999919009990999999909999009999999000900 -050108020909101008110312101008131306140415131316171715041818041715041804999190391919999299919991190090999099990999009909909999099099 -080909020106031010101111121313141115121313161717041819041717202020200405191992991309999999919999010999990090990090999099999090099999 -040809090104100809091112131414051516131402041716130618171716031919190416909990999300991999100009990991909990999919999099999199929990 -080910101010040905111213030411111414151515021414060404161717181919190117009990999909099090990999999299099991199090919909909903909999 -080109101006081111101012081313130414081516021705181519191720040419191703990909309990999099199099990990199099100909999999100999299999 -040808091010010808091110121314141404121515151505121617021803121917062021099099999993900991990909990919999999909991990991990901290991 -080909090904081011111112031302141516171717171515011818041919061818201905999999099901099921999091199999190999999199093999999909909000 -080501091010080811111111121213141415121216141417041804061917040220191903099099930999199991999990990990990990990190999999991099901192 -040803090904061011090902041111121213141515151513140404161713051818180113092909099990099199990109099999909099999909990990109903999999 -080803090904080806090902100511121213141511041617181911202001181811212121992999999909909109990190999099991099019099190999399909990099 -080808090905031002110901101012111313140415111313161718191904202006191904999902911999019399990999099090999099990900990999090099999990 -080109101010081112131415081602141415080517170618191917170318192021040418990999309991909999009911990991900099990999999992999999900090 -080904041011040909120213140415120603141616121718191616121718191901051718099910900119991999090290199991999999990999999990090309999999 -080809090904080404041011121314101011151616160311171717171811060119190205909999999909999900009999999000099099929099999999103191999910 -030809061010111111121010040402131405151515151414161717181919041701181919219999910999999999100990990091099999999199090909909399999909 -080808080104050609101011121314101015160217181819162017211819040317212119999999090309919009199001999919090019999999999190902999999999 -040404080106091010081111041010081112131305080012131415020412031416161616990990099300999999999009019900909999999991999110999999029999 -040508080808090410101111121313141111031313141401150416171819151502200619909990990999990900999909999999909999932901099909090919991190 -040108080808090910100211090912100411061312141516171318180403051318181904999990319199199199990990999909991099099990020999909999990900 -080909050104080909101011080412101013081412121513030602161713181818041913099999990309909999999009199999909909909019999900929190999909 -080803091011121304140502121516160617121516161717181818181901202020202104992119099919909090909199990999999009099999199990399990999900 -080910101104040510100412130314141212130615161601130217161618130419191918009090999009099999099929909990999909939909991119099990990999 -040406080409101010080809110312130509111114131509160417131818021917011818999990009099909999099929909990999999001909999010919939911999 -080809090909080810101104011210130204051414061503161717181920161717212121909999999099199091999939110909919090999099120909199909999999 -040608090909101108121314101108150405101608171701181819172020031802042020909990990099909099999009909909099901939919999990929199991099 -080404090904101106090912131114050312131114151612131717161618131701041902090900999990999099099999992999099999999000910919999391199901 -050804091010110812121310110814131301110615161717111802191717200304212121990090999099999999909990093999919091199919991109919909929099 -080802090910080811090903011213041404151213161414151217181920150406052020911919999929099991090939090999999090999990999090999000909999 -060108080809101011110909101011111204131415161604170415021819171715050320999990309099199999999999900909199099990091909901199909199992 -080808020910031111041210041111131310141515131301161715180604051704181819991192999199990999991999990090999090930099099909909099099990 -030408090904100411090912101302061415161616161415171718191401171705202020900992999909009999990011909991999999109900999099399009999999 -080808010909041011120913141414140413151605021717181919201717061919212103999999003900910999190999999909199099090001999999909919999992 -080909090110081111121310061111141510041616041717181603190417052020202002999999990390990199990909009990091999990999990929999910109991 -080809090603080810091112131414151512131414160412171717171802050401192021999999999029009099909999999999099090999990019999900310199911 -040809101112011309021103141515041116141515051117181919191920181806212121011919191923991990909909990999990990990099909999999099099999 -020808080306091004110512091314151616091313151617181919191904040120202020199291999900090999909090099999999199009199900999903099999999 -060809010510021109121210130404121210131304141510161717181519031717041519919900193991919910999999090999099990091999909900929909999999 -080808030609021010101009111212130504141204131516011718131919171720211919992991999099999010999999909199990199009109993009999099999009 -080804090910080804041010050211121313141504161313141417171717031818010619909909999999099990900991199010199199999991099999929039099990 -060108090902100808111213140415161213141718161213140419162003140521162020991910390010999990909999099990999009999909029099999099990999 -080601040504080910101112080410101111081314021515161717171718161604191903999999030000999999999099909901999099190011919999999009299999 -040809101010111103120206111113121415051616161717181818181717191920040104091999029199999099991990901090991999099990999999990093099099 -060508091004111203101013141504161613141702161813141919201801141919201804900990990900299991990999999910999019909910999991399999999190 -080808030909020404100909111112131414151512160417151512181717040112190506992991999999900910909099099919999900999990099990903999099009 -080109101111081209090611080404130204081414141516051717181519202020201503999099390990199999010909919999910099910990919999999009299999 -080804010909080810100909110412101314150512061304161704031302041718181818909999993999099909990990010099090099990999990999109029199999 -080509090900081002040300081111060400041111121200131314121500131301161600099999919290109991999999099999909999990919999000999390999999 -080309090400081011090200121212131404151515161604171819161600061919010500929999999090091999091999910990199990909009990999909930999999 -050808010900100808110900040412110900130212110400131312141500060312140400999990993990910900199999999999909119999990999990902990999999 -060809090400041010021100121010041300140304131300141515151500161616010500009999990099911909991909909929999999999909190999999030999999 -080904011000080911121000060913141000151313021000161605171700161604031804999999903990019999109999909099999091999001999999999991990920 -080509041000080611111000080211111000121304140100151616161604031717171700909099909999999990999919909110099999391191999999029909999999 -080801090900050810110904121210131404121206150200161718181900041718180300999999939990010090919999910999919909190991990991909992999999 -060308040500020808091000111212120400111313041400151313161600150117161600929990990091990919909909999999909190999999090999993099999099 -080801050600090909101100121213140400121213141404150213161604171803161600999999030099900991090999099999999999909199091999019999912999 -080808080300010909051000040909041104121313021400120613151500121617181800999999090293999999991909900919919091199990999999990099990099 -080109101000080909101000081112040400131111141400150502060300041616161700990999399999999991090909099099999990990019999909909192999919 -080804090900080810090904061112130100051102131300141516171804031919181800990999999999009099909901139999999019999910991199029009999999 -080809011000111111111004121313041404121513161700120218050600121818190300909999903999990091900909990919909990999190099999991999999129 -040108080300090908081000050902111100121313131304041414061500161616171800999990399299991999199909099911999099900099999990990990999009 -080809100200080806111204011311110300041415161600141417161604181818180500911199909199991091999939929909099009999909999999099090999999 -080909100300080209111200051311111204141516171204141819202000140601202004991299999990199991999901990991999000009019999909990399999990 -040108080900101008110900101012110500131404110600021415160300041415150400999990390999090999099999909190999999091999991112909999999909 -030404040800090910020800110504060800111212121200111304140100131315141400999992000999111999099909999999019999999991999903909999990099 -060808010900100808090900051112131304141415161600031702161604181818190400099999993990919900109999990901099999999919992999091109999909 -080601050400080909101100080409041200021313131200141415161200031515041200099999930091900999990999909109999199999100999999929909999999 -040408090900101112090900011112120400131104060300141515161600140502161600900990999990909999999930909990099099990199299999990199999199 -080808080200060309101100121212101100051313141100041313141500041604010400999199919199299909999999999990099099199999990900990930900999 -080804090300080810091104120413090200121414151600121715151800120105061800999999909299991009099909919990919099199999990190993009999999 -080809101004050809110300121309141404121504061600121718181900120118180200999909990999909900992900990999919099999000199199993991999919 -060308090900101004090900111012021300040514131300011515161600171717170400921990999999909999919900199091999909999910993999990909999909 -040108090400101010111100121206111100131202051400131516160400131516160300990090300999999919099999999999909010999919090999999999999929 -040809090500100809111100010806121100040813141500161613030400021717171700999090990990099999999939099999099000099199099999919929919999 -050809021004031112131004141406151004161616171000181819190100181819202000091909011992199099919999090909199999099901999993999909990999 -080304091000080605091000080211091200081111131400041516171400151504011400290999999999999990090911099999909991999991999000909039999999 -060408010900101010100900041111050300121314021500120404151500121616161600909990903999990909199999099991929001999901999999990909999999 -050809100600040811100100040812101300141404101300151516161300031502160400090099909990993999099900909900999999999991999999929999991109 -040809101000041112100100131212140400130215141600130515141600170306141600009999009990913999999999009919999190099099999999919099929999 -040801090900061010090900041110121300141104120400021105151500161616031500099999039990909999900991999099909190991990999909919999999299 -080309090400081009090400081011120400021313131300141515160100141506170500299099999999990999099999009100999999991990991913999909999009 -080808090300100211090904101205131404101516131704181819200600181801202000999299099999119091990990990919909900900199099109999399999999 -080806030904081011051204131014141500131614140200131717181800130104191800999209909190009099991990999909919099999099199919993909999099 -030809090900050808101000111202131300040414131300151515160400061701161600299999900999999909199900999091999991999091099919990399909999 -030808080900101104020900101111120900131314120900131315161700050604010400299999991999901999999999999000999990199991999900900030999999 -030808010900060808100900111202130904141404150900141415151604051718161600299999993999991909199990110009099999999909999999099909900099 -080109091000081109091000081213141004151605021700061819202004181819032004999999399999199990199909100009199909190099199999099999990920 -080808010500040910101100120910101100120413141100120415060200120316171700999999903099991909999900999900999990999900199099999991992199 -080904010400081011111200081013110500141313021500140416160600140316160400909999093090990999199990909999999091099991099099999999992909 -060108080500090908081000090211120400131311141400031311040400000000000000999990399099190999100991999919099999992999099909999999999999 -080805060300080802090900101111121200131111141200041515010400000000000000999999900299019909199999999099099991990903099999999999999999 -060104080800090910080800090911121200131411120400050215150300000000000000999990309999009999999990099019909999990199999192999999999999 -080905100400031112121204130214151500131314151604171718191600171706011600190092190999999091909999999919999910009919999019999039999999 -080809090900080810111200041010021204011306141400151516171800151505040300999999909999019999919909900919199390999099199009999902990999 -080609030500100909111104120204111100131314141400131315161700041515011700092990999099999001999909099919099999999990099119999939909999 -030809090500100808021100120413111100121415160100121717160400041717160600999992990091911999999990099999199009399909999900999999909909 -080809010500080809091000111212130400141402131500140616131500031718041504999999993099090999199909109099999991999919999090999199921900 -040809090400101009091100101012130500031412150100161412171804161602170600099999099099090999909999909999099991392999999010099990991199 -030808080500040209040400061011121300141411121200151511161600151511011600299099919990199991900991909099999999999090999019999939999999 -040501040400080809101000080206101000111203131400111212131400110415130400999990030099109999999919099919009099999929999999999090909999 -060801090900100808090900111213140400111202151504111616171504051616180300099999939990999909109991009999999911909091999999009919999929 -080909010500080810111100121213111104121214151600170614040200040318181800999999903099009999999990090999919990090999199099909901992999 -040108090600101011110300101011051200131302121200131314151600041717171604990090309999992999999999099191999910999909999909909909999900 -030809090900040506020400101112131400101012151500161612041500161601171700219999991999909900910909909999199991990999999009999390999999 -040809090900010810021100120813061104121413041500161613170300161613180500099999911993191999909999990909919000990999299909999909999909 -030808060900100808110900101204110904131415160900021718191900171705011904990992999999999990999999990100099911091191991099999039999990 -050108080800090910100600110912120400040412120200131313141400150404140300999990309999190999199909999009909999199909199999909999909029 -080109050300081011041200131415151204061415021200041616161600171818181800990999309290099991909901990099999991199099999999900999909999 -030808060900101112130904101413131505101616171500021616181504192021011504999992900999090090999999990909099999991990999910019139911990 -080109050300080809101104121309101400150416021400171816041400181816061400990999399299191090999909999001199991090999999990909999999909 -040501080900101111080900121111131404021516161700181516161700031504061700999990039991909919900999900190999199099999991999929909990999 -080910030400080911111200080211111204081314151600171717151500040118050600992999919099999990999911990999909190099109999999903090999099 -040803090400040808101000111111101000120213130500121414141400040104150600099099920999999909199999999919099019999991099999903909999009 -060804010500040909091000111112121000111112121000030402131300141516160400009999093099999909919999999999999909099019999909929199911909 -080910101010020911041212130311141212131311141516171717171819040104060504199991900999999912999999999999909990009109909990903000099999 -080909011000080909111000051213131304140215151604171703150400171718190600999999993990910991099909990910909199901999099299999999990009 -080808091010111213091414011516091414051516020604171516181919041516041903999990999090910990199931999999190999090991990991909999299099 -050809090900100808040400111213021400151516161400171716161400170106040300999990909999909900990999119001999919999199999999993002999999 -050804010900101112130900101112140900151512020900151506160400040316160400099999003999901999999990919099199909999991999090909999992909 -040805030900101004040900100611020900121314141500011614141500161617171500009299099999999999009990919090199099099099993199999099999999 -080903101000041111121200061111040200131313131400151515141400041601040500092990099199999999991999999009019999999909999919990300909999 -030804091000111112021000111313041000141515151504141405160100061718181800290999190999111999909909999999919999909091999993990009909999 -080910010600051111121204131311140200131315151600171718181804171719032004009990903099919090999999119990919999999999199999099091990920 -080802090300080810090904111213051400111213151600111718180400110401180600991999919299999090199999909999909000099919099099990399999909 -050801040900100808111100100412111100101313140200101515151604061703181600999090939099919999099990999999199090199999199990090999909219 -080309101004081112101004080213140600081513051600171818161600041801191900929909919999199091909919009999099199990109999909909309999999 -080909090300080210111204081314041500081617181504051618181900061601191900099999999299111091999999099910999009009999990190999399909999 -080909101000080909111004081202131400051204150100031206151500161616160400999999999999919099110901909990199099399999992999999009999909 -080809090904080810100600041112100400011314021500161717051500161717031800909909999099999900999991009911999391199099990909999991999929 -080609100400081111121200081111130100040214151500031617181800161605181804990999000099999999999909139910999099999100999909929099999990 -040808030900101102090900101212121200100413131300101415060400050115150400999290099999919990199999999991999999999010090199903999999909 -040809101000110804041000110803061200131313141400020504140100151515150400990990900999999999990999999002009999991999999993910019999909 -080109090600080809091000111213141400150216161700041818191704051818031704999999399099190909109991999019999909090199999919099929909990 -040308080900101111080900061111021200131414141500041616171700051616010400929990999990990999919999919090919099990900199999999930909999 -060808090400010808100400111212130200141215051600141718181604141718031600090099999993919990910909919090919990999909990999099999999929 -080409050600100409041100120309111100131314150400131314150100021616161600090990999090999909909999099029099990099999999993919919919999 -050804010900040810110900040810110600040810111200131314021200131315160300099999903990990999999900009999999099199999999011999199999129 -030809101000110612021304111114151604051718151600191920201604191920011600219999910999911090991990990990999090999090999091099939999999 -080808040300090910101100090902121100131405150400141416171704060118171700990999909299999999099991119199099909091999999099003099999099 -080309091000081111091000121113021004051415150600041615150100041718181800929999999999999909919900100991999009099999990093999909900999 -050208080800091004040300090911121200041311121200141414151500160401061500919990109299999991909999999019999999999109099909909309909999 -080808090600031004090400040211121200131411121200051515160100171515161600999092199999099991900991999099999099999010999913909999909999 -040405080800091010020800111010120300041314151500011614151500161606171700999990001999999909912909999909199099999099993119999009999999 -080808010400090909091000111212121300110514021504161414171800040317170600999999903099990999910909999901909991909991090999909990992999 -080802090300080804101100011204100600131305101400131515101400041515161600911999991299091991999930909909999909999099999990909909999999 -050809101111011213140411151515160417181919160217181919162017210603202017000099099993110990919099909909999099199999199999909999909299 -080801040902101111111112131414151512061414151512161617180403160517192004999919030110999909009999999099999999999000929990999999990000 -050808090110060808091110041213091110141402091104141516171118030416191818099999999390911999199900990991999919909990999009920909999909 -040808080106090510101010090911121314041111120204040415121603171717121818999990990309099999099190901099919999909909199099909991299099 -080809090909081011121304061014151515011016021718041004191705202019191703999999900990090099999901999991099391109909900999990999990992 -080804060300090810111100091202111104131212141404151616141400171819010500999999900299099990999991190099999999900919999919909030900999 -080801040400080809101100041209131300041209131300141215020500140616160300999999930099990990909900199999999999990991990910999199990929 -080801040400091010101000111111110600121314140500120214150400121617170300999990930099999909190999999010999999099199999900991999991929 -040105080800090909100800111112101304111112100600141502100300160417171800999990309999900909190999990999909999999019990999909192909919 -080409090300080209100400081111061200081111131200141515151600050117170400099299999991100999999999099999999199090190099999903900999999 -040808090910110808090310111213020514111515161714011515040618041920202020999990999299999990919090109991099099099999003909990099009999 -080809090909080810111101121302111106120414151515161414171805160319042021909999919199999300199999990901099999999990990990999100092990 -080805090906080810110912031314150416171314180416171319192016170219190116999999909909909090909099990299099999099900999991090993911999 -080909101010080811111101060412131414151617171414180417170219200504031919999999009099999399991990009099999009990099199990109099909929 -080909090510080811121213041415161313011717171706041802191920212121191903999909099909009999909900009999900399999199990919191199299999 -080102090300081011090900081012040400131314150500041314161600061714161600991999319299999999190991999009099900990990099999990999909999 -060801040900100808110900051213110900021212111400151504110400151503161600999090939990900909199991999999909199991999099099999909992999 -030808080800040909021004040909111000121213141000121516170100061516160500299999991990991099999909919990199909999901999993999909900909 -080910111200080313021204081313140600151515161700181819202004051801202004911999291999990099919999999090109991999919099009099399909990 -030809100200111212121300111414151304111414160100111718181804171706051904211199999199999999909999910999199090399090999999099090999900 -080801090900080810110400121310141400151610140200171610031804061605181804999999930999000909999990199009919999990999199999009929990990 -050801090900101010100900111112130200140615161604041715161604181815031900099999031999999909901999099090919909900999999099090991999929 -040808050600090810101000111213130300110214150400111616170100111616170400990990999090099990999999929901999910099199990993999999999109 -030408091000111106121000111104131004140213131500141617171800141617010500900992990999909999909999090919909999099190999990999930901999 -080305090600081009091100080212111100131313140400011515161600041515170400990999299091990999999911999991099999099190993909999999909009 -040808080904101003040904100005111213021414111206011414111515041617111515999000099999299999909099900100990199999999993909999099900909 -040808091004111108041001111102121006130414151516031714150516041818181816991100999999999399109991900199909990902099999099999990909990 -020804010405091011111111091212131313091212141504030616171818191916161818199991103009199999009999999999090999092990099009999999990999 -080909091010081112131301081415131316081718180602191918182021041905042003999999990090009390099999991900991999099099919999109009999992 -050806010900040810101000041112121300111112121300140402040300041515151500099999903090099999910990999099999999990919999909900192999999 -080809090300101109040600101002121300051414121504161414171700180401171700999299099999909990190999199909909099909991090919909399909999 -030808010600090808101000111102101000111212121300141516171300040405170400999992993099909919999991199999009999990909999009900090999999 -060808010400091010111100040410121300030514141300150214141300151504041300999990903090909900919999909999199909992999999199991099999909 -040809090904100808110300121314110600121302110500121516171700120104171700999900990990992999099990909999999111099999991009993099999999 -080509031000080609111004121209111000121202041000131314151600130117180400909999992999999000999999199991099919991999099000993099999009 -060108090900101108090904121308141504120216171500031816051504191919191500990990399991999019909910900919099909999190999999021999999999 -080808080300090210111200131313141500061614141504171618191504170501041500999990999290111991999999999919999919900919990900090399999909 -080910030400080909111200130214151600130614171604131814191900050114191904912999999099990901909991999999099999909090090109903999999990 -080105090904080810110200121212121300141516171300141406041300041818180300999909300999911991191999999909999000999990999999900092999999 -040405030800091002111100091212121200091314140600091514160400151501171700999290009199019999199999999919909099999199999100999309999999 -080603090904100211120900101013131300141415150400161715150400050118181800092900991991119999999990999919999999099199990099903090999999 -030809090400051009091100021212131400151606131300151617181800150401181804299999199099990901990919999199909999999909091109999399909990 -080808040300040509021000111209101000131314150600131316171700040116171700990999909299919900919909999091999990099919999109903999999999 -080809101010011112121212131314140215130414141617181920202117050620200403900999099993199990199999911999991099090999090099900990299999 -080509041011120613131011121414141011121515161003120415170218192004011818090990909999999990909999910999199099999991129909900031909999 -040808050909100808111101040406111104121313130214121516041717181818180317099099999090909309099999990909199999119009919909900992999999 -080906050300101104121200101113121200141414021504161717181800041701181800009990990299999999099909099099199999100909199919909399999999 -040508010600090908101000020908111000121314141500120414141500120304161700909990993099999999919911199199909909099099999999999990929009 -080801090900080810090500041111111200131306141200040215161200031515041200999999939999009999190909999919099999099100990199999909929999 -080109040400081011111200041011111300141006021500160517171500161617031500990999309090199909990999909990109099990091999999999999999299 -050104040300080909101000060909110400121313021400121313151500121617171700999990300290999999919909999919109991099999999999990009909999 -040809041000010909111000121211111000121202131000140615151600050415150300090999099993999991999990909999999911990991990991909992990999 -080808030600090510101100121310101404151302141404161317181904160120191900999990992090999909990999990091999091900991999119093099999099 -080809090400080810031100020604041100121213131100041213131100141405010400909999999099129919999909999190099999999999990190990030999999 -050809041004111112121000111113120200011413151600171713061604171713031600900900099999999999990991119919019399999090999999099999999929 -050801091011041213131111141413131515141606040417181802191919181820202003099009030999199901999999909919090909909199999109999199999992 -080404090900100411030900101211060200131311141400131315041400050116161600090990992999999990991909909909919991999919999199903009999999 -040808080804090902101000090911101200131415150300161717180600050117191904999900099999199999199999119919929009990190999990903999999090 -060809011000111212101000111212131304111402151300161405171804161403190400009999903990919999909999990901999991999901090999099910999299 -040805090900040810111100120806031100120813040200121414141500041601151500099999900990099999929999999990919009999900199999990319909999 -030802040900101112040904131313130900141515060900141615171700141601051800910992119991999099109999999991999990999099090909999390999909 -080808010900101010090900110206121300041404121300141404151300030516171300999999903999919919090919909019999990999999999900929909990099 -050808080900011010040400111112130200111114141500161614041500161606031500099099090093999991999991119990919999999090999999999999990929 -080809010400100909111100021213111100140413150500140413150400140313160600999990993090919999199911999109909990999999999090999999929009 -030808080400090910020600111212131404111212141404111516171800191515010500299099991999009999910999910999999990909991999900909030909999 -080903061004110504101000021213131304141516171700141818191900141801191900129001999999999910090919990919909910999919999909999399909999 -060809091000040809111000120311111000120413041000120214141400041516010500099999999999099909099929999990999999999000091999991130901999 -080409100300080809021100061213041400151516161404171716161400171705011400901299999999911900991990999990099909109099999999999939990999 -080808010900101112090905101314151604170218191604202018211600200318061604999999903990999090019990000999199111901999999909992909999990 -080803090900080810110400121302111104141404151500141416061700051801171700992999991099919909199991990019099999999900099199990399909999 -080808030400020504091000111112131400110612041400151612171700150112171700992991999090900919909999099999999990991099091099993999999099 -080304090600081011111200130211110400131415041600131415151600130517011600990999290099190909990991999919099999999999990190999039990999 -080403090900080810090900111202131404111115151400161616161700040601051800099999929999919990919990190991999919099199999990900390999909 -040105080600091010081100041210080400131414080200131515031600131515161600999990309090910990999909909990999099199909199999999929999999 -040108080900101108081200131305060400131314140300151514161600171702160400999090399099099901090999999999099919999099299999909190999199 -040108040900101108080904121314021500161614051500161617171500061817170300990990399991090019999911119099999999999990999099990992909999 -060501080400090908080400090910101000110402041200111113130400141413130300999090039999199999990991999001009999999919099999999999990929 -040808090300100808090904051104060200121113141500161117171500181801171500999290999990909099991999909090919990190991990099909399999999 -080808090904011010090900111111110200121205131400151216161700040616031804990909099993999991999999919099019990990990199999909991990920 -080808030900101102121300101114151600101117171604101118191904050106191904999290999199111999999999009990999999909909990009003099999990 -040804090300100211121300101414141300101516061300151517181300050117181804099299001999119991999999999991999010999999999000903999999990 -080808020500030604091004111104121300111414141400151516171800151516011800991992901099999090910999999990109099999001099999999939999999 -060103080800090904020800100911111200130511111404151617171400041617171400992990399999991909019991909099909909900909999099909999999999 -080809090500080809061004111112121200111302140300011516161604171717170400999999999099099090900999999901929991999091993199099909999909 -080401050900101112120900101111130900141402150904141416171800041616060300099990930990990999019999999909199991909919999911909902999999 -040808090400060808091000011112131400111113130400151502050300151516161700099999999090909999090930909999999999091909999109999192999919 -080609040300080210101100081212101100081313051100141413041100040104151600990999009291191999999999999909099099991999999999903000999909 -080910100211080304051212081314151212081304041601061317171616181817171920919119299919999999009900009990019999939999990999999999090900 -080808010909100611110909121311110402141315150416041715180516041717040316999990903990991909999109990090991999090990999099099909909992 -080808080105090910111213090904041413031516160213171717180413040618181919999999900309090199999999900990999219119999099909909999090909 -050808080809011011111209131011110409130414150206131617181819130417180320099909099093199999990909999999199090109909190999190999199992 -080406091010081109091003081213141415081216160517181216160219041201202121999099009990999999099299999990091999090999910099199311909919 -080109100211081212101313141212100313141516101706181519192004051519192104991119319910999909992999999990999099009909990990009999999900 -040308080802090909091011121213131415041613131401171806051404171818191404929910999919990999990190901999999009939999999990099099909000 -080808090106051011111112131313131212141415161617141404160418040319192002990999090300999999991999909900901999999909919999009999192911 -080104091011080812130604141212151516171805151516021919192020212121032020990009390009909991999919099109999909991099909990919999999299 -040808090906101011090903101011120213140511121515161717121504041701181920099909909999999999990299919099911091990919990999999309009900 -080109101100081212061100081213041100041415150300161715151800051702181804990099309990990999999990099919999019999099290999909199999190 -050803040900101112040900021212040900131313131400061515161600171717011600929090199991909919999999999109009999990991099909999039999999 -080809101000080409101000041109120100131302140500130615161704181818160300909999099999919999919900939901999991999001099990099099999929 -080405090900081011090900031212120200011314151600171718181904170618181904999999009990009999990929919999919311199009099999090999999990 -030804090904100805110900120802131400151513131600171718181800171706010400990902999999909919900911119999919999999099199099999930990999 -080801090900080810090400110506121300021415151300161616151300031717040400999999939999100910009999909199999009991999999999991900929999 -020808080300090909101100121204131404121515160600171515181800170105181804199291999999990919900999990910009990990999999909993099999990 -050408010400090910111100090912121200131306021400131315151400040316041400909990903099019999199999999900109999999991999999909199992909 -080309090500080802101100061212041300041212141300151516161300041716011300299999990099190999190909909999999991090091999999990939909999 -060108080804091010050200111012121300041404121300151516171300151518180300999900319199990909091909999009999999999009999900999092999999 -080901041000020911111000120911110500131415151600171415151600031404060400199991930999190919999999909100999999091999999999929900990999 -080809030400040410111100121314141100151514060200151516161600050117171700909999902099099909099900999999919909099999199199903099999999 -080806090300040810111100121213140200121215151504161718191900050118191904999299901999999900091999119991999919909100990999903999999990 -080309041000111209131000140209151500141406151500011616170500041618181804290991999991990991909910999999999990999190993900999999900990 -040808040400090808021000031112121200011113141500160513061700161613171700099999990091910929919999999991999310099099099990999999990999 -080409090904081003110200121211111300121205141504161617181500161601190600999909021999991900991999999999919990109091999019999309999909 -030809100200111112121300111412121304151405161304151417181304151919010600211199999199999999999909990999099990109991990009099030999999 -040608080300091011111200131414041200151414051200161617170200161601171804999990009290999909099999909099999999090099199099999391999910 -080109091004080809050600111213140400151513161600151513161604021717180300999009390099099991099919009199099999999999999999019999919129 -080404091000080209091000081111111100080504121200031314150100041313160600990999099991990991990999999909199999992901999903999099909009 -080309041000110512131000110214131004041515161600011515161600061718181800290991909999990990099919990910099090999999993999990099909999 -040808050903100811060912131304141512131316141512171718141902171701142021990990999929009900990990999999999909999909019010999399199911 -080109090909081011111111101012040205131415151604041717151618041717061603999999309999199909001999990900919099900909999999199909209999 -050308080600091002081100121313141504121617181504121919202004120119202000929990999090110991999999900919099900909199990909093999999999 -080109101100080809100600121309101404121313150200121617181904120503041900999099399099999901999991110999919999199091099919090209999999 -080901100600080911111200081311111200140402151500161717031504041717180500999099930999090999999900999099199901990919999999009920999199 -080804091000080402090300111112130400061414131500161414131700161601130500999199909290919909199999199909909099099999999910990390999999 -080809090900100811040600101212131300101402131300151414161700050104040300999999909099009990999999999911999091999999190909903002999999 -080105091000081111101004121111130400121214150400160217171800160617170300990999390999909009999919909999099990091909991191999992990999 -080903041004080911051200021313131400151617171400161617171400040618011400129009999099909919090999999190999199999999999190909039990999 -040108090909101111041213101111121214100615031605101702181604041717181604990990309900990999999099099901990999299919990911099999909990 -040608080109101108080909121313131314050402151614171819192020212103192020999990099390990990991009999099919901199919090099909999999299 -080910031112021306041112141515151504141605171718141919172020140119212020112991999999099010900999999909990009999999901999993909999009 -040108080808091010041106091010041213091415151313091617181818050219202003999990309090990999990099909919999909099199999009901999991192 -040108080809101111120409051111120209041313041409151313161404170618161403999900309990919909990999919990019999990999900909909099990992 -080801090909020810101111121310101106140415161616140517041818030419041818999999930991990911999991990190099099999900909099929099990909 -080109091011081209090613081214140204081514141617181819042017180504032020999009399900990999099091919999919099999009199909090099999929 -040608090404100308111112101308111114101508161616101502171718051920170118900090999909999992999099999919090099999909099199099193900199 -040106080800090909090200051011041200131311141200131311151600041715150300999990301199999990001909999909999990999990199999990992909999 -080906011000111104101000111112121300141412121300031502051300041515041300009990993999909999919990999999999909099919992990999199909909 -030804090900100811021200061313141200041313151204161717171700181818010500990992990991119999919909999999199990100999199999909030999999 -080805010900080810090900041111111200130614141200151604021204031616171200999999903999909990901999999009999999090909990991099919929199 -080808010600050910101004111112121300111112041400151516160200150317180400999999093090099099901990999999019999999099199991999910992199 -080803010900100811110904021211110600131214151600131717041804131717190500929999993991990019999911909090099999099909099990099999999009 -040501080800090909101000111212101000131202141504160314141500170406181500999990030999919909999999199091909991900999999299909909909099 -080808080500090210110100091213111400151313110400031606111704161618180400999099911999193991999919009199909999992099999900099900999999 -040809090400100809110300121313111100121313060200141414141500040105160400999090999990092990999999999999919999990900199991903909999009 -080808090500061011090904011213020400031414141400041515151500161617171700990099909990199091199939109999199299999990990999990909999999 -050103080900101011121300041411150200161611151704161818151700041818150600992190399199119900911999919909999999009909999999909990999999 -080901061000020909041000110512131004141515161600171515161804031919191800199091939999909919099990000190099999991999099999029909999999 -080910111100081010111100041213130100041213130600141202050300141215161704000999999999999999099901939999999099099999990199999102999110 -060809090300101112121200101002130500041415131604011515131700181818130400099299091990999999199999199909909091009099093999990990999999 -060809090900041010110100121010131300121402131300121515040400051516160300009999990990913999909909999919999919999919099909999199909929 -080809100300081109090400121102131300121114131304121516161704051819010600999299991999999909190991999999999911909991990090099030900999 -040808090600030808090400101111020400101112120500101312121400100115041400099099999992910999919999909999199099099999990190993099999099 -050108080808090910110404091213141414151216041717181802061717181819202003999990309999000991909091999091009999990919999909999199999192 -080808090110110412091313111414041313111402151616111717171616060403050404999990909309011999199999909991909991999991999999900200099999 -050408080104091010111111121210040613121214140213151614171713180403171704909990909300909999909190999999909999119099990999009299909990 -040108080909101108080912061313140212151313140412161617181912051620200403999990399990990991099909111999999099090909999900999090209999 -050108091011121308091411121508091411120608091616021718191916042021031904999000399991000990999999999909909999991999991909901099991290 -080809090909010810101006111205130214111504131316111718190316110418200416999999909903199990091909910909990909999999290009999909909909 -060808040905030808100909111213100414111102101514161717101514041717040114099009999999999920999090199991909919199999990909009993999099 -080808080603090410051112090413141412091516141412171718192002171818012121999090909929090999090999999900999900999909919001999931199999 -080804090104080810111112130210111114151617181414191605182020031604182006990999990309099099999011199190999909091909909999929999099099 -080401091011081213141411121204141411150502161718190320162121062020162121999009030999019909999990999099109091900919909999902999999999 -080909101004080909101004110312121304111415131300110516170100021819200600999909999990999099090999990920999199999000999903919919911109 -050608090900101008020900101008111200011314141200041314140300151304160400999990099999019999910999919991999319999999299999909009909909 -080804090600080809090300051010101000110412120400131414020400040115151500999099909999999990092999999099199099090991990990903119999999 -020808010900100808090900101111121300100414060400031515160500041515161600199991993999919999009999909990009909992909999900999999909999 -020808080300090905040400090904101100121210100400131414141400040115150600199291999999099999900990909199999909999199090999903090999999 -040808090900010810090900111112041300141402040500140415150600031616161600090999919993999999190990099991909910999009999999929090999999 -080903101004081111121000021311140600051515161700011515181804191919190400129909999999990919909919099019009990099999993999099009999909 -060108090400101008091100101012090500131212090400140215041600031515171600999990399099090999990999999199999090991999091109999999929009 -080909090904100611110300121311111404121505161700181819162004180119160200099900999999999900992990990909919909990099199199093991999119 -050108080400090908081000041111111100121314151600061317021600041317170300999990399099090901999999999901999091990991999910999999909929 -060808090900010808090900101011111200131011021404130515160400130315170400099999999993909999190990999099109999909091099919999909992909 -080803040500080804091000021112121300141512061300141616171304181818011300929999990099099919900911999999999009099919999910099039999999 -080805010400080809091000041109091204131414151200161717170200060318181800999999903099999990990990990099199090190999199991902990999999 -050408030900101011111200131311141500131316140200171717181804040106181800909290909199999909991999999990919999199001999919003099999999 -080909090900080210110100121204131300141206131300031515161600051504161604999999911990193991909999099199999999992909099909999099909990 -040808010400090808101100121212101300141414100400060215100500031615171700999990993099900909990999199991909999999199990190999909921999 -040809051004111112131000141115160100141715060300181815021904181815191900000909909999990999009999139909099909990099299919099919999999 -080809011004080811101000021213141504161205171500181806191500180320202004909909903999919999100911990190099999991990999909992909999990 -040805010904021011110900121311111400120406151500161717151500031718181800009909093991990911999991909990909099991999990999929909999999 -050608030900101108041200111108041200131414150200131416160400130116160400909290999190909999999990099909919099199991999190993999999909 -060809091004080811041000120213131000121413131004121516171700031805011700999900909999009990999919999919999919909901099099920939990999 -080910100600080905100400080911021204080913041400151616171800150117170300999099999999090999909991110999919000999199190999993092999999 -030808091004110808121000111313130100141515160500021515170400061819191904999002990999999990909999939199199999091991991910999909900990 -080104090904081011120900081314151500161606151500161617021804031919051800999909300999119999019900999090999999999991999910099109929999 -080109090904080810101000061112130200041415151600041715151600171705031800999909390999199900991990099909019099999099999999909991990929 -030504060800091011080800091213041400091513161604021513160100171513181800999992000999099990990999099909909999901999999113919909919999 -080901101000080911101000080512130400141412060300141412021500041604171700999999939990009999109999909009999999999990299919990911909099 -040108090900100808090900111213040200141513061600051517171600041517031600999990399990919909091909909909919090990909999999999999909929 -080609100300081109101004081112130200081114151500161117170400050117171804999299099999999099091999119991999010999999990099903990999900 -030802090900080810090900110410121300040510121400151516121700061504011700919992919999999909990909199999909909090999099009909039999999 -050208090400101008110100121008111100031313140600041313141500041604141500010099199999993919999999199290099999099999990999990999909009 -080409010400080909101100021212101100131312141100131315161100170306050400999999093090900999999919199199999999099990999909919000929999 -040809101000110909121004051314151504161302151500161317181900031317010600099999099990909009900999190991999919999991991900929930999999 -050808010900100808090900101004111200021314141200151604041200151703061200099999993999919991909990909109999909991090999099999999912909 -080309041000080809091000110506021000121313041400151516161600151517010400929999990999999909919909019099919999090909199999999030990999 -040508080900101112030900111112130900141412150900141604150200040106150400999090099999999909929999919909999911999109199991903999999009 -080406030900081010100900080205110900081212131400011512161700151504160400099999902999999991999909909910099990099999093109999990990999 -060108080400090909101100121213131400121213151500040204050400161616160300999990309099900991990990999999909999990199099099991909999929 -080809100600080809020400031109121200041313121204141515160100171815160500999099990999119991910929999999999991900919999913909999900909 -060108080904101112080904101314150900101614150200101714031805171714192004999900399990000091999991199999999909199099199999099921999910 -050809090900011010101000111213040200110314151504111616151700111618061704099999009993999999091900909999919921909999999900999099999090 -080409011004080809111000121209111000120213111400151617110400150305180600909909993999900990999990999999909911999109091999999009929909 -080803091000110612091004021313091004141513161600051515161600171819010400929991999999099019099999990199009199999909999919909030900999 -080501090900081011090904041212121200131415151500020604161600171818031600099999939990909000199999999910999199991900990999919999919299 -080401060300080909101000080909100400051111020400121212131300040414131300099999930299999999990909999919199091099090999999909999990099 -050809101004031109101000121313130400141502161600171717161600061818010400099909099999999920009999999199009111999999999909900930999999 -080909010500100909111104100212111100061304141500131304161500031717171500099990993099999099099991199019009990999990999099929909999999 -080509040400081011121300101014151300161617170200161617181804060103181800909999900099999909009999999900009999199999199199003999999299 -080404010900081011090904081213131400081202151500161217170500061217180300999999003999009099919999919999919001990919999990909919999929 -080803090900100204090900041112121300141512051300141616161300141701061304929991999991099991990999999019999990999109999990990309909990 -040104080500090910111200090913131200140413130600141502040300151516161600999090300999009999999991909009999999099910999099999192999999 -080809090904050806100300111204131400151502161600151517171800040117171800999909990990909990902900919099199911999999999090903999999999 -080806091000080803111204131415111104161602170500161618190100202018191904990099999099920090999909190091099919099999999113999999990990 -060401080800090909090800101111121300021111121300141504120500031515120400999990039999990919000999999199999999991999091909999999929909 -080808080300060409101100121202130400121204131400151516161400150516011400999999090299911909199991999999909999099109999190999939990999 -080809090900080810110200011212051304041415061300041615151700181818180300999999909999011999101939990900999090999099190999990992999999 -080808090900101111020904101211130300101414141400101516170500060104181804999999091999999090912999999909199999999199090009903009999990 -080909031004080909041000111112131000111414140200151617180600050118181904099209999999999990909999099900919999199919990199903090999900 -030809090904040810101100120802101300140804051300151516171800151506011800299909999099999909990991119090999099999990199001999939990999 -080809090400080810091100011210021300121210040300141516161600041504050600999099999999091999911939199999029919990009999999909000999999 -080106090900081010090900081010111200041313140500031502161600171518041604999999309999909999999909009091909990999910999999929109911990 -080808080400090910110100020412131300141516061304140517171800140317171800999099990999113910009999999190099099909009099999999999929999 -080309051000110409061200110209131400041509161400171816161400171818011404299091999099999990900919999919099090999199990190999939999990 -080309061000081109041000081209131000021414131000150414161600040517011600999099299999990991999910999199999199090990999019909039990999 -080909010400081009111200081006131200041013131200051004021200031414150400099999993099001999999990919999999099999901990999999919929109 -040108090900101008090900041112120500131312120400131414021500061403161700999990399999109999199900909999999909099901999991909991999219 -030808090200101105061200101111131200101413131200040415160100041717171700291199990199999999099999999990999009190991999003999909909999 -040108080800091010110400090912131300141506051300140216161700140416160300999990300991990999999990099019099909999199999191990992999999 -080809010400081009111104121009111100131415151604170215051800061919190300909999993099999099999901199019099999000199099990901999999929 -040809010400041010111200131014111200131314111200060215111200031615040500009999903099910909999990999919999999999199990199999900921999 -080809090300060209090400101011051200101314141400151316160400040116161700999299099990199991990999099990909909991999991099903990999909 -040108080900101011120900101004130900141515160200140515161600140603170400999990309999119999019999919009919999999099199999999910909299 -060308080400020909041000111212121300141415131300141416161700040116160500929990919091999910900999999199999990999909999090903990999999 -080808080900030404051000111111021000041204131300061212130100141414150400999099909099999920909999119999919099999909999903909909999009 -080109101100080809040600121213131304121214040500150216161700181818160300990099390099099991099999990990999990991999091190990999999929 -040508090400101008111100101008021200061314141204151614141200171818010300909090990999999999909990119091999909909099990999909932909999 -080808040900061010100900110212040900130512120900131415151600030401150400999999900999990909999911909199999999099091999090920390999999 -080109091004081109090600081213130200081415051604171818191604171818031600999009399090199990199999919909919909900900999991099929999999 -030808080804090910101104021204101100061314151100051617181800191901181800299909199999999019999919999910099099999100090109990399999999 -080109100600081112050300111113141404151602141404151718181804151919191900990099309990909999092990990199999111909009999999090999999999 -040801091000031109091000121313141504161313151504160217170600051817171900099999039999990920199999000199999999909109991999999990900909 -080803091004111112131004111112140200011512161604051718161600191919200600992900991999990099919990919999919311909099990099999009999909 -080910011100080910121100040910130400140210131304151616171800061616030500999999993990010999990909099999999019900190999990909990999299 -080109061000080809091100121212130400141502160300141517181800140504181804999099399099090991999999009199999119299911999919999999909090 -080803090900080610101100120510130200121414150400121414161700120104160400992999999199099909991999119901999090099999999900993090999999 -080804040500030802091000061112091000131412091000131312090100041512161600999992900099199999199900999999999909099099999913990909909999 -080910010400080411121204131111121200131402051500131416161700131403180600909999003099919009999909999919009919999919099999999910999299 -080808080400010909101100040909121300140206151300141616051304141616031300999999090093990999999909099910099099099190999999099999999299 -040808030400040802040900100611110900120511110900131313141400151501141400092999999099199909109990999099999099090991999919990399999999 -080109090500081009091100081213111104021415161600170315181904171715060400999999399091999999909910090919999100991990999990092900999999 -080105090904081010101000080611041200131311140200131311151600041717180300999909300990999999190909909099999991199999199991990919909929 -040808040600010909090900101011111100101012131300021414131300040414030500099999090093999991999990999999999900991999991999900990999299 -060804090900041002090300051112131300141112131300141115150400140401151600009999099290119991999901999999999990999919990999990390999909 -080604010400090910101100090910121200040502121200131415161600031417171600099990903099091999991999999909999991990919091199929999999909 -080801090600080810091100121010091100021305091400151617181400041603041404999099939999909909999919909199909199990100999909909909992990 -080309090600080810110200121212121304141516171304180519201304181819011300999099290999111999991999900999999000900990999001099939999999 -030804090904100808110600100502121300101415161300171718181300171701180400299909900999900999199999109909199091999019999099999399999909 -040808010600090808101000091111101200021311141500041304141600031305140400999990993091919999990999099199009199990999099099999990929099 -040804090300101112091300101412121300101516161304101716160200181801050600009999099299999990909990999909999999909099190091990300999999 -040501040800090910100800090910100800041111021200031113041200141406041200999990030999991999999990999999919091199990992099990099999909 -080808080300090205101000091111101004091213140100041513160400171515180600999299199999099991999999090991999001399999999090909909909009 -040804091000080809091000111111121000130402120400061414151600031414010500999990909999099999909999109091999099999911090990999930929999 -080909031004080911111000080212131000050612141400041512140100161712180400999909992999199991999901909099099999999099999013909909900909 -080809050300010810101100121310101100120414021100121516171704120406181800990999909293199990999909999990199099199900999099090009999999 -080906010400080909101000081111101004081212131400051215151604031718190200999999903090909999099999990999199990199990190999099991921119 -060108080800090909101000111112041300141112040200050412151500041612150300999990309999919909001999999099919990990099199999999999900929 -040808080800010910040500041110100200121306141500161617141500161617031500099999099993109990990909919909919009990999999991999929990999 -080801091000080811090400051212091300041202040600140415151500141416160300999099939099199901999999009991909090999919999099999092990999 -030808090900100808110400101202041300101212061300141415161300040501171300299999990999900999109999999991999099099199999109900309999909 -050803090400100811091200101311091400151311021600171318191904061301191904992990999099999990990999999099109011099999990109009399999990 -040803090900101112120900021313141404011313150500161617181804160619181800929990199991999919090919990999099390999000099999099099990999 -080809040500080810111104121010130200141515131600061515131600041701031600990999909099099099990909919090919999990999999919990399909929 -080808010600090909091000111111121304141515161704141402181800190305181804999999093099990999910999190991909999009910999199919099929990 -050809091000010811101000121212130400141402040400141415151600170615150300019999919993909999100999999901099999999919099990909999909929 -080909090300080210111104121310051104061410151600171710181600171719010400999299199999999001999909990919009019999990999910999030990999 -040809011000110309121000111109051004131409021000130415161600171718160600009999993999991992909991990999999901199090999909909099990909 -040801090900101112130900101414130600101414130400150216171700050416160300099999030999099999190909099999999999090199999109909999990929 -050809011000041109101000061212121200130214141400151503160400151517161604099999093990009999919999999019999109991999099299999999990090 -060308080800090410040200110410051200131314141200151614141200161604011200929990999199090909991999999000099999990999990091999039999999 -080309061000080411121200080211111204131415150500161717171700040118181800929099919099999990999911900199999109990199099999903099999999 -080801060900080810110900121213140904020415160500171704161800171703181800999999930999999990109991000100909990991909999990999999992999 -040308080800091010100200090911121300011414151604171418180500170418180600929990999199999999091990099999019391109990090999999999990909 -030404080800090910100600020910111200131314151500161617151500161601050400990992090999999999990919909190099999991909999109999300999999 -080808080600040910100100041111121200131111140200151616171700051604170300999099909990993990199909999999099091190909199999909999999029 -080909010500080809101100121212130400140215161600140406161600140317170400999999093099900999010999999999199111999099999909999900929999 -040108040500091010111100041010121100041302121400151515141400061616160300990990309090919999919909999909909091999919999999909199999929 -040208080800040909050300100909041100121314151100131316161700060116161700019999199299909909999999099019999900090999099099903999999999 -060808090900100808090900030502111100121204131100041414140100151616160400999990999991999929190999199909999999199001999993909909909909 -080809100600080811050400120213131300031415151600171815161604170119191904990099909999999911000999999210999919999999990199093009999990 -080802090500080310100400110612041300110412121400111515150100111616160400910099919992999999100990999999909999099091990993999099999909 -080809021004080811111204011313141500051313140300041617141800061917181800991109919199999090191939999999929090999009990999990999909099 -050801090900100811111200060811111300040814151300031602150400161617150400999990930990090999990909999999199091999919099999929199991909 -080808090904031010090900111010120100131402151504061617181504051919191900990909999999999929909999039199199119909011990919099099909999 -080109090300081009021104081012131400051516171704181819190400181819190600999999399290919099111991919090999909909000999990999999999909 -040308090904101010090904111112021300051114151300161617181300161919010600929900919999999099109999119999099900990099999901999030999999 -080803091004080805021100121313140600121313141500121616161704120118180400992109999199901909919999999999909999999091090990093090999999 -060808090900100808090100111212121300050204041300141404151300140304161600990990999990993909919999909010099999999199999900999990929099 -080809091000111111051000031202131000141515041000161515171700060104181704909999099999990929199991009919999099990990999909903909999090 -080801091000080811111000121311140500151304140400040204140600161616160300999099930999199901990999099090999999090199999090991999999929 -050804010900100811090900101211131300100411041300060211040400141414140300009999993999099999919900199999999090999999090109991999999929 -030408080800090910110400090902111204061314111200151516170500151501181800999992009099999999099991100999999091999019999000999309999999 -080801090904080810090904111210131400111515161704111518020600110519190300999909939999999090909990109990109099909991099919999199990929 -080809090600100309091100101212131400100415021404101515161400050117180400999990999099999992900999199999199999909091990990903119999109 -080109091000080809091000111205131400111215020400041216171700061204031700999099399999199900919990909999109990990901999999999099909929 -080809040600030410101000111104120500111113131400040213131400151616011400909999900099999920909999009999099999099199999999901139909999 -050404080300090910111200131402151500131414151500131616170400130117170600990990090299911909199901999999999990999910099999993999999909 -080901101000081111101000081211130600081414131500040204130500041616160300099999039999909991900999999919999999099199090909991999909929 -050809061004011109121300141414151504161602151500161617181804031920201800099009099093110999919999190991999999999919099199091099929999 -080803090900080804021000111112121200111113040600141413131500040116040500992999999199901990919999999991909919999190999990903090999099 -080909010500080909101104081213101000140213041500141617170600140317171804999999993099910091099909999919909199099099999099999990929900 -080809010500080810111100120204111100121314151600061704181604031717181800919999913099919991099909999919009990990100999999099999929999 -050808080400010910101100121310141104121315021600121315061704121315031800099099909993199990999909190990109999199990199999099991999929 -080808080900040305100900111112100900111304100900021314150100060416150400999999990999999902099990999999999990091990991193909199990109 -080903041000081112101000081302141500080406051500161617171500161617011504929999190999199999109900119999999999999000999991999939990990 -080801090500080809091000111213041400021516170600180316171904181816171904999099939999090999190911909109999900091999999990092999999990 -080803090600041010111200131410150200131416171704131418191900131401051904992999091090991999991999119991099909909910990999999399999900 -080808010904100411120900101111050900131402151500160617151500180417170300999909903999901990909909999909919091990019999999909999909929 -080808080400090210110500091213130100091406151500031617171504161617170400999090911999190991919999939919099990999190992999099990999999 -040808010400090410101100090910101100120613021100121214141100051516030400999990903099091999999990999999999900199991999999990190900299 -040308090600100404090900101112020400101113131400101104131400050115151400921990999099909990910999199991999919999999990909903909999909 -080904101100081212031300081212140200081516140600171816161904170501191904909199092199999999991999919990909001999999990099090309999990 -080809090600100809090100101112121304100214151600100503151700180404151700909099999990993999199991900919909911999099099929909999909099 -080809040600031011121200040213121400151313051400161616161400040117171400990992109099999991099999099019999099999910999990903099999999 -080808080500030909101104121213140400121215151604060215150100171718181800999999909099990020909999099990909999009199990993991919991999 -080909030400080902101000051111101000121113130600041413131500161417010400992999999090109999199999999091999099999999099990909030900999 -080304040400091002111100041212111300051212131300141414151500060116161600299991900091199999199909099999999099999190999909903099999999 -080102090300080810111104121210130600121210141500161610051704161618180400991999311299999091999991009999099999099999099990099090990999 -080808020904031010101100120413141400121213140100151613171800040513170600991102990199999999991990999999999900399090990990909990990999 -080909041004080309111200081313130200141415150600161615150500160117181904999009999099211999991999919091909999999099999199993090999000 -080804010904101010100900111213130900140315020900161515170400161606180500909909093999991990999909919099199929990991999910999909999009 -080905031000081111101000121111020400121213131300040414151600171717010600909299099990999999919999109901999999990919999010999030999999 -080801090400060810090400111212091300141212091304021516171700051518031700999099939999999900190919009199999999901999991109999199909299 -030808080400090910111100090910111100040210121304061415150100161617180500999992909099999999999999999919909009009190990993991919991109 -080809101000051109101000041109041200131114151500060216151500031716010400999999099990999999990909999990009011990199999199999930921999 -080309091000080511111004080211111000081206130400141516171800140119181804929999919999999090999991909919999199091900991009993099999090 -080809090500080809090100041004111100121013021100061004140300151514141600909099999999993990919999999090999090199991990099990992999919 -050808010400060808090900021010101100121313141500121313141600120304041700099999993090909999910919999190009999999999099999999090929909 -040104080800091011120800041311120600141311021500141311051500041304031500990990399990100999990900999999999091199990999999909099999929 -080808080600040909091000040411101000121311041400151511141400050102160300999990909099999999009990999099999910990199999999903112999199 -040802090900101011120900101013120300061414120100151414161604150517041600001999919999999999192999199009999999399990990909099099990099 -080105090600081011090900081012130400081012141500041016021500041716160300999999309099009999990991199999199099999991990910999999900929 -040108080400091010111100121010111300141415041300140205031300061616160400999090309990909999999919909190999990999199999099901920999999 -080109050400080809101004111213101000111413130200111504161700111806160300990999399099009001999991999999999099199099199091999999900929 -030604080800091011080804121302141400121315141400121316171700041301051700990992099991199099109999999991999991999991990019999309909999 -080801091000080811091004051213091400150216091400170416181404190316180600999099939999919090999990909090999111991090999999019990929999 -060808090300100811111204101311111200041404151200161717150200050117151800090999990299999099999909999909099909990099190999903991999119 -080804090900060810100400011110101200041313140200151313141600150403140500999999900990090999999931919909919099199999990990990990999299 -060809090904030810101100120810101100021314151504161617150100161604180500099909909992999999999919999190909199909109999113999909999009 -080808090900100305090900111212120400111314141504020416141700181616010600990999999992909919909999999999009909901099099910919930919999 -060108080904101108080900021212050900131414151500160414150400170318181800999000399990199999199919099190909999991099999990919099929999 -080809090400010809091000111213131000110614021500110416041500110504031500999099999993099991999901909999199090199900990999999099909929 -080109100500081111121204081111121200081304141404150216171400150616180300990099309991999099999999099990099199909199990119990919999929 -060808080400030902101100051204131404121215151400161617171400161601171800099999119092910990919909090999199999999991999099999390999909 -040809101000040909110400011212121200131314060200151515161600040503161600090999099990990990909939999900919999099909199999900999999299 -030808080400090910020400090911041200131311121200141414141500050401060400299099991999019999190999909999999999990910099999900300999999 -080109101000080809041100041209021104051309141100151617141100180617170300990999399999199990909909910909199091999009990999909992909999 -020808080300090906101000090911121304011415051600171717171800191919041804199291999999999999009999000910009309999099099999999009999990 -040808080804020910111100121313140100151313161700180616161700031919051704099909990991199919109999139199099999091999999999920099999900 -080209010400080409101000081109101200030509131200041415151200061404151200119999993099099999990990199209099999999990990099999099909999 -060108090909101008040211101004031111121314041515161617181515041605191919991990399199190199999990929009909900990999999009909009999999 -080909010510080909111110121314111110151614041710040414021718031920201706999999993099909000999909199009009999990099909919999919021999 -080909091011080804051211031302141411131315141411161717181920161717040106999009009999990999990929199991999919990999109900099903099999 -080808030909021011111111121004040513141516161616171818191904040118191906992991999909099919999999990100090999991090901909903999999990 -080804091003051111121010131311140415131316141718041919141702041919011706990999090929999909909199090999991900190909919999199939909990 -040408090909101011121301101006131314151516161614150305021714041819201714900990909999000399999999090999919909999991999909992919901190 -080801090905080810111111121213131313121204061414151602171819202020200403999999930909109991999990999999909999090109999111109990299999 -050108080309101008110409101002121212041314151504131304151516061704181818999290399999990999109091999009099900999999909909900909090999 -080808010909020410100909111212100613111212141516170418141419030520212121999991013999990919990099099999990999001909990999029099090999 -080808010400091010101000050611121300031402121500161604121500171717170400999999903090999900991999119991999919092109999999999909999909 -080809061000080803041000040211121000131312120400141515151500141405010400919099929999999991909901909901999999999991099999990030999999 -060808030904100808111104121314021500161718181800171719192004050119192000999200999199999009091990919009199919990999999090003999999999 -080809091000051109091000011111121000131402151504041616041500031616170600909099099990999999999939199999199001900919999909999999929009 -080808010600091011121300141005151304141015151300161718191304032002191904999990903099009909019999900999999999999991991919021199991990 -040805090600101011121200101011121300041411151300011414161704031818180200090999090099999999999990999999099009099990993911099991929919 -040809090300100808020600111213131400051213131404011215161400041718181400999290919999919909910909999999999099909991993110990999900999 -080808090300060210111104121213111100121214151604040515151700181818011700991299199999199009199999099991999901009999099999900039999999 -080409010400081009111200131415161604131515161600130517170200130317170600999999093090001990991909090999999999999999190991999990992999 -080809100300110206121200131404121204151515160500011718161604171719191900911299190991099919999910990919999999999199093099099009999999 -060408010900101112120900131312120500021314141400151616171700031616040400909990903990190991990999999199999909991990991999999900929999 -080109091004081109090500081112131400151112161604170218161604170619200300999009399090099999009999909999909199901999991199090199999129 -040108080400091010101004111212130500061212140200151515161600171718160300999090390990999000919999909099199999199909199999999099990929 -040808090900060808100100111112121204111113140200150513161600170413180300099999990990913999199990990999919909190091999999909919909929 -080809101004080805101000111111031200011313131400061516041704181819190200900909999999099990999999929909919399999109199909001991991919 -050809090300100809091104101012121304141516161704181516160200061501192000909990999290999099991999990099019999900999190099909311999919 -080809011000040809091000111105121000061313131300141414021504031617180400909999993999990909919999099009199999999999199991090910921199 -060808020400040808090500040310091100121010131400121204130100151515130400091099991990999992990999999099109990099999999903909999999009 -030504010804090910080800090902111200131415151500131416171700130418170600999902003999099999991991119009909999999909099999999099990909 -060408080400091008110100101002121200131414121200031414151604171717150500999090091999993909109991999190999999992990999990099090999999 -060808010904101108090900101112130500101112141500100216040400031717171700099909993999119999000999999999099099099190099199999199929999 -030802090900050808090900041010111100121310140100151516171704061819171704291999919990999999919999999099199090399000999099099099900990 -050601080400091010111200091013131200091402130400091516161600041717170300999090030990900999999991999991909909999019999999990992909999 -040808010900100208110900101212131300101212141304031504160500171717180600099999193991910999009999999999099999902000099999990909999909 -030604080500091011121304091010141300091515161300021515161600171701041800999092000999909099909999099999099990091999999999911390999909 -050808091000011108021000121306141000121304141000151316160300040416160400091999191993991990099999909999999090999990290999900999999909 -060804010900041011090904121211131300121211131300051415021600031717181600099999003990019090999999199999999999999991090009999919929199 -080801090400080809091000111213101004021213141504161713180600031913180500999099939999999909199911090199999990001999091909991999929909 -080909090300080810101104121310101405151617021800151519192004060119192004999999099299999090991909990090919111199999999099003999999900 -080808090900020610110100120510131300140410151500141410151500030404160400999991910999013919909990999199909909999999999999920909999009 -030802090900080810090900051110121204131310121200141414140100041504160600919992919999999999909900990999999991990991999993990909909009 -050308090900101108090400120208130400140415131600171515131600170106131600999990299099199909909911999199909099991999991900993999999099 -080905010600080910101004081112130400041212141500161617021800161617170300999999903099099090019909909999199999190099199911999999999929 -080609090900081005110300121212021300141515131300041515160100041716160400999999091299909900919999919090999990990991999993990999909909 -080109040400080909101100121212051300141515151604171706021800171703181800999999390090909991990999909019909999900901099991999999999299 -080903041000110904121000021313141500061313041500161717171500161601051500129991990999999919000919099099999999099919990990999309999999 -030405080600090210110100091210111100091210130400141410131500141416170400999092000999193991999919199999099999999999099990999909990009 -080306090900101102121204101314041200101515151504161718191900160501191900299991909091109099199991099919999999909919990009990399999999 -080801090904080810090400111110121300111110140400021510141400061616030500999909939999009999990999009999009919991999991999901990999299 -080808080300040206090900101010101100121213141400041513131400041617010500999299199990099991990999909991999999999090990099999030900999 -080804030900080802090900051004111100121314040600151515161600171701161600999299909999119991909999999010999090999109099909909399999999 -040806090900101010100100111112121300140212121300140404151300140304160500099999000999993999199990909999999119999090999909999900929099 -080803091004060804111000121314140200121514140500121617171800120117191804992909991999091900991909919999999099099019999199993999999000 -080409090400081009090100081011120600081013130400140315021600141715150500909099999990093999919999109991999999990991099910992999991909 -060308080400090909090200100411121200100413130500101413131500141401161700999990209099991999991990199991999999999099090099999300999909 -080809010400020809091000110612130400110412141400110315141400161616050400919999993091990919009909909999099099999999992909999000999999 -080809010400080809091004111213131000111213020500111214151600040317061800999999993099990090919900999999999991099991999910909190992909 -080808060409101011111209101011111209131302051209141516161718040103161904990990999099990999999999999900999910901919991999003990099209 -040809040105041011111212131311111212131414141516061717031802191919192020009999900900990990999990999999900999090999909999199021999919 -030809101100121212020600011313041400151313141400151616040500041717171700211099991099919999199939099999999090999090999999990990909999 -080809090910080811110310120213131310121404041510121416171806120119052004909999999999992990199911999999909999909900991000093090999090 -080409051004111112121204111113141515161613140215171613141803170613011920090900909099999099099990919909919999999999190909999931290991 -080808080104091002111213090514141513090414141617090318161617191906202117999999011300991090190999999999909909999919999299909990999000 -080809090909080810111201130214061515131617041515181619192005041603202004909999999099911309190991909910999990990999909090909999992990 -050809090104100409091112131414141412151515161616031717181919062021021919909990099309990909991999990099919999999901992990990119909199 -060508040309101108020909121108131404121215131617181819132017181804130117909920990999991909919990019999910900909999199009999993990999 -040108091010111208130406141408150516141408171716041802170316181819191904990090390900190909909999909999099999909019990999999192099999 -080504040300080809101100121202131404121215061400161617171400161601171400999999000299099909901999110991999910999199999199999399999999 -060809090300100811120400131402151500131416151504131417171704131401180500999290919990900990199909199999999909909901999999099309999909 -040108080400090909101000041112101000130214040500151514061600150314161600999990309099909999199901999910009199991999999909999999929099 -050804010900101112130900101114141500101114161600100406160200040317171700099999003990000999919999919999919999999099199909909991992999 -030809100200111212121204111113131404151513131404161617180100160619200500211199999199999099991990990999999909109091999903999099990009 -080909090904080602100300081112120400081314051500161717151504160117181900999909911999992990199991999919909000999199990999093990999009 -080808030900100411050900121311040900121414150200121416040400120116160600999290999999909900999909099990919991199999090009993999999909 -080109100600081112121204131111141404131516141400130502171700040318171700990099309990099009909999990919999919999919990919909999992199 -040106040800090909090800101004051100101004121200130214151500131303151500999990300999999919990990909999909909991990991119999999999299 -080808090400101009090400031002110400121213141500121216161600050601171700990099999999990929909991199999109900099991999999900390999999 -080909101000081111101004011111120500060402131400151617181804031919191800990999909990999099999939109999199901090919091199020999999999 -040809090909101004111111031012130405141415161706021819191919181801202020009999099999999999000029099919099990001909999199919309999999 -080403090909080806101102041213141515161616161515171705181801191919181804992999099919990090009199099009999999999090199909399999999090 -080909101111060904101211041314101201151614101205170314041818191902041818090990999099909990999999913009999091909990092999919199991909 -060809101004010809101011121309051415120402161415121717181915121703042015010999999903999099990900990901099991999991099919999290999909 -080803090506080810101011020412130414151616131717181616131920181801130420929099990909999919099099909100990199999999099900090390999999 -080409101004080311121314081516121717081818121917201821211901050221211906909999900909999092090999999910909999090999990991391999901990 -080109041000080809041100121209131100121214021100060315151100000000000000999099399099199999909990009991999991990991999299999999999999 -030808080000090902040000041010060000111010120000040112120000000000000000299999919999909990199909999999099099990919999399999999999999 -080401090000080604090000100211090000121213130000031213130000000000000000093999999999909900999901199919099999992999999999999999999999 -080609030000080209040000081010110000081010120000010412120000000000000000092999999999199991909999099999999199993009999999999999999999 -080808080600091011110100090411110400031213131300121202140400000000000000999099990990093990999999909999199999992910999190999999999999 -080801090900080810110400121213131300061202140400151515150300000000000000999999930999190991009999999099999910099919999992999999999999 -080104090900081011090900080411120600130211140400130311141400000000000000990999399990109999909990909999999110099999992999999999999999 -050102080910111212031304041212141515161614141515171717041818191919190618991100319100992999999909909909999909990990099999990999999909 -080809090910110804121210131302121210041314151603171718190605171701202021999990999099909009999999199991919901920991999010999309099990 -080309091000081111050200081212041300081206141500161616161700040401171700929199999190990999991999099999919090990990199991900399999999 -040308080400090904081000090911021200131313121200011414050600041516161600929990999099900999919991199919999990999199993999990900900999 -080804091000080811091000041202131400151516061400151516171400050316010400999999909999999900000990119991999909999990999991909930992999 -080809010600101112121300101412121300150216031304151718191304150419190500909999903090190991999999999919999992909119990190090999999909 -030809020000041009110000121212110000131306110000041301110000000000000000211999991990999990999999099909999990999999990939999999999999 -080909060000040909010000101011120000021313120000041303120000000000000000090990999999939991999990099199999199990999999299999999999999 -080809090500031009040400111111121200021304121200141414141500040406011500999099099999999920000999999919999199991909099990900039999999 -040801090900100811090900101111020300101212121200040604130400000000000000999990999990099999912999999991099999990000999990999999999999 -030808080800091002110100120413131400121513131400121515060400000000000000999992911991193900099999909999999909999990099999999999999999 -010404080000091010080000111010080000111106030000040212120000000000000000990993099990909919999999999990999999990192999199999999999999 -080209100000081112030000081112120000041113130000061101040000000000000000911999192990999999999999999990999009999990990399999999999999 -080803090904080210111200061314121200151616161600171818181800170405010400929909990991909991099990999019909099990991999999990030999999 -080601090900080410090900081112120400021314121500161314170500041303171700099999939990909999190911999199999190090990099999909999992999 -030608090900100504090900101112131400100212151500041612150100041616171700900992909999999990909919909919909999999199990993999019909199 -080409100400081112100100080204101300141415151300141405161600061703161600909099909991113999099919909919099999999900999999901999992999 -080809100300080809110600121314150200121616161704181819171704181801200500999299991999009999910900919990919999909909999019099309999909 -080809091000080811061000011211131000141511131604170211040400051818180300909099999999099990909939099919999199001990091999901999999929 -050806091000080802110300121314151600121304151600121718151600041717011604999190901299919909199999199999999099999009999000999939909990 -040401040800090910101000090911121200021311121400051304041500031306151500999990030099199999099999099199909199999909090990999999929099 -060808080800010910040300041110121200131302120400131314151600171705161600099999110993999990992999999001999991999990099900990099999999 -040108060900101108120900130408140900131308140500031502160400151517171700990990399999100900999999909999909909999919999100929099999999 -080910020400030411121200131311121200131314061500160414141700161601051700111092991999999990999990199991909999090099999990999309999999 -080808090300101111121200131102140500151515151604171819161604060120202004999290991999999909919909109091999999901999991099003009999990 -050108080804091011121200091314151600171318021600061318181600041304031600999900309999109990199909199999199090190999999999999999900929 -080909030500040909041000060211101000041212121200131415151500130116171700092990999099999991909901999991909999990919990199993099999099 -080309040600101011121200100213121400151515151400161616161704050118180400290991909099999999099919099910999999091999999990003090999999 -040808030400040809090900100211041200101013131200141414141200050115061200092999999099099901999999099910999909091999999999903099999099 -050108090400101008111100101012111300140404061300151616031300021616171700990090399999099999999990009100099999991999999929919999919099 -040108090600101010031100121213131100121213021100141516171704180416160500990090309999992909199999999999999991199000990999009999909909 -080103090904080810090900111202130400111406151600111717171804191905181800992909399999919919199911099999009090099099099999090999999099 -080309090400081009091100081012130600021212140500151616161604151501170400299099999999990999900999099109099999091909999999091309999909 -030809100500111111021200061304141200151316161700151316181804151304011800211099991999999990919909999990109999199999199099099939900999 -080909100300080609110400121314151600011414021600051718181604041718181600999299991990900909919909909909199399999191990199099999909999 -030809061000080811121000051302141500161717151504181717191904202001191904290999909999909991900991199099199999900991990919009399999990 -080802050904080310100900110410120900131415120100160615121700181818180400910909919992999999999909909091999001390999990990999900999999 -050808040400090310101100121210101300060214141300041514161300171515011300990990909092990919999999999910999099999199999910909139909999 -030804090904101112121304101112121400101515151600021717181900061717010500909902099099999099990999999900909999991990091910909930999999 -080803090900081010090904021112121200131415150500161615151700160104040600999999929999999001909919999190999119099999999190993000999999 -080809101104080809031204131309140200151614140400011717180600051717181800999109992199999009991999019099909019999199993900999999909999 -080309050400081011120200081006131300041014131300151515151600041717011600929999910090911999991999099999999000999991099999990939909999 -050108090904101111020900101212130600101212131300101415040300161617180400991900311990999990919999909999999999999009299909990099999009 -080808090400101011120100101006131400020415151400161715181804031705181800990099990999113999909999009109099999991999991909099099929999 -080804091004080811021200051314150300161314171700161318171704160119190600909109991199099909012999999999199909999999990119093900999999 -080808080400010910111100121210100200121213041400041513161600051713030600999999900093199990999999919999919900990099199999990920909999 -030809101004061112021000041314151500011316161504171716161800171719190500219909910990019999919901199990999399909099099999999090999999 -080809090900080810100100110610120400021314151604041714180500031714181800909999999999193919909909909199099190000190099999999999929999 -080808010500090910111200030910131404150216161704151516161804191919190600999999903099110999909999900219009999909199099999099900999999 -040809010600100809091100101212121300100214141300150403141300160405171300099999993099090999910999999919999019990999990929909999909009 -040108080500090908081000090911111004021212131004061403151604000000000000999090399999999999099990990199099199909020090990099999999999 -080803050900080806090900021011121300041011141400151016171704180401171700929999990999099919990919909099099909999990990109009399909999 -080910031100121206051300121414021300151416170400151816191904150116191904009290909199999999909999119099999099099190999099093999999090 -080809090400080809090100041011121200130214120600131516161604130317170500909099999999993999109901999919909109999909991999092099999909 -020806010900101112120900130414121500131617171500030517171500181818041504199991103999199919990990009999099909992099999999999009999990 -080406090904101011090300101011041200131311141200011311141500051617180200099900909999909999992999099909999999999999193009991991901119 -080801090900080810111100121010111100021314141404131305151600061703041804999999930999009999999919999190999999901999099900901990992900 -060809101004080809101004111112130100111114141500160504021500031718191500099909999999009099909990139991999999090901990999999919921199 -060808080800010909100500111209130400111415161604110217171604181818180300099999099993990991909909009919099919909919999199091999999929 -030608010904101108120904131415150900160215171700161818171700041818190500999902093999099019019919909919099019999999999999999900909099 -080808080500010910020400090910111100121210131400121203151600040406151700999099191993910999909999999909099999099929099999900990999009 -040808010900040810110900121314140900021514141600151517181604030617051600099999903999909909919911909199999199099900999999029909990999 -060809091000031109091000121314021004151614171700151614170100050414180400009999999992999991909901110099919999999999999093900909999909 -080803091000080205091000111213141000111215161600041217161600061204010400929999999991990901099999009990999999999909990119999030909999 -040308091000110412120200111305141400111315141400161617171700161606010400921190999199990990991999999990999000999991999099999030999999 -080909021004050911041000011213041000141415150300141415151600171717061600091100999999909991099930099909929909999999999990990909999999 -040808090900100808090100021111121304141105121300151515151600170306181904999990999991913919009999900199999909991999099999919990929000 -080909090300100211121204101313121200101313140600151617181904051717011904099290199999119099999999999999199990099991990900000939999990 -040808080800040910111100120913021400010913151400050913161704181818060300099999990999119909919909019999099399999990199999009002999999 -080808010900061010110900041010040900121213130200121413131500050403161500999990903999910999909909999991999909199099199999900999999219 -080803090900081010090400021010111200131314110500061516171704181901171704929999999999909919990999909190909990999100999199000399909990 -040808010500090810101100121212131300140204131300140415151600140315061700999990993090090999919999199919999109999099099990999990929909 -040608090400101011111100101002050300121213141500121216141500040116140400990090009999999999192990099991999919099999999099903999999009 -050808080804091010110100121013111400040215111604031706181600191718181600099909990990913909199999909091909919909199999900929999919999 -040801090900100811110400100811121204101313131200100214150600031617180500099999930999990999909990990991999999999199090109999109921909 -050809101003040809091112040813141512160817170212181817171919180406011919099929999190999999901999099090919909100999999090990039999999 -080801090510081111111110121212131310141415161304141417020603041817192021999099930990999099109999999091999991909991999090990919209911 -080109101005081112131313080414140304080214141516171818181816040619190416990999300901099999999099999909929119190999990999000099999990 -080803040909080410111212131414141212151516021704151516181920050116061919999999920099009909199999999099109919099991009919903999099099 -040603080808091004110402121313141516120513171516121818191501121818191504992990099919909000909199099999099099919990999999399999909000 -080903101010041112131302011414131304151514161616151718191920040506191920092990099919009199999039199909999990999900999099900999999090 -040801060909101011110909101011121304141414021516040417180516191919181803099999030999991999991090919990109999909901099099909099999992 -080809050410080311111210020611111210131415041216011718191616202020202121990999209099999919999909900190999119999910993109990990999909 -080409091003081109091012081314141004081516170205181804170419180106171919999999099920999199099990990909919911100109099999993999999009 -080809101105120909041101120213131114121513061116121517181819031504181804990009099990990399999991910919090999999999009909999099029999 -040809031010080809041010111209131304111402131304111515161706110118181905992990999999990990990099999901999110909990991990093090999990 -080809090909081004051106121013131104120413131402121516170318120104041818909999999990099009909999909909990999119919910109993002999999 -080910111204081305111214081313151216171702151218171719190420040119190306900999099909999999099099999090990919009910909990903999099929 -080809041004080811121002131305141015061616141015171616181915042020200103909999900909909199009199999909999090099999190909909903299999 -040105080904101108081212131313141412151506141404151502041604171718181803999000309990090991909999999919990909999990099199009199999992 -080809100311060909100411121313101411151313100502161717171718040419012018990929099999999909990999009099991999990990010999909031990991 -060408010909101108121204131408121204151515021616031717181816051917181804909990993009099900999909090999199991092909999909990999009999 -040408030900101008090900051108020400061111121200131313121200040100140400909290999999999990919909909990199099999099999919903900999099 -080809010600080809091000111213021404111505160400111504171700111503171700999999993099190901990991190999109009999991999909999999999299 -040808010400090808101100090912130600020412131300141516171700031505171700099999993099910991009999909109999999991999091099999099929999 -080309090400080409100600110212121200041313131300141415040500140116161600299099999999909910900911999991999999990100099999993099999999 -080804090300081011090904121013140200151516161604151517180600050119191900999299909999999009091999119001999919909909999900903909999999 -080808080300050204090900041011120900131414141500130416151500171717010600999299199990909991999901199999109099999091999909999030999999 -080808090300041004090600111204090200131314141500130514141600171701161600999299099999090900999999919000919909199999999090909399999999 -080909011004020909101000111213141404111215141404111216160600031217180500199901993999919919009909990990999999909909099999929999990009 -080109090900081010110500120213111400151616111400171616181400030406041404999999309990910999999911109109999999991999999909920009999990 -060108080900101111121300101414141404101515040200100415161700051818180300999090399090900999199999990909019999999099199991909919999929 -080809011000080809091000111111051204021313141504161313140400171803140600999999993999190991990999090109909990901999099999919999912909 -080808010400040909101000111111111000121204061300121214021300051516170300999999903099909909909999999900019999999999999911990199909129 -040808010400040808090900101010101100050612121300141515120400140315020400099999993099999909010999999009109999999999090999992919999109 -080801040900080810060900051112130900141102130900141115041600031715150400999099939999990900199990109999999091999919099990999999921909 -080809091000010809091004041111020600121111131304141515161700181519050300919999999993990090910909999999199099900991999991909992900099 -080804060400080809091000051109090100121213141500040216141500031716141500999999900099990900999990939991999910099199990199999999921999 -080801090900080810091100041213061100141402151100160417151804161605150300999999939099009909199991099919999911990909999091099992990999 -080910030500111210131300141206021300141215150400141215160400140104171700009990992099999909999999919990199999099990990190993009999999 -080805010600090810111204091313131300141402151600041717181600031717041600999999903090001099991999999909919991199910990999999909929999 -040403080500090904101100090910101200041306021200011314141500041314141500992990091099990999099990999999199090099991993999999999901909 -080809100111121212121311141415050411141416170211180416041919180416060319900999990399990199000990999999999990010990199099999999909092 -080808090110041112091010131414091515130216091517130516040618130316192004990999999390011999190999999919999109909099909909999990029009 -060404080904101011120900101013140500031515151500160217171700161601181800999000000999999999009999999900009999992191999999991390999999 -080806010500040809101100121212131300041402131504161417171800031417171800909999993090110991909999999991999019009999091990929999999999 -030808050904100208110904101213140900101516171704181819190100181819200600290909999999190091909991999991099001909991999093999909999909 -080910111200080602110300051314111504041616161500171718191504171818011500009199909299019999199909990901999999990991999000099939999999 -080809031000080809061000111209021000041309141504041614141500161605011500999299999999909990999900119099999901009099990999999039999999 -040103080500091004111200091013140200151013141400151013161600150617160400992990391090901999991991119999999099999999999999999090990099 -050808090904060808100100031112131400150216161400171816191904202020191904099909990990913991009999909210999999991190991999009999999990 -040801090900100808090900101104121300100405120200141415151500061403160400099999939990919990901990999909919990990999199999909910999299 -050106080800090910110804121313041400040215161400171715151400171718031400999990309999909019000919999019999919099990999099999199999299 -080801091000080811091004121111131000021404131500041606131500031718130500999999939999100019999999099199909190990199999999991099929009 -060809090904101112120500100212120100101314151600101317181804031319191804099909009099199991999919939900099999099909099999029099999990 -060808090900101002090900101011041200051311040300041411151500041414010400999990909999919999191999099009929900999999990919999030909999 -080109091011081209090513141502160417141818160617141803161917202104161917999009399901090919909011990991999999909999999299909999900990 -040808080909101111110909120305131415121617171818120217171919120406200119999990990990999999909029009999900919999199901991999903909099 -040808030900100808110900120205131300141504131300141617170100140617181804999990992999919901090999999019999990999190990193990909999990 -080909031004020609111004121311111004121415161700181819201705181801211700192901999999999010999999900909099990991009999109099309999909 -080901101000080911121200130914121200130906151500130516021504031718040400999999939090919999099900999999199909999991999019099190921099 -030808080800090210111104051213110600141415161600141417041604181801191900299999919990199001999999009910999910999910999999009390999999 -080109060400081009041100081209111100041209020500131314150300131316171700990999399090109999999990099999999991090901999999999012990999 -040108050900101112130900101114150904101116170904101802170300061819191900990990309999100999199909090991099999909919990999909192999999 -080801040600040909090900101112120500021312121400131315161400031715041400999990030099999991990910999199999199099990999099991909929999 -040809100500111104120100031313121200141313151504161602151500171717170600000099900999993990999999099299199999901999999119999099999909 -080808080500090910110100090911110400020612121204130414151600131303171600999099990999113999999999999199009909901990999009999909992909 -040809050110080802111010060312131404151515151416171718181416041918180416019999910399991992110999190099999999009090999999999999900990 -080809101104121213141505011216020600171717181804191920202104191920200300990009009099919099110931999909199999909009199999099992999999 -080808090900101011120400031302141400151515141404161717171700060418010500990999909999900921099991999991999991900999199999909030990999 -080809100104080810101111051204131111141204151617141218180402061203191919900999999309990990999909099999001099099900019999999999109299 -060809091004011109091203131314041215131614021215171819191215171720210515009009999993199290109999999999999091109099990099999999990009 -040803040909100811120905020411061313141411151313141617171717041801191919029999990991900919999009099199999919099910990999990309909999 -080808080109060204100909111104121213111104141513161703181913160418180513999999101390991991990999090999099990900199099290999999990990 -030809061010110812131014110804041514050216151514171716181914171716012004909992900999909999990910999919099999990190999910099930991990 -080910111105121314040415131316031715021818171715061818191901202020191904000900999990009099999991299199999199900990999919399999999090 -060501080909101010101109121213021415121204161715181919160415180419160315999090030999990991990091199999109909999099090999999999990929 -080401040409081010101009111213140509041516161702151516161717061819191903099999930090999109009990909009091999919999999999999909200999 -030808040910110408021210111313141515111304041515041617171717181818050106299009999090911999991999009990999099999990190099999003099999 -040809011010111209091313141516061313041516170402181516051919180416031919099999093090091900099999099099991990099999910990999999909929 -080904101004110912120613050912021313010914150416171714041803171719191919009900990099999909909999919999191391999199029109999990990999 -080809090104080810101112131310100514130415150216171717171803060419202020999999990309090199999190990990991909919990199999909091290999 -050108080808091011041212131411111512161717021518031717061518191920210418999990309099109900999909999999190191092999999999990009999009 -080909090906041010031112131014140212130514141512131617171819202017170104099900992199999999091999991999999909019999190990090993090999 -030808090909040808101111121202101113121204140513011516171813061920211813299999990990999999199991009999999909099190993009990099909000 -030808080409100405020909101111121213141111121213151604171813041906011818299909991999999990010909990999999090990999190901900939990999 -080808080309101011120409101005120209131314121504131316161718061916010418999920999999909999090999991099919991199919009099099930900999 -080910040511061210130414121203151516171717171501181919202121181919022121099900090909909999900099990902999999939991199909999919909919 -060808090110110808091210111113091410051502161710041819192021031819190421999990999399909099991990099999019011199109090999099999929990 -080109041010081111111112081313141404081313051415021617181804061604031804990999309009999991909019999999999990901999901119909929990990 -080809101104080812131301041414131315061416160215171816031915041805202020900009999099909309099999990990919999990999190099909021999999 -060808090110110808121310111104140510150216161610151717181819150317040404090999990399991090010999999999199119999900909999999990029099 -060408040309101008110412101008131414151516131302151516160404170105181818990920099919990999909199999090991911919999009999903909999099 -080808090909060410110204121213111403121215151414160515151704180401171719999990900999991090091999199991992909990999999099909309009990 -080809090510080809031110121202131410121215131616011718041619062021212104999999992099999990190999909991990990099010993999091199001999 -040308020910110808041210130514141215161718141215040619191215202019190115991190299190999909909090999090999909090099999990099993990999 -080808080910111212041010110613131301111415151516111414170418031902200405999090999099990999090990993999199999909991009999991119029109 -040108091006111208131305111408131515111408021515110404160417181818161903999000390999199990999099099999999091099091909999009099999912 -040809090909011010111204131010041415131305141415020416161715181818031906009999099903900999990999090919999909991090099999919990999290 -040208090906041004090901111012121313111012041413110315161417110518161404011909199990909399990909909999909999099299909900999099090999 -060808090110110808090910040312131310141516170210041616181818191919202105990990999390999109999992199999019000910999099999999990099009 -080808080609101011111209100413131409050215161709031818192020211818040120999999990099099990900999999999009011999191009991929903919999 -080809091010040403091010111111121213140605121204151515021616040117181916909999999999929900919099990099999999990001909999903119999100 -080509090104081009091111121314151111121616150617121604041802120403181804909999999300090999099900909999901990999999919099190909099299 -080809091006080809091011041202131011141516131711030516181911042018180104999909999999099999909901990911999191192099199990099993000999 -050809021006111112131010111112131403011515131404041516041417041818181804009109091999119999999299909919999399999909900909090999909990 -040808080904011011111111121314140615120216141717121816041717120516031919099009099993099991900019999999990119999090999999990999099299 -080109100211080812050411131313060411141414141503161718151504191920202020991119310099199990999999090909992999990999999009900099099999 -040808080109100206111109101213111109100314151509161717041518041717051818999990101391999999999919090920999999909909900990909999999909 -050809090910011112120210131415150410131316150310171718191919171720060421019999119993991199099990909909999909929900999099999099099090 -080809090310080809091010111212130204110514151617181818180419060401201919999929999999999909901999099990910991190019909999900300999909 -040809090110061112121210130214141510131314141616170418191616031818050404009999990390199091090919999999909999991909999090929900099999 -080809040310110512131410111212150210111617171810111617170406041601191920900990999290991999919909910999919999199999990099999300009990 -040108080808091011111212131411111212151416170218151416190618041405200318999990309990990901999991999090199999119990099999999909909092 -080909100111081209101311081415101611171818100411190320202002191904052106999999999390999190090999009009999990900999919299199900990990 -080905100411030902120611131415151611131317171611181817171601181804192004190902990999100999199990919909999999909999999090399909999000 -080808080109041005111209131314151504131302151516060417181816031717180416999990000399991090919099199991999999900910999099999999929909 -080304090610080504091110081213140410021212141510161718141919041717011919290909999999990090099999009199999199900919099910909039999999 -080909090104040410101112041310101415061616161415171718180215041718030515099990990309990190999100991909999999990999199091999990909299 -080109090210080809111210131415160610130517160403130418161919130420202020999119399999100990090909999990992900099909999090999990990999 -040809101011011212101011131212141511131617181819131604020604032020202005009999909993909999999999000901999991909901900999999910929990 -060808090404101112091313140515091613141703181804141919182020021919012020999990909000099999099990090999009129999999909910919939919999 -060805091004010811121004130814151515131316161616171702180404171704181803009009990993109999109009999991999999999019009919999999990992 -080808080905101111120901061112121313141414151313161616170218040319200421999000900999999309991999999999999990099909919991109919092190 -060809101004110812101004110802131415111616171815111619170320050104172020900900999999199999199099110919919999999999200009903099999999 -080906040410080911110410050911111210130902141501131604171718031616171704009909990999990999999909900999909111939991199909029999099099 -080509090304081009020611081204130414081516171714041616171718191919190118999299099909019090919099099909109099909999999909009903999999 -040108090909101011040612131014151512131617151512131602181812130504192003990990300099099999099999099919999019909919999919999019909912 -040308060904101008080211101212131415041212130516171718181818171719190104929900990099991190999199000099991999909999919099999993090999 -040108091010111213041410151213061414151213161717151213021803051919192021990090309090909999999901099999909991999991999991900991299991 -080809010410110809091213110614051515021614171515041614181919031604201919999909993901190099909009999199999109099990990999999009929909 -080910110512081314151212081314161606011314161603171314181819040420021919900099099999900999999909990999999311999991920999909019990919 -080809030410111213041410110215151606111715151805111717192020040119192020992990919099190091990919900999999109909999099999903099999909 -080808080104090910111212030902131212141415131316141417171718191906200405999999990309909929099991199990910909999999009999909900099099 -080109051010081112021310081412121315081616041315171616040306041818181920990999309099191990919009999909999990999999290909900999099900 -020808080806091004041101091213131111090414051516031717041616041717181818199901090199099399999909909990000099992909999999999900909999 -040809101104121212121301141516161317051516161318191920210218190321210618000009999099990390999909901099991999999909999091199999992909 -080109101112080809061305141509161304170209161318041903162018212121162020990009399009009991999919900199999199900199999990991299999999 -080804090900080803090900101011041200021013141400151513161700061504010500909999999999999990290991909999909199991990999110999030909999 -050108090904101108090904101208131414100204131516101717171718060419031818990900399990199999909091999919990909009199999999909020990999 -080806090300080810101000041102120500131313140400151516161700151501041700999299901999999990190990199099199999090901999990999309999999 -080910030400080802111200061314151504131314151500161717170500040118181800912999199099190909109990990999999999999910090999903099999999 -060809100500031109101200131404021504131414161700131818191904131818011900009999999092119999910999910990919990999990199909099939909999 -030808091000110805091000111102091000041213141400011516160600041716160400299999999999999991099991099901909099999910993990991999901909 -080509090904101102120300131414121504131414161500131717180600130117192004099900991290119991999909990999999999099190999999993900999000 -050308080804090909100200061112121300141412120400141515161700041815011700929900999199900999991900919909999999099091999990990939909999 -080309101000080909111000081213111404021515111604171818192004051818010600299999999999999990990990990190909999001900991910009930999999 -080804090600080810100100111210131300111415131304041602050300171618181800990099990999093990909909999901999999909010999999909192909999 -080304091000080804090400060211091200131313091200141404151500141404010500290099999099999991099999999010999991999091099099999930990999 -080803040904080810051100021010121300141515121600061515121700181801121704999009929099999909900919999199909199099999990900990399999990 -080609101004110309101004121314150100161314171700161302171700160518190400099900999999999002009909039999199099999999999119999900990099 -080409030500101109091200100213131404151513131400161718181400060104181400099990992099199991990910990199999999091999991099903999999099 -060108080800090910111200090913051200141515040400141515021600041703161600999990309999000999999990099019999999999990099911990999909299 -080304090904081010090200081112121300061412120500151516170400151501181800990909299999911999991900919999999099099019999000999309999999 -080801090900051011090900040212120600131314121500131314141500030416171504999999039990019999919901909919999990099999999999929999990000 -060809101000110809031004121309140200150409141404161617171700161601180500999990992999999000991909919099999901900919999099999309999909 -080804090300080810101000061102120400131314151500131614150400050117171700999299901999999990199991909010099990999999991990903099999999 -080304090400080810101100060210101100121313141400041313141500051617011500299099900999999991999999909019099099990999099919999039900999 -080602090900080410100900081112050300131313131404151617181400040117171400901999919990999999102901999919999999909100990990903999999999 -060809100500080802110300121314151504161614141700161618181904040118181900990090909999919909112901990919999999099909099999003999999999 -080109101104080909121100081304140400081515151500020603160500171718161600990009390991999990009999909909999999991990990990919299991999 -080401091000081111091000041111090600121304091400120215031600121715150500999099039990999999999999099019909009099199099929991990991999 -080809011004080811121000060213141404151604141400171818180500171703191900919909913999919901090999090919999090990199099999999209999999 -050108060400091010101000111111121200130214151500161603151500041604171700990990309090999991999999099199999111999099999929999990900999 -060408010900101010090900041112051300140215161600141515171700140304171700909990903999919990190909909991909119999999099999999099929999 -080809040300080210101004111213130600011413131504161717151500051818181900900999999291199019999919909919999309909099990999900990999909 -080801040909100811120909101313141414101504041602101703181819201706181805999990930999010990919999999999019009919999919929109999909090 -050108080904101108120413141515120213161515121713181920121717061921212103999000399990110900999999910099919999990099999909909099299999 -080804010900081010110900121010131304120506131400151503160200151517180400999999903990900909919999990900999999190999199991999210999199 -080106090900081011090900081012121300041012121300051004020400031415161600999999309990199999109999909099999999999901990990999919921199 -080808090300101011120600101013140200151516161704181816161704180105041700999299901999999999010999919900919999909099999191093009999999 -030809100400110609021200111313121200141413150100141416161700040416160500211099991999991990999999999099199999399900999090909990990999 -080904101004080804101006011112121212111113140415021617051815191919031815909909099999099090909930999999090919099910991199919999999290 -050808090904100811111212131411111506161617021503161618191504040120202020990900999999990900999991990010199999929901999991003099999999 -040308091010110502091010111213131404151613131718191920202001190621212121921990999999919990190909999909900009100999199999399099990999 -040608050900101011040904101011121300141411031500161611170200161601171700990990009999909099990999919909219909999099199919999391999999 -080809090900080802050300101011110400101211110600041314151500041414010400999999919299999909109990909999999909099001990999999930909999 -080809090500080809090100101002111200061013141504161603041504161718191900999099999999093999109991909999909919000020999999090999990099 -080910101000111213130300140213150400141616150600171716151804171705010400009990999990992990999901909919999991999999099090099030999999 -060408080804091003111100091213131104091213130200091414151600051401171800999900099090929999999999990999919099999990190919909311999919 -080801090900041010090900111010050600111202130400041404131500041414130300999999039990909999900909999991999091990099099901999992909999 -080806090300101112121200131111140200131315151504011616170400051616180400990290991999999909991999119919999909909190993990999909909909 -030809101000111106101200111113141200150204141200161616161204171701050400900992099999999999099990999919999109091999999990009300999999 -080910100300080911111200080911041304080914151300161717180200040117060500909999999299999999991999990990099011990191199991903900999999 -080809031000110909121304111414020500111414151500161717151500040401061800909299999199991099019999199999909099990919999909900390999909 -080909101000040909101000110212120500111314150400111316171700031304010600090990999999999999909901909919199990099901999999999030929999 -040808080300090204101000090911121200011313120500141313040600040415151500999290199999099991909991999991999390099999990909900090999999 -040809090400040206100100111205101000111313131400111516161400110316160400019099191990903991999909099919909999999199999099992990999999 -040104080800090909090400101112121200101102040500100613141400101504140300999990300999999919990919999990909910999019999919999999900929 -080305090900080410090900080210061100041212111100131414141400040115040400290999999990999999900911999991999999990910990999903090999099 -080109090500081009111100081012111100040613020400040414151500161616031500999099399999099999999901199090109909999901999099909099999929 -080909040104081010111112081010041304051415151515161602171718061604171703099999900309909099991999099909910099999019909919999099909992 -010608080000091008030000091002110000090404040000000000000000000000000000999993099991099999929991199900099999999999999999999999999999 -080808080000010910100000060210100000041112040000031112120000000000000000999993109999999991999909999919999000999999992999999999999999 -030801040900100811120900100212120900101314140600100414141500000000000000999992930999910990999911999990999909999099099990999999999999 -080808080400090902030400090910101000111212131300040106130400000000000000999099912999199999990990999919909099990399099909999999999999 -080805090900020306090400101011121300141414151300040115151300000000000000909991299999990919009999999190099990090399999999999999999999 -050806090300101004111200131313021200011414151500041414151500000000000000090999090299909990909999119919999390999999990999999999999999 -040803040900061011120900041011020900011013130900141414130500000000000000099999020990999999909909109999199319999999099909999999999999 -080906040300080910111100120904111100120913130200120113040400000000000000999999900299099909999999999990919019199390099999999999999999 -030804010400090910111200090213111400151513111400151513110600000000000000299999103099090991990991199909999999999999999990999999999999 -080109090400081010091100081010041100061202031300141414141500000000000000999999309090999999999999909901909099999912099990999999999999 -040808010900040808100900111102120900031304120900131314120600000000000000099999993990901999999991119290999999999999999000999999999999 -040808030900100808020900101111120900101313140900040113060400000000000000992990999999919999919999999990199091090399099909999999999999 -040108060900101008110900101008020900121308141400120415140300000000000000990990399999119999919999999909109099999909999092999999999999 -030808020400090909100400060411101004121212120100131313140500000000000000291099991999999999090999090009199999390990999990999999999999 -080808080500020909090600100411120100131414151604031414151604000000000000999099990991990919919990939190099990002999999999099999999999 -080808090300100404091104121313021100141313151504060501151500000000000000999290999990999009019999109099999090900039999999999999999999 -040809090400050809041000110812121000110212120100031306141400151604141400099099990990999999099990909999999019399100999999921999910999 -060108080800090909090200100411121300051414121300151504161300151504170300999990319199999900091999099090999999999000999999999902999099 -050809011004111109101004121309141400151304021400161317181800060319181800009909993999009090919909999099999909190991999919909199992999 -060808080800010909100400110909101000110412020300110404131300000000000000099999099993919999990909999990199099999901290999999999999999 -030808080400090410111200090210131300141410131500141410010600000000000000999992990099090999909911999999909901999993099999999999999999 -040806010400030809091000110809091000120213141000120414141000000000000000009999993099099929999999909199199111999099999999999999999999 -010808080000060910100000111111110000041202130000031212040000000000000000399999919990999990199999999091999990999910992999999999999999 -080801040900080810110900041202110900121213110900060313040400000000000000999999930999100991999901999991999999990990099299999999999999 -080804090300101010100400111106021200111113141400151515011400000000000000990290991999990999919999019999919900999903999999999999999999 -040108020900101010100900111112120300111312121400151515060400000000000000991190319999999990992990999999999909099090099999999999999999 -080808090900101010100100041112130200041414151500061414031500000000000000999999900999993999199900119990919099999992990999999999999999 -080808010900101010100900110204121200111113121200030614040400000000000000999999903999990991909999099919999990992900099099999999999999 -080104060400080909101000080909110300081202111100041314141400000000000000999999300090909999999999929901999991999009990999999999999999 -080808080900030204100900111210100900111313141500061313010400000000000000999992199999099991999999909919099091099993090999999999999999 -040108080400091008080200061010041100121212041100131313130300000000000000999990399090191999991999909009999999990990299999999999999999 -060408010400091008111100121208111100031208021300141414041300000000000000999990093090099999999999999999109211999909999990999999999999 -080903101000060902100400110912120400110913131400110113130400000000000000092990999099919999199999999991909019099399999990999999999999 -020801040600091011121200091111121200031313131300041414140400000000000000199991130099109999999999999290999999999909990990999999999999 -060809090400100809110100100802121200101313121200100314150400000000000000099099991999093999199909099991999999999919999200999999999999 -080801090900080810091100031210041100131310061100040210040400000000000000999999939999900990909990999299999990999199090109999999999999 -080809100300110802121300111414121300111414041300110115040600000000000000991299919999199991999909009999999990999309099909999999999999 -040809090900080806041000011111111100121302141400031304141400000000000000099999999099999990000939999999199111992909999999999999999999 -080809011000080411111000060211111000121204131000031415151500000000000000909999903999990990999901999919099990999190992999999999999999 -080104090600081010101000111213131300141402151500140403151500000000000000999099300999999901999900999919999911999099999929999999999999 -080404090600081010090100031010091100121202091100041204131100000000000000990099099990993999999999909290999911999990990909999999999999 -080802090400030810091100041212091100131314091100131304010600000000000000919999919092999999199909999991999901099903099999999999999999 -080109090400081009091100081204021100130614141100131303041100000000000000999999399090190990019999999009199999999920999999999999999999 -080602090400081011090300081212121200011313140400041313141400000000000000991099019999992990199909999991999399999999090909999999999999 -040808080800040910100100110310101200111313140400111302140600000000000000099999990990093999999999909929109999999919990910999999999999 -080109090500081010110400081010121304080614141304021514141300161718031300999099309999990999909919000909999999901999990099919999911299 -080309100400080404110200081212061300081212141300051515141400161616010400921999901099991990991999999999099090199999990909999030999999 -050809041004110812131000110814021500110816161500171718161504171701060300090909909999900999099991119999999909990199999199099302999999 -040805010900100811110900100811040900101213020900141506161600041717031600099999903999090999909999999991999001999091990099900999999929 -080409090300081009090600081002111100121013110400121214151600041701051600099299999999990999199990999091999991099991999010990309909999 -040108090900101108090600041208131300141415021300141415160300040515171700990990399090999991999909099910999911999991999999900912999999 -060801090900101010090900111213130400110402141500110414141500111617050300099999039999999991909901999901909991199999999999990992900099 -080801090900080810090200110410041200111110131200140515161704181818060300999999939199019990901999999999999900990990190909099002999999 -080509090600081009091100011213021400041516171404181919171404181819170300999999099090090990999939109911199019909099990999099999999929 -080808090500011011091200041313091400061313091400030402041400151616161400999999909093000991990909999999999099999010999999929199919999 -030808040900100808020900100604110900101204131400101515131300051515010400299999990990911999999909009999919909999099199909999930909999 -080909091000021103101000120513130400140413131500141416161500060116160400199991199999299919909909999199909999999009999090903999999909 -080809091000110809121000111302120600111414120500031414121500041601040400999099999999999990099911109999999991092999999990990300909999 -080903101100120210101100061304051104141415161604141417161600181801191900129091999991099901099999990919099919909919999909909309999999 -080808010500030909090904101112131400151602131704151618131904202020130600999999903099999029991911919901999991009909090999099090999999 -080404090300081010090600111010090200121314151500121617051500120117170400999299009999999909990999919009919091999919990199993909999909 -080104090904080802100300111111111200131415161200131317171800050617170400999909301299919919199999999009999900099909999990900990999999 -040809010400040909101000051111111100120204061300121415151300120415031300099999093090909999919909999919009099999109999199999929909999 -080801090400080810110500121212131300041414021300151416161604150317061800999099930999019999010999999090999999199991990999099190992909 -080106091000081112130400141415161600141415021600171715040300170515181804999099300090999991009991999999199991999090299999999999990090 -080809030400080809090200101010101100120613131304121415160500171801160400992999999099991990991999919901999999909910099099900399909909 -080808090900051011090900120311021300141506131300041616171804041616011800999999909999199902990999119099999099990009199901099939909999 -050408090900101112090300131314140400011302061500161617171704161618181800909990909990092909919999999991909390999119099999099199991999 -050809101004030809091000110812021300111404151500161417151500061418010400099909990999999929099911119999919999999909990909909030990999 -080309051000110409121000130212121000141515151000141617181804140406011800290991999999909910999910909919999099999199999119099039909999 -040806030900101104121200101313021400101504041400151516161400050116161400909290099199999990019999199919099999990909999090903999999999 -080301060900081010110900021010110900121313110900040413040400000000000000299999930999900919999919999090999999990090099999999999999999 -030804090400101112090400100212090600131312091400131301141400000000000000299099109999990991999919909199999910099939999999999999999999 -040808080900101011110900041011110900011206130900041214020300000000000000999990099999999999999900999909999399199901290119999999999999 -040808010900100808110900101212110900031204110400131402110600000000000000099999993990909999099999909990999999092999991110999999999999 -080809091004081112121000050212120100131314151600171304180600031919191904909909990999190991999909939910999990091990099909929909999990 -080808020904031010111100061010111100121314150100121617181904041616180500991102999199999999999909999990199000399900999090099990909999 -040809010400101109121200101109121200101314140200100603140400000000000000009999993099909999999900999999919909199099999920999999999999 -020809030600100909041100101213131400101213131400100115041400000000000000112991999099999999900919909999999909999309999909999999999999 -040809090900011010101000041104121200131302121200061314140300000000000000009999099993999991990900999919999919999919990992999999999999 -030608040400090408081000110212131000141412131000141412011000000000000000900992999099999910099911999999999991099993999099999999999999 -060808080800091010031100041010021100121314141100120104140400000000000000999990099990992999999999119019999009999309999990999999999999 -030809020600041010100400111111111200131314121200131314010400000000000000211099991990999999910999999999199900999993099999999999999999 -040403080800090910100400090910021100121212121100060401041100000000000000999990020999990999999990119999999999190030999999999999999999 -080409101000080411101000121211020300011211060400041313131300000000000000900999999999999900912999199999999319999090090999999999999999 -040808010400040808091000111111091000031212021000061204041000000000000000099999993099901909099999999999999291199999990090999999999999 -040808080300060409101100121309021100141409150100141409151500000000000000099999990299099909909900119999999901399999999999999999999999 -060809031000110809121300040809120200141409150400141401151500000000000000999290999190999999991909119909999900099939999999999999999999 -080409090600080809091000020304111000121313131000120401041000000000000000909099999999099912909999909190999199999039999990999999999999 -060809090400010809091000040811021000121311111400151515150300000000000000099099999993199999019999919099919009999909299999999999999999 -080809101000040406101000111112121200131102140100031515151500000000000000900999999999909900909999999991199119392990999999999999999999 -080803091000080811121000011311021400131311151400040411061400000000000000992999991999990990910939199999999910990990999099999999999999 -080803091000110404121000111313021000111313141400110106140400000000000000992090991999909990919909199999999990999309999990999999999999 -080803090900021011090900121213131300121414141400040104150600000000000000929999199991909919099999999990999199990300999990999999999999 -040108080600091008081100121314021100121315151100041303151100000000000000999990399090099901999991109999199999990999999929999999999999 -040808080800090906100100040911111100121202131300031415131300000000000000999990990999093999919900999901099999999919992199999999999999 -080909091000110312120200061313131300041414151500041414011500000000000000099090999099291909991999999999199090999993990999999999999999 -080802090400031010091100041010091100121314141100060104141100000000000000919992919099999999999909099910999099090309999999999999999999 -040801060900100811090900101202041300100414141300100314141300000000000000999990930990109991900991999901999999999999999299999999999999 -040806090900080810090900040411110100121212020300041313131300000000000000090999999999009999909990939091999991990991299999999999999999 -080109090600081009090400081010021100080404121100041313130300000000000000999099399990190999919999919900099999990990299999999999999999 -080604091000081111090400081111120100081304121200030214141400000000000000990099099099999999909999039999999199992101999199999999999999 -060104040400080808080900100211110900121211110900121303141400000000000000999990300099999919999910909919999999999199099299999999999999 -040108090900101112121200100413020400101313141400100603141400000000000000990990309990199999190999199909199999999999990929999999999999 -040808010900101011090900101011061200131411021200040411031200000000000000099999903999919999999990099909999091190999999092999999999999 -080309101000110209101000061209130100141409131500140404131500000000000000299991999991999991909991139099999909099009999999999999999999 -040104080800090909091000111204101000110213130400110313130600000000000000999990300999999919009919999919909919999999999290999999999999 -080409091000081109091000081111121000081302141500031304010600000000000000999999099999999999909909199991109919099993092099999999999999 -080404060900080802040900031010110900041010110100121212120400000000000000999099009999199929109999909999999091399909999990999999999999 -080808090300101006090900101011020400011212121200041314140400000000000000999299099999099999919991199919909399999009990990999999999999 -040601080800090909090800040410111100030210111100121314141400000000000000999990039999990909109999999909999919992190991999999999999999 -030808090900100808110400120613111400021313110100151515110400000000000000990992999999909919990999909109999191399999999900999999999999 -040404010800090909090800031011111100121202061300121214131300000000000000999990003999990999919929999911099919999909999909999999999999 -080803040400080802091000111106090900121212130100141414140400000000000000929999990099110990999999999990199990399990999990999999999999 -040804091000060809091000110812021000130814141500130114140300000000000000099999909999999909099999119091919019999399299999999999999999 -080409100600080809111100120209111100120409130100030414141400000000000000900099999999999990999911099909999991392909999099999999999999 -030808080800091002110400121211110100121213131300061414150400000000000000999992911991190999999990939990999999999909990900999999999999 -080906011000080911111000040911111000121302141000041313150300000000000000099999903999990999999990999091999001999991990992999999999999 -080906101100080910101100080912020400081314151500040103151500000000000000999099909999099999999901109919199991990329999999999999999999 -080309100400080909101100021212101100131212101100060401140400000000000000999999299091999919999919009099999999990030999990999999999999 -040808080400091010111200030206131200141415151200141415011200000000000000999090990991909921999990909919099919999993999999999999999999 -080809011004060809091004051112131004030214151500161616160400000000000000909900993999990099919900990990199911992199999990999999999999 -080109020500081009111200081009130300141404151500141404150600000000000000991999391090191999992999099099099909999999999900999999999999 -080808090300040609091000051112121000131312120200130114040400000000000000999990909299999990099909999909919919199309099909999999999999 -030808080600040402040900101111090900121111130100121414141400000000000000299999919099999900109909099999999091399909999999999999999999 -080809090300080210101000041112130400141415151500141416160400040106160500909999909299199991909901909991999919999999099099903099999909 -080808090300041002090900111104120500011314141400131315150600000000000000999999909299119901999990909919099399999909999090999999999999 -080802091000081112040300041113141400011113141400061113151500000000000000991199019299999999109901099999999399999999990909999999999999 -080805090600080810110100021210131404151516041400031504171700181818171700990099990999913909999911000190999990999909092999999999999099 -040108080900101108090900101106050300121113021400121115161704120418181800999990390999099999909900999999929911999901190991090099999999 -080903100400080910101104120902061300120914151500121617171800120104170500992999999090999099190991099999909919999910090199993090999999 -080409101100081202130300051214141504161217061504181819191500180119191500909199901290119999099999900099999000909199999099993999999999 -080803090400081009091104021012121200061314150500161616170100181818180400929999999099999019900919999919099090099109999913999909999909 -080801040900080810100900111210130900051202141400041204151500061216040300999999930999099999909901909099999911999991990999999092900099 -080909090904080810110100121314111504160205111500161717111800041717030600999909990999013909199991990019999999099109099999999990909299 -060308080804091002111100121013111100141515161604171515181604171719010500999900290999919909199991999099199099909991999909099030990999 -080910011100081213131100140204131100141515151100140404160600030516160400019999113999990991099919999999099999999000099999929999990909 -080808090900041011110100121311111400030506141400151616021700041616041700999999000999993900999909919900999999992991091919909999999099 -080909010400081011111100081012131400081516021400151517181400040605031404999999903090099999199999109909199991999919999919900029999990 -080809101004060809100100111209131400150402131400041617131400031605131400901909999990993990909909909001999999990919999199999099929999 -080909100300081111020400081212121200081314150400161714140600050118181804991299919999919999910999999991099919090199990990903909999990 -080109090400081009111100121213111100121214021500161705041500061818031504999999399090099991099999099999999911190009999990900999999920 -080809011004080809101004040611120300131313141500161617181500161605021500999909993999009099919999099000129999999991999009999019999919 -050104080800090904080800090910021100041212061100131314041100131515150300990990399999099999909991119009099999999099999009990992999999 -040802050300091011111100091204131300121214131300151616161700040106171700010999119299999991999999999090999990990190999990903099999999 -050808030900100811040900101204131400101515160200101515161600040106171700999290999999009990991909099999019999999999190919903090999999 -030809061000110809091004021213041000141313151000141616171804141616010500299999990991099019999919999919099091099901999990099930999999 -030808080800090902100400090911121200131311121400041511010600000000000000999992990099199999109999999999909991999093090099999999999999 -010802060000090810100000090810030000091111040000090412130000000000000000910993919991999999999999299990999999999900999009999999999999 -080609010000080409040000080209100000081111120000031111120000000000000000903999999999009999999911099990099999992999999999999999999999 -040804091000080802090400030411091200131311091200131306011200000000000000099099909099199929199990999999999901099993999099999999999999 -080808020400040904101000011111120300061111121200131414141400000000000000991099101990999991902939999999999999990099990999999999999999 -040408080800090909090300101002111200101314141200040114140600000000000000909990990999992999199999199999199019090399999990999999999999 -080509090300101109120400101102130400101415151600101715151604181801061600099290999999900999199991009919999999999199990190009309999999 -040808080800090910060400090910021100121212130400040113130300000000000000999990090999999999990991109919199999090399999992999999999999 -040808040600090810101000091111020400091111121300090104120300000000000000090999999099999990099999109999199099199309299999999999999999 -040408080800091010110200011010111200061314111200041414110300000000000000999990009990911999991939999900999099999999290999999999999999 -040108060400090908101100090908021200131304121200141414140300000000000000990990399099100999999999119099999990990999299999999999999999 -080209090400041009090100031011121200041011120600131414141400000000000000019090199999993999909929099999999999090990990999999999999999 -030808091004011108021000041213141000151216171700151206170400151218180500299009990993919991919901199990099099999909999990999909999909 -080802010900100411120900031313130900041406151604171718181600171718180500919991913999099929119999909909099990900090999990999999999909 -080609090900081002110300081211110400081314151504011605171700181818170400099999919299199991999999909919099000909199093099990990999999 -080409091000081109121000081313121004011313141504161606021700051618190300999999099990999999099909000999999399109191199999999012901199 -040809031000020811101000120411131300141515041300161515171700050106171700912990999991999919990999099100999190999999990909903099999999 -050809090900101112130100141212131500020416171500181804171504061803171500909990099991113919999999909100999999091909999999009999992999 -040808080800090909090100101112131304101414150600100216171804031616190500099999990999993999109900990991999990999190099190099909929909 -040308080800091010110200121010111104121213141500161616141700051806010400929990999190999999991999090990199909099909099999990030909999 -050108091004111208080200131313131404151516171704061516031800191919192000991100399190199999991999900909919909900999199992999990999909 -080910031100040610121100130210141500130410041500131616171500130116170500002990099999990999909911099999999990999099991990993999999009 -080809061000080209041000031109121300051109140100151616141400041616040400999099199999199929900999909999099991390099990909999900909999 -080809101000080209040400031109120400011309141400051315151400061315150400990999199099999921909991009999099319999999990999999999900909 -050104080904101008080900101011110600121311110300140215151500160417171700999000309999099999999999909109999909991999291199909909909999 -080809090400081010101004111112130100111114150200160617181804191905180300999999990090999099909990139991999991190909190999009099999929 -080109090500081009091100121313141404151313021600171704181800061704031800999999399090099901990999090099999991190999199099909929990999 -080604091004080211121004081314051000131314151000031614171700181814011700990909090990190091199999999999099991092091999999990939999999 -080103090400081005111200081013130200081013141400151004141400151616040600992099391990091999991991919999099999999909990999990900999999 -040108080800090910111200091314141500131314141500160506040400021717170300999990309999000991990990999999999999991000099999919999919929 -040801090400100808091100040512131300021212131300140304151500141606151500999990939090990909190990099999999199991900999999992999910999 -050108090400101011090900101011111200131302141200131306151600041717040300990990309099999999999999999190999911199900199999900902999999 -080909011000110204121004031313141000051313151500161717151500161817060400199991193999999021019999109999909099999999999909999900900999 -040803090400100809091100100502121200130414121200151516171700151501061700092999999090999999190990999091999991990091999019999309999999 -060804010400090910101100120910101300141502161300140417161300140517170300099999003099090909999999909099199901999019999999999999909929 -080808090900011010090900111010120400110413121200111415021604061703051600990999099993999999990909199999999900999991099119001909992999 -080805090400080204101000031111101000121111131300121415161300061701160400990999190099909921999999099999999090999910999099990399909909 -080806050400010809021000111213141504111212031500161617041500161618181800999999900093191990111909190999999999290909999909999099999999 -080904101104080312101100021314101500131306101600171718190500171701191904199909209999999919090990999199909990099190999100999399999990 -030808060900040808020900101011110900051012110900131314151600041717010400299999990999911909999999999999999909090909199901990030909999 -050408080300091008081100061012121100131012021100141515160400140115171804909990999290999909909999999999999111191999991909993900999900 -080901041000080911111000080411051000121213140200120315150400061615150400999099939990091999999909099990919909199991099299999999900909 -050808040400010808091004111112131300111114131500160214140600171717170300090999999093909091000999999990909999991999091999991999999929 -080609011004081109101000081202131300081204131300141415160300141404170500099909993999119991999901199990999999999099299009999009999909 -080809010400080810101000111111041204031302121200141515161700061515051700909999903099999999901999990219999911999999090900909909999999 -030809100200111111111200131313041404151516161704151518171700051918010600211199999199999990991999900909919909909990999909999930900999 -080808010500040910111104031213141100061515021600041515171600181818171700999999903090999090099921199999119090199990999999909099999999 -050308080904101112061304141516171700021518171704191918180100191920202000999000299091909019090999999190999199909190999193999099999999 -040104080800091011080400061012131300141012131300141015160300050217161600999990309090099909909999999999999009999990999912991199901999 -050808080900101003090900101011020400121212061300141516161700040116181804099999921999999999919999199901009999990199099090903999999090 -080109101104081212061100131314151100131617021104181819190300180519192004990009309990909909199999199990199909909091999999990992999910 -080808080500091010110100090212131404091516171800091506191804031519190400999099900999993999919991900911109091999900999999099990929999 -080909091000080211030500121211131400121211131400151617181404040106191404099099192099999991999999999999999900090199999009003909999090 -060108080900101008080900101011110900121311040200121415051600120403161604999990399999999999099991919099019099999099199009990999999290 -050809040600031010100200110404121300111414121200111514161600171701161600009999900092991999991999999900919099999991990919990399999999 -080809050403100809111213141509121206161509040217011518181818191920212121999999990020909109999999999099910090999909103199999009990999 -040801090909041010111112131010111104131402151616171819051603061820202020099999039000999999999099099919999011190990920099909099999999 -080804010400080909090900101011120300131302120400131306121400000000000000999999903090999999199999929901999901999909099990999999999999 -080809100400080809021100061209131100141509130300141401130400000000000000999099990999911900999990099999929909999039999990999999999999 -080109090400081009111200080206041200081313041200031313141400000000000000999099390991090999909910999919999990999999992909999999999999 -040408090900101108090300121208131400121208021400060115151500000000000000999990099999999900902999999999099919190311999999999999999999 -040402080800091011060300091012131300091014131300091414010400000000000000901990919299909999199909999991999901999993099999999999999999 -030808080800090902100100041112121300140612120400141415151500000000000000999992990999193999119900909909909999999990999099999999999999 -080804050400080809091000061109090400121212120300011314021500161616151500999999900099990900999990909909999999999099293919991119999999 -080801090900080810090904061010111200041314150200131316171700181803050400999999939999009099999909119999019000999999199919990200999999 -030808060900041008111100041002121200131014121200151515151600171701040500299099999090999999109999999091999901990991999990990300999999 -040804090600030810111200130214141200131314141500161616171700050401171700099099900999999920009991999919909999999991099919900399999999 -080910010500081110101204081314151500030414161500171714161800171702040600009999093099990090919999199909999990992999099999999100991999 -080804090600010809091000111111121200020403121200131313141500040516160400909999999093190999109999999199999099991920099999900900999999 -080905031000081112041000131312021000131312140400151516141400150104040600909299099990909990999999919999199909999099099119993000999999 -080808080300090210101104091205101104131313131100141415060400140116171800999299109999999091999919900190999999999199999009993090999009 -080808090904101011110100121211110500061202131300141516131300030417180400990909909999193991999999909099099919999919991199929900990099 -080109100300080809110600121302141504051616161604171717181800191919191804999299391999099919910911100090999999909099999909990999999990 -040809101000110809101000110809120400031309140100061502141400000000000000099999999999999999909900109999199299399119990199999999999999 -040809090900040810100500110804021200040813131200141515131200040115060300009999909999999909990900919999199019999199990999903992999099 -050809011000080809091000111212121000041302141500041616061500031616040400099999993999090909919999999019099919099919990990999990929099 -040809100300110812101300111114141404061515021600011515170400181818180500009999909299900999991990990999919099199991993990991919999909 -080802090900080510090100031111111200131415161204131718041200130418061200919999919999993920119999909990999000909090999099990999999099 -030809100200051111111100121314141504121314161600121717171600041804010600211199999190999999991990900999919999999999990991990030909999 -030809090904100808111200101314151204100214140400051617170100181917170600999902990999909990999909900999099199099109999993901999901909 -080909101000080804111100121213111100011214150600041617020500031818181804999999090999909990999991199999109309999901990090999919929990 -080809090900080810100600041111111100041202131300031415011300000000000000999999990099099909909999999901199099999913992199999999999999 -080801090300101010090900061111041200041111130200141414140400000000000000999990939299999999191909999999019991190909099999999999999999 -040808010600040808091000111111111000121213021000120314151500000000000000099999993099901909909999999999999901199919099299999999999999 -080808080600040910101000111112120300111113141400040115021400000000000000999099099990099990999990999999929919990319999911999999999999 -060808080800010910101100121210041100131302141100131304150300000000000000099999909993190999999990099901999991999901999992999999999999 -080803090900021010090900111004061200111313131300110104040400000000000000929991999991999999990999999910009099999300099999999999999999 -040809031000110212041000111212061000111313141400111313010400000000000000912990199999190999999909909991909991999993099999999999999999 -080104090900081011121200080413121200141414140400150216030600150517171700999999300999109990199999999091999999090199999199990120999999 -030809090900101004110400020612120500131312120100131314151500041616041500299999190099909919909990909199999919399909999909900999999909 -080409090300080209101104081213130500081413130600011515041600171715181600999299099991190099900919999919999999099109993909990999999009 -080309101000081111100200081213141400060513141400151515150100040404160400921999999999991999091900999999999990990091999993900909999009 -080309101000081109041200080209121200081313141400151313141600050104040600999999299091999999909911999991099990999999090999903000999999 -080809100300080809100500111209130200140609151604171717181804040119191800999299999999999990910909919099919099100901999919003099999999 -050809010600101009091104101012131400151515021600171803191600170419191604009999993099991099901990099999919990199091990999990299999990 -060108080400090909091000111112131400110404131400021503131400151504050400999990309099990919000999999900999999991999999299919900990999 -040804010400090910111100121310141400050210141400031510161700151506161600099999003099919990909901999019999999999199099990929099999999 -080309101100080604120200081314151600081717151600051717151804191901181804921199999199900990991990999990999099990999199911090399999990 -040108080800091010111100120404021100121313141400120613141400120503150400999990309990919909099909919999199999999999990919999209909909 -060108080900101108080900121213130904141215020900141617041800140405031800999990399990199909199999990990199099199900199099990099999929 -080109100500081109101200111109101304141509160200171506031804041919191900999999399099109909990999900909999091190909199999009921999999 -080804090900101104030900120513140200151613141400011717171700061818181804909999092990099909991999919009999090999091993999990999909990 -030808040900040810060900111102120900131314151500161617151500161604010500299099919999999909109990999991009919999199999119999030999999 -080910111200080506131204031414141400150216170100151518191904202020191904000099990999909090909999999291199919399100999999099099999990 -060809100500010809040400040802111100121213111100121214150300161616151500010099999993999999100909199990999909999991999902999099999999 -080409011000081109091000121313141004121313021000051504161700151506031800909999993990991990999909910999199990990001999991999991990929 -060808080800091011050400011211130400141415150300141416021700041616171700999990909090909990999930909919099919999901299999909919999999 -080801091004040811091000121311111000140406050200151516031700151518181800999900939999011990999909999099919099090909199099999921999999 -080306090400080810111200131314141200021514141604171717171804191919010500999099200999999991009999999199909119909919099990099030999999 -030405080800090909020800101004111200041013061200141515161200141515010400990992099999911999991999009999999009099909990901999930999999 -060809090900010810111100120813131100040502130400141415151600041715150300099999909993109999199909999009909991999919999091999992900999 -050408080800091011111104121314151500121202161600171819191604060119190300999990090999999000009900999999999911991999991099003992999999 -080808080400010909101000111204101000111314021500111616171700050616031704999999909093909991999900999919999911199999190999909999990920 -030808080900100411090900101211130400101212130600020414130100151617130500999992990999099999909999009999999990091999999093919099911109 -050804090900011011090900121013141504121016140600171018191904171702190300099999009993109999100909990991909999999919999999090192999199 -080209030400080810101100121212121300061414131300151414161704150104180500919999112099999991990999999019999990999999990900093900999099 -080404010900081011110900121212110900131414140904131315050200060316171800999999003990099999999999019999099999909009199909909991992119 -040808010900100808110900040412111300141414061500161603050200161717171700099999993990900909999990019990019999999999199990990291999999 -080909100500080911120100080411020400131404151500131617151500131717060300991099911990993999999909109099199909999099990999999992909099 -080809031004050809111204131415061200131515160200131718191900130401191900999209999199900000999999999909019999999090190019990399999999 -030508090900101108080904101202061300041414141400151616171704181901171700999992099999099099090911909991909999990199999909000399909999 -040809091004061102120300111113120500011413121500161613171700161613171704099109019290199999999991999999909310099090999999999999999990 -060108080900101112080900101313131300100402140500041516171700031816171704999990309990190999199999999909109991999910990099999999921990 -080309091000080511101000080212041300040414151500161616150100171717170600299999990999009999990911909991909909990919999913999099999909 -080804030904080810101100011205021300141414151500160417171500161617170600909209999199199991911930919909099999999990999099999999990909 -080808010904101011110904101012050900131313131400061515021600031504171800999909903999991099009990999999919999090999199911999990929009 -080109090900081011110600121011110200131004141504161617141800161604030500999999309090999909999991919090919999100999099099999020999999 -030808080400090910051100120913111100120213141400151613141400061701040400999992099099909999099999999919909199991999991109990300909999 -040108090900101108090904121308140200121508161700041516161700061505031800999990399990119090901909999999019909999999990999999991900929 -040108080800091010101000051112121200111113131404150413130600021616170300999990309990999991999909999990999909001999090999919999919129 -080808010500091010101000111104121300110414151300160317041300160617170200999999093090999909001999999999099900990999999290999991909919 -080809101000060809101000040411021200131314141200131315031200040116050400999990999999009999099990919090199919999909999992903090999099 -030508090600101011120400101002120400131415121604131414171700181818011700990092009999090999999991999991909991109999190909999039999999 -080809010400101011121300101005141500041617171500031602171504181818061500909999003099900999910999999090199909999999999919029199999909 -030808080400060910020400051111111100121313141400151313141400150116160400299099991990919990190999999019999990990999990999993090999999 -040808090400100408090100101111090500121111021300140615041300141404031300099099999999993990099909109999999091190009999909999099999929 -040801090904101112090200101312061400131312151600171712030400051818181800099909039190019990901999999999919999190992099999999099909999 -080902101000110912101000030904131300060414150100161615150500041617171700119991919999919929019999999999199900390999999990999909900999 -080808080900061011040904121013020904031415150900161718151900161818010500999999909999990009099901110919999299199999090909990930999999 -080808010904050610110900041010121200130214121200151516171704150318171700999900903999910990909909999919999019990919999909099199992999 -040108080600090908081000091111111000040212041300141415151500140304050400999090399999199999199999999910909090999109099999999000929999 -040808091000011108091000041205091000131313021000141515160300041506161700099999999993009991999900999919999991090901999999909992999019 -040809090200011010041104121010061100121314031500121617151500120518181800099199019193990099999909099900919999299009999999990099999999 -080801090300100809091104121202131300121206141500161717180400051717191904999999939291199019991991199999909909090990990990999909909990 -080404090900081011090100081202131300081214141500051616141700061616030400999999009990113991909991999991909999990909099999999920909999 -050106080300090909100400111104121300111114021300151514161600151514170400999290301999999991910999999990199911090990999999999999999009 -080804090400030802091000111111111000121212131300060414131300151617010500999992909099199999109999999991909991999909999999900030900999 -040808010904101112120900131414120900131414151604130617180200130319180500999900903990090999099909999999199999109999190911999190992999 -080909090600081003111200081314041204081514161204170214181800170514011800999099990999290991999999990919099091900191099199999939990999 -080809031004080811101000120213051404151516141400011717171700181819040600992909919999909909199911090190999990999199993999990090999099 -080801030500080409101100121313141504161313140200160617141800191919181804999999932099091909191909990099919991199009099999999099999990 -080809041000110809121000111309061004011309141000151617021800050403181800999999990999900990999901090999999391999991990001900999999299 -080409100300081112020500061113141404151113141400161617181904161601191900091299919990910999919999990099999909990091999019099309999999 -080803090600080804091000021104121000131312121000051404151000161616010400929999999099909919909910999919999919999001999990900930999999 -080909101104080909061204011313131400151515161704181819200300181819020500999009990090999090990939999919909999100911299999999919999109 -080609090300081009091104081012121304081012141500011617140200161605181904999999099299999099901999990999919099999009193119999911999010 -080808030900021010110900121205131304121214131304011516061700041818181800992991999990990919909999990990999990909109993090990990909999 -040401080400091011121300091012121300141002051300140615161300171717170300999090030990199999999990999999999019099019999910999919999929 -050808080800040904101000011111101004121111131400151616030600021717171700099999099990099990999939090999999190091909099999919929919999 -030809091000110808121000131414121000150414120500021617170100060417170400999992990999990919099999999199999909091900991193909999990909 -080801091000020809091000111213061000111204141400151204141400030416170500999091939999199919009990999999909909991999999909929900990099 -080401090900081010090900061010111100121213141500021205041600171717030400999999039990909999909909999919999900091900099999919990999299 -030809100400110809120100130809141404130204141400151616170600151616180500990092999999913919909991990910999199990990099909999999999009 -080309041004081109061000080209121000081309141504161717181800161605011800999009299991999999909919909919909999009100999919990039999999 -080906101104080210101100081213140300081215151600171215150500040118180400009909999991190999199999129999999109099999090999903099999909 -080808080904101002110300121304141404121516141400120516161700181919010600999109919299919990919999090909999909999991099099909030909999 -050806090400011010090200041110091200131114041200151516161200041516160300009999099093991990991999199090999090990999999099909992999999 -030802010900080810110904121212110900051313140904151313160400171818190600919992913999990099199999199990099999900990999990900909909909 -080808080600090910111200090310131404021516130100171818131904051818191904999999990099999992900999000199999119399919990919009909999990 -080401091000081111091000081105091000021212091000130414151600171703060400999999039991900999099999999199999199990910090999909200999999 -080804010900080810110904060512130900141415130900031402131600171704131600999999903999009009019990909999999991992919099199990099999999 -030809100200110412101300110514131300151614170600181814171704181814010400211199999199099999099990999099199009099999999009099930999999 -080910050400030910041100040212121300141412121300141515151300160406011300190992999099999991000991999099999999999991990990909039909999 -080109091000081109090600081102121304081415121304161717181300040317051300999099399090199999919999100991999919900199999990902909999999 -080909031000080902111200080513061400081515041404011616171400041618181800999299999190911999199999099901999099909190993900999099909999 -080109090904081010110600081212130400080214151604171718181900171718030500999909309991900999909999909909099119000919099999999920999999 -040108040600090910101000091112121200051102130400041114151500161114150300990990309099099999999919999090999911099991999099909999909929 -080808080300090210100600091110121300090504121400151515150400040116171700999299199991999990990990999999909990091090999990903099999099 -040308080800090910100200090404111100121314111100051516160100171717160600929990999199990999991909999090999090999091990093999099999909 -050104080800091011080800091012131400091015130200041016171704181806170300999990309999119999019909919990919999990909199999090099999929 -040809051000010811101000030611121200131415021200161617171804161617170400090999909993119990919999999299199111999099099990099990999999 -040804090300100211090900121211130500121211141400011516160600041717171700009999099291119919909999909999999990999199993090990999909999 -080803091004080811111100121314140200131314141504011617061504051819202000992109999199999909991999919099999909009910993199090999900099 -080809031004021112101000130612141500131612140500131717141800040117140400912909199991999919990990909999999009099999991900903990999999 -080109101004080909101004081112130500111114021500161617061500041819031500999909399999999091909901009991999991199000999999999099900929 -080808020600030909100400051112121304141115121600171115161600181115010400991092991999999999010999990099909999990991999009909930909999 -030604080900100211120500101311120400101411121500041611151500161601171700990092090099199991999919999999909900990099999909999309999999 -080910011100020412111100130414140400131506161600131515161600031717170500119991913990919919900909999990099999999999999909929090999999 -080808080900021011120900131314030400051314140100151617181804150604181800999090999991119919920999999099999919399909990009090099999999 -060809101100040809100300010805021200040813131200040413131200141515151500009199999290999999919930999999199019999999999990900099909999 -080801090900080510090400111111121200131313121200040402060300041415161600999999939999999900100999199999999991990910999099999192900199 -050808090300100208061104121313111100141414140400151617181800040117181800991290999991190010999999999199099999999100090999903999999999 -030808090900100808021100051212131404151212161404171816160100041919190600999992999091919999910999910099999990100099990993909909999909 -080309101100080412120400131313020600141515151500161717181804050117181800920099919099999900919999909099199099999199990999003999999099 -080304090900080802090900101011041200101011041200011313141200061516170500290999999999109999199999099999999990999019993990990909900009 -080801090400080810101000111213141404150406050200160317171800161617171800999099930999099909091990990000919999090999199291999999999999 -030808090900101011040900101012121300060212120500011415151504141416170400299999199999909999090999909919999019099991993199099099999009 -080801060400080809101100121209101300141504101300021605041300171717031300999999930099900909990991999199999009991999990090919999999299 -080109100500080809110400121209131400121206151400021616171404181816030400990099390999090991909999999999099999991900991990090990999299 -040805090900040810090300110810021200131313131400151617181804061601181800099999909299999909919900919990919999199919990009009399999999 -080808090900011011090904121311061405151617021804191920201800191920031804999999909993009091990909900019999911000991999999999999999290 -050803090400101010111104020612111100131414151500161614171800161601170400099099020999999019999990999190909999991990999100999390999999 -030809100200111112131300111112130400141415151500141416161604050417010600211199999199909999999990909909199999999991999999009030990999 -080909031000080411121200131314121200131304060200151516161600150117040500099299999199099909099990999999919909999090199199993090999099 -040808030900061011121200041111020400131414141400151616171700050116171700099299909190099999910999999009199999990199990909903999999999 -060808090900010810100904111204131400111505131400110204031400111617181400090999999993099091909910909999999009999999991099991929991199 -080809010500101009111200031009111300040209111400041515161400061515040400999999093099910929990999999919909019999909990990999900909999 -030808040400050809021000110612131400111515151500161617171804161617011800299999990090111999991990009999919099999091999990099939999999 -080305090400101112121200101111041300021415151300161615150100161604170600290991990099999999990999909190999119099999999093999009999909 -080808090300101112131404151112120200061116171704181819172004181801052000999290991999991009991909999990919000909999099019099309999999 -080803091000080511091204131314150200131304150400161617151800161601061800992199999199009009991999019990999999099099999010999399999909 -080909050300080909101104121314151600011304021600171318181600171718040600999999990299991009019900999999199399999901999190990900999999 -080609011004080811111000121212121300051415021600031704161600181818180400909909903999990990919999919999919011199109992999999900999999 -080809040300080509101100121213061100141413041100141413040200040113151600999999990299909900099999099909999990999999199199903901999119 -080801091004080811120200051314061500131316171704181919191704182020200300999109931199019900901990999990919999900909999999099092999999 -080509011000080809111000061209131000141415151600140215151704030418180400909999993999009990919909909999199999099199099199020900999999 -060308080900100408080200101005111100121204131400121213131500041616010400929190999199999990091999999099199999099909099099909030999999 -080109090400081009090400111105121300110214150600161614150300041614150400999099399991099919900990909999909111999099999992909999999909 -080801050600091011121300091414151500091414151500020403160400171717161604999999030099100991909919999999999999991990090999919299999990 -080909101004080909101000110212130100110614150500111615151704031616181904999909999999919909119911939999099900999999099999029000999900 -080809090400100209090400031112121200131111060500131414151600130114170400999091199999090921999999999990999990999919090900993999999009 -080806090400101011110100051011111200131304141400041515021400031515041600990099090999093909999999919909919990990999999911999990929909 -040506080800091003080800111212131400011212150200161617171704181819191904990990099990929909991909199999119399199009999999009099999990 -080808010904061011120900131312120904131314150904161702050300161718192000999909003990909990999999900991099999909010990999999192999119 -050808020904100811120900100313130904101415130100161617180600161619202004099109991999119992999999910999999009399900999900999909990090 -060105080400091011121304141415151304141415161600171717161600021819190300999090300990000091099999990999099999991999999999919999911929 -080905101100030909061100040212131100041212141500161617141500161604011500190092999999999991909901909999009091999999999009999039999999 -080808090300101010090900051111120200061111130400141515160400140115170400999299099999999990991909919999199991090919990990993909999009 -080808090900101112090900031312141400150212160400171812161604041805010600990999099991999921999999999919099199991999091119009030999999 -080808030900100604040900111112130900111113130200141515161600040115170500999290999999999900009999999990919909999099190919903999999009 -080809011000110809101000110609120500111309141500041616021704031818180400999999993999019999900999999909099009090919099919099910929999 -040808010500090808101100091212121200131314140400041315020600031617171700099999993099901999991909999999199999090991999110991099929999 -030501040400080909090900081011110400081011121200021013121200141406151600999992030099999999199991999999909999991909991909909990999009 -080109090900081011040400081212121200080413140200150616141400150516160300999999309090009991999999999900919999190909999099999992990999 -080401090600081009090500081112130400081412130200151512131600150403171600999099039990990999019900909909999999199099199999990999999219 -080901101004081112121300080512121304141402151300141616171304061819200300099909030999099990999999900099199991999919999919099019900929 -080809021000080804111000011212051000131414140300131315150400061615150400911199990999099991909939999909929999999099999990990999900909 -080109100400080809091100121313131400151515040500160217171804160617170300999099390999090910990999999199009999991999991191090992999999 -080809011000110809121000041309121000141509021000160406170400160317170500909999993990901909999990999909999099190001999990999999992909 -080803090600080810091100021210091305141210151604171210181904171201181804929999999099999919990999990199009199909990090109099390999990 -060808010904100808110904121213140904121515150900161617021800031919200500999900993999991009099999000909999999099999199001999919929109 -030402080400090909101000051111101000121212130100061415150400141416150400991992011099999999999999099090199999390990999990999999990009 -040601080800090909090400101010111100121313110200141404031500141405161700999990030999990999019999999090919999990909199999999921990919 -020808080300091006110400121010130400121414151500121414040500120116161600199291999991990999009999009919999090999999999909993090999999 -040106080800091005110800121013111400121013131400120404031400021516171400990990399990990999099910099999999999099999990999919029911199 -040308090900101108091200130414141204021506141200161717181200161717010500999990299991900919999999990109999199099109990910999930999999 -050808010900040808090900101010100400111202130400041414131500031606131500099999993999999909010999999019099919990919099990991099929999 -040809090900010810020600110804121300111404121200141404040300151515150500099999911993190999019999909909999909990999299099909909999909 -080909011000060909111000021213131404151516131404151718181404050318181400099990993999910991990919900190999999909909991999002999999999 -080808010400030402090900100611120400101311141400131311141400051511040400999992913099099999119999909909199091999999999099999990900099 -080909100300080909101000040502110400121212121300041415151500141416010600091299999999999990199999199099109999990919099999999030990999 -030808090400101108091200041302141204151516161200151716160100061818180500999992999091990991099901110999999999199999990093999909909909 -080805010900081010110900061010120904130214121500041616171500041816031500999999903990910909999999090991999019090199999919999929900999 -080609090300100209050400111112121304111112121400151617171400150117180400099290999990199991900990990999909999991999991090993909999909 -030805091000111106121000021113131000140413151004161617181800161601181804290999190999909999909919999199999909001900999109999399999990 -080909090904081011110600021211110300131314140100151316141700150518040400999909099999990900999911929199999919399999990900990090999099 -060809010400020810101100121310101400121304151504121316161700031316051800919990913091990919999909909990909999909999099990929990999909 -050108080800090909090600101111121200101104121200130214150400130416170300999990390999999991990919999999999999991900091109990199999129 -060809101100011213101104141213051100151213161604151204161600021718190300009999909993000099909919999199999990909909999999919999911129 -080109101000081109100400080609121200081302121200141415161704141404050300999999399991000990999999099999999119990919999911099902990999 -030808090900100608090904101112131304141512160400021712180100051919191900999992999999999090009999990109099909091990991993991019909999 -040809010500100809111100101213131100100413020400100604140300151515151600009999993099919999199900999909199999099901990999999912999919 -080304091000080802041100120413131100121213131100061414151100051414010400290099999099199999109990999999999999099091990909999930909999 -080309101100080605121100131414021100131415151104131617150100041819191904921999901990999909919999919999999999109099990003990909909990 -080501040600091010101100121213021400121215151604171815151604171919190300099990930090990991999991119999919909900999999099090992999999 -040803090900100811090900100811120200130811141400150411141400160401050600092999999999999999991999919099199001990999999099909300909999 -080808090900040510110900121310140400151310161600031702161600171706010400999999909999090909909999199099109009999919999199929030999999 -080904100600081112020400081312141400011516161400171717160300051818181804909099090990919999910901999910999399999099299999990999909990 -040108080900101011060904101012131300141502131300161617171700160518040300999990309999099099000999099019999919990919999999999092990099 -020808080300091010111104121314111104151316170500181319202000060119202004199291999999999010999999090190999100099999990009903999999990 -080309061000080409111100120213111104141313151600171818191604051818011600299099999099099919099911190999199099990991999900009939999999 -050808010600090910101100121213100400121204140400151515151600031717170200999990093099090999990990099990199999999991099991999991929919 -040108040900101008090900101011120400041311020500141311151500061311031600990990399999099999900991199099199999999991090999909991990929 -040603080800091004050800111012130200111414151500111414161600041701161600992990099999999909001909919900199991999999999909990399909999 -080409090600080209031000081104121200081313121200141415160400050115150400999999092099199991990910999999999999991900999090903909999909 -020808080300090910041104120910111100131410151504161718180500060118181900199291999999909019999999999199909109909190990099903990999909 -040809030400101109041200101013051400151502141400151516171700060116171700092999099099990990190999999091099991999991999119903999999999 -060805090900100811090900101011021200131311141200011315161200041704040300009999999990909999999999919099199911999990993099990002909999 -030809091000050809090400021104120400131314121500061616121500041616011500299099999099999901909919999190909911099909990999999939909999 -030808050900101010110900121202130900121213130904141516170400060116180400299999910999999999109991999999999999009109990000903909999909 -080109090900081010110400081012130500141515160600021515171704181919031704999999309990900999999999009910999199091990999909019999919290 -080809090900080810111100040412130300141406020400141415161700050115151700999999990999099909012999099909199999099901999199903919999909 -080910030500021106121204131314121200131314141500161717181904161701201904112991999091999091099999999999909999099109990909099309999900 -080808030900021011110904101011110900121314150500161718191904160106190400992991999999999019999999909919099090090109999009093099999909 -040508080600090908080100021010101000111112121300110412121300140315160400909090999999093999199919999199009999999099999999919099929009 -050104080800091011111100101012120600131314120400131315021600031717170400990990390990199999190999999901999999099919999910999910929999 -080801090900080810111200061314151500131304021604171717170500040318181800999999939099011909091990999990199999009991099999909919992999 -040809090500041009091100011012131100141212131500020603130400161616130400009099999990999999099931099999909199091099999990919299999909 -080801040900040810100900111210100900040613140200151513161700151503160500999099939999090909999900999090199999199099199091999990999299 -080909040000010909020000101010110000120404110000121206030000000000000000199993990999919990919999999000999999999992999099999999999999 -080802090900080804090300011010110600121212120400131313140400000000000000911999999999092991999939909990099999099900999990999999999999 -080106090900080810100900111210100400110504021300110314151300000000000000999999300999199990999909999909109990099991999219999999999999 -060809100300111209101000111212020400111313131400110105041500000000000000009299999999999999019909999999109099099309099990999999999999 -050106080400091010081100091210021100091204131100091203141100000000000000999990309090910990919999999999199990999991999929999999999999 -040108050300091010061100041010021100121313140400121313141400000000000000990990309290999999909909119909999990099999990999999999999999 -050809090900011010040400061010111200131314110300131302151500000000000000009999909993909999990909009901999999999919299919999999999999 -040805010900041010110900021010110900120413130900120313130600000000000000099999003999910909999919999190999099999999092999999999999999 -030806090900100802090100040811121300040811051400151511141400000000000000299999909990193909119999109999009099999999999099999999999999 -080809090400030209090600101004111100101212121100051304010400000000000000999092199999199990910990999999199999999093090099999999999999 -040806050900100811090900100811040300121211131400120111020400000000000000009999990999909999999909999909029919199391999910999999999999 -080806090900030210090900011112121200131313130400040514151500000000000000999992109999109999199931999909909999990009999909999999999999 -080801050900080810101000041104120200041113131400061113031400000000000000999099939099099990991909009999919009999999990992999999999999 -040808010600020808091000111212131400111212131400030504041400000000000000999990993091910919090999999999999990992000999999999999999999 -040408080900101108080900011212120200051314151500131306031500000000000000999990099990099999090939919909919909990909999992999999999999 -050808090300100408090600111212021300111212041300110114041300000000000000999290999990900909919909109999999990999309999909999999999999 -080109101000081109101200041109061200041104130500040213130300000000000000990999399990090999909909999999909099999109990192999999999999 -080806010900040810090900110212121300041412121304031404051300000000000000999999903999119901999900909019999999909909992990999999999999 -080509011004080811111004121311111004140602151000041616150300000000000000909909903999990090999900990001999991990909999992999999999999 -080809050600080810041104011213131404121213021504161616031500000000000000990999909099909090090931900999199999109099999992999999999999 -080802090904030810111104051213111104141513131604171717010600000000000000919902919099999099199990990009009099909903099999999999999999 -080801090400081011121304031411121304151502121304151506120500000000000000999099930990019099999929900919999911909909099999999999999999 -080104090900081011090904051213140300121202141404151515040600000000000000990999399990109000199999929991999991909099099909999999999999 -030208010400091008111104051008111100121013141404120615041400000000000000919992193091919009999999999999099090909909999009999999999999 -080809100600111112120200011112121304141414131304041516050300000000000000990099009999191999991939990909999999909909290009999999999999 -080909011004081112131004081406021004151516161004051716160300000000000000099909093999001090999999010909199999909999990092999999999999 -080909090904081006111204081313021204081313141200050103140400000000000000099909999999090090909909190999199999990399099929999999999999 -060809090900080805101004031104101004121314151504120216011500000000000000009999999999099090999990990209909901909913991199999999999999 -050809060300011011121304141411021304151511161304151511160400000000000000000999099293119090919999910909099999909999099999999999999999 -050308080904101011020904121011130904121411131300150601041600000000000000929900991999999099919990990909909091990939090990999999999999 -050809010400100909111100100212111104101313141404031306150400000000000000009999993099999999099911190990999990902900999990999999999999 -080209090900081004040300081111120100131111141500131314141604051718180600919999190290999991099999139999099999099099099999090090909999 -080109101004080811040400121212131300140602150300161717181800051717181800990909309999099919900999099091999991990091290999999999909999 -030808090900101008020400111212131400111212061500111617171700110504010400290999999999019999910999199999909099099919090999990030999999 -050809030110111202131010040614141515161717141515041717181818191920202020912990199390191999110990999099999090999990990999990990999999 -080609101004081109091004081112121314081512120316011718190516202020210216909909990990999999909099900909999909929990993909991090999111 -080809091005080809091001111212120213111114141516171717141804041906042003999109999999099399919999910999010909999909109999990991900902 -080805030909080810060909110410121202130410141515131610141517130418010419999299909999909909999190991099199900099999900099999039090990 -040504080806090909090810031102121210111113121210140415161718141919190104990900099999999999900991999291999999909919090911099903009999 -030808050904100808021111101213131111140415130616141704181916141717200116299099999009919999919900999099990900099991999901099903999099 -040508090310111208061010011314150216040414171816191914171816191914170416990920090990999990091931199909119999190999999099099999999909 -050401080909101108080909101213140215101613140617101618141920042121212103999190039999099999001900991999991909999999019900999099209999 -060809011011121313141405121516141404121516021717040416181717192016181803009909903000909999099990990999109999999991999099909999900992 -080808080403010909100211121209101313121214141315041614141718051604192006999099911923991990991199999999099999900099909999099900909090 -060103080905101104120913101102120904101414120915041614041717181818181717992990391909999099099999199911990099009999990009999099999909 -080409100603111109041212131109021212131409151616131717181920130117212105090090999929999999909999919909199091099019999900093990099999 -040104080309101112080809131415150216131715150616131718180516131920182116990920399990109990199109911909909999999999999999999090900990 -040808050109060810111209131414141409151616170218151616190418202020200304099999900399900109990909999999991990119991990999099919099929 -080805010409041010111209131310141409131502141409161718031919042020061919999990003099900090919999999999999911990199099129900999999909 -080809100104080811121213140611121215141604171815141616021915032021191905900999990309909009999009999999199999909901099919999199921990 -080401090909080810110402121210051313141510031313161717181819041717061820999999031919010990909199999909999099290099909999909999099090 -080808091004061104091004051213131000141402130400140115150300000000000000990909099990990090099901999911909999999319999992999999999999 -080909101004080909111000121212021304051414151604061403010400000000000000999909999990909999900999110091919999109923090999999999999999 -040408010900101108090900040506121200130214121200131515161600130304161600909990993990009909919999099909999111999090999999999999929099 -040808080800090904100600011112131400151113130200161604171700161605170300099999090999990990099931119999919099990999199099999999990929 -060408010900100511120900101011040900040411131300141511131300031502161600909990903999010999909990999909999999990999991909929199991099 -030809011000110612131000141413131000150216161000041716161800041705181804909992003999900919999999999019199919990999999099999009909990 -080809090900010810111200131302110600140415111604051717181800041717031800999999909993110990990999199001999999000919099999999999909299 -080109090400081010090600081010111204051302141500161718141500041818140300999099309990990999999999000919909091999119990199909999999929 -080808010500091010111200061010111300141415151504141416170200040318170400999990903099901909991999999999919999909999199011909190992999 -040108090900101108090900040408021200131314141200131514140600051504160300991990399990199900919999909999199909999999099099909919999029 -060809101000011112021004111104131400050315161404171717181400191919181400019999110993919099919999099099199921009999999900990999999999 -040808060900100808020900101112120900051111040900131313130300040104140400099999990999991990919909999991999999990190299999903009999909 -080801060400080809101104121314051500121314141600171717020400031818181800999999930099000090100909999999909999999991099909999919929999 -080801090900080810090600051110121200041313020400141313150300160417171700999999939099109991999909999919099091099991990999909912909999 -080806090904101011090900100312121200131404151600130517170100021817170400990909099999009999909999999929909199099900999093919999911909 -060404080300091011080800121313140200121313151500121617171700161604010500999290009990999990091909119999909999999919999099999030999999 -080809091000080811091000030405121000131314120100040402120600151515151600999999999999000990009999999299999919399919999099909110999909 -080910110500041210110100131410111500040616111504171716181800031702181800000090999999093990999909909099999901909999099999929199991999 -040808090904010808100900111111101000121205021300121203140600151516170400090909999993919999099999999900109999999991099999999219990109 -030809090900080810111204131302141200131315161604041718161600191905010600999992990999199099109999119999919900909009990999990030999999 -040408010900101111120900131111140900060502140900151515041600031717161600909990903990901909999999919099999901999919099909929999999099 -080801091000041112090600131314141404051315150200161615151700161603181904999099039090009990199999990999919909990099199999999991999210 -030809040400101009021100101004121300141414141300061516161300151516010500219999990099919999910999999900199999190999999991999930990999 -040808010400050809091000111109091000061104121000131314141400031516170200099999993090091990999999999099099990999999199099999991921119 -040808090900100803090900111212131300140412060200151516171700040105171700999990999999929900991999999099919909090909199119903999999099 -080909090900081002111100081204111304141415060300141415160400050115161600999999099999119991999900910919029909999999999999903990999099 -080809090400080806091000110312131404021512131604051712181600191912011600999999999099999912000999900199999199009199990110999939990999 -080105091000081112121000080412121004081306021000141515160300141515171804990099399990199999999909900999199009990991990999999912999910 -080309101000081109101000081213041400151502141400061516161600051704010400999999299999999991090991999091099901990999199999990030909999 -080909100600081112130400081102141400011104031500161605171704161618171700999099090999100999199909199990919399299099999099099999990099 -080601090900101112090900041113140400151102141604151717181800031717051800099990939990919999919900099999909091009910999999999909929999 -080909100300080210100400081104121200081304121200141414140400050115150600099299999999199991990919099999999190999190999990903909999909 -030809100600080811050400021212131400151212041400151616171404151616011400290099909999999919000919909999999999999910990910099939999999 -080806010500080809091004111111121300141414121500031602121704181904121700909999993099090099100999999991909999999919099199021999919099 -080306090900080410091104080212131100051412121100151516170100151516180400299999909990909099909911099909999099099991999993999909990009 -040508080300090608081000091104120200111113121200141515161700041515011700909290999999091999991909099999919901999919990910909939999999 -060809091000041111121000011111131000141415160200141704181804051703181800099999090990990999999939119999019900999909190999009999999299 -080808080500030910111204130914021504131316171500180619201500181919011504999999990092190099109999110999999900199091999909999939909990 -040808080600040910110100121212121300140215131300141616171700140316050400099099090990913999199999999991999010999190999999999900992999 -050308040900020808090900101111111200131415161200171815161200060104161204929990990991909919999999999109999900091099991999903999999090 -080804090400080802101100051212131100031212141100151616161600151501040600990099990999919900119999999999199299099991990999999300999999 -080109090500080809090400041011120200101013131400151616061400041616031400999099399999190990919909019990919999990900999999909999999929 -080209090904101011111100011004030600041213141500161617170500161617181800119901919999999999929930999909909000099009099999999909999999 -080808080400030909100500111112021300111112121300011414141500041604170600999099990992910999919999999999199999999091093990990900909099 -080809010600080809101004050409111000041212121200131313021400031516171700999999993099099009909999099909919099999999199901999919921199 -080909101000080409101100081213141100080315061100021615171104041618010500999999999999909990099919009929099999991999991910009130991999 -040601080800091010101000111213130400111402131500110516161500041716160300999990030999999909910990999901999099999919990991999992900999 -080808090400031011090100120213140400121516141400120506171700121818171704991099199999903921009999909910999199999009099999999999909990 -080801090300080810091104121314141104120614141100151617180200041919190500999999939299099099109990990909999999990919190011909909999909 -030808080400050910111100120902111100040913130100041414130600041414151500299999919099999909199901999099099919399999990900999909909999 -050808090300100811121304101415150200101415151600171717181904040106181800999290991999091099091999919999909919990199099990003099999999 -040809090400061004091100121212120100131414151600021414151600171717030500099999099099900900909999939109999999991999999900919990999299 -080808080400040209100100111109101000111105120600031314151600171717181804999099191990903991999999999990009999999190992900999090999990 -080809030400040909101100121206131400121213130200011515161700051515160400999999092099991900991990999999919909199919993990999990909099 -080809100500081112130100141111151600140602151604141717151604031819041600909099900999113999909909909991999909909919999999099199921099 -080808030400020904101000110412100400111312141500111316160500110116160600992991999090099919999909099999909990099909091099993999999909 -040809010400080809091004111205131300111402131300151516061700151518180300999990993099199001900999099919999919990919099990999199999929 -080809010600080809101000111111101000120413131300040514021500031617041500999999993099999909099999099009919999990999199011999199921909 -040801090900080810090900041110041200131110061400130215161600131705160300999990939999109901900999999999909099099199999119990999990929 -080406030900080402090900101011041200101004131200011415131200051414130400099299909990919909199991999999099909999199993090999999909009 -080309101000081109061204080509021300141504131300011616171700041816171700999999299099199099900999199009199090999091993919990999909999 -080809090900050810041100121213061100041202141100151515161100031717010400999999999099909900099999999990099001199919999991920930999999 -040408030900101008090900111108041200111106130200141414131300040105150400999990092999999909991990099999919999190909999919903009999909 -030808080800090904101000090902111004121213141504050613161500171819011500999992990999909999999991110999919909109991999009909039900999 -080304010900101011090904120213131300041414061500161414171700161605171700299991903999909001919999999011909999999990099999990999999099 -080106090900081010090904111010121200131404121500051617021500031604181500999999309990919099919909999099999009990991999110999999929009 -080809011000080809111000020509121300140615041600140417171804140317181800999999993999119919900990909190909900999999090990099999929999 -040808090300101006091100101012091100051314021504161617180400161601181800990990999299999999099999999900019011109190999190999399999999 -080909090900080510111204131415061204011617171800031917171800191920021804999999990999000009099900090990999319099999999999929919991190 -080802040900080810101100030510101104121314141100121516171804121616010600919099919099999929999999990909199999099091999900090930909999 -040108090300101108121300061114041300151114021300151114161600150414160500990990390290099999909901999999999091199990999999999999909909 -080808080400010909101000111109120400111113140200151313031600050617181804999099099993909990990999199990199999199999190999909021990990 -080809090900080810111100011212110500041213040300141414021500040616171500999999990999009999999939009999999919990910299919909019990919 -040806090300100809090400111202041300111404151300111616151300110116051300909290999990999909190991099919999199999909991900993999999909 -050809011000110909101004110404121300111406151300031402161300171818181300099999093990909090919999009999199909999991999919920199919999 -080106090900081011090904121313141404151617021400041818190300051818191900999999309999119000919909990009199909990901999999999992909999 -080809040300101011111100101004120200051313141400151515151400060104040400990999009299999999919999019009919999999099999991903000999999 -040803060900101011050900021212130900041212131400151616131700041616011700099099029999190919999919999999909991990999090900999939909999 -030809100200060511121204131415151604171715151600171718181600191918011604211199999199009009991909990909999909999990999991990939999990 -080304090904101106120900131114141500021616171700051616171700181818010400290901999999909919900999999100909191990999999999999030999999 -080804091000030802111000121212131300041414131300061414151500051604011500990092990999199999109999999991999099999999090919990039909999 -080808080900051011110400011011110600121202130400121214151600041414150300999099990090199999999939909991999901999991099090909999999929 -080909031000080909101000110212131400110512121400111516041404060117180400992999999999909901909910909909999999999999991099003009999009 -080509101100080602120300081313121400041315041400011617171400041617171400091199919290909999199909999999999090999109993090999999909999 -030809100500061109121200131402121200131515161704131818191904131818011904299099190990199999199991999919909999009190990919099939999990 -050308080800091004110200121010041304120614131300121515150100121617181800929990991990091999901999990990999909999901999993999009900999 -060809090900010810050400110810041200131414151500131414151504021617180300009999900993999999990919999109009990999999999999019999911129 -080106050904080810110904120413141500120216171500121803171500121818171500999909300999099010000999009999999100999199999999999299999999 -080309091000080406111000081213021400081515161400171715181404170504011400929999991999900990919990019999999099199991999009090039999999 -080808010900101112090904131104141400021115160600171105181800171903181804999999903991119019090999999199099909091900999999999999912990 -080808060300091004111104091205111100091314020400151516171800151501171800999990990290099099999990999909199011099199999100999399999999 -080109090400081009091100121314020500120415150400121615171700121616060300999099399991090919990911199999199099099991999099999992999099 -080801090900101011110900121311141504021616050600171616181800030404181800999999039999190991999919000199009199999999991909920099999999 -040808040300090805101004111202101000131415161700131818161700130118160600999990990290999009099909199901999991999099990910993999999909 -080901101004080911101004120913141500121602050400121617181800031906181800999909939990109099909901909991909919999900999909991999929099 -080809010400060809101000110212131000041415161600171705161604031818181800999999993099009909999901119910099099999109999999020999999999 -060801090400101111091204131111141200020514141200151604171200031618181800099999039091900019999999999100999999991999991990999009929999 -080808080600090909101104021213140100151613171700151613171700040305180400999999990099910019919910939019099999999999999999902909999009 -030809101100121209101104020605101100131415101104161617180100161619191904299999199999909010999999009199999119909910999013999909999990 -040808010600040808091000111111121000131314051004151614021000151514170300099999993090901999999999009999999909009999999011990999999129 -080109050600080809101104121309141400150216141404150417181900150317171900999999390099999019900910999919999100909000999990999999929999 -040108050300090808101000041102101000121212121300141515151300041616160600990990399290999991999999199011999999090909999999900990999999 -080901100600111212101000051212041300141415150400140216161600041717170300099990039099909909990999099910909999999199999199900992999999 -030804090400040810101100120810101300120214140100040614140500151515161600290999990099999909990909909919099919390099999990999009999999 -080609100400081111100100051111101200030413131400151613131704151502181800900099909990993999999909909999109999992099099099099190991999 -080109091004080809091000111111021000121304141004151316140500170618140300999909399999191990999999919009199999900909099999909099909029 -080109091000081109061004121313141004120515021000121617181900121616030400999999399999109009199909190990199909199909199991999020999999 -040808010904050808090900100211121200101314121200151306160400031717171700099909993990999990991911199900999999991900999990920999999999 -080909090300080210110500041210110400061310140100151510141400151504160400999299199990190999999900009999999901390099999999999009999909 -040808010500090808101100091212131100091412131304091402150300041406161700099999993099900999919999199999999909909919990919909912990919 -080609091004111109091000041112131000140212150100161705151500180319191904099900999999999999909990109099199119391099999099919909929990 -080808010400050209101100121206101100121213101100031415161100041715160400999999113090910991999999999990999990992909999090990990909999 -080903010400080910101104120910130600050214141504161614141700161618191700929999993099990009919909909919199019009999099999999909990099 -080403090200081011121300081005141400151515141400161616161704040618011700099199921199919999091909999909999999999901999990009039990999 -080609090500101009041100120413021104121413151100121613171100161613010300099090999999999900009999910999199001999999999919999932990999 -080809090300101011021200101004061200041314141200151314141600041304010500999299019999911999999990999009099999199999990090909930990999 -040308090400101111090500121113021400151613041400151513171400060113171400921090999999990909919999199009999900999999999100903999999999 -050108090900101108090900101212131300100412131300100402141500040316160600999990399999009991909909999909999999999919990910909910992999 -040108090900101008110600121308141400121313141404120215160500121704180300999990390999000919999909099999999999909999091119999919900929 -080909030500080810111200131314041500131302161504171717181500060104181500099999992099910909199999999991099919901990999900903099999999 -050308040900100408080900110612020900131313130900141515161600041515011600929990990999099909919990919090999999990909199909909939999999 -080304090904081011120400131313131400021516171700061816171700181816010500299909900990009919990999909199999119990999999019999930999999 -080309051000081109091000121213061000041202141400151616141400041616010400929099999990999990199999099991909919990199990919909930999999 -080809031000080811111000040212131000141412151604141412151500050617010400912999999999999991909901999909009999009999999919909030990999 -040809101100011212051100131313141100060215150400161615151700160304171700000099099993999999109999099910999099099199999990999099929999 -040809101000011111111104121212120400131415020600160503171700161618181700009999900993999091999999909019999911090091999999999219999999 -060801090900041010090900111212121300020514141500161614141700031604171704099999039999909909199919909199009099991999099999999099929990 -080801090900101111110900121314141404020604151604170305181800171719181800999999030991999910999990990190099099001999099999992099990999 -080804010904081011110900121011110900130206140900151603171700041616180500999909903990190909999999999019099909990190999999909209999909 -080109091004081109090200041112051300141512121600171518181904061518180300999109399190199999901909999909919009990909199999009992999999 -080906100300080909111200051313141504011613020400171717181804191919181800990999990290909990991909910999199309099191999919090999999999 -030808080800040405020904101112120900101312120900141515151500140116170600299999991999990000019909999999999919990199990999993099999009 -080904010400081010111100081004111100021212130600141412131500030504130400009999993091919999999999099199009199999199999990920990999099 -080109101000080811111000121211111300050214141304151617181300190306041304990999309999199990999999909991999019909109991909919009929990 -080910100300080504061100081202111100131415161700181819191704180119191704009999999299990990099991199019999190091909999099093999999990 -080809100400080809100100110205100600110404121200111314121200030414140400991099999999193991999910909999099099999909990909920990999999 -080804040300040910101000111202131300111214130400111214141500110501060400999990000299099999199991999999999010099999999990999300909999 -030805090900040810090900021112041300141414141500061616171700181818011704299999909999909901990919099190909999099919990919999039999990 -080301040900081010110900081012130900021415161604171515161600170506180400299099939999900999099999099110099199900999999999990900999099 -080103050900081011040900121311140900150211160900151711161600061717040400999099329991909919999919909919099010999099999999909900999999 -080808091000041105091004121313091000141302151000141416171800030416010600999999099999999000099999909099999091199919199191920930999999 -040108090900101011050900101012121200131314141400130215160400040615170300990990300999099999099999999190999999999199099119900919999929 -080801090400081011090400061012090400041002131300041414131500031414051500999099039999100909999991909991999090999919090999999999929099 -080809090300101011090400101002121200131313041200141516060500040117171700999299099999199999110999199919999990990199099099903009999999 -080309101004081102121200131405120100130615151600131715151804130419191900291909911991199900999999039909099999099999090999090990999999 -040808030400090910101000041112020600051113131300011114151500041104151500999990902099999990199909109999199019999999993009999999900999 -080603090900080210111100081205041100081213130100141513131600040404161600092999991999119991999999999990099019390099999999900909999099 -030809101000110809021004110809041204131313131400151516171800150619010500299999999990111099991999990999019999099999199001999030990999 -080909090904061010110100121310141400120502141400151616171804031616170400099900911999993990909909999991999909999910091999029990999999 -060108080400091008111100090904111100121302050300121414141500121617041500999090399991009999999990999019999910999919299991999999900099 -080909101000081103121004080213121400081516121700060518121900041818011904999999099991299099990911909901999999090019099919999939909990 -030809100500080809111100020409121100131313121400041504120100061616120400299099990999999919999909999190909991099999990903990999909009 -040803060900100804090900020811121304141411150500141411161600171701161600929990990999099909909919900199009999999990999109990399999999 -080809011000080809111004121309141504121206160200170318181800171719040500999999993999001090991909910990199999190999199299999990990099 -050406080800091002110300091212131300091212131300141516161600040117170400999990001299919990199999999999999990990919990199903099999909 -080808010600091011121304091415131300091404161600090217161604051819190300999999093090110091999990999990099999999199999199090199909929 -030809090600101109090400020405121200131314141200151514140400041501161600299099199991099919090999999109099999999199999190999309909999 -060801090900041010090400111104121200051113121200031402151600171717171600099999039999910909019999999999999091999019999000929199999999 -050809090900100808060300101011111200041311111200011304021400041315160400099999909999999999002999999009999909999909193991999910901199 -080109091000081109061004121313051000141313151604170218180400191918180300999099399991009010999999099199999990001999091199909999999929 -080109100500081109101204081111101300081402151600171804191904061803191900999999399090999099090999109999109911990199099099009999992999 -080805090400011011111200131313111200141515021200161515170400060317170400990999090093990991099999999091999991990991099999909999992909 -050404080400091002081100091206081300091214140300091214141500161601151500999990009099119991990999919990929999999999990199990309999999 -080809090300100209091100101204060400101314150400131314140100041616160500999299099999190991000999999919999990090999999193900999999909 -080909101004030902111100040412111100130612141500160512141500171812011500199902910999999999199990999099099909090999999919900939900999 -080106090300081004111100081202111100131415151600171415161600171405041804990299391991099999999911199009999909990990999999999090999900 -030808080900101104020900101111121304100514141500161614171800161604010600299999991990900999919999910990919999199091099099999930990999 -050808030904100808090900111111061200131414150200161714181904202020011904999200999999999909091999909099919991190999990910090039999990 -040805090909080804021003111213141516111217181806111219192020110119192020909990991199999209019991100990990990999909090999993999999999 -060809090904030402101001111213141015161713141515181813141919042013051919009909919199999320109911999909909099990999099999990999909099 -040801090910110812090910130812121414131516170414131802040619130520202003099999939990199909909099909919999990099109909199090109999992 -080801090600080810101100121314101100050415021100031616161104041717181800999099930999999990099900919099999909199901992999099090909999 -080910110500080910120300040904131300140902131300141515151500141604010600999099990990092999919990999099999911999199999999990030909999 -080804090904080810110100121212121300140215161300140517181304140319190600999909900999003999919999909919099190999009999909099900929999 -030808080600091010021100091010121104130414140100151516140500151517180400299099991999999999919999100091999909390999999000999099999009 -080805090900080403090900100211111204131313141200151516171804151501061900990999099999929909919911990199999990099010999990099390999909 -060808050400030908101100120904131400121515151400120216161400120416010400090999999099909929900999999900099999999191991990999930909999 -080909101000080911100300120213141504121617181504121919191504120106200500999999999999912900199911900999099900909099991999093909999009 -080910011104021212121100131306140400131303141400040515151600171815151600119901913999990919909999009999999929999090999999909999900909 -060808040900101108120900021113130900141113130904151616171700180301051704999990990999099909909919999199999919901910099999919309929990 -020808080300090410111100121310111100121210060400011414141404151516170500199291999999999910999999099909999900999199093999090099999009 -080808090300101011121300101414050200041414061504161717181500191701181504999299901999091999001999999999919999900900999911909399909990 -080409090900081010040600111112020400111113141400151515141400050116040300999999009090999909909999199991109919999199999999903092999099 -040108091004111212120200061305141500131316141700041816141700181816140300991100319190999900001999999999919990990999999099999992999999 -060108080800091011121200131411120400131304021500161605041500161604031500999990309990199999990900199990199999199090999099999999990929 -050808080800010910111200090913041200141516161200041502171700061504031700099999099993000999999991099091999099990919999919999099909929 -080809011000020811121000131305141000131315151504161718061904030418181900919991913999919919009999909999099999901099099009029999990999 -080109061000081109101000081212121200131405150400160217151804161604150300990999399991099999909909999199909109999199999111090992990999 -050108080400090910081100090906041200130214151600131703151804131717151800999090399999000999000999999019909900999199099999099299999999 -060108090900100808091104121213130200121213131400151516161700051804031904999990399999911000991990999999919999999099199099990991900920 -080204060900101111090900101111121300031414150100161617170500041617170400199991100999999999990999109290199999399990999090999999909909 -080801050400080409090900101112120600021312121400151504161400041503161400999999930099099909199901909919999199091900999999909999992999 -040508060300090908021000090908111200131308141500161314141500040117171504999990090299919999911991919919999999090999999099903099999990 -040809030400100809111104100812111100101313140200011313150600161617180500099999992099999099099990999990919091199990993990990099999009 -040108080600091008080500111212131400111112151500021616041700041616031700999090399990099991900919909999999990991999091990999999909299 -060308090400101112130500100212141404151512161400151512170100181818191904990090209991900999999911990999099909999990999913999009999990 -080801050900080810100900041111100900041111120200131404151600131417060300999999930999099999099909919999919099199001990991999992990099 -080808080500010910111100121212021300141516061700140316181804140404181800999099119993919999910999199010009999999299099999099099909999 -080309090400100409091100100412131100021212130500061415130100141404130400299091999999099999099909909199999191090999999003999099999909 -080904101000041112121200011313141400061313140300151515151600050402161600090990090999999990099939999999999090999199299999909199990199 -050108080300091008080400111002041200111313141500061313160400171717161600999290399990999999190909099911909990090999999900999099999999 -030809040600101112051300101415131300100216161604171818191904171818011900200999199099909991099999099919099019909909190999099939999999 -030809061004110809041000020812131000141415161700141415181804051901181800990902999991999999009910099199009999099999099199090399909999 -080809031000081109121004051113141004151116160200011716161804061920181800999299999990909099909990090099919099199099993199099099900099 -040808090900010808090900051011121300141516020600141516171700041516030400099999999993999990100999199009109091999990999999909990999299 -080809101000041111041200011111121200131313131400150504040600021616160300990990009999909999999939099919999999091090099999919099919929 -040501080400091008081100090206041100091212131100041212131300031415161600999990039091190999999910909919999999090999999999991099929099 -050808090900030808090900101104120600101004130100040214151500161617171700099999999999909929909990909909099990399191990199999119990999 -030808090500040810090900111102121300111114150400011616160600171718181804299999919090999999109999109999109991999019993999990990990990 -040406030804090902101100090912130100141414151500161617171800160517171800999200009199111999999991139990999999990900999990999999990999 -080309091004080611050200081212131400080415151600171715150100171818180400929109999199099999001999009999919999190099999093999909999909 -030802090400101009091104121313141500041313160100171818161600171818060500919992119099999099910909909099199990399909999999999990909099 -080808010900100411110900121314140900021314141500161605171804161603040600999999903990990909919999999099909119991909099990099900992999 -060808010400090510101100121210101304121214141400151516160200150317041800999990903099099909990999900999199909990999199991999190992909 -080904101000110902121000110904121200110904060300111314140400050114140400999990900999119999999990999999029999999109990090903999999909 -080603050904081011120904081302140904151617140900181817191900180117191900999909020999199091909991100099999091999099999109993999999999 -040801090900041011111200131411111200150516171700031616171704181818020600099999030999090909999900999090199099999999999999029919999109 -040401040800091010100800041112060800131302141400151516161400150516160300999990030990990991909901999901999991999099999099999992990999 -080809090904081010111100121010110100051314151604170218180600041919190300999909909999999909999909139910099999000109090999901999999929 -030808050900040410020900111213141400151516141404151517171700181818010600299999910999919900910990999090999999909909199099999030999999 -040809040500011009111200131009111200061009141200041502141200041515030400000999999093100999999909999999999090999919990199999990909299 -080109090900080810111200131314141404131315020500061515160300041718161904999999399099100990199999990999109909990991999999999992900010 -080909100500030904101000110204041200111313141400151313141400161606010400199992909099999991990999999910009999990999999919900030999999 -030809101000110809101000120805041300060214141300151614141300041717010400999992999999099919990919999910099999990199990990991130909999 -080909041000080909110200080306121204131314151500161314151500171804010500999099999090911992091999990099919990999999990999909930900999 -080104090900080810090900111212121204131406020500151416171804151419031800999999309999199909109999990009199909990991099910099199999299 -040808010400040808091000111111111000120402061300051414131300031414151500099999993099910901999999999091909090990919999999999990929999 -080809100400111112130600051114150200011617171804161617171804191919031800990099009999990999009909019909119319909999999999099099999929 -040104080900101011080904121111080900131415060500160217171800161617170300999090309999909019999909999109999900991999091190999999999929 -050401080900101111080900100211080600101213081400151613141400030413041700999990039991990999999919009919999990999190991999920990999909 -040804010400091010101000090911110400021212040600051212131300031415151500099999003099999991099999909199099199990999099909991099929999 -080909090300080210100400081111120400051313140400011313150600041616161600999299109999990991999909909019099999099990993900990999909999 -040808090904050808090600100211121200131415121200161415171800030415011800090909999990999999090911999101999991991991999990929939990999 -080309090400100609090500110212121200041304141400151616140100151717171700299091999999099919090910999919999009999199999913999099909999 -080804090900080810100900111202130300111404151504111617051500110117180600999999909999090909999911199990129199909199999009993999999009 -080801030900050810040904111213140900151616140200171716141800171706141804999299939999009009199900199999919090190999999990999999999090 -080909090904080810110100061213141404151613141404050213171700181818180300999909909999113991909909990919999090900199099999991999999929 -050106040800090909091004111112130200111415151604171815151600171818031600999090309099990090199999119999919009900099999999999999999929 -040308050900100611040900121213020900141415161600141515161600040117171700929090919999099909109999109909199999999099999919903909999999 -050809100400111204130400111214141400111215150200161206151700160103171700090099000999999999900999999999099019199999190099993999999299 -080902100300080911101000080411120400131411151500161606151500160104170500991999919290999999999909009099999010999199999099993900999099 -080409090900100411050300100612131300101415131300101416021700040116171700099990909990999999002909999990999919999911990919903999999099 -080809041000010809091000111205061004131302141000151616170400031818181800999099999993090991909910990199999919099910091999929909999999 -080904100500080902111200081313031204081313140600151516171700150104171700909099990990911999199999920999999099099190999009993099999999 -030806090900050808090900101102041200131104141400131515161700131515010400290999999999999909190901099999909009999190999910999930999999 -080304090904101111090900120211131300141415131300061615170100041615180500299901909999999919990911999901999991999091990993999999909009 -080809091004011109091000051212021000131312141000151304160400151706180300919909199993999990919909909999199909999991990090990919990929 -040801091000040808090500111111111200131414031200041415150400060215151600099099939099909909199999909091999999990992999999991990901909 -040802091000111111121000050613140300151513161600151513161600040117170400091999011999990909119999929909999999999999999109903090999999 -080808010400091011121300091014141500090614141600031702181804191705181804999999003099909999910909909999999099099919099199029099919990 -050401080800091011080800121211131400151611131704150218130400031818130600999990039990009999900991999919909999909199090199999999929909 -080804091000110212091000030513091000141414141500161704181800161606011804999991109999199929199999199909109999999091099909990939990990 -050108090600101111121200131402120300131515161604131517181804130419181800990090309991999919992911199999999990909999990009099099990999 -040108090500101011120600101011131304141502161300171717181804191919180300990090309999000999909999990199999111990991999999090992999999 -080401090904080810111100121210111100121210021304140510150300141406161700999909030999019909999999999999919999100991990999999912999019 -080501091000080811091000041213141000031502161704151518181700040618181700999999099999009999199900109999109910902999999990909999990999 -080809090300080809091004111102121300141115051604141717161604140118190600999999999299999090091999119991099119909999991999093009999009 -040108030900101008111100051212111100131312140200131315160600041716160400999290999199909901999999999999919901099909099909990999909909 -080405010400090610111200131313111400041515111400031502111600171717161600099990903099010909199999909091999999999919999990929199999999 -040806010900041010100900031102121300141414151300161615151300051617041300099999003990991999991929119911099999999099999999909099999099 -080809100600081112131400150216130100171818131904171805131904032020201904900999990099110991099919939190999999909999999900029909999990 -080309100400111209130600050214151500161614151504171714181900170114191904299091990991900901909999999919999999901990999009993999999090 -040806091000010808110400121313110200121305111400121515041400121604031400009099990093919990999909919990919999999999990909990999990929 -050801090900101010110900121213041400020615150400161615150400161603171700099999030999909919000999999190909099991999999990999909992999 -080804090500080810111100011210101100131204030400130614140400130214141500990999990099009990999939999990909199999992999999990990911909 -040308080900101006080900100211110900040411110900121314151500050104151500999990299999909999909911999999999999090019990109903099999999 -080104090500081011121300141011150200061011151604171011151800171704031800999099300990990909990991119099919999909999190999999099999929 -080809090600080809090100101010110200121314041500161317041804161605031800999099999999093999199999119090019099999909199990090099999929 -080808090904050210110900041204110300131414141400131515160600131501171800990909099990119991999900929919999099999199999909999300999909 -080805040900030802100900111112120400011112121300060404141500161616161500909992990999100999199999999999909319099990099909900909999999 -080808090900031002090900051010110400121314111500041316171704181306011700999992919999999999109999199090909009099991999099009039909999 -080808090500101011120100101311141404150211161700150411181800150306181804999099900999913990909991990919099199099099099999999999929090 -050808080900101103120900111113020904141413151604141717181900041717010600999090999999921909999990910999199999109009199901999930909999 -080809090900080810031100121212131100011414020500151414161600040617041604999999909999092999099999919990109399999991990919900099999090 -080401090900081010110900081010051200131302141200131504141600060404140300099999939990900999999999099901999991199909190999900992999099 -040108080804090909090400100605111200131302140300131315151600171718161600999900309999990919999909919190129911999999999099990099999099 -040808090600101108120300131313121404011515160200171515180500171719191904999090090990992990999999910990919399199991990910999099999990 -040809021000051109091000011213041000141515160300141515161600140406171700091199099990999990109931999909929999999999990909990009999999 -080809090300040209100600111213101400111104100100151616101700051616041700999299099999199901990991109999999990390999990900999909909999 -080501090900081011090900041212131400151212161600151504170200040317170600999999039990019999019909919999919099999999199901909990992999 -040809090400101111121200021111121200131414141400150516161600150301060400909990099090999999999919099191999999991919990999999300929999 -040308080800090910110400091213130600021213131400051515161600041515011600999990200999990999099999999199909119090919999919999939909999 -080304090900101111121200130211121200141414140400151515051604060117161600290991990999999919999911099991909999999910999999003099999099 -030808050900101112131400020612131404150412131400161617171400161601170400299099199091999919999909090199999999991090999190999399999909 -080803090900080810091100051010121100011313021104141516171100060418191904992999999999999900919999999990199399909911990010909090990990 -030809091004110809091004110802121300141414141500041617181900161601050600999902999999999099900911199999109999999991099010909300999999 -050808090400100803091100040212091100131212091104131414150100131414160600999990929090999991999999999019999991009991999993999909909009 -080901101000111213101000051415151604171702181904170306181904202020201900099990039999109901990991990991909910909909992999099909999999 -080809090904080810110600121212121300140215161304171818191904200318010500909909909999900999909999999991199119001901999999019930929999 -050809090300100811091204100811060200100811131404101516171400181801190400999290999999991099991999999999019009909900999011990309999909 -040808091000030802111000121314051504061614141500171718191500171718011504090999910992990999199909990009099999999091999000999939999990 -080801091000080809090600051112131300141415161604171702161600170304181904999099939099999990019900999999199991909019999199999990929000 -080409011000081111101000121106130400120305131400121502131400121617041400909999903999909909910999099999999999099209999919991199901909 -080809101000110802121304110314150400161616171704181819171700181806010500919999910999990092100999199099199990909999999009999930990999 -080106040900081011121200080411121200081311040200141516161700140503171700999099309090119999999909999999919909990090199999990909999299 -040802090300101112131404051112151500041112151500161612170600161601171700001999911290991009999999999999999900990990099099999399999999 -040808080800010910111200131302061200141415041200141415151600040317170500099999119993900999199990099901999999099999099999909190992999 -080803091000080209090600051112131300140415161600171717161604040118181800929099999091099991999991999091099090990919999999003099999999 -080803091000080211091000041213141000011513130400061504161600171505161600929999999991909991099901909999009319999990999099909999900999 -080309090400081009090500080211121304140615041300141515161600141718011600999099299991999999900911900901999999999990099919999039900999 -050308080800091010100400111212021300141212061504141416151500041701181800999990290999990909919999919099019999909099999019990309909999 -080801050600020910101104120910130400120914141400120915161700031515041800999990930091990019999991009990999999999900999990929990999909 -050308090400100408090400101112021300100612131300101412151500041601151500929090999999919990910990919999999999999091990019990399909999 -080403091000081111061200081111130200141516130500141616131704181801130400992199090199999999991909919990999009099999999910090390999999 -080805010900101011110900120211110900131414060900150414041600030417161600999999003999199991999919909190999999091999099090929999990099 -030808090400101111090400100605091200101314091200021516161204171816011200990092999999909999990999099909999909991900999190011939919999 -060108090904101008090904101008111104120213141400151613130300171819200500990900399999099099999999990199099110999999990092909999900009 -080803090500101111121304140411150200141617151500141618180400140118180600992990991099991009991909999990919991999919090199993999999909 -030809090600051010021100121204131100121204141100151616140100041616140400299099190999919909919990919999999990199099990993909999999009 -080106091000081111091000081211090500080213131404151613131700180404031700999999309999990999999991009919999019009099090999909029909999 -030808040904100808021100101212131400151212160100150616161700151818050400299009999099911999991999919099199090399099999990999000999999 -080809100500010811111204131414031200131506161200131717021200131704180400900099999993099091999909999910299999199199999911999900999099 -040808040300090805101000091102101200061113041200041114141200041101151200990990999290999990099991199999999010999919990999999309909909 -030808090400101009091100101004120600130212121400151515161400170501041400999992099099090999999999909910999109091999999909909309909999 -040809091000010811021000031111061000121314041000121516160400120516160400019099991993919999909929999909999009099009999990990999999909 -050603080800090909020800101011120400101013141500160417171704161601181800992990099999991999019990999990109990090091999999099309999999 -050104080600090909091000111213140400151213141400161217020400161217170300990090390999990900910990999099999999990991999910999999999929 -080309101000080611101200080213051200041414141404151616171800151616010400929999919999990990199901999919009099909991999900999930909999 -040108080400090908081000111112121300111105120600021414140300151516170400999090399999090991990990999999909999991909991992909099999009 -080801090900041010090904111010121300111414051500111603060200110417171700999990039999909099999999119909019999999099190990999291990999 -030809090900100811121200130814121204050215150400161717151800160117040600999992909999999919099910990919099019999999090910993900999999 -040809090600030809091004110812131400110813131400150216171800041616010500099999999099999029090919999990999999099111990190909930999999 -050108040900101108121304141414121504161718120200161818121900160603191900999090399090199099190999110909919099999099199999990999999299 -080809100300081109121200011309121200041409021504161717170500160618181804999299091999999990999939999919199019009911090999999099990990 -080805030904060802100904111213141400111115141400011617181804191920181800999209909990911090199999099901999999999019993199090099999099 -040809090500080803090400100611111200021314141500161614140100041717171700909090999999299919990999999100909119099999999093990999909999 -080909030400080909101000110205101000111212131300111415161300061704010400992999999090999991999999999910909999999910990019990030909999 -030809090600080804090400101102121300101414051300151414161304151718011300299099999999990991009991119999999090999999999901099039900999 -040108080800090910110500090912130600141412151500140212151504041616170300999990309999090999909990009199099999999199999999001999999129 -080804090900080802091004030611041000011213131000041212140500000000000000990999999999109029199999909901999319099990990990999999999999 -080304010600080409101100021209101100131209041100041209051100000000000000299999903099019919999911909999999099090999999909999999999999 -080806090400080810090300111112091304141414140200151516161604150117180500999099909999902990999990010999919999999990199199093099999009 -080809090904081010110400041010031200131405151500161617020600160118181800999909009999900999999999929009919909990091999190993119999999 -050108090400101108060400121208131300121414131300151514021600031717170400990090399990909991990991099991999999990999999910999910929999 -080910031100081213131104080213041400151516171804151516160100051919190600912999199999999091990991999091009999009990999093999909909909 -080910040300080910111200080902060400081313141504161613170100161618180500999999990290911999199999099901909999009090999993999119999909 -080909100600080811121300011405021304151616161304171819191304202020190300999099900999009990999930910919199099900099999099009992999999 -080803040600080209101100051213141500161213141500041217141500041717011500929999990091900991099999999099999019999919990910999939909999 -080804030900080810111100121210020400121210131300141515130500060104161700999299909199099999919999999999109999990009999919903900999009 -080901101000080911121300081414121500081402121604040517170600041817170300999999930990000999190999999999909919900019099999999999900929 -080808080500010910100600090910100200111213141504111613171800041613030400999099099993199999990999919009919909109991090999909920999999 -030809090904050404021000111112131000111114141000011516171700061515171700219909901999999900919999199991999919999199093009999999909999 -080910100600080304101100021212131300041212131300141415151500041404010500199999299099990919090919999999999099999010999999909030999999 -060808010900101112130904041412130900151612050904170318181900171718180200999990003990999099999900019909999090900999199299999991999919 -030508090600101011120400101011121300140211121500141617181804161619011804990092009999999999990999999919909999099100999919009139991990 -080909090900100611110100051211111300141204151304141216041300031717180200099990009999993909999990919999999999009900990999999091929119 -080808091000011111091004121111091304141502161604171718061605171719200300999999099993999099990919000199099119900910999999099199999129 -040809100300110809101200131409100200151416051704061416181804191401181800909990999299991909999990919099919009909990199919009399909999 -080806090900080810111100011213021104141313151504141617151500140405180300999999900999109991199939190999199099909099999099999019909929 -040108040900101108120900101104120400101113120600041102050300141414141500990990399990000999090999999999999919090910999999999192999919 -080909031004080511111200081311121204081415060200161615171800161601192004999209909199999990999900990990919909999090199919999311999910 -080801090900060810100400111210101300141402151600141405161604031717170400999999930999990900999900909999109911999909999999029900999999 -040801060900050810090904111213140200111213151500041213031504000000000000099999930999099009109900119999919999990992999999099999999999 -080301090400080810090900021110121204060410121204131313130500000000000000299099939999909919999911990099999990909090999990999999999999 -080409010400081009091100081012131400151516021404151506171400050318171400909999993090990999910990199901999991909901999999909999992199 -080808010400060910101004111112121300140212120500141415161600170304181600999999093090099090910999999999909119999999999009919999929009 -080808080500090910100100021112100400131406151500131617170400130317171804999099909999193919099919909010099999999190999999992990999900 -080904100300080910101100080912041300040912061300141412150200040112160500999999909299999999091909099999999090999099199191903919999109 -080808080400050909101000111109120400111113130200061415031600041701161600999099990999999909909990099999909919199199190199990329909999 -040404030800090909090800061011020800121314151500051313161600171717011600999290009999999990099909119991999091990991999909999039999999 -030809091000110808121000110413131000110514131004021514160100061714180400999092999999909990909999999999999999001090991913991999901009 -050809100400030609111100121213111100141202151500141616161600140417010400009099090999999929099999999990909911999999190999999030990999 -040403080800090910080800111210100200111213140600051215161600171201041600992990099999999990991999919991909090999910999099909309909999 -030808090900050804090900101112131300140212131304011512061600151512171804299999999999909901990999999019999019909999093999999900991000 -080401040900081011110900081211110900131304140900150214141600151705060300099099939990099999999991909919999909999199999191990002909999 -040808090600100808110100101012121304141415150500031402161600171819161604099099990999903999919990900909109999999910999999929199911990 -080910111200080813030400140515151500161616020600171818191904170118191904900099099099929900199999999099199991091999991909093999999990 -050108090900101011111100101012130400041415151500141402160300041706161600990990309999999999909990099019909909999999999119990092909999 -050806090900010810110900040812121304141412121300141516021300031704181800099999900993099999909991900009999999999991999119991909920999 -080903041000110412121200020513141400151513141400151616171700040601171700129091999090999919990909999199999990999109999909900399999999 -080809031004110812131000110212131000110414141004111516140600050117181900912909999999999991999910099999099099009999991099903090999009 -040308080804090910100200090906101100121314151100051313161700181818010400929900999199999999991999909000999990190991999900999030999999 -040804090300040808090600041010091100121204021100011205131100141414151100009299999990900999999999099099199990999991993999991019999109 -030808090200100808041104040512131300141414131300151617180100151606181800291199990190999009991990099999999990990991999003999099999999 -080808091004031112131000141515021004141416171800051919181804201919010600990909990992199999109999110999919900099999999909009930909999 -080802090900101010100900041111050300011111121204131406151500161704151500901999919999999999192909999999099390909000990999909999900999 -080304090900080610100904081110101204021313140500151313160100171717161600299999909999999090990999900109099999091990991913999999999099 -040108080800090910100500090910100600111213131400111516040400021717170300999990309999090999999999999100909999099099099009919999919929 -050808090900040308090900101104120200131313131400041515161400061501171700099999999999219909991909099909019999999909990911999390909999 -080801090500080810110400120210131300121415131300121416171804031404061800999099930999199919900919999910999990999990099909099009929999 -040808080800091010110500091006121200090213131400090415151600170301150400099999990999990999909999999900909119099991099099919390929999 -080109031000081109041000081209131000041409130200151516050400151616170600999299399999909991999901199909919099199909099099999909999009 -040808090600050808100100111111111204131314151600031702151600181818150400090099990990993999919999900990109909999999992919991199999909 -080901100600051112131304141512161700141512171700141812021900140403191904099090030999999090909900099999999991999991999091990999999290 -080910110300051210110600131310110200141310151604141717180100041717191904099290099999999990990999919999919991109019990913999909909990 -040108080800091011111100090405121200090406121300090214131300151516170300999990390991099990099999999999999999999000991009991999991129 -080809090200011009091104101012121304141505121604171818190300171818200600999199099193199099091999990900919099900990290999999909999909 -030809090400100811110400020512111304141415161600141417161600181818010600299099990991999919990909090190909999999909999119999030999999 -080409091000080809111004051212131000141212150100161704060300160218181800909999999999090009009999999999099091390100999999991992991999 -060108020400091010111200131010141200131514140300161617051804161619181804991090311990991999999909999909929909999099999009099099999090 -080809010400080610111100121212111100020413140500151504161600151503171700909999903099919990199999999190099099091900999999999909992999 -030809090400100809110100101202111300101404061300041515041300051515041300299099991999993991199901909900999999099099990990999999909909 -030802010600080809101100121210101304121214151300161718151304051719041300919992913099990999190990990990999999090009999999009099999099 -080804090600080804101104121314021100121313051100151617171100150117170300909099990999909090909909119991099999990109999999993992999999 -080409091004081109090600011212121200131405150400161616151500021717170300999009099090999990099939999919099190091999999999919999919929 -080803091000080609091000021104121000131415121000131615121700130504010400929999999999990910999999099109999199099199999110990030999999 -050104080800091011080804121213140200120615161604171718190300171718191900999990309990119009919990919990919909900991999902999999999999 -080805030900080804041000111206131400121215150200161617181804160117181800909299999199099909901990909099919999099099199119093999999999 -080109030500080909101100081204021300141215150600161215171700181804171704999999392090991991991999919090199919990999099909909999999090 -040108090900101111090200061111121200131403121204131516041700181805171700991990319190999909991999999909999092909090099099990099999999 -080602090300080410111100081212121200011314151500161617171504161618050400901999911299999990199909999919999300999099999099099990990099 -040602080300090909080800041010110500121010110400121314111500131304010400901990919299999999190909999999999991099909999090909030999999 -060104080500091010101000090911111100121213141500120416140400021717170300990990390099999991999990999919009909999909099099919999919929 -030809040500040409021000111212121000131313131000041414141000041515010600210999999099919900919909909999199999999919990999999030909999 -030808080804040909021000111112121300051112121400151617171700041818010600299909991999991909091999999999919999990090190099909030999999 -080901101000111212121000020413131400151617131400051603041404181818180600199991130999999910900999999199999119990929999999090900999999 -040808090500101108120100101314121200041515060300161515171700160402171700099099090999913990199909999091999990999999290999999199990199 -080909031000080905111204081314020400081314151500161317171500060117170400099299999199091090910999199999999919999900990999903999999909 -040809051000061109091204130214151604171714151800171914151800031914011800099099099099099009900901100919999999999999999090929939999999 -080809090400080209100600031111100400121111100400040413130100141414140500999099199999190929199999109999999099099991999993900909999909 -080909090900050402100300011111101204131111141500161717181800161706181804099990019299919999999939100999909099090900999999999999990990 -080808080400030910111200130910140500131315150400060215150100161717171704999999909092990999900999999910099999099199999993901919909990 -040808080800090210101000111212120300111104131300141516130400140105170600999990099990199991992919999999099909999199990090993009999909 -080801050900100811110900100612020900100413140900100415141400160403171700999999930990091990999999119991099909999919990999909209909999 -080403060900101111111200100513130200101414131500101414161700040401161700099090929099999999910990919999919999999999190911900399999999 -040408080300090208080400101111051200011111131200041414131200151514061200999290099991199919990919099999999390099909999999909999990909 -080801060900081010101000111112051304111114021300151616171700041616031704999099939090999991090999090999999911990901999999909999999920 -080910011100081212131100141212131104020415161600171705161800171703060400009999903999919999999919900190909909991909999990999900992999 -080809100600080811120100130511141404130215161400031718191904171704191900900099990999993909919990190991099919999190999909029099999999 -080409010400081009091100121212131100141402041100141404051100030604151500909999993090190991909999999991099919999999999090920990999099 -080910031100081213061104051212021104141516171100181819202000181819012004002999919999999099109999110099999000099999199009999939999990 -080808080400090904100100111111110500041212131300041214021300031514060400999099000999993999919999999099109990999999990911999900921999 -040806091000011111091000041213090200041212141400151505141400151504030400009999099993990990199909119999919999990099999909999920990999 -040108080800091010040600111012121300140412121500140216160500141717160300999990309091909919999990909199909099999999091199999999909929 -040808080300090910111204090902130400141415151500141416170500060116171700999990909299991099019999109091999919999900099999903999999999 -080808090400101111120100100211131404101516160400101516160600031717180500999099900999993991919919100900909999999999999990920909999909 -080808080500040209100100111213131304141516160600031718191904171718191900999099119990913991099919990100909999992099999009099999999999 -080806090300080809091000110502121004131415121600171414120400040118181800909299999999999909199909990091909991090999990910903099999999 -040809090300040809091000111204101000111205021300111214131300061201150400099999999290999990909999099999199999199909990019909309999909 -030809091000050804041000020804111000121211110100121313141500041313040600299099999999099909909910909199999919399909999900999900909999 -040601080800090910111200090910041300051410150200141416151700041616150300999990030999911999991990909009919999199909999991909992999999 -080808090900031010090904111010121304111415161304060217181900202020010500990999909999999029999999900990099190909109099919901130999999 -080401090900081011090900081211111300051214151304061616021300031616170400099999939990099999909909909091999991909991990919999909929909 -080901101000080911110500080911110400121213140400021515161700061515030400999999930999990999999990909091099919091990991990909990999299 -060804090900010804100900051111101200131402101200151616101200041616170300090999999993099991990909109999999001990919999999909999999129 -040108090900100808090900101111110500100612130400021414131300040315160400990990399991999999090999999990999900091999991999909199992009 -080804040500090910101100060910100400120213141500120413151500120313010400999999000099990909990991999910199199999091999999999930929999 -080109100500081112100400081112100600131312100400130214140400040414140300990099309991090999999999909199999999099999991190900999999929 -040804091000110812121304140812131300151515021600171717170300060105181800990090999099999009999909999900119991991999299999903009999999 -080109090500081010031100081004121300081414021500161414041500040617171700999099309990992999991999919910109991999990990999900990999999 -080109090400080809101100121313130600121415151500120502040300120416161700999099399999000901990999999991999909999010999999999192909919 -080808010900061011120900131311120400131311020400140511151600040315150400999999003990910990990999999999999991090991999090909990992999 -050108060400091008111104121208130200121408151604141417181600191919031600990990399090119090991999919909199999009901999999999029999999 -060108090900101108090900101213130400101413131500100216041500040516160300999990399991009999999910909919999999099199999109900999999929 -050804091000041111121200061111120100021313141400151516161600151503170400090099099090999999999909139991099199991999099999999909992909 -080509031004110409101000121213021404120615161400171717181400191919011400099200999999999900019990010999999900999900999991999039999999 -050808030900100808090900100211111100100412130600101415161600040115150400092999999999909991999910999999999990999000091099903999999909 -080909090300080204051000081112121000111112121300041415160600141401170400999299199999099991909999999099909999099109090109999309999909 -080209090900081010040300081011111200081313041200141313041500060116050400919999199299999999909990909919999990990999090909903090999099 -080809090904081011030400051202131304141516131300141717171800061901181800999909012999999900190999190909999001999919999990990399909999 -060108080900101112120900131312120900131415020400161404170300041405171700999990309990190990999999999990199099090901999999909992990999 -060805010900040810100900110812120900111312120200041414151600041414170300099999903990991999999900919999999099190099199991999919909929 -040808090900010808090900061011021200041111130300141415160500171718181804099999999993999991911909199919929090999090999090999099990990 -080309101000080411120200080604041300141515051300141615171300141616011300929999919099011999091999909009999999999990990901999039999999 -080104090900081010100600081104121204081302121200141516170500141515180300999999300999990990019909990909999991990019099919999919999929 -080909090900080410110300081212020400041313141400051313151500161706011500099999991299099999019999909990199099999999199909900939900999 -080409090400081009110300121004131400121015050200121015161600120115061600999099099999092909919999919990919999999990190119993909999999 -080809100400010809101104121309101100141502161600051718161604061918180300919999999093999090999909099001009999990019999999090999909929 -030808080804090905021000090911120600131415150100161415151704161418191704299909991999900999910990199991999009390999999999099099999000 -050104080800090909080800101004111100101004121300021414151300061404031300999990309999909919909990999999999909091990991919909929990999 -030808080900100411120900130612121404150216161400171716161400171701040500999992909999090919099999990109099119999999999090999300999999 -080910031100080912041100080213141100151506161104151517171700040118180500992999919999999990109911999199099909909990099099903099999909 -080409101000080211100100081212121300080614151600031717151604051717180400901999919991193999909999909999909900092999999909099909909909 -030809090904101112130600141415161604141515161604021717180100191919200500909902099990900919099999990999999990901909999913919109999909 -080109100600081111111100081213141404151505041400021617170300181818170400990099309991999999909900990190999999091999991192999099999909 -050809090400041011111100120213130600121413130100121516171704031816161700009999909090199991199909909919999999399190999999091909929999 -080801090900080810111200131415051204020615151200161616161200041703181804999999939099100919009909990109999999991999999999901909992990 -040504080800090909080800011011120200131314041500131617171500161606031500990990099999909990999939119911019919999009999999999099999929 -080909100400080906111200131314140100150414140500021616161600171717030400990999990099990900099991939109999999091909999999919990999299 -080809090400080306101100021212131400151212161604171718180500171701181904999999290099909919900999009199999190909919999099999390999900 -080904101000081104100300081212020500061213131300141504161600140117161600909999099290909999919909109999999009999190990999993099999099 -080809021004031112131000140512131004141415131000161617181900161606010400911909191992999999999990990990999999999001099000999030999999 -080809041000040209111000121209111000120413111400031515111600051715010600999099099990199991999999199999909990992009099990990930909999 -080803090904080810110900061210110200131212111400151617181400040401051400992909999999099990991999999099919991190919990090900309999999 -030808040900100808060900100402110900011213130900121213141500040405161500290999999990909999199990109999199319999999099990900909999099 -040809040300100804111200100802131300141406151300141415150500040116161600000999999299091999919911199199999909999999999099903090999999 -080109101000080811061004121311140500151311021600171303181904172020202004990999309999199090909909199099109999190999199921099909999990 -040601080800090910101100090910121300020514120400151614171700031814171704999990030999190999900999999190909909991990991999991999929990 -050804090400030804101000111111021000121212121300061415161300041515011300090999990099909920999999199999109999199999990901990939909999 -020808080300090909101000111213101000111405041500161414151500060117040400199291999999999919999990099909099109999999990909903090999099 -050808090900030808101104121304141100021516161104061716161800191919011800099999990992999091909910909199099119909999990090999039999999 -080809100600111212130100141212151504161718181504161718180200160319202105900099909990903909919999990099099909909999199999999991992110 -080909020600031010111200051010131404151616160100151517181804191919190400191992991099991999991999910090199999399990999009099909999909 -080809090300080209090600101105041200131114151200161414151200040117150400999299999991190919999999999190099199999199990990903099999009 -080803090900041010101100120613140200151516141400151517170400050117171804992999099199999900091999919090999999999901999199903990999900 -040601080400090908081000091112131300141102131300141115151600031104050400999990039099099999910999199991999919999909090999999000929999 -060808090400010808100400111112131400111104131500161616021500171703051500090099999993919990010999999990909999099991999919991909992999 -080903101000110204121300141412121504051616161500171718041500171701061500129991999091999991090990900919999099999190999199999399999909 -030805010900100811120900101002130904141415150900161415151700040618180400999992903999091990999991110909099999999999090999900090999999 -080909011000080909111000041212121000130204141000150616161704180316051700099999993999990999019999999010099199991990090999019999929909 -080401090900081010091100041010121300141402150500161616171700030618171704999999039990900999990999099019009919999910999999929099990990 -080109090300081009091100081212131100141215021600140415150400140604170500999999399290199999019999999990119099199999990990999009909909 -060809010400101011111204101013110500021414151604171414161600171803191900009999003099990099999999109991999190001999999999999909912999 -030808040900040408020900100411040900100512120900131313121400151515010600299999990999011909099990909999999099990999199901999030999999 -080910101000110902120500110904131300041414130300011414040400061515151500099990990099119999919990999019999999299999993999999000909999 -080805030400080809091000040209091000111213131004141415131000140115061600999999902099999990999991999019999019909919999190993990999909 -080808090400030409090500100211121200101306140100101516160400151516160400999099909999990920119991999919199190399990999090999999999909 -030802090500080810110600121212111300141504111304161717180100041717181800910092919999910999999999099990999099000091999903909999999999 -080801090900080810090904110212121300111414120600111515160400030515170400999999939999919090910911999999909990999900999990929909990909 -080304090900100411110900100211111200131415161600171415161604061415010500290991999999999990990911999999109000990999999999009930999999 -080109090900081010040400081010111200131302140500151306161600031717161604999999300999999999990909109999199911099990991099929999999090 -060808080900100411090904121314021500051614171504181814191900181801190300999990909990919009119909999909199099009091999099999399999929 -040803090900101111090400120602131400151513131400011616041400051616041400929990199999990909109999199009999999099019993909999999909099 -080409101104080803121100130214151500161617151500061818181804191919010500900909990999299919900911199999999900999991999999009030999999 -080804030900080802101000111112130400111112060400011415161600051717171600999299909199019999199999009999999919999190093909990099909999 -060808080500091011110100120411111300021414041300151516041300031516041300999090990990093909999909909991099199991999999009999999929099 -050808040300090808101104121202130600121213131400151516161400151704011400999990990299911009199999109999999999199099999091990939990999 -030808080900101011020900101012051300141516041704141818171700061818010400299999991999910999199999909901909009009919999919999930909999 -080304010600080910101000081112131304141502131300141617171800050417181800999999203099999991991909190911999019999099099099909999990999 -080604090300081011090904081202131404151205161400171718191900171701191900999299009990999099019991190099999999090100999109999399999999 -080105090400081011091200080611110200081304041400041313151400161616031400999999309090190990990999919990919099990990999991999029999999 -040808060900100811110900121311110100141415021600140417051600181818031604999990900999990909999901939919999911199009999909999099999920 -080808091004060305021004111213141000041516171700181816191900181801191900991909291999909009919900009999199091999099999009999399999999 -080904010400080910101000080906110500080912121300141412040200140315161600909999993090099999019999909999199999199090199999999991992199 -030808040900040808020900100406110900101212120900131415161700131315010500299999990990919990919999999990199099199999190001999930999999 -080409031000080609041000080409021100121209131300121214140400040114150500909299999999090999991990919099199911999999999090903909999909 -080901101000080911101004121314141500121614021500121718191504120605031504999999939990199091909901999909999991199009999991090029999990 -080901101100041212100600131212140500021515141600171515141804171703191904099090039099909999999919009199999199090999099999099290999990 -080609090300080209091000081111111100121213130400121214151504040116170500999999099299191991999999999091909919999999999099003009999009 -080808090900011010110600041011111200131415021200161617041204161618030500990999099993910999999999999009199991090010999999099190999299 -080309100600081105120400081113021400081513131400041616161600171717010400921099901999990999919990919999999009999099199999909030999999 -020809090300101111120400131114150100161616171704181819171704181819050600119291999999900919999911139999099990900909999999099900999999 -080801040500080809101100121213111100141414141504161718191500031702061504999999930099909990199990099991999999909910991990929199991090 -050801090904101112090904131415161700131402160600181819162000181803202004099909039990019009010990999999909991999919999199999909992990 -080802091004111212061300141212050300011515151500161717170400161618181904991100919199909909992909099919999399999099999999990090999900 -080803090904100804061104101213140200101515151600101718181800171701051900992909999199999090001990909909919099999099199099999390999909 -080509090300080210091100081210111104131415161704181818191904060120191900999299019991199999999909990109909900001999999999003099999099 -030802090500040808091000111111091000121313141000151617171000060417010400291099919990999999999999009999199090990991999099900930999999 -080309091004081109121000080206121000051313121000141313150100041616170400299909999999099990999919999910999999090990990913999009909909 -060404080800090909090100041010101000040511121200131313140200040315151500999990000999993999919909999999919900990999199991909019992999 -040108080500090910111200090613131200141413131200140215151500041617040300999990309099000990099999999199999999999199999199990092909099 -080804030900081005111200131414021504131414151500131616161700131806011704909299099199991990010999190999999999999919990990990939990990 -050808040900100611110900120411110400131414020400151414160300151501161600999090909999090909990999999009099991090991990999999392999999 -030808010900100408110900100412131400100215131600171704131600171705130600999992093999900999919999109901909119999099999909999990990999 -080808090904101111060904101111120200131313131400151617051800191901032004999909909990999099900999119991919999999919190090909391999920 -080809100300080211120500131314121500041316171500181818181504191906011504911299199999900991099999999990999919090910999999009039999990 -020809011000111209131000110609141500111616140400031716141804171704140500119991993999010990990999099999909999992099999900099090999999 -080104090904081010090400081010110500081213131300141516020600171716160300990909399990900999909999909901999999999091990910909999999929 -080801091004080811121000131411151000131602041000161617041800050617170300999009930999109991909909999919099919999919099990909999990929 -080808010904040210100900111110120904111113121200031415160500061718161900999909113990999991909999900999999990999100992999999090900909 -060809090300100209111100121313111404121313040500151617181800040117181800099299099991199919999999000999009199999199990099903999999099 -060808090400101112131300031114141304041114150100161117171800160217170500999090900990909999999929900999999099399901999990991990901999 -080809011000040809091000111111110400121212130400140215160500061717170300909999993999990909919999909991999990099109990900901999999929 -040808090600010808090900101111111200101313140200101305150400041616170300099999999093919990991999999990919099199991099909990919909929 -080401090900101111090900101211131300101406151300100204150400051616160300099990939990909999909991999910999999099199099099991999909929 -040802091000111112121000111112120300011313141400151513061400041617050400011199199999099999992999999919099399999099999909990090909099 -030808080200090510111100091212121104090613141500091617141800161604010400299199999199009999999999900999919900199909990090999030999999 -030809101000110412021000111313141500041313141500011616141504051616061700219999919999010999919909999999999091099199993999099990909909 -080809100600080811120300131415121604131702121600181717191604050120191904990099909999992909099991990911999991990999990999003090999090 -050104060800090909091000111112131300111212041400150204161600171717170300999090309099999991090999099999909999091999091999991099999929 -080909060300081009111200081305110400081415021600011417171600041417170400990999099299991990999999909900199009999991993990999999901909 -080808010900101011120904131415120900130216040900130517181800130306041800999999903999010099199991999910999199099009099999999009929999 -030808090900101010090904061102121304011111141500161617180500161919191904299999919999999099190909190999109391099009999900990999999990 -080808080300040209100500040611120400131313120400141415161600140115161600999299199990100999199990909091999990999199099009993999999999 -080109090900080810111104121313141500121313160600040204170500181818180300999999300999199009190999099999009999990190999900991999999929 -040108080500091008111100091012111100091012121300141502160400170306160400999990399099909999099991999999999099099919091109919099929909 -030408080400090908081000090911121004130211141500131617171800130601170500909092999999999999909999990919009911999991090090990390999999 -080109091004081109121000081312121000141302151604141317051800061319040300999909399991999999099910909999999011109909199909999992900099 -080509011000080809111000021213141000151516161704151516161704040306181900099999993999900990919911199199099999009999999999002990999009 -080309100400080611120500080213131404151513131400151516160100171717180400290099909999990990009911900999999999999919999093990999999009 -080509090400081010091100081212121300141402131300141404151600041703010600909999999099900999909909999909999911999909199991991930902999 -080909090904101105121300141415121300141402160400171718181804170106190300099900999999099900999999009990999910091919999999093019999929 -080808080400030909101100060909021100121314141500121314161700120404010500999099990992999999909909119999019009999999199991990030999999 -080109090300081009111200131010051404151515021600171717170600041819191904999999390299099909901999990019919991199099999990990099909990 -080105090900081010110200121010131304141414131300150406161700181818040300999999301199919909991909990909999999990990190909909902999999 -040809041000011111111000121212131000060213131004031405151600171815151600000999099993999999199999999919999009009109099990921999919999 -040105080400091010111100121313111100140206041500141616171500141616031500990090390999909909199909999919909009099199999919999929999999 -080803091004110209091000111204041000111313131000141516161700050116160600992900999991199999999900909999999199999109090990903990999999 -080609051004081112101000080213141400081313150300161717171704040118181800990909009999099990909919099919999991291999991999003099999999 -080803090500081004091100021212091300041212141500161614140100040617171700929999999099099910990919909999909999090019999993900909999999 -060108080400090908081000090911051000121302141500041304141500041304140300999090399999090999999990099199999111090909999999999999909029 -030808040600090510111204131402111104151515150100161617181800161617181800990992909099010019199911990999199999399909999009999999999999 -080304090600101112090400130212091400131515151500041616171700051616011700290091999991999991990901999991009999999991990909999939909999 -080808030400040910111100040910061100120913050200141415151600140115150400999999092090999999999999909090919099090909199191993990999999 -080801090900040810090900111112120600031302120500041415161600171704161600999990939999019999910999999211999919099990990009990999990999 -080109051000080811111000121212121004131302140400131315151604171819060300990999309999090919999999990901999990099919999991009992900099 -080909101100050909101100061212101100131414141404151516170200040118030400099990999999999999099999999009009099909199199911903190999299 -080409091000110603121000131304021000131314151600011717151600041717051600099090999999921900999999919990199999999009993910999999909909 -050809041000110312021000111106131404151616131400151616131400150417011400919990210999911999991990990909999099999999999901999039990999 -080910100400050410100600111111120100021313140400151313161700151503161700009090999999090999009999939999199191091990999990999999992999 -080901101004040911101004120911110600131402150300161717151500051818181800099900939999199099900909999019999919990919299919909909999999 -080808010500060409101000111213101000111104021400150416161400151716031400999990903099099999099990099900199999199099999991999929900999 -080409101000081106100300081212131300081402130400011415151600041415150500900999999990099999902999099999999091999919093990999990901999 -040806090900031010050900111010041200111113141200040204140100151515150400090999099999990929990999909990999990099199999993901019999909 -080809051004030809061000111209021000130414151000131316161600171718010400999009999999090929999911199999199909199909199099999030990999 -080109090900081011110200081211111300141404151604171418181600060418050300999999319190199990991999999909019990909999990990900902999999 -080808080904101010090900021105120100131114151600031104171804061117171800999909990999919919919919039999099190092900099999099999909999 -080405030900101102121304101114151500161117171800161117170600160119191904099290909199111099099909099999999999099999090099993099999990 -080808080900101002110300041213130400041213130600141415161600141401160500999199919299019999919909909999999909990991099019999390999999 -040803090904100811021200130814141500161714051500181819191504180119190600992900999199111909999999999019999999990100999090093990999999 -080809090900011004020600041011121200131011121200141415040300141416170500919999101993990999919990999099999099999009299909999099999009 -040804010500090808101100090212121200131306141500131304161600031717171600099999903090901999991991999910909999099990999909920999999999 -060808080800091010031100091010111100121304041400151515150200050116161704099999999099999999929999999000919099999090199999903911999910 -080909090900080310021100081212131100051212041100141515160400140104170600999999291999919999199909009999999999990190990900993909999009 -080309040400080609101000080211101200131313131200041415161200041515010500299999990099909990999911199999199999099091990909999930909999 -030508090900100411090900101202131300061414141504161617181804161619011800909992909999909990099911999991099099109999199909099039990999 -040108080804091011120500131414151600131718180600131718021904131703191900999900309990119990910909909909199999999991099991099999999299 -040809031000051112121000131414021004131414151500130616151500171718010400009999002990991999099909910999199999999909999099999030990999 -080808090300101009090400101002111200011314151604171706151600171705150400999299099999999999190999109909199311009099999099999999999009 -050808090400100808110100121213130400141414140400150602040300151516161600990090990990993990919999909999199999090919999009999192999999 -060808080400090902101100090912131300030514040400151616171700151616011700099999909099109999100999999291999999999010090919999939999999 -040108091004111111120400131314121200131314060300150216171700150518171700990000300099999991999990999999999990991999291119999099990999 -060808080300090210101104121310141100011515161104051515161600041718191900999290199991999019999919009910999399909999990909999099900099 -030809101004060909101000051102120400131415121600131718191904171701191900299909199990999999109900999991909019999190099109099399999999 -080808090904101010090900051112130100141504131604170218181900171703180600999909909999909999009990939009999090009991091199999990992999 -080801090600080809091000110412130500111402130400111515131600031704161600999099939999090909190990199999999911099199999990991999920999 -040809010400101009111100021009111100121314151600121414170500120306170400009999993099119999999919999109909900999990099999999999929009 -080808010400090909091000061111121200131302141500131316160500041703160400999999903099990999019909999909919991199919099999990999909209 -080306050904080810110200121213041400151515151400161617170100161617170400999009209099111999991990999990099999199991999993999999990909 -040104080800090909080800101112130500101415040300101515161600100602161600999990309999909991999900009919999910999999299999999199990199 -060804010400090910111200130214141200151514141204151617171200030518181800099999003099110919909919999919999999909990990999920099999999 -080801090900101010100200111204131300061414130300151414160500040417171700999990931199999990991900999009999999299990990990900909999999 -040808090900100503091100121304111104121415150200121617171800120117170600990990999999929900919909090999919099199019999190993990999999 -080104090900081005090900081011120400081013130400021413151600061717031600990999399991999999009990009999999999091990991090901999999299 -080809011000081109121004131409121000130215161600131706051604130304181900999999093999010099999991999919099190999909991999092900999009 -080809010400100409111200101309141200131306141200150205141200161703140400999990993090910999909901999999999990999199991099919990912999 -080910020500080911110400080311110400081213140400151213131600061201041600911099991999990992999999909991999909090990990990909309999999 -080109101004080909101000110612131400111516171400111502051804111519030400990909399990999900190999099991099999999910099199099990991299 -080309100400080409100400081109100500021206101300121214131300041514010400299099999999990990999990999109909990991990999119999930900999 -040108020503090908101010090908041104061208131415161616161717181819191717991090391929999999999991909009900990009099999990909099999999 -080808091000111212130400110514140100031514140400041516171700061502171700999099900090909999099990939999999299999910090999999199901999 -040801030900080810090900041112131400151512130200151512161600050406161600099999932999099909191990999909919991199990999999900999999099 -060808090300100211090900101213131400101513131404100516171700041819011704999290099999119991999991999999999009909901099099999039900990 -060801090900101011111200101011111200131313041204051403150200041617151500099999030999091999999999999099999999009099190999990291909199 -040808010900050808100904111212130900021412130900151606170400151803171700099999993990910091909919999199999199990100099999991999992999 -080301090900081010091100080410121104021314141400150516161700180616160400299999939999999999909990090191909119990090099999909990909999 -080803090904101112020900100513131300101415160400061718191904171701191900992909099999091999019990999999199000999991099019009399999999 -080802091000080811111004031204131000051214150600161617180100161619191904911099991999999029919999999990199900090001999993999099999990 -060808010500091010101100121313111100021313140400151616161604031718180400999990903091999919009999999199099999091999991999091090929999 -030105080800091010100800090411121300140215041300041616171700061616171700999992300999999999199990009191099119999909990999999999909099 -080909011000110909101000050412130400060212131400031512131400161604130400099990993999909909910999199909999019099199999999921990999099 -080601090904101112090904131415151600171802151600171819191604170520190300099900939990019090919909909099999901999919999999099099990929 -030809041004080809111004021209111000131415111000161717180100161706190500299909990999999019999910999919999011090901999993999009999909 -080909010500080810111100060210121100131410040400151616171700031616171704999999113099919991999909099919009199991909999909929999999990 -080801040300080809091000041111121200061311020500141504161600171717161600999999930299199901991999999909199991090090999099900999999999 -080304090900080810101100040210100600121213040500141513161600040113161600290999990999990991990991999091099919990199099909903999999999 -080910111104120310111104021310140400151313161600151718160600151701190500199901299999999019909919009990999999999919999000999309909909 -080802050400080409101000031111101000121111130100120406131300141414151600919999910099099929199999099999999091399009999999999990999009 -080104090600081010101000111111121300140215150400141615171804140305181800990099390990999999100999999919009199999990991990092099999999 -030809090904101112121200020613141400151616141400051617171800041917011804299909109991999919099999999100999199999910090999999939900990 -080809090900040810050400111213141504011213021600171213181800171206031800909999999999009900990901190999109399099991999999999999900929 -040809100300110209120500111313041400151316161404171716161400171701061400099299091999110991999999999099099919900999999090999309999999 -080803090600081004091104021010090500011213141504161717181500161717191500929999999099900019999919009991999310909990990909999909999909 -040108060500090910111200130914111504131617171700131602180300131618181904990990309099999909090990900910099999999999999119999992999910 -080309100500081111100200081111061200041313141400151316141400041716010400921999999099991999991909099990919990990999990909990930909999 -080809101004030809041000110609120400131309141400131315160100021715180500990909999999099929909990999199009999999900999913919909911909 -080501040900081010110900121013130900061413130900150204041600151503041600999999030999900909099909999919999999990199091090999999992909 -030808080600040910021100041213131400151513131400051516161400171716010400299999991090019999190900999909999999999991990990990930999999 -080401040900101010100900111104050900110612021300141515161300040315161300099090939999991990009999999999919901190910999999902999999999 -080609090904080802101000110312131400111212150100111604170500110418181800909909999099119919991929919999199990399000999990990909999999 -080409090900081002040300081010041100121213131100121213131400040104060500099999919299109999999999099019999999099999999090903000999999 -080909090300080204100400041112101000131314141400131516171700050601171700999299199990090991999901999991909999999019099099900399999999 -050808030900100806040900100204110900041211110900131313131400040115151500092999999999099991909900999919999919990919099999903090999999 -080801040400050909101100120909131400061515021400031615171700161604171700999999030090910999919909919099999991199999092199999099999999 -030808010400090806101100091213141104090215151100161718151104161919190500999992993099900990919990090999199119990099999099099090999999 -060803091000110812121300110414140200111515141600111515171704050401171700992190999190990999991990999999919999199991990919000399999999 -080503090900081011090904120611130200121411150400121617181800120117171804992999099990999000991999919999109911999109990909993999999990 -080501090900080810100904061112131400151602171800151619202004151603202004999999030999099099919900009999109911999999099199099299909990 -080809090500080810090400031110120100131404120400131414121500130206161700999099999999900990909999939209999990999999099919991000919909 -080809100400080811121200131313130300011415041604171805061600171818021600990099909999909909099999999990929309009109990999999909999119 -040808010500090808101104121212121304031414150600160214171700181818191900999990993099900009910999990991009999992190999999911990999999 -080808040300091010111200091011111200091305021400011516160400061716160400999990990299999999999991999919119009199199993090990999909909 -040508010900101011120900101013140400150213161600151713181600150306181804909990903999110999909999009919099199999999991990992099999990 -020803040900100808110900100512120900101314120900011315161700041315060400199991920999900999999999999909999190999909993000999900909999 -080401090400101009090400101005111200130214110400151614110300151614110600099090939999199999090999909199999111099999999092999999909909 -040804090900101011110100101012121200021313140300150513160600171717170400909990090999193999909999999199999191290090999990909999999909 -040108090500101111121200101306121200101302041400101315151400160415040300990990300091999999999910999999999919999910999991909902909999 -060808010900100408110900121314111504160214110400031714181800171705181800999990993999910900199909900099909019999190999999929999999099 -050806010400091011111104121314141500121302141500121617171500031804171500909990093090999090991909919999999911999199999990991999920999 -080309041000080909051000080211111000041213111000141215161700041206011700299099999991999991909999999919999919990910090910909039999999 -080309090900080610110500080204121200081314120100131314150400040416161600299999900999099999900919099919999919399991999910909909990999 -080809020500030809101000111109101004121106130400121415161700121815010400911999991092999999999999990999199999999001099900990930900999 -040809030400040809041000110809021000111109121300051414151500061414010400092999999099909909999999119909919999190091999909999930909999 -030808060900101108020904101111120904101314150900051316171800191304011800299099999999911099999999090999099000199991999900909039909999 -050809010400080810111200131410041200131414021200131516171204130318180600009999903099901909909909999999999999199991999119092900999999 -050808030600020809091000111212121204011313131300141415161704141815190400992990999091099919990919990991999399999099999990090900990099 -060809011000111109091004121213141004121202151004161717180500031920202000009999993999991090999990010999199991909910991990920999990999 -080809090904061011121304141411150100021416170500181819202000181803202004999909099090990090909991139190099999091909999909999999992990 -080809051000011109091000121313141000121313060400120404151500021617150300999099099993999991909919009999009999999909990999919999911129 -080809010400080809101100120409131300140615160200050315171704181815171700999999993099010909999990199099919909190991999219099999990999 -030809090900101010061100121302141400121215151404041615151704181819010500299999199099999999100990199909999999909999190091099030990999 -080104090904081010090600081010111200081302141200151316171200180403170500999909309099919999919999999909199091090919999919909990909299 -080109101004081109101004081112130600141112120500141415161704021819200300999909399991909099099990909199099999999999099900019099911129 -060808030900100808090900041112020400041113131400151113161400050117171700099299999990999909019991109999999099999999990000903099999999 -040809090400031010091100121212021100041306141100041515141400051515010400009099999999999929009999119900999099999999190909999930909999 -050208030400090910111200090913041200141516171204141516181800060116181800019999112099919999999990099919999990009990990099903999999999 -080309091000080411091000081111020600051212130400141212131500040104130400929099999999009999910909999999199099999999090910903999999009 -080910060300081112131400151502041600151517171604011818191600051818191904900999099299011909199991099999999919909919993999999990909090 -040108080800090910111200130905021200141515161204061515161200171717040300999990311999199999919900919009099999900999999999990902999999 -080809090300080806090500041011120200131014041500161617171700160118181804999299999999999990010999919090919999990000199199993099999990 -060804030900101111111100101012021300040514141300151614140100151616170400909290099199999999919990199091999999099099990993999009999909 -080105090900080810100904111110101200111113040200141504161700061818160300999999309999190090999999919990919990990099199091900999999929 -080910101100030902111104060912120500131412121500161617181904161601181804109992999999199099109999999099909009999910099090099399999990 -080109090900081010050400081010111200080213041400151604061700151616031700999999300090999999999999009991009919999199090090999999999299 -060808010900100808090900040511121200131415151604171715151600031802041600999990993990909999919990999090199009009999999999921199991099 -060808010400090808101100121212120400051302141400150416171400151616170300999990993090910999199999909919999011999000999999999992909999 -080910111204080205031204081314151504081616151500011617170600181817192000911009192999099091999919090990999199999999993099990990999009 -080809011000111109121000111109131000061409021004031516160400041716160500909999993999909999919990919909999099109991992190999999900909 -080909090904080810030600020411111100121314150400121614141700121601051800099909999999129919990999999100999909099990991190999390999909 -080109090904080810111204131415061200131617021204131818191205130318202000999909390999009091909991999901999091009991999919092999999099 -080804040900030802040900101011120900130611120900141515121600051515010400999092909999109999199999999099999909090919090919999930909999 -080804090400080510091100120213131400121504131400121616161400030406011400999999909099909900900911999909999909999991999990920039999999 -080109100300080809110600121302141400150405161600171718161604171719191904991299399999990919109911999090099999990099999009099990999990 -080309090600080509091000080211111100121213041400151515151600040104041600299999999099990990909919999910909999091909999990903009999999 -050809041000110809121000131309141000130315161000170415161604180215010600999990990999090909999999099999099291991999099999010930911999 -080909090900080502100300111112131400111115151604171718151904170118060400099999099999919909112991919999999909009199099099093990999099 -080109051004081111101000081211130200141516171804191903061804191920201800990909309990919990991999919909199091000920999999099999999909 -080909090300080810101000051102120400131313130400040614151500161617011500099999999299999990199901909919099999999991099009909039990999 -050108040400090908081000090911121300141415041300141402161600171706031600999990390099199999100999909091999990999919999919990099999929 -050809090900011010111200061010041200131303040200130414151500161616171500099999009993911999909909999909919999099029199919999909999099 -040105080800091010080800061011121204131313140200151516141700151503181904990990399990909909999991090991999991199909199099999991999210 -080304060400080909101100120909131300021415151604141415150100171717170500299999900099909919990999999190909999001999999193999909999909 -080804060900030810110900120213040900141515051604171515181600170118181600909992990999909991099919099190909999001999991900993999999999 -080909090904081010110100081010120400061302141404151516171800151505170300099909099999913999909999909991099009909919999011999092999999 -030802010904080810110904051212130900061212141504161717181900161720202000919902913999999009119999109999909099009990090909999990999999 -050809101004111111100400120313140100121515160400120206161600121718181800009909909999900999909929139991999990099109991999999999900999 -080809090900101003110200101006111200041313141500161313141700050401140400999990929199999999991990999909019991190999090999900390999999 -080808080300040209051000111213141000121213151500041616151500061616010400999299919999199901909991999099009999990919999919999930909999 -080604010400080910101100080910101100041213141500161603050200161617171700099999903090991999999990999999019000999090199999999291999999 -030809090400050809091000110812130400110214140600151516141704151501171700299999999099990909099999009919099019090999999910099399999999 -040801091000110812121000130812121004141515160500021717181804190617031800099099930991199919999999990199099099091999991909009999909299 -040108080400091008081100091212121100091304140500091516020600031616171700999090399999190999199999999900199999099091990910999909929999 -080404010900101111110900101213130900061213130900040214041500031414040500099990903990990991909999999999999099999190090199999990929099 -060803090400101111091200131102141200130415151200131615151700131601050400929990199090999999109909199999199099099999999090999300999999 -080909090400041011111200011011111200131302141500131316051700030616160400099090990999999999999931909999109911999909099990920990999999 -080409051000080809111000011209111300141515151500040304020400061616161600099999990999999990990930099919909099990901999999992910909999 -060808090300100808091100121202091100051213040400011415151600171715151804999990999290999999099991119999999019999910093199990990999900 -030804090900101112121300021412121300150416161304051716161800061717011800299999109091999919999911999099199099000999999990999039909999 -030808090200050804101000111112101000040413141400151516161600151506010400291199999190999999099990999990919999990001999099999030999999 -080109091000081109091200081106050400131314021500161317181500161604031504999099399099099999900909999910999911190909999991999029999990 -080404090900081005090300081011020600081213141500161717141500041701141500990999099299999999019999109901999901990999990910909399999999 -080909101000080911120100081313131400080206051400151617041404150304181400099999990999003999919999909919099909999199991009099999929009 -080808020904101011041200011313131400061504050300161617181800161717181800991109919199109991991939999909029999990009999009999999999999 -060801090400100811121200131415121200141415161604050215161604171717170300999090930999109901999900999999999990900199999999091999999929 -080909031000081109061004121205131000121214150200011616171700041618171704999299999990099090909990909999919991199019993999999099909090 -060809090500010809091000110804101000110812121200131415161604041702180300099999999093090999099909999999999919999919990999000112990199 -060808030900100808110900121313110904141313040200151616171804050116191900999290999990999909999999090099919999090099190911003990999999 -030809100400110612021300111112141300041512141304161617171800161617010500211999091099991999999999999909999000009999199091999930999999 -040809101000010809111100040809111100120802131300141516160500061704160300010999999993909999999909999991999091990991990990900999990929 -030804091000080811091000021213091000141516041004141717171700181801060500299999909999999919099919099010999919909910099999990300999999 -080501030900101010110900121314021504161414171504181819171504181820061500099290939999991901919991100099999990900909999999099099999099 -060308080500090408081000111111020400121313141500161313041500160117171700929990999099990900919999909909199091090999999909993099999999 -040808030900020808100900110504100900121212121300141415040400060115150400092999999991909919099909909199909999991909099999903909999909 -030808080900101111020900101111120904100412120100100613141400041516140500299999991999901999999909910999999099399909990909999090900999 -080809090900080805100400111104100300121113101400121215161400060104021700909999999099099909999999999990929911999101999999903011999919 -080809011004080809111000041209131400151502061400151617171404051817170300999909993999990990919901109919099919999019999999090999909929 -080903100400080904101000080902111100121305111100141313151600060104171600929999999099909999909991199099999099990901999919903009999909 -040808090300040808090600101102090400101112121300141112120500041501161600099299999999990909099991199999909999090999990190990309909999 -080109090400080809090400101011020400121011131300120411131300051411060300999099399999090919999991109099199999999999999099999992900099 -080109040300080810041100121202131100121214141100151616171104151606180500990999309299099919909991119990999999999900990999099009999909 -040801060900080810110904121210020900121210131400150513131600170403181600099999930999911090999990919999199999090099099999909919909299 -080801060500080910111100120404111100121213130200141414141500041603171700999999030099019900999999099999199999199990199999990991909299 -040801090900051011091200130614151204161616161200170218181204171703191900099999039999009909199999000001999999999199991099099909992999 -040801090904061010090200111010121300111404121300111505161700111818180300099909039190919999991909099909999909999990190909990992999999 -080809090900081011120100131002141404131015061404131617180300131605190400909999911999993909199990090991999990909919999912999909900909 -060808010900100408110900021213110900141213110900150413111604170305181600099999993990910909199911999199999999991999099099019909929099 -030408091004111208091000111108091000130214091500131316171700050104180600999902099999099999999999099919909911099991999119903009999909 -080809010400080809091000051112131400151212131604041702131600061718031600999999993099090990910909199999909099900919999199999999901299 -030808090400100508091100100612091300100212121400151616171700040104171700999992999090999999090999999909009119999991090919903999999099 -040801090904101011121200131314121200131502160300171704161800171706160500099909039099199991999990099919999911999009299991999999999009 -080804030900081011121300141414021300151515161600041717161600051701040600999299009199009999909999919990199999999909990919999300909999 -040804030900101102090900121314141500061313041500161616161500050117171700909290099990919909190901999999999099999190999999903099999999 -080109091004081109121000131415151004161702181000191906180400191905180300999909399991000919999900990199999111999009099999999999999029 -080909090300080210061100080504111100121313131300121415040400040115151600999299919991109999999999999100099199999100999999903990999909 -080801060904081010101004111112120200111112131400151617181400051919031404999009939099999001999991919999919999099090990909909099999920 -040808080800020910110500120411110100131314151500131614151500030617170400999990909091199919199990939190099999999999999099920900999999 -080808010600090910111204090913141500031313141404161717181804192002181805999999003099909099910999009999999999902991999909019999911190 -080808010400060909101100120909131100121415131100120416021100031716050400999990093099910999999909199990999909999091999919999900921999 -080808090500060309091000021111041000121314151000041617181800161601181804990090999999299999199919999199099190099109990109999399999990 -080903101000080911100500081213141500080216141704181819142004181806012004929999999999909991090999999910909199001909999110099939990990 -050808010904100808090900041112131300031414131304151616160600171802191900999900993990909999919909099900999999902991099999919109911999 -080808080300040209040500101111121304101111140100151516141700151818180600999290199999909991090999000999999091390909999990999090999999 -080909060300081009111100081002111100081012040500131313130400140401151600999999990299999999099999199991909910990199999999909300909909 -050108091000111212121000131313130600141415161600021704161600041717030400990090309999999901999999909190099999991909991999909990999299 -080801040900080810100904111110100900110212041300141415161700061415030500999999930999199091999999909990909190999199099119909920999999 -060108080400090908080400100911021200101311140500101311151600041703161600999090399999999909110991909909199999099991999999990919909299 -040106080800090910080800111112050300131114151500041602171700161604171700990990399999909991009990999099929919990011999919999999990999 -060108080400090908080500090910101000111202040400111314151500041316150300999090399999099999990990999919999010999919099919999099900929 -080503090600080810110400021212111300141212111300151516171704041501171700999099020999190919999999999199999190099010999999099399909999 -080405010400080909090900081010101000111202130400111415131300031615040600999999003099999999991999999099109011999109999999991990929099 -080901100600080909110400081212131404081212051400151516170200150318180400999099930990919999910909910999999990999909199091999919992909 -060809011000040909111000121313111400151613111400040517021404031818181400009999993999900909999909019999999009990909999091099919929999 -040809011000080809111000061209111004051309111400031502161400171804161600009999993999910909999990990909999099099910999199921099919999 -040808080800020910100500110904100600110912131400110912151400030401160400099999099091099919999999999990909990099990999199920309999909 -040801090904101112090200101105131400101506131604171818131900171818130300099909039190019999001999999909919909909099190999999992999999 -080808080200010909101004041103121000111106131400151616171700041616180500999199199193999090919999299099909999099000990999909999999009 -080906101000080911100300040912021300141414131300151515150500040116171804999999909290099999919909199901099999999199999999903090999000 -030802090500080804101000011111111100121212131400041515061600041717171700911092901999999999919939999990099999099099090909999990909999 -080808010904101112090900100213140600151616141700181616140400180503140400999900993991119999090919099019999999090999099999990299999909 -080304091000080609091000080211121000041314140500151514141600151504011600299999909999999990099911009991999009099999999090999039999999 -050809090900010808100400111213101000141213040600041203151500040216151500099999909093909991099909999099099999990999099929991999901199 -060803090900100811020904120811130400141515131300161515171700040501171700992990999999091009910999999090999091999999990909900399999999 -080909100300080611101000081213040200141415151500141416170500040116160400999299909999999990091990099009919999999919999100903999999909 -080309101004081109101004111109121300021409150500061414160100171717180400299909999999999019909999909199009199990900999913999099999009 -040308040900100408061100100208121100101314121200151516171700151505011700929090999099990990999991909919999919990010999919999039999999 -080409090300080209100600080411111100121212120400131415041600050115151600999299099991100990999999999199099999099190990099903999999909 -080109091000081109121000081312121000081406040500150216161600040417170300999099399991099999999910999919099909990199099199909199990929 -080401090900101112120904131414121500020516161500171706181500171703041500099990939990199091990919909199099099991909999990999909992999 -060808080500090904041000110212131400111516131400111717181404031717011400099999099099999990000910909919999919999919999910029939999999 -080808040900020603090900101111121300101111051300101414151300100104160400999991920999999910909999099999999199999190999900993900999099 -080808091000011111121304141111131300140204151504141617181900141606030500999099900093909099999909999919999909909190999110999020999999 -080109061000081109121000041309021000131305141400151504141400150404160300990999399990919991919901909999199909990999999099999919909029 -080903101004111206101004021213141504161217171500161217181800160501181800129901999999999019009990090199999119099999999909999399909999 -040808010900021008110900121010110904120504111300140315161700181818180600099999193991910919999999990909999990091990092909999090999999 -020809101000110512031300141415131304141416161604171717170600040118181900111991992999099919099990990999099999909109999999903090999909 -080801091004080811091000121311141000121511040200061511161700051504180300999909939999011990999909099909019999990999199991999919900929 -080804030900080510040900111213020904141215161700181815151700181806011700999299009999999909009999910090199991990099999090999039999999 -080409090900100211111100100512120300131404120400141415161600060117161600099990909991199990992999999199999999991900099099903099999099 -080809100300110812050400111302141404111515141400111515161700040601171700991299919999999990100991990919999990999990990990900399999999 -080801090400080810101000111112121204111314140200041506161700051803171700999099930999099999199999990990919009999090190909990999909299 -080109090900080810101100121210100400121314021500161714041500050604031500999999309999190990990999999900199999190099999990900099999929 -080601040500080910111200130909121200141402151600141417151604031819151604999999030090109999909909999091909999999919999990099199921990 -040308080804090904101100090912021100051312140600151512160100151512171700929900991999999999019999109909099909090999999913999909990999 -080909020400030909100500041106101200131314101200151414161200151701041200191092991999990990999909009999999991999099999909990309909999 -080109100600080809111104121314050400121516171700120218031700121919191904990099399999009001990991099991999919999199999929991190999990 -080805090300080806091000111111120200131415160400131717181800041701181804909299999999991909091999919009199909999901099919999399909990 -080910111100060909051100121314140100041314141504030402161500171818181500090990909999999999009900939099999999109999999011929199919999 -040808091000110603101000121213041400121213130200151617170500150117170400990090999990929909991999999999019999190919990190993999999909 -060809091000010809091000110812131000111112141004020503151604171718041900009099999993999999009999999919099999901090999990019290991909 -080808090904101105031200131314121200011315021604171717181804061920181800999900999090999990029999099999919319109911999919099099900999 -080809100500011111110400061213141500161613130200171704181804171703181800900099099993999991990901119909919999999099199099099999999299 -080804030600090410111200131415021200131416051204131417181800130117171800999990902099091909099999119991099999909919990109993999999999 -040809090900100802110300120813130400141406151600141415151700040501171700999990911999992909199909999099109990099999099099900399999999 -080609100400081109031200131102141500041116161500051716161500171704011500991999092099999909190909119099999909999099990991999039999999 -080805090900101011090900101002120300131415160400171715181904170115061904999990909999099999912991199199999109099190999900093999999090 -060408080500091008080100090902111100121313131100121415160300040417171700909090999999193991999991199099099999999090299909900099999999 -040406080800090909080800011004020500101011121200130411031200141414151600999990009999919991919930909999199991990999990929999990999009 -030808090500040808100400021106101200131415101204131617171200181801171200290099999999990901999919999190999009009999991190909399999999 -080808010904101112130904051414150900161414040900171702060300181819191900999900993990000009919999199999099099990919999909999192990999 -080802090900040810090900031112131300040512141500161612171500160106181504919999919990999991109929999999099999990090999109993009999900 -030808010400050808090900100602090900111111111200131414141200131304150400299999993099999909199990999091199999090999999990999909999009 -080909090400081010111200081310121200021314150100161605171804161603061904999999990099999999909911999191099991391990999900099990992900 -060804030904100811111200130811021400130815160500171718191904170118191900999200909199999909991991119999999090099100999099093999999999 -050801091000110808091004110212091000110613141500111313141600030417180400999990939999910099999911199999009090999999099999929900990099 -080808080500010910101000060411020400121313140300151313141400161617171704999099119993999999010990999090199999990999290999999099990990 -080309101004111209101000050209130400061413130100151516160400151717171700299901999991999991909900909919999999390191999199999900999999 -080609101000080802100300111213041404111516161400111716161400110105181804991999019299999990199990990991099009099999999199993009999990 -080801040500080909090900101010111100120602131300040414131300031515040400999999030099999991909999999091099909990919999099999100929999 -030808090200040404101100120613101400121215101400161515101400171705011400291199009199991909999990009999999900990999999999909039999999 -080509101004111209101004011314140300151614061704151818191700151818021700099900999990999090009931999999929009909910999991999919999199 -080909090300080210101100081212101100080613141100151617040400050117170400999299199991999999999909099999999090091900091099903999999909 -040808090900101008090900111213141400030602141404011515150400051617181800999990099999909999990911999291999901909991093999999009900999 -080909010400080409101100081212121200131414021500031414051500061617171704099999993099900990919999999999919191192999999909990099909990 -080801090900041011090900121314151604050214151600031714151800171704150600999999039990019990919909100099999919999199099999929990999099 -060808030900040808040900101111021200101111130400101414151500040104051500099299999999999909001999119999999999099190990909903009999999 -030809100600080809110400021213140400151515150100161616171704051818171700299099990999900919099919009919099999390999999909000999999999 -050809090300101109120600100402130400101413130400011515151500161616171700099299099999090999109999109909999099099091993999999099999099 -080109090600081010101004081112120400111112120400130514021500161603171800999099309990999091999991909999999999090991999001909991999219 -080909010400080910111104021213111104141515161600171803161600051919190600999999903099999009099911190199099199990929990999990990909999 -080808080500090304021000091111121300090614131300090415161600171704011600999999291099901999991909009999999900999991990909909039999999 -080904100300081110101200081302141200061313051200151617181804150119181804909299099990999990199991009999999099999910990199093099999090 -030801090900100808110900121213140500040213151500161713151504040618181800999992930999909919109999909919099099999199990199000990999999 -080309090500080409090200081010111200041314111500061616171700181616011704929999999099991990991909999990919000099999199909909939909990 -080109090900081011040400081212131300081212140500150402161700151506031700999999309999099991900909099999999990090019999911999099999929 -050808080804090910100100090911111100061212021300141415161700140304181904999900090999993999919999999099919990199991099119992990999000 -080808090400040210100400111103121200111313121200141313051500140116040600999099110990999991290999999999999190999990090999993090999099 -030808090500100808091104121313091100140213151104161617181804061920011800999092999999909019999999199199199119009091999909099039900999 -080910041100120410131104121213131100011415151500051602170300181818180600099990090999999099099999999900909399999111999992901199999909 -080809100600080811120100131411151600130517171604130417180200130318181904990099909999003990919909919909099999909999190999999991992910 -080808010400090910101100090910101200060213141404051516141700181819031704999990993099990999990990999991909019909199990190990199999290 -080808010900021010090904111010121300111404150400111617151500030517061800999991913999919019990999099900009999999099999099920990999909 -040804030600090910111100121314111104121514140200161617171800160117170500099999002099999990099999990909919099999090199191993999999909 -050804091000010811121000130814141000130814040300130415161600130602171700009099990993009999999999999999999019999010299999999119990199 -030808080400090910111204090902121200131405151500161717151500160617010400999092909999900099999991199000919999990099999999990930999999 -040809090900011010100200111106121200111104121300051404031300041414150400019999199193999990991990999999999909090092999999999090909099 -080808090900030402100900111106121300041415151300161715151300161805011304999992919999019999910999099909199099099099999099990039909990 -040809100400110812120500110813141400111513021400111613061700040113031700000099999999999999090909999999999111199999191909903999999929 -050804090400100811091200131111091400150616161400151516161400031702010400999990909099990900999909099999099909999999999990921130991999 -030809091000060804090400110805121300140212121300141516160100141716160400209099999099099909999999999010999999099109999193990999909909 -080605090904080810090300111112021300111114041300151617171300150117171304999909009299999990019991199990999990999199990099993999999900 -030808050900040208040900101112130900101414151500101406151500041616010400299099999999199901909901099991909991999999999909990930909999 -040808080400090909101000050211100100121206131300141516131300030416160400099999990099919901099999939910999999999199991099929909990909 -080909100500080909100300110212101300140412121300151515150400040104160600999099999990992909999911199199999999091099999990903909999009 -080809100400051109120300130209141400131515141404131516171800130619011804999099090999912900999991999919999999909910090919999039990990 -040404080106090909081010111112081010111312081405041302151414161304171803990990099309901990999999199909909999999919909919909919909012 -080805090900101010090904111213140600151212031604171702181604170119201600999990909999999009909990009099999199901912999999093119999109 -080409100300080211111100041212131400151616130500151616130400150401130600901299919990199991999909909991909099999999999900999399909909 -080409090300080210090400081111120400081111121300141414121300060105120400999299019999190991999999009999999999990919999990903099999909 -060208080800040910110300121314041500121214051500161614171700161601171704019999119999912901999991099999999909999990099009999399999990 -080804010900060810110900120413110900121414110900120502151500120416031500999999903999000909999909199991999099999919999019999099990929 -080808080500010910110400120910100400120413021400151513061600151513031700999099099993190999909909909909199990190990199999999991999929 -060808080804010910111100121313131300120414151600121717021604031805191600099909099993009991999909999990199909999991999910091909929099 -050808091000010811111000121311110400121406021500121403161600041404161600090099999993199990999909909999199090199999199929999999900999 -080901040500101111111100121306141404151302141400151316171700041303171700099990030099999909919999990090999911999990999199909299999999 -080809101100080809031100121302141104121516140500121718191904122001061904991999992999999990199991900919999910999919099009090309909990 -080109101004081111120400081311140600131302140500151516141704151518190300990909300999990999999991009099999919999019099990099199999129 -080601091000081109090200121314031504051614171804191914171804191914171800999199039190099909091990990009219999109099999999099999999999 -080809091000110809031004121313141004151313141004161718140200050106191900909990999999992009999999990099999999900099190119903011999999 -080601091000111111091004121314151000020514161004170414181800171703181800099990939999909099199911099109099999001999990909999999992999 -080106090300081010090900081010110200121213140500151516161704150416160400999299309999999999991909119990099909990990099990099990909999 -080808010500090910111200090913111200140213111500160413171504180313040600999999903099910999199990999999909119991990990999019900929999 -040808090300100808090900100402110500121213141400121215161600060417011600099999999299919999199990909091099901999999199909909039990999 -050801090900101010101100121206131104121404151100161617021100030418181800099999030099999990019999990909199909999991999119929909990999 -080808090300101004090904051011121300141414021300151516171804151501190600990999999299909009919990999990199999199009199911099309999909 -080808091000011111091000121211091000131204091400021516171804041506030500999099099993909991999999999199999909091999091119009020999999 -030808090500101008021104101012121300141414151600041718181800171704010600299099990999911099991990999999019999990900199099999030999999 -080909101104081206130300081214020400081205151600011215151704181819171700999109091299099999919991199999909090999999093099090999990099 -050809091000031109091000120213131000121413130400041515151500161606010400099999099999999920099991909919909199999991999999900030999999 -080801050904081010100900111204130904141502131300160317181800061917181800999909030999990991909909090019999919990910999999902999991999 -040808030900100804060900101011020900051213131300011214040400041515151500099299999999999990009999019009199919999900993999999090909999 -080808080300090910020500090904110400041212111100131312141500131301040600999299919999010999919999009099999991999099999900999300999999 -040608080800091010110100121010110400121302111400041304110500031304151500999990011999993909999909999991909919099999090099999909920999 -050801040900060808100900111213100900111214150200111216171700041204170300099099939999919909099999919990919009199901999999999099909929 -080808080300060209101104121213141400151516140500151517181804041917011800999999099290111091999991199999999900099991999909090939909999 -080808090900040410090100111112131300111102131304141515160600140517180300999999909999003909919991199999999919900919099919999919990029 -080309051000080811111000061204021000131314141000131315151600040415010400929099919999999990919999999000199999199999199091909930990999 -030806010500090810111204090813141504090216171500181819191500202019191504299999903099990099010909090919199911999090999999999999990990 -080802090300041006111100041212041300141212131300141516171700140105171700911999191290099991909909999999999090999109999909993099999999 -060804010900041010100900111112120900111112130400051402130300041414151600009999093990990990919999999999909999999919990919999012909919 -080804010600080910111204130514141400130215151604131717181600131717031600999999903090090099019990999999199919009199990919999929999999 -040408030900101108080900121305020900121306141500121617181500120117171504992990099990999909919999009999199090999991990119993999999900 -060808090400101011020400101004121200011305121200131314150300041414161600990090099999119999910990999919999309999991999992990999909099 -080909100500080909110100080612111104131415161704130215151704131819200300990099999990903990999999190991099009009999999199091999991129 -080409030500081009111200131309111400131309110200151617171800040106171804999999092099999900990999999999909999199009190191903099999990 -050601080900101112130300141515021600141715041604141718181600141919191904999190031290199991919909199999999090909909999990990999999990 -080409091000080603040200081112121300081112120500141415161600141401041600099199929190990999991999919999999909090919999009999309999999 -080409090400080809090600100411120100101314140300101315021600041305161600999099099999090999099909039999199009999919299919999919909099 -080909101100080909021100011212131100041205031104141515161600061515171604991999991990991991999939919999299009909099990999909999999000 -080804050900030810110900040212110900061313111400041513111400161601171400999992900999999991099901109999999099999999990019990309999909 -080809090600080810110300121210131304141215131304141617051804140119200200999099990999099999902999990990999999909009190109093191999119 -080106050400080909091004080211121300141515161600171818191904031818191900999999300099990099910901199919909199991909099999029999999999 -080905100600080911101004080912021304081414151600011414041700181818180300999999909099999099009999910900119091999999193999990902999999 -040801090900060810090900111111121200041314121200151516020500041517170300099999939990019999919999099999999900990091099919909199999929 -030805090900101106090900121102130400121114151500121114151500120401041600909992099991999999009901109999199999999999999919990390999909 -080809031000080409111000121314141000061315040200011316171700051304171700999999992999991900099909999990919090999909193119999999909099 -040103080804091011050800091213141404090215161400171715160600171715181900999900329991999999100991990919099100990999999999999900999909 -060308050904100808110900120213130900141516040904171717171800191901181800999900290999999909109991999019999100901999099999990309999999 -080804010400060809091000051109091000030412131000141414150400161602151500999990903099099999999900909999199900992991099999999199990199 -080809090904080210110100031212121200131314151504130516151504061718191900999909111999193929909999999900099999909909999999090009900999 -080604010900081011110900080412120900040412120900130514020400131315150300099999903990099999199990909099999909999991999010999199990929 -040801090900061010101000111213021404111515051600110415161600171717170300099999030990999991999901110990919990999999990999999092999999 -080504010400080809101000111209131000111209021400110415161400110617031400999999003099019909999909199999109999999091999919999199909299 -080808010600091010101100121313141400051313041400040215151600171703150400999990903099990901990999999099999999099199099199900990999299 -030809040500080810111100021213141400151515141400041616171700061616010400290999909099999991009919999190999991999991990909999930909999 -040406080800091011080804051011120100131011140200151011141600151503171700999990009990999099909900139999999091190999199999999991999299 -080903041000080911111204131311110400130214150100161616161700181818060500999099929099990000990999999991999919390191999990999000999999 -080809101000011109121000131109141404131109141400130404020600031516170500900999999993119999919909990999999999999091999900999919921109 -080309090400101009111200040206111300141515111300041516111300051716011300299991999099900901999999999910999099090919999919999939900999 -080809010400030809091000111112131000111112051000140212151600061717041804999999993099099929919999109999999990999199990100900990999900 -040108090900101011040900101012121300040205121300041414141300151516030600990990309999009999999990999919999009099199990999990190999299 -080808010400091010101000091111121304060204141500161617171800161617030500999999903090999999190999900919099099099109099199999990999299 -040104080400091010101000091111110500091213021400091515141400061515031600999090300990999999190999999909199909999901999999999991909929 -030802060900080810110900121204110900121213110900050414140100151614140400910992919999910999099999999999999900999991999993900999900909 -040801090900051011090900101011121200021313131200141516171700060403171704099999039999109909909999999199999199990199099199900299999990 -040108090900101108121200131308141204131308140500150216170400061818180300999990390991009919999999090999909999990109999900901999999929 -080809090300100209091104121314111100061315041600011717041600051717181600999290999991199019999910099990999090999199993999999909909009 -080104090600081010111100081012040300130214151500131616041500131616170500990099390999909999999910099199929111999909999909999999999009 -080809090300101011091200101002050600131313140400041516170100151518181804999990999299911999100991999919999999090910999013999099999990 -060808091000040808110300120413020500141513161600141515161600140117171704099199991299999909019909999099109011999999999999993099999990 -080805010900080810090900111112131304110412140200151612170600150412180300999999909999019990199999190909909999199991090099990919999929 -080901050400021011121300140411111300141516171700141518181704031518180600199991130099100919999990999990099909999990999999029990999999 -080309101000080602100500081112131300081111131300011414040400041414151500921999999999019999190999999991999090999199093999999909909099 -080909011004050909111000121314141000150402141004150616161700031816191900099900993999910990199909999099999901909919990990999990921999 -080903040500081010101104021212131300141512131300061516171704181501171700129999990099999019090999999199999110999919999909009399909999 -080809010500100909111200101313140400101302141500161617141804161603061904909999993090910999199999109999999991099919099199099990992900 -040508080300090908081000090902111200131313141200151504161200150106171204909990999299991999919991109919099999991900999999993909999090 -080808080400020903101100121210100400061305140400151516161700150116161700999091199999290919990990999019999909099190999090993999999999 -080306090904101010090900110212131300011415160500171818181804171719202004290901999999999919990911099991999390099119999999099099990090 -080808090400011010110500121010111104130214141400151617170300040617181800999099900993900999999919990199999119999019990992900999999099 -080104090904081011090900081002050300081212120600131314151604131314171800990909399999919999192909099911999999990900099999099900999909 -080106091004080811091000121314091005151614090200171818181904171703202104999909309999111900999999090009919999990099199999099991999210 -080104090900080810051100121212061300141415151500140404020400031616161600999999309099909991090999999901009999999001999990999919929999 -040809091000010811121000050813131000141415160400141417020600031818181804099999990993100999199999999091909991999901999090999919929990 -030809101000060211121200131314140400131314141504161616151500041701051800219999910990199991909999909999999999909109999909990390909909 -030809011004110212101000131314141400131315161704181515051700060419191900919902113999919911099999999990999990009999990990900099999999 -080809101000110409101000121209021300041209141300151617061300050117040300999990999990999909909999199999199919190199990090903992999099 -080109090900080810110600121314021504161714051804161919032000161919202004999999309999000901999999110019019919909099199992999999999990 -080804010900020810110900120504131400150416161400151516161400031717061400999991903999110910909999009199099909999999999999920909999999 -050808030904100808110900100212111100101314151500161313151500170601040400092909999999990991999991099991999019990999999909909300909999 -050809090600080809090100100211121300101411151604041411151700031811150400919090999999993991909909009919909999000999099999991990929999 -040108080800091010101000041112121200131414060500130214150400041615150300999990309990999991999909999910909099999990999190901999991929 -080808090900040402090300100411111100101212060500101212041300100114131300999999909299019909199999999901999990999999090999993009999099 -050408010600090808101000111111101000020404121200131304121200141503161600999990093090919991999999999190909099991999999909919909912999 -030809100400041111020500121313141400121313151500121617151500161604010600211099991999910909199999999999099999999919990019999030999999 -040108090900100808090904111111110400121213140600151602141700180305141700990990399990999091990999999919999910099919991199919099929909 -020808080300090909100500041111100400061111041200131314151500130104041500199291999999990991999909099999909099999190099009993009999999 -080909090300080210110500121210130400041210040600141510161600171701161600999299199990990991909999009999999910990999090009990399999999 -080809010600080809101104121313131304021415161700181404051900181803191900999999993099000099919919990109099990091900099999999999992999 -040808010500090808101000111111041200131402151200041414161200031706161600999990993090909999001999999099999911190990999999991999929099 -060408010900101108080900121113140900121113020400120415160300121705161600999990093990090999199999199999109099999991999909990092909999 -080409090300081009021100081212131104141412151100161617181904161606010500999299099999919990919909010909999999199991999000099030999999 -080809031004080809111004120609111000131414050200151416171804151501192000999909992999999009999909919090919999990990199019090311999919 -080803090400080804091000111202090500111313141400111516141400151506010400992999999099090990999901109919999991999999990909999030999999 -030808090900100408090600101102051204101313131300141415161700141418011704299999999999909990190990990991009999990999199901999039990990 -080809010500041011111100061012041300021014131300150316171700151504171700909999903090999999100999999091999119991909999909992099999999 -080809101004080805110100121212131400151515151604171718021900031818062004900909990999903999919999919909019999909099199911999990929900 -080910111100040512111100040312131300141412151300160212151704181818010600009990909999099999990999999029999991091999091199099030999999 -080601050900081010040900081010110900121202130900041414151500031614041500099099939999990999999909109909199991999919090999999999921099 -030808090900100808021100040412111100130514141500161717171704181818010600999992999091911999999990099099919999990090190999099030999999 -050808010400090810101004021111121300141106151600171703181600171719191604999990903090999099919919109199009990991999999290999909999990 -080803060900081011110904121011110904121013140100051002150400161718181900999099929999990009999999990991999009399911999999909110900909 -080809031000111213041000111114021000051516161700181816161704181806011704992999019999990990199999199909109999990099999090099039999990 -080909060300080910111200041302141400051515141400041515161704181818011700999999990290911990199909199909999099999999199901000939999999 -050408090600101008040300101008021100041212131100141215160100171717161600990090099999999999902990199991199999190919990913999099999999 -040308090900101108080200051212041300141515151504141616171800141616010600999990299090191999991909909990919099909991999900999930999999 -080401090500101010111100121212111304141402061300141516031300041517181300099090930999909999199999900919999910999019999999909129999199 -080910110300050910111200040904110200131314151600131414171700060401171700099990999299001999999909919990919999199091999919900399999999 -080106090900081011121300141511111600141704021604141805191600140319191604999999309090190909909909999909199909009091999099999999992990 -080910020500031111121204061113121204141513161604171718190100171720191900111092901999999099999999090099199009909991999093999099999099 -040108080900101010080900051106020900121313141400151313160400170416160300999990319999990990919909999900199099990991099999909999909929 -050408080900101102040300101212121200101313130400101415161600060115160400909190919290009999199999999991909999999199999009903999999909 -080808080600090403100200091111121200130511041200141414141500161617010400999999921099991990991999999099999999090009199991999030990999 -040808060400091011111200130211111200031414151204161617171800161617010500999990900091999911999991999290199999909991099090999930999999 -080809011000051112131000021114151604171118061600171119191604170319190400909990903999119999900919000190099999999909999999099990929999 -030808050900101011020900101012130900141212151500161717171700040401040600299099919999919999919999999099109999990091990999900300999999 -080808080500010910111204131310141500160410021500161617171800040317170600999999909093110099919990909999199909999991099099909990992999 -080309090900081002110400081012051300081212131300141516160100040616160400929999991999919999190990099999999091999091990993909999990909 -080809100500080809090100111112121204111313130400141402151600041718030600909099990999993999919990990999109999999910999190901990991299 -030809090900100605021100121213141100041215141104161717171700161618010400219999991990909909919990999090999991909919099999999030990999 -030809101004050909110400120602110400131414111500161414171700181801171700219909990999990909199990199099909991990999090909990399999999 -080809101100120809131100120309020500121414141400151617040400040117170600999099990999199992909999199999109099990190099099903999999909 -050808080900101112120900011312120900141402041500141416160600041703181804999990099990190991999939999991909909099919999990990919909290 -050608090900101102120300131313131400151617181400151517181404040117181404909990901290019999199999909991999910999199999999003999999990 -080903101000041106101000121314141404050215151500161617171800041617011800029990199999999991090909990010999999999190099999999939901999 -080309100600080404110200081212121300081415151300161717151300160417010500921999991099901990991999999999099009999999990901999930990999 -080609090300081009041100121302111100051414150400041414150100041616161600999299099999999900109900999991099099099999990993999119909999 -030808090900100811090400100502121300141414061500161616161704181818010400299999919990999999100999119909019999999909199991099030999999 -040809101000060802050300110812120400040812121300011415041300141416161600091999919299999909109909909099999999999019993109999990990999 -040108090900101111040900101112120600100212121300141516171300140304051300990990309999909999990910999999999199099100991999999009929999 -060108080800090910100400050910100400111212021300111212041300110414031500999990309999190999999909999991909091199990999999999091990929 -040308040900101108080900101012020900041304141500061616141500051616011500999090299999199999919990019990919099999099990901999939909999 -060408080400020904080100100911111200101311111400101313051500031616160400909090999991993919019991909999909909999999099909920990999999 -040808090904010808101000111112130600051114150200161617171800160417170300090909999993909999199999909991099901190099199991990999999929 -080809101000011112051004131313130200141515161700181515161704192006031704900999909993009091999999919090919990990999999999009999900920 -030806090904080810090900111102040500121212121300141516171300041501181300209909999999909991090991999991099999990091999919909309999909 -080809090900080810111100021203131404151515131604171718192004171701060500999999909999099911990992990199909990909919099000099300999999 -080804091000080206111000031212121000051313141400151616141400041601040400990999190999099921909999999991909999990919990909909300999999 -080304091004111112121000110513141000021513131004161617180100191919190600290901990999999999909990099199999199009190999113999909999909 -050808010900040808090900101010041100020612130400141515161600141703161600099999993990919999190999909190909090991900999999999999912999 -050808010904101008110900101012130900061414141500161718180200160318040400999900993999999999019990009999199099199099190991999990992099 -080809090300040609020400101010101100041212131400051212131500161601130400909299999999019909910999999991909099999999090900990399999909 -080805010400080910111200060902131304140915131304161615170300161615171700909999093099110999999991190090999999900990299099999999999999 -080803060900080805100900020411100900121314101500131316101500041616010400929999990999999919099999909100999999991909999110909930999999 -050803040900100806110900120811110900120213141500121616151500120401170400929990990999099909999999909919099100999999991909990309999909 -080909090500080410100100081110101200131314041500031602170600161604171700099099090999993999999990909901009999999919099109929099999999 -080809010400080810111100121212131300050214131304031506161700181804171700909999903099909999919999099999999011909199099900921999999099 -080808010900021011110900121311110900120414151500160617151504031818051904999991913999090910999999999900099999991909990999029090999900 -080309041000080409101000111204020500131313141400151516141400151501060400920999999999919900919900909909199990999099999919999300999999 -050808090900100808090100100211111100121213140400151213160400030613170400091999999999993991909909999910999990091990999990929999990009 -050403080800091011080800090911040200041211131300141516161600141401170600992990099999099999991999909009919909999909190099999309999909 -050308080800090909100200111212101300111112101300140415101600170401040600929990999199991999090999199999999909990919999090909300909999 -040108090900101008080400101111121200131111050400141502160300061717171700990990399999099991900999999099909990990199999192909119999999 -080909100300081111111104121202040400121213141500161613051700160113061800099299991999999009109991999999909900099190099999993990999909 -040801090904100808090900101112131304140512131300021516170300181919190600099909939991909990099999090109999999991999991112909999909909 -080401091000081111121000081113131300141402061504141416051700180416160300099099930999919999919909999091909999009919099990909999909929 -080808050600090909091000011111121300041111141500160317141504161602140400999999090099999999000939909999909990990919992999099199991909 -060804030500090804101000110812121000110812120200131414140100131315160400909990992099999909099909999999919909199919999993999099990009 -040801090900101011090904101012121200021304140600151616171800151503051800099999039999199099009999999910009199991990990990999909992999 -080809090904080810110100121314111504121604111700181806190200180319190500909909990999903999099990910900919099999099199091999990992999 -080801040600080809101000111111110400121302141400121516171700120405170300999999930099199991909999909019999911999001999999990099999929 -080808010600091010111200131010141400151504021404151503160400171718160500999999903090900909919999999090999999109991099999909299999109 -080409040500101009111200101009131300141409021300141415160300060115150400099990990099999999900999999909199999999901299199903919999909 -080809101000080811101000011213061400151513041400150405041400021616170300909999909999909990900930999919999990999099999999919009919129 -030808040500040908101000110902041000110912131300110912131300041401040600290999999090999999199991999999009999999999990109990300909999 -080809090300080409020400101112131400101512160600011512171700051504171700999299999999919900910990909999199091999999093109999999900999 -050808080800010910101000041112121304141512121300061616021304031718191900099999099993199990910909990909999099990991999919091999920099 -030802090900080810090900111112121200040413040600141414141500040501161600919992919999909999199990999091999999999010099999900300999999 -080809090300100809111104101202111100101314140500151616161704060118192004999299999999999090199999199909199099990019099999003090999000 -080809010400040809101104120509131300121409061500120216171700031816171700999999993090010090909999999999909919099199090199999999921999 -040809031000110512121004131306021000141515161000141517171800140117170400909290009999999009909999919900199991999909990990993990999999 -080806010900080810100900111213101400040504151400161616021400031718181404999999903999090999099900919009999990999990999901999919921990 -080802040400080809090900031010051100011213061100141212151100141416171104910999919099999929199999099991999319999990990909999099999000 -080109100300080811021200131415121200131604171704131618171700061618050400991299319999919991919901199909099990909999999099999990909099 -060108040904101112120900131412120900041415150200161415031700161405181700990900909990099991999909909099999919099999199999999929900919 -080910110300080212121304081412121305081516161304171819161300060120202004911299199999999091999999990910999199001909991099903099999990 -080105030900081002110900081212040900081313130900141404150600041415151600999299309991911999109919999999999099990999999099909990990909 -080904101000061104101000031104120500131114141500021116161500171716011500090990099999909999909999009299099199999990991990919939991999 -080809010500080809091000111112131300141516131304041717021804031919190600999999993099099990910999099990999009900999199901099910929999 -080808080200010910041100121203111100131414140400130615150400130415150500999199919193109990999999299909999099099090999990999999990909 -080309041000080909111000081206021000121213141500161616161700051804011704929999990999919999919999009099199909199909199991990939900990 -080909011000040509111000041213131400151513021600151517171804060317171800099990993999990990019990919099919909199991099999009999992999 -080809010400081010111204131010141504130616021700181816171700181816030500909999903099901099991909910990199909190999999999999920999999 -080808030900101112090900101113020400011114150600161117171700161604040500999299909999199999119909109999099309099909999999990900990999 -080509090400081009030400081102121304141414151500161717151500161817010600999099099990129991990991110999919990999999999909999930900999 -050808091000030804091004111112091304111114151600170218181600061918011600099999999999999020090999990990009990991990991990991939901999 -080809101104011209131100141509161100060509040300171818191904171702191900999009090993199990909909099099099999999019299999099199990199 -080910100600081111110300080212040500131404151500161617171500160117170400909099099999992991999990099019909199991900999099993990999999 -080808080904011004110600121213021404121313151600171718150500171718150300999009191093099990919999000999109999999909099099999999999929 -060508030900101108120900130214120900130404120900131515150400130116160400992990099990999909199911999999999990099090991990993099999909 -080808050900101010110904120313111400150413110600161717111800021717010400990999909999990099090929999199909999991009999910919930919999 -040809090900100811051200130214151204161615151200161617171804031917010600999990999099090909099991190019999999099991999990091930929999 -080409031004080809111000121209131000121209050200141516161700040116160600099909992999999990919999919999919900999099190191903999999909 -080609100400081111100100080211101200081314141200151614040400030517171700900099999990993991999999109919099999999199091909929099990999 -040104080800090909080800101010061100120413020500120414141500040314141500999990309999909991900999999001909991999991990990909999992999 -080909010600080910101100121210101304021205141500161617141804161603140400099999903099990999990991990199009999991909099199099290999999 -040801091000051109090400121313141400121313141400120415021600031715061600099099039090099999019909999999999999999091099919999909921999 -060103080804090910101100090902101204131314151600131714181800050414181800999900329099999999990991190099009999999990090909900999999999 -080808010400090910101000021112131400150513131400161604171400160306181404999999093099199919099990009109999999991900999999999909929090 -040801090900101111090900101111121200100402041300051414061300031404041300099999039990909999909999999991909090999919990909999099929909 -080803090904101112090900021314061500161714141504181920201504051920011500929909199991009919999911999999099009000991999099009939999999 -040809101004111111021000031213141400041515141400061516161600171701180500000909999999910999119921999999999090999991990999990309999909 -050809090300101010091100011212130200061212141500161617041504161617170400099299099999991990991939919999109091999009999909099999999909 -080105090900081011090900121212120300131313021400151617181804040617170400999999309990099991909999999909129999990991190099000999999909 -080401091004081112130600080414141500081616141500171717021500031818051500099009930090019999919990909990999999999991999919929009999999 -040809091004011109101000061202131304141415131300031617181800191919190500019909199993999999109901090919999909999109992909999909999909 -050808090900100808090400111111021200031313141500161717171700160604010400999990999999999909000999119299019990999999190999990030999999 -050809101000030411111200130611111200130414150400131616171700021616011700000999090099999929999990999990099999099009999919919939919999 -080805090300080804091000111102101000121313141400151313141600060117040400990999999299990909099991199199999999991999991900903090999099 -040108090904101111111100121313131300121414021500121414161600170406030500990900309999999901999909999919999991199999199999909020909999 -080106090900081011110300081011111204081013141504161617021800161617050400999999300990999999992991990991919991909001199991999900999999 -050806090900101111110300120213130400121413131500121616161500120104041700909990090999992901999999909919999199099909991999993090999909 -030808080400091010101104121202131400121215131600170518190600171701191904999992099091999099190999199999909901090919999000999399999990 -040808060300040808020900101111090900121212051300011415161300041717171700099999990299919909119909999991999999999910993199999000909999 -080903041000111212121004021314051004151516161700151816161700181801190600129991990999999010999999090100909919099099999999999309999909 -040808060904100808111200101311111200141415021200141416171800050116031904999000999099999990999999909001199919999991999091903991999920 -080805010904080810110900041213140900060214140904151515161700180316161700999909903999009999019900909999999019909199099990919999929999 -030809090400100808111204101314141500101314140600021604170100181818180500999992990099909099900999909999999909091900991993991919999909 -050304080400090910101100090210101200130414141400130615160100171717161600990990290099999999990911909001999999999991999093999099999099 -080109090300081009050400111102121300141415120400141416121700061616120400999299399991909919190991009999999900999999099900909990999999 -080809091000080409090300110412021300111412121300011406151300041405160400999199999299099909919999999909199019999900993990999909909009 -080802090904100811090900031211130600041211141500161617181504161605011500919909919991999929900999999999099901090991999009099039999999 -030809090600100809091100101213131400151213161604021217161604041218010500999992999099090999990999999199009999901999991919009130991999 -080909090900080610110100121314151504161602151504171618180400031919180500999999011999993909109900990991999919901909099999929999999009 -080808090900101006090100101005111200131313131400040415021604031717171600990999099999903999919999019999019999990909199091099919929999 -080901031000080911111200130911111204140615160200171717050400041818181800999299939190099999999909990001919991190990999999900990999999 -040809101000111202100300111314141404111515040600161515171700160105171700091999019999192991099909990919999990999999090909993099999999 -080904010400080910101000080411111200020611131400151505041600151503161600999999903091199999990990909199909900991900099999999999992999 -060801040900100811110900121314110900021514041600151514051600031714041600999990930990190991099919999199909199099999999909991999929909 -080901051004021111101000120613140400121313141500161717141800031717140400199901130999909910000999999999999999091909099999929990999999 -080905031000081112131004081212021000041414150400061414161600171701161600909999092999991090999909119991999099099990990909990399999999 -040809090900010810101104121210101100121213141100061516021700031515050400099999909993190099999990999991999991999991990110999900929999 -050804090904101112090100101312141500101314141600100217060400181818180300090909099990003999919999909999909919999199099009991999999929 -080808010400091011121204131011141400041011151400160211171800161603060500999990903099019009909999999099999990999990091199999900992999 -080808090900041011120100131313120500040614121500161602121700160304171700999999900990903990099999909099999900099999099119999099929999 -080803090500080610111100021213111104011413151600041413161600171418191904929099990999009919999911990999099310999999999909909999900090 -060804030900101011120900131014120900131516050200171718191904171701191904099299009999999999099990099909919009099009199919099399999990 -080801091000111213091000061205091000041202090400141215161600041515160300999099039990019909999990999999909991990919990919909992999999 -040108060000091008080000111012020000111003040000000000000000000000000000930990999999099909919909199992099999999999999999999999999999 -080403090000080209090000080610100000110104040000000000000000000000000000099999929991199990099999999190099399999999999999999999999999 -080304090000021011090000121011110000061001040000000000000000000000000000299991909991909999999901999093099999999999999999999999999999 -030408040000090902040000060910100000111110100000121212010000000000000000990992009999199999109909999999999909999093999999999999999999 -040809030000040809100000110809020000040801060000000000000000000000000000099999992999999909919901199999099039999999999999999999999999 -080109090000080809090000020410110000121303110000041306110000000000000000939999999999199919099909099199999129999999990099999999999999 -060808030000040808090000041002090000011111090000121211040000000000000000099999992990999999099909199901999999993999999109999999999999 -080909030400080804101100061212131100011212021100141414140400000000000000999999092099099990919909999999199399099191999990999999999999 -030408080000091008040000090211110000061211110000011313130000000000000000999992099999099999009911999999999099999019993999999999999999 -080809030000080809040000101102040000101213130000100113060000000000000000992999999999909990199999099901999119999990993999999999999999 -080801090000080809090000020404100000111203100000061313130000000000000000939999999999099919909909099199999129990990999999999999999999 -080801090000080806090000040210090000111112130000031104130000000000000000993999999999909990999991199010099999999909992999999999999999 -030809090000040809090000040210100000111111100000040604010000000000000000299999999990999991909901999999999990990003999999999999999999 -010809090000041009090000111002060000111012120000041012030000000000000000309999199990999999909901999991999999999999990929999999999999 -080103090000081011090000081010020000121212120000041304060000000000000000999999329990919999919999199909999999999000990999999999999999 -040408080800090210110600091212121200031313140100041313141400000000000000909990909991990991009999999299199999399999990909999999999999 -080109101000081111111100081206020400041313141400041313140300000000000000990999309990999990910999099009199999999999290999999999999999 -010808040000090808100000091106100000091202100000041203100000000000000000999993990999999990999900999999999111990999999929999999999999 -040808010000020910100000110410100000110312130000110612120000000000000000099999903991199910999999999999099290999999999099999999999999 -080109090000080809090000100211040000100411120000100403060000000000000000399999999999099901999991099999999090999920990999999999999999 -040808060000010808040000091004030000091010110000091202110000000000000000090999999999909930999900999999299999999999991119999999999999 -010808090000040808090000101002090000041011110000041206030000000000000000390999999990999990199999999091999999999002990999999999999999 -080808060000040302090000101109090000120413130000120113130000000000000000999990210999999999199900999091999909999999999399999999999999 -060808030000091008040000091002110000091012130000011004130000000000000000992990999999999999109909999991099910999999993909999999999999 -030808080000091006110000090204040000011213130000121213130000000000000000299999190999099991909900999919999999993999999099999999999999 -080409090000080209060000080310100000111212010000041212040000000000000000999999099991199999109929999990399099990999999909999999999999 -010404030000080209090000101010100000111112120000111106120000000000000000999993002999199911999999999909999909999909999999999999999999 -080803090000080806090000011011020000041011110000041004120000000000000000992999999999099990919939199999999019999990990909999999999999 -080409100300080409110200080409121200131309120100131314140600000000000000909299991999091999991990099099999909399990999990999999999999 -030806090400100802111200041313111200141313111200141404011200000000000000990092990991119999999909099999999999099003999999999999999999 -040808080800010910111100041210101300141402150500141406150300000000000000099999099993099991990909909919909911999909999992999999999999 -080909040300080904101004081112020600081314151500050114151504000000000000990999999299999090019999009909199011990399999999099999999999 -040808090300101102040500101112121200101113130400100104130600000000000000091299919999909999190909999991999919099309999990999999999999 -080804030900080810020900041112121200131415150600130115150500000000000000999299909999111901999999999910909009999399999990999999999999 -030808080600091010101000110412121300021414131300041414010400000000000000999992990099999919990999999109099191999993090999999999999999 -080804010400060909090900101011121200101302121200031414140400000000000000999999003090999999109999999901999999999019992990999999999999 -030808080900100411120900100213130900141413131500140504010600000000000000999992990999009999909919909919909919999903090999999999999999 -080109100600081109121200081109121200081302140400031504141400000000000000990099399990199999999999099991099919099109992999999999999999 -080808060400020909090900100411120100101011131300031404131300000000000000999999900091999910919999039999099999992099999099999999999999 -040408080900100608081100101213020400101213141400100113140300000000000000909090999099099999090909199999199919999399299999999999999999 -080809100400080809090400111111110100121302140600121515150300000000000000990099999999990990909999939019999910099919999992999999999999 -080804010400020809101100120613101100120314141100120414141100000000000000999999903091110919999990099999999299099999999099999999999999 -080808040900041010110900121010040900121202130900060103130400000000000000999999090990900999999999099911999991990399099929999999999999 -040804010900060808100900111112100900111102100900131314150300000000000000099999903990900999999990099999999991999019999912999999999999 -040108090900101010100900111112020400111112131300040612040300000000000000990990309999999990919990909999199999990099299909999999999999 -080809040300081010101100011212021100041313141100061313041100000000000000900999999290991999919939999991199091999999990909999999999999 -080802091000081111121000041111030600131313131400040115151500000000000000911099191999999999929909999919909999090309999999999999999999 -030808090400061002111200041313111200141413111200141401041200000000000000299099910990019999999909999909999991099939999990999999999999 -030804090900080802090900100411040600101212121200100113131400000000000000299999909999109999199999999901009099999399099990999999999999 -040806040900100811090900100812021300101415151300100115150300000000000000999990900999999999009999119901999019999399299999999999999999 -080109090400081009090200081111111200081304141200060414140300000000000000999099399990191990991999999909999909090099299999999999999999 -080802090900030804100600111212100100041205100400041313131300000000000000911992991999900999999909039099999990099990990999999999999999 -040808060400010902101000110903101000110904121200110904120400000000000000099999110093919999999909299999909990999999099099999999999999 -080808080200090603101100091212041300041212141400151515011400000000000000999199929199990990901909999999919090999903999999999999999999 -030808090900101102090400101212121200101314141500060114140400000000000000299999199999100999199909999910909999990399099999999999999999 -040809040400011009111100101009111100040602121200131313130300000000000000090999099093909999999991999991999909990910999992999999999999 -080808080400090909061000111112021000111113041400040113130300000000000000999090999999999909909991119990019999990399299999999999999999 -060104080800091011080800091213141400091202031400041515151500000000000000999990309990109990109999999991999999990912999999999999999999 -040108080800091010111100091010020400090412120600091304120300000000000000999990309990909999999999109999199099099999990092999999999999 -080909031000080409021000111213131000111413131000110401060400000000000000992999999999919900919999999909999009099030099999999999999999 -080808080300090910111100040910020400121310141400060104141400000000000000999999099299999999919909109909999010990399999909999999999999 -040808080800010910040400090910021100121210131100121206040300000000000000099999099993109999990999119909999990999900299999999999999999 -060104080800091011120800131312120500131314141400021515151600171804031604999990309990090991999990999999909909991999991990909929900990 -030809090904080806101000021112131300141512131304161712180100050412191900999902990999909991990919999199999111909091990993909909990999 -040808080800091011110100041011110400031006121200131302141200000000000000999990990990093909999999909999199990992991999119999999999999 -080909100600080409100300081111101200011111101300041415150200000000000000999099999999999990092909999999919399999010190991999999999999 -030809090600080802100400111112100400111104100100131313100400000000000000299099990999190999199990109999999999399909999900999999999999 -030808090600100808111200100213041200041313141200151515011200000000000000299099990999990991999901099999999091099903999999999999999999 -080910111100080410121300080210141400081515141400030615010400000000000000909999099099990999909919999910999991992093099999999999999999 -040108080300090908101100121204021100121204041100061313131100000000000000999990399299119990019999919999999909099099990999999999999999 -080609090400080409091000080211111000121313111000041403011000000000000000909999999099990990999901909919999099990193999299999999999999 -060801090400041010091100121010111100131313030200041414141400000000000000099099039999990909999909199990919999990992199999999999999999 -030808020904101008111204131313130100141414151604051717170600000000000000291109999199091099919999939990099999000909099999999999999999 -080910061100080910101104081213141104151202141404031604010500000000000000999999990999099099909999190091909019909193092099999999999999 -080808050900011011110904101011110904121302140400061303150400000000000000990999909993190099999999990901999091090991999920999999999999 -080609090300081002090400111213141404111313050400110115151504000000000000909299919999199901900909990919999990999309099999099999999999 -080808010400090910101004030211110500061213110400041213131400000000000000999999903099999021910991999990999009999999090990999999999999 -080103090904080804090900101010020400111213131400060515151504000000000000992909399999099991919999199099009099990090099999099999999999 -080809010500060809091000111111111204031313021404151515040400000000000000999999993090991990991999910999109291909900099999999999999999 -080609010500080809091000111212121204040213041400151515031404000000000000909999993099990990919909990091009919999199999929099999999999 -080801090900061010091104031010041100121313141104150205041100000000000000999999039990900099999999099291999990901190991099999999999999 -060108090904101008111104101004111200131302140500131304150300000000000000990900399999009099999999909910909911999901999992999999999999 -040808080804091010101104011206021100131414151604131414050300000000000000999900099990999091019939919909919099009990299999999999999999 -080309090400080209091004111112130600141513130100051616161604000000000000299099999991990091090990999919999019390990999999099999999999 -030404080900101112080600100212080400131312140100131312141400000000000000990092099099099999999919909919099911399999999999999999999999 -080909090900080810031100120213130400141414151500040106151500000000000000999999909099129991990910999199099999990309999999999999999999 -060108080400091008111100090203111100091213130400090414141400000000000000999990399091099999999919999912009919999009999999999999999999 -080806010400080809101100031210101100131202141100131204041100000000000000909999993099000999999999999291099119999900999999999999999999 -030808090600100808110100100212130400051415161604141415161604000000000000999092990999903999919911199900009099909999999999099999999999 -040801091000110809091000121213041004121214140200050406140300000000000000999990939999091909099990900999919999190009999992999999999999 -080102091004081112130300081114130600081114151604051114151504000000000000991109319299999999199901999999009990000999999999099999999999 -030808090400101102120500101113131400100413131400100604011404000000000000299099910999010999919909909999999099999903990999099999999999 -080809051000020909101000111203061304141414141300040401041300000000000000990990999991999911990992990199099999090030999999999999999999 -080105090900081011090900081011110400080412021300141414151600171806031604999999309990199999900999999991999901190999199991909929900990 -040808090900020808100300111212041300110412051400151516171700150601171700090999999991912919999919909999909099999910099009999399909999 -030408090900101008090900101011121304060214141400151515160400171701180500909992999999999999090999090919009919990991999910909309999909 -080909090900081010100300081112061304141502131300141617050400040117171800999999909999999990992901090911999991999190990099903990999909 -080808090600011009090400111111121200051314040200151514141604151503171800999099909993190999019999999000019999999099199999099991999219 -040809010400060909101000111111111200131414021500131617170500130317170400009999993099999909001999999999919990199991090099999999992909 -080910101004080911120500080911131404150902160300171818191904060118191900999909909999090999909999910099129111991999991909003999999999 -040809090600011011121200131411121204131502160400131705161800131717160300099999009093009991999919990999909111999999990091999992999999 -080109090600080809091000041104021000040312121000131313041000000000000000999099399999199990919900909999199929990909999909999999999999 -040501080804091011080800101012120600131312140200131304151600171703181600999900039999009909199999909909999991199990199909909999999219 -030806091004040808021000111112131000111114141400151516170100041518180500290909990999919909919999199991909999999091999003909909999909 -050108080800090909101000061112131000041402151500161617151504160417180300999990309999999909109991099919999010999019999999099999990129 -080808080300091011111104120613130200041405151500161417151500161601180400999999009290999009919909919999919999990909990019999309999909 -050108090904101111090600101111121204101302121204101403151504000000000000990900309990990999999999990991999910909190999299099999999999 -030804091004080802091000060411090100121213140500121515151504000000000000999902909999190999199990939091199991099990990999099999999999 -080905041000020311111004121211111004131214141400130601150400000000000000109091299999999019999999900090999919999030999990999999999999 -080401090900080510101000081111061200081314040200131304151500160403151500099999939099099999091909099990919909099999199099909999909299 -050808080300090210040600091112131404151512161600151512161600040112171700099299199999199999100909000909999999999999999109903999999099 -080309061000081112041000080213141004151515151600171718161600170105191904290999909999009990999919000910999999991909999909993009999990 -080509090300080209091000111112131000111114061000151616161604040104171700909299999999190901999999099990099909991999991999003909999099 -080808050904031002090900111012131400011516131400041718131404191906131400990909909999199929109919199999999311999009990990090099999999 -080309051000080809061100120209131400041515151504161616161700181818011704999099299099999919900919999910009999900991999990999039999990 -080509041000080611121004081312121000081415151000021603171700181919011704900999909999999090099999999900999919090191991999919239919990 -030408080800091010111200090413130100090213130600141515161600040515041600999992099099900999099990939999999199099110990999909999990099 -080109100400080809101100120513101100140215100600161617170400160317170400990099399999090910099999999190999199099109999990999999929909 -080809090300100809091100121314141104011516021104171706041800191919190500999999999290099909999909990901199319109090099099909990999999 -080808080400020409100100111106101000121313131300140315151600050415041600999091901999093919999999099199909999991990992990909999990909 -080801090400080210101104121310101100141516170500031516181904061516181800999099930991990011999991999190999900992990099990099999909999 -030809041000110809021200110409131300111409131300060515161600171717010400299099999090111999991909999999999909999099199909909030999999 -040809011000080809111000121209061000121209040200131303141500000000000000999990993999001909909999999999919999099099199921999999999999 -080804091000080804091000060211091200131314091200031301041200000000000000909999999999909990990991199019999991099930992999999999999999 -080808090900040402060300101011121200101013131300011414151600051414170400991999919299009909199999999991099999999019993990999900909099 -080902100500111210101304031214141500161217171500161819171504160104061500119991919099999029190999999991999019099199999099093009999999 -080910101004030902111104121213111100141215150500161715150100061718190400199902909999199099199999999991099099090099999093909999990009 -040808090900100304040900100211111200100611110100041313131300000000000000990990999992990999090911909999999999399090990999999999999999 -030808080600090902101100121204131100121414151100041414011100000000000000999992990099119999919999099909199990099993990999999999999999 -060804010900100808110900120213130900120313130900141414041500000000000000999990903999909909919911909999999299999909099990999999999999 -080808090300101002090900101011121200040413140100061515151500000000000000999299909999019999109999999091999901399909990999999999999999 -080304091000080211111000080411111000121314141000121201150600000000000000290999990991199990999999999991999009099930999990999999999999 -040108030900101108021200101313141400101313041400101515150600000000000000999290399199911991199909099999999990999909099999999999999999 -080909010400081011121200081013121200081002141400061504140300000000000000999999903090999999099999199991999901999009290999999999999999 -080803090900080804060200041010101000111213131300111101140400000000000000992999999199999900001999999999199009999930999990999999999999 -080803040900100611120900021313141400011313140400151516161600151517050400929091999999900910099919099999999399999009099999999090999099 -080801040900021010100900111212130900141204050904151616171700030616171700999991130999990919009999999190099999901099999999920999999099 -080910100500080610111200081303111204140415161200020416160100171818181800009999999090999999999912990199099909091909999093919919919999 -080503090900100604091104121302141100151316161100171318181100170118180400092990999990999009019999199091999099099991990199993999999909 -080909011004080209111000121213141004151616141000030416141700051819140600999909993990190991119999190199999999992999099909990990900099 -030808080400040909021000040909111100121212131100061414151500161705011500299999991090990999919909999990999990199991999909900939900999 -050801090900101010100400061111121200041111121200130204141400131303041400099999030999990901909999999999999999990109091999999999992909 -040808080500090910110400011010041200131314151500131316021500061717170300099099909999909990900939999991909909999911999919909902999999 -040808090400100808090400111102121300110314151500161616161500171705010600999090999990909990990991909991099291999999999991990030999999 -050308090904101102090900121111060400131314151604011718181900171718181900921900999999919909109909999919909990009109993090999999999999 -060808050900100808031104121314141504121316021700011316160400181818181900999090999090992099091990990999919099199991993999991190999909 -060808080300091011121304091402151500091416151500091717171704051801191904999990099290911099199991999999999919999910990999090309909990 -080609090400081009111100041012021100131012140300151012140400050112160400909099999990099999919909199999029099990999999190903909999909 -040809031004110809121300111114021500061616171500181616171500040105171500999200999190991999019990009999199991990999990999903099999999 -080909101100060904100400011212101300041402101300151505161600031504161600099090999099909990999939109999999011999109099999999999929099 -080808010600091011111200130214141200151514141200151617041800030504181804999999903091190919909919999919999999999909099009920999999090 -080909101000080909101000051112130400141414130100021503130400161606171804099999999999909999000900999999999991391999999299911900990900 -080401090600081011091204080513091400081513131600021717181600040317181600999999039090900099190990999999909119991999991909909999992999 -080910110300080910120600080902131404151505161600151517161800041901181804999299991999919999190900190999109999999909099019990399909990 -060404080800090905020800101011120300101013141400041515151400161616010400990990091999909909912990199991999991990991999999999030999999 -060808090500101103121204101304141200101515140200011515141600171717140400990090099999929090999909099999919099999999193911999099999909 -080609031000080909101000080411020400081213140500151216171700150104171700099299999999909999919990909990199091999919090109993999999099 -030809041000080809021000111212121200111113130400051413131504061601171800999992990999119999910999999999199909999999090099090300909909 -060805090900031010091100121310021104041415161100171718181804171701191900099999009999999929909911110999999000199991999099099390999999 -080306090400080404091000081111051000021213131000141515131000041515010400290999999099990990099999999190099199999199990910909930999999 -080801040900080810110904120610130900141410131500141416021700031616040500999999930999000009999990199099909999999991099919999900929999 -080409090400081009031100081213131100011204131100041214151100051616020600999999099099999990029909999999999399999901990090991919909109 -080304090900080802090900101010101100120604131300121214151600171704010500299999909999199999190999999900109999999991999000909030999999 -080910100400111210100100040405131300141402131300141516160600031517171700009090099999993900019999999999999911999990099099929909999999 -060108080400091010101000090911110400040212111300141512051300160412031300999990390091999999900999999919999019099090990999909999909299 -030408090900101111120600101111131300101415131300021415161700041401051804990992009999990999909999999909999910991999991900909390999900 -060808090400101010100100021112040500131313141500161617181804160317181800999090900999993991999910099199909990091909999909099999929999 -040808080300090902101104090912131304011414060500041415151500000000000000999990990299111099999990090919999390999999090099999999999999 -080403091004081111051200081111130200080414150600161414171700160118181800992109099199999999901999919990199991090099990909993990999999 -060805090400080810111200131310110100030410111404151510111400151502161400990990990099990909999990039999999909002999999999999919991199 -080109091000080809091004111112131300110205131300141503041600041717170600999999399999099019090999099919999909999190090999901290999999 -080909101004081109101212031304141212151316141706151318141901150220142105999909999990909990909999909290999990009999999911390199911900 -040808010900061008110900121212131404151513131600151503040200051717171700099999993990001999901999090999919909999990199999999291909999 -080409010400080909101100081212120600081314140200050315161704181818161600909999993099900999910999999991999009190999199211099099999999 -080808080900031010110900121010111300121204041300040214151300061617010500999999909999999929990909909999999999990100999910991130901999 -050809091004110209031004111213131300111415160100111515171700061804171700919900199999929091990909999910999911399990999999990999900999 -080909031004081112121204081106021300081415161700181819192004180119190500099209999199999099991999919900199991090019099199093990999999 -060809010500101112121304141115121600021718181600191718181604191903041600009999903091190019999999009190999099991999999999099999992909 -030608080500090908100400090902111100121213131300141415161700141404010400999092099999990999009991199999199909999099199901999030999999 -030808090500101010090600041102091200131414151500161414151500041717010400990092999999999999190900119999919099990999999909900930999999 -040608090904101011121200101013121200140213150100140413161600140313170500909900900999099999999991999919099191399999999009999909929909 -080309090904080610111104121314140500021514141604171718190100171720202000299909990999909010099999999109909119009919999013999909999999 -040803091000040209091000111205131000141414151000161616151500061717010400092999099999199901999909099919099999099919999919909030999999 -080808090400041010111100011010061200051313121200141414140300040215161700999090090999909999900939999919999999990919999999901992991119 -080910100500080910100100081112130400141402150400141415151600060417170300909099999990993999919991109919999911099999999991900092999999 -040808010900040808100900051111121200131311121200130414020600031515151500099999993990999999010909099999999909999991999000999919929999 -050108080900101008080904101011111100121314150200120616170400120417170300999090399999099099999991999900919099199901099099999999990929 -030808090600100804041100101213051100100214141100041514141600151517011600990092999999090990999991099911999199090999999990999039990999 -080809101000051109101004121309140100061516161604031702181800192020181804999999099990999090909900139091999919909190999199929199919990 -040808090904100808110100121314141500061614141704181619020500181619190300999900990999913909199900909999909009909991090919999999999929 -050108060400091008111200131308141200131515161200040215160400171717170300999990390090109990999999009991999999090199099999991999999929 -040108090900101112120900131414120600151414021600151717171604150304051800990990309999099901999909999999909091099991999999092090999909 -080409031000081102121200131313130600141415160400141405161600040117171700909299909199119901999999909919999900099909999999903909999999 -080909041000081106121300081114020400151616171700151616171700150104050300099099999099900999909909109091199099999999999999993002999999 -080104090900081011090600120411130400121211140500040215151500161616160300999999309991000919999999909909099990099199990099991999999929 -060809010500101011121300020414121500161714121500160414121800160314181804009999903099110919099990909199999909999099999990999999929990 -080109061000081111101000081213141500081212041500020516041500171717031504990999309999909991999910009999999990991909990909919999999290 -080910010600050411111104121314141504021617141500181817191900181803191900009990003099999099190911990199999009991999099999999999992999 -080805010400091011121300091415151300090415151300091616021700031816061704909990993090091990009999999909999999999999199911999909921990 -080309101000111209101004040206131400151515141400051616161600171717010400299991999991909091990909009919999991999991999999909030999999 -080804090900081010090900111010120100110513141500161616021704031818060400990999999999909909999909139991999991099091099919099100929999 -040808090105040808091010111213091014151206091614171218030402171704191919099999999300900999999900091099999990900999019099999029199999 -060808010900100808110900121305140900041515150904161617170200160318181904999990993999909900019909919099099999909090199999999991992910 -040809010400041009111200131313131200061402151500161616161500030517171700099999093090991990009999999909919091999919999999929099990999 -080509041011121309101011141509061611171718181919171718181903040102202121090990999999009900990999090009999919099999999999903199299119 -080109091010080809091112131305041412061502160312041704161612181818180404999099399909090919900990999019999911999099290099990990099999 -050803090400100811111200130811110400141515021604141715181600171701061600992990991099990909999900909999199999109999999011909399999909 -080901101000021112121000131312121404131315161400170318180600050419191904199991139999190919990999990990999990991990992999909900990990 -040804010400091010101100091213131300121202141500161617141400161603060500099999003090990999919990999999919991199919999199999900992999 -080808020400030405090900101112131300061412151500161612151500161601040400991092901999999990919900999099199909999099999919999300999999 -080509090900081011120100131314151604131414061700181818021904032020202004999999009990003990919999010999919999090999199991099919929990 -050808010904100808110900060411110900121314151600171702151804170319191900999900993990990999099999999001999000099919099199099990929999 -050108080300091010101100121313041100141313021500161717171704161618060400999990309299999901909909999099919991190909999999099090999099 -080103090904081011050904081211130200081415161600041717161600061717181800992909399999990091991901119909999900999099990999999999909099 -080109091004081109091004121213141000151515021000160617181800051920031804999009399990199090199999199990199999990991990919999199900290 -040805090900101010020900111213130300041414141400151516161600150106170400909990091999999909912909999901999099999199999099993909999009 -050106080400090909080800101011120400101012120200131414141400131504160300999090309999999909109999199999909999190999199999990919990929 -080801090400020810091100121010091100130614091104150416171700030518181800999991939099100919999999999109999990901909099099929099990999 -080801090904080810090900020410101100121313141104121516051700120318190600999909939999109910999999999190099999009909091990992099999009 -080903101004111212101004021314150500131316161700181916161704202006011700129901999999999010909999099190909919999099990990009039999999 -040808010900100808110900101212020900101205130600101414141404151503041600999990993990910991999999199999199909999991099999090290999909 -040803090904101011090900061212120200131415151600131415150400131701180500092909099999009999991909919991999999099999099099990309909909 -080808050900030602101100121213101404121215101404161718191404161618011400999092919099090999199999990991999900909919990010099939999999 -080409030400081010101000080211110500081212121304141516171300141401180600992999019099999991990991999991999099009190990199999309999909 -040809090400040609090100101010111100051212111100131214140200040315161600009099999999093909919999099090999999999990190999909991992199 -080909051000080909111104020412120100131412121500131617060400130318181800999099999091919019919909939199999199099109099999992009999999 -080809090904080810021104011212131100141215161100171806190300052020191904999909911999991090199939099999099009990900290999900999999990 -060108080804090910111200091314121200151515021600171818051904041818031900999900390999009991999990099919999991190999190990009999999929 -040809090400010809090600050810111100120813040300140215151500141404161600009099999993990999009999999090999190991999291199999990990999 -080910050300110212121204131314041500130616041500171716181800170116181800000990999299199001999990099999999999991090099099993999999099 -080309041000110409121000111313141000021313150600161617171700161604010500299091999999909990909999909199099999091090999199999030999999 -080808010900041010100900111102121300141415150600141415151600050317041804999990903999991999991990119991909909999999999990909190992900 -030808080900100404020900101111050900121211131400121204151500041606011500299999991999991990099909999999019900199991999909990939900999 -080901101000080909101000081104121300141106151604141405170200040318181800999999939999919990919900919099919990009999199091909919992999 -030809090900100808110400041202111300141404111300151515151300050601161300999992909991990999199901099919999999999109999999900309999909 -080804040500030809101000110209101000111109040600121213141500121201041500999992900099999991999999099919009999991909999100999309999999 -050108080400090908080400100911120200101006131400151516161700151504031700999090399999190999199999119909919990099099199099999999990929 -040108091000110808041200110513141200110215151500110604161600171717031600990090399091999999009999099909999119999001999999909929999999 -080809100300081111111104121213140600011516020500171818181904172020202004900999990299999099910990999990199390999191099990090999909990 -040801090904050810090904110812131400061502161400171718161400171718190300099909939999919009919900109001999991999099999099999919999929 -080909090900081003111100081004111100081012130200141516131304060117050400999999999099929999999999099999919091199019990199003090999099 -030808080900041011020900041213130500060413131400151516161700151516011700299999919990010990919909999999909999990019099990999939990999 -030402080800090909080800041011110600121011110100131314150400130405161600901992919999999999919999909099999999390000999090990009999999 -080809101004010802101000111112120600131412120300151515151600170405181604911909999993919990199999909099999099299099999999909009909900 -080805040900100811060900101213130900101402150900101617150400040117150300909099999999009990999909909999999111099909991990903999999929 -030809091000110209101000041212121200131314150100050616171804191919191804219999999990199901909999999991999901390990999000099999999900 -030408091000110512091000111112131000140213131000151616161600040601170400900992999990999999909999999190999119099991990999900309999909 -030809100400080809110600020409121200131414151200041616150100171616150500299099990999999919900909999190099199999919999913909999909909 -080808040400050910101100030910100100120413141400120415141400120215040600999990900099990999999990939299199901999919999999990900911999 -080808010900101112090904131415160500131715020400131718191904131706031900999999903990019009199990009909999991999901099999099099999929 -030408090500101108081200131302141200131315151200161615151704041606011700999092090990990919999991119999999999199999999090009939990999 -080808080300090904101100120405101304121415101600171715100200170115061800999990999299909909991999990900919919990199199911993990999909 -080809101100011212061104031213141100151516021704150518041700191919191700990099009993999099109999199299199911009909999009999999999909 -080109101005080811101204061314021204151614171804191919192000212121210300990909309099099091999999190019199019109099199999990992999999 -040108080400090908101100090905111100120213141500120613161700120313160400999990399099000999999999999190999110099999099090999999992909 -050104080800091011080800121013141400121516141404120602171700041818031700999990309999999909009900999919999910909019999919909099999929 -080909010600080909101000111102101000121113141500161718041500160304051504999999993099909900999999199091099999090910999199992099999900 -040809090904100808110100101012120600130212121400131516171804191919030500099909990999913999199990999099909919099109999900091990999299 -080808060900031010110900051010020900041213141500160417181804161617011800999999900992999999909909109990199009199099199909099939990999 -080901040500081011111200131313111400031502161400151504061400171717041400099999030099090999999999109991099919992900999999990999999909 -040808090300050608100400111102121300141414151304161617171300161617011300099299991999990900019999199901999991109099999991999939999999 -050808080300090210061104121314111100121515161600121517040400120118181800999290199999009001999919099990999990999900991999993090999999 -030808080600091010021100090912131404041512161600171512161600041512010500299999991099901999991990000999919009999999990999909930999999 -060801090900101010090904041111120400131111140500130215151600131717150300099999039999999009100999999999099090099199999191999992909999 -080801040400080809091000041109091200131415021200130615041200050315161600999999930099091999991909999909999001199090999999909990992999 -050408090300101108121204131108121200140615021604141717181800141701181800999290091999999009999990999090199999109009190919999399999999 -040809060500011009111100121009111300141015151300041015021600031717170400090999099093199999999909009091999999990991999990999910929999 -080409090900081010020400031010111200131311111400051315151500161701060400999999009990919999910929999999909999999919099099900300909999 -080809091000080809091004061112130200011112121404151103161700040518181800999099999999999090990909119999919319909999190921900990999999 -040108080800090909090600101112050300131314151500130402151500161616160400999990309099999991909901999091929999999919999919990099999909 -040308090600101112130200111105141404041515141400161717170100161818181800921990991090001999991999090099999999999901999993999909909999 -040108080800091011041200131411121200131515021600131515161600041706030500999990300990999991999901099991999991199999999999990020909999 -080109101104080802060300121314140500151314140400041616171700181818171700991109319299909919199911909099999999090900999999990999999999 -060809030000100811040000100802010000121213130000041213130000000000000000992990919990909999199990999991399999999999990099999999999999 -080109100300081112131300141502130500141616161604141718191904062018191904991299319990999901199999099911909999909000999999090999909990 -080109090904080810101004111212131304141212150200161717181900061703200500999909309999199099199909190099919999190991999900909910999299 -080809091004080809091000021112051300141115161300171118181804190301040600999909999999990990099910999199099990991909099199019300929999 -050808090900101108090904061112131304141115130200161117181904160117200300990990999990999099099990990099999911190999190091093919999929 -040104080900101112080900131112120900131114151500131116021500040517060300999990309999909909999991909991999099999911999919909092990099 -080309090900080406101100081210101100021204131100051214141100041214010400299999999099999990099999999199099190990990999190999930909999 -040808030900040808090900100411061200131313130200011415161700141405161700099299999999999900091999999090019999199910993199999999990909 -030408090600101011111200101002131304140515131604141717181600141717011600900992990099999999090991190999999991909019990910999939999999 -080808080600030904101104050212131400151512131400151512161400041717011400999992199099090091909999009019999999999999999119900939999999 -050804090900031010090900111110020400041112131400011515151400161606171400090999099992919999919999999999109011099199993999990909999099 -080906010400081010101000081102121200081314051500031316151500041716160400099999003099999991909991999991999990999919992199990909909909 -060801090400101112091304101404091500101405090200161717171800161603181800099999039090010099099909919999919999990900199999999999999299 -040808090900100808020900101005060300011112130400041104141400041115151500999990991999919991902990999919999300099999990999999090900999 -080804010900080810110900120206130904141404151600051415151700031818181700909999993999119919909910900919009909990999099999991999929999 -040104080800091005110800121011111300121004021300121014151600120614031700990990399990090999990901999999199990999991999091990991999929 -080309091000080604110200080412111100081312141400151612141400150401170500929199999190909999991999199909999099999099990009990309999909 -080804010400080809101000060909101000111111020400050412120300131412151500999999903099999900999999099999199990099091999999909912900999 -040808090900100808110600021213141400151213141604170513181604190313011600999990990999909909090919999199999919001999999010019939929999 -080809041000080209101000030509061100011213041100141215161100141217041100990999199999199929990999099901999319999900990900999099999099 -080804060900031010110900050410020900121212130900141515161700141515010400999999000992919999919999999000199999190909199991999930999999 -080809041000030409111000120209041000131409061000150516171700151516011700909999990999909920999991909119999190999919099919990939990999 -080906101004080811101000011211020500131313141504161617171800041917170300009909999999109991990939199990199999109090199999990992909999 -040808010400090910101000090911121200021314061200151516031704151505171700999990903099199999090999999190999190999199099129099999990999 -080801090904080810090904111213140600151202160500171718191904202020190300999909939999009099109901909099099919090919999919090999999929 -080109090400081009091100081212131100080214151504061617181500161604030500999099399991099999909919909919999910909019990919999920990999 -080909010600080909101000080411121300041414021500041405161600171717031600099999993099909999091999919900199099199999190999990029999999 -080801090900100811090900101212041300020414151600171704150600171703150500999999939991109999000999999199909090091909999990999999992909 -030508090400100808091100120413141100150613141100021613140100171613140400900992999099999919909909999199999099091999999113919999919909 -080801060904101011120900101013140904151503160200171717181800190405181800999909030999011999999999190902119999199090999999909099909999 -040808010900020808090900101112131400150412061404161612051400031612171700999990993991919919000990999109099999901999999909929990999999 -080309090400080509091000081111120400021113141500161713141400160613010400299999999090990999909999999199009909991999091119990930999999 -080809101004020909101004111213140100111516171700111518171700030619040500990900999991999019199990139909099990999909999999929090990099 -030809061000111112021000041113140500151513140400011513141600041713141600219999910999910999919990909099999999099999993110990999909999 -080910101000031112131404150212161604051717161604181717190600180119192000199992199099990091909901090091999999909999990999993090999909 -080809090900080603100200111204101300051415101300161616101700041801171704999999929199999900991909999900999999190009999919990309909990 -060408010400090510111200091313111200021313111200141415161200031417170400909990903099010999199999999099999199991909999909999909929909 -080804030900080410101004111205020600131414141400151616171800151616011800999299909199999000910999999000199099999919999910999939909999 -060801091000111112121000111112130500141414141504161616021504031718191504099099030999099999999999909991099999009091999999099919921190 -080910010600080911121200131305121200131314141404150316021700041616041800909999903099909909999999999990919909900999199911902990999909 -030808080200040909061000050409111100121313131300141414150100040415150400299199999190990999991999099009199099999991999993909099990909 -060108040400091008111200090902131300141516131300141515050300171717170400999990390091009999990991999091999091999999299909909999999909 -040808090300100808090900111104120200131314121500161306121700050104121700999290999999999900991999999090919911199999990900903999999099 -080801050900081010110900041010120900131402120900131515151600130404060300999999030999909909999999999991999001199909199999990002999999 -040809090900080810061100121310141504121310160100121702180300121905181804009999999099990999990999100999199009399019999919990992990990 -030802090900101105090904041213141400041516161600151517170100181818180600911992199991999099019900099999199099999991999093999909999909 -080509090900081011031204081302041200081415161604171815161900171715010600999999012999099099199991909919909999900199990110999930999999 -080904031000050911121000060213141000151614141000151717171704181818010400099990902999919990199901999919999999999109090999099030999999 -080803090900081006090904021011041200131313131200141516161200051704011200929999999999999019090990999109099999090091999999900939990999 -080910011100080910111100081210131300061410131304041516021700031804051700999999993999999990991900099999999009909991090119991009929999 -080805010900080810110900061213140904030415141600171718141604171702141600999999903999000999919900190991999999092019999999099199991999 -030809091000061112021000131314141000131304051000151616161604151517010400299999190990111999999999909999999999099009199999099030990999 -080801090900061011090904041012121200131004140200151516171700150518170300999999039990099099109999999099919009199991999009999099990929 -030809090500100811041200130811111400150816160100021717181804041717061800999992909099999919900999909199099999391091991919009909999999 -080910110300120213051404121515161400061517041404181817171400181801191900091290019999199091909999099991999999900990999090999309999999 -030809091000111109091000121102051300121415151300121615151300060401041304219999999999999999190991999919099919999999990090900309999990 -030809041000041112121000131412121000060215150500161616171704181801171700290999109990999991999909909010999919999991099919090399999999 -050108040600091011121200041311141500161617171500161617021504031818181500990990309090999991990900009919999919999991999999099919929999 -080809090500030804101000110212100400111314141500110614141500041617011500999992990099999991099991999991009009999999999990990039900999 -030808080200091005041100041213131100061413131100151616161600151717010400299199999190099900909999999909999009199991999999999030909999 -050808040900100808040900101111120900101304020400101313140300060104141500999090999999909990999999109919109909999991990999903092999919 -060809041000010811111000040811111000121213130500121415021600041703161600090999909993199999999909909909109999999991999119901909992999 -050806090900010810090900110810120200111314121500161717121804041717031904099999909993999999909901119990919909999099190999009991999920 -080809101000080809021000111111050300041213141504161617171804160117170600999999991999919990192999099919999090009109099099093990999999 -040808010900101008110900061012130900141515130904161705131804031919190200999990993999909999919900019909999099900999190099099991929919 -040308080500090608080200101010111100121212121100041314151500041301041500929090999999091909991999099999999999999990190019999399909909 -080501090900081011090900081010121300141516040600171502040300171718181804999999039999199999909909009091009999990919990909999192999990 -080801090900080810090900110410121200130310141504021606171500161605180400999999939999109919999909999199099990001290999909919900999099 -080808080600010909100500110909101200131415020400161414171700041818031704999099099993990999999909009001909991990991999999900999999920 -040601040400080910101100121212101300141516161300140516021300031717171300999990030099099909090999909099199909999091999999999919929999 -040801090600101010100400111212131300111205140200110414140400111515160300099099030999999909190999199999919990199099099999999019999929 -080809010500080809091000041111121200131411121200040215150600041616160300999999993099990990919909999999999000990991099199991999909929 -080903101004110205121300141415161600061515161600041717181800041717011800129901990091909991990999999919999091999991990909999939909999 -080804090900080810020900041110120300131310120600131310141500040501151500909999991999099999912909199909999909999999099909900309999999 -080109091000081109091000061213141000151516021004041616171700041805031700999999399990999991099901109900199999900991999999990099909929 -080809031000080909111004120213131300141415151500141416171804060119040500999999992999990000919991999010999999999999999000003090999099 -080808010900041011090904121304141400151602141700061618181700031618180500999990903999009090991909999090909911990909999999999990929999 -080808090400050210030600111010121200111304121200041415161600171717011600991099192990999991990999999919999090999199099119909039999999 -080910041100081213131100011213041100051214141100041215031600061702161600900999099990990999999930909999999099999909990992991099901199 -080809100400080804100600111112100100021212101300141516131304031705181800900099999999900999999999139099999199091999991909091009929999 -050801090904041011090900121011131300121014021300121015161704120315180600099909039990099999909909199999999991199919099990099909992909 -080804010500090810111200091314041200091314141200151316021204031717180600999999903099991990009999999999999999190991990019099109929909 -040808010900040408100900111212120900131314141500131316160200060317160500099999993999990900019999999099199999199999199091909190992999 -080609101004081102120300081314121200081514160400171514161600040114180500991909019299909990199990999999909010990999999999903999999009 -080809010400100809111204101309111400150209111600150417051800150306181800999999993099010090999909909999909119999909099009999999929099 -080501090900080810111100120213111104121415160400120315171700061815171704099999930999019999999911190909099909099990992999999999900990 -080809050300080810111204130410111400131515021600131517180600130119191904900999999299999009991909099990919999199991990190993119999990 -050809101000110909101000061213130100140215151504161617181804160304181800009999999990909901199999939910999199901900999999099099929999 -040808050900100808110904120313140904121502160900011517171700061518191900999090999990909099909992100999199091999919993999999190901999 -080909010400081010101004021112131404150612160500171712181800170312181800999999903091999010999990000109009999991990999999999999929999 -080809090400010809091000111213141000110215161704111806160300051919191904999099999993099991999910009999999111109009299999990999909990 -080909100300080211120600081314151604171717171600011819201604181805202004991299919999190991909991000091999999999109993909099999990990 -050208090900101112090300101104131400151116161400151116161700150104060400911990199999092999009909909999099099999999999990993000999999 -060808010500090908101100090912101000041314151604031702151600181704151600999990993099900999099990999999199000009999999119929099919999 -040808010400090808101000041111101000041212131400151515021400030506041400999990993090909999099909999909919099199991999919920009999999 -040809090500010809101000111112060400111313131300021414141400151617030400099099999993009991999990099999909099991999990999919990911299 -080804010900040810100904111210100900131402150900131617171800161603050600999999903999991000999990999099999091199019099199999900992999 -040108080500091008081100091213131100140413061100150402040300151516161600999090399990090991999991999099999090990919999009999192999999 -080808010400091010101004020511121300141515131300141515160400170318180600999999093091999019909909099190999990999990999990919099929909 -040108080300090905080400090902101100041212121300061415041300141415161300999290399999999999010999199911909099999009990909999999999009 -080808010600090910111204131314141504041314051600031717170200181818181900999999903099001099991990900999919099099999192991999990999909 -080808010400090910101104090910120400061313141500031302141600171718140500999999903099090099909999909991099099099919099999929190991999 -040108090900101108090900121108131300121204131300050204031400061516160400999990399991909919999990099990999999990199099099991920901999 -080809090400030802091000051111121300141111151604171717171600060118181804999992999099109999190999909099099999900190999990903099999990 -080909101100080812121104130312121104141506161600171819161604022020010500990099999999990009999999990029909199991909999119011930919999 -040304080900101005110900121004110900121202111300141415110100061617171700990090299999909999999990999919909919099019999993990119909999 -080801091004111212091300111212090500021414141404151617181804192003061800999009039099909999990919999109999999901099999009019909912999 -080802090300080810111100121210041100051310141500011616171504041616180600991999911299999990999999999009099910999199993900099909909909 -080109060400081011111104081202131300081415151300161704150300161818180500990999309091099099999911199990999099990099299099990999999909 -020808080300090904101004090911101004120513141500121616171500120116180600199291999999999099099999090100999999099900991909993999999009 -080509100400111209130100040209131300141515160600171715161804171703161800091090991990093909999991999919099099990999099990099299999999 -080809101100121209090400121313020600141515161600011515161604041718050300999099090099999999099999199019109099999999993999099092900099 -050808080800091010110100121210131400040602151500161616150400031717170400999990990990993999919990019909919991990919099999999199929909 -080909100600081109121204081113121204081402151504161718181900050118180300999099990999999099099909090990999110901919991991903992999999 -080901101004080911101004120913141400121502161400121717171700120403050600999909939999199009990991999991999010099199999999990200999999 -030809041000110809061000020509121000131409151604171718181600171701180400299099999991999919909999999109009900001909999199999399999909 -080804030900101011040900101012120900130412120200131415161600130105061600999299009999990999099999999099919909199991990119993099999909 -080804010900080810100900111213100900110504141500110416061500031616170200909999993999091990999900999990919099099990990999999991929119 -080808090600051010090900111104121300031104121300040214121300041516011300999099909990999990990990999299999999999109990910991139901999 -040809101000060309101000111104120400130214141400150516171700151501171700000999999999999902909999999190009119990991999919990399999999 -080809100400011111121300141511121300041516120200171506181800051503181804900099099993910990999909999099999990199909190999909999999290 -060401080800091011121204021313121200141413151600051403151600171804151600999990039090019099999919199199909999099999999299900999900999 -050809101000031102101000061213141404151213161700151813171700150113040400019999119992909999199999990099099010999199999909993900999999 -060404080400090909081000051112080100131314151500131316021500171716160300999990009099900999099900939999199900999999999911990999999929 -060808040904101111121200100213121204101414151600101714181600051903011600999000909099909999999991190919199099099191999999991939902999 -030805090900060810090900110810041200130214041200151516171200150401171200290999999999999909990990909019999100991999999109990399999909 -080808040600030902101100121213141404121213141404011516160500171716181900999992190099199999100999990999999990909019993199990990999009 -040808090900010808060900051011111100040212131300141515151600141417030400090999999993909990199909999991909019999199099999999020990999 -060808090300100808090900110402121200131414151500161414171504050401181800991290999999999909199999099001999090990999999990000309999999 -050408080600090910031100090910121200041310041200141414140200040401151500999090009999992999991999999909999900990909199999900311999999 -080909060300040904101000111202101000110513140100111313141500040404141500099990990299999990099909199991999099399999990910900099999999 -040408090900101111090900061112031300011412051300151504161300151517160200900990909990999999999900929909999399099199999999999091991119 -040808030400010808091000111112021000111212051000060413141000151515161600099999992093991991999999119919099999990909999009999009999999 -080404090300081011090600121211091300051211021300141511161300151501170400999299009999099909990999999999199999190099999011909309999909 -060809090909041011111101120413131314150216171714180419170514180319192014099999009999099309991990990099919111991009999999999990929909 -050808060900100808110900121212111300030414151300160417181300161602011304999090999999999909090999909990999901992911999090999139991990 -080509041000080809111000021209111300140615111300140416111300140301041300990999099999990990999911999191999099999919999000999309929999 -040108091000111112041000111112041000131314051000021315151500161617030600990090300999999999999990099190999990991909999999919990991299 -060108080800090910111100120913111100120414140400121502040300120516161600999990390999009999999901999901999999099919990909990192999999 -080901040600080910101100080910101200130914151500130214151504161703050400999999930099199999990999909099099909999199991999019900912999 -030802090900080810090900110612131400111516131704180419131704051919011700919992919999999999190999909901999001900909999090009939999999 -030804090400080810090500111102091200111104091300141515161300060117171300990092999999199999190990109999999990990991999919903909999909 -060809010400040510101100121213131100040213131100141414151100160315150400009999903099090909919999999909999019999190999999919990929999 -020808080800090910031100041210111104131310140400131310140500060115141600199991992099999991999909990919999999099999999099903090999009 -020809011000110812131000111414151000111616161600030605041700041818181804119991913999919990909999999999009999992009099999999900909990 -080304090510080411121210080213121210061414141410150416161717181916011717290999990099099099099919999910099999990991099099909939900999 -080901061004080911121314081515161616081502171818191920200421191920200305999099939000100991909099999999099919090919909990999999099929 -040809040110111112131410111516161610151517171810191919190602052003212121000999909399009199900999999999909999099090019999990999109299 -080801060500080809091000041111111200131314040200131314151600041715150300999999930099091900991999999900919999099999199991990999909929 -080401090904101112090904131412151600171414180200171919180600170519180300099900939990019099919900919099919999199099099999990999999929 -040809101010111213040414031202151514041606151514161617171818050417170118009999909901999929000991199999999090999990109099909993990999 -060808090909100808110204011213141503161616171515181919171704052020202004999990999090911091991930099990092999990999909999900990999990 -040808080909011011110909121314151604120217171618121920171604191906031605099999099993090991099919009999990119909009909999999029999990 -080910111203080904111314081515111602171715111618171719191919060404010504990929909199999190999109999999991909099909019999900030099999 -080404090909080810111104121213111404121202151605011717151818061717150304999999000909909990999999090990909901009919093999999999009929 -080901041010021111121010131411061505131404161616131417181919031417201904199991130999900919990990090990909999999990999990929909999090 -030408090400101011091200101011090400130211141400151511141600151505010600909992909099900999999999999919909199991999999110999030999999 -080809101000080811121200061314031500011316041504051316021500171316180400990999909999909990099900929999999399909990999911909999901009 -050808090400100808091100121213031400121213041404151513061400150116170200099999999090900909999999929999999999009099999190993191999119 -050108080600091010111100091010111104091204020400131415161600171515031800999990309090999999999999190999199009099091990999909991909929 -080910101000081105120300080604120400081313120400011314021500041614151500009999999990092999999909909990999099099991993199990919909199 -080909010600100909111200101313131400040215161600171715041600170315040500099990993099910999190999999919909019999090999999999990992099 -080409051000080609111000080209121200031309121200131304140100151515150400909999990999909990990901199919999999992991999993999009999909 -080801050904081011061204131314141200131314141200151617020400031818191900999009939090909090199990909999999999999991991110929909999099 -080306040904101102120900051314140900151314140400151616171800151601171700299901900991109999199909909999999909999919099900999399909999 -080808080900040210030600111212131300141212131300151616161604050104171700999099192099199909199999999099999999990190990999003090999999 -080109090300080809101000111206101000111314021500110414050400161614170400999999399299099901999990999919199911099990090999999999990009 -040809050600011010101100121204041100121213041100141515021600141403161600090999009093990991099999909999999910990919999911999999999299 -080808010600090210101104031210101300141215161700141218041700041218051700999991193099990021990991999990009099999900999999999999909909 -060108080400090908081000050911111200130211111200140415161700140315150400999090399999090999990901999999999119991990999000999990929999 -080808090900011011110400121211111300121214060400041502160300151505171700990999099993090991999999909999009919990019999919999912990999 -080109090600080809090500101112020400101314151500101316041500041717170300999099399999090919999911109999199009999909999909909092999999 -080109090400081010091100121010130500121404021500120416161500040316061500999999399090900999990909199909199990099091999999909909992999 -030408080800090910101000020911061200131415041200051616171200041601171200999992009999999999099919099190999199990100999909999399909909 -080809100300080211111104121314151604121217061600181819202005181801202004911299199999099001999991000991099999999919999009099399999990 -030804040900101011020900100512130900141414131500161717131500040117130600299999100999119999919990199991909999999199990990903990999999 -080808090904101005090100101011120600131314141400131304041500031616170200990909909999993999919990099909109999999909199999999901929119 -040808010900101011120900131111140900150205161600041717161600061717030400999990903999910990909909999010099999990199999999999990909299 -080808080904051002090904111213141500031313160100171818191900171818040600999909990999119001991919019299199999399990999909999900909999 -080808030900100611120900130411120900141414140200011516171700041805171704999299909990999909999999999000019999199919093199990099909990 -080903040400080910111200060913110200140913131500161617171804161617010500999999920090919999990999919099919009199919999090099930999999 -020808090400100808110100121314111500161305111504031717181800061917181804191091991999993919099990999199999990002990999999999999900090 -080809101004010809111100121309111100141509060500140216160400140417180300990909999993009991999919999199909199999190999190999199909129 -080502090300081011121300141411110600141415151604011717170400041818181800991999011299991900999999999991909919009199993999999900909999 -050808080300060909101100120913101104141313101104151617100200150401181900099999099299999909999999990009999099909909190019999311909919 -080109061000080811111000051213141000151515021000041604171704181818031700990999309999190990199909199909199999990001999999090999999929 -080809101000010809101000111209060400130502141500131616170400130417170300919999999993909990999909999001009991099901099999999999909929 -060808030900101108040900011112120900131112120200141415161700051418041704999290999990990999099939999999919019190909999900909099999090 -080104040900081011110900081011110200121013041400151516051400151506031700999999300990999999990991919999919000990909999990999091999929 -030808060904100511040900101202130900141415040900141617181800161601181800299009919999999990109991909019999919999910099009999399999999 -080805090400080810110100041212111100131402151500131616151500130603041700999099900999903990099999999099919011999199999999999290909909 -080409090000080310090000080411010000021212130000061212130000000000000000099999999992909999099990999190399191999999990999999999999999 -080104040000090909090000100211110000101211030000101213060000000000000000399991900999999919999911999999999092999909999909999999999999 -030808080000090902100000090604100000111112130000111101040000000000000000299999919999019999099999999909199901999930999999999999999999 -080808080000010909090000101002040000031011060000121213040000000000000000999993199999999999109991999290999990999009999909999999999999 -060809090000100802110000120813010000120813130000120403040000000000000000099999911990099909139999999999999999999020999999999999999999 -080609030000081011110000081004110000041012020000011012130000000000000000909999902999999999999909099999199099999991993119999999999999 -060108080000090909080000100311120000101313020000041313040000000000000000939990919999999999199999199929199091999999990909999999999999 -080809030000080210060000111111040000121212120000011313040000000000000000992999919991109919999999999199099999993090999999999999999999 -030808040900100808051100041212061300140215161600141715161600141715010400999092999091909991990909999919009999999199990919999930991999 -080209091000081112090300081112060500081112131404011516041700151516181904919199199299999999999999999999009000909199093990999990990000 -080206030400080910101000081111111100011213140400121215161600051515161604109999192099199999999919999919999300099999999099999999909090 -080808080400030902041000090911121200041111131400051516161600171717010600999992919099909999190999999909909099099010990999999030999999 -050806090300040808101100121212040200131313131400151617141404150118181800090299991990991990991999099990919999990099999119093099999999 -080909010500080809101000031102101000121314141404120415161700121818040600999999993099199929199990199900999099909999090900999000999999 -050808090900020803041000111206131000111214151000111617181800110104181804990990929991999919909909999990099990999909091009993999999090 -040809090400101011090100101012121300051412121304151515020600031617171700009099909999093999919999999999999099009019999910999919921999 -080109101000080809110600121209130200121214041500161617051500161604031504990999399999110999919990919999019909999909999009999999990920 -050809100300111112101000111112040200131312041404151512161600151501160600009299909999999999991999909909919909909990199019999390999999 -080804010600080809091004041109091000121314150500121616160200120317171800999999903099099090999909909990109009999991999991999991992919 -030804091000050808021100120613131400151617131404181617191400181617011404290099999099911909991990999099999090909990990091999939999990 -080409100500080811111200011311110600141315161704141302180300141919181804900999990099090990999939909999999991109919290909991199999990 -080809101100010809040600121209130400120209140500031515161600171515161604990099990093199999999991009919099999099199999909929999919990 -080910110500080412110100080212111300141412111500161617170400031604170600001099019999993999999991909919909999991909099999929999999009 -040809101000011112101004111113140200151605171704151818170300150619191900000999099993199099199999119900919099909099999992990099999999 -080801090500080810111200131414151204131404160200131706031804171719191900999099930999009999199909190990109999199099199099099921999999 -040504080400090910080200061010081100041203081100131415161100131315011100999990009099001999991909999999999092999099999001990939999999 -040408080500090909090100101112130400021414131300151406161600171703161600999090009999993910099999099109909999991990999909919999992999 -080401090900081010090900081010111200081313140500041315021600031515060400999999039990999999909999109990109999990991999910999900929999 -080809101000061111101000121213131404121202131500041616171804031916010500900999999990999999090990990991909999090911999990099930921999 -080809011000080809111004121209131004141409021004141403151600051718190600999999993999091099909990090909999999109991099999990210909199 -040108040900101108121300141115150600141615150300141605021700141604171700999090399090100999199909909999999909999901299999999919999099 -080909101104030902121100131313141400041516141400061718180100051919191904190902990999190999199999199099999900999091990993999909909990 -080109100400081111111204081314121204151502061600151517161600180517190300990099309999999099199991090019099919999919999909909999909129 -080109091000081109091000080406121304141502121300141617121300031805120400999999399991090990009999900199999119999919999199991090929999 -080808080600090904101104051210101100131415161100131718191904130102190300999099009999999090999900999909999010099119999999093192999199 -080805090900080810100100111213101400150416161404060317021400181818180400999999900999093999099900919099999099000999999911992190999999 -080109101000080809101000110409121304141502061304161718181900160518180300999999399999999910900999090190999110900919990991990992999999 -080801090400080809091000051111101000121111131400021504131400061617031404999099939999099999199909099999999190091909991999901999991290 -080801040600080809101100051213131400121213131400151515020400031616161604999999930099000990199909999999999999099991999910929909999990 -080909010600080909101104021212121304141516171300181919201304210319201305999999993099909009910919900199099900991099999909019999929990 -060808090900100808090500101112130200041414131500041414131500041601031700099999999999909999090900919009919999999999990919990391909929 -030808090900101108040904041112121300050212121400151617171700181818010600999992999991909099090909999919909919190999190099999030999999 -080309090600101112091300101112121400021115161604171815161600050415010400299991909099999999990990999199909999901099991119900930999999 -080808080600040904101100120213141400121515141400121515161600030405011600999999990090990990090911999991999991999991999999920039999999 -050108040900101010110900121202110900121213131400151504131600151704030600990990309999900919999991999991909999990909099999999920900999 -080809100400080509111100121209110400011309141500030416161600171717020600999099990999099909999990099999909310099919999099929919999109 -080909091004060511121000131313131000140315161604171702161600171818010400099000990999009999909999999991199299901919999199999030999999 -050808080800040909090100021011121200131414121500131416041700130304061700099999990990993991009919999190909999999990099099999099929909 -050803090600101112091304021212091400151616171404150416181400151919011400029999199091990019999919999019099999909990990910999039999999 -080609090400101109090300100212120500101313041404151313161700181801161600099090999999192991999919999990909990901999091909990390999999 -040808080800030910111100090910120600021310120400141415121600140504010400099999990992999999909999909199999119999019099910999030909999 -050809100300111109101000060409120200131409121500041617121804161601121800099299099999099999991990999099919099190009099019099399999999 -030809090400080810111100061202111100131313141400151616161600040104050400299999909099999991099991999091909991990991999999903000999999 -080910101100080910100400120902130300120906141504121617171804051901181800999099999099999909909991199999129099109109999199090309909999 -080910011100120913111104140904151500160602151504161718190500161703191900009990903999909009991999099099999091909910099199999999992999 -080309041000081109041200080213131300081414150400061416160100171716160500929099999099190991990901999991999991090991999993990999999909 -050801040600080809091000111209091000130214151004131616151700180316150400999990930099190919999919999910999199009909099999919990929999 -040808030900020808090900101011111200061313130400051415161600041701161600992990999991999919909999909910909099999919990009990399909999 -080903100500080909111204131314040200131314141504161617181800161601190600992999991099991009091999999999019999109091999019999309999909 -080301050600080409101004080209101000111209131400151509161400170418181400299999930099909090999919999919999010990990999990909099909999 -080109041000081111101000081213041400150216031400061616051400041717171700990999309991909990990990099199999192990199999909999099909999 -080903010400080210111100121314111100150614161604151514160500171717180400129999993091919991199901999009099999909999099999909909999909 -050801091000080809091004111111121200131313121204041415021600061703181900999990939999990009019999999909999999900991999001990991909219 -040809101000050811041000010812131300041412130200151412161700061412160300009999909990909999990931199999999099199999190091909999999929 -030805090900100808090900101111111200100204131300101415131304061617010400990992999999999999090999999999009199999109999919091130901999 -080808090300040209091000041111101000121314040600151515161600050104161600999299099990199991999999099091999019999190099909903099999999 -080909011000080811121000131311141004130211151604031711180600051920202004999999903999999990919999100919909919002090999990990909909990 -080809031000110812101000110205061304111415161700181819162004181801162004992999919999109991999919900990909100099199999190099399999990 -080106090300081011111200051311111200141404021200151516161604151517180400990999390290199999999900999909199990190990999999099099999009 -080309041000081109090200041212121304141414141300151516171800151505010600929099999090991990991999990099099999099999199001999930990999 -050108090900101008111100101008111100121204030600021314151600040414141700999990390999099999999999099199999909991992091119900990999909 -080406090900081011090300081011021200131011141200041015141400041604010500099999909299999999919909919999999000190999999909990030909999 -080801090900080810090900111111021200041313141504161306141504171805140300999999939999109991990999199909109999900999999099000999900929 -080806010900080810100900041110100400121113140200120415161600120504160300999999903999090900999999909990199099199909199099999099909929 -080808010500090910101100090910101200131314151604171704020400031818180600999999903099091999991999999990919909109991999900990919929909 -080801090900100811090904101213131404101513130200161705181804190620200300999999939990019099091990990909919999999099190099009919909929 -080809090400080809101000111213021400151516161404151517061404050118190300999099999999999990009909119091999919909999999099003002999099 -060508010900101010100900111111121304031402151500141416150400041718181800909990903999999999010999900999199919992919999910999909900999 -080806010400080809101000040211101000121313041400121515161400120403051400909999993099009909999991199919009099999919999990999209909999 -030805090900100811121300100804121400151617121400021604121400061604011400990992999099900999099999999109999911991909991990909939990999 -030809101000041109121000131302141404151516141400151517171700061805010400219999099990990999109991990919999919999910999999990030909999 -080910011104020512131104141415151600141715151600181706191600032020201604119901013999910019900999999999999999991999999900920909999990 -030805040400090810111200020810101300141516161300171716161304171706011300909992990091909999990919999190999199999199999190099039999999 -050108080800090909090400101112131300141111131300141402150300060404151600999990309099999901099999099099999999999919999919900092999919 -080910040400080504111100080404111100121203131300121414150100021414150600000999999090909999999999099009099929999990999913919999919909 -080809101000020803111204131414141500161617171700011604050400181818180600919999920991990019990999999100909999999999093099990909999909 -050801090400080810091100121310141100020610041100151510161100031504160400999090939999109919999990009109999990991999999909999999929009 -080801040900080810111100061213111400151204040200151216171700150516170300999099939099019999099900919990919099099999199099990999999929 -030808060900050808020900101112120900131313140900041516171700041504011700299999990999919900919909919990999999199991990009999039909999 -080804090900101111120300101111131404101506131604171718131900170105130200909999090999909999992999990909919999900009199119993991999019 -080909041000080309111204081313141504080213161500171705181500171706011500999099999092909099900999990919099191090991999909999939990999 -080809090500080809031004111213141500111213041604111713180200060113191900999999999099999090020999919999919999909090190109903991999199 -050108080200090909091004111212101000111313141500111613040300110417180600999190319199999090999909999909919999099990290999990099999009 -050308080400090402101100120613141400121513141400121613171704120113171700929990991099019909190999999909999990999099990109093999999999 -080809101000010809100400041109021200041314151500051614151500171714060300911999999993990990919909919909919009999099990999999992990099 -080808010400090910111100090410111200051313131200041406021200031516171200999999903099009999999909919099099999999009990991999919921199 -050808090300040808091004011106120200131312121404131315161700181818171700099299999990991090091939999919919919109909999900909999999999 -030504080800091010110600091010041204091313131300021415161600171718011600999992000999909999990999900909909999991909991919991139991999 -050809010600101009091100101012131400040212131400151612131700180304171704099999093099090999910999199099999919999199991999919009929990 -060808030400090808101100120205101300121414151604121414151700041801151700992990999099999901990919999990009999009999991909990399909909 -080808090904041002111204131414110500151403111600171718111900171718010600999909900990910090190909999099999929090999099909999930999999 -080509090900101011120100101311141500031311161604170611161600171702040400099990990999013999909999909999909909902999999099999190991099 -040504010800090910100800111210130800141502130800161717181804061703181800999990003999991900999990919099999911990199099999009299999999 -080809100500010811101200041313141204061513141204161602140300161617181900909999909093909991999909000909999099909019999999999192999119 -040108090400101010100600111112121304141112121500141416020500171716180300990090309999999999190990900999999099099991099919990999999129 -030808090904101112130904061402150500161616171700181819202000181801202004990902990991199099109909199909109990999991999019999399999990 -040809090500011010101000111112130200111114131500041604131500171706031500009999909093999990199999119999919909999009990999990999990929 -030808080200090910101104090905121100041313141100151313161704151518010600299199990199099099999999099999099090999990199991099030990999 -080804030500040809101100121209131300121202141400011515140400041515160600909999992099019909990999999991909991999099993910999999909009 -080905011000081112131000021415131000161717131004160417131800160304061800099999003999110991099919999190999999909999090999999099929909 -080801091004080811120400131311121200131314150300161616151704051802150600999009930099009999999999999991999909299919999990090190909199 -080909010500080909101100061212111100131415151500041616021704031616041800999999993090991990999999999000919099999999190911099990929909 -040108080900101112130900141504160904140602160900140317181800141717180500999990309990119900019999900909999991999910999999992990999999 -080808090400101111110300120213061400151616141400171818191904050118191904990090999999992901999900099919999199991990991909003999999990 -080804090500080810101000061112130100141414151500161602171500160304170400909099990999099999119900939991099999999910999199999090929999 -080803040900080804090900021010100600111212131400111516161704110116160500929099999999999919009919999919909090099919999190093990999999 -080309061000081109101000081109120400021309140400041313151600171717010500299999990999999999909999909109099190099909999910909030999999 -080808090904030610101000111212130500141212150400141416170100021819171704990909990999999920900999999199099999099900999993919099911190 -040809090300100211041200101013061200140513151200141413161600040117161600099299019999109991999999999109099990099999999099903099999099 -060108050400090808101100120413131400120215131400120415161400120315161400999990390091909919090909909999999119999999990909999999992999 -080808080500090204031000090911121200040613130100141413131500141616040400999999102099999991990991999091099909399999999090999000999999 -060408010400090808101000111212101000111213131300041403050200041516161600999990093090909909099999999999919999999099190990990291909999 -080109090500081009091104081213141404151513130200151516171804190616200300999999399090990091099991190909919999999999199091009919909929 -040809021000051104101000011112030400131112141400131115141400130615150400011199199990099999929939999999909000999909999999999999909909 -040808010300050809101100121209041100131409021100151409160400061717171700099999993290019999999990099999999001190990999990909099999999 -080809030600080810101000111204020500131414151600171714181804170119191904992999919099999909919900999099109991090999999109093099999990 -080808010400090910101100121310101100141302061100151617171100040403170500999999903099190991999909999099099919990919990999900990999299 -040809031000041111061000121111021000121213141400011515051400041617171700009299909990909999999999919990199991999019993999990909900999 -040808090904101111090100041111121200060513121200141516170200140318181800990900999990903999919909999900999999990909190091999919992999 -080309101000081109101004081212020500081314141400011515040400061516171800999999299999909091909999109999199099999019993909999990900009 -080801090900080810090900111213130500140206131504161718191504160320202004999999939999109991090919999199999109009190991909099099929990 -080806090900080804090300101010111104121313140200151316161700040116160500990999999999992909019999990990919091190909999990903990999999 -060809090904011011121204051314151600171718181604171718031600021919201600099909009993009091909999009010999999909999999999919929919199 -080903101000110605121000021313121400151313121404151616120100150417180400129991999999909910990919999999999991009999990903999909990009 -080808020900101111121304101111141504100616170300181819171705181801202004999199901199999099911999190991929909990919999009099309999990 -080806040900080810101004111112051300141212021500141616171804140116031900999099909099999090990999999909009191099991991991093991999929 -080109090904080810110400121313141500051613021500171717180300061919191904999909390999110990919909909099199909999091999999999912909990 -040408080300090910041100091202061100131304141100131314140400050115151500909290919999909999199991099019999999099909099099903099999999 -080804010900080810110900121212121300141415161300140217171304030418050600999999903999009999910999909999199991999119999199029090990099 -030808080800060910021100041212121304141516160400151516160100171717170500299999991990001999991999910009199099099999999993999909999909 -060108090900101112120500131414141400131516040200131517041804131503181800990990309999099901990909999900919999099909199909099999999299 -030808080900100211120904101011120904131411151600171811192004050601202000999992099999199091999999900999909000090999999009000309999999 -080809040300080809051000041102101000121213131300121214150100040614160400990999999299009990999900199901999999999919999993909919990109 -080808090300101010101100120502041100120613141504121617181900161601181804999299901999999990199999999991009901909991090010999399999990 -040805010900101011120900031313120600141313120400151602171704181818171700099999003999000999099999909299999999091991991119099999999099 -050801090900100808090900101111121200100213131300100406141500161704030400099999939991909990909999999999999119999901099999900920900999 -050801090900041010101000111111121304021406151600171414151800171703150400099999039090999991909999900199909090091999099999999990992999 -080808080900021003090900111213141504161217170600161217171804050119190400999991199999299919990910000999999999999999090090003909999909 -040808010400090808101000091102101004120613140500031513131600151517181600099999993099909999999911990101199991092999999999999909990009 -080809091004041109091000121314150100121604151500120217170500120617170300909909999990990990909901139919999909999199999190999999990929 -080910111104080812110100051314141504161614141500171702181900171706032004909909009999903990919909900909999999999019999911999091999920 -020809090300101009090400111111120600011314151604171718191600171705191604119291999999990991999999909919099309909000999900999099999990 -040804010500060909101100120909131100040214141400151516161700150316161700009999093099990909919909999990199019999199099990999999929999 -080509090900080410101100080210031200131306121200141516160400040116160400099999999099999990920911999199999999991900991090903999999909 -080109090400081009090400081112121300061112020500141115160300170415161600999099399990999991090991909999199099099991990099909992909999 -080909090500081011110100081211110400081314151600060217151600031717040400999099990990093999999991909910999990099199990199999900929999 -080801090900080810090500111213141500161617181500020604181504191919031504999999939999909909190901009910999999091909990999019999999290 -040808090900101002090900111212061300030412131300051415160100171717170400099999909999199919190999999299099991999091999003909099999909 -080803091004080809091000111202041300111415151600171715151804170619010500992909999999999909190991099919909099099199999190099030990999 -080808010400040909090900101112131400020615161600171715051604031715181800999990093099999999199911009109909990991999999999099900929999 -080109040300081011051200131302121204131304140600151616161700181818181700990999309291909919099991190999999909090990990999990999999909 -080808090300101111090500121102131404151616171800191616201804191901061804999290999999999909910990190091909099099990999909090309999990 -080809090400080810091104120313141404121516170600121505180100021919191900999999999099090099009999990920099990099990991993919019919999 -050408080900101112120300101012020400131314141500131316160400060116161700999190091299099999919990999999109919099999999099903990999909 -020808080300090910101000091112120400131415120600131616161600050104170400199291999999099991990999999919999990999109090999903909999009 -080808090400050410090100111010091200021314151200161313171704180603171700990090099999913999999919909190999190990990999999009299909999 -080910111104120610110100051310141400151510140200161616171804041919190300009900999990913999999900199999999909199909199991009919999929 -040108090400101008090900111008051200131314041200131315020600031616161600999090399999909909990991099091999999999910999910999919929999 -080904100400080902100400110912100600030513101400151516171400151616011400999099909991110919999999009200999999999901999990999939909999 -080106090900081011090900080411121204081311120200141311031500051304161700999999309990109990999999190999919909990999199999909021999919 -080804090300050809091000111102121000061314121500161617120400161601121804999299909999999900199999199909909009099009999919999390999900 -030808080800090910041100051202111100131313131400041515161400041501040600999992999099199999109901999919909999990199999900999300909999 -030808090600101008091100121302091104121214041100011516171700051819171704299099999999999990199911000999999990999109993099990999900090 -020809090300101006091104101005121100131415161600131717161604130117180400119291999999099099909999909910999009999199999909093999999009 -080809011000060211111000031211111004131415151604171705180400171719191900919999113990990991999999990210999199000990099099999909999999 -080808080900011011050900101011111200131302141500041616061700031616040400999099119993999999900999999901909999090910099999999990929099 -080801090400101009091104101012121200051302141400041516141400061703181800999990939099190099099999999919999011999909990099990919909299 -080809031004080809041100121209021300141404150500011416161700181818180600999209999199099999901999019909199999099901993190999090999999 -040108080800090909101000111112131000111105141500021617171804161606030400999990309999909991099999099990099999091999091199099020999999 -080801090900041011090900041012020600131012141400131312141500040404050300999999039990109999999901109999199099999999199999900002999999 -060801090900101010101100120413051100120213131100031415151100161715040400099999030999990910009999999999999199999109999999921900919999 -040808090900100808090100111213141400150213161700150413061704180313051700999990999999913901009909999919909199099090999999019999929909 -040809051000011109101004121213140600151216021700151818041700151818031700009999990993109099199990009991999991199900990999999999999929 -080109031000080909111100081213021400081213060400041215151500041204051600999299399190999991919999109999009919990999999099999990900909 -080808080500010910101004090911120400131402151500131617151804131919060300999099099993099099099999009199999111999909999091090902999999 -080409060500080810110200041213111400011513131400161617171804161617170300900999909099991990091909199909999319999909199099099992999999 -080509101000111112130300140215131304140616161604141718180400140118181900090990909999992909099911190999999999909009991099993990999909 -080909040400080909101100120605111100120213131300120414141500160314010400099999990099909990909999999990909119999999190991919930929999 -060808040400090808101100031213101000041214020500011516161600151517171700999990990090999999090929099999099011099991993999999919991999 -030508091000111213021000141414141504161617181504061920201500191920011504900992990991111999991999990999099900909909990091999939999990 -080803090900080210090600041112130500141515151604171818181804170119191900929999999991190999109991999019009999000199990999093099999999 -060803050900101011111204101013141400040213141400151613170100161618181804029099199099999099090999999919999999990190999193909119999990 -080910110400080910021200010910131300040914131300151614170300060405171700091999991099190999919939999990999099999090290999900999999099 -060108090900101010090900110412130400141402131300051415150400031617171700990990309999999919090990099199999919999919990999999190921999 -050108090400101010111100121314111100150602161604151517161604181819190300990090309999919990999909199091099909909919999999090199999929 -080902100300081112131304081111131300141414051504161617181500160104190600919299111999919099999999999019909999909190999009993009999909 -080509091000081109091000081212130100021212131304141415161700031406040400999999099999990990909909139999999199901999099900999000929999 -080803040900100211110900041211110900131414150100041616151500061616170500929091999991999991999991909091999091390909999999999909909909 -050803090600101004111100041202111100041314150100161614151700161614151700092999091099999990099909199901999999390099999010999999999999 -050803090900100808091100100402121100101313141100101516141700060104140400092999999999909999919909199991999199099999991000903090999999 -080902100300080911121200040911130600140911150400011616171700051616171704991999911290999999999999909099099019099190993909999999909990 -050804090400101010100300011112021300111114151300060414161300171716161300009099090999999991912930999990199999190990999099999999990999 -080106090400081010101000111104121200111302121200140515160400171717160300999099300991999919999990999999999110990019099919909999999929 -080805010900080810110900041212131300141414131304151617021800030619191904999999903999000909919999099999999990909999191111920909999990 -040808080800090910030600110905121200110213121200111415151600110401150400999990099999129999990999999910999109999990991190990390999999 -080909030400020410041100121210041100121210131100051414151500061401151500192991999099009919999999999999099909099190990909999399909999 -040809090400100209030600101112121300141412121500141616161600051717010400099099092999199991990901999999909909999991099999900930999999 -080808090400011010111200041310141200061315141200160217140400161603140500999099900993900999909900999991999099999919091199999999992909 -080904011000080911121000040913131000140902131500051616061500171603041500099999903999991999099999919099909001999919999990909999902909 -050106080400090908081004111112131300110214131300031516171700181919191904990990399099999091900990099990999199999109999909921999919990 -040103080900101011110900100611110200121212131300141414041300150516040400992190399999199990991999919990999990999909999909909090909099 -080109100400080811100200061212101300141414101500161616161504041718050300991099319999191900991999999990919999999909999999090092909099 -040808090600030808091000110212041300141512121304161616161300171717010500099999999099909929090991999119099199909991999990999030999999 -080909041000040309021000111112131300041414131300151414161700060105171700099990290999919999910999199901999099999990990999903009999999 -060808080800090210100500041110120100041113140400151113161700150313171700099999191990990901919999939990099099099990990999992909999999 -080808010400091010111204051010131300141515021604141515171600140318190600999990903099901009991999999990109099909991999999999919992109 -080309101000080604050200111112131300111112131300141512161704181818010400921999999199999900001999999999999999990991090009099030999999 -030808040900101008041100101002121200041314151500061614151500161601051700299099999099999999100991999919099010999999999099909390999909 -030809101100080809120400051302141400151616141404171717181800060104181800299099990099199999109991999019999190901999999909903099999999 -080808080400010910111100121212131300141415050300141416021700040618171704999099099993009991909999999919999919999910299919909019990990 -080801090904080810090900041010110500121306140400121515150200120316161700999909939999019999910909999900199099099991999991999991992919 -080809090900080810100300111112130400041102041400011515051400061515161400999999990999992909919999109991999099099019993909999999909009 -080409031000081109091000040212041000131314141000060514141500161616010400999999092990199901999991909991999909099999999090909030999999 -080909100400020909100100111206100400031213140400151515161600051717161600191091999999993919999919009999099290099900999999999999909099 -040808010400090808101000091111121300061105141300151515021300030416171300999990993090909999901999099999999090099999999911929909990099 -060501080804091011080804121213141500121216140200171818141904171803202000999900039999019009019990919990919999990909199999099991999299 -080409090300101109091200131314141504051614141700181616060200180119191904099990999290099999091999990909919009999999190999993101999990 -080409101004111109021204111313130300141515161600171515161600060118190500099900991199909099912999999091999999990999990999903009999009 -060408010400090808101004111112101000130214151600131715150500130318181800999990093090909099999999199901909119099999091999992909999999 -080909040500080909101004080311101000121314150100160617151800021919181804999999990090999099099999099920999191391919990999919199919090 -060404050400080809021000030811101000121213131400121213131400151501161700999990000099919999119921999999199909999999999999990300999909 -080808080600020910110300121313141404121313141404121516171800040116170500999090999991112919999999990999999199909199099000903990999999 -080803091000080804111000121314140200121506140500161616171700040104171700992199999999909990901991919910999999090199999909903099999999 -030408090900101010021100051212121100131314141100131514161100061704010400900992909999919999919999999009199999199999999091900930990999 -080104090900081011090900081213131400081502131400051504161700031506181704999999309999109999190900999999999911999990990099999909920900 -080801091004080811091004121213091404051516170200060318191900202020191900999909939999090090199999110999919011199299099909909099999999 -060809101100031213131100141414021104041516171704181819191700181801190500000999990992990991999999190990109009909999999091999399999909 -080809090400080809090600021011110100121010111300120414041500160314050400999099999999090999909919939199999991099009099990919990929099 -080405010900101010100904111111120900031302141400151506141600151718180400099990903999991099909999099999919911992109999990999990900999 -060105080400091010111100121010110300130214151504161616151704181818191900999090300991909919999999999199929111900999999990009990999999 -080808060400090910101100090912130100050402141404151515151600031718161600990999909099090999119999939091099909909919999990999199921999 -040501080600091011121300141411151300141402151504161717171700030418181800999090030999909900999990109999999991909919991999920099999999 -060108080800091011121204131304121200131314141400151602170300151505171804999990309990009091099999999999999909990199999119999992990910 -050809101000010811101004120802130600140815131600141715151800140404031800010999919993999099199909999091909990099099999990990029999999 -080804060900080803100900111213050904021213141500161613171800160413011800909999990999290919999999090199909119099990999010990939999999 -080805010909080810110909121314151604121414151603121706150218171704151920999999903999000990910009099999999999999099929091999991199091 -080809101004111112101001111112041306140512151516141412021517031819190404909909909999009399991999099999910099909991909999990910021999 -040808080804091011110403041211111314121215051314011616161714061819171702999900009990999999990209999990999990999009093999991999101191 -040508040300090910041100090912111100131312141500011612140200161604140600900990909299909999099999999909919991999099193191999090999999 -080901101000080909101000110306121204111302121200140415161700041818180500999999939990919999919929090999999111990999099000909900999999 -040108080804091011121200090513021200091414151500041414151500161617060300999900311990199990019999999990199999999999990999990092999099 -040809060300101011111204131011111200131314021200051516161600171701180400090999009299999099999990999901199999190019999999990309999909 -080803091000080809091004021112061300011415161300041717171300181919051304929099999999999019099911999991099310999099999990900909909990 -050408010600090908101104090908120400021314121500161617181500161603181500999990093099110099909999909199999909091009999909999999992999 -080803090400100411090400020611091200131411121200041515160100051515161600929091999999099919990990099199999111999991990903999999909999 -080401090904101010100900111111121300141402151300161617061304051618190300099900939999990999919999109991999909099910999999099199900129 -080809091004060809090300111213021400151216171400151218191404051218011404999109999299099909919909199991999001999901999990009939999990 -040108050300090909101004111111101000121314021500161717181500190617181804990990309299999091999999999019109911990990990999909999909990 -080804091000081102091000121314091500161303091704051318191900061318011904909999099999119901990991999092909999000991999909999939909990 -030808080904101011020900121311110904121415160500121718191900120406011900299909991999991990999999910909199909099001990909990039999999 -050808080909041011120909131302141415131306141617030418181619202020180104099099999990009999909091199990910999992999909090099993099099 -040306080809101111081209101113021214100415161214101717181214051717010404999900209999919999919999199901999991909991990900999930009999 -080809090410080509090410041102121314151617171701031606181919202020201919909909999990999999110001910919919199932900099999999909999999 -080809011010111212121202130614151516170414151516180414191916040414051903909999903110999909009190999099999909990999090999909999290909 -080808080309100411110909101211110213101214061516101714181920171721040105999929990999099999999199991990919000919999919000199093099099 -080808080904051011110903101011110912131415040912011404160417061418181902999909099999999909999290909099999000999909913990999909101911 -040608090305101008111112101002131212141414041515161718191515040120202020909290991909099999919991199199909999090199999000903099999999 -080409090304101011051212101302141212151617170618151617171920151601191904099290919909999999109991999019000099999999909199099309099999 -060108080209101008081109121013131114150413131103161617181904051620202004999110399999190999999100999009992999990990999090009099999990 -080509061010080909111010121313111401120413111516120417021818031920211818909099999990901999991909093999909909909991909009999919921199 -040408080800091002040300111111110400051213131300141415161600140115150600999990019299199901909999999019909999999100999099993990999999 -080105090300081004111204081313130200081404150600161417181800161617181800990299391990091091991999919900099999090990999999999999990999 -030809100200111112051300141515161604141515161600061717171804191919010400211199999199909990091909990999999990999991990990099030999999 -080809101000111109100100110409121304140609150400140502160300141717171700990999099999093999919990900099109909999991999019999192999999 -060809050300100811121300140812121304140815021300011617181804041917181800990990909299099909999900990991199999199919993109090999909999 -080809010500040609101100121309111100140215151600171715151600170304041600909999993099099909919909099909109119991999999999992099999909 -040809100300110212121204111313141500111617171500181616171500050106191504911290199991999099909999999990099109099999990999903999999000 -060308090900100511120900131313131400041502141400161616171704181801171704929990919990900909199999999991999091999099199919090399999990 -060808090900040808090500041010111100041010110100031212131400151617021400099999999990990999009909099999999099399901999991929999911119 -080910031100021212111100060513140100041515151500161717181804191919191804112991999991909909199990139999099999990909099999009909999990 -030808080800040504020600091011111200131014141500131014161700131001041700299999991999999900010909999991909909099999990900999309999999 -080809090300080209061004111212131000141414141500051616161604171819010400999299999999199001909909999991009999999991099999009030900999 -080910031100021212111100131212041404151506041400151516171400050116181800112991999999909919909919990919999909999990999000903909999999 -040308080400020908101100121313061404121313141400121516171800120116170500929990999091100919999999090999999999999000991900993990999999 -080509101100120909101100060413100400021414141400150416161600151503010400099990999990900909999990099999009199991991999099999930992999 -040808010600050809091000111109091200131302140400131314141500031616160400099999993099090909990990999999109919999919999990929090999999 -060801090405041010090911121010131304121414131315121614021715031818192015099999039009909009999999190990999999999091990990999910929190 -080808091011011212131111141212150406140405020403141616171819142020202019999099900093909999990009199990199099099991920991199099999999 -080808080109021011121309140615151309161717151309181919202021030405202004999999990391111019909990999190999999991909009999920099099999 -040808080903101112061305141412151617181818180217191920212117191904012117999920909190999090901999999090019999919909999009199039999999 -080106090904081011090912081314151212161705151818161920201818162102200304999999309900999091099990999010909999099190999999991199091929 -080808080910011111121304041114021504161614171818051914031818061920202020999909191003990999019999900099199909190099999992999099909999 -080809090105101109091212101111041212131415161718041919032002061921212121999999099300090999909999999999901000090999919999199021909999 -020809101004111212101001131212141506161717181818030517191904202020202121111901999999999319900999090190999990992999999009999900099999 -040809090903100804111212130814021505160817151506181819202020180121212121909990999929901909919999190091999000909910999199993099999999 -080909050110080909111210080613141210081504141210031602171704041818171704999999990399909099099990099999999199092109109119999099909990 -080806090110111212090910051212131314151602131317180319040420212121212020990999099390999009919999090999990111991909902999999000999999 -080808090300100211120400100605131404101516161400171716181800170104181800999290991991119999990909900990099909991099999909993099999999 -040803090400101010111100041202111100131212051400151516171400061616011400929090190999999999199999199099919999990900999001999939909999 -060808030900101010100900051112040900131414150200131414161600171804011604999290909999999999099909099900919991199999999919900039909990 -060108090400101010110400121213110200121213141500041613141700161613030500990090309999910990999990919999919999190999099999999920990999 -080809010400080809101104021209061300141209151304161205151700180319191900999999993099010099900911999199999990901999099909919990929999 -040104080300090909080800101011120200101011051304141511161600141718061600999290309999999909191999119999909999000999090999990999990099 -080910030400020406051100121212131100141415161600141415151600040117171700112991999099999910009999999919009999999990999099903099999999 -080909011000080609111000041213111000140204111000141505161700140304171700099999993999909990999901199910999199999090099090999999929099 -080901101000080909111100081212111100020413141400151605141400061703040400999999930991909990999999999190099909991909991999991900902999 -040808090904101108090300060504021200131314151200161717181200161717011200099909999290009900919999919990999990999090990901999939999999 -080808080400090403101000111112021000041314141400011516050600151517171700999999990090929909999990119991999009999919993109999990990999 -040208080800091006110300051213131400151617141400151818191904150118191904919990191990992901099999999910999090999100999999093999999990 -050108080904101010110900121314150900120216040600121718180300121717180400999900309999900919909919099910909990999199999192999999999909 -050108080800090909101100121204131100121204141400020403141400151616040600999990300099999919909999099999099909991099999999919200919999 -080904100300081104101000081202131300141516161600141417170600040117170500909999099290999990019991199919999199999909099099903999999909 -050108090400101011111100101213130200121213131400061515041600041515031600990090309999199999091990999999919999999900190999999999909929 -080910110600081210130100140210131504161718131504190320131504191920200500010099199999913991999919990199999109000209999999099999999909 -060504010400080909101000080909101000021112131400041512131400031604131400999990003091919999999999999199909190090199999999991999929099 -080809101100081212031104131214140500130214141500131617181904130117040600900099999999999009929919909919999919099990091099093900999999 -080808010900101010100900021112130904140413131500160406171500180305171700999999903999990910099999090109999999991990990909919990929099 -020808080300090904100500090911120400061311141400151516141400150104171700199291900999990999909999909919099009999109999999993090999999 -080805010904080810100900111210100904021212131404151617131800031906131800999909903999090999999911990199999990001909091999991099929999 -080304091004080805101000110212121300141415041300141416171300060118181800290009999999999991009919999190999900999909999900903099999999 -080909030400020506101104121213141500121214141500161617171500041801171500192991999090990019009990999999999999999109999199990399909909 -080905010400101010111100121212110400040206131300141515041300141515030400009990993099919999190999999019099999999109990990999990999299 -080809090300101010090400111102121300111114061304011516171300041816160500999299099999999999010999199991999990909019993990991909901909 -030808090904101011091200131302121204131306140500011516171800041919191900290909919999999909199991990999099909999190093009990990909999 -080803091000080511021000121211110400121213141404011506161700181818180400992199999990991909919999909991099919909109993990990900999999 -060809090300100811091200100802121204010813141404151617171800190417170500009999999290199999199999190999999300909099990090909990909999 -080809021000080811061000011213131000121213140300151605140400041604141700991199910999199991999930999999929990990999990099909990999009 -080809060300080810101100121210101304141415021300141617181304050104181300900999999299099999991990990990999911199900991999003099999999 -050809091000110802121004111313031000111313140400151516170600151501180400099099911999199091929999999999999099099910999000999309999909 -080901061000080911121000080913041400080915151400160204151700161603050400999999930990100999090999909990999999999199991090999900992999 -080809031000080409091000111213021000111414150500161414150400040106150400999299099999999909909991119919909090999999990990903999999009 -030808090200040808101100121314101104151414101100151617181800050406011800291199999199999900999909990999999090199091999909900039999999 -080803090900080804040900101112120200101312141400151617141404151806010500992999999999099990901999919909999099999019990019090930990999 -080809011004080809091000040411061000121314151500161605151500031717170200999909993999091909099990099990919009990909999999999991929919 -080804030900080810101000041112021300041414131300151414160500150117170600999299909199999990919909199901999090999999990990993009999909 -080808080400040910100100111205131400040413131400030602151400161616151400999090090999993990919909009099999909999919999009929199999999 -080803091005081109091004121302141004151617180600011919191900202021212104992909999990999090199911000199999190099109993999990909999990 -080808090500101009091100120313141404151502140400151516161600041718010600999990999099099999900929190191909919999991999999999030900999 -080309100400080509101100080609041100021209131100141415160100140417161600299999999090990999999990909199999111099991999003999999990099 -080801090900080810091104121213140500150216161604170618181900200318181904999999939999190019000999099919099199901990999090919999929990 -080808090500011011111204131311111200131314060200041504031600151517171700999099900993191090999999999990019999999009199999909921999999 -060401080800090910100800090910100400040211111100031213051400121213041500999990039999090999999999909999199019999190099099929990999909 -080109100600081112130500081415130200081617171804192020171804192020031804990099309990099991990991119990919909900099999999099999999920 -080805010400080809091000111109090600020412121200131415151600031415041700999999903099190991990999999199099909991999091990999990929909 -060108090500101108091200131408091504161402091500161617041500031817170400999990399091990919999919990090999910099910999999999990921999 -040809090300100808111200101004111300041415111600011415110200051415040600999990990299909999991999999900919099999999193911999990901099 -080909031004080909101000040211121300141414051300151617181800060104181800992909999990999901909990099919099999999919090109903099999999 -050401080900101108080900111112130900061414150200161617171704161603041800999990039990991999909990099999019990990099199999099290999909 -060108091000111112041304111114151300041414151300160205151300171718180300990090309099109099199999099999999999990199990099991999991929 -080802010400080909101100030909101200131314101200131315151500040416050600919999913099990929990999199909999990999909999999909090990099 -080909091000111105041000111112121000041312121000141406021504140103161500099990999999999999009990999099999919099101999991093999999219 -060809090400051009090100111213131304111415161700110218161704111818190300009099999990993990199901990910909990999199999999091999999129 -080804060900080802100904111213130904141413130300011516171700181819051700999999900999911009199901990919929999999199993009990099999099 -040403080800090210081100090912121104011312121100051314151600171717180600992990099991119999999999990919999309999909099900900999999009 -080801091000080811091004121311091400020504091500160417180600161603181800999999939999900090999911909109909990991990099009999999992999 -080503091000081104101000080612120200081312120400011313140400151504161600092999991990099999991999919909909099999910993990990009999999 -080904031000081112121300080612021300141515040500161515171700160104171700909299099190999999999999119001099099999999090909993099999999 -060808010300090908101100090912131100041414021100151515041100050416161600099999993299019999199999919991199091999099999990900099999999 -080609090900080502100300081112131404081515131400041515131600171701180400099999919299919990919990990990999099999999090910990309999909 -040808091000010808090400111112120200131104121400130504151400131606031400099099999093909990199999919999919009999990990909999999900929 -040804090500100811090600121111091300141515090300011504161600171717170200090099999990999909990999909090999099299991993999991091999919 -040809090500010809101000110812040600130814141400151516021704151503181800099099999993109999109909999091909999990919999911099991999299 -080910011100121313131104121415151105061615021104171718190300171720202104009990903999999099199990900909199099909901999099999912999910 -040104080800090909080800101011111200131014061200130415031200021617051200990990399999999991009999909199999900999099999929919199911099 -040808080900011010040600111010120400131405121200131415020400130415150300099099090093999999999909109009999990999991999910999999909929 -080109100400080809110600121309141504120509161504121702180300171719191900990099399999100990999909900909099999909910999009999192999999 -080309090400081002111100040512111100131313131400041515161400041506011400299999909091199999199990199099199999090901999999999939900999 -030608090500100411121200131414141200130215151504161717180100041717181800909092900990999919009999999990999109909199990993909999999199 -030808080904101011020900101012131300011415131604171718051600171920061604299909991999090999019999999990999311009009999909990999990090 -040801090600100808111100121213131400121213131400150216160400170504160300999090930999999909109991999999999999090199099199909099909929 -080909010600100511111200101011111304141414141300151515040200040316171800099990993099990990999990910990999999999900199999909991992119 -040804091000110802121300110814140400110806140300011515161600051517171700090099999099190999100999999999999009299199993909999999900999 -080808080300090204041000091104061000011212121000041313141500041314140500999299190991099999999910909919999399999909090900999990909999 -080309090900101105041200040206121200131313141400151516161700151516010400299991999091090991999909999910099999999910999090999930999999 -080909101000081112101004080312021304140512151604171718180600171701192000990999999999199092990999110099919999100091999099999300999909 -040406080800090210110800121311111400121515151400031616161400051704011400999990009991909911990991909999199999992991999999990039909999 -080305040909101102120909131306141516131317141516181920141516041920140116299991900991119999919099999990999990109099990909909993990999 -080309051000081109041204130206141500161617171500161817171500041818011500299099999099099010900919999910099999999199999190999939909999 -080806050304090910111212090913140215161617171717161618181904200418011919999999000209909999909190991990019909999919099999909939009999 -040806040904100811111203100811110213101415151613171715181920171701181805099909900099999999990209919991919009919099999909099390099999 -080809020605030804101111011212101111131414100404151414101616041717171816911099991902900999999939199909990099090999999999909090999909 -060809101104030809121305141409151316021709151318191920152121191904150121099009990999099929909099999919990199901909099111999093999999 -080803090910040811111102051212121213141516041717061616181717191919040104992910999919099999990199999099901009999990999900909003099999 -080109090503081010111212080410021212081314061516041314140404041317181818999999311020999990919999919990009099909999900990999909900999 -080903060400080205101000081104121300111114121300041516121300151517011300129999990091909991909999099999999919999919990910999039990999 -080309100400081112130200141412041500141412061500050412161600171717011600921999991090991990991990909999999999999990199909900039999999 -080809090904080810050300110410121304111110140200151610171800150106191900999909909999009999992999910909199999199099190111993990999099 -080909011000080909101000110412121200040413141400151515021400030506041600099999993999909909991909999099919900999991999919920090999909 -040801050900061010100900111112130900111102141400151516041400040416160300099099039999999909109991909999099919999919999009909999990929 -030809090400041009091100041005120400130214121200131515151500130601161600299999199090990999909909999910909190999990991999999309909999 -040601080800091010080800111110121300111112121400040515021400031616170400999990039990919999910990999999909999990091999919999109929909 -040808090500040808100100111112121300141512121300140216161600140417060300090099999990903990919999999999999019099199999199999092990099 -080808080400010910111200131310061400130410150200161710151800160503151804999099099993111990991999909909919999190999090999990999999290 -040501080804091011080800121313131300141516170200181506171704181519190300999900039999009909199909999090919909190999999909099902999999 -080809090300040809090400040502101100121212101000131313131400061515010400909290999999999999190999109000999999999999199991909030999999 -020809090300101011041200101011131200141411151200161616160500040104170600119291999999999999909990999199099999091990999990903009999909 -080604090900081010040900081010031100121314051500011316161500041316160200099999909999909999990999929090919099099909993199999991909919 -080809090600080803101104041212021100131212140500011514141604151517181900999099990999921090999999919099199099999909093199099090999009 -080809100400080811121200131311121404151602171700051818171700061803010400990099909999099990999999000999909001990919999999999930902999 -040804010900100811120900130811110900041414020600151514160300151505171700009999993990091909999999919090199999099091999999999012999999 -050809031000080809041000111209021004111213131000141213151600040117180600092999999999099999909999190999199099099999990190903000999099 -080401090500081010111100041010111100031212121300141414021300060415040400999099030990919999999909999999109999992991999919909000990999 -030809061004080811051004121202131004121214151600171818191900171818011900990902909999199099109999190999109991090919990919999939999999 -080801090400101010101104041213131400121215061600171703050200171718181800999099030999991009091990999990919990990999199990999291999999 -080910100300111212101304141212051304151617021300181819192004060119192000009990999299999009999909990099099111191999999090003999999999 -030808080200060409051000110409121200131309141200131309140100041516161600299199999199090909991990999099199999999999999003990099909999 -030406080409101112121212101314141516101304151516021717181916051717010416990902090909099999999099999999099999991000991910009930999999 -030404050809101011120609021013131409150413161616171718191920171701191920999002009999090999909910900199999990991099909109999399999999 -080509040300080909101100080412101100081314101100151516170200150104170600999999090299909999999990999990999091999011199191993990999099 -080909010400101109121200101106121200041102131400041515130400031504130500099990993099009999999999099099919991199919090999999999929009 -030804050900101112130900100414130900100214150900161717181800061701181804909092099999009999999909099999999111099991990919909399999990 -030808080904101004111104021213131300141515161700061515181800051901181800999002909099999091990919999190099199090999099999990399909999 -050808090900061008110900011213140300151516171804191902171804191904171800099999990990099999009939099910929999901909999111099099999999 -080304090400080802101000041112131300061414131300051515151500161616010400299099900999199999190900199999999090999991999999909030999999 -030809101004110809121004110813141500110206160100171818181804171719200500999902999999900099990991109919199109399990999999099900990099 -080309091004080806111204130214111500131316171504181818181500051920011500299009999099999091090991199999199900009991999999999039900999 -030809090900080810100500020610101104121314151100161718191104160401191900299999990999990919999909990190999110099919990009090399999999 -050108080900101108080900121313040900140613151500021617171704181616030400999990399990090991909919999199909099991909999999019990919299 -040808040900010808090900101004111200101006040200051313141400151513160300090999999993919990001999999999019909990099199999990919999929 -020808080300090910051104090910101100121314151100161718191904160120061904199291999999990099999999999190999900091090991909093099999090 -080402090900081011041200081013050300081014140100041515140400061516161600091999919199909999192999999991099009390909999999999090909999 -040809031004111209131000141415021000061615151004011718191900051717191900902900099990919999919999909909199099909019993199999999909099 -040809051000110809091000110803121000060813131000141516130200040117170400990990999999990999999909219999999009999999190191903119999909 -080109091004081109091004081213141000061504021000161617180500160317181800999009399990199090019999999000199999999091099919999999992999 -050108040900101108080900041112120900131112141504160217170600181817170300990990399990090999999900999999999190001999091199990999999929 -080104040900081011120900061011110900051013020900141004151500141604031500999999300990100999999909999999199009999901990999999999900929 -080808040900040610090900111213130100140313130500141415161600040217171700999999000999909909099900939999999299099910999999991199901999 -080304090900080610090400081111120500021111131300141516131300141401171704299999909999900990909999909199099199999019990909999390999990 -030809060400080809101100021209131400151209131604171819131600051818011604299999990099990919990999909199999190909199990110909939999990 -080808030900101102120904101314150900161617050900161618180400060119191904992999199999190099109991099010999990999999999099903090999990 -080109090900080810110400121210110400121206110200131404151500040503151500999999309099119990999999999999909990190999190909900999999299 -050401080400091010111200021010041200131313131200141403151600061715151600999090030991900919909999999199999999999920999990990999900999 -080801060400080809091000111209090500131314151600171718021600031818041604999999930099090990990909999091999991999991999910990999929090 -040308080800091006111100120213111104141415151600171818151600051818011604999990290991909919999911990901099999090099999999909939999990 -080808010600050910111204090913131400151613131704031602181900041618181900999990903099009099910999909999999199002919099199999099909999 -080801040500090909101000110402101000120413141400151616141700061616031700999990930099919900999999199091099099990919999990909999999299 -080801060900080810100900041110120900131114140400130205141500131603170400999999930999199991999999009090999999999199091900999909912909 -080805090900080810110400011210100300131415151600171815151604061818021604909999990099909990999930999919929019990999999999009919999010 -060808010400090810101000111212121200111305021400111315161704110315150400999990903090999999199999999999199099099901099119092990999999 -040805090300100809091100060812111100130814021504131617171500130117171504009999999290999909099999999990199090909091999199993999999900 -030805040900080810020900110412040900111112130900141412130100041516130600299099909999111999999990909999999909199999999903990999900009 -080801050900080810111104061213141400021515161400171515161804171703160400999099939099009099190900999991099199991999099999099990992999 -060808010400090808101100091213131400040513130400151515021600031717171600099999993090901999991990919009909999999901999990999919929999 -080804060500090810111200031302141504011616141500171616181500171719191504909999990091909921090991990991999399099990990909999909999990 -080809010400080409101100121313111100121313020400120605141400121504031600909999993099001909099999999999199999099001999999999991900929 -080808050400010910111104121314151100161706150200161818031904161818191900999999090093119090999900099009919909999099199999099929999999 -080901101000080911101004050912131304141516131300170204180600171919190300099999939999909099199900090991999019990190999900991999999929 -040808040300040808050900101102090900121313141400151616161400060117171700090999999299909909099991199019099199991999991999903990999999 -080808010600090910101100090905121304141515151600141717180200041717030400999999903099090999919999010099019999999999199911999990909299 -030809100200061111111204131314141204131314141200051516171800191916010400211199999199999009909999990999999909190091999090999930990999 -080903101100080909021100080504120400081314141500061314141500161301040400992199999999901999919909999990109009999999999990909300909999 -030108080800091011110400121211111300140215041300141617170400140517170600999992309999190919999999909911099019999099099099999999909909 -040803090900101011121200101302121200141516161604171717171804060119051800092999091999919999199991999019999199901909999990003099999099 -080808010900101011090904101011121200130211051200141516041700061518030400999999093999119099909999999019999990990199099109909190999299 -030808010900100808110904121306141504050216171504181919201500181820201500999992993999909019910919000919199011909099999990999999990999 -030808080200040904101000110912121000130412120600141414141500161604010500299199999199999909019900999999999099090991999990990030999999 -060208010900101108120900111113140900031515151504161617181800160504181804919990193999999909119999109299099999909900999099990099999990 -080808090900051011120900031004130600141015150100141004150400160217171700999999909990900999909999009299099909399999999090919919911999 -080809090300080209091004111213051000140613151004161717181000190401181800999299099999199091999901999099099900900919999900909399909999 -080909011000080411111004081211111000080405131300141415021300141403061600099999903990991099999990999900919999999999999111999990992909 -080808090900100611111100121313140500011313020400151504161600151704031600990990999999999900099909109999199399999091099099990999990929 -040808090900020808100100110312121200131314151600131314141604050417061600099999990991913919099999999120999990099999999999000099999099 -040801090900100811090904120811130500120802141404150616141400151517180300999990939990199099900909099999099919900919999099999199999129 -050809011000111109121004111109121000020406121000131314150400131603151500009999993999110099999999999190999999991099999009999990912999 -080609100400081109121200081309140300081309141404151316170200050117170400990099099990909999999990929999999099909999190191903199999909 -040108080900101112080900131414150500161414171704060218171704191918180300999990399990900991099909009099999990900199999199090999999929 -080309091000081102091000061213131000041414141400151617170400040117170500299999999991109999199900999991909999990199990090903999999909 -030408080904100408080900111112130900050212141400151512160100151512170600909902999999099919909999909919099099999190999993999919991109 -080809090904080802100500110612131300141415160300171418180400170118181904909909999099019999119909999091199999299919990199993990999900 -040208080804030910110600121314111500051414110100161617171800161617041800019909119999919921990919909999999090399990999990999909990999 -040809090300100809110600050802110400121213111400121215160400171701161600999290999990990909199991909919999910099919099909909399999999 -080803091000081112121000131106120200141115161600171118161604040105191904992199999999999909991990919099199011999999990099003090999990 -030808090900100804050600111212121304141515131300021515161700181818010400990992999990999919000999990190999990991999999910911930999999 -040808090400101010100100110412120400021313141400151313141400151503050600999090900999993919099909999199009199999999990999999200999999 -080809090900101112131300050412130300061412021500161617171804160117170400909999909990099909992999999909199909190099199191093990999999 -080801091000110812130400111414151600110504151600021717041600061717031600999099930099009999199919009909999999991909991909909999999299 -080808080900031004050900111213140900111212150100110216150400040416160600999999099999990920099999009999099199399199999190900919999909 -080309061000080409111100080212131100081414131500051614131504041718011500299099999090999999099919009919999991099999990099099039900999 -030809091000041112021000051306041000141414151000161617150100161717150400299999190990111999009909999909999999199909999093999999999009 -050806010400091010111100091012111100090212041300141512131300140304160400099999003099919999199909999999909910999199991999999909929009 -060809101000111111120100131404121204130215161604131718051600130319191900009999900999913991099909990919909919909919999190992099999999 -080806010900080810100900041110101200040213141200151605141204170318181800999999903999190991999909999910099099099109991999019990929999 -050808080800010910100400111110101200111113060200141504041600141503161600099999909993199990990999919999919900990909190990999999999299 -080910110400080412120300081312020600081314141500011314041500051316161500000099999999992990999999109999199099099999993109999999900999 -080910010600041112121200041102131300041114131300151114161700150316160500009990903099999999991901199999999090999999090990992990999999 -080803090900101112020904101012130600041412150100041416171700181405171700992999099999011099999990109999199099399990999009909999900999 -080309100600081111101200130211101200041415101200161616171704051804011700929099919990999999999901999019999910099919999919090039909999 -040801040900080810100900110210101200131415151500061416171700031405041700099999930999199919990919909010999999990909999909999909920999 -030808090900100408090900100402110400101212121200131414150600130114160500299999999990999999109990109999199099999199990990993909999009 -060808030909100808110209041212131415161616171415181919202115051919010415999290999990901199019909999999199990009901990999009930999999 -080804090903080804090205101112131313061414141501161717181919161704041919990929999999991909091009099909199999130990990900999009999999 -080910101111080410101212081304141412151606141417151818020403150118192005009099999999990990999990999009999009919991020999993919999100 -080808080104090910101010090911040612131411151612170418161612050319191902999999990309099999990190999909099099000999999009909999192991 -040401080902101112121213111114141513041614141513171717170603051818181804999110031910099999090999999099999909999099929990900999999990 -080909011004080809111012061313131014040215161714181819200414181819030514999999093909900009919099999910999090099199099119999929999990 -040405040804090910100803090904100806111213140815161217170218160117171818999900000999999299999999099099090000909999100191993999999999 -030809091011121213021011041313051011011415161004041717061818041717041818219999991999919990999909990919099300099099000990999999909909 -050809101111010810101111120804021304121415161717121815191917120415200306019999919993990999910000999909109909999991990999990919099929 -080808060309101005111212101004130214151617131314151819202014150421012014999920990919909999901999991900999099919009199009999039990999 -060108080808090910111111090905121302141516120417141804191920141818190321999990309999119999090199909909991009909900910999999999199992 -080109090410081109091213081114141506161117021804161619192020050419192003999909399900090099999991900099199909109909199999909999990992 -080109040404081011111111121213131313121403151505161417171819021417170620990999309000099991099999999999099929901999999990019999010990 -080809011010050609091010111212121213041403150213161718180413041919180413909999993999991900999109990999999099119021990999000999999009 -040508040910111208131310141208151616171218181616191218020603040120202020900900999099999909909990009099999919990991990990903919299999 -080801090910081112090906131114151504161114140217181805192017181803210417999909039909019909019999990099919999900999199091999919999290 -080809101104081202101101041313101114151603100517151818191920151818061904901109919999199391999909990902990099999099009999099999999090 -080909061004080909111213081402151613171704181813191920201813050320200104999099999009909999900901190919199990999190999999002993099999 -080809090500101009090600111213130100021413130400041415151500041403160400999090999999990909909911939199999199099909990999999909902909 -050809021010011112130410141412131303141412151515041616161617041819202006019199111093919990999299999999999990990099999999099009000999 -040809060104041009111112021009111113141415161613141405171813190304181813009999990309119909999019990190999999909900999990919999929099 -080909100104080909111112081313140515041313021615171819201615060321201615090999990309999199909199090999999099119991990099909099992199 -080901101004081111121213081111121204141415160206140415171803051915041818099999030909919099999099999090919999009990199099999909200999 -080909011011080909121202081314121215081614171819161605060319042020042119099919993119909990099199999909991990919990299099990999909900 -080609090510080809091112131415041112011615171812191904202012191921022003999909099909099909999909909909909300099199999099099919991192 -080804050409030802101109121314100609121315101609011315151718041319191904909992990099190999199991999999909099099990903990099099900990 -080808080104050910101111120910101111120913021406121516161718191916042003999999909300091999999909999999199909199909109099090991999902 -080910041104120410131104051410131101151414131116151717021804031717181806000900099999909009999999993999999990909990191919029919999990 -080805091010080804091010111213091404151213090406161213021717040113180317990999999999099909990999900099909990990999900191903919999192 -080808020904030510101111041210131313061414141401151515151617041819041717991902091099999999919009999909199999930999099990099099900909 -030809090909101011121212131415161604130217181619131717202001062105202004299999109999999991009990999919990990009199990919390099909990 -080109090909081011121306141511021616141711051616141819042020142121040320999999311999190009919900919999099909999099199009999992909099 -080409040110081111111110120213141415120616141417120318181917120518180417990999009390999099991911190900990999999909092999999990909999 -030809101106120205131101121214141115160417140415161804191915202020191915911102199999900391909999990099999900909909990999090999999999 -080809101104060803050200121314151500161616151500171717171804191920011804991109920199999900991900099999999990999991999990099039990990 -080808090910031112090910111112130510140406131510141617131819022004130104999999909999999029999999090199999990009099999111011993010999 -060308080909101108080912131314020405131315151501041617181818161619192021999990299999190009919099109991999909930900999099999999099900 -030406080904101104080405101112081313100214081313151616161617151518180104990002099999999999090099999900999119999910099999099903090999 -080808080104030402091011121212131314040515131306161715181919041715181819999999911309091029109099999999990900990999090099909990999999 -080409101104080909120313081414141513081602151513171717171804050104061804090009999999992999019999990991999110991999999990003009999990 -080909090110080211111210080611111313141516171313031805192021181819190404999999191391991099999990999199099900092099099090099990099999 -080509090104080209101111081213101111081415161616031417170418061417041920999999091300191991999990999910990999999909902999999990009900 -040808091010110808091010121204091304141215091603141715181805060115021920999990999999909909090999990999909910929199190999903919099100 -060808080804090902040310090911111111121314151616011314171716051304181904999990919209909999199099999091909010999990993999999009909900 -080910100311080610100412081313040214151515161717181819192017181819012105099929099919999999090199901090919991199919099999999930990990 -080409090910111102120410111313121415031313121616061717121819041717010520099990909999110999999099900299999999099909090909099939009990 -040804091011041212121204131414150605131414151616011717150316041718181802009009090909999909099999909999990099999909293919999919109991 -080409090904081011061213141411151603141411041718191920201818190120200205999999009900999090900999099999902990990909099199993991999910 -040808090110040406111210131313131210031414151205161614021718161604191818090999990399990000009999999999999299109991099019099999999009 -080910111212130910141212151504031606151517041604011717181605191919190204000990990999990909999099929990999999909090993909091991999910 -080809090905040810101111021213041111141313151601140404061704140318181818999999990009099909999911999199009991139099099999099000929999 -050808091011120413131411121513131611121517170611121517170218040104031919999090900090999099990990999999909019999999999991103099199929 -080809040310080804041111121212120211131314141405151616161606150401171819900929909919999909901999999909910999990019999999990309099900 -080801060909081011111213140411111204151602171205041804171919031818171919999099039009099900999099909099199911990199009909999999929999 -080910101011030912120411060205120411131314141411131516171701041819171704199902999099999991999900990919099919909999199099390099909090 -030804090410080805111210021314141210041314140610151316171818191919011818290099990999909919909919909999999999900909900110999039999999 -080601090904081011090912080213141412151516171412181819030420181821052020999909039991109099909911999091999991990992909099099099999099 -080809090106101010091112130214141515161714141515161819191919042003042105909999909309991099910901999019999999999199909999901990092909 -080809040104060409101111121309021414031515151414040416161616171717170518900999099309999909909111119299999999099099099999909099099990 -050803040910110812021313111414141313111515151516111718190420212101191906929000999909119999919999999999190999909991000019990399099999 -040108080909101008081112101013131313141516020617141819191717052019030421999990399909190099199999999099190900099091999999990999009290 -080409040110081112121210131414141410131515161610131715051602040603181920090999909390099109990999999999909990999099919990900999199211 -080808080109041010111109121213111109121213140415040314141602051718041906999990990399909199999990099999901999990999919291199000900990 -080105090903080810090911121314141411151616170211181619042020210419062020999999309929109990199909999009019999910900099999909999909909 -040408090909101108020403121313141516171313181805171919191906170120202020999990091920990909019999190099900990999199990999993099099999 -080804090310080806091010041111090205121113141415121617181919120104201919990299999999099990990909919999910911999199900009993009999909 -080808080104090910101011091212061314150502041616041717181616031717180404999999990309099099109099990091990099099919990990999990029999 -080904100404081111101213061111101414151516101414041516021703051801191919099999009009999999990009999990999991190999199091990319209999 -080909100104080909101112081313131314040615150216171815031905042020201919099999999309900199990199999909991999110999000929900999999909 -080803040909080810110901021213041415051613171715061813170415191920202015929099999999911319190911990909009099999099090999999909990999 -080809031006080811121313041415121313051416120217041416181819201416012121909909902099999999099909099999909099119999919909109939000999 -080808080404040910101010090911051201131302041414131306151616030417181816999099990900099999191999903991909919099909099990929999990090 -080910021111060412131111141412121503161616171718040405191718202020200118009190901999099999911999992099199990900909999990990903999999 -080504090300081011121304081402131300151515150100161717181800061717191904999299001990909099919901199919999999390990999909909990999990 -080805090900080802100300111111110400041213141500161617041500160117061500909999991299119991999999999919909900090190999099993999999099 -080401090900080810110400121213131400020513130400151616161600151503060400099999930999000999199991909199909099991999990999999900992999 -080910010400080210111200080610131400080510131400030415130400161617171700919999193091910990990999099999999909992909999990990099990999 -040601080400090909080800100211111200101311111200101414150400031405160400999990039099999999100919999919999919999090099999929909999009 -080609010400080810111100031210111100131214151504131202151500131617050400909999903099009999999929999999199991909919990199990990990099 -080808090900011010090900041111020500121314151500040316151500171717060400991999199993999999019909999999109011990299999909999000999999 -080605090300101111111104121202131304121214141500011614141700161618180400090290991999999009199991990999909999999199093090999090999999 -080802091000110805121000031306141000041313151500161616151504171718010400911999991991909929919999009999199999990909999909099030990999 -030809010500040909101104120402131100121415151100161715151100061718181800219999993090990099119990999991199009990099999999909099999999 -080809101000030802110400050612131304141516131300171516181800191516011804990992909999190999109990990091999999990999099019909939909990 -080104090600081010111100081010121100080513120200041413041500141403161700999099300999919999999909999900919990999990190099999991999219 -060308040900101008110904101012020900041314141500051614170100181818171700929990990999919099919990919990919099199091990093999099999999 -030804050900101010101100121202061300121414151500011616151504041616171700909092099099999999100990999991909999999919993909099999909099 -040106080800091010100800041111121300031111121300140215120400161715120500990990390990999909100999999999999999992109099999911999919909 -080801090904101011090900101012131400150216061704151518181700050304181700999909039999019999919999109991909119009999999990902099999999 -080109090900080810060500111210131400111210141400111510021600040404040300999999309099199900909999099999999999999991190919900002999999 -080805010900081010110900121010130900041415130900041416020400061417170300999999903990901909999999919090999909999991090919999199909929 -080903061000081112121000021305121000141414141004151516171804151501170400929099199999999901099919999199099999000910999990099390999999 -080901101004051112101000041212130400141414141500030602161500171717161500099900039999019999910999999099199999099919999090929199999999 -040806091000011112131004141512121000140516171700140216171704141818180300009099090993009091999919999999099999999099991199099199999929 -080808010904101112090900130614141500131614141704131603180200051920181804999909903990009900091999999999919909909999199929999991900090 -040809090300100809091100120802131100141415161104171718061104170119190500999290999999999909199999199009199991000910999199093099999909 -080809050600081010041100031010121200131415021600131414171700130401171704990999909090999999900929099991999091199999199919990399999990 -050803090400101011120600131014141400130215150400131615151700161601041700929090190999909999090999999910999199099999991190999309999999 -040804090400080810101100060210101100121213141400121215141600030517011600999090900999999990999901909919199990999909099999929039990999 -030809041000051112021000131414141004131515160100171815191904171706191900210999919990011999999909910990199999399090990999099999999099 -080909031000081112061300081415021604171715181804171715191900052015011904999299909199099990901900110999999999909999099019990939909990 -030808080600090910021100121010130400121414141404121516041700051801171700299999991099090999919999999909109099909019099909990399909999 -080804010609080810101109051212111109021213141509161713180404031913202020909999993099999900919999199999099190001990991990991999029099 -060808080909101011110909100411110212131314140412151617141812040404050103999090999999099999990990911999199909990999099001900003299999 -080809041011080509021203131409151616131415150404131417170406130117171819999919990129991900919999009999990999099919990190993999099900 -040809101010030511111111120413141414121202151601041715151818061920201818000999999909099929999090999990909919939019190991999999900909 -040809101004030809101004110806121304110814051313111515161717021504011717099909999999909029909999909990990909999900909910919039919999 -080902101010111213131406031212041414040415161701181818181705191919191720111991999109990929099999999999019900030990999999999909099990 -080409041003081109051010121209021314121215161614041717161614061819200114990999099920909990991999119991999901900999999999999003900099 -080904041010081112131010080614131515081414130516011717171702041803191920909999090999009999999099999909990099099090903999190999109291 -060809090909041011121201041314141405131315151617181815150219042020202003009999999090009399919909999999190909919999119091909990299999 -080401091010111111121304141414140215161704061818161703191818051720202020099190931199919999901099999900010099999999999921999990909999 -080909101003081112100213081414151613051414170413181818181913042020060104999929099999091999091909919999199090099991999991099003009999 -080809090910080811041210041313141414151313020403161616161718060105191904999999909999999090000999999099192191091999999999003000099999 -080910100604021103101212131314151617131314051617181920211617040120201617199091199909299919909099909999999999991900991009903999999900 -080804030905081011120913141516120904151502171717011819191919202020200604999999902909099000999909109991990990999019993999991190099999 -040809091010031112131410151616170404151616050618151919202018021919200118099999009999900020909999009999990999909900999999019993919199 -080809100104080211121313141411151313140611161718030411161918042020160518911999191309991991999999009909900999092999999099099990909099 -040208090903101112121304141512121316141517171316011517171816061519202105911920199990999091999990999999999099909999993990099009900900 -080503060910080411090910081211041310041415161604171702161601170418181818099099929999999090999909990901009999900019999099399191990999 -080409101104081209131414081509131414081617181803161605181819060104021919990009099990999999999900999999009911990909929999903919999019 -030808090406050808091011040402121314151516161714151516181814191920180114299999999000990990190099199099109909099991999999099993990099 -040808080905101104090912041313031402151313161604151506171717181818180104999090999900999100029199991999919990999991909099990903099999 -040809100205040304111212131313141512161714141501161818191520161818061520011199299109909909909999901990999009939999999900099999999099 -030809090106041011121212131402151515131404051616041417171616181417171904219999919300099999199199199990990099099999999090909990909990 -060808050904100408090911021213141515161717181515161717181904160301182020990990999909909000990911009191999990999999099999099399929909 -040103080808090910041111090912131111061415021616051718181816041717192020999990329909999999109999109019109911999090990999999999909009 -040808090110050808111210131313131214150416161217151816161902060403201919090999990399990109909199999909991999099999910099100999999219 -060801040904040808101112131313021112141415161112141417181119202003051919099009939090990091909999199909199991999910999999009209999999 -080904040310081111121010081306120204081415121617011414181917202020200517009929990999999990991999990900919091199910993990090999999909 -040408090903101010090911121213130511041213140215161617141806161601141920909990909929999990909999999999901090919099199019999391099910 -080409041011121209131111121209130214150416130417181816160517181801190603099000999999999999990999111091901999990099999090999309299909 -060803090910111111111010021212120413041415151313011615151704051819202020099909020999999919999919999991909009999999093199099090900099 -060408080803090902050410040911110410121311111410151616171718151616170104999920019999009099199999990009999099109999199909099993009999 -080804040903080810110912131414040915131616170205131617171818040106191818909999990929909990099109091999910991199999990990903909999099 -080903041010081112121010021113121404051115151604171115151604180601191919129099999999999919990919090990909019909999990990909309009999 -030804091011120808131011120402141005121516141718121515141901202020202106290909990999990999199999999901900991909999090901399990999900 -050808091004110812131001141402131004141515131616171515131616170304041806999100901990909399999990190991909999990999999999992090099909 -030608080905101010080404111102120413140404151613141717161613141717180113909002999999990999109090199099109999199009999999099903999099 -040808010903100808110912130514040904150416160217151516161817061919191818099999993920919100109999990091919999109099999999099909909999 -040809090909051011021203130411121206141411151616141411151716040104181919099999091920019999999909999099090999999999099109903000999909 -040809090904010808021010051112131314151116061314151117180314151104190414099999911003999990019009999990999099999900299909999909990909 -080909100304081109120513081102141515161617181501161619191919062004212121991299999909990999109000999991099999039919199099900999090999 -060809101010111109121203111109120205131314151616041317181919042004011919000999099999999299999999910099919991199919990010990039909999 -080809090300080209091000111206130400141414050400151616161700150104171700999999999291191919909990909109999999991990091999993009999999 -080808080400060509100100110212131300111412131500110316171500111616041504999099990999003909919919199919999919099990992909999999999900 -080909090300081011111200081311111404011304061404151316170200151318190500999999099299099990991909990999999309909990199111999999900009 -040806090900011005040900111112121300111114151500040216161500171717170300009999090993099991990990999990909990990199999099991999999929 -080109091004081109090312081314141512081614140212041717051819202020201806999009399999999291099901991909919999199099090999090909099999 -080809090904080810111212130314151612131705181601131920202020191902210406999999990909909909090999009929999990939190199999909910091199 -080806090909080810110304040204121213141414120405151516171818150119191919999999900999112991999000990919999990991999009000993099999999 -080910101003080406050411081204021313081415151617181815191917180120191917009999909029999990909199919900199099000999999199993099999099 -040802090909051011111203041311121204141414151616171819191616170119190604001999919920999990999990099091990999090190999099993999099909 -080909090110040211121210031311121214131311150414040616151514041718040514099990191399999091999999090299099999090909999999990090900099 -080808080909011011120909041314141515161714141819022020061819050420031804999999099993090991009909909919999199001999991909900999999290 -080806090105041010111111121010131404121515161604121502161617120318180404990990090309909999991909910999199999999919909919092090099999 -040804090106101011090912020405131312140415131312140416161712140316161818099999009309119010990999099199999900999999999090099999929909 -030808060909101011120909101002121213141405151617041418191919202020010404299099919999999999199099199909190990109999199009909030099999 -080809090909100406111203100411111204101314021215161717181819040117181805909990999990999299099999999900990099109001990999003999099199 -080808080309061005021109121013141515121004160415121718161619120104202020999929099990991199019909099999199990099099909119993009099999 -080803090210080809090410111212131410110415161701111819192006110519212121999119929999099009999999001990919909039990090999090990999999 -080909061010080909111111081212130404141412151501141404051516031718190220999999990909999999009009909999099900939990999099199999121111 -080803090506080410111112131010140212041516161612041717171712181919190104992999991009099909991909019999199099909099199999909903009999 -080909090110111212131310141212151310160415151717040518021717031919062021099990090399999009999999919099990909990991999019999199029900 -080805010904080810111106121313111104121414141515120416170218121616031920909909993099009099099909990999019999999099199900199999199921 -080804040609080810111209051313141509161313021703181818181717040119192020999999900099900990009999900099999191191999929999903909999909 -030808091011121213051411121213151611060215151711041819171720212121210104990092999099999999900999009919999019199999900099099003099999 -040803010905101112090913100602141413101515141413161515170413181818171704929990193909199099191990199999999090999999090909909999099999 -080806090910080811090910051211131414041211021403151216170418040104191818909909999999909900999991919999199091929999990009003009999909 -080309101002080411110412080411111312141414141512050404061601171717171616921919999919090999999999909009909999010999199990390099999909 -080909101004081109101212081314141414011516060403171818181919050420021919099909999999009990990999999900909300999199920999900199999119 -080804090905031011110912060211111312041415151512161616171812041917170104990902199999999991990909900919999919990999199990099093000999 -080808090110111104091010040512091314151502041616151517171616031806170404990990909399991909990990190991090919999999999990991999029009 -080910101105080910101204081314151212161616161717181919190217040601202103999009999999999090909900999990090999990990199999900311299919 -040809090909101011121305101012121401041502161414061517170418031517171919099999099009091999091999993099199911999990900999099999929909 -080604040903080510110912080410111314081510111414161617111802161601041919099099909929099999990190009999999099999099919011999301199999 -080403091011081212041302141212151516141718191516142005212116142020060116992119099910990099999199099999999000999000099999199993999099 -080805090110080804111210131313131210031402151204141416161206171717181920990999990399990090099999919999190911992999999990999990099000 -080802010909080810110904031212131415061212041415161616161417041819200517919999913999990029119999100999099099999999999990099909900009 -080903100411040910101211040913130211141413130615041404161717181818180105099900929999991999991999991009991999909990919900900903099999 -080809090106080810101010111213140415121202160517181920202121181820200304909999990309999909919009109991990991909991900099999999099929 -080609091010081109121010081305140215161617171819161620171819210401041803999999099999900990909900991909011909199999999919909309209999 -080808030400020406090900101111090900121204130400121414151500050114151500992991999090999919099999099100999999099990991909903999999999 -080801090600081009091100041012050400131002140400131004140400151515140300999099939990190909990990099999999011099999999090909999999929 -060809101004041112100100131314140500131514141600041717021600031818181600000909999990003990919999909909999999199099990991999919929999 -080809040300080909061000111111121000131414021000151414161700150401040500990999999290999909909999999909099091190990099999990300999999 -040408080600091008081100121305111100121415161600120215161704121803011700999990099099999900909999999900099991999099991190099939912999 -080109090900080810061100121212121104131415021604171819191600050319190400999999309099999991009999990099199911900190999990902999999909 -030804090900101010020900061104120400041313121400151313121400161601120500290999190999919999910909099909999999990999990910990399999909 -080509011000081112101000060413131400150213131400161717171400160304041400909999903990019900199999909999999119991099999999999009929999 -040809090400010806091000110812041000130814141000130214151500130516040300009999999093090999999910099199999999999999991119990092999099 -040808090600101112130100141415161704141415051704180215191700181803191900999090900990113991009999900999999999009199991990999999992999 -080808080400091011120100021314150400161314171704160614171700160318180500999099990991113919909990099199009999909099999999999900929999 -080105090900081010090904111010121300141506160200171518161604041518180300999999309990919099919909919009919990190999999909009992999999 -080910100300080906100500111212131400151212021604011704161600181818180400909299999999999909010999909099199099909001993999991919999909 -080804090400100411110300121211021300121205141300011516161600061717171700990090090999999909992991199999199909199199993099999099909999 -040809010600101009111100121209111104130214151500131316151500050317180400009999093099919999999991990919909109999909999999902099999009 -040806010900020810090904111212120400110513141400151617141400031818181800999990903991909011919999909999099990991009999099929990999999 -080901100400080910101104080912131400151512020600161712180300050412181800999999939090190099990991199099109999990991999099900992999999 -080304090500101002091104061213091400151516161700151816160100181819191904299991909099119099090990999009109999099999999093999909999990 -080808040900031002090900101011120500131314141400131315040400060116161700999092919999999999109991099919909999999909999099903000999909 -080909100300080909101004111213140200151616171704180616171704190501202000999299999999999009091909099909019099900999990919009309909999 -080109041000081109121000111109051000131404060200151516161700151503160400999999390990111999999999909099919099099009199991999990999299 -050801091000110812090200110813131404111513131604170618181900171704180300099199939190019999091999990999919909900009199999999992990999 -040809090900080802100300111212041300041212141400151515140100061617170500999990911999092909199999909099909999999919999913999909900909 -080109091000081109091004121314151004121602151500121717050600120417180300999999399991999019099910990919909910999910099999999999990129 -030408090900100411090900101002051200131414141400131516161700130601041700900992909999099999990991909991909099999091999990990309999999 -020808080300091005110400091204111300091414141400151616171700040116170600199291999999099990990910909919099999990199999909903990999999 -080808090904030402090900101011041200131314141400131315151600061715010500999902919999099999190999999901009999999991999090990930909999 -080808050400091006031100091002121100090413041100091414151500040104151500990990909099992999999911119900999990999999991909903999999099 -040808040300010805091000111112091300111114021300151516061300041517171700090999999293999991091991199990199999190900999999909099999999 -080809101100121203040200121213131404150513131400151617180100150619191904991199020199999999991990990999999909199991990003999909990990 -080309051000080609111000120209111004131415111004131616111700131616010400929999990990999909999901990019999919909919099910999930999999 -040809090400101111111100121302050300121415161600121417181604120106181800909990099090999909999911099991929991999999991009093099999999 -040808030400020908101100121314151600121314141600061317181804051301181800092999999091190919909919999999099999999909090109099399909999 -040106080800090909090800101112131400100204130400051515131600041515031600999990309999999910990990009990909199999199990990999999909299 -040508090900101112090904131313130200011406151500141416161704181816031900909990909990999090090999919919919309999990199999099991990929 -040801090400100811121300100214131300101515160500101515161704181803160600099099930991109999099919099919099999099999999990090290999999 -080809090900010810111204131314060400131305150300161617171804161602191800909999999093009091000999999990999999299191999999099199991009 -030809090400040209041000041111121200061111121200131314141400051301151500219999999090190991990909999999999099999010999999999390909999 -080808080500090403101000091111100400011111120400061313021400151316160400999990999090929999990909999999199399099191999990909910901999 -030809040600100809111100120813111104120213131400151516170500151501180400999992990099909919999999990909909119099991999010999309999909 -050404010400080809101000081112101000130212141500131606151500130317171700999990003099119991099999999919099199099099999099999990929999 -080409100400080511120100081311141400131311150200161617151504161618060300909099900990913999999900199999919999199099999099099092999099 -080401090400081009090400111111110400021213130600141413131500051603151500999099039991190919999999909199999109999199099990991999902999 -060808010904100811120900051313141400151313141400150216171800031616040400999900993990910900109999999999999999999190990190999900929999 -080809101004080909111204011314061204151502161200151517181900202020050300999909999090909091109939990901999991199999199900999002999999 -080309091000081109121004081314120400151502121600151517171804051917010600999999299999990091099991999091909910999999099190099930900999 -040104080900101112090900100512130200101414061500161414171500161604031500990090399990119999901990999990019999999999990991999029999999 -020808080800090909030400101106120400101012120400011314141400041315050400199991992099999919999990909909999999999109093999999090900099 -080409010500081009091104081213141404080615141400160217181800161919190300999999093090090099919990090909999991999919999109991999909929 -080808080904101010030600021112130400141515160500171715181800191901181804999000999099929991999910009199099999091999999109990399999990 -060808020900040808100900011104120900131313140300041516141400151517170500091199999990909991909939099909029999990099999099999090999999 -080403090900100411090600101111120200101314151504161714181800050114181800092990999990999999910909919999919011909199990999903999999099 -080905100300110212101004110413131300111414041500111416161500060116161500009990999291119090999999999990999990999999991099903999999909 -080909100500080909100400111111120100131406151600041717021804031717181800099099999999900999099999039990199099190099199911099999929999 -020808060400090810031100121313141100121313140400121515160500120115170400190991999099129919999999909999999190099199999900993909999909 -040803090900100804051100120802131400151515131300161717181800061717011804929990999099990909090991109099999999990909199909909939999990 -080809090900031010051100061010021100121314141100041514140100041616170400909999999092990999999999199099199099099099990093999009909909 -040108080500091008060400111010121300110414141400110215151500111616170300999090390990999909090999009901999999999919999199991999999129 -030608080400090408081000111202041000110413131000111413131000141401040500909992999099990910999911099991999999999099999090999300999999 -040808010500091008111100101012111100021312140600151612171804031919191804999990993090119999099999999199909190999190991990029099999990 -050808091000111111091000041213131000011413131004151606170300180217171904099999909999999990909909999909999309009109991999919992911910 -030804090400101112091300101212090500100214141500101617171500180601171504299999109099990991999999909919099199099909991199909399909990 -080401050900081011090900080411121200021311061200141311151600041303150400999999030991109999999990099199999190990999099909909990992999 -080904010400101111121200041111130200061414151500161603151500051617171700099990003099919909999999119909919099999099999929909990999999 -080804040900100811110900100211111200101314121200150305160100040617171700999999900999999990990919999919099911991991992993909009990999 -080809010400080810101000041111111104120613021400121516161600171705031800909999903099999909991999990999199900199999190099990091999929 -050308060900101108121204130208141404151617171400181817171900181804011900999090299099199009990991990019999099099199099199999039999999 -080509060300100211111100100412121300100412131300101414141400040115151500090990909291199990999999999999999999999009091999903099999999 -080109090400081010021100081210131100081204141100041206150300041204150500999099311990991990909999999999099909990990299099999999900909 -080808010400091011121300041411121200041402151500061416161500051716160300999990993090010909999991999999999011999990990999999992900999 -080809010600020810111204131414151600131417171804131920201804030520201800919991913099910019009999909999909999009090999999020999999999 -060108080804091010111104121313111100121313141500121617030500021819190400999900300990999091999919999999999990099999099129911099919909 -050809040400031010111100121010111100121313131404121516171400021515010600000999909099999929999999999990099999909990999910919130919999 -040808090900100805110904100612110400131402111500131617171800130117170300990990999999990099099990909090999111199999191099993992999999 -060808080800091004111100051202110300131414150400161717180100161717181804999990099990999990092991199019999990090919990913999999999990 -080909100600050909101004011111111100121314040200151316171800151304170300099090999999909099099939999990919000990909199991999099999929 -050808080804090910110100090906121300140215161704141815191900041818031900999900909999113999909990909919009090909199099999909999999299 -080803091000080806091000051102091000121113141000151116171804150104181804992999999999099990999999199091999091099991990119093009999990 -080806090904080810090100021112121204131314141400151617181800190320051804909909999999913990199911990190999999991999990009919099929090 -080808030500020604091000111213141400121213141400151613171704040113171700992991999099909910900999999199999990991990991099003999999999 -080102090300081010091100121010090400121314141500041614141704061805171700991999319290991999999909999909909909099099990999090009909999 -080808080904031011120900131010041404131305061400150216171400151819011400999909990999909929090999900909999909099199990910991139991999 -030809091004051111021000121314141004041514141000161718181900161618010600219909991999991909099900990999999099999009199091999930990999 -080803090904060804090900101010110200121213141500161617050400160118181800992909999999999900091999919909199991090919099109993099999999 -080909090400080410111200081302060300081415151600141415151600050104171700099099999999911990192911999999099109099999999999903009999999 -030809060400040909021000111205131400111513131400041616161400171717011400290999199099911909991909999900999999999090999991900939999999 -030808040900100808110900021213110904121213131400151617171700180504010600290999999991999919999999900199909919099991990099909030909999 -060808080400090909101000111104100500111102121300141415161600031718011604999990909099999990990999099999099901199919199099999139921990 -030808091000111108091000111102090600121313131300120414151600040517010400299099999999999999199991909919099099999991099009909030990999 -040808010900040808100900021104100900121212130900141404131500140305160600099999993999910901999910999199999990991999999900999900929099 -030404010600080909101000081109101000040212131300141414131300150516161600999992003099999999999919999910199911990909999999909099909999 -080803090904080810101100121210100200131313051400151516171804150601190400999909929099999990990999919909919999999900199011090309999909 -080809100400081105120100031113130400141513131600141502171800141506181804900099090999903999919999999299909999099991091119999999990990 -080804090400060809090300101112121200101102131300041114131300151605010400999090909999092999199999999991999091999999999009900030909999 -080809091000010811111004051211111000131415061004161718192004171702190300999999990993190090999909999901099099900919990991099192999199 -040408010500091008111200131308111400131315021400161616171404060317171400999990093090001990991999999990999999199901999999009999992999 -040808090600101009090100051011121300141402151600141417171704030418181800990090999999993999919900019999919911199990999999020099999999 -080901101000110912101000130512140600151514141600150404020400031717171700099990939999009909999909109999999909099001099999999919929999 -080809030400080805101000040211101000061211131300141511161300140104161600912999999099909991999901999999099010999199990909993099999999 -080809011000110812131004111414131000151414061000041616021700031616050400909999903999991099099909099999999099990990199911999900929999 -080106090900081011090900081212040500131312141400021503141404161704181800990999399999009991900909999919999990991999999299011909910999 -080109091004080809091000111212040300111212021300041415131300161718060500999009399999999991099909099999929991999091999099900090909099 -080809090300080810111204061302111100141414140400051516170100181516160400999999909299911090199990999091909999999199999113909999909909 -080808040500040909101100120909131400020615151400161715181404031701181800999999900090990999909919009191999909991990991999099399929999 -080209101104081212121301080414151616031414171616181819060520181821212020111109990199999399900990099299999999099090009099999099999999 -080509101004081109101012081314141414011313021515161718061515041920212103990999099909099090999909999991199399199900990099900999290099 -080803040900040810090900041110121300060204121400051515121400161515011400929099999990999991990909009919999099099109999919909939909999 -060804090900011011090900121213130400021413130500041415151500161403171700009999099993109999199991909199999199099990999999909909902999 -040508090110111112121310141512120610161717170210181919032021041919202021900990990399990190990900999099099999910909109999909929999999 -080808090909101002111101101012111106130414051515130316171815040419041818991999919199099399199999999091000099999919999290009009990999 -040108090904101111020612131111140512130415141617130415141818130415031818991900311990990999919909909990990099999999000990999929990999 -080109091004081109090404081111121213141414140215161617061819162020200305999009399990090999999099190099919999910999919909190092099999 -080808090909011011121304101014041516061717171716180219192016040503192016990999099003009999900991990091999999999199090199900999999299 -040408010909101011111109021212121213140415161313140617171805140317171904909990903099199919099999999100909990999990000999999990929990 -080910111104080410111101081210131414080513130206151504161718151503190418000909999999999390919990919999919909900909199991099919999209 -080105090910081112090910130412140210131312151617041812190317202106191917999999309999119900991999910999190909199099299909900999909099 -040108090909101010100611041213130204141516161717141816161705141818031904990990309909999099199900910900919099999999999999099091999920 -080809101006080909111101020504111112131313130414151503161717041819201717999909999091919319999909090199990999901990999290999909900099 -040808080904011010110912131010141412040504020612151515151612041718031616099999090903990099999909199099199990909091999991999099900929 -080409101103080509120213141509161718141419161704202021161701202021211706099129991999991100999190091999999909909909999990399999990900 -080903101011050906101011120904131411120215161411171819161420212121210104029990999999909999909999999910099911900909990091099903099999 -080808090410030504111210131415111616131306111616040204111717181818190117990999990099999020099090099999999990999199099991901013999199 -050809090306101109121213141502121213041617171813191920211813191921210104099299099900999909199900999991909009999991999001099993099999 -040108091010111208091010110408131415111602171705110418171719031818062019990990399991090990990999090999090119999019999999099990929909 -080806040104080809090910111213141515050216171515031816191920212121192020999999900309099999910000199091099919999190909999921999999999 -030809101111040812131313020814061515161717180415191717202021191901202005290099909099999909099919999190099199999990009909090399999990 -050809101104121212101006031313131414150416021414151717171718191919190104000909999099909999990029999999199991999019099999009903099999 -060408091010111208091010130408141405131508141416030402171801191919202020999990099999009909900999999909990009909991199919320190999999 -060809041004050811121313140811121313141415121601031717041616181717021920009099909009909909999999999999909900039999999990929999119111 -030809090506040809091011120802041013141516171717181818181901202021212121299999999009990909999091090091990001999999199990309909999999 -080801090903101010090206110412131415111116161617181819191919181820040521999920939999991900191099119990990999900909999999999099099090 -050104080209101011080409101011080312130411141515161611141504161606141704999110309099119999999199992009999990090999999999099990999090 -040308080805090410100211091210101313091415151301091617170406040417181818929990999109991090999999919909999909039990990090909999090099 -080808080109101010111109121314141106120414141515121617020415031805192021999999990399999099099900910909999999099991099119991999029000 -080809100111041212101311051212101411061515160211171515161819171720160304909990909399909999991909901999999090119999909991999092090999 -080809010510040809111010121309110406021409111516171418191916042003191916999999993099010909990011999199999999001909991909901999992999 -050809040300101111061200101111131200101415151204161615150200170401181800900990099299999999909999099909999999900099199091909390909999 -080305090600081011090400120213091400121313090400121516171700120416011700299099909991999991090999909919999991099991990009999939990999 -080601091000081112091300081414091500021614091704051604171700041603181800999099039091109990990999999199909199900999999909999909902999 -080808080300090906041000011112131004051415151000161617150200161604181800999999099299990990099939090919099019999009199991999009999999 -080803090904080805090900041006110200121212121300141415161300140104171700992909999999909990991900919909109999999109999909993009999999 -060808090400101102121304141111031504141617170500141617171800140119191900990090909999111009991999920919999999999999090090993909999999 -080801090900101010090900111112130400141115160400140402171700140506031700999999039999919999919990009999199091099019999919999099909929 -080305090904080810111204130214111104151616161700181920201700060120201700299909909099999091090910090199999999091909991099903999999999 -040808090300101010111200041314150200051414151500161616160400060117171700999290901999991999091909999909919999990091999990903099999999 -080806090904080810090904110312120500131402121500161617171700161818010400990909999999099099009929999199909111199999199099999930909999 -030108080800091010110500121310141500060216171504181819192004181819192004999992309099909919909919999911099019009099099099099999999990 -030808080400040509021000111109101000111112061300041414151500041414010400299999991099991900999990999999919909999900190909999930909999 -020809010600101011121300031014150400051616151704181919151704181919151700119991913099910999000929999990999099009909990999099999999999 -040105040800090910110800090410110800120610110400121210131300021415160300999090309999000990999999999199909099999999999909919999911129 -030608090900101011091200041302121200011415151600051415151604171418191604909992909999109999199900999991099399999999999199009099909000 -060108091000111208091000111308141000151508021600151504161600051704030400990990399990190990999999199909199999199909999999900920990999 -080803090905080210061100121210131404121210151600171718192004171701212104929909999091999991900999990999009990999190099100099309999990 -080104091010081111121010081111131304081415151617181419022003041406052020999099300999909999999909099901900999909991990091909009299999 -050809101112061313141104151313161617041802161617191820202117191803200117000909990909999909900909199091999999999919190099099993999299 -080803090906081004040902111012041314050412151515161612171818161612011818992999999909990109099100900909991999990999199901999939990999 -040108080804090910050611090912121212041314021515161617171515181919170403999990309009099999909091999990199909190009999999909999209909 -040104080503091011120213141515121616171717121616181818121919200621211919999090300920091901991199199099999999999099999999909099909909 -030408080106090408081011121202131313141414141504160417171515040517171818909992999309091019190991999999900999090999999090909999090999 -080809101010051111121201041111121213140215161313140417181920140306181804900990999099919399999909999910099199099909099090099099029999 -080109101000081109101004080609040200051213141404151516170300151518191900999999399990119099991909909999919000909991999902999009990999 -030808080900041010020900040410040900111112131300041114131300051515010600299999991990901990999999909099919909999909990909990930909999 -050308080400090408081000091112021304091412151300161616161300060117171300929990999099999990910999990909199900990991999990903099999999 -080309090900080802051000040611110400120413141400151516141400151501171700299999909099109900190999999999199091990919999099999390999999 -080801060300090910111200090910131200141410041200151416160200050416170400999999030299999999909990099909099999990919199991900909999909 -040108080804090909090600101011121304100214141400031505161600171718161600999900309999999990190999900991099919999190999999921099999099 -040809100106080811111111121212021313141503041313140416171718040519171718000999990309999999999199119019999929099999909009009099990999 -080406040309081011110909081004110204121005131304011414131315161616161718999929000999999999091999990099019090999099903919990999099900 -080809011004080809091111121314151511120216151517120516180319202020210406999909993099099999190901099919990919999099909912909999099009 -080801090909050810101111121310101111120414150206120414151617121804190320999999930999991900999900999990019909909999199999190909109092 -080409031006111213101014040215161601171818181805171920202121171920202121092990919900199001909991993991919099999909009999999999990999 -050108080904101010100909041112131406151617170318151917202018152102202018999000309999999991999900000919999099299199999999991199991090 -080910111104080410110100121210130500031410131500161617131800160602130400000909099999993999919990999999909299099199099199990190999199 -050801090900040810090900110812131300020814141304151616061704031616181800099999939999999909109911099199999999001999091990099999929099 -080209101000111212101004130314151500160614151504171814191904181801190500119991919999999019109929999999999090900999090099099390999999 -080801090900080810110400041212130500141212151500041616021700061603171700999999930999010999019909909999199099990901999991999999909299 -080909091000080204031000080411111000081211130600011213130500041404151600999999192991999999099909909999999199099909993099990000909909 -080109040500080909101100081212101304141212101500140216100400140616170300990999399091909999990919900999999999099199090199999999909129 -080309090900081010050200081111061200081113141504161718191900160401191904929999999190990999991999909999919901100910990099990399999990 -050608030900101111120904130212120900141415160900011415161700041815160400909990902999999000999911999199999990999999093990990990900999 -050801040900100808041100101012121200130214141400151506161600170304161600099099939090909999190999999999199119991990999099919999929099 -040108080800091011120600091012120400091004020400051004130300141515131300999990309999110999999909909999199990099991999099909992909099 -030809061004111109021000111112131000141212041500161717181500051717010400219909990999919999919999199099009999990919990910909930999999 -080909030500080409101000041112021000131314151600131314041600060114041600099999992099099999099901119919999990099990999099903999999099 -040808010500090909091000061111111200130214141500031614141700181604171704099999903099990999910999999099109019999199099999929099919990 -040808080800010910100400111212121200051314021500131316161500060317160400099999099993099991990909999019999911099991999999909190992999 -050808080800090910111100090912120100061312120300141516171804140402171704099999909999999999009990939009999999999019290991099199990190 -080509031000110409041000120209131300141415131300141416161600171706010400092990999999999900900991999019999911999991999999909030999999 -080305040400080609101100081212101300021414151300041414161300171717011300299999900099000999999999999190099191999991990990999039999999 -080808090400020403101000111112120400111314120400151515150600050116161600999091920990999919909999909999999190099109999999903090999999 -080803090900080804100900051102101200131415101604131717171700181806010400929999999999909991990901199990909009109999199999990030999999 -080409101000080502110300080412131300081412130600011516171700151518171704901999919299009999109990999999999019999199093099999099999090 -050408090300100211121300141515161600141415161604171717170100061818181804900990990290111991999999999999999990909019999993909909999990 -080801040400030809101000110909101000121314141400120204041500121606051500999999930099909920999999999119909999999199091090990999990909 -080808050900031002110900101012131304141516131300171718040600170119191904999992910999909999190999990091999910990199999009993090999990 -080809031000080809061000041109021200131114121200151616161600170401050400992999999999999990900999119099999991990019990999909300909999 -050808030900020810100900111210101300041214141400011206150400041216171700992990999991999919990910999999909009999999993090999909900099 -080509090400101010030600041111110200121212121300141415161700140401171700099090909999929909190999919999919999199091999910990399999999 -060804010400090810101000090804111200041311111400151503160200151516160500009999993090099999091999999099919909099099199991999290999999 -080904101104121306101100120214100400121514161600121517161600031501180500009900999990990990099991199919109999999999999919999309929909 -060809101004080809101000011111121304141111021500141617181904140520031900990900999999999990099939110999919099199991999010090199999299 -080909090900080502100300111212101000111306141500111617181504110104041500999999919299999900199999999919099999099109990000093009999999 -080903101000081105101000081102120600041314151604171314181800041301181800929999199999099999909901199999109901900999090909909399999999 -050804090300080804101000111202101000111213041400011215141400061616160400009299991999099909999999199991999090999919993999991100909999 -030804050900100811090900100812131300140815131304021515161600171804010600999992900999999999009990099199999999901990999919911930910999 -040608090300101112091300141105091300141115020400141617171800140117171804909990909299099909999999919990199999999001090190993999999990 -060308080800090904100200050904111100011213111100141413151500041613041500929990999199901999919909099909999311999990999099990909909999 -030808090400100408091100121302091100141515161104171815161100170501160600299999999090990909199991999019999090000999999099990399999909 -040108080500091008081100041012120200131014151504131617151500161606031800999090399990191909991990999990919099909909990999999091999929 -040108091000111208051300111108141500041614141504031602061500171818181500990090390099099991990999999919999019909919999909929199919999 -050808010900100811120904100613141500101602171700101618181904031618180400099999903999901099991990119991909119999990099999029990999999 -050801090900100811090400120811111300060804141300150216161600041717170300999990939990900909999991999099999999099100990099901999999929 -080910100600080909100100081111121304140215161600140417161600140305180400099099999999903999919999100991909119999909999099999900929099 -060105040400080910111100081212111100081302141400081315041400041315160300999990300091099990999999099999999111999999999999909902990099 -080801040500090910110200091213131404061515131400161515041400171717170300999990930099991999111900990909999099999999990990909992999999 -080801060500090909101000111212100400111212021300110414150300110416151700999999030099909991999909999999909991099991999099999092909019 -080909060300080909101100121305101000141315021604011315161600041315170400990999999290999909991990999099199091909999993999999909901009 -080909031000081111101004121111021300041406151300161616161300050117180400999299909999999009919909999909199990990091999990903099999009 -080808090900031010110400121010111104061302141500161718181500040518011500999999900999999929990919990991099001199099990991900939999999 -080209101100081213141100081513031104151513051104041617181900161601180600911999191990999991929999990999999990909109090100999399999909 -040809031000080809091004041111121000131415150200051615150100061718181800999290999999999090909909099999019009190999999093990909909999 -080809101000051112101000130214140100151617171704181606191904031620191904900999999990119991919919939109099999901999099999029099999090 -030808080500090910041104121213131300120214140600011514141600041718161600999992099099909091090999999910999919099999993999991109901999 -060808040900100808090900110412130200110414051500111614041500161601031500999090999990999999009909119991019099999999990009999399999929 -080801060900041011120900131012120900131005140904130215161700131818040300999999030990199999999990999990999099009190999111990992999099 -080402090300080410090900081110040400081210130500141212151500060116161600091999919299999990990990999999099010090990999999903099999999 -080909090904081011120100081111131400080602141404051516171704031518171700999909990990903990919999919909999991909919090999099199921999 -040208080800090904040300090910110600051212110400011314111500131314140400019999190299999999099990009919999099999109093990999999999909 -080509090300080409061000080411111200081313020400141415161700141401161600099999990290999999091909919999199991990199099109999390999999 -030808080904101112020900060413130904141413131500141416171800051616011800999902990991119999919990990099909909099991999900999939909999 -080306010900081011120904081013141400081013141400150213160400150405171800999999203999990099019999199999999999990190990199990900999009 -080808090904101106090300121305141500161617041504011617181500191919190200999909099990909909902990909009999999909990993109999191999919 -040808010400090808101104021212131400151212061400161617171700050318181800999990993099900009910919199199099999991999099999902990999999 -080109101000080811101000041212131400061212021404151617040300150518181800990999309999099991999909919999199991900009290999990009999999 -080109090400081009111100081213111104081413021504161613051700161606031700999999399090119990999990990909199999109099199909999999990929 -040809101000041111100100121213131400151613131400050604021400031717171400000999999990993999019990919909999099990099999901999919929999 -050809011000111112121000131114141000040214151504161706151504180319191900009999903999199909909999909019999990909199991909019909929999 -080808080600010910111104120904051100120213141500161617181500161604031500999099990993009099909919999990909111999001999999999029999999 -030805090600100804091104120804091300141515091300021615170100161618181800990992999099090019999909909190999990991999999903919919991999 -080909101004080909110300080612020500131415161600011414161604171717170400999909991290999999919990109091999019999999993909099909999909 -080809100600110204101200031304101404151515151400051616171700181616011700990991109099999921990990990919099999099991999909909939909999 -080808040904020503100900110410100900121314151500061617151500161601181800999901920990999919999999999100909199999109990109999390999999 -080804090300101011121200131311121200051311020600011415150400041615150400990290991999999909999999999999199099099001993190999999900909 -080808010900101011090900121111040400021313130300141515151500160406040500999999003999919999900919999199999199290999990999909000909999 -080801090400080809091000040611021200031313140500041515161600171717171600999999939099091900991999119991009299999990990999999009999999 -080910101100031210131100040214130500151617131804151517191900060117191904199992199999090991999990099019909109009999999909903999999990 -080909090900081011120100131411111504130216151504031718050600192020202004099999990999113901999999990910999990909109099909921999919990 -080304090500081011121200080211121200040411131300140615160100171515161600290999990091999991999991999909909991990991999993900999909099 -080904100500080910100100081111121200081104121200130304021400131516170600999099909990093999919999099990999999990999199901992919991109 -080809030600080810100200111112121200111305141404151316140100041317180400992999919099991990991999999999199990900999990093999009909009 -060108090900101108080500101112120200101112121300100414141500160414031704990990399990199999190999919999919999999909199099909991909920 -040809011000061112131000111114141400150316171700181802191904181805191904009999003990909999910999999991909299991919099199099099999990 -080901100400051110101200131314141404131302040600151617171700151616180300099990039099199991090999990999909910990019999999999919999929 -050108080400090908021000090906110400121314111500121603111500121616041700999990391099190999019999909909999091099929990999999990999909 -050108080300091006081104121314150200121614141704121818191704122020202000999290399999091001991901119909999999909090999990090999999999 -080904100600111112100300111112101300141402131300141415160400050104161600009090999999999999992999999090099911999999999000903099999999 -080405040900080810101100060210101200131314141404131315161700031515011700999099009099999990990901909911999999909991099099929939999999 -080808010904101011110900101011111200061313131404151602051700180319041700999900993999990999999999909901909999900919091109919099929099 -080404010900101011120904101012120900131314021500131616161500050306171800099990903999991099099999999909919900199991999999902990999009 -040808010900050808100900111212121200131414041500061616021500031604171500099999993990909999910909999009919999090999999911999999929009 -040308050904101111120900101104020900101314151500161617181500161601180600929000919999919999919999019999919009999909999011999390999999 -080809031000040802061000111213141000051213141000011215151600041215041700912999999999109909199909909999999010999999093990999990909909 -080109090900080810110500121010021300120414141300120404151300121604060300999999390999900919999919119990999909999990990909999902900999 -030809090500101009091100101002121104131304121100131414121500041614010600299999199099999999119991990999999990999099099900999930900999 -040804010500080809101000040909101000061104121200041314141400031515150200999990903099009999999909999999199009999099190099999991929919 -080809041010040809111010051213131313061415021616171418041616041418030104909999990990990990099009999999119001999910990999999993009299 -080105091010081112121010131112141415061116141404171118192004170221212103999099300990099999909009999090990999999909990900091999991992 -080106090909081011110404081212121204081302141515161718181903200518181919990999390901099999990919990919999911190999190099209999909999 -060105080808090910101010091111121213141111021504141616171819141604200403999990300999199999199099999099090991199900199999199900299099 -080804090110080804091010041112091313041415091616171702061818170304051818909999999399909990991900099999919001199910909199999099929909 -080809101106080512121204131314151516131317151516181818020403040119191919990009009999999909099099999990999999919001929990903119999999 -040809090909101010060511031202131311141515161311141515161711041819040104009999099999999029109990199909999099099999199999099093000099 -080805040909041004110909011212111304141212111515161717171715021819190306909090099999099990990939000999999199091999999999910999011929 -030808080804090909021005111112131006041412151004161712151518040112191818999902990999919099919999100909999910990199900999903999999009 -080909100403110909101212131415021212040415151616061717171601181818181905099990999029999909009990119009999999999991999991309990999900 -030809091010040805091010110802121301141515161317181915161320060421212121299099999999909909990901913991199091900999900999900999099999 -080902061004111212131414031212131401151515151616171705041616170418181818119001919099919929999999913999009999990990999999999099009999 -050808080804091011120403131415121216131717021816131717191919130120202006999900099090909990099299999900999099119991999919993099999990 -080910110403121206131414121213131515161616160215171819202121040119052121000090999929099999991999999900919999190100099999903909999999 -030408040405090408101112091304141515091313141515021617141818161606011818900992999009000099999099099999999999991909909110919039999999 -040809101005040811111003120811110413140815161613171718040213170119191906009909900999999909999299999099909011999199199099193009999990 -080808080104040304020909101112120909100612121304141516171305181817171304999990291309909999919900919909990999099900990099099999990990 -040104060503080910101111090910101111121314150204121316041704121318181717999990300020199999999999999091910091199999999009999099099909 -080808040105091011111212040411111312041414021315161718181315040318181306999990900309090900999999991999990990190991990099909999992990 -080301090910080811121313050211121313141515121604171815121919062004041919299909939909900991999999999011999999000999990090990009909999 -040804090104101111111212100213131212141415151604140415151706031818181805090999090309990999999901919919009999909999099999020990999990 -080509041010081111111010030604121314151516161616151504171718040219170118909099909990999999909099900200990999999999909999001093991199 -060108091010111208090904131308140403151508160417151518021717051920202020990990399099199000990999199909192999099991999091990099909999 -040108040900101008111100101008111100121314040500021515151500161616030600999090399099999999999990099109909900991099999999919990999299 -080801090900050810090900061112021300141412151304141412161600040417160300999999939990019999091900919999199909909991999999909092990999 -040809090300101009091100101002111100121313131300141414151600050104040600099299099999999999199991099199999999991099099909903000999999 -040605040800020909091000111112121200111314150100161317181804031717181800999090009091999919190999999909199990391909999909029999999999 -040508090900101103090900121212021304011414131300151514161700181818040600991990029999999900919999910909999391999999999000999000999999 -030808080804050909020600101010111200041314111500161718191904161601191900299909991990999990910999999990909901090019990909099399999999 -040806010904080810110900121210130300121210141400151602141400041717170500099909903999010909999999929999199999999019990919909090999999 -080109100500080909101100061212101304141212101500021617171800041616030400999999399090900901999999900999909199991990091999909990999299 -080309040400080809101100121309111104021305140100151516170600151518181800299999990099999919909999090199099990391091999119999090999999 -030806010904100811120900100813120900140215120900140405120400141616171800999902903999990999099991199110999199999009999999999900909909 -030808010500090908101104061202131404151515151600171718181904171718181900999992993099900091910901990991109999999090099999099999999999 -040501080800090910081100090912131100141415161100061702161604181818030400999990039999009999199999909901099991990999999119091990999299 -030809090900080810021100040406121100131304141100151516170100151505171700299999999099119999919999019009999990190991999003999999990999 -080403090904100604110900121314140200151614141700151618181700150118051700092900999999909900901909999909919019199909999999993999999909 -020809090900100806110100121213141400121204151400031617150400161604150500119991991999903919909999099990099999992999099009999999999009 -040809040500040909101000111212101000110306021300111414141400151501040400090999099090909999999999199929199990199999199999900300999999 -080808080500010910101100121310101100141506161700021515041704181818031704999999099093099991999919909109909990091999999909019999999290 -040304080900101011120900061011020900131414141400151515151600170501041600990990290999999999909991119099919099999919099999909309909999 -080803090904080804091000111202131000141516161604141417171800060117170500992909999999999909019909199901909099909991099199903990999999 -080809041004060909111000121203131000120514141500020414141500161718011500999909090990999990909992909999099909091999990999919139911999 -040104040500080909091000061111111100121304141400121515141400021616160300999990300090990991999909999910099199999999990999919999919929 -080804090500030810091100121313091100140615090100161715150400021818181804999999909099999920099999009199999999391091999090919919919990 -030501080900101008080900101011120904040211131300041415131300141406161700999992039999990999919999190919909019999999990009999990999009 -080803040900081011110904021213130900141513130600161717171700160418010500929099199999999091099919909199999199099109990999999030990999 -080904031004111213141504111213021600111717051800011717181800191919190600009200999199991099919901109919909999099999993999999090999999 -050801090400100808111100121213111104121415161704031406181700191919021700099099930990999909199999190990199909009991999999929019999199 -040808090900010808101100041212101300040206101300141515101300160315051300090999990993990999190909999919999009999199991999919909929999 -080901100500110909100600021213141400151613141404171818191904200318191904199091939999900919099990099109999999901090999999019999929990 -080109101004080811110400121213061400121215021400161718051400191919031404990909309999999991000990999999999911190909990909990999999920 -080808080400010909090900101004041100101202130600141212131500051616040300999099909993999991000999999999909111990999999991900902999999 -080109091000080809091004111206131304141502160400141718181900140518180300999999399999190009919900990909199091099019999991990992999999 -030808080900050610020900110412120900131414150900161414151500171704010400299999991999099909019999999001999991990999090999990030999999 -080903051000080911101000080911121200080211040600131411151600130401040400929999990999909999999999099919999199991990091100990300999999 -040808010900051008090900031111111200130204061400151516041400151516041400099999993990999990010999999219909909091199999009999999999909 -080809090900021011120300131304140600131314140400011515151500161604170500999990909991112919999990909999999999999109093999990909999009 -080809010400101009091100121213141504121216141704030602141800191919140500999999093099090990100999990991909999909919099999920190999999 -040808090904100808110100121313111100140506041500161616161700031818180200090909999990903909999999099090019099999999199990999991929919 -060809090900101011120100101011131400040511151400030402151500161616160400909990090999913999909999909009999999999919999909920190999999 -080910061104081203111100081314151504021314151500041614170100181814190500000909999991299999990999990199999119999990990013999999990009 -080409030500081010111200080204111300141515111300161615111300161601040600902999919099999991990910999199999999991999999100999300999999 -080809090900101010110100121202111104121213140500151617181800040304061800909999990999913991999991990991999990090910999199902009999999 -030405080400091011080400121111081300121414151500021616151500041616010600999092009999999910990999999909009991991919991999909930999999 -060108080900101008040900111111110900121204050300120213131300041415160400999990390999099919999999909199099999999909291199990099909009 -040208091000111206050300111213041400111215161400171515181800171701181804011199190299999999099999099990999990090190990999999399999990 -060808040900101112120904130412140900151502160300151517161600050118181800099099099990999009999909119091929910999909999999903099999999 -050108080900101108080900041213131304061414031500161602171700161618041700999990399990090991999901990991999099299919199919999099990099 -060809021000111111111000041204051004011213130300141413131500141416171500911190199999999901909999990990929309999099999999999999990009 -040801090900051010090900111110120400021313131400151506161400041503041400099999039990909991999999009109999999091990999909909909992999 -040809100400111109100500111104101200131303140400131315140100021515140600099099099999909999990990909099099929099999999993919999919109 -080609031000081112101000080213041400051513131400041516161400041504011400092999919999199991990909909019999919099991990999999039909999 -040108080200091008081100121213131100121204131100141516170300040616170500999190399190199990099999999999999909999090290099900999999909 -080809090904080802100300111213131304141415161600171418180100190605180400999909911999992909199909990901999990990919999093909999909009 -080910051100080410121100131310041100031302041100011414151600041414150600009999090999909999999990099299999910999919093990999990909099 -080405030900081011121200081013121204141015040200011016161600061717181800999299009199999999099999990090919099099909193199999099909099 -080309100500080609101100080209121300080409141500161717181800161704011804299999999099090999990911909999099999099019090919999039999990 -040104050400080909090900101011110200121013111400151513161400151506031400999990300090999909991999919099909909990991999999999929990999 -080109100400081112130500141111131500141617130600141602180300141604181804990099309990999909090999909910999990099999999119999092999990 -040808010900040808100900111110100400111212020500131212140300040604141500099999993990990990099999909991999991099991990999900092999919 -040604080800020909090300101011110400101211111300141212151300050401041300999990000991992919999999909999999999091909991990900309999999 -080401090900081011111200081011040400081004130300060214151500051414151500099999930990190999900999999990999999290191999119999999909999 -060804010900101010100900111112131300111405131300150404160200150317171700099999003999999999010990999909999990990099199901999919992999 -080209090900080810100300061110100400041213131400051513130400161601171700919999199299999991999909999919009019099999990090990309999999 -080309101000081112101004080213131300081405151500011617180400061917181804929999919999199091909910999999099109999199993990990999900090 -030809090600040809091004110802041200131415151500051616171700181801171700299999999099999009000991999091909009990991999919990399999999 -080809100400080811121204011314121200041514161600060217171600051818180300990099909999909090099931999999909009999919990199991999909929 -080909010400050909101000111111101200040204061300031415151300141404161300099990993099919999190999999910009099999199999999929909999009 -080509090300101009090600101002111100121313110400141315150400040116161600099290999999990999199991999199999190099909990999903090999999 -080409090900100211030400100511121300101404151500101414161600060117161600099990912991199999990909009999909909999999991999903099999099 -050108090900101008090904111206131300141515021304141515161700140318190400999990399999119009919909099009199999909991999990999910992199 -030809090600101004021100101012131100140415051100141616171700140116171704219099991999900999919999199091999990999019990999993999999090 -080109101100081213130400081415130400161415021704161406181800161405031800990099309090199990099999999099109999009991999099999999990929 -080804090300080810101000111102120600131414120400151614121700150104120500999299901999999909100999999091999199091999991990993090999999 -080309091004111202091004131314151004131314160100050614171700181819201700299901999991119099919999100999999901390090999999999999990009 -080109090600080809091004111213101000141204150200161617150400161605150300999099399999191009099990999099919990190999999900999099999929 -040809011000110909121000021313141400151305141400150416160400150316160600099999093991910919099999099199999990999990099099999999929909 -060108080900101010100904111111111200130414121200150402160300151517180500999990390999999091990999999091999090990919999092999119999109 -080809101000050809101004111209131300111402131304041516171800031616010600999999999990999090909909999900999901909919190091999930929999 -080808010900061010110900021010120904130514150904161617181904160320201900999990903999910999909919990109099990901900999990092099999999 -080806090500030802100400011112130400141412151500141412161500171717160400999092900999110999919931109909099999999990999999909999999909 -080109100400081109120500081113141500041113130400161602170300161617170600990099399999000999909901909099909999999019999992999199999909 -080509090903080402100411081213101011041413151511040413161611171813011606909929919999099999190909999909909009999990999019009939000999 -080910110112080804111312040414141512161614140412171718020605031719191919900999099399909999901990910099999909099991999110999909029999 -050808090900030402090600101010111100041213111100141414141500041604011500090999999999919920110999999999999000999991099999990039909999 -050808090904100308090900111202131404111516171400111817171904110601202000999900999999999902009999190911199919099999990090090390999999 -080808010600091011111104031202131404151516171700151505171700181804191900999999903091999021991991110909099909999909999999990909999099 -080109100400080811111204061311111200051415161200141404021700031818181700990099309999190090999909999900199999990901999990999919929999 -080109090400081009090500081011120400131004120600141515161600021515170300999099399991990999909990009199999909991999099909919999919129 -080808080900101003111204130214150500161717181804161917181800160106202004999099999099290019909910009919999999909999990109993009999990 -080305091004111212091000131412091000021415161600171718161604171701040600290901999999909919999990909199999919991119999909099300999999 -060103080400090908081004110912130200111412150500111612171700041818171700992990399099991099991901119999999090099090999999990999909999 -080803090500080610111204131314140200131314040400151516171700181801171700999099920990911009991999919999999909999910099009990399999999 -040809090600031011091204131313021400151516171400051516181404191916011400099999099092110099919999019909999999190991999909099939990999 -080804090400100209091100031213141100011515041100161617171100160617170500990091199999999921909991099991999390999099999090999990990999 -080609031000080411121000081313021000141513161000141517161600041501040500092999919999019999919909199999999991099999990019909300999999 -080406090400081002090300081011091200131314040500131315161600040115161600990099099999919999192999919001999910999999099009903999999999 -060108080800091011030400090902120400131314151500131316150500171718181804999990312091999999199991009909999900999999999099990090999990 -080808080300090205041000111213061400151516161404171716161404170118181400999299199991990919090900999199099999009199999099093099999999 -080910110400020403110400120506111300141415151300161415151300161601171700119091929990990919999999909100999999999999999190990309999999 -040104060800090909100800051111020800121213141400121215151400160415040300999990300999911900999999919909199909999909999999909992909099 -080509010400101009091100121213141400121204141400151616021700030416061700099990993099090990919990999990999999999991091919920999999909 -080809051000030809111100040212131300041212131300041415150100041615150600999092999099909991990901999999999091999091990993990999909909 -040408080800091010110400011213060300121214051500161614151500161614020400909990909990900999099930099999929910999999999099999919999109 -030604040400080808091000111102091200111113090500141313151600140401151500999992000099999999190991909999999919990990099900990399999999 -040803090900101104091200101111130200141406130400141415130400050116161600092999099999901999991909919909999999099909999119903090999999 -030808080904051011020904120613131400151613171700181819202000181801202004299909991999019000190999999099909000990919099999999399999990 -080503090600080810111200131410150200131310161604171710161604171701181804992099091999991990991999119909999999909099999009099390999990 -080808030900041011040900121311020900121314140900041314151600051306010400992999919990999990909909199999199909199999190991999030909999 -080910111200051313141200041515161704021515161700181819161700031806011704000990990999900999909999990099999191091999999909999039929990 -080909090300080410111100120613110400141313020400151515161600050117161600999999909299099909099909909099199999090091999999903199999199 -080808080300040910111200130902140500130615161604131717160400130118181800999990909299091999919911109990999909909999991909993090999999 -030808080904101005110900101002120900011314150600161717181904161717191904999902990999099999909991109999199311099090990990099999999990 -080309090900101011110600100511110400021213141504161718181500160418011500299991990999990999999999909109099119000919999090990939999999 -050308080400090902081004091112131400151116161700151816161704151906011700929990999099919099190909009991999009099999999099090939990999 -080905101000081112021000131406040300131404151504131416151500130117171700909999091999119901992990999999099990909999990009993099999999 -080402090300081010091100121006131304121415131304121617181900120117170500901999919299991909999990990919999990909109990000993990999999 -080804090600080810111200131415151200131302041200161617041200050117170300990099990999909990099999909900999910991919999990903999999929 -040508010900101008090900111208131300111204021300111214151600061204031700909990993999009999991990999999199009999991999901999091909929 -030108080800091010101004091111121300090211140500151516141400041718060400999992309999999099100999999919009199999909999099990990900099 -080409100300080409020600081104121300081114141300011114151500041116150500091299999990910999919999099999199099999999093199999999900009 -080904101000080911100100080904121200080413120400060214141400051515160300009999999999003999919990999909909991999919990199991999909129 -080808080300060209041000041112101000131111040500131414141400040115150400999290199999109999199999099091099999999199090999903099999909 -080809090300081011041204131415151200161615151200161605170200040118180600909999999299009000999909999099999919999991199901903900999999 -080805090900080810110904120213140100151616141404171616181904030620181900990999990999119091919919039190999999901999099909029999990099 -080806010400080809101000031112121200041111020400131415160500131317171700999999903099009999991929999999109991990900990090999909999999 -060801091004110809091004120813141000151502161600151517181600030419180500999900939999099009199909109999199911999999999900929090990999 -080409030500081011121200080206131200141414131300151616161600040117170400902999919099199991909919099199999990990199999999903099999909 -030804040900080810040900021111120900131414141400151515161600050617011600299099909999909919099999909190099199999991999909909039990999 -080909100400080909100600021112101304140515151600171715151800170301191804999099999999999909090911090191909909091999999999992309999900 -080104090900081010090900081011111100081213021400151216061400050317040400999999309990909999999991999999199911090909999909902090999099 -080109090900080810110500121310141404121506141404120216171700120418190300999999309999000919999919090919999990909190999199990199999129 -080806030900080802090900101112050400101313140400011313141500041616161600999299909999919990190991999919099090999999093999990990909999 -060108090900101108090900121113141500161113040400161113040300050217171700999990399999099909900900099999009999999999990999991902901999 -030808080200040906101100121212131100141513131100141617181104041717010500299199999190900990999999099999999099999090999001099930909999 -080103091004080809091000111202131004111415151004111616160500061718192000992909399999999919919911100990999099909099999999990090909009 -080109090900081011121304081014041300081015160600171005021800171703181804999999309990000099999991099991909991990991999091999999999290 -080104090904081011090900081206131300141402131300141516161700040503161700999909309991009999999910999919999919999010099999900999999299 -040808030900100808090900041105020600041112121200131114151600131314010400999290999990999990919900999999109909990909199991999930990999 -080808080900061002110900051010110400041212110300131214111500040116171500999090990999919999190909999919999999290909990999903099999009 -050108090900100808090400100411111100100612040200100404131300141515150300999990399090909990199999999990019099999909199999990919909929 -060104080800090910080800090910040200110510121200131403151600040415151600990990399999119999991999909009919999990991990920900999999999 -050809101104031202111100131304140100151616171700151616171700181818060400001909911999199921019999939999099990999999990999999000999999 -060308080804090910040200090910101100121313141500121313161700181801050400929900990199999999991999999099019999199991990910990300999999 -080109100600080909111100081213141404121215141404161602171800161605031904990099399990999991909991090991999999900919999911999091999920 -080109101000081111101000081212131300081205061300040214141400041503160400990999309990999999109999999990099999999199990199990910909299 -080803090900080810111204020411111200131414141200051515160100061715180400999999929099199019999990999190999199099991990903990909909909 -080801040904080810100900061112131300051402130300151516171800151519191904999009939999090990199909199909999091999919299011999909999990 -080501090900081011121304080211040600081411151504161711181500161903181800999999039091100099990919099919999990900199999909991999992999 -080809090900041011120200041311051400011511061400160411171400161617170300999999009990911990991909099909999310999999999099999092990999 -050601080804091010080800111210131300141215160400020403171700181818181700999900039991999919909909099190999990091990999999910299999999 -080802090600080810111204030513131304141415160100141718161600191920202004991999911099190029919990990999199900399909999099990909999990 -080405090900101112090904130212120100131415151500131616171700031606171704099990909999199001909919939999099909999090999999929999999090 -080901100400081110100400121313131300020514141400151606171700181803171704099099039999090999199919999190999099991990991099991999992990 -040803091004110808121204131314150200131316151500171717171800191905010600992100999199999009091999919990999999999009199991909030999999 -050809030400101112121300140212151604141717150100141717151804061919151800912990199090999991990919900990999191399999999990099099909999 -080809090300040209090600101112131300051212131300141414151500040401041500919299199999990901999909999919999999990910999909900309999999 -040108080600091008111100121313111400121516160200120416161700120503041700999090399999119909099909919909919999199099099999999209909999 -030408080900100408080600111212131300110212141400041516141400151505010400909092999099099919099999999999099191999119999199909030999999 -080503090900101010090904021112121300141414120400151617181904151506011900099990929999999019990919909919999999999190099110090039999999 -080808010900101111090900101212121204100602130400140515160400141417180300999999093999999990991909990999109901999919999010999019990929 -080808090105100411121314101502161718191920161718032121161718042121061718990990990309919090111091919910999999992909999999999999909909 -040809010400101112121300031415151300041415161300171402161300171706160500909990003090990999919929999999099099999919990199999990999099 -080901100400080911120400080913141400041313141400151502161700150306051700999099930990999999100990199099999999999991099119999009929999 -040408090900101108121300011111121400151516120600151505020400031717171700990990099990990999090939199909909990999901999999999910929999 -080801090900080810110900121206131304121214150300040214160500041717171800999999930999109991009999990999999999299191990119990990909909 -080801050400080809090900101011121200131314021500130416161700040316160600999999930099999990091999999900109909999991090999909990992999 -080809090400080209091004031112130600051415130100161715131800161615041800999999199099990021909991109999999099399099999000999999990909 -030408080900100406110900120413130900141513130900021516160100051517171700909092999990909919909909999199999999091990991993999919901999 -080809091000010809090200111213141504111617141504181805141504181806140300999199999193199990091999090900999099909009999999099992990999 -050808080800020909041004111212121004131415160600171418191900031401191900999990909991909019199999900191999900091910999999929399999999 -080804090300100811090400101202091300051414041300151414161300151701061300999290909999099990990991199919999099999990999900990309909999 -080809100400080809100100040209110600121209131400121515161704031518180500901099999999993909909991909919099999099099099990029900999999 -050106080904101112081300101414080400101414151600100215151600041717180300999000309091009990990999999999999990099999991999901999999129 -040804090500100811090900061212040300011212131300141515130400141515021600099999909090909900099999099999929399999199990999999910999109 -080309090900080810110200121310111100040610140400151616161604171701051800929999999199999909991900999999199901990919090999009390999909 -080304090900081011040900080212131400061212151500161616151500051717010400999999209991999999000911999999009991990909999999999030909999 -080406090300081010090900081010110200080404111200131415111200050401161600990299099999999999991999099990919999990099990011900309999999 -050801091000110808091000121213091004041413091000041506021600171803161600999990939990919990099999900099999909999091999901900999909299 -030808090600040208051000041111111000121204131300121214131300151515010400290999990090199991999999999019909909999999999119990930999999 -080909090900081011110600031211110200041313131400151516041700150116051804999999990990999990990921919999919099199109099909993990999900 -080309060500081010101100081204021300081214151304011617181800161604181800929999910099999999910909909990199911909199993009999999990999 -060809101000111111110100021213130400141215130500160415171704180315171700900990099999993910099999909199999909091990990999019999929999 -080809090900100406110500121212121300021414141300151616161604171803010400999990990999900900909999999999099199991991099999019930912999 -080904041000080802041000110312041000050612131000141412131500141612011500909099099999109919199929099999999999090099099919990939990999 -080910100400081110100100120213140400120515161600120315171700120615041700919099199990993991909919099990909900999990992999999999990099 -080104090900080810111100121202111104121314151500161706180300051919191904999999309099099919999991090991999901990090299099909909999990 -080809010400101112131404051111151400161602151404171818151400031818150600909999903090110009909999999991999909909919991999929990999999 -030809101000111209101000021313141404051513140400041617171700181818010600299999199991999919009919990999999090999019090099999030999999 -080909090904080810110100041212020600131214151604131714031800130519191900999909909999113991999909109999199009109099199992990099999999 -060809030400100811111200050813021204141413131200140415160100171818181800992990919090999999919900190999999999099919999013909909909999 -040809101000060211101000121213140100120313131500051616161500171717040400091999019990199991019999939999999299999909999990909000999999 -080405010900081011120900081314121200131315151500060204160400171717170300999999003990119991090999999990999999999190990090991999999929 -080109091005080809091112131415150404161617171718190206032020212121212020999009399099099019990000999190999999901999901099991929999999 -080904101106121203101113121205101413020415101413161715151818041904011818009990999909299999990999099199999990991099001190990939900999 -040805040600090909101000040411101000121211131300011411021300041411150300099999000099909909999990099999999999999091993999999912901199 -030808080400091004021100121010131100040614151100161614151100161614010500299999991090901909999999009099999900999999999091999930999999 -030809090400100804091100020612131104141516131100141717131100141701051800299999999091909919909990990190999119999919999900999390999909 -080803090900080810101100051213140200061515161600171515161800040104181804992999999199099990991909119901999090999999990990903099999990 -060108080800090909100400110412101000131314020500151414161600040317161600999990300099999909199909999091909991999991990999909999992199 -080910110400080910120600081310141404081302141400151516170400150105180300990099990999990990999999990990999111991991999090993019999929 -040809090400101010100100111213130600111102141400151604141400051717170300009099990999993991099999999919909911990999990999900092999999 -080409090300081010111100081002110500081212131400151515150600040116170400099299991999999999999911199999909190099199099999903099999009 -040106080400091010081100121013081100121413080200121505161600041703161600990090399990910999099909999909999999199099199909990999909299 -060504080300090910080800090911121200011314020400151516161600151517171704999990009299909999991990999990199309999191099199999099999990 -040808010600090909091000111112051304111114141500161617170200160317041800999990903099991999001990990999919999999090199991999990992909 -040801050900101112120900131112140900041106151500040216161500171717170300099999030990999909999991009099099909999190990999991999999929 -040408080400091003110200121212131300060414130500151514161600151501161600999990021099991900991999999990999901990990099099999399999999 -080808080106091010111112041010111113141415151602171819150320170421052020999990990309909909999099990900919999919099910099990092999099 -050809101004030404111012131406151616131417171717131418181919022018180119000999099909900929990099009999990909999999099991919993911999 -080805090902080803100411121314151617121818061617121819191620122119190104909919991919929090999190009999999999999900919990199993000999 -040408080400090908081000111112121300110212121400031516160500171701160600909990999099990990990999999909909919099191099999921399999909 -060808050900101108120900101111120400101314120200151604171700040103171700990990999999990999090999999909999011199109190999903999999299 -080801091004080809091000111112121000131402150500161717040600031717181904999909939999099999199990909999199111091900999999929990999000 -030408090910110512060910111102131415161617131818161617131818040417130104909992909999090999090091199999900900999999999991900993099999 -080809090903081002111206041314141504161614141515161617181818040519012020999929019999990090109999999009990999999919909019909030990999 -040106080910111208080910111212131310111404131304110215031617041818181905999990309991999099099999090999999199999109009099001920999990 -080401090910111212090910131212141510020416041506170318191520171705191520099900939990909999909919909190999099001909999999092099999909 -030808040905040808020910111213140915011616171717061819192020181819212020290999999909919909919001109919990399999900990099999999999009 -080808010904100211120909100613131404101513131414031617181819052004181819999909113991910999990099909909999909992999099009090099909999 -060808090105101002111213100414141415031617171819202017172119202004212119991990911309191099990099999209990909009099099999999999999099 -060809091010050404111012130314151512131314151512161614171819161602200104009999090999990909090992999999999909999991109099099113099199 -040808080905101011111203011313141515041313141504161617140218161619142006999900099099990990099239999999999091999909109991099090990990 -060408080109101108081209131313141409040515141416171702181916170320211919909990999390091099919999199001999999909919999019999919092199 -080809090610110209031210111113131410041513131610171518191919041501040504999990992099199991990999999019909999099909900109909300099999 -050804090909080810101011121314021511161717040311181717191911040120201906090999999909999909099900111991999090920999999909903099999990 -050809101010111209131401111109021415041617180315041919181815201919210615099999091199009399919990990990199099999009299999909999909009 -080910101010020503111112131404151512161414151504171718180619170118182021119991920990999919999990990199999990991909909090993999099900 -080809100104080809101112131414101104041516101104151502171106051817171903990999999309091009999099999090999991909919999019090999909912 -060808080809031010100909111112021314151616171814191616181814040420010504099909999992999999199090119999919090990990999999009030090999 -040806090305100804090911100812130214100815151414011615151718191919192018990290999909999099091999019999199099999099093190990999999900 -050808030909101011060909041012021314151512120414151516171814040401191914999290909999009999991999119009999999999991099019900300999990 -040809090410010811111010120813110402141415161717141405161717061819160304009999999093191999099109990090991990999999999999900092090999 -080808080909031004110909041012131406041512141401160217171819161617170504999999990992909999900909990919099990930199199191099990090999 -080808090910030402111110061213141110151516141417151518181818051920210104999902919999019999999900999990910909999909109999999903000099 -080109061010081112120213081415150403080515151604171717171818041919191818990999309110991991199291909999999099000999099999909099999999 -050108091003111202090913141414140413151616171818191616171818042020200604991120319991999019190999999009999990090999999999900990099999 -080808080910031111051210131114061210021414151610041717171819042020200104999009999992990999999919909199909191109999100990999903009999 -040808080804090905101101090912131404151616131302151616061717151818031704099909999099909399901990010009999999919990919999999099099929 -080808080105090906101011090912101011041313130214151515161718190403202121999999990309909199999990099999991999010909109991909919009299 -040808090210010811120613141411151613141411171603180411171604180519171604091119990013099990909999909999992990990999999099099099990990 -080109040410080811111111121313140515121313020415160406170415181818171703990999309009099991999009009999999991900091999909009999999992 -080906041003081112101004081312021414081312151414161617181919161605200119909029099999099999919099199999999991990091099001999903999099 -050108080609101011080409101012131409151602171409151604181419041603041919999900399999100999199999190099199911099999909090909909992999 -080609091010081109091005121212121313141516041313171702181904170120202103999099099999999900099099909099999110991919999900093199999912 -080809011011080809101012131313131415040216171406031816191404052019191404999909993909999990010099999919090019999990992199099999900990 -080809091005081109121201041113121203041114041516171818061516041818190216999909990090999309999990099990912090999999990909909991999001 -040808091005030808091011121212090613040402141415161718141419202020200119099999999909900929999099990991090909990919900919090903999999 -040802090910111111091010031212131301041212131306041404151515041617181805901990919199999929991999993999999090909909090999990990000099 -040401080808091011111111121212131314151617180214191904180614191905200314999990039900999990019099999099919009190909099999999919990929 -080809041011040809041211131309060214131309151516171718181920171701180503999009999999090909990099991999011999999001019099999390299999 -060808080804091011111212040511111301141414141516171704181916031718180204999990999000090990999999903099919999019909999999199991921910 -080309090900081011061204130214121200151614170500151814191904150114041900929999919999199001909909999919099010099999999109093999999099 -080808030900101004111204101314020500151314141600171318181600040118180600999290999199901099910999199099999099999919990190903999999909 -080808050900041010061100011010121304141415151504141617181900161602180300999090099099999999900939990919009999909109999191999192999199 -080910101000030911050400120213130400121204141400151516141400151501060400199992909099909991099910999999909909999199999109999300999999 -080910011104021213131100141213131500141216061504141717181900031717040500119901913999090919990999999990999990909909099909929900999999 -080808010900030510100900111213101400111215161400110217041404110618041400999999903999090929190999999991099999999010991199099099990099 -080109100600081109051204080409121200131409150400021414161700181818031700990999390091099090999999999199099090991999099900919999999299 -060803090500101011121300141502161604141417161604181717191900182001191904092999091099910990199991090919999999909199999909990399909990 -040808030900101008110900101213110900041214150200011216161600051217040600999290999999999999099909999990019091199919993199999990900099 -030608090904101008090904021008111100120413141500121617181900120501191900999902099999999099990910999199909909099900991100990399999999 -080809100500011111111204061313121200021313141404151617141400031817170400990099009993999099199909099999099199901909991999991990929999 -080105060900081010101104081213141404080213141500161613151500170313180400999099309090999091990991090999999919999199999909919999929009 -080806010400080809101100121313141504120313021500121617170500181818170400999999903099001999991909010999199999999291999190999999999009 -080309101104080512130200081414151504161414171500161819171700161801040600921109990199009999991999990099999999199909990019999300999999 -080910060500080403111100121204111100131414140200131516161700130116160400000999099099929909999999099099919999999990190191993999999909 -040808090904040808100900021112101300141516101300171515101800170305010600099909999990999999090911999191999991991909099990999030929999 -030808090900040810090900111202131300141515150500141416171704040601171700299999909999909901999991099091909999999190999199000399999999 -080808080400010910101000111112130500111112021400041504041400151506031600999999099093199990199999009999999991190000999999999991990929 -020809090300101011120400101011120100131314121500131304161500051704061500119291999999990999999991139990999909099900999999900909990999 -080910111104080902120300080513121204081415160600171717181800040119181800991909919299009999199990990991999910090199999999903099999099 -080808030400090904101100040206121200131414121200151515151600050117161600992999199099090991909909099919999199991999099999903099999099 -040108040500091010101000090611121200090213121204141415160300171717161600990990309091999990099999099999999119900919999912909999999999 -040808090900100803091100121212121104021314041100151617181100061617010500999990999990990909299999990199999119999910990010909930999999 -040504010600080808080900101002090900101011111200031314151500161604041500999990003099991999999991199990909999992909099099990099999909 -080805010400090910111204131415151200141402151200061617171200041817170300999999003099901009999999999099999901199019990999990999909929 -080909011000080909111000040212041000031312141000131312051500041617061500999999993990910991099909909919999990992990099999999099900099 -040108080900101108081200101314141204100214141500161718060500160318180400999090399090099991999991990999999919099100091999999999929909 -080409090900080304101000081104121000081113131400021115151600061715010500909999999092909999999999099999009999991990091990991930901999 -030809090500100809091100101213041100101415161104021704180100061717181800999992999099999990099990099909999900001990991903909999999199 -080109100500080909101100080412101100081312121100021403151504041617180600999099399991990999999909099999999009991999991999001209991009 -030809101000041111021200131111141504131617171500181817171500061805011504211999991990991999991999090999099009199999999099909039999990 -080809090500080810091100041010120400031313131300011415021604171717170600999999999099000999999909009999099299999991993910091190999999 -080804030900080802101000111213040400111214151600011206171600051217171600909299999199919909190999099991999010999900993990999999909999 -080109100500081112131304081415131304081616161700020603181700192020181804990099309991099090099999090909999999091999990999919299919090 -030809090500101009111100101002110400041212121300141515151600141706010400299999199099099999999991199999109099099919099999990030909999 -080509101000080811120100131411151504021611151500061617171800031617040400900999990999113991909919990199999199999990990990999990929099 -050408080800091002110300121314111500161617171504011618181500061918181504999990019299199901999900099919999909909999993999990999900900 -080910110600081213110100080214141400151516051704151616181800030419181804000099999999193991119999999919909909909990099999929999990090 -080909090300080810111200051314150400061414021604011717171700181818191904999999099299091999019900999999109099109099193999990909999990 -080803091004081111121300141111120200141515121600141515171700050106041704992109999190999909991999999999919991199999990909903009999990 -040108090600101111121200131111141404051515141404021615171700181819031700990090309999909909999909090019999999909199991909919999991299 -080109090400080810101104121314151600120206170500121818191900120318191904999999309099999019900910009910099999999190099999999999992990 -030408090500101108120600101108130100100204141500161617171804161617171800999092090999910999919991939919099190099990099099099999999999 -040401080800090909090800061011110400041211021300141414151300161605031300999990030999999990919909909909999091199099999991909029999999 -080209090904081011120300101011130100141511160500171811191904172006191904019909191999992999999991139909099099090099999909090999990990 -080803090600080809091000111213140200011515151500161617171704161604050400999999929099991909991900119991999399999099999099099900990999 -080309091000081109091000081206021304081212141300151515151604051718010400999999299999190999919999910990999090199991999990099030900999 -080309090400080409101100080212131400151516131404171718130100171705130600299999999099909990900911909901999991909909999093999999990909 -040808080500090210031100121206111100131313140400151515151600170401161600999990119099929901999999999910099999999910099990909399909999 -050809010400100209111200131309111404130315111400161617181400160604181400919990193091910919990999990920999999990900999999990099999999 -080109090904080810110200121314041500160614171704181814191900181814050300999909319199190990001909999099919099900999199999999992999099 -080109090900081010110400121010130200121415161700121404051700121806031704999999309090919999919909919909919900999900999999999999900920 -040809090500011010101000111112121304111102121300141516061300140417180300009999099093999990910999990991999999990919999090990199999129 -080809041000111109091000111104031000121212121304141516021300060117180500999099099999099999099999929099919999909101990991903099999009 -080808050300040909041000111112121000110406121000011313140200041313150400990990099299990999099990999999999999099009193991999910909199 -060108080400090910101000090911111204131411110400151617171800051602170300999990309099099999990990990019909999990199999991909192991999 -040105080800090909080800100411110400121211110600131302141400150304041400999990309999909900190999999099999999099919999109919009929999 -040808090400030802101100121212041100131314151100130516151100171717010600099099910992909999199999999991099901999909999090999030999999 -080808090900041006090300111012021300110414051300111516161300111701161304990999999299999909019909919990099099999909999091990399909990 -080808091000051111021200041311040300141515161704141515181700140601181800990190991199919999992909099901999090909990999990990399999999 -040106080900101011110900100412120900131302140900131315141400160405170300990090390999099990099999999199999911999999999099909019909929 -050808080800091011121304011415041304161415151700161618020600031919191900999990990990090099099931090999909999099991999019999190929999 -080809090904061011120100041314141500051614141500171718021504031719191500999909009990903990919900999909999099999991999110029909999999 -080309041000111112041000130214141000131314141000151516171804150116060500290991909999009991999991999999999999099010999190093990999099 -080109101104081212130200081212051404151515151400161717181904061720200300991109310199999999901909990909999999990900199999009902999999 -080504090300081011121304081411150200141411151600171711151604170118190600999299001999991090991999919099999991999099999190093099999009 -050809101004011112121200041314140600151514161600150217161600041818180300000909099993099991999909909919999910999919999199991999909929 -080401090900021010091100121010061100131414141404151504161700031505181800099990939991900919909999999190999999901999099900929990990999 -040804010400090808101100091213141100121213041100050615021100031616161600999990903099900999919900199999999999990910999019999919929999 -050108080400090910100600090911121200131302121200131414030400040414150400999090309999099999990991199999999901999919099999909929990109 -080804030900011010040900111010060900120513140200151313161600041717161600999299009993909999999909999001019991190999999909909999999099 -080809091000111213091004040213031000141413151000141617171700060104180500909990999990999090999991999019299991099909991999903009999909 -080809101100010812131404051212130600151502130300151516161604171718190400900099999093190099990999999019999919999919299999009099999009 -080808050900041011090900061212130100141515161604021515161700181818030400999999090990009999099999139019999090909999991990919990999299 -030808080800090910111100011202131304061415131600041717161600051717180400299999919999999990190939090911999099999119990909999909909909 -040401030800090909101100121213020500121313060400041414151500161616151500999290039199991991919991109999099999990909099909990999999999 -080809100500111112100100111112100600041314151500031617151500041717020400900099999999993999999999009900199009999999992199999919909109 -040804010900080810110900121212121300141415021300031617051300061717041300999990903999090999019999919999999901199910992199999999909909 -050808090400100808111100031213041100141213151604171713181600060213011600999090990990909999099999099299999191009191999999991939901999 -080808030500040909101100120909111104131314140200131315151604061701151800999999092099999909919909990909919909999999199099090391909919 -080808080900011011040904121211110900121213130600140215161700040515150300999099099993990091999990999999909909990199999111900992999999 -080910111100080912030400020913131300141415161600141417161604041801060500900999999999129909990919999190909909999999999199090300909999 -040804090900011011121200131311121200131411150200061416170500041403171700009999090993199999999990199999919909190991099919999299909999 -080104030900081010100904111111110900121212120200051314151600061718180400999299309999999001999999999919919999199099990000990990900999 -080910051100040312021100131306141104151614141100151717171700150118181804010990219999919999919999090099999919999199090999993099999990 -050108080800091010111200090913041200141516161200021504161200061517030400999990390991900999909990999190999999991999991099909990991299 -080309040400100611111200100211111200051313131200141404150100141416150400290991909099999990999919999019099999099991999093999999990009 -040808030900050808101100121213020600041214140400151516171700151516011700099299999199991909019999009999199999990019099019999939999999 -080808090500030402091004111104101000111112130100141515151500141606171800999992919099011099999999999990199900399990999999990990909009 -080304090900081010090900080611121200021314121200151516171704051804011700299999909999999999009990999190999199999100999119090939900999 -040808080300060209101100121204131104121214151100051616171700181816011700099299199990119999019999990999199900990901099999999939990999 -080805040900021011090904121314150100121304160600121317181800031717181800909999090991199019109990139990099999099990999909929999999999 -080809091000030809041000110212051000111313141000111516140100040404140600999992999999909991099999909910999991099999990003900999999009 -080501090904101112090904131415151600170218181600191906201604190320201600099900939990109091990910999199999109999190999909099999929999 -080409100300081111121204131415120200161617171800161617171804051901061800909299901999999009099990919009919999999999999091090309909999 -040108080600091008081100121013040500121013021400120415151400120404031400999090399990090999900901999999999991199990990999999099909929 -050608090300101108081204041102131200141115161204171715181800171701181800909290991990999099199999199099199091009099099099999399999999 -050108080800090909091000111111101000121202130600121414151600040403170400999990309999999919909999999199999911999991090990900910999299 -040801090904100808090900111111111200130214151600131715151800061705030400999900939999999909109999909199909111999099099999909020999999 -080109090900081011110500081010041200081314151204021617171200061804031200999999309991999999090999099999999000001999991199990029909999 -050108080900101008110400101012020400131406151500131404151500161616170300999090391099199999919990909900199099999999999099990919999929 -050401080804090910100800110912061300140215151300031615151300171819191904999900030999199919099999099190999199999199999990921099919990 -080801091004081111091200061113091200141513091204161502050300041517181900999009039099909999999901999909999099900919999999909102999119 -080209091010081111091201081113131313031414140615041617181819042021181805119999999099901399990999999299090999999090000909999099000999 -040804010409101111111212101314151212100204161606171705161818170319191818099909003900999999919991109910900999999199999900999999929909 -060802091010110812041003050812131404151612131717181612191917201601191904991190919990909299999990900099999990990990099099909399009999 -040808060104050808090909100311111213141502161613171718161613191919042013090999999300909999991029919191999119909099999909999090999909 -060108080808090909090410111111121204131402041215131617180515131903181804999990309909990919999099099991099009909919999109091999992990 -040809091010011112091013141415151613040515151613171802061613170304041604009999099993090091999991909009999999999919991109999099029909 -080910011111081212131111080414151504081616041504171616051803170602191919009999903999900999919090199991099999900999999909299191990199 -080809090909011011110412101011110205041313131414061504160314171717181904909999099903199999990099919999019099999090990099290909999900 -080804090106080810091112130310101414151502161414171717181920212121210405999999909309090999991029999199099911199900099999099900099999 -080808020106030409091010041109121013141515151613141718051913202020202113991992991309999990919009919909999999009909090099999900999909 -060805090909041011110403121211111313141515021313161717171704161618011904099999000990090999999299999099099991190199999999099030990990 -040808080809101111040909101212121205101314021504161714181901060314181804999990999099999990900999990909119991900099190999309990992990 -060108080808091010111212091010111212131414140215161718192020042105040320999990309999999999999909009019999999110999910009990909900992 -080808080400090510031100021210131104141513130400161517181800061501181800999090099999929909999911900190999199999999090109909399999999 -040809010600080809101100121209131400021515131400041516131400031704051400099999993099110919900999999199999199999909990999991099929909 -030809101000060909100400111102121304141516160500141716160100141818180400299999199990999999100991900919099999099199999193999099909909 -080809010500041010101000111111121304021412120600151616171700181903171704909990903099999999199999000919909199991909999909919999912990 -080104040400080910101000081111040200121211131300121203141400051506041400999999300090199999901909999999919909999991999929990909900999 -080501090900081011090904081012121300141012021500161717180600040304181800999999039990109099990991999099909991990991099919902999999099 -040809100300111112131300111102131400151516171400041818171404051818010600091299019999999999199991909919999911999999990900099930909999 -080806090900080304090900101002041100120513141100151516161100151516011104909999999992999919090991999991099091190999999091999939999990 -080601090400101112131404101515161404101515161400170218181400171705190300099090930999100091999909090999999999990199999199999919990929 -080804030904100811120900100513020904101415161600171718161600170106191900999209909999091999019990190991999010999199999099993090999999 -080809010600041009111200131409111100131509161600030402161604171717180500909999993090990990999990099999199009999999999019029109999909 -060808080800030902100100111112101000041312121400041315161400171304051400099999119992993999199990999999109009999990999099909009909999 -080808090300101011121300041004050200141515161600011515161604171717170600999299091999901999091999909009919099999999993919099090999999 -080909010400050409101100121212131400031502131400161517131400160604131400099990093099901999991999019999999911992999991909990099999999 -040808090900101003090900040211111200131404110600151616171700051601171700999990129999999991990999909019999199091900991909999399909999 -080809090600080809051000041112131404021515151404160317171400181817011400999999999099999990000999090009099199001991999999912939999999 -080309060500081011121204131010121204021415161600171717171800191919010400290999909099909019999999990109099119999910999990999030999999 -030809041000080809111100020409111100121309140100151515141400061616050400299099999099999919999990999199099111399999999909909000999999 -080903010600100511111200021314141504160414141500161717171500160418181500129991993090990919919911900099999909999909999999999999909909 -080509091004081111121001131111021014130415151006130315041616041718191616999009099990911399999909190909190999999999099290999999900009 -080104090910081111090910081112131410081516130610171816020503041816192021999999309990909099999991190909909909990991999090909919299911 -030608080804090909021010051111121013141516171713141404171713041819200113909992990909919990919909990999199900909099999909999903900099 -040809090104100809091111100812131111061413131505031617181920212121022020099999999309991999019900999999909099909001099099029919999199 -030405080804091011080812091314141412040215151515161718191901041818191906990992099909009999990919999919900919990999190099309999999090 -050809090909060804100411120802130314151616131314171717171814040119181804009999999909990909009099199001929199991999999999903099999090 -080409041002080811111112131414030515131414161617131818161601191918202106909019909119999909929199990999991990919999990999309909999000 -080904041010110905121010111313141503111316151517111816191919040116200206009090999999909999900909099999992999999090919199903991999110 -080903101111050906121302040914151515160914170404161818192020161818012020092990991909091199999100099999199999099901900990999939999999 -080409090104021010111111121010131415120416131317120518061919032020202019099990909301919919999099990999900900999909909009929990999999 -080501090603081010091112081010130414081516170214040416161814191919191818999999039029919099919199990900199099119099999990909099999999 -080805010409080810111209131313131212021414151516171706151518171903042004999909903999099099019999909991099199901999909909991990092909 -080802090909080810050603011112131304141112131315161104170418041117170418911999999929099991000939999999990090900900009999909999999990 -040804091003110802091012110813040512110814151512041617151512181818010406099129909999919999199999999991009001999909999099000930099999 -080805090300101011121304011011140200151611171700151811061704151920202004990999090299991099919939919919919911999099990909099999900990 -080601040900101111111104121313141400121513141400161502170300051504171800099090939090999091999999099909999099990919999919909092999919 -060808080800010910101104121305111100141516161604171515180400021919190300099999099993099091999910999109909909901990999990919999919929 -080109090500081009111204081314140400151514140600161616021704031819171700999099399999900091090901999999999999999019099919099919921199 -080910011104061213131104051413131500141402161500171718191500171704190300009900903999190091999909909999999911999901999099999099999929 -080804010400090910111100090912121100131404020500131515151500130316061700909999093099919999199990999009109909999991999999999190992909 -080809021004080811121000011313041004141513160300171515061800051919191800991109919999109991909939990909929090990990999999909099999909 -030808090500060808101104120402131100121415161600121417160100181818180400299099990999999009109990999991009999999919999993900119999909 -050401080900101011110900101012110900040212131400031516161600151506041700999090030999099999999999199999099019099199099999929990990909 -080909030400080909051000080204111200131411111500011616171704061616181800992999999099909991990990999019909019099919993909099999909099 -080803090400080810111204131310140500151510020600161617181804160119181800992999991099900090919990909999199999099091999199093199999199 -060508090300101112090400111102091300041415151300011415161300041417171300909290909999990909099999199901999099999999993990999109901999 -040108080900101108080900051112040900041113141400151102141400151506031600999090399990999999009901999991999099999919999919990991990929 -080804090900100611090500121313141400011313021500161616161500041704031500999990909999900900099909099999999399199191999999900999990929 -080509010600101009111100101009121200130402041200141516161700041516160300099990993099999999991990199091999990990019990991909992999999 -040809100300110809121200111109121204011305020400141415161700061418181800999290991999099999999990990909199309999191099110999999900999 -030809100600110812121200131314140400040214140400151617170100161617170500900092999990999919099999909919999999090109990993999999991909 -050108090400100808060400111112121300111112121400151516021400031716041400990090399990999999100990909999999999999091999910999999921909 -050308080900101008080900111012020900111313041404061315161404171819011400929990999999999999919990019999919090909909999901009039900999 -080309101000080511110400080211111200131313121204141404150100141617180600929999910990990999999901999919999991909991999903990909990009 -030608090900101008090900051108120100040213121200041414150400161414171700999992099999999991909909139911999099999110999990909999909099 -060408090400101112090100131111090500020414151500160314171700161614171700900090999990113999999919909190099099991990999999992999999999 -060501080800090909090804100211121300100411140300151511161700151518180400999990039999990019999911119999029909990990999990999990990999 -080808080300060909101100121212120400041313020400011413151600051414171600999999990299991909010999999999199099999991093919999199909009 -050808090400100811120100101313141400021313141400151617181804151903061804990090999999003999919909199999999199991999990009099999912900 -050408060300091011111100121202131400121515141404161617181804161601181800990990009290999990199999199909199999909091999019099399999999 -040108090400100808111100121314140500060214151500161603151500171717170400990090390991999919090919999019999990999199999999991290999999 -080409090600081009091100080204031200081314141200151514141200150104160500909999999099190991929990999919999919990999999190993909999009 -080905100300111104101200041102101300011415040600141415161600171715161600009990999299999909091990119991999399999990099109990999999999 -080806090300101010111200131314141500011314021500041605171504181818181504990999090299990990991999999999199319199099990909090909999990 -080504010900080810110900121212130900140604151500141616021500031616041700999999003999001999909999099999919999999001990919999990929909 -040506010800090909100800111111120800021314040800150316041700151516171700999990003999910991999999099910099199991909999909992999999099 -080909010400080909101000081112101000130512141500160306021500041717181504999999993099909990999909099099919099190991999999902019999190 -080804090300081010111104120602111100131313131400151616161400040105171400909299991999999009099999199001999999991999991999903909999009 -040801090400100808091100120513131100020413131100140315161100141515040600999990939091909919099990909199999909991999999990992900919999 -040108080800090910101100090910040500121213021400151206161400040317171700999990309999990999990991999991099901999901990990909919992999 -080803090900080806090400020404101100121313101000121313141500051617011500929999999999099919900909999190909190999999099919999039900999 -080109090900081011120400081306121400081515150500160402170300161617170400999999300990090991999990909919909999990019999992999199999909 -080801090600081011121304051415161300171702161300171718161904032020161904999099030999010090919909199991999909999919999999099199929900 -080801060904050810110900121314141500020414140400161617171700031818181800999909930999109901090919909199999909091909999999991999929999 -060808090500100808091100011213141100151502141100161617141104031604140400999090999990900991109939999991999919999109999999099099929909 -040802090900100811031200101311110500101313140100101516160600040416160400991990919190992999999999909991999991399990990090900999999909 -030808050900101008041100101002121300141414121504161617171700160601180400299099999099990999190990199999909999909001099999999309909909 -080904050610111213131310031212041410150416171410151502181419202020200119009900990990999999099999909290999991909011999191099903999999 -040408080803091002111212091313111212090513111415161617111819161617010604999920019990919999999999999999990999000009099009099930099999 -080809090909010810061111121314051111151614021704180414192020212114191903999999900903099991999901999009099991190090109999909999299999 -080909011004110909121013111415121216111715061802110515041819202015031804099990993909901199099109999909091999919099909990909999099929 -080901041003110912121314050912121502161617181920160417171920212121211906099920930199099109999199911999090909999090999990999999099909 -080809090905081011121212011011131415161011170406181011171903040402191904999909090999909999999939900999000019990999999909209199990190 -080809091010010809091010111111120613141415161713180502041904042020202003999999999993190999109099999901009999090919090909009199999992 -060108080409101108081212131314141414131515031617021515051617181920211604999900399901090919999990999999999992991999991999009909900000 -080910101111080905101111081213141401150216141417181803060419180404202020909999999999999999000900093999999111901999909299999900009099 -040308090605100411120413101411021515141411161504171718181818171701191919921090991909099999910009199999999919099190909199999309999999 -080801040910080811041010121311141515040611161515031702160405171718181819999009939999009999990900009099999901999999999119929090099990 -080910100105111210101314041215151314161602171314160404181814031920181806009990999309090009999999919991999910999900999999920999090099 -080809030410081109121213141109051202141515161616141515171819142004010406999909992909999909999099091900991999999991999900090030009999 -080909011011080909101011021212131411151205041411150616171418150304192021099909993999919999109919909199099999999909900900999999029000 -040808091006111111091205130314151204131602171218131919201221131919012121999900909099990009999992199999190911909199999910999930909999 -080809101105080812121203041313141415161313170418011919170220061921212121900009999999999990009299999099991099999099013991199119909999 -040809090904041010101001111112131415161702061415051818191915031818190415099909099090999390991999110901099099990919099999999999929990 -080808060403090910111213141410151613141410150213011718151913041818152005999999900029909909990999909999999999919009193111999999909900 -080309101105081212060213081212141413151516171813150419202013212121210104921199999109990199999909999990909900099909099099199903099999 -030808040909100808110912100513141512100213131612171818181912170620040104999092999999909999900990900999999119199990190999099003090999 -080910061111030502121104011313131314151504161614151504171814191919192020110992919999019999910039990909999909999999099900909909999909 -040803091010061111121010130514140215161717181818041717192020212121210120092199099999900909991990901099991099990990199909999903999999 -080808080106091004111111041212131313041214141505161617181919161603200219999999090300909909991999999990010099999099199919999211999919 -080804091004111212061313111212141313110515161704181802191701180319191704990009099090999999909999999990009090009999999191399199929990 -080809090909030810100411121213051415161702041801161919202121161919062121909999990909999929990091090991909099039019199911999999999099 -080809030610080811110210120413141410151613171410041813191901202005191904992999919099991909991909990099999099199091999009300999999090 -060804090910111212091010131314141503131314140204011616161604171718192005909990099999999900901299999999919999109091993999090099999000 -080909090110080804111110041213111110141515040410041515031602171706181805999999900399999190999900099990009099990999919999190021099999 -060809100111121313141511161613171511161818171519041818020520032121212104000999990390991009919999999990999999909991900900999919029999 -040108080809101111121209101314121215101316021718101303191720061304041705999990390990909091999991990991990991199999909921999999000909 -080808080109040404101009021112121309141412151309141416051704060318041717999990900399999090991911919199999999099900009999902099999099 -080805010910080811110910121213110410121214151610171819200204061919202103999909903999090999999990009999199990199009190991009999999912 -080801091004080811121313021414151313161718151519160520212119160304210619999009930999100910909999999109990909999909999009999099929909 -080901040510080909111210081306141510081313021610171717181904202020182103099909930999911990091999910999199999190999199909099091999992 -080808080904101002041101120613131313030414141515051617141515181817171904999009999099190319191990999290999909999909990090990999999900 -080105090904081010090904081010111212080413021414151515161406041717171703990909399999909099990909199990199099099901999999099919909992 -080304010910081112090910081314151610021714151810191914042006190521212121299999903999119091099999009119909199999999099009090099999999 -030104080909101111081213101111080504100214151617181915151717200621212121990092399909900999990099999919999100009099990999909099909999 -080209100111120510101111131414141504030616171804191916172020191904172020111991999399091919090999990299099900009999999099999999990909 -020808090106100808091112130514141512160314141512041718041512171719191504191991999309991010909999990199999299990909999090999999999900 -050808040904031002111213101014111501161614111718161614171704191919192006099099909009119029090999993999919909109999909999999990999900 -030808040909040808100909050402101004111111121314151616161604151506011717299099999990990999199990199099010990909999109999990030999999 -030809090909080810041112060402131112050414141112151617171818192017011818299999999909190909199990119999999999100091099099900939909999 -040801060909101010100911121204021311141516170411141518171711141519050304099999030909991990091999919009109909999909999999999092099099 -030809101104011213021114151513131114151516161616051718181920212121180604211909991993919991999991909999990909990009009999990990099999 -080403090410111212090410131202090610140515091616171718192020171718012020099900929999999009999991999091900991190099199901999939990999 -080904011010110909121010110513141414110413021516111713181806041719041803009990993999910999199909099999909901909991900999999999900092 -030808080809041010020409111010121209131314041509061316151505171816011904299999991999999009919999999090919990909909999009000930909990 -040108050909100808110909101213140406101516021717101516181717191919040403999090399990900991999991199999100009199999999909909900299999 -080910061111080912131101080904141505081616171515031616181920212121020420009099909999901399919999009999190990999991909990929910999199 -050809091010061109091010021104121314151112121604151117171819150301041919009999999990999999900919990190900999099909999190999390929909 -080808080109051004111209130614151509131604150217131618192017130403202017999999090390991099019990099999910090999990199009990999999299 -080806091004080811111103120413131414151616161405171718190220171701212020990009990999999909909299999009099999990909109019999311999919 -080106040504080809091011121309091415121617021403121618191920121618191904999999300009090901999099990919999911099991929999199999990990 -080109050310080811111210131304110210141516171718141919171720141919210604990929309999199190991999919900999099909909900909999999099009 -080805040409080810101010111202131415161718141415191717200315190106202115909909990909999909909911099191999991991999291909993099999900 -060809090410040509091110120313111110141413151610040204161601171717171804009909999999090909999929999199099990000199999999391091999910 -080404090909101112131305011415151616171415151616171406031818171402192004099990900990099999009039999999999009099999999092999991991110 -040809061011121209031002131209141415131609141405130417171801191917172004900910099919992999999199991999990009999909199099399990990900 -080808080104090910101010090911110512131404021515160404171818191919061803999999090309999999190099999009190909990991999901900909299999 -080304091004080802111106051212111113141414141515161604171515181818180104299009900999119999999099999009910999099999999900990903099999 -030804090910050808041110061202040410131414141415131316161616171717040118290999999090990090199909090991990999999999109999909003099999 -080802091011041213131403151613131414171604180519011620201919061621212121911119199929999901999990999099990099099900993090999099909999 -060809091004031105121010131414141404151617171818150217171818151904012020099999090909990920090099999199099919099199991999990930990999 -060804090900030810110500040812111300141402111300151416161300041716011300099999900992990999099901999991999991199999990991900939990999 -060804090904051011120300131414021504131414151500161617181800161619011800099909000990999990002999190999199099999919999919999039990999 -080801090500080809090400101011121200041302121200141516161700031506160400999099939999090990199999199909999091999919091199929990990999 -030802090400080810091100121205091304141414091500161617171704161618010600919992919099919990990999090999909999999091099999099030990999 -030809090600101112021300041412151500161612151504011717181804051917181800219999991090919900990990999999999999909019093909090999909999 -080809041000080511111000040212110100131414150600131414151600130403151700909999900999090999199901939919099999999999090999990290999909 -040808010400060809090900051010111200131310141200131304151600031717170200099999903090999999910909999999199900999901999991999991929919 -080808080400060305020900101011090900100411041200131411151600131411010400999090291999999999019990999999919909999990190901999930990999 -050809031000111111101000061213021404151613171800151913202004191901202004009299909999999999019909910909919991199099990009099399999990 -080805010400080809090900101011121304141015120200141617041800140603181800999999903099099990199999110990919099999900199099990999999299 -080804010500090810111100020612111100131304141400131315161600040315160400999999903091119919099990999199099990999999099909902990999999 -080808060900031011110900041004111200131002121200141414141500041601050400999099909992999999990999999090099011999999199991990300909999 -020808010400090808101000110612101300111114151300031616171700041616050400199991993099919919990990099990999990992090999999999900909999 -050806030900100802090904110812121300040812121300141516171700040118181700909290999999119009999909999999999999090100990099903099999999 -050806091000010804111000040812120400130812120400140215151500141616160300009099990993999999009900909999999199091999991199990992999999 -080804050300090810111200091310141200091306021200011315161200041515170400909999990299099999909990909999999099199901993999991919909109 -080801040600080809101100121212101300141404101300021504101600151517030500999999930099100991999999999199999909091999999900919990991299 -080409100400111109101000021212120300131314150500131316171700060401171700099990999099099909909919929199999990099900999199900399999999 -080409031000111209041000131209051000141209150200161215151700160104061700099290999999909909999999999099019909190999990190993009999999 -080910110600081203111300080214111300051514161304170414161300171714010400919999129099999991999901999999099009909099999910999930990999 -040108091000111111121004041313060500141313151500161702150300171718181800990990300999990091990909999999099099990919990909999192999999 -080801090900101112090904051313020600141513161600171518161600171704040300999999039990199001909999109909199099990909999999999002999999 -080803090900080804090900041006110200041011111200131014121200050115151600992999999999909990991900919999909099999919990199903990999909 -080809090500101010091100011204131304141414140200151506041600151503171800999999009099999990990939990910099999199090199099999991999219 -080403091000081109091000081202051300081415131304161616161700181804010600992999099999999990100991999919999919900910999990990030999999 -040104040400080809090200081011091200131014141200131014141200051004060300999990300099991991991991199090999999999999999999999002909999 -080804010500080809101000061111121000131302141400131315141600031717040400999999903099009999909999099099919901999919999990999100929999 -080904101000040911100100040912131400150216131700151516131700060316130500099990909999903999019900909999909111999999999999902990999999 -060809090400011009090400111112130200110412131400151512131400151505031600099099099993999991900991119909919999990999999999999991990929 -080909100300081109121200080602041300081415131300161717171700050401181804991299999990999990190999909991999091999091990999900390999990 -080809101000051109101000121309140400120315150100021615151704041806171700900999999990999990999910009929999999391999991190000999990999 -060809091000080809091000110212121200110404131400110515151600031715010400099999999999099999900911999999199090099991099999920930990999 -080804090300100409090600101002111100121204111100131415150500040115151600909290999999090999199991999199999909999190990099903990999909 -080809100600040809101100120213141500121613171500121813191504030513011504999999999099099909000919999919099911999991999090020939999990 -050108090200101008041100121008131300121204131300041414150300061414161600991190399199109999991909999990999999990090299999999909909999 -080809041004110509101000121309140100021313151600171704181600171703061600999000999999999900909999939090199191091990999909999909992999 -030808090600101108121300141115151304040215150500161617180100161617170400999092990999999919009919900919999999090190999193999919999909 -040804010900101011110900101011111200021314141504161614051500031606171500099999003999190999999999909199009199909199999990929999999009 -080809020400031006111100121314110500121313151500121616151500041616010400911099191992999999099999009999199990999999990909999930909999 -080804010900080810090900111210130500111204131400111203040200110615161700909999993999099900919999009999999990199999199990999291909119 -030802040904101112120900060512120904131314150900131614171700181814011700919902110991999990999999900099199909999991999009990939999999 -080909090300080204040400101112131400101105151500101616151500100116170600999299199991099919900990009999999909999099991999993909999009 -080901101100080912121304140912120200140615151600140417051800141717031904999199931190099099991909999990919099999909190909999991999920 -080808030900021010100900110412040900111112130900141513130400160601170500999990992991999919999999999909099990099199090199909309909909 -060108090900101011040900101012120300131412121500160502171504041818171700990990309999999999009991999909929099990919999011009099999999 -050401080400090909101000060411101000121311110200120414141500120403151500999990030099919909099999999909919009999999199091999299909999 -080806090900080810100900110312121200131304140200131315151500040105160400990999990999999909909992999099199909199999199199903009999909 -030808090600100808110400021212121200131304140500131314141504161616011500290099990991990919999919999900199999099999999990009939999999 -080809091000080304091004111213141500060205161500171818191504171818011500999099999992999019090919099919099990990190990910099939999999 -030508010900101108120900111108120900130208140600151504161600041704161600909992993991999999999999109919099019090900999999990999900999 -040105080900101010101100121213130200041213141400151604141400151606030400990090399099991999091990999999919999990099990099999920990999 -080801090900080810110904121212131404150416170200151518170600191905170300999999930999009099199999110090919909199909099999909099999929 -040809011000110809091004120813131000040313131400151616170600151616020500009999993990990009919999999099999999099291099999999919909109 -020808090600101008110100101003121300141515161300140515171704140418171704191091991999993999909992909099099990999099099999099099990990 -030408090904100808090900101011121200050213130400141513130100161616160600999902099999909999099999999910009999990199990993991919999909 -050804010400090910111200061010111200130204111200141515161600170315161600099999003099019999999909909919999190991099099999919999929999 -080403091000080804111000121213130200061213131404011516161700181816160500992199099999909990901999999099919909909909193191990999999909 -060108080500090908081000111202101000131313141500161617040300160418181804999090399999099919999911199099199999199099299009999099990990 -080909100600080909100100080211110400121314111504161317040500031317171800991099999990993991099999999910909199001900999999929990999909 -040806090300101011121200101011130200141411150500011611171804191919181804909290091999999999991990919999199909099991993119099099999090 -040508080800090910101000090911120600131314021500131316161700040104031700999990090999999999909999099090909911199909199999903099999929 -080809090900080810100600011112131404151616130200041716131804051903181800909999999099099990999931110909919099990099199999090999909299 -060808090400101112090904100213031400101516161400011716161400181819051404999090099999109091199919299999999109999199993990990099999090 -060809101000011111101000121111021300141415041604141718181600051718040300011999199993999999919909919090919990909009999999909992999099 -080409050110081109121310111104141510160406021710161819192020160319192020090999999390000199990999009099999099119901099199992999999999 -030809090205101011111213101011111213141404151206161417181201040404191919219109999199999999999999990099099990909990990009300000999999 -080808040909031002111209041013041214061015151201161715181205191920202020999092919999911999999009090990999999030090990099999909090999 -060408080909101108120909100213121204141516161616141717181920031717010504999990090990999999990901990911909199999991099909029930099999 -080901101104081212101302081212041414080415161717060518191917202020201903099199039109919199999199099900991990999900999999900099299999 -080909090910081104120405131313121203141415161717141418021717060104191919099909999009099900999999999099092911999991999091903009999999 -080909090904080810110100121202131300121214151304031614171800051914061804999909911999093999109991999999999900902090099999990909909990 -060408090900101108120904130508141400151602141400041617171800031617011800999990099990900009999990999090999011990999199991999939929999 -030808080800091011020400040411111200131314151500161616151500050117170600299999991990099909910999909909199901999919999999903090999999 -050604010800090909080800100211111200131314141200151314141200031604041200999990003999919919909919909919099999999999991999920999990909 -080808080900011010090900111112130200141415051600141417181804061904031804999999099993919990019999919990919909099999199099090029909990 -080809041004080809041100121209031300120509141400011516021700061616181700999009999099009990990999299999909991999091993919991999909009 -040809101000110803101000110212041300141414141500161617151500160106040500019999929999999991990991099091909999999199999009993000999999 -030809100400111109120500111109120400060213120100141415120400041515161600290099199999990999999999009919999091399119999190999909909999 -080503090400101111120400021106121300141515121300161617181304161601181800099090920990990999999919999190999999991900999109099390999999 -020808080300090909090400100506111200131414111500161414171700160104041700199291999999999910990999999190909990091990991999993009999999 -040809091004051109101000011213131300141516171704141806171700021919190300099909099990999990009939999910999100909099999099919999919929 -040809010400041009091100121212120600021313131300141415151600031705161600009999093090990999919999909999199199991990999999991909929099 -080801090904101111111100121313130600140502151500160417151500161603180400999909030990999901999999909091999909990919999019999919999209 -080808080904011010050900111012131400111212150400111602150300110617181904999009909993990999999999009919909090999199999199999192990110 -080509100300081104101000081112040200081113131400151116161600040106171700900299999999999999091990099999919999190919990199903090999999 -080808010400090909091000111112061300111112120400050214151500041614170300999990993099990991000999999999909999990190999199990999909129 -080306010400090410101000111212131300021212041400150516161400151516041400299991903099999910109999999199099199990909999990990999999099 -040805090400100809090400111212121300040602141300041515141300031515011300990090999999090909099909909091199999999019990999999939929999 -080801060900080810100904111210101304111214150200111216151700041203150500999999930999091009991990990999919991199919099999909290999999 -080109051004081109101000081209131404080215161400171718192004171706032000999909390991009999909919900919999911999091999090099029999999 -080910100400080910100100040905111200021313131400150316061700151516160400909099999990993909919990909999109199991900099999992990999999 -080909031000080411051200081311021400151311161600151511161600040601040400999299909199099999901999919099199999999099999019900300999999 -080903101100050910101104121202041100121213141100151616170600151601180400092990999999099099199999999991099919099190090909999309999909 -080903010400081011121300021111141500161616141704181806141704181819140500929999193091910919909919909999909990909909999999099990990099 -080104090400080810111200051310101200141414021200031515151200041616040600990099390999100990999909999999199991992990999999990900909999 -030808080800090910020500090910110600121310141504120416171704181616011700299999991999990999919999999909109909109009199909009939909999 -080805060900080810110900121212030904131402151600131317181804041919011800909999990999909990099999920909919911199199999119000939999999 -080808080600010910100500111210021304041415151300160315151700161818180400999099119993990999999900100099199919999299999990999090909999 -080106090900081011111100121213140400121202140300151617140500041818181804999999300991099919999999109991999919299099990090909099999990 -080801050900030810111200040213130600141413131504141616171700181818180400999092939099910991919901909999999909009099099999990990999999 -030809040400050809021000110806121000111304141000111515161600111515011600299999990090111999999999099999099909999090190909999939999999 -080403090900101111090904101212040200101212131300101415131600061701051600092990999990999099991999909999919099999909999010990309909999 -080803090900100206090900041111111100041213130400141212131500140105160400929991999991909901909999999991999019999999090990993009999909 -080809011004080809091004111111061200130204141400151616141400170316180500999909993999090099100999999919909190991999999999919909929009 -080808040500090910111200011313021404061313151400161617151400161618040300999999900099090999009939110999099099999099999099999092999099 -040808080800091006110100090412121300141414021504161718181500050318181500099999090990903999919990919990919999109991990099909999992999 -080409100500080811100100121302100600120414100400120414151500120314151500991099019999093909199990909901999999099999990909999999992999 -030809101000040804101000050811121200130206140400131315161600171701161600290999909990999999909990999010099199099990999109990399999999 -080109100400081111111100041213141400041215061400161602171700160305171700990099309990999990199909099991999090999919099199999999929099 -080808050400030602091000111213141504110413131500161617181500161617011500999992010099999999100900990999099909999991999900999939990999 -080808080309041011120509131014151509161014141702161018180604160118192021999929099999900909099999999099091919119909990990993999099000 -040808090403100508111111121213021404121515161417181515061404180119191919990090999929999900019990999999190091900999999909993090099999 -080109090410080809090210111111111213141504051606141704031616141818181904999999399099191009991099999099010009999099999092990990999990 -080808010905041010111212131014021212041414041516171718031916062020202016999909903099901909999909119999009999900019099929999990909999 -060809090909101112121301140412121515160502171717181819202003212121202004909990099090991309999990909091999091990990929909999099999990 -040108080808090910041105090912121314151616120214171616061819171720200321999990300099199099199999910009919999990999199909199999190992 -030804090906080810090905021112041313141414141313151616170404151601181818299909909999999919090011909991999999090919999900999309099999 -080803040909101010100904020411121314151515121304051616121317061601121819999999020999990919999090990190999990999199900990999399009900 -080910101010040511111213061414141413031516161713151516161819042002210119009990999909090999990909999999909999102999109999901913991199 -040803091006041104121013141515160213141515171713181818171713191919040105092999091900909990910999919999919990990999999909099003099999 -080803090909100811111202100513141504101617171819101617172006041621012020992999999910999199091990019999190999909999090990099039900999 -080409090110081109091210080413141510040516171710181616171702180603191920909999999390090199909909090090909999999099910999999999109291 -080106090909081010101011121302141404121313141403121516161604120517181904999999300990999001999099199991999999929999990099090099999000 -040108080904101111121313141111040413140515161616140217171703141818181806999000309990900999900919999999999990999009991199299999909990 -040108080808090909091010041112041010111113021414151616171805151504061903999990309999990900109999999991909991990091999991099091999902 -060805091010021111091010121311091404151316171717181319202121031301202004909990099991900919990990999191900999991919999909929390999990 -020809101105121313131301141415151515141416171704031816171919202016060404111901991099999319909999999999090999992099099909990900099999 -080808020909031010110909011010121304141412121506051604041517161618191520991092991999919999999939900909999909999099900099999909090000 -080808080105060910111112130914141115130914140416130403170218131919202004999999909300909099919900990999990999099091909991999291099199 -080808080910041112090910041312141510161602151517161618192017030621010517999099999990099990900909099999990911999909199991029030990999 -040809030510110812131310140212131310151617171810041617171904041606011919992990919090999909999991999019099099000999909190999939900999 -040809090305100811091213100814150216100817171804101919202020060119212121999990999209099199009109091999919999909909190919903999999099 -040108080805091011111111121204131304040204131314031515161414171518181806999900309991099919099999990919999009999190999909929090019999 -080808080906101010101112131313141111151502161717150405161801030419162004999099999009999999909099909990099911099099999999329091990010 -030405080809101112080809101312140409101504161609021515161617061819200117999992009999099099999990909909099909901999991919099903900099 -080404010905081011120913081415161616080217181806191917041820191917032020999999003909010099199001999919090919999099999909099999999299 -060208080803090910101111121310101111011314041515161317171815190405172004919920199999999919999910909999099309999909090999909090009909 -080804090910081104090910121313131303141506160517181920202117180120200217990999999999099000909999999009992090990990090190993999999911 -080809090510081109090610121212131410011516160410171702180319172020200421999099099999990990009999900911999399909919909092999119099990 -080910101106080902120313081414150413081414160513171718181913170118202104999009911999092999199999909999099999090190999099093900999900 -050808080804010910101112131410151516041404170316041818191916061802191916099999099003099091909909990090999999299191990999999199909199 -080309100404081111121314081115021304081515161317181818181917202006010517929099910909919099919999190999999091909991099990909030999999 -040809101112051309101112141409101112061415101101161718192020030402212120009999099990999999999999090999999909930900191190920191999199 -080809041010040811111010121314111503121617050618121619022020120121212020990999909990999990990909009990002919999919910911993099999999 -060808091004110808091201131302091415131316161715180416171719050320212121999100999190909399990990190991909999990999909099909199092999 -050808040409100808110412131304141412131315140316171818181816170106190216999900990900999909900999990990999990920909990999993019999911 -060508080904101108081213141415031213141416171213011804021219181820202119999900099090999990099999299991999991999091903900999919991900 -080903100106080211101213081415101617141418181604191918182004192121212105129999999301119999991090010999090999999999099099099990999990 -060809040110111213131410151515131410161616161410171818021920030521191904909990000390999999999999000999999999199991001919929099090999 -080803091010080805090911120413140211151617171717181819202101181804062121992999999099909909991990091099091099999090199009399999990909 -080804090110040811111110121212121310140415040410140502161718140316161706990999990399099009991999919091009909999919900919099999092999 -040108040910111112130910141115161710141815021719142015212106140515212103990990309999990909009991990909090991099091909999990999999992 -030804091010080811091210020411091213141511161606141711161618140501040404290099999999999919999099009109990999999099991109090300099999 -080909100300080609101100121304100200141516171800151519191804050119191804099999999299901990999909919090919990990990999191003999999990 -080901101000080911101000080406121300021404151300161717181300161603051304999999939991109999900999099109999090091990991999999209999990 -080909091000110204051000031212121000131313131004140415151600141415010600199991199999999921009999999999199999909991099090999930990999 -080404010500080409101100080909120600131402151500131416151500131616170300099999903099010999999909199999109901999919990999999999999129 -080305090900080810090904110206121304111114151600171717151800191919010400299999909999099091909999000919909911999999099900999030999999 -080808090900101104090900121113021400151513141400151516171804060105040300999990999999999909009999199009199919999999199009003002999999 -080808090900101010090904031102121204131415160600171818191904050118191900999999909999909099909991990211099191999991090919003999999999 -030809090400060410021100121213041100121415151100161715151100161717010500219999919099011909999990099990999909999099990991999930999999 -030808090500100808091100101002121200131313141204151617140100040618140400990992999099990999990991999991999999009919990093900199999109 -030808010900100808090900111205131400060215151600171715151600181804041604999992993999909919910919099919109019999099999999990009999990 -080903040600080909101100081202101300081415101600141415171700040501171704999999920099999991990991199999909009999991099919900399999990 -030808090400100208090904101112051304141112151600171112151800061101151900299999999099199091990999090099909999990999090109909390999909 -080905101004080911121000130914121504160902121500171819192004060119190300999909909999099909990991990091999099099110990991003992999999 -080805090904101003090900111012061300141415160200141718191900041701191904990909099999929999991900099099919911199199999109909399999990 -080808010400090909101104021213131404151213130600161617181900160317170500999999903099910091990919900199909999991990999900999990929999 -040804050900101002110900101012120900030412120900131414140100131315160600009999090999199999109999999299999909099919999993999009990909 -080109090400081009111200081314141204081313151200050204061200161617180300999099399990100999199991990999999990990190999099991999991129 -080409091000080402110300081212110500080412111300141515151500141606010400099199919299999990199909999909909999099919099999990030909999 -080309090900080410110500080212111300081415160600171715161600170115040400929999919999909990190911909999999009991999099909993900999999 -080403091000081109091000081112130200081212131400151604130600040105130400999999029999991999991909919999999991090199090099903999999009 -060804090900030805090900100811111200101314140400100214140100041504161600009999999999099929909990909999009919999199991993990909909099 -080809100500111209131304021409130300151516160100151716160400061819191904990090999990999090999911129199999919399099999990990999900990 -080409031000080909111000080204111000121212120400041314151600131306010500992999099999999991999990909019099999999091099900909030999999 -080808030900011005111200131314021500131314161500061714161600171704040400999299009193991991919999109999999910990099999999999000999999 -080808010900101010100904020604110500121314151500121617181800120304181800999999903999990010900999099199099190999109099999992099999999 -030801090904080810091104041202131100141415161700141418180500191918180600999902939999911091999901119909099990099909099999990999999909 -080909010600080209101100081212100500081212131300030414131304041515151600999999993091190999190999199999099999992999999009099990909909 -040408090900100608090900111111121200040513120100141414140300040215151500900990999999099909909999099099999901399919999999991992901999 -030808090500101011021204131014151604131718151904131720151900131701150600291999991099919099190999900901999909009919990909999399999909 -080801040900080810110904121212120900130414150200131414061600051703181800999999930999011099909999999000919999099990199999990991909299 -080409091000080509091000111104121000111313021400041315041400061601031400909999999999099909909999909990099091190999999109990399909929 -060308080900101008080900111112020904041314151604171718150500171701151900929990999999999990919990010099919909109009999919999390999909 -080803090200041009091104121314141400151316161600171318181904061318010500999199029199099009991999999099919999990991990090099930909999 -050809031000020811041000121314141000151314161004171318181904170118180600912990999991909919099999999199999999001900091099093990999999 -030808090400101112121200101111131300101406130400021515161700041515010500999092090999999999909909999999999009991990091910999930909999 -080401090400101010101100061212111100131212140500131504140200040316161600099090930999999999199909199999199999999099090901909991992999 -030808010600090808101100121313101100140204101100151616171100040516170400999992993099910919199999999119999109990099999990909990990999 -040808030900100808110900120211110900041313140900051313151500161606010400999990992990999990999901999019999990099999990919990030999999 -050104080800091010100400111111111200131306031400131315141400040215160400999990300990999991990999999919909909999992999919901909991909 -080902100300080910101100060912131400010912151404161712181404161912040500019299919999990999090909099999099399909990999099090900909999 -040808010900060808100900111212121200130314021500161617171504180504171500099999993990901999991909999099199929090911999999009099909999 -080909090904081010111200081013131404030513131400150616171704181902011700999909990999990999990900900999999909992911999099019139911999 -040809030400100811120200100806131300100804051400151516171700151516011700092999919099911999991990999999919099099009199009999939999999 -080904101104080909120300081313021400081313151604171717150500060118181800990109991290999999919999109999909990900919099999903099999999 -040808090400010808091000111111091000121213021000121214151000040504030600099999999093999991999999199099199990199909999991900020999999 -060108080804091011111100121213131404121213130400151617181800031602051800999900390990199990199999900999909999999919991909929199991909 -080409101000080609111200080209111204081314051200151616171200031616010400099999999099090999999919990910999999091109999910929930999999 -030808090900101112060900101302141400101515141400101617180500040401181804290999199999909991099991199999999990999991990019900390999990 -040803090900100811110904120811110200131414051500161414151504170601181800992990999999999009991900999099919999090999990919009390909999 -080903010500101010111204021313141204151613141200171718141904171718140600129991993099990019919919190909999099990999999090099990999999 -080609100300080511101200081302101204081415161204141417161800190401181800909299909999999990099999190901999019009999999100909399909999 -030808090900100808041100121202131404121515161604171717171600061819010500999992999091999999100999100999199090909999999991999030900999 -080109090904081011121204081013061200081014150400051617181800161602190300999909309990009099099999099999999990099109999199909112999199 -080804090904080802091001111111041012130414141015160314171704051818181806990909999199019399199999900091990909990990909299909990999990 -040504080909101010111109121313111103141313061515161718021904160120202020990990090099999909999999099099092999990099190191093119999999 -080306040910081111121314080205131315081616171715041604171715181818180104299009909909909999909019099919099991909999990909999903099999 -040809090410111109091213111114141215051617021215161618181215040304180106009909999909099999099099919099199911999999999990002093099999 -040808010909050808101111031213140215161617171717161618181919060404181904099999993090991999099121111999990909999999909999900099099909 -040108090910111212090910111212130210111406131516171819041515171704052003990990309990999999999999119909910909900099999009999091999902 -050108091002111212121213141406041513141416171513181819202003180419202004991110319910999990999990999999099900990999029099999999990090 -030806010909100808111204101314141414100204041515161617171515161605171804909992993099909999910091999910990199099099999999999990099009 -080809090904081011111213061411111203011414051215161718181919200418180204909999999900990000999999999990992390999019910999909991009919 -080904011004081112121304081412121515161414061515051717171802191903181804909909093099091099991900999099999990990909919999190999099299 -080909101104080309101212080402100506080413131415161613131717161618190104999009299099999999199990199999100999090099909991999903090099 -080808080105090910111112091313111112141516171812041919061802041903201804999999900309099199999999099990999009090900919999199999009219 -080804091004080811121313030414141513160614141517161802191520160519190120990099999009000999999990909299990909909999991191099193990999 -080804090410011111111110120313141504121216161717180216161717191919200605999099000993999099199929900991009999999199990199909909099909 -080910100111040410101211131313141211060415161211171702181919170305181804009990099399990099099999919099199901999910999199999090929990 -050401080804091011080804121212131414151506160214151504161603171717171818999900039990019099019999919090919999199999999099209999999909 -080405090903081010090904081112021314081115161617181119160620180121212121099929909999999999019000900999199991909919900199093099999999 -080909011004080811101012131415161718131902201718131906211718131903050418999999903909009099991900010999199911999999999090999909992990 -050808090910110808091210030402041210131314151216041317171218061901202020999990999991909929199990999991090991999991900090990309009999 -080104091010081111111204081314041505080214141515061617041818191919031818999099300991990099999900090999999199099199090009991999999299 -040809090500011010091100041010061104121314021100151614170300181818171700099099099993900999909999990019999911990091990999990992999999 -080801090400080810111200061010131200051404021204151416171700150318171700999099930999011999999909919999199090909991990009999999992199 -080904101100080910100300081206021304141414141300151617181300150104051300009199999299999999919900990909199999090910999199993009999999 -030804090900100811090900100612130400100214150100161617151804161605151800999992909999099999000909099990999190399199999119099999999009 -080809090400030802101100041213141100041515151500161617171700161606010500999092990999199999109909999901009099999991999099999030999999 -080404090900101112090900011106021300141115151300161117151300160517040300099990909990009999999930919999199019990999999099999902990999 -080305091000081111121000080411021300081415151600171715151600170104040600990999290999999999900990109999199919990199999990993000999999 -080304091004081111121200080613121200021415151600171815150100170519191904290009999099999999099999999100909199090199999193990099999990 -080808010500040909090900101111111200040402041200061313141400041313150300999990903099999999991909919091099909999919990919999992909099 -080309101004080811050200120411131400121506161400121718191400121818011404921909999199999909901909099999099909199091990009999939999990 -080801090900101011121304101014150500040214161600031714161600171714060400999999030999100099900991999999099019999199999999929990999099 -030809090400100609021100101213131100141413131104141415160500170401181800219099991999999990919909999909999999009910999099909300909999 -080806090904100803090904101111021200101111131400011516171800041616170500990909999999929090991999919999199091099109093909999990909999 -040108080804091010111104061010120500131314150200131614171800161614190300999900309990909099999909109990199909199999199991999919990929 -030808080200091010101000091111110500040612121300141412121500040416010400299199999199999999919909999099109909099999099099909030990999 -080808090900021003091104121313051104121313141100151516171800151501060400999991929091999001999999900999999999099010999900999300999999 -080409101000080811121300011414141300151502161304151517170500030417170600990999009999900990099939999999199911909990999990920999999909 -040804010600030809090900100811121200101002121200041314150400161615150500009999993099999929991990199991999919999900990090990999999909 -030809090900080805101100021213100400121214100600151616161600151704010400209999999099999919090999999190999990091990991999990930990999 -080809091004081109031000120513131300141516021700011818191700041818061704999909999999092900091999999099109009999901993919999909909990 -080809090400050410091100021212131400151616130400151616130400150301130600909999999099090909090919909191909999999999999900999399929909 -040108090904101008111100101008110200061208131400151617051400041818031400990900399999119999999999919999019009999000990999909099999929 -080909100500080911111100120313131404150413161604171818161600021818010600990999990090999999990929990199909999901009999919919930919999 -080801090900081011090900061213141400051513141404021613171704181919031704999999939990109901009999999919999099909199091999019999919290 -080809091000080809091000011111111004121313140500040313021500061617181504999999999999099999099939900999199099090991999900992919901190 -030504080800090210080800090910100400041112121300141412121500041616010600990992099999199991909999999909109099099999099999990030909999 -040803050904101112121200020413131400151616131400171616181400171701180600929000199091999919909909999199999990091999991909999390999999 -060808010900100808090900101111111100100412021300100414151600041414030500099999993999919999199909999991999901199909190991909920999999 -080801090500080810111200131313131200021415041204161604171200161603170600999099930999000999199999999190999190909199999090999990992999 -040608091004110409090300121314021500161614151500161617171700181818010500900100999290999909919909999909199909999999199099999030999999 -080806040900101010100900011112120904131415120200160415171700180515170300999990900999999990999931900909999009190099199999909999909929 -050803090904061010021104121010131300141414151300161617180100161617190400092909099199911009999999999091099991999091999903999909999909 -080802090904101011030900121111131300141415131300141416050600040117180400991909019999992909999999999091999990999919099199903009999009 -040801090400041010110500121213141400121513141400060216171700031616171700099099030999909909190990999999999910990190999199999999929999 -040809101000040309101000110402120600111313141400111513141600111501050400019999299999999909109990199999109099999099999910999300999999 -030808050900100408020900101106120900041313131300141515161700141515010400299999990999911990999900919909199099999991990900999930999999 -060801090500080810111100121313111100021313141500161617141804031617040400999090930999909909199919999199909990991999099909099990929099 -080805091000030811121300040211140400151611140400151611171700150106171700990092990099909991990991999099999990999999090109993099999999 -080905100400080909110100081212121204081306141500160314141500161702041500990099990990903999919999990909199909099999992999999199911909 -080809101004080811100100120311131400150511161704180211191704182020200600909909909999913999909929909199909990901090991199099909999909 -040804090900041010090400111212121200061314140200151314161600050103161600090999099999909909090909999990999019199999190999903999999299 -040805090900100806090300100811111100121213130200121213140100040404150400009999999999902999919999999009919999199999999013900009999909 -080809050300100809111200101309141504101616041500011606170200041818181800999999990299999990901990090990999099999990193091991919909999 -040405080800091011121200061302120300141516161600141515171700140401171700999990000990999990092909199901999099999991999919990399999999 -050108080900101008040900041011120900131411020600131411151600130411031700999990399999199999109909109909199999099991990991999991990929 -080909040500080910101100120210100400131414151504161414150100030617171700999999990099090909999911999199109990901999999993929909990999 -080104090900080810091100121213141100041515061100021515051100161617030400990999399999099991009999009919999090999999991990919990991299 -080909101000050409111004121213110100121213111400151617041400060318021400099990099999900099999999939999999990199099990190902199999119 -080910010600051110121200131313121200141516171704140204171704181818190300099990093099919990199999999991099019909199999099091999999129 -060808010900020808100904111205130400141414131300151616171800031616170400099999993991910010900990999199999999991999090909929990999999 -060401080800091010080800111010041200111313040200110413141400110405140300999990039990919909901999999990919999099999199099999099909929 -080109101000081109090400081111121304141415050200141406031600041718181800990999399990199999910999910909919900999909199999990921909999 -030808090904100811121200101302121200101314041500101617041800050601181800299909990999109999199991999999009919999919090009900399999999 -080801090600080810090900111111051200020413041200141415161200141403161604999099939999109919900999999100999990991909999909999999992990 -080304090400101002091100121004091100131415091100051415151600061404011600299091909999119909999990909099999099990991999990999039909999 -080409091000080404091000110212121000051312121000041314141400031504010600909999999999990900099901999919999099099991990999991030929999 -060108040400090909101000111213101000141515151500141605171700041602170300990990309099999991999900099019999999999109999999909992991199 -050808090900100808111200041306111204141415111200141617021200040117170300990990999990999990999909990900999990199991990199903912999999 -040808030500020804091000111112131000111114041000151516161000150116160600992990999091900919909999099990099909999109999999993990999999 -040809090900100803060200110805121300111114141500041614140400161601171700999990929199999909901909999990019999190099099099999309999999 -040308091004111102091000111112121000040612131000051415160100171418181800921900999999919999199990999099999991099091999003909099909999 -080506010904081011110900121311110900121404150900121414020400121603171700999909003990991990999990999999999090199991099919991909992999 -040801090900050810101100120810131104120814150600121603171704121819021700099999939090099999999909000991999991099991999299091919991199 -040105080809101010080809111112130409111102140609151617181920151618180304990900399999999919000999099999999910090019999910099999099929 -080904041003080911101012130911111415130916170218131920202118060120200518099999900929909999999199991990919001109919999199003990999999 -080804091004080809091112131314140312151515150412161718190412060501191902999909909099099090999999992090999999909990990019000399199991 -080808080109101011111109101004121204131404121215031602171815191919050406999999990399099099991099099999999190902199199111999000099999 -040809090104101011111111101012130614041502161614151517160414030518191914099999009309099999919099109091999919909909999999029009990999 -060804090904101011090912101311141512031602141712181819142004181805012020009909099999999999990900100991999299099119099199099039999999 -080809090909080404060504101111111204011304021414151516161414151517181803909999999909999900000909900909999309199191999199999999290099 -080808080105090910111213030902141206151516171218192016211218191916040418999999990309191099119929990991199991900099999090999909999990 -060808010910110808120910131312120910041314021510161616171804190504172003999900993990900990999999999991999091199090109999909991909092 -040104080910111112080910111113081410151617081806151902202121151919052103999900309999099999990990999910909090099199909111999909999992 -030809090904101105121200021314151604041313151500171718180100171718180600299909199091999919090919000999999099999910999093999999999909 -080808060900011011120900051313140904151513020900151516170300041816171704990999099993110990919909990909199999999901999999990992909990 -040208080800091011110300061213111400151613041400171613051400170113041400019999109290999901999990909919999099090999999909993999999099 -030809100400110412120500111302121400111515041400161617171400161601170600219099910999990990199991999919999999990910999090999399999909 -040308090600100808091100120404021100131415151100131415151100041404010500929990999099919900919999019099999009999999999991999030909999 -080909010600080909101104121212121304141402151600141718192004031705202000999999993090901099901999990999919911199990099009029099999999 -080104030900081011120900131010020400130614141400131515160400131515170500999299309990091909919999909991199099999900999990999909999909 -060805090300101009091100101002041100121212131400151516171404151501041400090299099999999999199999099091909999099190999109099399999909 -080109090900081011111204131311111204131314020600151516170300150405181900999999309090199090999999990991909991999001999999999012909919 -080809090300050209090400041011121200101013140400151515151600060117161600999299099990199991990999099090999990091909999999903099999099 -050808040900011008110900121314061500120414151500120214040400121616160300099999090993900991909910999909999990999999091909991999999929 -060809030400080810101104050212131300141512130400161612170100161618181800092999919099199091990991999099999099099090999013999099999999 -030808080800091011020500091011121200131014121200061516160100041704160400299999991999919999990999999091999001999991990093990999909009 -080808060400010909090900101010111100121204050200040313141400041516141400999999090093999990991999999090919999090999199219999999900099 -080309040400081011111100080212130500081412121500161616171500060117170400920999919099199991999999909919099199991909999990903099999909 -080409031000080509111100081209041300141509160200141717180600140117181804909299999199999990991909099009919909199091999910993999999990 -040809090400010809051000040811111100120813141500021616141500061716031500099999999093990999090900999990999190991999991990990999909299 -040308090900021010090900111104120500111313121200061313140400151501161700929990919991999919909990909999999199990990999909990300999909 -080809101000040811100100121213130400140213131500140616050400140317171700900999999990913990199999909999999119099000099999999099929999 -080808080600090304101000091102101000121212120400131415160500130116160400999099990992999999099911099991999999091999991090993099999909 -060308080904101008110900101005110904021213140900151616170100151616180400999900299999909999999999900190999111090901999993999909999909 -060808090400100808091100101205021300101415150300011415151604171717170400999990999099991990911900999999129019999999993990090990999999 -050406030800091011080800090212040400131312141400131312141400040115151500999990002999119991999991999099009910999999999999903099999999 -080809100300040211050600121314151504161414151500011718181804171719191900991299019999199901900919990199999199999190993099099099999999 -080901051000081111111104081204131400081516160200151506171804191903171700099099039099999090919990919909919909999999199901009999999299 -080801040900080810110904121314111104120602151500121617171700121819050300999999930999100001999991990991999900999919990999990992990099 -080809010400020809101000111213101400111513161400111713061400030504041400919999993091919919099909909909999999099090999999920099999909 -080803090500081010091100021010091204131415150400131615151704130601171700929999999099999919990909900199099199099199999190099399909999 -080808080500030602090900041011091200131411121200131511160400130111160400999992919099099999199909099909999000999999999100993999999909 -080809010400060409091000111111111200131415021600171418181600050318181604909999993099091909901999999099919900190991999999909999992990 -040108090900101008080400101011121200131411121200061504161600051702160300999990390999090999999990999919999090990199999999991092901199 -080910111100061212120400050213140400151514141600151517171600030417011600009990900999990999099901199919909999999991999990929939990999 -030804040900080810110900020412120900131314140900131315151500061617010500299999900999909919909999909109999919999919099999999030900999 -040408080300091011040400121202051300141415131300141415161600060115161600999290019999909900190991099199999990999999999099903999999099 -080109090500081009090600081104121200130214141200130415141600131717030400999099399991090999909919999910999019999009099999999020999999 -040808010600020808090900101112091304101415041600101417171800031405171800099999993091919910090999990900909999099909099999929999990999 -080801090500100811091204130614091504160417170200161817171900161803191900999999939090090009199990110099019909999999199999999999909299 -080809011000080811121000030402131004141415131604171405061600171718191600909999903999901999999990110291909919909909999990999999990009 -080503090900101111090900101012040200130412121400151516160100151506170400092990999999999999091999099099919999190019999093999009999909 -040801090400061011110400101011110500121314151500121304021500031616161600099099030990090999999999909999199900999991990999999019929999 -040308080500091011080600041211021300141411131300141415151500161604010400929090999990999990910990999099199999999909199099990030999999 -080809100300110209090600121213050400121214141504011616161704181818181900991290999999190901999999099990909999909109093999090990999909 -060801040900101111120904131111120904141402120900151416170500181819190300099999030990910009999999990099999991999919990910909919999929 -080910030600080911041204080213141504161613171700161613171700181819010500992999919099199091900901900999099999999999999019999030990999 -030808080400090909021004111205131400061516131300171716181800171704011800299999991099901099991909919000999909999991999009999939990999 -030809091000110409041000111202131004111415150100051616171700061616171700219999999999999990109991900919099019390900999999999999909999 -080309100500081112101304080214151604081714161600181819191904181801200600929999919099199091900999000919999199991909999199099309999909 -080910101100041210101100121202131100141415151604030517151804191919010600009990999999999999099991119919919999902999199001099030999999 -080901041000081111121200081111130400080413131400031502051400151506041400099099039099919999919999909909999999099910999199929099999909 -080809101000010811111004121211111304141515150500140602160300141704181900990999909993099091990999990919909099999019999919999912900919 -040801090400101011091200101011111300140204030500061515161600171717161600099999039099109999990999909010909999990192999919999099999999 -080109090400081009091100081213140600080413021500051617041500161617031500999999399090190990019999909909199999190900999099999999999929 -040104080800090909080800041010111200131310020600141414150300040405151500990990399999999901909999909909009991990991999999900092999999 -080808050900011011040904101012130900141212040900141516020600031718181800999099099993190099199999009999999999999010990910999919921999 -030808080400090506021000091111120400091111121300091415131300041601171700299999991090900999910999999999999999999901990019990309909999 -040408030400091008061100091008021200091313131200091414051200040115161200992990099099999999900909199999199999999190990999903099999009 -080803090900100811110900101204040200101314151500161616151500040601050400999999929999991990991999999900019091990919999999900300999999 -030808090400100808111200011302141204061314141200151516170500150418181800990092999991900999199939190999999919990000999990990099999999 -040104080300091008081100121314111100121514020500121506161600041504161600999990309290099991999901999999199991999990090909909999990999 -080803090900080204090600101011121200101005121200131414141400040104151500929999999991099991900990099999999999991909991999903009999999 -060108040900101010100900111112120200111312121400051516041400041717031400990990309999991909091999999909919999990099999009990999909929 -040808020600030805090900041011090900121211131300120414131300041515010400091099991992999999099900999999199900999999990909909030999999 -080804090300100811111100101202060500101313131400101516141400040117170400990299991999999990199991999919009199999999991099903009999909 -080801090500080810111200131415110400131404160400130616160200130317171700999099930999010990090909999990199999999999099091999991992999 -080803091000080409091000111206130200041415150500161615150400161601171700992999999999991900991900919909199009099099999990999309999999 -030608040400090208051000090908111204131414151600131414171700131818011700990992099099199991900999990991009999099999090919999039999999 -040803090600080810091100020412131400151516141400151516171700040501171700999990929099190919909990099190999990999999999109900399999999 -050806010900101111090900121111131404021516041404170318181400171719191400009999093991919919909999900109099909901909999999992099999999 -040401050400080808080900101111111100100412021300101412061300141404031300999990030099990991999909999900199999199990990999999099999929 -080509090300080209090600101104121300101414150400101615151700100104171700999299099990190991909910909999909199999199999099993009999999 -050801090600040808101100121212131100141502161104141717181100031717180400099099930990900999199999199999199111909909999909929990999999 -080809090300080809020400101104120400101314121500101316160600100116160500999299999999910909919900999999909991099919990190993999999909 -080910031100080910111100121210020400121213141500161616160400040106170500992999999999999900909999199999109911099199999990903909999009 -040809090400060810101100120802100300121314150100121605171700181616171704009099999990991999192991999919999911399009999999909999909090 -080405010400080909090900061010111100121010130200040314151500161616161500999999003090999999991999099099199099190999199219999909999999 -080109101004080811101004121213141504161213050200161713181900062013180300990909309999099091999991110999019999999999190091990999909929 -040408080500091008081100121302140300121314141500121617041500120117170600999090099990991909192991999999999109099999991009993999999909 -080301091000080511121000080211061004131313131000141415161700141404160400299099930999009999909919990911999999999000099999999090999999 -040808080800090909091000051106021204131114140300131514141600171717010400999990990999991999011909990999129999999099990090999030999999 -080909010400080809101000061112101004031313141500051313021604171717171600999999993099099990099909090999919299199991090919099909999999 -080909101000080911100100061213131300141405040200141415151600040415150300099999999999013990199909999900019999999999199991900999999929 -080909101000040909060300111112041300041412131300141412020400040112150500090990999999909990092999999999099099999991999190903919999109 -080109100500080811121304141506121300161617121304180417171300021919190300990099300999099091099919909199999909901999999099919999919929 -040108091000111108121300111114021300151614171700150514181704150414060300991090391099199999019999999909199099999099999909099902990999 -060809101100011204051100131314151500161616151504171702181804170319181800000099009993999991909999099910999999909919999019099999992199 -080809041000110809121200020609120100131314141400131315150400040316170500999099999091199919999990139190999999999909099999902099999009 -030809090500100809040600020811111200131311111404151516170400151501171700299099999991909919090999999199909919009019999900999399999999 -080809040400080809051000011109021200131114151504131617151500130603181800990999999099109991990939109999199091909919999099990290999999 -080109090900081011111100121213040200121213041400150613161600170513030400999999309999199900991990909999919999090099199999909920909999 -080306090900101011090900120213140500121215161604171717161600041801191904290991999999009991999919009990999919909919999909990390909990 -050808090300100808091104121313131104141515061100161515170200181801192004999990999299999009009999990090999099999990190919909311999910 -060802090300101004090900101011110500011211131300041414141400041516171700911990109299999999999999999919909309999090990999990999900099 -060108090904100808110400041213141400151502141400151516171800031616170500999900390990909999190901999919999910999919099990999999929909 -080805090400080410091100120610090400021314090100151514161600031504161600909999999099090909999909109091999119391990999999999999920999 -080809090300080809090500101102121304101114141404151616160400171801190600909299999999999999190991000999999999900109099999900309909909 -080109090500081009091100081213131104081213131100140215160400140604170300999099399991099990099999990999999999091999091119990019999929 -040608090400101005091100100304091200021313121200141515151500161616010400900990999099099992990999909190999999991909091999999030999999 -040308080600091002081100121313141100121313141504120416141500121718010500929090999990019999199999909999999991009999999909990030900999 -040808091000050306021000111213131000110413130100111414151500041414160400091999291999901909999900919999999909399990999909909909999909 -080808090500031002090900040611111200131311110400131414141500161601041700999999119092999999190999909009999999999091099990909390999909 -080808090904011011090600121211131400151202131600041704131600051803131600999909119993909999990999999991909001990099999090990999909299 -060808090400100808090900100211030500041213141400151515141400040116161600099099999999909991199909299919909919990919999999903009999999 -040808030900100508060900111111111200040413130200141415161600141401160400999290999990909909091999999990919909990911199099999399999909 -050801091000110812091004130806091400021515091600171515181904171703180400999990939991100019099999909199909990991999099990099990992999 -080305090900080802090900060410111200131313111200141515111600040415010400290999999999199999190990199099999990990999099900900930999999 -080909050300080904101100061204130200041214141500011214141600171717161600990999999290901990919900919999919099199999993199990999999099 -080803090900080810111100020412050400131313131400151617181400061616011404929999999099909919099999999100009999090991999909909039999990 -080309101104081213130200061214141500161214141504161617181500051920011504921109999190990999991999999099999909909000999991999039900990 -080306090904081011110904080212131300141415131304141416170100051819202000299909909991990091099991999991999991909991999903900009990999 -080902101104121313111100031313140400151617140500061817141900181817011904111901991999999929919999009909999099990099099900999939999990 -080401090400081011111100081212021300081414150400161414151500160603051700999099030990099999091999919999199991099999990999990290999909 -040408090300101011090900101012040200061312141400011312151500041305151500909290909999099999991999999909019091999999993109999999900999 -080309090900081004111100080212130100051414151604171415150600181919191904999999290991999999009919939910199991000999099999909909909990 -040108080800090909090400100604111100121202110400121313131300051414040300999990309999990900919999999090999991099919999999900992999099 -080809090300080210041100061213051100121214141100151514140100151504160400999299019999190991999909099990999999099199999193999909999009 -080801040900080810100900110210121200051304121200141415151500031404061600999999930999190919999919099010999999999199099999929090999909 -080801090400060810091100051210091100021310090400141415161600141403041600999099939990100991999999999019999199091909999909999999992909 -040403010400080809101100080802101100061212101100051313141400041313150400999990023099199999999991999091999991099090990999999909909909 -080808010600090909091004021111111105121313141504161317171804190317171800999999903099990099919919990199009990901909099999019999929999 -030808090900100608090904101011121204040213121200141516161600171518010500999992999999099099090999990910999999990100999999909130901999 -040804090900011010110600121010130500121414131500121414021500031617181504099999000993910999919909909999999099099991999999999919921190 -050809090300040209091000111204131000111212131000140615161000171515010400099299099990199991999999099999999991990991999900900930909999 -080809040600080810101000110212121300140415161300171515161300030405011300900999909099999999990911999101999991991999999990920039999999 -080309090904080510111200081310111100021410151604171710181900171706011904299909999099999990990999999109909999001090999110999039999990 -080809050300080810061104121314141500011617021504181818191904202020191900900999999299909009091909999901199319109909999909090999999999 -080806090900010810090900110212121200131314041500130316161504171804051500999999909993119999919911999190909999099209999999009999900909 -080805090904100803090200111212131300141516131300041516171800041516010600909909999190929909991999099099999099990991999000999930909999 -050808090900100411120900131302120300131306121400151616171400041601181404999990909999911900192991999999999999999109990909909309999900 -040801091000111112131000041104131000141415130300161605021700161606171700099099030999019999999900999909999990999001299999999919999099 -030808080600090510021100090912131404151212161404151718191400152001191404299999991099000999919990190999999990009919999009990399909990 -040801090900101010090900111213141404021503160500151504170600181818171700099999039999909991099919090199099929091999999900990999999099 -080909101000081102100300081212131300141212150600011616171804051616040400999999099999119991912999999099999090099190993990099900909999 -080301091000080811090400060212121200131415151604171818151600051818041600299099939099919991919901999900999099000909999999909909999999 -080909011004110909101004111213141404111215141400031602171800192005170600099900993999919099190990990991999999999919099109921090919999 -050408060300090908101104090908121100131412121100011414150200041617181800999990090299990099999999999090999009999999193919999911900099 -060808090300100808090900111213140200111513130400111617171704040501181800999290999999999900991990119999909099999019999099000309999999 -080808090900101010110100031202131304141212131304150516161700180616160400991999911999993999109929990991999099900090999990909990909999 -080801090904061011121204131011121205141011151600021003171704181920171700999909030999909009999999990099099919090999091999019299911999 -080809100300080811101004121302141504121304060500161718191900161601191900909299909999999099019991100999909999990100999109990399999999 -080609100400081109101204041309100100021313100500141516171700181803171700999999099090990090999901139999999199091999990009919999992999 -080805090300080810111204131415160200131715181904202015181904202006011900999299901999091090991999119909999999000099999019099039999999 -080106090900080810090900111213141504161202171500160418031500160518180400999999309999009919999919100091199919999902990999999999909909 -030809091000080811121000061302141404151515141400041616161600051718010400999092999999910991119991990090999999990991999999999030900999 -080501090904081011111200081311111204021415160600171418180400031418181900099909930999199991999919900190999190099999991999929990990909 -030802090900101111090904040512130600141512160400171716160100171718181800911992199991999099910999999009199009099909999093999099999999 -080905010400021011121200131014151200131006151600131017181600031717041604199991103099119919009999999990909999999990999909929999999090 -080808090904101004110900101012120100131412150400160517170200060318181800990909990999999999009999939909099009090919999091909991992999 -060808030900100808111200130405021400151516161404171718161404170119191900099299999190991909919909099099199999000919999199093909999999 -030806090400041004090900111002051200111314151500111316150100111717171700290999199099999909000991999991909999999919999993990119909999 -080109101004081111111104081213140500151502141400161517181800190603181804990909309990999091990991199909999991990919999919909999909290 -080809010500080809101104061213141500161614141500170304021500171718191504999999993099901000001990999999999909999999999901992919991190 -080902061000110312131000141515130500041515131600171818191604171818011604119091919992910999999909909099999990999991990900099939999990 -040308090500101008090200101006091100041213141400041515140100161717171700929090999999911999991999999000919909999909999903909909909999 -080910111100081213110100080514151500160214151500041714181804061719031804009999909999013990199999099999999019990190999999099999901290 -040401060800091010110800091010110800091202131300091214151300160504040300999090039990999999999999009919999911999999999009909002909999 -080808090400011010091100041012121200131314050400131302150300060415151600999999099093900999999999999010009919999919999999900192999919 -080808090400101111110100101204130600100513131400100415161600031715150200990099909990993999019909909909999999199999199099999991921919 -060809040500101010101104121212131400151602171700151618180400150118180300009999900099999009990999009011999990999919999990993999999929 -040803090900051010090900111110120200111104121200131313141500061601041500092999099999999909991999099999919990999091999910990309909999 -080809101004080809031104121309060200141313151600171818181804191901200500999909992199999009991999909090919990190991990999090309999909 -080109090500081009091100081213141104081212151500021617171704041819030600999099399991099990099999000999999990991999991999001090991299 -080801050900060810100900111213040900141202151500161217181804041203181800999999930999199901999991099091909099990910999919009999999299 -080309090900080810111100040212111100131412120600051515160100041515171704299999909999999991099901099999909099990001999993999999909090 -080808080904101002110300101012110500130412121400131516170100061819171704999109919299919999999990999099109099099991999093990099909090 -080808030500091002111204090404121200091314140600151514161600151501161600992999199099119099919999099909199099999099099009999399999999 -080804090500101112120100130212120400131415161600131415151600031404170600999090900991193919999919909910999990999999999999999909929009 -040809090904011010100400111112131400111115050200161615171800161606170300009909099093999999919990019990019999999999199091999999990929 -080309090900101105121200040213121204141415160100141417161604061818191900299991999091999991099900990919099991399919999199009090999999 -030401080600091011111100091012121300090212120400041415161600171705161600999092030999999999910991999919909199999900990099990999999099 -080802090600101112090900041113040300011113131400151116161400040516160400901099919990999909102999999999999319099999990099909999990909 -030804090900080810090900021010110400120413141400151613141400050601171700290999999999999919900999099190999999991099991109900390999999 -040106080800090910080800090510041100040210111100121212121300041404031300990990399999109999900990999099999919999199099999900929990999 -080805090900080810100400110210100100111213141504110413131600030617181800999999900999090999999911939990099909009099099999929090990999 -060308090904101108090900120213141404151616141404171819191900050120202000929900999999109901999910090190999999901909991999903099999999 -080806010900080810110904050312110900131402150900131617181800041919191804909999993999091009099999099929999991199110990199909999999900 -080809011004111209091004021212131004141515161000171515180500190320200600999900993990199099909919900109099999991990099999919909929909 -080803091004011111021204131111140500130615161700131819201704131820201700992109099193991099919909109900099999099900999099099999999999 -030508091004111212091000131314091504131316170400021819190100181819190600909902909999999919090999000990999990091909999193919999999909 -080409101000081109060400081109051200131409150200141416171700040103171700900999999999909999990909909099909991190919199199903999999299 -060108090900101111120500131114141500130414141500130204041500131616170300990990309990990999909910909909999999999999991090991999999129 -080109090904081011121200131313131200140215161600140417160300140506180400999909309991909919999999999199909119999019999912999009909909 -080401090904081011090900081206131300141502130500141617181800141604180300999909039999109991999909999010909910999019999919999092999999 -080409090300080209091000081112121004081314051000011414061500041617151500999299099999199991999919990990099199999199093990990999900099 -080801030900080810040900061112120904131312120200141305151600171704181600999299939999009990199999990009919999190990099909909999999009 -040801090900080810090904061112131300021415131304161615051700031815171700999990939999109091099909099910999199901990099999991999929999 -040808010400060808091000111203131000111414021000051415161000171515160400099999993090901999999992919919199091999900999999909990909999 -080104090900081002090300111012130400141015150500141015151600140417170600999999309290919909199999909091099919999999099990990099999909 -030808080800090910100100090911121300140215161600140604161704140518191704999992990999993999919999109911909019999099099909099909990090 -080809100400081109100300041112041300141112131300151112020600050112160400999099999990009999992999999099099019990991999910903999999009 -080803090400101104090900021213141400151513141400151516161600041701050600929991999099099910990999999109999919999910999999990300909999 -040108090500101108080600041212121300141415151300140215151600041717170300990090399990090991999999999010999999999999091990901999999929 -050108080804091010101000111112041300110212061400151617170300181818170400999900309990999991990991909999909919090199999192909999999909 -080409090900101002040300101011110100121305111400151617171400150617170400099990919299109999999991939009999990090090999999990999999909 -060308090900101104090900121314021500121314151500121316160400051301170400921990999990999990019999199999999991999991090099999309909909 -080910100400041110101200041106031300141105131300141115021600140115151600009990999099090999099999929099999999999901990199993919999909 -080809041000040909111000121314111000121202110100061516160500041716160300900999999999999900999991109919999919390019999990990999909929 -080109090600081011111200081011110400131014021500130404161600050317161600999999309099190999999999999091909091099901990999909999992199 -080806090900080810090300111104020500111204131400151216161600040117171700999999909299909909919990999999109099099901990199903099999999 -080909010500020909101100120404131400121515151600121718181604031718180600199991993099919910900999009999009999999909990999029999999909 -050108091004111213141004151616161604171702060300171718181900202020181900990900300999090001999919990199999910999919299991990999999999 -080809010600100909111200051314141404150204161600151717161600150317180400909999993090910901099999990910099199999099999999999999929009 -080809100400030402101100121213101100141213101100141413151100041601060500919092919999919990999990999999999991999999999000990300909999 -030408090900100808111104121302111100121414151604121414151700061819010500900992999991999091999991999991909099909999099910999030900999 -080804090300011010091100121010091304121214021300151617171300051817060400999999009293999999991999990919099911190909990999990900909999 -040208080800090909090300041011051204131414151200161614151700161601150600919990199299999991999991990091099090090999999990999390999999 -080509090300080209091004081104121000081314141500161617140600160117180400099299999999199091999999009919909109091999999090993999999009 -080806090500081011091200131414091204150214091200151603171804151920011804999099909990099909099999190019999999999191099990091239991990 -060404010800091011080800090212121200091314141500091313041500051603041500999990003990199991119999999910909999999999999990901999992909 -030809100500080804021100121313111100121313141500161717171504061819011504211099991999991999099999999999919990090999990991099039900990 -060809101004021109100100121313131300141516171804191505201800031520201804011909199991993919909999999199009900901900999999929999999990 -080804090900080810090600110312131404111515131604111715130100021718190500999999909999099999000929090999909999009999999993919019911109 -050808010900060808100900111213100900111313101400110404150200110316171704099999993990900990999909099999999999199099199900999991992190 -080804010400050909090900101010041100021212131300140312131300041515160600909999093090999991990999909199909199990999999299909909999009 -080808030900101104090900101104061200101313140200151313160500040104161600999990992999099999991999909900919099190991099919903099999999 -050803090900100811091204021313141200151316160400171716160100171704180600029999999991009019999999909199099999091099999193999909999009 -040804090900060810090900110812131300110802131304111415161600050103171700099999909999099909909991999991999999909110990919903919999299 -040808010904101008110904121013140900151616160200171818190600051818190300099909993999019099199909119099919999190991099909909999999929 -080909090400041010110100041010111200130214041200130515151200160315150600099090990999913999999909909991999110999009999999919990929999 -080809030500040810111104120210111104131410150100161710151500181819190600912999999099999001999999090019999999390199999119909090990999 -080801090500101011090600121013091400120402090400121516170400121515170300999099039999199999990901009991999099099919990910999999999929 -080809061000111213131000011213130500141215151504161204170300180217171904900990999990990999999930909999999109901909999999919992911910 -040808010400090808101000111212101000060513141500161602141500160304140400099999993090909909099999999099109900999999999119999990929099 -080903010400080206101000081111100400081213131300141414150400160415150500129999993091999991099999199990909909999090999990909999909909 -080803040900080804041000021111121200130406121200131415151600141401150500929099999099090919990909999199999999999009091190999399999909 -080309090904080810110200041212111300141516111704181819190100180619190500929909999199009999991999999090919099109001999093999999990909 -030809050600100809111204100811111300100814131300021516170100040418181800999992990099999099090999999990999911991191991903900099999999 -040401040800090910100800090911120800061111120400031313120500141313020400999090039999999999199999109009999999099999999990929919919109 -080109100600081112100400081314021504081604171500181616171500181805170300991099319990190990019999900900199999990999999999999099999929 -050104080800091011080800101012061300141415161300170204161300171703160400999990309990009999909990999190999990099199991099999990992999 -080803050600080809101104021213131400151213041400161217171400041201181800929999990099000019999999999199999999991900991190999309909999 -040108090500100808090600101111091200101302141500101313141600040403140400999090399991999999990919009991909910999999099999900290999999 -080109100400081109101204081113051400081113131500041102060300161718181800990999399090999099090991099999909999099910999999909192900999 -080109101000081109051000081109121200041314041200030402061500161616160400990999399990199999909999099991999000999019099909929190999999 -080910111204080902040300081313131300041415151500161617170500160117180600991109919299199991909909999919999999990109099099993999999009 -080809040400031009111100121309141100151316160500060216160100171717170400990999099099999920909990099199999199099199999993901919999909 -060808090904011011120200131014141500131014141604131017181904130518180300090909099993191999111909999999919999909999199009090992999999 -080910010500080611121300141516121704180219121700182019191704182020031704009999003099910999199901900019999909999199999999099999999290 -080109101000080909101000080604111200131305141500160204171704181818180300999999399991909999000909999199009990991999091099091999999929 -080804010400090910101100030910101104120213141100121215161100170615180500999999003099090999999999990291099919999190999999909900909099 -040803090900060808100900110512100200131412041500161612171700161601171704092999999999909909991990909099919099999090199019999399999990 -080809090900100404021100121204130300121214131300151514160500150114170600999990991199909900912990999999999991990990999190993999999009 -080105090600080810100400111110100200121113141500121613141700120413031804999099300999190990999999919990919090999099199999990991999920 -080402090900081010090900081112060300131114141400011115161600051104161604901999919999999991992999099090999099999909993009999099909990 -080109090904081011121200081314141500081614141504061617021504031819200500999909309099199990199909909999999909900991999919099199921009 -080309050400080909101000080211101000121311110400141414151600040106041600299999990099999999099919999919099199991900099990903009999999 -060809090400051009090100111112131300141112150200040412161600171717160300009099099990993999199990199099919999190091999999999992999099 -080105091010081112131010081415160206081417171818041419191820212119190403990999390990110999919909010990919999999999999099109990290999 -080910030111021212121111131414151617131414181804130419202021130605202021112991999391991900909999900999900999999009099999099099909999 -040108080503090908081011121314021504121314140604121316160417041316181818999990399029199190011909910999999999099909909990909909099999 -080109101010081112130214081516170518080416170318191920200418191920200618990999309999091191919101109909999999920999999090999999999909 -080808090909030504041011120213131313121214151601061414171818041920201818990999999909990920090091999919199999139990090909999909900999 -040808010900050808100900111111121200131414121200060415021600031717170400099999993999900909919999099090999999990909199091999910929999 -080803060400080809101104020909121304141515151500051616171800191919011800929999990099999019900919900991909099990991999900999039999999 -080309101000081112101000061105021300041114131304151515161600041718011600929999919990919999919909019999999900900999199909999039900999 -080909030400081002061100081213111100141213051500011213151500041204040400992999199099199999109909099099099919999999993909999000909999 -080409101000080305111100081202111104061213141400151617141400181818010400900999990999909992999909190991919919990999990009999030999999 -030808080904101011110905021011110900121314150900061617181804192001181804999902909999999099999919999190999199099100999109000399909990 -080801091000110812120200110512121300141415161704141404161804061919160300999190931199099999991999999000019999909909199999000992999999 -060108090900100808040300041105121200131102121200141115161700041116161700990990399990999901902990999999999091990910999190909999999999 -040308090900101108120904130214141400151516160500151517161800060119191904999990299991900019099910999919999909999999099090903099999990 -040809031000061102121004131414141500161616151500171718180500170118181904012999199999190009109999999019999999999190999099993990999900 -080304090400080802101000111213101000111214041500111614141500110501061700290999990099199999199991099999999990999199990190999390909909 -080808080400040909090904101011110100031012110500130614151600171702181600999999990099999009909999939991999909092919999009919109991909 -080906100300080910101100080902121300141414140400151516160400040105161700009999999299991999199999009091909999991909999999903090999909 -080910110300080612121200080502040400081314141500011617171504161617181500901299019999999999190999099901999099999091993199099909999909 -080809091004010811110600121311110400141515150400140216030500171717171800909009999093099991999919909109999999099999991929991190999909 -050802010400090910111200030913131300141515161704141515161804061919191900919990113099999929110999999990909099009999099999009990999999 -030508090900101108090900101208131400100213130400101516171700041506010400999992099999999990990991909911999199999901099099909030999999 -040308080900101108080900120613130904021413150900051617170100041616181800999990299991999919909909990199999110099919990093999909909999 -080809010400081009111100041213111100051402151600041415151600031404061600999999093099119991999901999991099019099999990999999009929999 -080909010600081010111100081010120500081314021500131303151500161704040400999999093090919999999999109999199911099999999299909900900999 -080109060500080810101100121210100400121213130400141402150400160317151500990999309099190909990999999991999999099919999199919090929099 -080809100300080409020600051111121200041111121200041313130100141516171700901299999999010909919999999999999090999991999993909009900999 -080309100500081109040400081209131400021209131300061215151600171715010400990099299991999999900999909199999100999999990190999930990999 -080104050600080809090200041009091100121013131100041014031100041514140400999999300099991991991991999099099099999999990092990999909909 -030508040900100611111100120413141400120413141400021515150100161616160400909092909099099919990990099999999999991090999993919919999909 -030808050400090902101100090412131100141413131104141406010400000000000000299999910099010999919990099999999909909903099999999999999999 -080909100300080211121204081311120500141511161600041718161600061818010400991299199999999091990901999999099099990019999919990930909999 -080801090600080810100400111110101200111314140200150414161700150403160500999099930999099999990990919900919999990099199991999990909299 -080909031000080909041000061112021300141111041500011616041500051616171500999299999990999990901999119091999090999199993909999999909009 -080909100300080204051100080412111100081212130400141515151500140116040600991299190991999999099909999999099190090199999999993090999099 -050408080800091003040200101011111200131411061200131515151200040416011200909990929199999909901999999909999999099009990991909039990999 -080601090500101111091200131111091204141516040200171716031800170416181800099990939099911909999909990909919000990999199999990929999999 -080804010600090910111100090904111100120213141500120513041600120413031600909999093099119999999999099919099019099999090990999999909299 -080808080400060204030900101111090900101004120400011314121500051616161600999999192099099901999919999999099999999109093000990999909999 -060808030904100808110904120213111104121214141400151516170500151501181900992900999990990099199911990999099999991909999109999300999909 -020809010600100409111100121313111100141315151604030515151600171717041600119991093099919919099999999199909999002999999999990099999909 -080804090400030810090500040210091100121310141400151313161600060104161600909092999999999991990991999099009010990999999909903099999999 -080801090400080809090400100211111200101311141500101617141804030517140600999099939999099999910991909919909199999099099090020990999999 -060108040900101112130900141512131304141612050200141617181804141603181800990990309990110990999909990999919909099999199919099299999999 -080808010900061011110900101011110900120413131404121513130200050316171804999999903990091999999999999999019999909099190099909991992110 -060808010400090909091000020411111100121313131300121203141500161605170400999990903099990910909999999199099999999999099290909909999009 -080808080600020909101000110909120100130414121204130415161700031818180500999999909091919919919999939199999900909909099090929900999999 -080909090904080806101100121314100100150414101600051717021804031719191900999909099099990900099999039009999999190999199911099990929999 -080109090500080809090400041010111100120213111100140613150400160313171700999099399999199909100999999919999190991990099099919909929999 -030808090900101108090904121111131404150604131400021617131800191919010500999992999999909019909999000199999999991009999010919130999999 -080808010900040610090900111212041304141212021300151616171300051818031300999990003999909999901909990099999991190919999919909029999999 -040804010600090910101100090912101100131313051100141415150200141416030400909990093099999999999990019990099999999099199991999190999299 -080809091000030811111004050211111000121314141000151614141700150406010400999992909999999091999999999019099919090999990090990030999999 -080909031000080811051004120213131000121413061000151617181800040104181800992999199999009091999991909999999010999199990009903999999099 -040108080800090910100400090911101200131411020600041411151500051611031500999990309099199999099999909009109999990991999999990999909929 -040809101000080811110100120211110600131415161600130317161604130518181804911990991999993991999919909199099009999909992999099099909990 -080109090900080810101000111102121200111113141500161313061704040305181904999999309999099919999991099991909990990990099999002990999000 -080309101100080804101100041204021100131313141400041515141400051615010600921999999999909990919999909000199999999909990909990930909999 -080809011000080809091000021112131400150416161700150416181704150305061700999999993999190919009990909109909999099990990999099009929999 -080401090900081011120900081012121300041002141300051015041300031615061700999999039999100999990909999099999910999910990999999990921909 -080909100000010909100000111102040000111212120000040304060000000000000000199993999999909999199991099919999999990200999999999999999999 -040809091000040809091000030811041000121211111000060213010400000000000000099999999990090999909999999299999999099113090199999999999999 -080109091000080809040600111112121200111102131300041415151500051617040300999099399099009919999990999999999919990010999999990992900099 -040808091000010808091000111112090600110513140400151616161604021718180300090099999993999991099999909990999090091999999999010999911929 -080809100600080811110500121313131404121516021704181819202004181801032000990099909999099900990999990991109909009011999999099399999929 -080910031100081212111100080213130500081413131500161417181504190601041504912999199999999991909919909999999999991909991100009399909900 -030809090600040809100400111202101300111214100400111215161600051201161600299099999999199909190999909991999001099991999919999399909999 -030608090400101004111200101013111400150213111404161616111400171705011400900992990099909999990999999919999199901909999910990039999999 -080808010900041004110900121013140900021013050900151516171800031506181804999999093999090909919991199099999199991900099909999099929990 -080906011000080911121000080411041000021311141000151311141600051703140400909999993991110990909999999199999190990999099999901990992999 -050809090600101011111204101011110100131313131400151616021400031604171804099999009099090099999999939999199999199999991911929990999000 -040108091000111208091000131414021000151514161000151517161600050404060300991990399990190900919999999099199999999909999999900002999999 -080109090400081009090600081102120300131404121200131415150400131615170500999099399991090999999911199009929999999909999990999999900009 -080808080600090905040300091010101100121213041100121414021100040115160400999090990999999999092999999090999990999909990991903110999199 -080904100300080904101000080911051200130911111204141515150200060116171800909999999299999999091999909099999999900009190999903191999119 -030804090900080804090900021011111104121013141400151516141700151501050600290999999999909919909919990990999010990919999990999300999999 -080809010400080810111200131415111200130304111200061602171704161618051700909999903099909999099900909999999999990201999919099199991099 -080802090900080310090904111110120500131314151604131317171800061917010400911999999992909099919999999909109909909901099990999930900999 -080409090400101009091104031002120500131313140600151516171700151516011700099990999099090099110999999291199999099991999909999939990999 -050809011000041109091000021112131004141115131600141115131700140304130600009999993999990909919911190190999999099999099999999090929999 -040508090400101112120400101106131300101114130200151114031600040114161600909090900999090999999990999999999091199999190199903929999999 -080808010900101111120904021111060904131415160900170518161900170304161900999999903991910019999999900199999900091009999990999099929999 -060809011000051112101000021313131300140415151500141403161604170418181800009999903990909990919919999109909999999999099299009990909999 -020808080300091010051100121213141500121216140600171718191904170104191904199291999999990919090990009999999909999109099909093099999990 -080409090500080809100300111112131404151616171404151616021400150118190600909099999999092999019999990900199999909991990990993119999109 -080808030500020909101100121313141404121306150400121617171800120117170400992991999099900910999999090999999199099100999090993990999999 -080803090904080810090904061112120200131412150400161617150500160118181800999909929999919090991999919009999910090199999099993090999999 -030808080800040909020600101112120400101313041400101313151400100501161400299999991999990900919999999901909990999999990909999309909909 -040809101100121213141100011515061104051516170200181816191904181816190300009099900999909990009939990999999911190099199999099999999929 -080808090500101011120100021303121200131314150400160414171700040614171700999099090999113919999992999199099990090090999999909999990999 -060108080900101011080400101012021300040414131300151514161600151514050300999090319099199999919990999090199909999991999099999992999099 -040804040300010806091000110812121300110812021300110414151300051414150400009999990293099999901901999999999991199009999909909999999909 -040809100500020803111204130804141400131515151500131617171800130106171800910990920091990019999999999990099199999199999099993099999909 -060809100300041112101300041104041300011114021300151114160500151514161600009999009290990999099909999999099319199991999910999999990999 -040809031000041106051000120213131000120413131000141414151500040116161500012999199990099991909919999999999999091009999909903909999999 -060805090400080810100300110210101200111313041200141315161200040117171700909090990999992909999911909999999999991900991909903099999999 -080306090904101102090900041213130500141413131504161616161500171717011500299901909991199999109900909999999909009919999999999039999999 -080809090300080809101004111204101000131304061400151516170200050117171800999999999299099009999990999009019999990909199199903191999919 -040804091000110812091300110812050400111412150300141412021600060104161600909090999099909999990909099909999911999991299999903019999999 -080109100400081112060500131313021400151515151404161617171400161617040300990099309999199909100999919991199999900909999999999992999099 -060808050300040910021100011212111100041212131400151617131400041616131400099999090290919990119939999999999999990009990900999999909999 -080501090904080410110900080212110600081314111500161317111500031317041800099909939999910990990911199990999909091909999999929990999909 -080806090500101010110400121212120100131414141404151616160200150317181904990099090999990999009999939991999099900999199990999991992110 -060104080400090910081100090912081100131302141100151314140500150416170300999090309999990999099990099199999919999919990990990199999129 -080808080504090310111213091010141204090214141206151616161201150417041804999099990902999099909099999909999199909109990991399090990900 -080808080600010909101100121209041100121213040500141516021700041503171700999099909993900990909999999991999999999010090911909999999299 -080802090900080810101100030610101100121314141104121516141700120404010500910999919999999929999999999909199909909099090090990030999999 -080804090900011011090900121212131300140415031300021616170500041616170600909999099993009991999999099199999992991019091999999999909009 -040801060400050909090900101010101100120413130200121414130400041403151500099999030090999999091999999009919999199999099909999919909299 -030808080600091011111104101002121300141515161700141515181804041905011800999992990091999099099991119999919999199991990909090039909999 -080808080900061011120900041313021400011513041404161616161400171718050300999099909990909990909909119999099399909119999999909092999099 -040408090900101111090100101111121200100506121200131414021500031404041500909990909999903999919909999990999099999999191911929909990999 -080309061004110509121004130209141400151609141400151616171700150418011700299901990999099019900919099919999099999990999919999039990999 -080601090900080810090900110204121300141516121700041516121700031505120400999999039999109919900919099919909009990999999999999099929909 -080903100500111212101304021412131300151617040600151618191900151601191904129091999999909019999919099910909990999909990109999399999990 -080801090900081010090200111010051200111313131200141506161204170404180300999999939190919999901909999909999999990099999090009902909099 -040806010400050809090900101011111200101311111400131315021400031617041400099999903090099999991990919999999909099991999919999109921999 -080805090300101109091200131302141204151506161200151517181800041901181804909299099990999909199999190909199999099901999019990399909990 -040105080400091010080800111010121200110413021400111515060300111616161600990090399990909999999909999991119091999990290999999999909999 -030808090400101111021200101111131300101414131300151515160100060404170500291099991999901999991999999999999099999901999903900909999009 -080109101100080909101104081213100400141415161700141418020400050618180300999099399990919090999990999990109909099991099919909999990929 -080906010500101112131304101415131300160217181800160417181800160319191904099990003099119091999999099910099199999099999999999099929990 -030808080400090906101100090905121200040213121204141516161700151501161700999992990099900999909999999910999911900091990990999399999999 -080910010500080811111100120613141500041616021700181803191704181819191704009999903099999909091990919090199999099091999999099299999990 -060804050904031011120900130211120900141411120900041516120100171718181800099909000999099929999991999119999991099999990003999909990999 -050603080800090910020800040911110400121311110400121314151600120117171700992990099999111999999999909019999009999909099900993099999999 -030608090900100808020500041111121200131111140100151617181804161604181800909992990991910999919999199099999991390990990009099099999999 -060808010900101011120904131014150900160414170900051818021900031818191904999990903999010009199999199009199999990991099919999999929990 -080808010400090510101000091112040400060212131300031412131300151612171700999990903099999990190991099919999090999199999999921990919999 -080809090600100809091100041213131100030514131104151516171700151502010400999090999999999900909990999999999991002011999999999130991999 -060308090900100808090400101104021200101113131400011113131400041516050400999990299999919999910999009999199099999999993190999000900999 -040808080800091005031100061213141400011215151400161215150200041717181804999990099990992990091909999990999319999999190991909099999090 -060801090900100811090500120813131400040413130200151616161700151803171704099999939990019909910999909099999909199990199999990999909290 -080809010500080809091000111111121200021306121200041304141400031304150400909999993099990999199999099190999199990990999909999900929099 -080805090900010810091104121213141504121202161700181818161700031904160600990999999993110099010990990999109991999919999999991999929009 -050108080600091008081100121304141100151516021100171516181104170318180400999090399999190900019909999909199909999991990999099990992999 -080808090900061010090900111210130400111202141500110416161700030416010500990999999990999999909999109991199119099091099999929930990999 -040804010900101010100900111213131300141204151500051616021500031616060400099999003999991999991900999090199999990991999919999900929999 -080803090904050810101000041112130200141212131500161617131804161601130600999909929090999990991990999099919099999009199911099390999999 -080808080600040909101000110209101000121314151600121214171804031905011804999999990099999909999919999110909911099991999990020939990990 -040809090900101112130100061105130400021114151500161604151500161603171700009999909990113909099999999999009109991909999999999909992999 -080809010400101009111200101013131200051413021200151604171200060317170400909999993099901999909990999909999999190091990099909990992999 -050408010400091008081100121013141400120204141400121516171700060316171700999990093090190999909909099910999999999199099199909999992999 -080809010400080809091000111213141500021616160500170318181804171706191904999999993099190991099919009109909999991990999999092990990990 -080809090900010810101004111112130600111114140500150214161704041819160300999999909993199090199999009991999999990999099190001999991129 -040308080904101108080904121113021400151515161600171718191600171701050600999900299999990009990901119999919990999999999011999300999999 -080109101100080909100500041212100400131212020400140604150300161616151500999099399090909901999999909999999091090001999999909992999999 -080808090900041004091100031010121300141406120100141402150500161616160400999999009990990999990999009299999999399901999190999119999909 -040809010400101009091100041212121300141405021300141515061300161515031700009999993099990900199999999909199909199999999909909991909929 -060809091000011111121004021111131000141516171005141818191904200318191904099999000993990099909919999199099900909090999999019999929990 -080809091000030809091004111204131000021406150500161417181800191919011804999999999992999091909919009199099990091990991119999039999990 -080909061004080909101004021112131400151116171404181119190100200319190500999009999999909009909911909191999991001991999993919999929909 -080109021004081112061004081314141500161714140300161717181804161920051800991109310990999091191991999099929999999999990909090999990099 -080906010500081011121200081304121204141415151600171715151804031919190200009999093099009990099999990909199999199999199099099991929919 -080809011000111212101000111313141504111313050400110216161604061718190300909999903999909999919909100999009999999109999999091999901129 -050104080800091011080400091011120200041011041300141011151500061616031500999990309990100999999999119999919090999999190999909029999999 -080409090300080809091000111212101000131212020400011414151504061617180500999999099299999909909999999099109099999901993999099119900109 -080809090900081010111100011010041100121314140500151617171704041802060300909999099999909999909939999919909009990199999999001192991099 -080809090900101010100100020411110400120611110400130514151500160317171500999999090999993919909909909199999909091900990999919099929999 -080601090900081011110900080511110400081213140400150216140400150416160300099999930990099999999990909991999910099199990190999999990929 -080808080500091011110300121211111304141516061704011616021804191920202000999090099999099909992999990099919099909090193991091919991999 -040801040500080809091000110209120600111313141400111313141400111503161604999990930099190919990919099919099999999999999999991990992990 -080809101000030602110500121313111400041313111504161718111500161604011500919992010999919999990909009099999999909999999000990039999999 -080801091004081111110500121213130600141213131504140216170400181818190300999009030099999991999990999099909999009199099119999019999929 -080805090600040810101000111102120400111113141504161613170300161601171700990099990999999900099991199999109919109099299909999399999999 -080806040500010809091000111209091300111212141500110216160400041717170300909999990093099991990919909999999990099909091999991999909929 -080808010900040210110900121205130900120306130900041414131500041414131500999990113999910991999999009999999290990999999990999999909099 -080808080300010909061000111111111200131404021500160417171804161605181800999999090293999991991999999009119909190990999999090909990999 -040108080900101008080900101105041200061302141204151617031200151818181800999990399999090999999910999919099011109009990992999099999999 -080401090500080410111104121213111100021415161600171706161600031718181800099099930999999000199991099199999100999199999909929909999999 -030809100200041104051200131114141200131115141204161115170100161615180600211199900190999999999999919999999009909991999903990909999909 -080806010500080909101000111109101000111112041300040404021300031414141300999999003099909999999990999990919990990099999901999919929999 -060808040300090810111100091210100200091213141500011216041500041217051500999990990299999990919999919999919091199919993109999999900099 -050809060300100411111200101311110200131314141500011614141500161604041500000999909299991990999999919099919909199999993199999099999909 -080404090600080310101100081212131300080514131300021516160100041515160400090999990092999999900999999990999999991000991993909199999909 -080306091000081111121000081311041004021305141000151516171800151504011800290999990999990999999990990199099999991000099110999039999999 -030809101104040909101100121302141100151516161100151717171700040518010600219909999999990909199900119909999999099999199999909030990999 -060809030500100811111200100211131300101415131300040415150100161717170400912990999099990991999909999910999919999990999993900909909909 -080808010400060409101000050909041100120213141100151516161100150316160400999990903099019999990999099019999000999190999999999999929909 -080803091000080811091004020511091000121314151000061313161704181819010400929999999999999019999999099100999190999990090910099030990999 -080909010600080909101104121313141500160417020500161817191904160317191900099999993099901009091999919009109991999990999199092999999999 -080909090500080304021000111104121000111113141000151516061000150117170400099999291099909999919999999990199911099190999099993099999909 -080808080900011010060400111010120200111314121500131314051600040414031700999099090093999999999909119900919999999990199999900991999929 -080808030904061011120904131014140904151614140200171819192000050119192000999209909999900009999990990099919019199199990090903999999999 -080910110300080212120500081312121404151516061704181816161904181801202000911299199999999991990901990991909999009099099090099390999999 -080801040900081010040900111010050900120613140900121516021700121503171704999099939999990909999909999091099901099991999001999999999290 -080309090600080802101104121213101400121204101500161617100100161605181804299999990099119099990990099999909990099999999003999009999990 -080803090900081005110900021012111300140415111300161718111304041706011300929999999999999919090990999190999909991909991110009039999999 -080903101000080211111004061211111300141414141504051616171704181601171700129999999991199090990909999991909999909919099909009399909999 -080803090900100411110900021211110500131414141404011516061700151518041700999990929999990900999911999199909199909919093109999099999099 -080109100500080811020400121313141404151515141604171818180300061919191900991099311999190909919909990099919999900099299999900999999999 -040809090400011009091100051004120200131006141400131515160300041515161600009999999093191999991909019999199009999990290999909999999999 -060108090900100808090900100411120500100213131400151516160300170416160400990990399991999990099999009999999119190999299099909999909909 -040108080800091011121204131014151500161006151500171005180300170219181804999990309990009009909990999090999999990999999099991992991190 -080104060400080809090900101010101100031213141100150213160500151513170400999999300099099991990999999919099919992990999190991909999909 -080808010400090610101100090910101200021304141400051315150400161303150400999999003099990999999991909190909199999990099999909999902909 -080909030400080909061004080211121300080504121400151516170100151816171700992999999099990091990991199999909999090001999993990999990099 -040108060400091011051200091314021204091315161200091515161200171717180300990990309090009991999991910991199991999999999999999902999099 -080909091000080506111000080304120400081314121200150414160100021714161600099999099999900999909999999920909199991990999993910999911199 -080309100600081112051300080214151304081614141304171818181904172001191900920099919999199991909919990999099199009190999999090309909999 -080909030400100911111100100205121200100404121300101414141300041501040600992990999099999991909910999999999999099000991999900300999999 -080809010500101009111200101006131404151516171804151519191904032020200200909999993099001999901999090999019900909999199999099991929919 -080109100500080811111100121313041400120404151500120216151500040616160300990099309999999991000919999900909999999999991199900999999929 -080306040900081011110900081011111200021313131400151616161600040401051700299999900999999999990990999190909199990991099999900390999909 -080808010400060910111200090902131300141515041300141515161600140317040500999999093090110999909991999991099099999999099999999100992999 -080409011004081112121000130512121000131414021500131416171500130418030600909909903999090900999999999991999091199999999091999020990999 -030608080804091011121200051314121204040214150100161614151700161618171700909902909991909991999909090919999019399999999919999909990099 -080910100600081111100100121111130500141515131300041515020400031617171704009099999999913999999909199090909999990991099999999919921990 -040108080900101112040900051212130900140215130900141604130300141616170600999990300990199999999999999019999011099909990992999999999009 -080909010600080909101000081112101000021113041400150313131400161704051804999999993090919991099999999990009199991999999999912090919900 -080903101000110212131304051412131300061412150100161412171804161619041800129991999091199099999900099999999991390990999990099009990999 -030802091004080811091000121314090400120515090100121616171804121606191900919002919999919999099990909909999990399900990990099090999999 -080809100600010805110200041213141500161613140300161713141804041713141800911099991993901990991900919909999999299999990990099999909999 -080806010500030809101104120213141400121313141400120415161700181818041700999992903099990091019999199919999099999999099000999009999999 -030608090900100508080900110412131300111404131300021515150100161718181804909992999999099919900999099900999999991090999993911909919990 -080806090900080802090300100411120400131415151600131315151604050117171700999999909299919909199909009091999919999199999999003090999999 -040403080900101008080900101002111100120513111100141513130600040116161600992090099999999999199991999199999990991099991099903090999999 -030508040900100208040900101108120900101108131300041414151300161404010600900992999999199991909919999999009991999901999999909030909999 -080405060300080910101100080910101100120913021400150916160400040117171700999999000299999999999999999091119099199919090199903099999999 -040809090400100809090100021112131304141515151300161617170600160317170500909090999990993999199911090190999999991909999990992999999909 -080406090900081011090904021213141400151516161704031516161800191919010500999999009999099009090911999191909999909999092990999030999999 -050108080900101111040900061111120900130214120900151603121704151616120400999090309990990999999999099091999019990199999990099290999999 -040808080800090310101000091111120200090413141500161313170600050117170400099999999099999992990999119999919901190999090999903099999909 -040403080800091004080800091111120200091314140500091314041500060116161600992990099999099990991999919909199099999990099199903090999999 -050809091000040609091000111212131000141414141000021515161600040315010400009999999999099909909999999090099999091991991999909930992999 -080901100400111212131304141515161304141717060200141717031800051919191900099090030999919009009999990990019999999999199999999921909999 -080808050900100403090900110612130400141402151504141416150100171718181800999990990990929909919999199001909909909919999993909119999999 -080808080400090206031000111112121200111113141504161713130500160118181804999999192091999919090999999990999900000199099999993099999990 -080801090900101011090900101212131404061212130400151515020500031617181904999990939999099999190999100999909099999901999999999910921100 -040808010400020808090900101111090900121313131400121505161400030604171400999990993091919919999999099199099999099099999900920999999009 -080809050600080810111104121310100200011415151600041715151600181818031604900999999099999009909909919901919319999999990099999099999920 -080910010500081111111100081213141400041504141404031602171700161618180600009999903099999999019990999909999090909991999119929090999999 -080905011000080911111000040911111200131313061400040215150400041615150300009999993999990999990900999991909999090199099199990999909929 -080609101000081111101000081202130300141415150400141416161600040104050400990999009990999999999911929191199999999999099099903000999999 -080109051000080811121000131404121000130402121504131617170600131617170300990999309999119990999900909909909991909919090999999999999929 -060804091000110803120200111313041400111313141400110415150100161617150500990190991199929990991999999999099099999901999093999099990909 -080309051004081109061200130214151600131414170400131818191900131818011904299009999091090991990999009919999090099199999919999939999990 -080808080300090205100400090904101104121314151500121617151500120117061800999299199991099999990999900190099900999009991999993990999909 -080809101104080809121100131314150100131316161604021703040600181717190500999009990999099909909991139990999999901990099299919999919009 -080309090400080809091004110212131400110615160500171815191904171701191900299999999099999091090991109999199901090990999099090399999999 -080209090904081011120300081313131304081415160500171715180400170119190600919909119999912991999999990919099999090199999090993009999909 -080808010400090610111100090912121100051312121404151602171400150318191404999999903099099999019999999909909009909019990919999919992190 -040809100300111109100500040609100200121309141500131316161500040116161500009299999999099999990990919099919091199919999199903999999999 -080809011004081109121000131309141000131309140600040415021600031718051600909909093999910990999999199999909999990991999010999109921999 -080902101004111212101004031212131300141414150100051617150600181819152004119901919999919029919999999999199990399909990099999990990000 -080909100300081111101200081111101300011404021300041515160600051515170400099999999299999999991909099909999399199101990910999909909909 -080809041000080309091004111212130200141415161700141418191904050601191900999999990999299009910909919909919909199901999919000399999999 -080609101104081209130300081415020400161615171804161915170100191915170500999109091299099990919990199099909909009999999913999999990909 -040408060300091011121300141502121300141515121300141616121700140401051700990990009299999900099991119999999099999919999990990399999909 -030809090200101111121304101111141400101516141404101515171705061819011704219199999199991099919999999990999999909901990909099039900990 -040108080800090909050400101011111204021011111200130614151500161703151500999990309099999999109991900999999199991909999009919999912999 -080808090900041011110400121211110400120513141400031502141400041515010600999999090999090909999990999901109999999919992999999130909999 -080809010500080809101000060411121200021314121200150404161700151503171700909999993099999990019999199091999119991099099900999999992999 -080309091000080509091004081112061004021314151000161617171800161617010400299999999999099099099990990109099909091900099199999930999999 -080808090500011009091104121212121100131402150400130416170600131616180300999099009993999091999999909199999111099901990990999919999929 -080102090900080810090900041010050300041112120400131313141500161616040600991999319999999991992909099900999099999909099900999090999099 -080906101000080911100400050912021300141412151500141412041600040112170300990999999990909999090909109909199999999999199199903902999099 -060809021004031112131000141212131000140515131004161617130100161618191904011909191992990999999999999990999990900099999903999009990990 -080309100600080811121200130214151600131314151604171819151604040501151600290099909999009991999999999919999999001909991109000399999999 -080403090900081010100900081104050200121314151500131306151500040116160400092999999999999990991999999000019911990999999099903909999909 -080809041004111209131000031409131000060215131000161717130100051717181804909009999991999921999990999919999919090919990993909919999190 -080806010500040910101100121210101300141414150400031602171700161604171700999999003090090999990999999900109999999991999119929999999099 -040808080800090410110100090912131400151602171404151618051400150618180300999990911999093999109999999001099909009910999999999999909929 -080909011000080409111000081212111004130212111000141414110400150306160500999999993999900990999999990099999911990199999990919909929009 -060804090300100809091100040802111100040812121300141412121300040115160500999290909990999999199901999999909019999999999190903099999009 -080910101100080910100500080212130100141415151504141416161704031819060400999099999090199991019999939910999999909909999990020990990099 -030809090904101112121204021313140500151313141400161717180400161701190600299909190991999019909999909199999190999919999900999309909909 -080601090900081011090904121212120200130314151500051617171700161604180400999999039999019009091999999099919921990909999099999009999909 -080808010500090909091004111112131400111112041500061617021504031819191900999999903099999090010999919999019999990999999111091099929999 -040808010400090808101000021106101000121313130400121403151500141404051500099999993091919919099919999919909099999020999999999909990999 -080309090900100411121200100211120600100511131400101516171700041504011700299991999099099999999911999909009999999910099019999939900999 -080808010400020910101100121313101400151313141400150316040600150516170400999999113091999919990999009199999999999900092999999999909009 -060808090300100808021100101012131104141516041104141717181100140117180500091299999999910999919999190901999900909919990909993990999999 -030808080800090909041000041102101000121314150600121616171700120116050400999992900999999999199909999901099110999999091909993990999099 -080801090900101010100900111111111204131405121200131516021704031819060400999990930999999999199999990990199099999091999010099100921999 -050801090900101011090900101111121300041414120200151414161700040603160400099999039999019999919999919990919999990999190991900990999299 -040404080600091011081200131414121200131414150100030502161600171717161600990090099990909990099999199999199099399910999099929199999999 -050808030900020810100900110404120900111314150900111616171800111601061804992990999991999919909999999900099110099919999900999309999990 -060808090300100808021100101212131400041212131400040415131400161715010500091299999999911999991909999999999090999909999091909930900999 -060809041000011109101000121109130400121114021500161117171500040517031500090999099993009999999909009999999911190999999099909999990929 -080409050300080810111104121310110200121410151500121410161700120106180400990999009299999090999999919909919999999999190111993009999909 -060108090900101008081100101012041100041314051100041315161600041302160300990990399999090999999991099091999990999919990099999192909199 -080809090900080802100300111112050400131314151600131317181800060117041804999999991299919909199999999091009910099990999099903999999090 -080609090300080209091004081111041200131114141204151515151200050116171800099999999291191099999999099199999009901999999999903090999009 -080808090400041009090100111012131400111006021400151617171400040317051400990099999990093999919999019990999099190991999199902999999909 -080106091000081112131004080514141400081502161704181519202000031519202004990999390990110090919999999991999910009999091099929999999990 -080109050300080809101004061109101000121213021400121215160400171718180400999999390299199099999900999901199991099909099909990909999909 -080809011004111112101000111113141400031502161604171806161604051920202000909909903999909999019990999999919911902109991999090990909999 -080109091000081109090400121204131300121204130500021406151500161617031500999099399091099919909990999999909909991990990099919999991299 -030809041004080809111000020509111200131409121200151516171800151501061904299909990999990919999990999199099109999190999100999390999900 -060801090400051010091100121010131404021515151400161718031400160418181400099999039090900999909919900199999199990092999099990999999999 -040804010400040809101000111212101300041212131300051414021500031414061500099999903090999990099909019099999999999991990910999909929999 -080309060500081010101004110212121300141512131300161717171700160401180400290999909091999091999919999199999190999109990999990309999909 -080309090500101109091200131111061204021414151200161614171200161604010400299991999099999919099999990190099199099099999910999030999999 -080808010900021011110900121313111404121313061504121616171800030416190500999999093991990911199999900999009999909999099990920909999009 -080909101004030909101100050212131100141512121104161616160100061718180400199902999999999991909991999099099099009091999993990099909909 -080504090900081010091100121010131104141502131600171717131800060104130300999999009990999999909909900099999111191999199999903092999999 -080404030900081011090900081212121300141415150200141416171700040105170600999299009999909990991999999090919999999909199119903099999909 -050108080900101108080900121313130300140215151504161617180400161606181804999090399991999919099999929119999109909099999000999999999090 -080910110300121211111304121202131304141414140500151516171804151501061800009990909299999099999999190901999999099190999190099309999999 -080809100400011109121300111105061304141402151300141416171804191919190300900099990993090999999999900910999991999911999191090992999999 -080909030600080909101100081213021405151516171804192020212104191901212104999999992099919999190900110999919900909990190919099399999990 -040808091000110808120600131404121200131415160400130315161600021715010500999090990090909999999999099999099199099299999919919930911999 -030808080900101111120904131302140900061516170904181819190500181801190400999992990991999099109999999901099991000091099099999399999909 -060808090900021008110100121313111404151313110400161718191904031705191900091999191991993919999999000199909999991009999909029099999999 -030809090600101011090500101011121304140211151300141616171300041616010400299099199999999999900999990919099990099199990910999930909999 -080309090900080805040200041010101000041112120100130612140400131516161600929999999199099990901909999901999999390090999999999900900999 -060104040800091010110800091010111100091212041300090214140400050414140300999990300991990999999999099990909999999990091199900999999929 -080808010400030402090900061011090400040512121300141412121300041415151300999992913099099999199900909991199999090099999099909999999909 -040805090300100811091204131313130200061415151500011617181804191919181800999290909999991000091999999909019099999999193119090999999999 -080105090900080810110904121314150600121302161704121318161700121304160300990999399999110090919909109991999991109909999999999092999999 -080808030600020904101004111205101000131313131400011516141404171717181800992991999099099010999999999100099999999199993909090009999999 -030808090400100411020400121211131400121511131400151504131400050104130600291099991990910909999999909999999910990999999099903999999009 -060108080800091010110500090912111100131412040200151412031604041412171800999990309999919990990990999009019999990999199999009921999919 -080909030400080902041000081112131000051114041000151616171000151616010600992999999099199999109909909091999900999919999910999930909999 -080808080904011011120904061314120500151414121600151502040300171717181900999009909993109090199909999999909999099919999099999102999119 -080106090900081011090904081212130200081414131500161414131704041805031700999999309990119099991909919999909999990999090999090929900999 -050809101104121209131404151609130600151609171800151619022004150119190300000009999099009099990999999999999919199911190919093992999999 -080910010500081111111204081313141400041302140400061516171700031816171700009999903099990099919999199999909019999010990999999999921999 -030809090400101009091100021212051100131204041100141414151500061601151500299099199999099919999999099199999909991090099909990399909999 -060809101000011112041000131114151500131116021500130416041700130516031700090999009993999999009901199999199991999990090999999999990299 -050809090900080810110100121313110400061402111500161717111504031717180400009999999999013999199909909019999919999919991990029909999909 -040808080804040910110100061213141400050213151500031613171700161613181700099909909990113991009909999919099099999199999999929909999099 -080609091000080309021000081104121000111113130500141513131600040117170400099999991999299999919999909090199999099099990190903090999999 -080804090500080804090900041010101100120613141400120215140100121616170300990999999099099990990999909000999991999919990193991999999129 -030809100400060509111204131302141200131315151500161617171800161617010400219099990999999000109999199999109999999099199091999930999999 -030804010900100811090900100812131300060214041300151514051600151514040400299999903999919999109909999911999019099099099909999990999099 -040104080800091011111100120613141400151502141400151516170500031818171704999990309090199909199990199099999991999910099999999199929990 -040809090300101011121300101002040400141415151500141416160100060517171700909990099299911999199991099919909919999919999993900909999999 -040408030500090908080200041011111200131313131400151516171400151506011400902990999099991990991990999099019999199991999009999039999999 -080306090900080810090900110412131304021412130500151512161700041812011700999999209999999919090999990109999111099091999990999939900999 -060801090904051011120900131313121400021515121604171515041800171903181800099909039990009999190999909991999199001990099999999999912999 -080509100300080909100600080402101100081213101104141415151600141401150400999299099999990999099999199901999019909199099190999399999909 -080803040900080210110900040410120900131410121200151515150600040116160500929999990991199990909999909099999010999199099999903099999909 -080806010900080810110904121305110900120204110900141415111600141417030400999999903999110001999990999919999990999199099199999190999299 -080905100300111206101000111102131300141516161600141704181800140104181804009990999290099999919991199199999909999090991099993999999090 -060809090900011011121200131313131400151617141404051602180300041618180400009999099993109999190999999091999909900919999992999199909909 -060809090400041009110200011012131400151516161404151516161400171705180300009999999090991999011931199990999999909999999099990902999099 -080808080400010910111104121202110600131214151504161714180300051919191900999999909093099091990999199091199919900091999992900999999999 -080808080900101103120904101013120900041406150900050216171800191919011804999999090990999099299991999919999009099190090919991139999990 -080301090600101112130500141512161604021712161804191720201804191920201800299091930999100911999999090119909199909990990999099999999999 -080304090400080610111100120210131104141510161600141710160500140118181800290999990099999910909911990999099099999099999109993900999999 -030808090400100808110100120613111100140213151600171813191604051819191604990092990999993919999990199199099119090099999990009999999990 -030808080800090610101100120513100400121213140100021513141600171713040400999992990099099919990990999999099991391999991190990900999999 -030804090900100811090900100602050400101213131400151212161600041701161600299999909999109999199999999901009999090991990919990399909999 -060808090300010808091000051112121000131412021500161717181800041704181804099999999293909990199909999909119099190990990999909999990990 -080808080904011010100400111212130600141412040500151416161600021718180300999009099093999991909919909199999990991999099099919999911929 -080104090900081010090900111010120400110213121200141516051700060304171700999999309991909919999999909999999110990910099199902999999099 -040601080400090910110500090910111100120210131300121414131500120316040400999090030999100999999999999919099199999909099999999090929099 -030608080900101108040900101212130900101212041400021515161400171501040500999992099999999990009999909999909999991900999900919300919999 -080808080400090204101000091111100100121113131300141516161600040305060400999090101999999991999999939999099099990199099999902000999999 -050408060900100808040900111103120900111112120400021313140100151313161600990990099999990900999992909999999999091990999993919919919199 -040108091000110808091000041206131300141414131300021503040400051616161600990990399990990901999990999919999990991999991999901200999999 -040808080800090910101104010912121100131312141100131315021604051718060300099999999099999099099931999999999909199911199919090092909099 -030808080200060909051000040909041100121212131100041414151600041414011600299199999190990999991909099990999999190091999900999939909999 -040408091011121308061011031414151011161614171811160502191801202020201804900090999990999990909999990299099919909910999019399919999910 -080501040904081011110900081211111304140215151600141715150600140318191900999909030999999990990909900909109119999999091999992099999099 -060108080400090909101000111213101000051415151504040216171700031816161700999990309099999919099919099010999999909199990109999999921999 -080509100300111109101004111109060200121313141500121313161704120118180400099290999999999099991990999909019991199999990900093090999999 -080503090904101010100400021112061300141512131300141612171700141801171704099900920999999919990919099919999990999199999109990399909990 -080609041000080909111000081212111300021212110100140315161700141404040500909999990999999990990999109099999199391990999900992000999999 -040808080900101011040900101211110900131302141500131306161500050104170300099099999999999990909991909911999991099901999999903919999029 -080309100400081105101000081112020600081212131300141515151500041617010400921999999099909999919999109909099999990919990999999030900999 -080104090900081011090400121013141500121006050200121616171704121603171700999999309990009999990901119990019999999099199999099999999299 -030608091000111104121000021113141000151513140400151516141704181801140500900992990999909999909919909199999909999999099100090399999909 -080809101100010812100200131314101500131314101604171806161604041819050300991199919193199990991999999999919990900099999099009992990099 -060803090500101111111100021213041404151216161400151216160100171717180400929090190991999919999919090990999999099999990193999909999009 -080910110300080212050400131312141404131312141400060415161700181818011700911299190999999901990999990999999919999919099910900039999999 -080905031000080911101004060912021300141516161600171718191904041701191900999999902990919099199999119009919099990991999019009399999999 -080909090500080306021000080404111000121313141000121215161000041515010400999999291099909999919909099099199990199999999001999930909999 -050808080300090210101104121310041100041314151100161617171800160117170600999290199991999019999919909990999990090109099099993990999999 -080803090900101111020900100611121304141516051300171717171300041804011300992999099999991999919999190001999990990019999990990939900999 -030809090904080810110400061202051300141516161300171718191300171701191304999902909999900991099991909091999099999091999010999399999990 -050108080900101108080900101212130400101212021400101516161404041706031400999990399990090991909999909999999991199099999990090999900929 -080909101000110909120100051302141400151617170400030617181804191919191804091990991999993909109991999910999199992099099909099099999990 -080503090900081010100904081112060200131412151604171819202000171701202004992999099999990099991909999909019099900900190019999399999990 -080808090900030402090900011011110400121211110400121313130400061414150500999992019999999999100939999919999919099099999990990999909009 -040809010600050909101100121212101300141414100400150216101700151503041700009999993090900999090999999999909999999099991110999909992999 -080804030900081005040900111213130900141213130200151516060400150117171700909299999999099900909999999099919019199199999009993090999999 -080905101000081112120100081314120600151314021600171314041604041314031800099999000999093999999990109999999091190990999999009991999929 -080109100300080809101000041102120600131414141404151616171700181905171704999999399299999991019999109011999999900900999999900099909990 -050808080800030910101000111213020400041414151500161414151500161604010600099999999092199990199909199099109999999999999909990030999999 -080109090900080810111200131314151200131304161204171818021904030618051900999999309999110990919990999990199999909991091919020909999999 -080106030900080810040904041111120900131111140200131515051600131717171700999299309999999091009909099999919091199909099990999990999999 -080401090900081011110904080211111200081313121200141313150400030616170500999999039991190099999919999919999990999999991900929909990009 -050802090300061010111100121010131300041414141300151515161600170401160400001999911299999909999909999991999099999919099909909399909909 -080909030400080909101100080210101100080512131404151612131700060112180400992999999099999991999910999999909999901099091000903909999909 -030809090904100808061100100402121304101415151500101617171800191917010500299909999099999999100999110909919099999091999090990930999999 -030805090900080810090900021110100600121313131300141415161700040401041700990992999999999991909919909190999199999910099099900309999999 -080304091000110604121000110213131000111413131000051415161600171704011600290991990999999990009919999919999919999901099999900039999999 -080805091000081111021000041111060300121213140400041513130100041616161600999199001999919999992909099901999990099999990993990909909999 -050104080800090910100800090410100400110402121200110413131400031513130600990990390999199990999999909091099909999919099999990990921999 -080809090904050810100300111210101304111114151604171814191600060114200200999909909990999990992990990999019909909990990199903901999119 -080808090300051004090900111112040200111113141500161617171500040117061500999299099990999990091999999990019990999090999191903999999909 -080910040600081103121204081304121200141516160200141515161700140118180500900999099099929090999990999009919019199999099999993090999999 -080910011100041210131100121210131104060210131400151616131404170305181900099990093999919999999991900919999099099199991999019990929009 -050808040900060808030900101002111200131414151200161417151200040104151200099099999990992999091991119199999990991909991999903099999999 -040809010600100411111100101212130500101212021400101516161400041516031400009999903099099999199909109999199999199990990999909999999929 -080904061000081111051000021103121000131412121000041516161600171717010400009099999999909909299919909199999119990991999099990930999999 -080304060900100411110900100212110904131312140900051512161600171812011600299991900990999999999911990999099990099099999019900939909999 -060808010400090808101100090212050400131312140400131512141600031515140400099999993090910991090999099919999999099999999000929990999999 -060801090904101112090904101312140500101512160400171712031800191902181800099909039990009090900999999909099999099099999992999199990199 -080809090900101004110100041005121200131313121200140415160200141417030600999999090999903909919999999900999990990999199011999190999299 -050801090900100811090900101111121304101415021600141417061600040318041600999990939990019999919999910999919091199919999990909199992909 -050808040600090804101100091212021300091414140300151516161700150116160400999990990090901999911909999909129999999199999090993990999999 -050808090900100808090100111202131404150616171404151818171400041818031400099999999990913901909991900001999990909919999999999999909299 -080905031000080911041000121211021000121211130600141516161700040116160400909299999990999909909999919999199901099919990190903990999999 -060809011004111109091004111112131400021516171404181919171400031919200500099909093999990099109991909919999100901999991999999999929009 -080809090900030802101100121314101100040615151100041615150100161604170500999992990999199999199900999091099909099999999093909009999909 -080904101000061112100400011312041400151312141400150216160500150416160300009990099099909990999930099999999190999999991190999999909929 -080801091004111212091000111212091000041314141500030514140600161718020400999900039999999999999999009991999009099999099099929919911109 -080903101104120206101100131415101604131315171604011815191600181815200500129901999991090991999991090999999999009090993109999999999009 -080808030904101002111200131414150600131414161600171819161604050120202004999209099199911990190999099999099099999109990999003099999990 -080910010600111210131404110410151404160210171400160518191400160318191900009990093099910090999999090999099119999090999999999999929099 -080109100400081109120600081309141500080416161500171718021504170518180300990099390990190990909999909901999999999991999019090999999929 -060308090904101108090904120208131400041515161700051516160100181818191900999900299991999019990919009919909099099999999193909099999099 -080804030900100411111200131414041500131414160200131717160500130117160600999290909190999909091999909999919999199099090919993999999909 -080309091000080809091004041112021000051314141500011313061600171717041800929999999999099099919901109919999009099990093999990990999909 -080109090400081010101004080611021204131314141500161617141800161619050300999099390990999099199990910991119909999909199099999092999099 -080808030900101111121304101111020500101415151600101414171704061819010400999299909199991099919999999990109999999919090919099030900999 -050108080600091010101000111213130400041202131400041215151400041603151400999990309090999900199999909099999991999919990990990999909299 -040805030900101112130900101404131300101415150200161415171700040106171700099999002999090990999999099999919999190999990109903099999999 -080809011000080809111004121314111500060214111500161714041500180314050400999999993999000090999909109099999919999199991990919990929099 -080402091004080811031200131311141400131311151600171818181804171705010600901109919199992990999999999999909991990991099999090030999999 -080808080300040409041000111209101000011314020400061313051500161616161500999999909299009909999900999990199391099919990999990909999909 -060804090900101111090900100411120100101302141500101605171700031618181704009999099990919999919999939901099919099109099999999909929990 -080809100400050809100100111209101304111202101400151616041700031616061800901099999999993909999900900991909999999919091990929990999909 -020809101000110506100100111203131404111515041604171518181600191918181600111991909990993999909912900909009999909909990999909999999999 -050809011000111111111004121213141000151216140600151702180400150318180400009999903999999099919990009999999991099919991100999999929909 -050108080900101011110900100611110900120213140400031515040400161616161700999090309999099999999909999190999190099199999909921990999909 -080209101000041112120300131105060400131114151500131617151500130118181804010990119999992999999999999990009999999109990099993009999990 -040801040900101011110900041012110900131306050200131314141400151503160400099099039999091999999909099900919999099999199999909910999299 -080404010400080909090900101010111100121204061100121213021400031516051400999999003090999999919999099090099999999999199911999199921909 -030508091000111208091000110408061304110208141500161614140100161617180400999992099990909999990999090909909190099199999993999109991909 -080305091000080811111100040212131300041414141400150416160100151716160600290099999099999991990901999991099099999991999993990999900909 -050808090900101112090100061313131300141415021600141415170400040315181804999990909990913900199999999909109991999999099909909909992990 -080109100400080809101000110409121304140609120500021515150300161718181800999099399999009919999909000199909099991999991992909999900999 -050408010900101011110900101011110900120213130900120406140400120315151500909990903999190999999999999919999199099090999990999009929999 -030804010900100808090900110412121300140212121300151515151600051717040600909992993999999919010909999199999119999990999990909000999999 -050809031000110809091004121313021000141313151504161718151500041919010600992990999999099009919999919099919990900999990009999030909999 -040809101000111109090600111102121200131313120500141516170300040118181804000999999999990999099999199091909999991991991902903099999990 -080906031000111112121304111112021300141414141500161718151504160105190400009290999199099099999999919909199999990109999909093900999099 -080910100600080210100100081105121304141516171304031616181300191918180400009099999999193991909999000919999190902990999990999990990999 -050809011000111112121004131415121000131302061000041616160400031718181800009999903999090099999991199919999919090919099999991099929999 -060803091004111111111200131314150200131605171700181818171704191901202004092109099199999999091999009999919909990099999919090309999990 -080809051000080804101000111112021300111114141300151614031300040104061300900999909999999909990999119991999999990999990192903099999909 -050809091010111204131010031414131516170414131518171920131501170221211506909990099990999990099099999299990099909909991090391999991910 -050809090909010810110604120813141515121613131515121718180403171702192021009999909903909999900901909999999099999019999999999190299111 -030808090200041011041200131311141400041311140500041515151500161616010600291199999190999990901999999999999099099001999999909030999999 -080109090900080810040200041112131300141405151300141406161704181818160300999999319199109990991909099900999999099990199099009992999999 -080909100400080909111204081314151200011304021200031617171200061617170500999099990999900099099901199990199399999991992199999990909999 -060801090400080810091100121205131300121202131300140415161700141404160300099999939099010990019999999999999991990019999911999992999099 -080105090400080802091000111213131000140613130300141516171704140418171700999099309999911919199911999099929999999099990099099099909099 -080506010400080809101100121209131100121209041100040214141100151516170300999999003099110991999999909999099999999109990999991999991129 -040809011000080811121000130211120500041411121500161411151500031406170400919990913999910901999999909019999999999999991909929009999909 -030808090900101010111100040602111100040405121300141515121200041515010400299999910999999909199990199999919999990009190909999930909999 -080909031000081111061204081111021200081314150500161617180400160119191904099299999199999099909999119991999099099010999100993099999990 -040801090904051011040900121314141500021314141500161717171500161803061500099909039999099909100911909199999999991999991999991909992999 -060808080400091011121200041005121200041013021400151616171700151601031700999990990090099909099999999999909911090191990999999399999929 -080909031000041102121000011314151000161617151804161919151800050619151804099990112999999991119939199909909990009909999999909999990990 -080801091000111111111204131414051504021414161600170406161600171703181800999099030099999099190919090199909999991009999999999909992999 -040809010400060809091000050811111200130811111200131415160400130315021700009999993090990999919909909999999099999991999199992910999109 -020809100300111112120600130412121400131315151404161715151400050118180400111291999999999919990909999990999909009199990999903090999999 -080409090600081011111204080211031300081414151604171414181800051919011800999999009099199091990999299919909090000999999919909039999999 -050808080800090310020600111112130400111112120400141516161700140116161704999990911099299909919999909999199909090919999190993999999990 -040108080800090903040200090910101000110412131300061415131300161617170500999990329199999999901991999090099909990999999009990909999909 -040108080804090909090600041011121200131314141200131514140300050216161600999900309099999991099909999910099999999199999999991992901999 -040809031004020808061000111212121000131314140400131315161600050117161600912900999991909919999919909919999909099999999099903099999099 -080910101104120210101100031313141104151313161704151819201700061818010500199901199999999921909999990999009091909991999900999030909999 -080909010400080909101100080404121300081402121300050615121300031515041300999999993090901990991999019999999901990019999999999999929909 -080909031000081111101000081111020400121314141404061516171804151501051900999299099999999999919909199919909099900190099109099390999909 -040408040300090908101100090906101200051313101400151313160200171701161600900990999299099999991999999900919999990990190919990391999999 -080808090400100311121300101004060200051415151600141415151600040117171700999099900999211999991999909900919099999999999191903099999999 -080401090904101011111200101013021200141415151200140315151200040616170500099900930999991999099990919909199999999999999299909900990099 -030808090900100611111200131404111200151404161200021417170100041417170500999992909099099919999999099199099999091900991193909999999909 -030808080800060209040400101112131400101115141400161715181800050115181804299999919090199991909990099999999199991990991009903999999990 -030809100600041109121200131404121200130215150500131616151704181616011700290099199990909991999999999910099999099199999910009939909999 -080909090900081010050300081004111200081311111200141414041204060115160200999999900999999999992990999909999099990909999909003191999119 -080509090300080209101000041112101000041312141500161612171500061601041500099299999990199991999909099919099099099199999109909309999999 -040102080300090910080800090910111100121210110500121210130600141404150400991990319299999999999991999909909990999990999990990909999009 -080808080300040209100400061112120100041113130500141113131500141416160400999290910999190991999909939999199919090999990990999900999999 -030808040900101008020900101011040900040512131400151616141400151616010600299999990999911999999990999990019900990990999909999930909999 -080909090900081011110300081213131400041513061404011616171400041605180200999999099990999990902999999909999099909000993919999911909019 -080804090900100811090300120413021404151616171400151616171400150106180500999999909290999909019909100091099999999999990999993009999909 -080801040904080810101100121310141100151316170200051316181800061303181804999009939099090999919900999099199909190999199999999999909290 -080808090400040206031000111111101000121213130400121213131400050401041400991999192099099901999999999991099909099999999990900309999999 -040808090300101111021200051111131404151616131304171618181800060119191900990990990290919999911999910091999999900999990099903099999999 -050801090400100811090900120813131400121502161400121515171400120403060400999990939099019909919909909999199911999999999990990200999999 -080109091000081109091004080612131300141502160300141718191904142005191904999999399991099090990999199191199119299909990909090999990990 -080309090400081010091104081212021300081212141500161718181500040106051500929999999090999099910999909999199991090919990199903099999909 -080809011000051112121000041312121000131306141400151515021400030416040400909999903990091999999900999990919999999999999911929090990099 -040408090904101002110900101012131400151515150300161616171800050106171800909900909999919999110999919091929999999199999909903999999009 -080803090900080806090900021004110500101012121300141515121300160401041300929999999999099919909999999190009999990199999900909309909999 -080803090500080210111200131313041204041415151200011615151200171717170600992999991090119991999999900991999099999099993190990999999909 -080809090900010810101104121212120500131415160400131702180300131906181804999999909993090091990999999910999090099199999119999992900990 -080909051004080909111000121314021004151414161704151819192000150106190300999909990999909900999909100909199099109199199099993092999999 -040801040900100808110900100612121300101412151300050416021300031717171700999990930999909999190999909909999001990991999019999199929999 -080109090900081010111200081013130400080414151600041702051600061717031600999999300999990999190909999901099999090919999190999999909299 -080109090900080810111204131410020400131516161604131515171800130506190300999999311099199090910909999909199999909991999991990902999099 -080801040400050809101000111111101000121206130200121213131404151503161700999990930099019999099999999900199999199999199999009991999219 -080804010900081011090900031002121300141414051304151516171300151504180600909999093999009999991999119291099999909009999990999009999909 -060108090900101112090300131313051404151602171404151818041900151818191900990990309991099919992999990199099111109999990909999999999099 -080904031000080909061000111111021000040412121000131412120500040115151500909299999990999990909999919990199909990999090199903099999999 -080802090900080810090400030511061200041311141200151311160100041717171700910999919999999929190990099999999009099990990913909909999999 -040808080900031010110200121313141500120613141604121718141904121701140500099099999092911999991999999999919991109019090099099390999999 -040808090900060808090900041011031200011302121200041414141400041515150500090999999990999991199909929911999391999099990999999090909999 -080403090900081011090904081202130600081414131300051414150100161617181804992999099999099099010991199919999099999999990913999909990090 -040308080900100608080900111213020904141515161700141515161700051801041700929990999990999909919900010999919091199999999999990399909909 -080309101000080609111000080209111200081314151604171718151904170501150400299999999999999990990919909910909911009999099019099390909999 -040108080800090909090400101112131300100412131300100214150600161605170300999990309999990919099909999909999990999999091119990019999929 -080808080900011006110904121013110900141516170400040205171700181818180300999099090993999099099910999190999190099109990999991999999929 -060408080300090908101100090902120500131313131400151616171400150401041400999990099299991999019999109901999999090190999999990309999999 -080109090300080809091004111202101000051314151600041714151600061814041600999299399999999001199999099011909919999099990909990999909909 -080809100600031109101004121109131304141109131304151616170100021616180500999099099999999029909999990199999900901909999913919999919009 -030508091000110412091000111113091000040214141000061516171704181818011700909992909999099999099999009919999099099111990199099039999999 -050604080300091011081200090902081200011314141200151514140400151617170400999290009999099990999999199901999399099199999190990999990909 -040803090900011010100900111112130200111114151504161714151800060514041800092999099993999990911990919990909999909099090999900999999099 -080305020904081011121304141516131300141717180100141717191904202020200600999109201190119099999900099999199990399990999999099099999909 -080809031004081109041000051109061000121314150200011617181800161604181800999209099999990999999990999009019000999990193119999099999999 -080901101000080911100200081211131400080411151400161717181404051706040300999999939190019990901999999909099999990900999999009002999999 -060809101004110809120100131309140400131309020500151604170300181616171700999900990999013900909999909999999991090991999909909992909999 -050308080800090909100200110412120600111112121300041414151300161401040400929990999199991999019990909999999909999991999910909300909999 -050809101100010809111100120809020400130809140300150404161600151506161600091999991993199999919909909099199999990991290909999999990999 -080808090900040210030400111112121300111112141400061516141400171704010500991999192999199909190990999999909991999999999009900030999999 -080405090400081010100100021112131300111112131300141512161700040312061700990099090991993919909910999999999999990190099999902909999999 -080802090300040810100400051111111104011213131400151513131400151516170600919299911990999991990909990919999399099099999099999099999009 -040108090600100808091100121313091404121313020400120515161700120318161700999990399090999901990999000999909991999991999000999999992199 -040805090900101011090100101012131300021406151300161616150400171703150400090999099999113999009999999910999199091999099999919999992909 -060801091004110812091010130814141414040815151602171715181619171705031604099999939900000909199999999099991909919099999991099029099999 -030808080204040909090910111104121204110413131313141515151616060517011616299199999109999000991999099999190099990991099999909039990999 -050808080909101010100901111213141415061613141715030402181815192021181804099999990999990399991909199009999909909910099099929199011999 -080109090909080810100411121205131415120216161616171819060304202020212121999999309999099019009099900919999919990990200099999099999099 -080909101103080909101004081213021406051212151601040417151818191919191818999929999199909099919909090990109099939999199091909099999909 -080809100411080405100411121314100611121516161616121717040218121701031918909909909999990900999990090909990999999010190999199399999921 -080809011010080411121310141415161304141417160218191905160618191904160320909999903099919990199099109990999909119099099909999999190992 -080809101010080803061112130214141516131314141504171805191501202021211504919999929909990091999091990999999999900991990991390099990900 -080808010604091011111213051411151616171718151616171704021904032020201919999990903000991090991909919900999999999901009999999919929999 -030604040809101111040409100512121309101414141409021516161701151516161804999002009099909999099999990909009999991999091191399999999900 -080506091004081111111213081404151504161603151504161718181901021718181919990099099009999090900990990099999929909990999191319999919999 -030808040910110808121210111102131414041516171414051616181920212121210106999002999999999999090091199999199009199999199990009003099999 -080809041010080811021012131414151512040306151516040417171717181818050104900999909999919999110909999029990999999909109999900003099999 -080904100411031202100511131414151511131404151516131718181906130118182020190092199999199999100999990990999099909190909090993990999999 -080808080904051010110912041310140901031313040915161616021715041819191906999099999900900099999909903990099999912999999911199990000999 -080409090903081011121313080611021404081511141405011617181919202020201919999929091990990990919999190999999019999190003009999099999999 -030408090910111208090910111212131310110214131310151516171801051920062104909992999999999999009999090999999111999999199900300090990900 -080109040410081109121310081409151616061409151616041402171818041404051803990909399990100090909999999999999099099919990911999099209909 -080809031010080809111010041209111102131314141414151617171717051819040106999299999999099999999109091909919909999991990999900003090999 -080808030409040610100211041212121111131414141415161605171515161618190104992900919909991190999999999099091999990990099999999003090099 -080808080909100304110909101002041201131414151617131414180517061904182017999999990992900999990991903091919991109999999999090999909000 -050808010909101010100909021106121213141415031213161417180413041919200413999990903999990910990090999199999912990999099009900909999909 -050809041010110809120310040813130402140813131516141717171718140401061919999990990290099999909199909099991009919909199999099399009909 -080910041103080909111105081204021314081515161614171515161606181901042020990929909999999090919990919909919991900999999999000300909999 -060808030900020804050900101010040900111213140900111515161700111501160400992990999991990919099999999199099110099919999900999390999999 -080109101004081112101000131314060500151302161704151819190400181819190300990909309991099919999991999091009990009919099099999999999929 -080904031000080911051200080911131404150913130200161718181904060118181900909299999199990999991999990090919009999099190191003999999999 -080309090400081004111100080412111100021312120400141415151500140504010600999999290091999999099990999199099199999190099199999030909999 -080209090600101112131404151112161700031112160500181119202004181801202004109991199099900019999999909299909909999990999109090399999990 -080609090300081009111100080512130200081414141400151516170400150104181804999999099299099999019990919990919099999109099909993909999090 -080809010400080810111200041313061200051402151500041404151500031416161600909999903099901999099909999999019011999909990999999909929999 -080804030900101002111200101013051400151515161400061717181800041717011804999290909199911999199999099901999991999991090909999939909990 -080905031000081112121000080412021000081314140400151614141704151818010600909299099990999999999999919900199999990099090090099030999999 -040808090900100808090500111213131300061204141500011216021500041216160300999990999999909900990900999999999009199991993919999992901999 -080809100600011109020400051209131300141415151304141615150300170418181800999099090993919991910901999909999999909099299099909099909999 -080909090900080402040300101111110500101212121300101414150100100614160400099999919299909990199999999991909999099991990993999909990009 -080305090900081002110900121212131400150416131400151517131400040401061400290999999991110999919999999990999909099909999019900399999909 -030808091004110812091000110613131004111413131504021617170100181917170500999902999999090999099999990909909999001090999193911999919909 -040809091000010809091000040811021200131314150400131616150500041606150300009999999993990999999909109911109919999999990990909099999929 -040809010500101112131404021106151400161616151500031717171700181818180400009999903091110019909999099199999999999199992999990999999909 -080808090504030402101112131314141415161616161515061718181920171718180104999092910909090099199099999909919999099990190099099993099999 -080809040104080810101011061212121211041314140211151514141611150517180304990999909309999100990999999909999099119999999091999902090099 -080808080903101011041204101011021314041516160617151516160417040105181817999920999199099999901099910909109099999999999199003009999990 -080109100603081112131414081111021414151516171818051916161818042020202004991999311029199999919909919909999909099990990099999099009999 -080809090604080803101112131414151612021414171712011818191912042018211905999999990009299919900999999199009190999919993999090999009009 -040108080808091011121212131414151604171414020603171818191919041818202005999990300999099901999999000099909091999991920999999999909090 -080808030909021004110909061011110412131014151616131005171616130104181804992991999991990999099909990990990900999900990990993909099099 -080309100405080909111112080213111114061513161616170413181901171713041904299099990900999999999019099919990919990999099011399909990990 -080909101104080912121101081312121114080402151114161617180414031605180619090009999999991390999999990901999990999910999199099099029990 -040401080808091011121212090513131313091402151616091414061616041703041818999990030990009999199999999909109911999999999909901999092909 -040809101111120809100411130809101406011509161605171718161603171702191920999090999099999909999909000909999309909109999909999999291191 -040808090903100804090904110612021305141412151617141412181617040104181817999920999990999009019990190099909990999990999190903099999990 -030808040409060805100909111204101313110214101313151516101704151518011704299999990099909901990999999910999090099199999910099139991990 -040801090909101112121212101113131404100513021406100404151416171819151503099999030990199999999991990909199999099991900999009099900992 -040108080406090908081011091213141515040213051515031613171704181613171919999090399909999091900991009999099019999199999999029990919099 -050108080909101008080904101011121212130411021404150411161617181811030619999990399999190999019099999009199999190999100999099929090990 -060808090904100808091101121213021414121213041415161713050418160403191919990900999190999390910999199999999990900099909999090209099999 -080509090904080410101112081313101403081302151515011604171718061919191904099999990900999099090999909991992091999199993909090909009999 -040809100511041213101011031202140411151216161717181819191717180619190104000909999990199099199929190999190099190999999990999993090999 -080909040105080909101112081314101504081316041515171819030602171720202020999999990300900099091999999990990909099999910099999020199999 -080905100104041112101313141516101317141819191717141819190402140603202020090990099309000999099900991909099999999999919999999990109299 -080802040509101112131414031104151414061617171701181819191919180420202020919909110901919929919999019999919009939999099099990999099999 -040808080804040909090901100211121313101014121315160514061715030414041815099909999090999399910911199990990999991099099990929990990909 -080306090904081005090911120213131314040404151614171818151914171718150114990999299901909019999011999099919990999099199990099993990099 -040108080910111208080210130506141516171704180316171919202016212119202016999100399190199900001999991099099990929099999909909999999999 -040104080909101010080909111212131405151216021717151518041717061920202003999990309999919900910999900090199999199909999990990099209999 -080808080309101011120509101011110213141516171819142020171721042020040106999929990999999099909190901999919000919909919999199903009999 -080801090210080811111010120611110513121415161703121418192020041404212120999199931199099909999190909999092900099909099909999009909999 -040104080909101010110909121314111515121606111515161617021819031717050420999090300999919999099000999900999999999991099919099909029990 -080804090910080804111210130614111203151616111217011616181219052018180221909999999099999000099999099099992099999990913999991990101911 -040804090903100811090912100811021313141411041315141416171718050119061704990990999929999999909109119909090999999919909109903099099099 -040804020909101111110512131313130403061415151515161717171818161601040418099199001010999999919299999999109999990019909999990300999999 -080805040909080810110909121211110404041314021503161414171717061801191919999999900999990909099099999901109999920091190999990390909999 -080801040909080810101010041112131405151613131417041818021419031818061919999999930099999990019990999099990099099091900919999900929999 -080909091004080204101001111112131314111106131314031515160414051704180414999109199990999391009999099999999909902090999990990909909009 -040106080904101111110904101212040913101212140913100502151515161704181803990900390990999091999999099999999990009919990919909990200999 -080109091004081111041004081111121013080204141013151603171713041618051706999009300991999099999999090990999199090190999999909299991090 -040809101006011112101013141515160413171718191913171705192020022121210320009909009993909091909919909199099909999909909999919999919929 -080910111111120410130503141410151516141410061516041718181819171701202102000990990990990999999299099999999909999000919999909319199911 -080905100106080911121313080914021313151414161718190316161720042121212104990999990309911999199900199999109099900999909299909990099999 -040108080309101108080409121314140209121514141604121506161605121717171804999920399990999901090991911909999999909990999099099999909900 -080910101106081210101301081214021504081214161517180319162020050421162020009109999199099399019999909999190999990999009219909999990099 -080808010909061010110905041010121304141414141515161617041802161603181804999990903999900099919999910099019999999909919090199999099299 -060408050309101011021213141015041616141715151616141718041919140120202020900920909919911199109909999999999999999919090109993090999999 -080910111104081205111113141402150304141616171717181616191904060120202020900999009909999000999991199999120199999999990909003099999999 -040308090904100508091112131408021512161718151512161919202121061919012121929900999999090909990909199909199991909019990910999939909999 -040108080808091011121313141415151616141417021816060519202004212121202003999990309990090991909991999999109909099001999999009099999992 -080808091004011111091205041111091314151606091704151616031819022020201919999009909993900099990999990010900199999999099999919920919999 -080808080105091011111111090406121213090402121414041515161414031515171704999999090300999990019099999999990901990919999990999909029999 -060809090909101011111112131302040312131414141412151605171819040117170420909990099999999990192991099909999999901999091090003999099990 -030809100411040812131311140802151311140815151611141717171818060405040104290099909990099999999991109999999099199990109999900003099999 -040809090410111109091213111114121201150616161616041717040518031919190218009909999909999099909990993090919909990900019999999999929911 -040809090105041009091112131414141212131302151617181818191917042003191906009999999300091099919999999901909991909991999909990999909290 -030802090405101010111212041304111212041415151601171715061818191919191818911992191009991999999900999909919099939099099999909009999909 -080808080909031002110909051212111304141212061516171717181919040420200119999099999992919991190999919099910099909900199990900903999999 -040809100111120805131411121215151411160415151411161702181419160320200406000999990399900090999999999909999999199991991119099900029999 -080808080504040909101112040909131313141404021516011417171516061817171503999099099900900099999909099900999999199991993999191999201999 -040108080808091010051112091310061114091315021114161304171704041318041703999990309990909099999990099991999991000991999909009999990092 -060305080909101112120909101113041415101113131401100216171418192021171404990990290999990999999099900999999999939190999111009999000099 -040809101004111112101001111305141414151617030602181817192020181821212120000909999999009390019999999909991099900992919091999099999999 -050808080804091006111112011013141212021516161704181816161919031804201919999900099990099999909931099991909119001999999990999999929009 -080808090104100602111112101313111112041303141412151515151412051604171804990990090309919099199999999999909029999999999990990009909900 -080809090903101002041111101012121111131415120404161617171717160105061804999929019999909999199999909091990019099199999099993000999990 -040809090405100809091112131415151515161616161717181802191919180320210106909990999009999009909000999999909999099999099199999113029199 -060808090104040808091011121304101014031515150214041617171814161617171905099999999309909109909109099909999299119999099090909999999900 -080808080904101003040211121213141415121206161515050417171701181818181904999109020199999199999190099999099990999990199099309990999900 -040806090910111111020903121313141401041305141415161617171717181818041920099919009929911999199909193090999999909999909099999099099900 -080806040104080509101011120909101013121415151513121617180219040320202020909999990309999000999909999909919909919999919111102990999999 -080803091010081112091013021406090413041516161718191916160405191901202020999099929991199919999910909919090019009999099099999309099999 -040108090909101108080512101111131414100406041414100215161616171718190304990990399901099099909099999900099999999999091199990199099129 -030804091004111209091006111302141015111617141015011618192015041605191915299909109999999991909091999991999091999991093110099099909999 -080909101004080909101001111112121212131402150616171418180519041403182021999909999999999300091999999991990010090999909999009999092900 -060801091010040809091010110812131414111102041414041516161718031920202005099999939999190909999991009991999910999199900999091090029999 -030802060904080810040904051010110912131414140915131617171819130117171804919002919999990999999099900019099999909199900099093999099999 -080808091010011112130510141414141516170218040416171918040616191918032016999099090993900991099999900199999110909099999909999990999290 -040108080910111108081206111113131414151616161614150217041819150520200304999900399009090999999990909109999999999999091109090199099929 -080109101010081112021304080412141315081612141718161612141717051920030604991999311990190990919099999999900099909999999999999020000999 -040308090906100408090404100208111213141414141313151515161604051701161618929900999999999990900091909019009999991990999999990399009990 -030809091006080809091104021213131415161613131415171717171418040501191404299909999099999019900919999919999919999919909999000309999900 -080808091005041109090312131114060412151614171712151514171702040114180404999009099999999209099999999009009999999099919119103909099909 -080808080109041010110909041012121213141502161718140304051719202020201706999990990399900999991909990999190111909900992999099999099909 -060304080904101112080913140215080913161617080913161618181919040518180119990990299909199909199991999019999911199999109990909993990999 -080808080909011011040909040602121212131313141415161617140318161605191920999099110993999999199990099091999999909019909912999099099990 -080806040105080809101112040413141112151515161112171717161112031819190204999999900309009900909999009990999990999999999909099991921910 -080808090909020403100504110612041313111412151513111617171518110117171904990991020999990919999009099999999190999109909099093999999900 -080409101106081213130414081213131515081616171815191616171820040105021803909099900009099999999099999909999091909999990999103019299919 -080808080309041011120909041314121504061314021617011314181919052018181919999999099290099999091909099999910099199991903090991999901999 -040108090909101011061212101313131312140215151604051715151819202020032121990990309999009999999999990100999199000199099999091999099299 -080808080909060410100909041110101201031314151205161313171218192002172118999990990999099999990900903999999991102910999999919199911900 -080409060310080811121314151616120205151617120404151817191919150120202020990929009919099190991999910999999091099999900109993099999999 -080906011011121314151611051317171717041318190220211318191920212118040320009900093099010909199999999999919909010999999999990999999092 -080808040903061011120909051314151602171714151618190414151620191914011604999929900990999990009100999999991999910999999001099939090999 -080809101010080809021103121209041306121409151516051417151516041801190416999999991929910990990999990999099099909919990009990309909909 -040809090410111105121210031102120610041314151616171718151616171719150104009999990099999029099991999991900001999999999901999093090999 -080809090903080410111112011313111114151515150214161718190414061717200504909999999029099999099139199909919999910009999909009909099909 -080803090906080810111111041210101304140215151301161715151305171718192004929909990999999991990999900019999919930999990991099990990000 -080803091006110509091213111404040215111414161718111920202018212121210118992190999109999990991099991990091990099999090999190903999999 -080808090903100504090911101004021213041415151504161414041717060118181717990990009929999999999190911909199919900990090999903099999999 -040408080109101006111209101013141409041313141409041505021617151503181917909990900399999099901990099999999099999091909091909991999219 -080806090903040802090910041111040510041111121310141515131301161718181818999920909999019999199909999999009990900919999919309909900999 -030808080905101112040906130414150904130414160917021814161617181814010417999002999999099010009999999999090999901099091919999930991999 -080909040110110912121313110412121313060402141516171717141616030405140418099990900309999999999990909099910901199919999999920999099090 -050809030410080811121213141415121213141402061613171818192013172121210104002909919909999999199999999991909909099919099991099113009999 -020808080304090410111112090910131306141510131304161718180419050118181919199291999909009099999999990199999900901099991090903999999909 -080801040910080811121204131406121215021616161615171705181915031704182020999009939009109991099919990109999999991990099909999990929099 -080809101005080809021003111212130414111212040614111516171814110119202020909909991999999209919999109999099999999199090000093099999099 -080809090904080806101011040412101013140315151515141602171818050419170118909999999009099909999090999990900299999999091191900193999199 -080809101003080511101012131314021212131315040616011718181818041919191904909999909929909900999991119999999900909199903099999099009999 -080809040310080809111213051409110215011416161715181416160415181419202106909929990919999190991909090999919319199999090999999999990000 -030808080909060404020410111205131414151516171414151518181819202020200119299999991909909000919009999090199990199999109099999903999999 -050108090900101108090904121108041300141108151300021617181904161617030600999990399991009019990999999199099990991990991190099990999299 -080806090900081011110100121311110400120214151604121718151900120305191904999999900990193991999909999919909910009919999190992999999090 -040802090300101112090904101314141504101614141500051717171700181819010600091999019299999090199990990999999009999919090999999030990999 -030804010400090808101000091102101000051213041400151513161600061504161600999992903099909999999911199900909099099999099099999999909099 -080104090900081010040900081010111100081204051100021314061500161614030400999999309991999999900999099909099909991999091190909990999299 -080809011004021109121000131409121000150609121604170318120400171718180500919901993999010910999999999109999999001999092909999999999909 -080910111100081204130100080206131300141516171704141616171700140503180400911999191990903991999999099019099919909999999999999209909909 -080409011000080809111000041209111000131309141000130215160400030605171700999999093999990990999900199999999990999110099199920909999099 -050108090300101008091104121008131100121208021100141516041104170618181800999990399299199099909999099909999991190090999099009099909999 -080808080300090205101000091111101000011111121204131414121500041416060400999299199999999991099909999999099390909909990990909090999099 -040809090400011009091100101012021300141512160400141512161600140512060300019099199993990999910990999909109099999999999999999992990099 -080109090500081009090400111010120200110413131300110614151600111717030400999099399999999909090909119909919999999909199091999020999999 -040809090900051003110200121313141400061313141404151617171800041616011800099999091199929900991909999999999090909091990990909939999999 -040308090500101011121304101011020400141515161700061515161700181818011700921090991999990099910999199001999999090999999919999039999999 -040806030400080809101104121213141500121202141500161617141500160117140500009999992099919090190999999991999910091999999099993990999999 -080309090900081006111204081010021300081415151304161615171800161605010400999999299099909099900909119999999099109091999990999930990999 -080801090904100811121200100513121200031415161704181819200600181802202004999900939099009990199999999991909290909110099999999199991990 -050308090600101109091200131104021200131114140400131114141500130104151500929090919990999999919990909999199999999999090190993099999999 -080109040400081009111200081009111100080513020600141513161600040413031600999999390090190999999999199999199090090991999099900999999929 -040808030500020809101000111109101000111109121300141415121200041601060400992990999091999919999999999999909900999199099199990300909999 -080104090400080810101004111102120300131313121200141516171700180506171700990999390099099019999991199099929999990099099099909099909999 -080804090900040810090900060211120100131415161600131405161604131403171700999990909999019999119901939910999090999909999999099909992999 -050804030900100811120900100411110900101302141400101515151400041604010600999990902990999999919990909991999919999199990990990030909999 -080808030900100411120900100613130900141413130200141515151500050104160400999290999999009999909990999099919999199991990999903909999009 -080909010400100911111204100511130600041414151600031414171600181818021600099990903099990090910999999999199090099991999999929919999199 -080809041004080809111000121212121000011314140400151514140600031502160500999909990999099990909999909909909319999999999990929919991109 -080309090400081009091100121314141500020516161604171818181804171701190600999999299099999901090919909199099999901009999999091309999909 -040404010800091011110800061212120800131314020800131315160500040315161600999990003990991990999909919990199909999991099919909999992999 -040108040900101112090900131114141400131103150200161604151500161605061700990990309999009909999901999999919992990999199099999990990909 -080409031000080809061004110209121000131415041000011617170500161618181800092999999999999009909911009199999100999199993099999090999999 -080905101004080911121004080913020600081414151500161414171500160104180300999909909999090099900990199991199099990990999999993902999099 -060108080400091008111200091304050200091314141500161614041500161604031500999990399090111990091999909999919999099099999990999099999929 -040806010400080809091000021109120500131114151500131104151500160317171700909990993099090999900911999199099990999909999999919990929999 -080109101104080909060200121313141404121313141404151617181900052020200300991109399190990999091909990999999999909990190009909902999999 -040804030500040904101000090911101000121211110200121213131300060104141400009999092090999999099999999099919999999990199199903009999999 -080109090600081009091104121213130200041213141504161617171800161605031900999999399099191000091999999999019099909990199099999091999929 -080309051000080411111000121311111000141402040600151617181800161601181804929999910999999900999999909001999919991990091109999399999990 -040401040600080910111100090912111100131302141400131315151500030516160400999990030090919999999990199991909919999990999999929900990999 -040808080600090305101000111213101000111114140400021514140400161601171700999990990099999902099919999990099999091999999199911300999999 -040108080400091008081100050612121100131312121400130215161400030404161400999990399090199909199990909999909999999110999199920999999099 -080809090300100809091104101202111104101314150500161616170100061819190400909299999999999099199991990919099911090991999903999909900909 -080603090900081011050900081212130200041212141504011617171800191919171804992999099999099999001909999999019099909090193191990999999990 -040103080800091011021200131313140600151616161604151517181804191919051800992990399190911991199999009990999999909009999909090909999999 -050104080800090909080800101002111200131314111200131516110400040306111700999990309999909919999991909991999900999919999199902990999009 -040408010900101108090900121108131400120208141400121515061600120317050400999990093990999999910999199909999019999190099999999190992099 -040801091000041109091000121113131000121113130200141516061700050403171700099099039990999999199990999999999099190099199009900999999299 -030808050904100808110900100402110900100612131404151617181900151501191900299909990999999999199990099991909901000991990010999399999999 -080109091000081111101004081111120600081304141500160217031800190517171804999999390991909099990999099999099909091099091199909929909990 -080803090900080810091104021213141404151515150100161718191904050620202000999999929099999009190911990199099999390990999009000099999999 -080809090900080810060500110312131300110414041300110215160100041717161600999999909999009999090929099990999909999900991913901199999999 -040801090904100811090900020812131400151612121704151618061900150318180500099909939991909919199991009109909999909909099990999999929909 -040809090300100211110500041211111300011415151500061616171700181816171704919290199990199999990900999991909319999099990909990999999990 -080809090400011010101000111204050400111314150300111614021700110614171700999999009093999991090909999919099911999991290999990919999999 -080808030600050909091000110204101000120404131300141515131300141401040400992999199090999991909910999199999999991009991909999300999999 -080106090900080804090900101010101100120504041100130214031100131515040400990999399999909919909999909190099099991999991929991190999099 -030804090500061010101000021112131300141512130400141512160400041501161600299099100999999901999919999199999990099999991109999390909999 -080909011000041111111000121313141000120215151600120615151700120305041804099990903999999999919999109919009199999999099099999090929900 -080801090400101011091200101013091404150513090200061613041700161603171700999090939999911999091990990009919999990990199099999999999299 -080309051000081109061204130209141500131316161600041718180100171718180400299099999091990091990999009919909919999991990093999999999909 -040108050600090910101000111212131300110412131400110215161400110403171400990990309099999919099909099909999999099999991119990919999299 -080104090900081006051100121212131300141402151300141416160400170416160300990999399091999919000999999091099999999910999990909999909929 -080808010400090910111100091212121300050214041500161614141704161618030600999999903099019999190999999910909990990199099999099990991299 -080808080600090210110100090510111104091213140400031516160400151516161700999099101991993990999999990999009900992009999999999990999909 -080809090900010810111104121213141400121215141404031602171704061819200500999999900993199090109999999991999999909910992999091199901009 -030809091004110808021000121213141000121206151600040515151600041718011600999902990991911999099990919999199990090999999099999039900999 -030809091000111206091000020413131400151513131404151616161400041701180500299999199991090919909990999199999919909919999990990309909909 -080801091000081112131004141515131604171515131600021804131600061819030500999099930990009099199919900199999999991909991999909990991299 -040801091000041112091000131313091000021414151000160605151500161603041700099999039990009999199999909109999990991099999909999990992909 -080901031000081112131000041212021000061414141500161617151500161605040400099999032999091999999909919991199999990009999909999000999999 -080109091000080809091000111213131004140215161004171819161604200519030600999999399999090991999910990190999190900199999199009990909299 -080109091000081106091000081213141004151617041004150218180500191919190300999999399991999999009910000019999900909199099099991999999929 -080806040900030802041000111111111200131414151600131717171704181818010500999092909099190999190999999999109990999991099999009030999999 -080109100400080909111100081213111100080613141504160213051704161603181800990099399990909991999991999909909990909990091199099990992999 -080805010900080810100900111112100900130412120900140415150200060316171804999999903999099990999999019009999999990999190990909991992110 -080801060900080810100900051110100904121314141400041516021700031504171700999999930999090999999900990909199099990991999119999909929099 -080809090400011010101104121313140600151313161600170218181604190518180300999999090093990091999919009199999990991999991199009999909929 -080901101100080910101100030902121100041314141504041614170500061818181800999999939991990929919991999991109009909990090099999909909999 -080309091004080409091000081104121300021412121500161616161700181805010600299909999999999990900990999109909909991990099990909030999999 -030804090900040808090900101102120400051113131300141515151500140601041600290999999999999909109909909091099999999091990999990390999909 -040809101000111209020500111313141400111513141400011616060300041616170400099999090999010999119999999999999099999019293909999999909009 -040108090400101111121300141111121300141506021300151516161300051716030400990090309990910999999909999909199909999991999999990990909299 -080801090900080810100400110510120400111314141400110415020600111616160300999999930099099909919990909999199099999091999910999199999929 -030405080800091010080400091112130100140212121500161616160600041717171700999992009999910991019999939119999199090999099999909099999999 -050108091000110808091000121314091000120414141004120406031500021617181500999090399991909919999909999909099999909999990999919029911109 -060308080900101002090900111012121200131314151604131317170400050117170400929990991999919999199909999091999990009919099199903999999909 -050808090900100808110300121314021504121617041500121818181804060119191900999990991290999990919999100901099919999199990999003099999999 -050809090300101009061100101202041100131214151100131616171804131616010400099299099999909999199991099099999011099991999900099930999999 -030804090400040804091000110806091200130205091200131414151600131414011600290999999099909909990909099919999199999900091910999939999999 -080409060300080209091000081104121300081405121300151617181300150118181304099999990291191999999990999909999199999100990009993999999900 -080808010400090909101100120413141100120213151100161613051100170313060400999999903099910909109990999999099919999190999999919990929099 -040108090200101010101104051213141100151212141100150616160300171816160400991190319199999090099999099099999099999909299999900999909909 -040809090500040409090100101102121200101313141400031315041400061616161600009099999999093909109911999999909990992909999990999099909999 -040501030800091011040804121314140800121514140200161617170600161618181800999290039990090009199990999909919999199009999990999099999999 -040808060400010808090900101011090900121005131400150416021400031616171700090999999093919990099999999090109999990991990919999909929999 -080409090300080609020400081010111200041010041200131314141200050114151200099299999999910990919909199999999090999199999099903999999009 -080809011000080809111004051212121000041314141500161614140600031702180400999999993999099009019999999909109099099999099999921109991909 -080803090904080210090900111104120400051314141500061614171700181801171700929909999991009991999999099919009099999199090109990399999999 -080309100400081111101200081304021400081305151500061316171500041301171700921999999099999990910900919999919909990991999019999399909999 -060108080900101112130904101414040900101514161600170218181600050418180300999990390991000099999999999909099199999199990191909992990999 -080501090904101010091100121314151104120402161600121718181600061918180300099900939999919999919900100901999990999919990999990999909929 -080404050900081011031200081011111200081013021200141516161200140106160400099099909099929999999999999999199009190909999191993090999999 -080801091000080809091000111112040200061312141400151612141400040512030400999199939999099990991990909099919909999099990999900920999999 -050408080804091011030600121211111300121214021500011616171500041616171500999900009999029909990999909999199900999991993910999999909999 -080804090900031010090900050210110400121314141404121516171800120116160600909999099992999999909991009019999199909909991000993990999999 -040804010600080809101000111212101000111314151500110404021500031616160500999990903099909990999909099999199090999009999991999910929999 -080909090400080410111100081213140400121202151600051717161600031717010600999999909099009999909990999090009991190919999999999930929999 -080509031004080411121000131314021000131315151000011615150400061717171700909909902999919900199999109999199999999099993190990999909999 -040104040500080909090900101111061200131114141200151602140300151717171700999990300090999901900999999099999999990119999192990999999999 -080903040600080909101000051102101000121314151500161617181804161619011804929999990090999999199991999019099919990910999919099039990990 -080809010400080210101000111112120400111312120500030414141400041515060400919999113099999991900999999999999909992009099999999090909099 -080809010400080809101100121209130300061414141500161702181804041717051800999999993099090999919999099909129999990919190919099099909099 -050808030600040808090900101011021200101313140400151313161600040117171700099999992090999999091999919990199991090999990909903099999999 -040801090900051011090900121211111300141402041300141515151300031606170400099999039990109991999999909919999919099919999999991900929099 -030808080200090910101100090910101104121213131300141516170100060405180400299199999199999999999990990999019999999091990003900909999009 -080106091000081112131004141512161000141515171004140218190400140518180300990099399999100009909991999999099099909190999190990999999929 -080809090900041010021100031010121100061313041100141413151100041617010500999999009990991999919929199999999099999990999001999030900999 -080109090900081011040500081213130300080214151600041714180600171714181804999999309091009990999990999999929111190099999900999999999990 -080804040300040809091000111202101000110613131300111415150500110115150400909999990299999900099911199999999099999909991090993999999909 -040105080400090910111100090910111100120213141400121516171400151504030600990990390099999999999990999199099119999019999910999920990999 -040804090904100811110900120811130100060814150500031602151700181818151700909900999999990909999901139099999910099919992990991199999999 -080803060900080805101100021213131400121213151400161718151400160404011404929099999099909919900999999199999909999199990110990039999990 -050803040900100811110900120811110200130806041400011515161400041517171700999090929999999909990999919099919099999000993911999999900999 -080809100500080803101100041213021400121213061500041616171700041601171700991999929099999990910900919999919990990909199919999399909999 -080804030900040802101000011112040600051113131300141115150400141115150400909299999190919990199939099991909919990999990090999999999909 -080909010500080910111104081202131300080414131300151616171804190616031800999999993090119091909991999901999999990910999990009999909299 -040808090904100808110900100312111304101412150500101612170100021612180600099909999999999999090999900929009199999990999993919919911109 -080801090600080809091000040411101000121302141500160504141500031717141500999999939099099999919990199091009119991099999909929999999099 -050808090900010808090600101104121200130204121200141415151600140304171600099999999993909991900910999199999109999190099999999909929099 -080409090904080802100300111112100600111314101504161718100500160119191900099909919299999909199999999991909019000199099009993099999999 -080501090900081011121200081314061204081502160300171518181900041518181904099999939099109991999901990991099091990991299991909999999990 -050408080800090603040200101111111200101013121200141515161700041515011700909990929199999900901999909999999900999091990990909939999999 -040809101004011112101000131114150200131106051604131117181800191917031800000909099993199999199909119990019999909999199099990929999999 -080809090300101009091100121313051404121513041604121515060200120117181900999990999299990909991999090999919990909909190909993191999119 -040801090900100811090900120811110500120813140600021516171804040316161800999990939990199999900919999990999990091990991190009999992999 -080309090900080810100200011110101200061304141500160504151500161717170400929999999199999990991931919909099909990090999909999900909999 -080903101000111212120400021305141400151515141404061617181800161601041800129991990999999910990999999100999999909010990909999309999999 -050804090400101111090600100311091200100413121200141515151500021616010400099099009999999999990929999990099909991900999999919130919999 -080909090300080210100600111110041200111113131400051513131600041501040400999299199999999901990999909990909919990099099990999300909999 -030801040900040810100900040802101100121212120500041313141400041313061400299999930990999999990901909991109999999900990999999999909909 -060801090900101010090904110212130400141503161600171515181804171705181800099999039999919009919991109019999999990929099909099099999999 -030809090500041009091100121302141400151616141400151717171804151906011804299999199099990901909991199099999090999991999990099939900990 -040804090300100811121300141402061300141415161600171717171604050118181800999290901999919900199999999991009910991999999999003099999999 -030805090904100808090900101112121300140206121300040415161300171717011300990902999999999999009991909119999190999991999009909039999999 -040808090900101108090904011212121300140515161304141417021800031919190600999990999990009099099939999901999999009910099019999910929999 -080909091000081105061004011212131000141212150300141416151500170402180400999999090990999090099939009999999999999199299199909119909109 -040809090400080803041000110212061000111313131000111415151000110105150400909090990999999909299919099911999999999999991090993999999009 -040809050300100211111100121213141400151616141404011616171800191919061804900990099299199901099999099199999199909999993900990909999990 -080809101004081111101000121314050300120215161704121818181904062001191900990909909999999900999990099909929111109999991990090399909999 -040408080600091003080200101011111200041313131200141415161200141405010400999990029099991909901999999909999099999990999001999030999999 -080802091000080811041000041212130300041212131300141414151500060501041500991199910999999990192909999999999090999919999909900399999909 -080801091004111213141000150216161004151716051800151704181800151703190600999000930991109919999910990919009999999909999999999909992909 -050809091000111109091000110306021000040412131300141515161300141515010400009999999999199992019999909099199900999909990991999930999999 -050809011000080809111004121213141004120215061000031617171804192017171800009999993999910099199990090991099919999199099990021999919999 -040808020600030809101100050909101100041213101100141414141500041601171700091099991992999999999909999990999009999901099990990309909999 -080809030500100809111100100212111100101314151604061714141604181920011604992999999099999990199901099919999999009190999199009039900990 -080909090900080610100400111110100100111212040300051212131400041502131300099999990099099999999990939991099999999999290991999199900199 -080808040300090910021104090910111100061213141500041617171500051801171500999990990299919099919990999901999090099919990099990399909999 -080803010400080409090900021010100400041111121200131114121200040605151500929999993099099919910919999990099999990909990999900009999999 -050108090900100808090900111112130600111102141504041617141500031818140400999990399999999901909990009999999910009919990099999199929909 -080801091000041111091000121111091304020514091300150316161300171804160600999999039999900909999919900190999099991909999999912099919909 -040103080900101105020900061212131300141414131300151516171700150404171700992190399990091991919999199009999999990900999999999099909999 -080809090900011011040600041111121200131313120400050214151500031617151500909999099993109999990999099091999999990190099199999199921999 -080309101000080609101000080209111204131309121200131314151604051714010400299999999999999990909911990999099991999901999990000930990999 -080909040500080310111200081310100200081313061400151515151400041601170400999999900099290999990999919999919099999900999991990309909909 -040809090400010808101100121314101500120206101500121617171500120405031500009099999993900999190901999919999999999109999199990029999999 -030808090400100808091100020506121100131312121400131315161400041704011400299999999091999919009909999199909919999919999910990039909999 -080802091000080611121304030414120100151414121600041717121600181818051600911199999199091029099999039909999099090099999999990909999999 -080305060904080810101100120210101300121415151300160415151300161718011304299009909099999991990901999991999909999099999990999039900990 -080808010900041011120900040213130900141413130900151416171700030516060400999999903990001999999991919019999999991909099999920990999099 -040808090904040808100100111210101300111415021300111603061700051818181800090909990999993900999909919999999911199190099299999990909999 -080910030500020410111100121314111100151314160600151514170400040114171700112991999090999919999999999199099900099099999900903999999999 -080808010400040910101104061210101300121214141500160214140500161717170300999999903090099099990900909991999999099999090199991999999929 -080401060400080809101000111209101000111314051500110216160400111717160300099999930099009909999991999919909900999199099199990999999929 -080808030900101106040900101004021200131414151500011414161500171717040500999290999999099990901999019099199091999990993999999000999999 -080609090400080209031000081104121304081414151500161414150500160117171700999999092099199991990919900990099199990999999900993099999999 -080409100300081111120400131114150200131314161604171814161600170114050600909299901999999909910999919909919909909999990119993990999099 -080106091004081112121004081112120200081113141504161718190300161618200500999009300990199099999999919990919999109001990992999999999009 -050808090900101010100900040411120400131302120300131314121500161601120600999990090999999999090999199001999919299999999190990390999999 -060108090500101008090900101008110300121314150400161602151500161604171704990090399999999999999990929019199919090919999919999990990990 -080809010500040809101000110209101000111213141400111206141400030415160400919999993090919991999999999910909199999909999999929900990099 -080401091000111213131004141413150200140516151704181816151900181816030600099190931990099090991999919990909909909999099099999920999999 -050803091000110804021000120813141400010813041400151516161700150616160400992190999999091909919909199999999319999090099099990990999999 -040809010500101009111104101212111100131212060400131402151600130317171800099999093099919090199999999999909999999910991100999990929909 -080601090900081011090904081213131400021515150400161617170500031617171804999999039999109091999900909919909199991990999999999990929900 -080909100500040909101104011213100600141415150200141415031600171704181600099990999099990099099931109909199999199999199999990929990919 -080804010400080809101000060209101000111213131300141516170500031818171704909999993099199991999909199919909199991090099099929099999990 -050801040900101111110900101213040900100614150900021615151700041616031700099999030991990990009999999900999990991999091999909999999299 -080106090400081010091100121010090500121202090400131314150400131314160300999999309090910999999909909999999991099010999990999999999129 -080910100300080910100400060902111100121212110400051313140400151301160400099299999999999999190990199099999990099991999910909309909909 -080109101000080909101000080511111204131415021600130604171800130317170400999999399990909990190999990990109009999001099999999990992999 -080910011100120910111100040210051304141415061604171818191900031818191900019990993999919901900999990910909990901909099999929999999999 -080809100600080311101204131302101204141315151200161715151804160105192000919099219999999099199999990991099099090999990190093990999009 -060308090900101108090900120204130500141413131500141416171504041616011500929990999999199901900990999019999999999909999110009939999999 -080809090600040809090300100211041200131314141400131315160100051717171704999099999999992900199901909919909999999909999113909909999990 -040809011000111112131000111114131500021616131504170418131500171703050600009999903999910999199991909109999999901999999009999900992999 -050808080800020904100100111204130400111415150600111415161600031717171600999990191991903910909990909909099999099990999999929909999999 -040809090904101106120300101314020500151614141704181819191700180119191700099909091299909990919990999099109019009109999999993999999999 -080909010600080510111100080412111100041212041300031402151300141404041300099999903099009999999999199909009099999919999190929009999999 -050106080400090910101100090910100400121314141504161302151500171717031800999090300999090999990999999010999999900999999119909991999929 -060801091000111111111004050212121300041412121500161617170400031618181800099099030999999099919901909919909099999190099999929099999999 -080808010600050909090900031011111100120204131404121215151600041715181800999999903090999991909999999210099999009199099990990909909999 -080808080400090903101000090211121200051111121200131415161700040615010400999090999999299999909919999919999999990910990010909930990999 -080808030900051011110900040411020900121314150600161617181804160117181800999999902990099999999990109099199001999919099109093999999999 -040108080500090909041000111112101000111112130200140412131300151604060300999990300099999909199999199999919999190099999999909902900999 -080905101104031212041100130214151100131314141600061717171700181818010400190002199999999991909991999999009999099091990999999030999999 -080109090400081010101000080611120400131411111500130216151500130504040300999099309991999999009990909199999199999199999119990002999999 -050804090900100808091100120313131100140413130600150216160100171716160400999990909090999999099929909199999999091090991993991999991909 -040809031000110809061004120809021000131309141400151516171804151519010500999290999999909009999900119999999901999991999900099030990999 -080803090500080806091004021112091000041312141004151512161700151512011700929099999999909019999919999919099999900190099110999939999999 -080909010600080909101100120413141404121516051404121717170200120318191900999999993090901999091999990900999009909990199991999190992999 -080805030900101011060900041011020900121311140400151511141600151504010400909290999999999999909999119009909001999099999990999030999999 -080803090904080810090600111202130500141515161604171815161600170119191904992909999999910909199911009199999990901099991999993099999990 -050809090400010810101100120810111100120813021400121516041400040604031400009099999993090999999909999999999911199909999009900099999929 -080309090500081011111200081011110600021313141500161313151500170404010400299999990099990999999990909199099190990999999919909030909999 -080801040900080810111204131414150200131616151700181616151700060519031704999099939099190001909999119990919999990999999999909099990920 -080909031004080902111204080613141404151515141400161718181900050118202000099209999199911099199990990091999990999109090999903990999999 -080809101004080809101000011112021300141414141504161718151504160619050300999909999999009999099930919919119999900099999099090092999099 -080109090400080809090300101111051200101314061500101616021700100418181804999099399999099991902909999919919900999199199911999099909990 -080808040904100511090900101002121300141516041300031516171300061816011300999909900999009999990991119199999909992990999901999939900999 -080906101000110212101000031312141400151312141404151516161604051718010400190991199999199929909999999999999999909010999999000030990999 -030809101000041112101004131402151600131315151600171818181804060119190500219999919990909090199911999999999909991999091999003900999999 -040808090900011008090500111213140300061513141600171702181804171704181800099999099093909991999901099009929999999019199919099099999999 -080809010400040909101000111206101000130514021500131614170400130314171700909999993090909990099909999099919091199990099199992999999999 -080808020900041010061100011010031204131314141500161314141500051718181504991199190190999999991939920909999909090999999999900999990990 -080401091000081112091004131414091000051414090200151506161704151503171700999999039999999000199909109099999999199090199909099999999299 -040809010400101111111200101013131200140205151200141616061200140316041700009999903099999991909999909919999109099090999999999990929909 -080801091000111112091000111314090400041313090200151606171700040503171700999999039999090990199999199099909999199009190999900999999299 -080808030900021010110900121010110900120413040900041413131500051601060400992991999991999999999909099991999999099099090090990300909999 -080805040900030802060900040410040900111210131300141410131300151510010400909092999999109999199999999009009909990999999019909930999999 -080804030900080810090900061104121300141502121300161617171300161601050400999999902999099990919999999000999111991999999190999300999999 -080909011000080909111004081213131400041504130600161602170500160318181800099999993999900099919990909909909090999991999110999099929999 -040809091000110809031000110512131004111414020400111414151500060116151500999990999990992999099909910990199099099991999999903199999199 -040108090900101003090900111004021200111313121200111313141500040504140600991990329999999909919999099919199991999990099999900090999999 -060809100400020811120100130805141400131515141400131504161604031717161600011099901991993919009999999999999990999909099999029999999099 -080803090900080206090900041004111200131014141400151005161600151704011600929999999991909991990999909090099019999901990999990939990999 -080609090300081009090400101002041100121304141500131316141500040105141500909299999999999909190991999199009990991999999009903099999909 -040308080800091011120600130211121400151516121700151518121704041818010500999990209991999919990911999991909999999919999910000930999999 -080808080400060910101004011112130500041413131500160217171500161603181500999999909090999090090931999991999919990199991099999909992909 -080109090900081010111100081213141504081202161500041217181504061203190500999999309991909999999911090991099999090919999919099919909209 -060104080800090909080800051011110400121212121300141402041500140316160400999990309999999991009999999019909999099919099199999000929999 -060803091000111213141000151516171704180216171700181816191904052016011904929090190990909991099999990919999199999999099119090939909990 -080808080500060910110400121210130100121210140400151516171704031502181800999090990999090990909999039999199999099991999919029199991099 -080109090300081009111200081013140600041015020400161617181800160517181804999999399299991999019900909999199011099090999099990999999990 -040601080400091010081100121310081100121414080400121516021700120503171700999090039990999999999900109990999999099901999091990999999299 -050408010600091008111100090408111100091208021300141212151300140316170400909990993090099999999990099999919999199991990909999919992109 -080403090600080210111204081313141200011313140500151516140400151516161700992999091091119099999919009999909399999009999999999990999909 -080509090400081011121200131415121204161414021700181818181700061901031704999099009999999900099999990090099991190199999999990399909920 -050801090300101011120400101013120200061414141404151516161700151816161704099299031999099999190999919091919999909909999990990999990990 -080109101000080809040200111209131404111516051400111718191404110619190300991999399199190990991909900909099909999009999909090992999999 -040804010600090810101000090811121200041111121200131302140500130315160400009999993099999999109900999999999999990019099919999919992109 -040408010900101008080900101011110904051213021400151603171700061818171700999990093999999999919990910999919900190091990999909299999199 -030808040900101010020904111213130900051413130900151617181800150406011800999092099999919090919909999099999909199009190999990039999999 -060809091000011109091200131414041200051414151500161602170300160417170400099099099093099991909909999099999990999019999992999199909909 -080903100200080910101104081204131100081205140600151216170100041818181800999199929199999090999999019999199999090901990003999099909999 -080801090500080809091000061112101000040212130400141412151600171717030400999999939099199901999991099999909010999190999990991990999299 -080909100500080811111104011213140400151616170200151606181800151903181804990099909999999090099931199999109990199909199999990999909290 -080801090900101111090904101211061304101415151304160215171300181903200500999990939999909099999909090901999919009190991999919909912909 -040806010900101111110900120413130900040513130900140215161600141403171700099999003990999909919990909099999999999019091199999990992999 -080801090900100811110400101011111200041305141200030602151200161616041200999999930999990990999990909909199099999001999919929109999999 -080910110600041210130100021410151504161410151504161405171700160318181700099090090999013999909911990199999999909999099909999999929909 -080504091004110312131000141412151600140412151600021712150100171718150600090900990999999902900999909999999999991099991903999999991109 -080109100300080809101100121314151604121314020600121314171804121305041900990999399299099901991991910999199991999990099990099990990909 -050804030900101112090904131312020400141312151500141612171700140106171700909290099999099009919999909999199909999991990119993099999999 -040108090400101008080500101111111100120213131400120615041400120316041400990090399999099999990919999910909199999009999909999099929099 -050108080900101011080400121013130400041414141500061616021500031616041500999090399099009999999900909019999999099991990919999909929999 -080404090300080209091000081112131000041412121000151616161600150104060500099299909991199999999919009919999009999199990999993000999999 -040805090900100802090300100811121200101311140400131311151600040111170600909990999299119999999999999919099009999990099900903909999909 -050806090904101112040900101314141500100402141500101616171500031818011500909900099990009990990990999999999901199919999991999139929999 -080809090400080809090300101112131304101014140200151617181800050619011804999099999999992990919990990990919999199019990019909039990990 -080804090900080810090904060511121200131415161700131415021800130115040300909999999999099000009999099999099019199991199919993992999099 -080910031100020412121100130412120400131415151600131415171700130105170600112991099999990919999909999990909109099999999909993099999909 -060808010400090808101100091204131400091202151400051616151400031616041400099999993099909999910999019999999001199919990999999909929999 -080909051004040911121300061414150100031414161600171818191904171702191900099000999099090999009909139999999990992910999999099199991999 -080809090900040802050300101011060400120411041300121411041500120111151500999999919299009909199990099999909909099999090109993999999099 -040808090300100808090600111111090200121213131400121516161700040501160400999290999990990909999999919990919909999909199091900399999909 -040108090600101108121300101408151304100208161604171718161600190318180500999090390999000991909919990999099199909199999099919999929909 -080109090900080810101100121305101104141515151100040216031104171718190600999999309999099919999910900019999999990199999199090120999199 -040108091000111112041000111113130400060205141400151516161400150316160400990090309999099999009999909019099909999190999999999990929999 -080309101004080909101000050206111200041313131200141415161200041417011200929909999990999991909900999919099999090919999919999039900999 -030808090400101010111200021304060400141415150500141415150100161617171700290999190099990919990910999919099999099999999193999909990999 -080808050600090403101104121313141504121613140200121718181900120118181900999990990099921000991909900999919099999099199191993999999999 -080109090500081009091104081010021204131313140300151516171800061516190400999999399090191099991999910099199999990901299991909909999909 -040503080800091011080800021212120400130614141504131614141500171718011500999990029991199919909999909190999999009099991199999039990999 -040803090900080805090900020610101100121314151600121718181604120418011600929990999999999919009909909199909111999091999990090939999999 -050801091004061112091004131314141000130215161004171718191900171720031900099909039999009009199991999999999100009190999199999199999299 -080909101000050909101000031112131304141512130100160412171700160218061704099990999999909999099990990209999991391090999999999109911990 -060108090900101111090400121111131404051504131400161602130300161717171800990990309990990909999999000019999909999199999199999192999919 -080808080400090910110100090910121200041313121200031402150500141406160400999099990999993999919990099999999091999910999190929009999909 -040808010400090808101000030402101000061111120500131313121200041414140400099999993091999929199990999991109991990999999999909000999999 -080605090904081011031204081314140200081514141600171718191904171718011900999909002199099090991990999999919009199919999019099939999999 -080910111104081212111100021212130300141516170400140518171904140601171900900909099999999909999919129199999110099919999099099399909909 -030809100600111204131300021212131300141414150400161615151704161605011700900092099991099999999919999199099999091999999190099039999999 -040108090900101108121200041108120400130208141400151515151400060316170500999990390990109999999999909099099919990199999999909109992909 -080809090900010810100600111110101200131302141200131305150400030416170400909999999993190999999990909999199911999990999900929909990009 -080809101004110809051000111209021304111414151600011414061704181819200300999909999999999990900999100901199099199999193999090002999099 -080809010400080809091000030405111000121213021000041414141400041516160600999999993099091990909999099299999911199990990999990900909999 -080309101000080809110400120609131300021409131304151616160100151505170400290999999999990919909990999199999190900190999993999909999009 -080808090900100204090904100411120100101111131400031516161700151506051800991999199991999099019990039999099999092909099099999090999909 -050808010900100811120900131414141404151602171700041606031700181818180400999990993990001909991999990091999901990909999992990990999999 -040809090900101111120500131111120100141515151500041616020400061617170300099999009990990909999999139091999999990991999910999199909929 -040108080800091010101004091111121300091111141300090215161304060517180300999990390991999099099999909999099999999990991109009199990129 -080803040900080810110900021010121300140415121600141715120600140501120400999999920999999909900919999199909090099999991190999399909909 -040808090900050308090900101111110400121313020600011415151600041715151600090999999999999902900999999099199099099901993190990999909999 -080909010400080909101000041112051000111103131400060215131600171717130400999999993090919909199991099999909999099129090999991190999999 -080809101000060803111100120213111100141413130400011515151500051604170400919999929099999901999919099199909999999109993999990909900909 -080809100400080811111200130211031200130614041204151516171700151501051700900099999999990909929911999990999090901999999109999309999999 -030806010900080804090900021010101000041111051200131415040400131616161600209999993999909919919919999990009099999009090909990999999999 -080809100600011112131400151512130500161612130200161612171700040404170300900099909993110990990999999999999999199999199099900999999029 -080808090300100211040500101211041300121211141500061616171700181601171704991299199999109999990900099999909999099910999909909399909990 -080309100500080804111200041313021200141513041200141516161200141501060400921099991999999990019909919999999999999900999091999300909999 -040806090900011011090900121213130500141513021600141404041600171717031600009999099993009991990991999909999091199990999099909999999929 -080909011004080909101000081111110400081213141500160506170200160318170400999909993990909999910999999999199900190009199991999999992109 -040804091000031111111200131405021500131416151500131716061800130116181804090099099092999999010999999999199991999090090199993999999990 -060809090900101011111104101012130100141415161704141418020500031919202004099999090999999099099990139991999991009991099019999109929990 -080901031000041112121000131414021004061414151600171718181600170418051600099290039999199991999909110099099999099009999999999999990099 -080808080904011010051100021010121104131414141504161617181500160319200600999009909093999999909919990190099999001990999909992099999009 -080910011104051010121100131314041100040215151100161616150600170318181800099900093999910999109991999910999999990199999990919099929999 -080809090200011009111200051006111200041013031200041415151200041615150400919199199193999999099909919999299009999009990999999990900999 -080809040300080810111200011313111200051314151200161614170200041614040600900999909299999999099939199999199009999091199991909900999999 -050804090400101106090400121213091400121515091400161515031700160102171700009099099990999909090990999999999090999999090992993199999199 -080808090900041011120300131415020600131616171704131616171700181801050400999999901290099999019990909909199091909999999999990300999999 -080909100500110912130100061414151600171717171604181804021600031919191604099090900999913909199999009991999999900901999999999919929990 -080809010400101109121200021109121200131309141500031304160600041716160500999990993099919909999911999199909999099900992990999999900909 -080406090900080804090900101010111200130514110100131315160200040317171700090999999999099990990999909990999991399019999011909991992999 -040801040900101111090900101213131400101202131400061215051400041216170300099099039999919999919900909991999999999910990999999199909129 -080808040300040209101000111112131400111112050400151516160600150116161700990990099299119991909999909999909999991900999099993990999909 -080509010400081009111200081010131300141402150400141416161700030616160400909999993099009999910909999999199919999911099990920990999999 -040803090400100808111100121313111100051306021400011515161400041515161400992990991099999909099909999999199090999091993999999999909109 -080809030400101010101100120206131300121214130400151616171700050104171700992999019099990991999999999910999999991900091909903099999999 -080910101000030911110500040211111200131314141204131514141200060116171804199992990999990991999909999910999999909999991099903090999000 -080801091000081111091000121111090400121302091400151617181804030506180400999099039999909999999999909991999119091009099999020090999999 -080804010400080809090900101112121300040205131300031414141400151516170600999999903099199991099909999019099909999199999999921099999009 -080803040400080804091000051102121200131406151200131416150100131416160400929999990099900991909901199999999099199909999993999909990909 -080102090900080810030900111213060400111214141400041215151500041216040500991999319999992991199901099999909909999909990999999990900099 -080806010900050810100904031112100900130212141400151504141400151516170400999999903990199091099999999219009999991199999099999999990009 -080801090900101111091200041111131400060304021400151515151600051718181804999999039990911909991999919999199990990291099999999990900990 -060501080900101108080400121213141504121216161500040217181500031717181500999090039090999990109991900999099999999190990199999999929999 -080909011000050609111000031211111000041313021000141414151600040417171700099990993999909990999929919919999091199999099900909909990999 -080309100500080409111100080209111200041313141200151313161700060116160400299099990990999999999919999910099999990990090900903990999999 -080809090900080510111200131403151504131406151500131616170200041601181904999999909999000909990999290999999999999009190919909311999910 -080809010400101011111100101012041300041212141300151617021300030517061300909999003099999999091999999999099999190991991119920999999909 -050108080804090910111200131314151504131316151504061702181900201717031900999900309999100990190999990991999999909919999100909999909299 -030808040900100808090900110602120500111113130400141415161600041701161600990992999991999990109999109999199999990919099009990399909999 -080910011100080910111104120910131304120905131300031415160200061704181900999999993999999009991990090999999009999999192111990990909009 -080809100300080809111104121302110600121415161700181818191904052001191904999299991999999009099991199919909990090100999999090399909990 -080801040900080810101000061111121300141111031500021616161500050417170400999099939099099999109909909999909199991992991999900090999999 -030405080804091010111200131010111400150616111700021616111804191919011800999902009099999919990999099109909999091999999910019139999999 -050108091000111112120600111112121304141414150200161715151804041703181800990090309099199999999999910909019999990999199099009999999299 -050108080400091011080400121011041300121011131300021414150300061414160400999090399991909919990999909999999990991909991912909999999009 -040801090900101112090900101104131300101114021304151116160300151705160600099999039990109999099999999999199911900909299999990999990909 -050108080400091008111104091213111100091402150600091616151504171818180300999090399991999090099990999999009111999999990999009992909999 -080808080500091011110100091011110400090412021300141515061600141417030400999099909999993999999900999999109901090919099909999190999299 -050601080800091010101000111111111200041302041400131315161704031515161800999990039090999999910999999991009019999999099909029990999909 -080809091011051209090304011213021415161217141418041217171904202020201906999000099909099999992939190991190019990999909990999099999990 -050809100111121302101011140415161711181815160411192020162121062003162121001999919390099900100999990099909999990919909999909299999999 -080809090909080410111101121314111516051717171516031802191516062020042116909999099099909399091900990099099999999999992911991190909909 -080109091011081209090404081213131313081414141516050217031816041917170616999009399001099999099999999999900199999199090999991920901999 -060408010900101008110900101008120904021314141500051614141500031617180400999990093999110999909999990199009199990199999999999099929009 -040601080909101111081202041111081213041415081216171718181920171705191903999190039910919099999109999990991009999099019999999909290999 -030809101111040808121111131402040504131515151604171718181619171701181606290999900999990909190091099919999999900199999199099399099909 -080809090909080803101111120213101111121415151516041718190420171705010621919999929999999991999901099901990999909019900910999939090990 -080109091004081109091213081414141406040215151503161705180419161717201919999099399000199099199099999019999919929099990990999009999009 -050408080104091008081112090913131312061415151612031718190220212121212020999990099309090199990990999999999009919990102111999999999909 -080901101010111212121204111113061402151513161718150413161918050413040318099990030999999099001999991999991900919099199999909902990999 -080801090604100811091212021313091212141313041516141404171516180305190416999099939901999911199999009199000999999999999900919909929009 -080909090906101111111112131414151612171704041616171718051903040118180204099900999999999900909999999009090909999999129190903991999910 -080909100411080903101012080206131314151617131304151818181819202020010504999909929909999991909000990919990990999109990999099030099999 -080909101011080912101004081304141414011515021605171715181919171704200603999909999909009990090909999909990399199091199919999909290909 -040508080909101112080909131414151601131414061616130317021819202020210419909990999990009999900909003999099999999999919911192109999909 -080109100200081112131304141404131300141405031500161717171504161618190600991199319190199090099999999999209909999099999999090999990009 -080909090600080405100100080411100400081212101300031402101500141404151500099099090999993999099990199991909999099919999199929009999999 -080504090300100211090600121212121300141415151500141416161700041801171704099290909999119901990999999919909909999999999190990399909990 -080809011000060409101000111109121200111113121200141403150200040416170500909999993999099909919999099990999909999099199991909219990109 -080509100300110609101200131309100400131309021404011516171800151516170400099990999299991900999999909999199999109009193111999990999999 -080901100400081112121300080412051300081414140200151516171700151503040600099099030999091999999990999999019999190919099999999200999999 -030808080800091011021204090611111304041415151500161616170100051819171700299999091990991099991999910909199099999091999993999099900099 -080503090900081010040900081010110200011212120400130414151500131316170600092999999999990999991909119991999399099009999909999009990909 -080809010400080809091000051111120400131114121504061617121500031818180200999999993099090999919999009090999099909909990091999991929919 -080801091004080809090200110612131404111112151400161612171400040518190300999109939199099990001999990999099999999090999099909902990099 -080309100500080411111100080212131300141415131300161617181804160106180400290099909999999990099910999919999990991909999009093090999999 -080809090900080810110300120213141500121205041504011617061500161618191904909999999999912990199911009999099999909109993009999099999090 -030804090000101112090000100212090000041312010000131312060000000000000000299999109999919991999901999999399009999999999909999999999999 -030809090900100811120400131304141400131306141404021516171800151505011800999992900999090919909999099999999999901900099119919939990999 -080808090500031011090904120204131300121415151600121415171800121406010400999992199099909091090999999919909999999999099110999930900999 -040104080600091010101000041112121300041111131300141414021500031616160500990990390090999991999900909999999099999199099919999910929999 -080801040900081010100900111212130500111204140400111502060300110416161600999999930999990909109999909990099099099190999199999192909999 -080501090900081010111204081010111200081302141200151516170400150604180300999999030990909099999999999991999090099019999910990919999029 -080808080900040402050300101112130600011412121500161417171500161404171500999199919299999900109909909909099399999919990199999999990909 -080109090900080810040400111105121200111102121200131314141500041306040300999999300999099919990990999999999911990990199999999902900999 -040406080800091011080100041213021400151213041400151213161600151205160300990990099990113991999901119999099099999999199999999992990999 -080909101000080311110500081211110600080413131300021414150100040414160400999999900999990992999910999999909099991909991993909919990109 -040808090900060808090100021011111200130414141200151516141200170305041200099999999999913901909919909100999999991909999999919009929999 -080901101000080909101000081112131404081104151600061117020500031817191904099999939999999999100990190990109999990991099919999999921090 -050808080800091010101100120613111100141502160400041517161600031517010400999990990990999909909990199091199919990999099909999930929999 -080809031004050809111000121213021004121214061000151516171800151501181804909209999990901999919991190999999919999910999009999309999990 -040103040400080910111200040913111200140913131200141502161200141515060500999990320090999999199999999099099099099110999199999900999999 -080401050400080409101100121209131100121209141100040215141100061615150300099999930099000909999999909999099919999199990199990999909929 -050808010900060808100900041112100900131404100900130215150400161615150300099999993990910991999900999910999099999199099199990999999929 -080803090900040810090900111212060200111113141500161616160400040105171700992999999990099999091999099990919991199019099999903009999999 -080802090300100811121300101415161704051418161700191420161704060120161704991990911299991990199991990999999900090999990099003999999990 -080901101000081112101004081314151500081604171504161605020600031818191900099999039999099090109999199909199909909991999090999919929199 -080906011000110412121000131412121004141405021000041503161600171718181600009990993999991900999900990999999990190091999999990219999999 -080609100300080809110400051212110200041212131400041516171700151501171700999299091999090999099909919999919099199901990019999399999999 -080910111104060912111100031312051404151512161400021716161400041819011400000900999999999999900929990919999999991909991990991139901999 -080309040500080809101104121209021300141414151300041615151300171801061300999999290099199099900999119909999990999099999991900399909909 -080909030400080910111200080210110600041313141400041313141400041516010500992999999099990991999900999919009099999999990919999030900999 -040608030500090909041004110212121200111113141500161617181800161617011800992990019099999091900999999919909911099991999909999939990999 -040108040300091011121300141012121500141016021500141717181800140506181804990990309290099999991901999991999991199090999999999099909990 -080904100400080911110600081211110200081314141500011617051500161604031500909099990999990990999990919991919019999199993009999999990929 -080904100600050909111100011213111104141202151500141216161504141217180300090990990099999990999931190999199991999919990999099199999129 -080406020904081011121300081415151300081617170300041617171800051601181800999109001199999990019909999999129099999999990099999309909999 -080808090900061011090300011011111204041013131400151005021600171717170400999999099990999999902930990999919919990991190091999909999909 -040808090400100804110600101212110300101213111400151617111400150105021400990090909999990990999999999999929001990919999199993019999919 -080808010500040909101000110909121000131313140200151604171700061603181704999999903099909909999999919090199999199099190909909919999290 -050104080800091011081200090413061400090213041400031513161400171513161600999990309991000990090999099999999199099199999999929999919099 -030809101100051209101100021309101100140415151104141416161700180616010400299999199999999901999919099190999909009990999190909930909999 -040808080900101112040900100312120900100413140900100513141400021516010600999990099999099999909929909999999909999999099919910130911999 -060801090900080810090904111212120200111304141500111603171504111805171500099999939999199091990909919909019990999099999921090999990999 -040808090600100808090900031104121300141115161600140517161600140217010400999090999990999990990999909290099901999919999999990930911999 -040809010400100611121200131414121200151502161604151717160500031717181800909990003099909909099909999999919901909919099999999909929999 -080409090400081009090500111111121204131314120300131315161700060102161600999099099990990909099999990990999919999910299999903191999199 -080109040300080909101100080412041100131312021100141515161100051515170600999999390290909999109909999099999991190090999999909909999909 -030808090200100811111204101313111400100415151504161617181900161606010500291199999190999099991999009909919999909901999090999030999999 -080409090500081009090100040211120400131311140600041311141500031611141500909099999990193901099999009919099999099999990999991999929909 -080803090900050810110900041212110200131212061400131515151600130401040400992999999990099999091909119999999099099919099990990300999999 -080801090904051011090904101012061300141516131300140217180400141919190300999909039999009009199999099991999910999109990900991999999929 -080801090900100811121204101314121204101516160500170402160300180619191900999999930999109091999991990901909099990919990999909192909999 -040601040800090909090800051010021100041213131100141413041100141503041100999990030999991909991999019909199099999099999990990299999909 -080309090600081009090400080211041200051314151200161614171700160114170400299099999991099991090999099919999910090999999109993990999999 -080309050400081009091100081212021100131314151104131316171800061616010400999999290099199999919909999900199991909919099910999930909999 -080808080500040309101004111202131404151613131400171818191400171818010600999099219999999009109991990019999099999109999910999930909999 -080909101104080912031304081212140200081516171700181818171704060105191900999109992190999099991999919909199909990909999919003090999999 -040809100400031111110400121313130400120614140500120214140100121515161600009099900999990929909999909999099909099999991993991919999199 -080808080600040904100100090911121300031414151300161714021300161704051300999090990999903999919990099999199299199999990011999009999999 -080309010600080809101000050209101000111111111200131314151600130404171704299999993099999991999991999091199999099990099009990090999990 -080904011000080909111000121205131000141414141000150404160200040316160600909999993999901900909999099999099999990099199901909990992999 -080808030400020910111200051010110400061314111500161617171800161601171804992991999091990991999909909919999019099919099090999399999990 -030804050900040810020900111212040900131212140900131315160100061717161600209999990999111909909999999099999999199901999003909999999099 -040808030500090910101100090210041100121204061100121213141400040401141400999990092099999999999911099199999909999990099109900399999999 -060208090900101008090900101011120400030413120100041413121500041413040500019999199999909999199999109299999900399999990990999990900099 -080109090900080810111100121313140600121313041504120402151500120316170500999999300999099991909909999999009999909019999919999919992109 -080909040300041009111200041013111400011013021400061013040400051515151500099990990299999999091909999999099391199990990199990990909999 -080808020600030409090400041009091100121313141500121313161500120501161600991092991999999990990909909909199991099999990909990399999999 -080804090900010810090900111210021300110514141300111516140400110406170300990999999993119990991909919999199999999099990090999019909929 -080806010900100811120904021313131300141415151500141405161600170304161604999999903990900009919919999190999999999900999999919999929090 -080409090900081011120500080213120100031413130400141415161700061818181804999999009990010999199991939919999999992909099900909099999990 -030808090900100808020900100611051200041111131400041516161600171717010400999992999991911990991999999999019090999990190999990030999999 -080809101000110809121204131409121200151602050400171718180400060118180300999990999099999009999900099990909119991910999990903999999929 -080105090900081011120904131314141404131315160200171718192004171706190300999999300990109090199999990999199990190909199991099099999929 -040808010900040808090900101011111200040411111300141414020500030615161600099999993990999999091990919099909909999991099919929009990999 -080801040400080809101000111112121004111113131300021415061600171718030500999999930099009999199991990999999909991999091109909190999299 -080808010900041011120900131415150904130215160600031717181800041717051800999999903990990990019919990919099919092990999909999999909099 -050809030600100809111200101309141500131309161500011717021504041717181504999990992099090999919909999999199909999901993990099919909190 -040108080400091008031100091012111100091012020600091004131400041515150500999990399090092999999991999999199991099990999900909900999999 -060808080400091011120100091313140500151513161604151718161604031919190200999090990990003999919999009999199999909099999009099991929919 -030808080804090910021100090910121104041310121200141516051700140118190600299909991999910999999999990909999010999199090099993000999099 -080309041000080509041100080209121300141515120100141615120400161606120400299099999099099999900919009919999999399999990010999999999009 -080109101000080809101000111112121204111113141504021617171804192005030600999999399999009991099999990990999990001999091199009920900999 -080309090900080802060400101010111200131314140400041314140100151504160500299999909999109999190999009991999909099999990993990909999009 -050108091004111112040200111113141500161606141504171718141500171719190300991100310199199999091999099099999990909099999099999092999999 -080909020400030410111200131310111400151610111400051617111400061601041400191992991099099999990990109999999009990919999999999309909999 -080409101000081102120300081113141504081116160500171118160600170119191904990999009999919999112999910991999019099999990090993099999990 -080809101000010811101000061213131304141415160200140515161700180403160400990999909993199990199909990990919909199099099999909990909299 -080509091004080611111000081211041000130214151000131616171800130316010400099009999999999990999900099099999111199909199991999930929999 -080808030900041011111100101004020600121313140500121313151500040116171500999299099199999909919999009099199991099999990999903009999099 -030809100500111213021404061515151600171818161604171919202000171919012004211999901090090009919999919999999990909901999999999939909990 -060408091000111208090300131314020400131314151500161614151500161705010400909190999299099900919999109999999901990999999999990930990999 -020808080300090910050600090911111200011311110400041415161704141415161600199291999999009999990990909919999399999099090990099999990099 -030808090900100504090400101112131300100412131300021412151600141401170600990992999999909990900990999909999999991999099100919309999909 -040808010400091010111200091010061200090513141204151502140300151516171800999990903099910999999909909901999990900919999999999192999119 -080904101000081105100300081111021200130414151200131616161600130104040600909999099299999999019999909090199991999019990999993000999999 -030809090900080810040600021111121200041111121200131415161600130105170400299999900999999919090919999999999999990919090109993009999909 -040809091000011109091004021212121004131414141000150516161700180306171700099099099993199099199919990109999999991009099999919999929099 -080809090904080810110100121314150500161702181804161606191904202003191900909909990999913909109991909019999911909901999999009999999299 -040809090900011011111204101011110600131314150400161602051700160318181800099999090993990099990990999919999910099919999190999090929999 -080609090400080409100300080411121300081402121300011415151300041415150500909099999990912999199909999991999090999919993990999990901999 -060501080400090910081100090912081100041314041100131302151500161717031500999090039999199999999990099019999919099919099919909999909929 -060808090500030802090400101111090400101212091300141212150100141416170400099099919992990999199999999991909090099999999913990999990009 -080910031104021213061100141414141500161704181500161717181500160105041500112901999990009919990999999919999990999999990900993099999909 -040108090300100808090900111202130400111214151500111216050600111217170400999290399990999901919999109991999910999999099009999099999909 -080909090900030602101100121310101100121313141104040515141100161718010400199992919999999990199909999999199999909909999000909030900999 -080804091000080811121000131311111004131402151000051617171704031818010600990999990999999990909990900999999911190199199999091930929999 -080808080300050209061000111112131000011114151004161616171704181819170400999299199990199999109991099999999300009090999999099090990999 -080104090300081010091100081010121300140515021300161515041300171704061300999999309290909999991999199099199099190990990999990999990909 -040108080400090910100600091110100300121213131300121202040400040514141400999090309999090991999999999919929999999919999109900090999999 -030809100500110412021300111412041300151416161300151417161300151406010400211999991099919990999999999091099009999909999990999030999999 -050108090900101111110904121313131300140215061600171815041600041818031600990990309991999019999919999010909990990199999990909999999299 -080808010400040609101004111112101000111113131300141403050200151617181800999999903099009009099990999999199999999999199990909291900199 -050106080800091010101000041102121300141415041300041416161300171716031300999990300990999900910999199901099999990919999999990999999299 -040408080900100408080500100211030600101111121200131414151500041401151500909090999099999990099919299919909999991990991909999399909999 -080909011000081111101004021111120400131313141400151617141400060318050400099999903999919099909919909199099999990109999999902090999099 -040108080804091011111200091013130500091014151500091002151600170604031800999900309999990999090901999991999999999919999911909091909929 -080909030600080910111204080210130500081415151500161717181904041717011900992999999099990091909999909910099099999109090919009939999999 -080808040600090902101100120913031400121215150500161616160400040117171700990999909099911999191909929991909919999199999990903099999999 -080309101000080509061100080209041100121309141100120415150100161715150400290999999999009999999919099919999911099091999993909999900909 -030809090200100611111200101314121204101515151504101617181904201616010500219199999199999990909990090999199999909901999990009030909999 -080904100300080911111100080512120200081312121404151516171804150601191900999299901999099999991999999909919099109091999010099390909999 -060809011000051112121000041312121400151302161404151304171400031818181800009999903990090999999999919099999111109990999909929990999999 -080804030900080810111100051210020400131313131400151516161600041501170600999299909199999990919900199991909999099991999099999309909909 -060809031004111112131004111114021000051516171700151518191900202020011904009209909999991099019999199001999991999991999009999039999990 -080801091004080811090200120413091400061513131400161718191404160519190300999109939199019909091909999099999909999099990099090092999999 -030806091000051112131000141102151004141416161004171716161800041719011800290099199999919909119991990999199909009999999990909039990999 -080805060900030802040900041011120900101004130900141515161600141515010400999092909999109990199999199099199990099991999909999930909999 -080801090900080810110200121212121304141415051600171819031604060419191600999999931199019999091999990900019999999009990992000999999999 -040809050600021003111204131404111500131316161500171716161500170118181500010999129091990019999990999909099999991999999090993909999999 -080801060500091010101000090411040400121211110200121213141500161616170300999990030099999999100999999909999999199909199091999019999929 -080909030600080810111204130510101200131415160200131718181904130118180400999999902099099099919999999909109900199999190191093999999909 -080910100600080311021200081311111400081516041400051517181404191717011404919999291099919999990900999991999999099919999010009939909990 -080809011004111209091004051314141000151617021000151819192004150319190600999900993990091090909909999999999911199190090999092990999999 -030808091000061108091000111102091000121212121300041414151600041705010400299999999999990909199990199999199999190999199901990930900999 -040801090904050810090900110812131400111502161600171518181600061504180300099909939990109999999900009919909919990919999999909999990929 -080803090900080510111104020412111100131412150100060416161600171818181800929999999099009019999909999199099111399090999999909909909999 -080901101004111213131400111213131404151205021400151206161400150317180400099900030999091999999999990999999909199991990099999919992109 -080309091000081106091000081213041000080402141000041516161700051516011700999099209999999991999901999991099901199999190091999939909999 -060808010904100811110900040511110900121213141500121202161504170318181500099909993990090900999999999991009999999910999199019909929999 -080809090300101104091200101113130200141113131500161117051804040117170600999299099999091999991999919099999019099990090099003990999999 -080910100300080910101105081202131404151216160600151716161804150119202104999999999299099099091991110099999199999999091099093090999000 -050808090400010810091100121310091400151510060400150210161600041717170300090099999993090991990919999199009999999999991909901999999929 -080809090500080810091104120610131104141510131300161710021800160103192004909099999999990009999999990009999010990199999911993991999210 -050801090900080810110904120306021300141415161300141415171304181815041300099999939999911009991999019029199911999990999999099909990999 -080809100400010809111100121309111100121304060300121314021504121605171700990099999993099991999999099999099999999909290119099911900999 -030809101000051109101000021209131404151504131400161616161400041701180600290999199999999901999910990199999999991900999990990309909909 -030108080800091010040600091010111200130214150400051614171700041614171700999992309099909999999999009191009119990990999999999999900999 -080904050400080910111104010912111100130912120600140215151500161617180300909999990090909099099930999999909199991999991199909199999129 -080803090900101011020904101011120600040513141500161717180100041717181800992990999999991099919990199991909901090991990903999999909999 -080804010600080809101100021212121100130514141100130414150400160304151500999999903099110919909999999199099909999999099009919099929999 -080809101100080409100200121209031300121209041300141516171300050401170600999199999199999900921999999999999909999090990011900399999909 -080808030900021005110900041010110900121213130100041213130600141516170400992991999991999909099999009991999999399999999090900099909009 -060809010500040909101000111112121204111113021400031516161700181818160400009999993090909999991999990999919911199190992990999090999999 -040108091000111212120500111313141400111306150200110316161704041816161700990090309090999999019999999999919990999990199291099999900999 -080304010400080609101000080211111000051213110400141213151500041204151500299999903099909990999911919999909900990990990999909099999999 -030108040904101108080900121113130900121113130400021415161600051718061600999902390999090919909999999999909999991100991999990099909099 -080808040300040910101100120510100200130614141400131515161600040401161600999999090299091909999990919099919099999919090999900399999999 -080809090905011011121304141516061304140217171300141817171904142021031900909909909093909091009910990999999109999199099999091999991299 -080808080900100503111100041213021100141413151600170413181800170613011804999090999099929900999990919999199900190999199099999939909990 -040108080800091011110600120511111300141516041300141504031300021717171700999990309991090919999909909199999000999999999999919029919999 -040808090400100811121300100214141300101515151504101617170100030517180600999090990999009999099919999919009999909991999093920909999909 -020808080300090910110400090912130400141515151500161616160500060117171704199291999999900999099990909199099199999199099999903099999990 -080808040900101010100900031112130200141414061500041616171700051601170400999999900999999999900921119999919999090909199919999399909909 -080109040300080809041000111202101000111313051400111313151600110406150400990999399299009919999911199909009999999999099990999090909999 -080904040300080909101000081111121300140611020500141516160400140116161700909999990290999990919999909099109999999091990199993990999909 -080409100300080909111100080412111100131312021400151512051600040112060400909299991990999999999909999099109911991990099999903990999099 -080104090900081010090900081011110500080411111200061314021500031604151500999999309990999999909991909909999999090991099119991099929999 -050809100400041111110600121212131300040214131300031514161600171501161600000099909990999999090999999911999099999190999909929399919999 -040108050904101010090900111112131400111115021400161615061400161617030400990900309999909991999991199999199991099099999909999190999299 -080808010400060910111100121212111100021314141500161717141500041703050400999999093099009909099999999999109119991999991999909200999999 -080808040300090910101100051210101100041213021100141215161600061201160400999999900299999900999999919999199011999990990199909390999999 -080808010900040610110900120413110900121415110900161717021804031717051800999990903999001999999999099900999909990999190911099909929999 -080808030400090909101100041213021104141414140500011516171700061816161700999990992099991990999901110919999999099190993999990999900999 -080809010500040810111100121314111100061515151504160217171704161618180300909999903090999999099909199001999999909919999199091999991929 -080909090900081010060400081011120200011311141504131311041500051611031500999999090999999999990901119919919390909990999999990999909929 -040808080800060909100100110909120500130204141400151617171400151616030400099999909990993999919909109019099990990199999199999920999999 -080409010500080810101000111112131404111102151400161617181400040603181800909999903099999990199991000999999911999091999919900299999999 -080809090300080209091004111213140400051215161604171215161600060115181800999999999291191019999910009999999990900999990099903999999099 -050808090400100808110300101213111104101413130200101516161700060116160400999090990999992990999999990909919909999909190191903999999909 -080109051004080811121000131415151500131616170200131616181804190406180300990909309999110990919909999999199099199999199999009099909929 -080106090500081009091100081213041100140215150400161615170300161618181804999999309091090999999900099199999119099091999992999999990990 -050208080600091011080300121011131300141011130100141004150400141616171804919090199999992909999901999099999991399900999999999900999000 -040308090900100602090900111213141400111213151500011213150500041216170400921990999999019909199999999999099099999999993100999999900009 -030808080900101011020900051111120900130604141500161617181804161619011804299999991999091999999999009099919990090099199909099039990990 -080905101100120404101100121202131100141415031600141415171700060115170400009990999999909990909991119199919909299999999999903999999009 -080809100300080409110500121209110400121213021404151516171800151501061800909299991999090999999999099999109911909199099100999309999999 -040208080900101103080900101111120904101314140500151614140600150117181904019999199999929999999909900919099999099199990099993090999000 -080903100500080904110100040912121200040213141400151313141400151506161700929099990990993999019909999919199011999999999999990990999009 -080809031000111109121300111109021400041505161400171718191904171701061904999299099199991999919991199919999990990190099109099309999990 -080809091004080809041004011112131400051512060300161612171800161602191900909909999999990090990930009919099099999199299991999919991199 -030408040900101011110900021012121300140512120400141415150100041615150600990992009999999999090919909199999999099090999193990999909909 -080801090904100811090900100512121200101302141504101316171800031316040600999909939990019990919999999991099919009909099990999900929999 -080309090400080809091000110212120600041312121404151316171800151301170500299999999099990991909901909009999999009910099999999390909999 -060108080800090909101000041112101000111112131400150216030400040516160400999990309999909901999999999999099909091999091199900929999909 -080909090300080210050600111210131300141210130400141210151600041201040400999299190990999991990901999099999990099990999990999300909999 -080804091000111103121300111106021400051516171700181816171704180116191904990090999099921999991990919909199091999099999199093999999090 -080809100300080809101104121309100200141505041600011515161600061717171704999999999299991009999900919099919099999900993919990999909990 -080910100300080211110500081211131304141414131304151516170100151819200600919299199999190999999900090991999999909919999913990909990009 -040809090900101010110100121211111304041206051300141415021300031617181300009999990999903999999990910999999999090009999991999019921199 -040809041000080809031100121314061104121315051100121617170200120117171800909090999099992990999999090990999999999000190199993991999919 -080808040500090210111100121313111100121414141400031516171804151501060400999999900091199919199999999991099999992910099099099300999999 -040408090300100211051200131414141204131315061200161717181800161701181800991290019999199901909999990919999990999109099909999399909999 -080808090904050410100100111210101300141406151600141403040200171718181800999909900999993900999990919000919999099990199999990291999999 -040809011000111213101000111212061400110415021400160417171400160317170500009999903990009999991999099999999900190991990999999999992909 -050809011000111109121000111109041004131309141500161303060200171718181904009999993999001999909999990999919909090990199999909291999910 -040809010600041009111200051311111200141515021200031515161700181818181704009999993090901990999990999099999091199990992990999999999900 -080803040600080409101000021109101200131414141200151515161200040501041200929999990099999910999990999109099999991909999900900309999999 -080809100400111112100100110404101300021414151300161605171300161603061300909099909999113990999999009199999099091990999909999999992909 -040803050900040810100900040810101100120806021100131314141100041501140400099099929990999999990999999099199990190099999091990399909909 -040508090300101108090900121304060200011414141400151515151600041717171600999290099990099909991909999900019399999099099999990999909999 -080109090600081009090400081011120500131111140200131504031600131704161600999099399999990999099901009099999991199999190099999929900999 -080809050300080809101104121212121104131314151104011617180200191919190600999999990299999009009999990999099900909909193911991190999999 -030808080800090610020500111213141504161713151500011718181904041718181900299999919990910909919991190019999099999990993999099999900909 -040801040900041010100900111111121200131302061200131314031500160514140400099999030990990991909999999991999910999999099129909990909999 -080809010400080809101004111209101000131212061400151616040200050317181800909999993099909009999999999099919099090099199990909991992199 -080910041100030902051104121212131100141515160400171715181800171706011800190992909999199099109999009991999091990991099999999939990999 -080409091004080209091000081112130300081412150500161712181800060119191804999009099999199991919919929999999009091990991909903099999990 -080910100600080910100100110912131300021415041300161417180400031405181804099099999999193999009919999190999190999999991000929099999990 -080906011000081112131000081415131000161702181004160519202004031919202004909999093999001999099900999009999991109019099999099999929990 -080801090400041010110400121010131300121402130400121415150500061615150300999090030999900999909999999919909019999919999990999999900929 -080805090904080803041004111213131300111414150200111614151700110601181900909909990099999090290999999909919999999999190019990311999919 -080801060900080810110900041210111100131304141500131305040200040316161600999999930999010990999909999909199909199990199099909991992999 -080106091004081112131400081516171400081502051404181819202004181819190300990009399091000999099999099999099119900919999909099999999929 -030808090500100611090900121313141504121313140400021616141700181616010400999992909090999919090999900999999999091909999910919930919999 -080504030900081011120900061010020400131314141400131315150400040115151600999299009990991999019999109019999999999909999099903990999909 -080109100400080909101100080612101100081302141400041315141400041617050300999099399991999990099999009999999111999909990999990092909099 -080801090904101011090900101012131400061502130500161616131704031819171704999909039999919999910990199901909099999919999999099109921990 -050809101000031102101000121213130400041413130400141415151600171715010600019999119992999999109990909999999009999991099990999930990999 -040803040900080805101100020610101200131415151200161615151200161601171704929090999099990919090999999109999199999199999190999309999990 -080809100600080809110100040409121200131414141400151516021704031505181700900099990999993999919990999099199099999999199111099909929099 -080803090900040810090900110602120500111314121204111515151500111601171704929999999999199909100990999991999919909190999999990309909990 -080808090900011010061100121010051100130414021100041516161700151516030400990999090093999999999909099091999091990991999990999990990299 -050809090900101011111200011011111200131306021400131315041600041718031604099999009999199999999939909909199990199990199099999099900920 -040804090300101112090904101212130200101414151600171414051600060118181800009999099299999090919909919909919991190990999999903099999999 -080803090500080406091000021111091200130411141400131516141400130401171700929999099099909919990919099999909999999019990009990309999999 -040808040000010809100000111112120000111102060000031313130000000000000000099999990993109990199999999991099999999919992999999999999999 -040804090000041003090000011010090000110206090000111212120000000000000000009999099990999999299999999319999909999190991999999999999999 -040808030000060809090000101002110000101004110000010404110000000000000000099999992999999900199991099990999999993099999909999999999999 -080804040000030209090000061009110000121213110000121201110000000000000000999992100999999991999991999091999900999939999999999999999999 -080109100000081111100000041102100000061212130000041212030000000000000000931999999990999999099909199991999091999992990999999999999999 -080809030000040609090000101102040000101213130000100113130000000000000000909999992999999900199999999901099119999999993999999999999999 -030801090000040804100000110212100000111112100000040612100000000000000000293999991999909901999901199999999999990999999099999999999999 -080109090900081011020600081012130300041212131300040514140400151614140400999999311090199999019999999099929999999090999990909999900909 -080809100300110212131300111412131300111515041600111515161600040501040600911299199999999991999999099910999999999990990909900300999999 -060104050400080809101100121213141400121215141600171515031600021818181604999990300099000919099999099999999999091999990999919929919990 -080809090900081011120100131313131404151516041404151517170200061819030500999999090999093999019999910990099909909999199991990190909299 -030809100500110809101200130814100100040214100600041515161600171815161604999992999099900919999919939919999090999191099919909999900990 -020809090300101010101104121306141104121313151100161617041100160118190500119291999999999019999919900990099990999199999099993009999009 -040809090400080809090500060210041100121210131100120410141100031515010400999090999999990900099991999919099999999090999910929030999999 -080109091000080809091004041112121300141512120400160206171700051818180300999999399999099091090909909919999199091990991099901999999929 -080808010900051010110900041210130900061204130900141403150200141416170400999990903999991990909909099990999099999099199991999210999199 -080104090400081011091200081011110400081004131300061415021300031616160500999999309099100999999999909999199090999991990099999019929909 -040408010900101008110900121008020900121313140900041313060300000000000000999990093999019999999909119909999999099990290999999999999999 -060808080400030909101000111102100100111212130500140415151500000000000000099099990999999929099991939991199991090909990999999999999999 -080809100300080802041104051213041104141313151100140106151100000000000000991299919999909000199999990909099090099309999999999999999999 -080808050900011003040900111112130900141115150200141616151700061616040400990999099993990991299999119999919019199999990990999990909099 -060108080500091008110200121314111504121617111504121818031904121820202000999990399090091991991901190909999909909909199992099990999999 -040805060909080810040909030410111112131310111412131302151612041717180112999090909999009999999090999299909999909909999191009113999199 -080909011000081109121004131306121000130514121000031516120400171717020400099999999999000090999999099999999900999999092199999119999109 -080901101100080912131100080414141500080514141500020616041504171717031500999099930991109990900999999999999099991909990909019999999299 -080809090904101011111104101012130600141502160300171818161600050118190400999900990999999099099999009090999111991999291999903999999009 -080109051000081112121004081314121504161617020600161604180300191919181800990999309999090091990901990091909991999991999099990992999999 -080301090600101112131304050214141504161616141500171718181900171718180400299091930991999091109999900011999999999909999090999990999999 -080403090900101111111100020504120400131414120600151514161600151501160400099990929091999919999909909190999990991999099109999390999999 -050108080900101008090904111111110600121314150200161717181804041717190300999990399999909091090999999901999091190909199999009919999929 -020804010900101112090900100413131400100315061400101515041400161605041400109991193999119999900909999990999290999999999990909099999909 -050104080800091010101000111111020600121213131400120413040300000000000000999990300999999901990999199909199999199099299909999999999999 -040809100600051109100300041212101300141412101300141401150200000000000000009099999990999990092909999999999901999931199991999999999999 -030809090400080809091000110204121300051415151300141406011300000000000000299999999099999991900909909010999919099903999999999999999999 -040803040500040802091000111212121000111113131000040613011000000000000000029999990099190909199999999999199909090093999999999999999999 -080809061000111102101000111112131404031515131400041615130100051718130400990999009999119999919999000290999999999099990993999999900009 -080801090400101112130500101414150300101414151500100402161604061718181800999090930990190991909999999999929999999911999019099099900999 -040108090900101108121200111108121200130408141504161617021500160518060300990990390999999909999991999099999099109911999019999092990099 -060808030900100408111100121204111100121213130200141516170400050116171700999290999199909900999999999990919909190919999100903999999999 -080808091000061109091000011105121300041112121304141115041300021617180300999999099990090999099939909999999009909999991009919999911129 -060808010904050808100904111111121300141516171300141819190200140319190400099909993990901099001999999999099000999999199191992999999909 -080910061100081213131104081402130500081404151600171718180300170118180400900999099990990099999991109990199199191990299999993999999909 -080804090600080810111200130210031200141510161600011517170400051517170400909099990999909909999911999199209191999999993990999999900909 -040804030900021010100900111105120900131415121204161717181800061701181800099999002991999919999999999190909199909109090909909399999999 -030808080200040909101000011109101000111112051300041412151600171712040600299199999190999999999931199990909999099999990000990990999099 -080808090904011010111104021210111300141516170500141819190400140319190600990909900993999099990911999190909190999190999990992999999909 -050801090900101011111200101011130400020406131400151516171400151503041400099999030999990999900991999199999990091099999190999209999999 -080803091004080211091000041211111000131415151600040615151700181818010500929909999991909901999991999999109009990999099090999030999999 -080808080500090910100100090911121200061111131400031515150200041604040400999099090999993999019999999999199099199999192991990000909999 -080306010400080809101100050212131404151515161604171718191900171718191900299999903099910901109999900911909999909009999909999999999999 -080109101000081109090600121314141504121614140200121605171804121603190400990999399999999901090901900999999099199999199091099910999299 -050106080300091011121300091402151304091616171700091819171704181819190400990990390290009991999999110911999999999009999909099999999909 -080805090300080810111204131402151200161616151500171718191904170601191904990999990299911009199909999901999999999190999109090399999990 -080109090600080809091000111213101004140215151604031718051600192020202004999999399099999919099900090190909199909199999009921999919990 -080808060900011010090900051010111100121314141100120204040400121516170300990999909993909999999909099919999109999999091999991009991129 -050804010400080809091000041112091300041112141400060215141400161616160300099999903099090909990991199999909099999199990199999199999929 -080808080400091010100300090206041100041213131300041414151500161414010500999099099999992991999900909919909099999109999919909930909999 -040808010400090808101100090912121100031302061100141414151100160404150500999990993099901999999999919901999909092919999990909090909999 -060104080900101111080900121111080900131414020400041516170300151505171700999990309990999909999999009019999991090991999009999992999099 -040104040300080808080900061005111100041010021100121212131300141404131300999990300299999901091999999999999091199099999909990999999099 -040108080800090909091000061112131404150213131400151603171400051819171704999990309999990909100991990919999099999190999999991299901990 -040106080800090909080800101004111100101213021100141215040300141216170500999990309999909991099999999919199911990909299909999999990009 -080801090900021010101000111213140400111215050400111216161704030616161800999991130999999919099909009990099999999909099999029990990909 -080909011000041112101000131306051400151302161604150417161600181818180300099990093999009999991999999990019901909019999999909199999929 -080909100600080903110200120413131400151513131604051718191900171701191904091999921099991999991909919099999909000019099999999399999990 -040805010900101112130900101111140900021515140904161615141700031806140400099999003999909999919919199199999990001999099999991990929099 -080909090904101111120600101104131300141516130300141718020500140119191904099900999999990999909999999000929999999001990190993119999990 -080808040904031011121200131014121200130614140400131516171700021805011700999009909099999929099990999999099999099090999119911039919999 -030809100200041111111200131313130600041414150500161615150100171717170400211199999199991909919999909999199990090999999093999909999909 -080803040900080810090900111110040200111112051300061415161300041701161600999999920999919909991999909999919909990000999911990399909999 -040809101000050209101000111206130100111404131300110315151500000000000000009999999990119991919909039919999990999299099999999999999999 -080405010600080909101100080909101200081302100400041314140300000000000000999999003090910999990999999991909099990919999992999999999999 -080809090300060802041000111112101000111113131300050401041400000000000000999299919990109991999991999991099999990039099990999999999999 -040501080804091010110800091010111200061302111200141415161200031718041200999900039990990999999999109999999001999010999999999109921999 -080808080600050304020900101010100900041112121200111113131400150413010400999999291099991909099999999999019099999991999090909930909999 -080809091000080809091000110412020600111212131404151515151600040117050300999999999999990900099999109999199999100919199999903092999099 -080109101004081112101004081314020500151616170600151616181904152020180300990909309991099099999911109099199099999991099990090999999929 -040808030900101111090900041111021200061314151204161414171200050118181800999290909990999909991999919990199099909091990919903099999999 -080309101000080209100600051109121200131109121400041101041500000000000000299999999991109999990999999099999000090939099990999999999999 -040809100300010802100400050811041200131311141400130611141400000000000000019299919993919999000909999909909999999999999009999999999999 -080805090300040810090900111111020400120413130100121413130600000000000000999999909290999990019999109991999999399099990090999999999999 -050108091000111108091000111108090600021212091300141203040400000000000000999990399999000999999999909199999999091990091299999999999999 -080801090900050810100400111110101200111313130200060403141500000000000000999999930999099909990990909991999999190099199921999999999999 -080901060400080910111200080913131404081513131604151517170200050318191900999999930099999999100900910999919909909909199999909991992199 -040809090900101010100100041105121200131302141400041516141400061716160300099999090999993990919900999999919901999919990099990999909929 -080604090500101111090900101111121300011415151300030402151300161717170400099990909099999999909909099911999399999019999990929199919909 -080109101000081112130600081114141500081102141500051116171704041804170300990999309999190999109909999999999991090919999919090999900929 -080910010500081112121200131314060400131314021500160414151500161604031700009999003099999990190999999999099991190099999999999091999929 -080909101000080805111000121202111300121214041304151617061300040118031300099999999999990909099991009991099999909119990909903199999299 -080809011004080809111000061213111004031414111500160214170400181905171700999909993999090990099909190991999999092990099199911099919999 -030808040904040808100909111102121213111415151513061616171813051616040113299999990900990999199099199999919099999099190900099903909999 -080809030610080809111213140209041515141617181515191919202005040121212121999909992909919009990911999999099000091999999909003099999999 -080808080109100211120909130514141516170414141504031818191904061818202020999999191391091910090999990199990909992990999909999909009999 -080809011005080811111111121313131314150416171804061616021919032020201919909909903099999999919909990099010090990999199991999919929999 -040408080800091002110300090912111100131414151500131414161700130406010500999990019299999990199990999991099099999990999910990030999999 -080509090900101102040300121314151500121414151500161616171804060401181800099990919299199901909999099919999099999199999900000399999999 -060808010904100808110900021212110900131415111604171818191904200318051900999900993999990909099919199199999900001099099999019999929099 -080801090900080810090900111210131400150402131400061616051404031716041800999999939999019990919909909099999091999919990990099990921909 -080109101004081112101000081113131404151113131400160217181904202005060300990909309990099999090999990999999199991999991111090002999999 -030809041004110812121000130812121400150216171804191916171700061916010500990902909999999919990999999100909191009199999199999930909999 -080105091004081111091000081112091004081314140300151506141604151502171800999009309999999999099909090919999909999109299999099991991119 -080801090900101112090904101314141400021506051600171718181904171703180400999999039999909090199991999010009199991999099990099990992999 -040403080904101112021300101012121400011515151400161717170500061818181800992100099199091999910999999901999399999909990990900999999999 -080109101104081209130400141209131304141209150600141602170500140318171700990009390090099909999999990999999990099199999110999999992199 -030809090900050806101104020812111100131415150400041615151700181801171700299999990999999009009919099190999199999199090190990399999999 -080401090900101011090600121011131404121516160200051716160400181818180300099990939999019909910999910999919909199099990990999919999929 -080801090300101112090904101002130600141415160500141417171704181818190400999290939991199099919991109900999990099990999999090909999909 -080809040300080810101100120613131104141513131100141416170200040116180500990999909299999909099999990009999919999101199991903909999909 -040804091000080811111100041213020500121213141500011616140400061616140300990090999099999990909909199999109919099199993990999999909929 -080309090600080409041000080211041000121211131000141211150100040511150400299099999990909999099919999919099990090999999113909999990909 -080804090600010809090400101011111100101012050200041313131400041503161600999099909993199990190999999990919990990909199999990991909299 -050108080804090909090400101010111100120213141404151617171800190317170600999900309999990991909999999991909119901099099099919990929999 -080801090600101111091200101111091300140415091600041717021600031717051604999999039099999999990909109099909900990991999919999999929900 -080509010400081011111104121314151500121602151500061617181800031604181800909999903090999090991900099999999911999900990999999099929999 -080409101000080402060300111212121200111113130400141413130500141401150400091999919299999900109999999919999999099199999190999309999909 -080306090905081002110904081012131404151516161700181816161900181801202104299909909991119099910999190991909909999099099999999300999900 -050108080900101108080900041213130900121214130300041514021600061714181604999090399990099991099909999999999919999099290919990919909910 -080805010600080809090904101011121200041011131200141502160400170318181800909999993099099090109999999999999999090910991190919099929999 -080801090904101112090904131302140300130615151500161617180500161617190400999900939991109019999991199999129999990099099009999909999909 -080809101104080212120500131412120300151617171704151518181800040119190600990009909099199901999919929199999009909999999099903090999999 -030408050400090410101000090902111200061313141200151513161200151501171700900992909090999999909991199999199099999991999010999309999999 -080808010400091011121204130504141400021515141400161615061700161603181800999999903091119010909999099199999099991999099909999990992999 -080909090900080602101100080412121304081412120300151516171804150116051800999999009999911999191999990909929099999010999190093909999999 -030408080400091010111100091010111100090212120100131412151500050406160400999992090099999999999999999990099199399190990199900909999009 -080909101000080811101000011213140400041515151500161606050400021717170300990999999999099999009930099919909099999100099999919999919929 -040401040600080909091000111213131000021413131000151404051600151503161600999990030091999910099999999109999999091990099099999999992999 -080909040600080210031100081212131300141412131300151416161600050104170400990999119091929999990999999199999999999900990099903909999009 -040308090900101011090900120211110600130414151500161616151500040117170500929990919999999990909911999109909990991909999999903090999999 -050408080800091002110300121013111100141015161604141015151700140118060400999990009999919909192909999991999099909990999190993090999099 -080806010400050809101004111213101004111414141500161617180200160319191900999999903090009099099900990999199999199999199000999991992999 -030809061000041109121004021113141004151313161000171718190100171705191900299999190999909009909919990199099999091900999113999099999999 -080902101004110412130500031415161700061415171704181815191900180115191900119901010999999929100999099999999999900090999109993999999999 -040108040300090908101100090904101100121212021100131414151600051414060400990990399299099999999990999919099991190990990990999900909999 -040803050400090808021000111111120600011313131304141414141500161617181500929990990099910909919999909909199399909909999990999909990099 -030809101000111209101004130605141400150416141400021616171704181818011700909992099999909010090999999199999999991090999919019139999999 -050104080800090909091000041112121000131312120400130214151600040614140300999990309099990901099999999919999999999999091100900999999929 -080808080300090204100500090904111100121212121300141515161700140115060400999299190999090991909999999190999999099199090990993900999999 -080901051000021112131004140406151004161715151000161718181900031718181900199991130999100010009999990199999099999999099990929999999999 -050809090300061009111104121314151500011614151504171814190200171720202004009999999299099000991909999909999399909199199111990099999990 -080609090900081010111200031010111200131404110100141415110400040216170500999999099090999999999999009290999999391999999910901109991909 -080909090900081010110100081010121200130214141500130616141704180305040400099999990999913999999999099910909199999999090909019000929999 -060809101000010809091100120804021300120814151500120414161500170514040300099999990993191999991900919999199909999999999009909902909999 -080509031000081112041004080213131000061415131000041415150100161717171700092999919999199091909901999999999099099991999093909909909999 -080909011004080909111000121212131004051415021000031416171704061819171700999909993999901909999999090099099911199900992999099099900999 -040808080300090204041000111212131300141412131300041415151500161601050600999290199999090901990909999999999900990919999999990300999999 -080809031004080809101004110509061200111309140200011516161700041816161700999209999999099090991999909999919011199199993090999999900999 -080809010400080809101100051209131100141204020400151206161600150317161600999999993099001999999990919099199090990991099999999099992199 -080809031004021105101000121314151500121614151504121714181900060120181804912901999991099991909999999919999999909199090090903099999090 -080808080900100205110400031213111100121213141500161713141500060418011504999091199099999921099999999999909999999199990110909039990990 -080808080500060309021000111109091000121212121300011414040400041415160400999099291999990909919999999091999999099919093999999909900009 -080805091004080804091000031112090100131412151500160612151504170218191900990009999999909990999990139209999990991099999999019109911999 -060108090900101010040900051111041200131114151200021616041200171717031200990990309999990991999909099999999100091999991909991999999299 -080603091004081112021000081314151504161317151504181319192000050119192000992109099999091999019999990090999991900919990190903999999999 -080404030900100511090900101211131300101411150200141416160400060116160400099990902999999990991999999909919999190901099199903999999909 -060808090300100808091104051202041100131214151100161617181800161601180400999290999990919099199999909091999991090091999019999390999999 -080509011000080809091004021112131004140615161000171715181800190304181800909999993999099099919911100190099909991990999999919999929099 -080804091004111212021300111212140300111505140400161717171700060118181800909100991199999999912999999909999099999001090999903099999999 -040809011000111209101000130209140500041509141604171518181600031518061600019999193990919901909999909019999999009999991990929909999999 -080808090900051011090900121313130100121404150600021603171804161619171704999999909990099999009919939999099009991990099990019299991990 -080509060400081009111200081314151600171702151604171718191604031818011600999999090099090999090900099999999911109909999991029939999999 -080509100400081109100300121314101504161617181504161619191500060119190200999099099999099909092990990009099990909909999199903991999919 -080806010400080809090900101112121304141115160400141102170300141105171700999999903099099990910909990099109991999919999919999092999999 -040105080800091010080800111112130400111112140400150214141600061717170300999990309999909901009999909999999999991999091191900992999999 -080909011000080909101004080404111200131302111200141516171200030506181200099999993999909090991999999990999911191909999009920909999099 -030809101004111109051200111109121204130214150600161718191900171701191904290909199999999999909999090910999190091900991199999399999990 -040608090300101010091104121202131100120414151100161617181800160105181800909290909999999099019991109999999900991900999099993999999099 -080306090400080802101000110412131300111404131300111415150100041416150500299099900999119999919990099999999099999901999993999999900009 -080806090904080810040900110212131400111516170500111517171800031504011800999909909999099999000919909910099990999999099190929039999999 -050408030900101108090900121308020600121414151500121414161600040117160400999290099999999900919999199901909990999999990999903099999009 -080808010400090906101100090912131100051414021100151603171104041818171700999999003099991999909990099909999999190091990999009299999199 -050408090900101112120900101112120100041113140600150216141700151503140400909990909999990999999909939999199001999919091190999999992909 -080909031000080811051000120604021304121415161600121718161600120118180400999299909999090909991999910900199911999109990999993990999999 -080809090904080210110400031212130600051414151500041414150100161718181800999909109999100929199999009991999091999999999993900099909999 -040801090900060808100900111111120500130214141400041515161700041515031700099999930990909999199999909199099109990199999910999929909999 -080104090900081011120900131414141404151605171700150206171704151819190300999999300991009910999999990190099199999199999099091999991929 -050108080900101108080900101213040900101415020400101416171700061616031804999090399990199999109990999901999991099991999909999991909920 -060108090400101010111200041314021200131314151604171714181800171703180500991090311999999990919909109999999990000999099999999290999999 -080801040900020810110904121313140900121513160500120317170600181817170400999991930999199019009999009999099199099209999990999999990909 -080909040500080909101000111112101304111102141300151617141300060104140300090999999099999999099991090991999991099109990999903099999929 -060108040400090908101100090912101000130414020500131515161600130315161600990990399099090999999991099001999991999991099919992999999999 -040801091004111112120200111112121300141515151300141616171804140619050300099109031199099999991999999090999999999900199999099002990999 -040108091004111213091000141515161004141515170500181802060300181819191900990900309990199909199999900999099990099010999999999192999999 -080808090300101011121304141411150200141411161604171819161604050119190600999299091999991090991999119999999999909019990109003990999999 -080809011000080411121000060213121000141513121000140413161600030417051600909999903999090999099901999919999191999090999999929009990999 -080801090500101011110400101211110600131214021500131616171804131616031904999099030999190991999999999999909011099091999991099991999920 -080910010500080810111200131310121200141516021700030604181804191919181804009999993099919999999990199999199111092909099999090999999090 -060802090900100811090900100811040300040812051300141516131300040117171700991990919999999999902901999999999900990199990009903099999999 -080109090400080809090400051010110200121211111300121214151300060416031300999099399999190900919999919909919999999990999909909099990929 -040508090600101111121200011111131300141415130200161617041800161603181804990090009990909999999939199900999999199009199909999999999290 -080808090900011011121204131314121204131314151500161705061504021819200300990999099993009091999990990999099999991099999090019999911129 -080910110300080206120400081314121500161717121504181717191904180105191900911299199999999991090910999199999190000999999909093099999999 -080306010900101112090904130514141400021516171700181819171704181819202004299991903990099010919999999199199111990999999909099990999990 -080809010500080810101100120410101104121313131300141516171700030602170400909999903099999990999999900999199099999991991199929190990199 -050108040904100808110900101212121200130614150200161614170400161614180300990900399990900999199999999090919909190991999990999919999929 -080909090300081011121300141402151604141417161604011818192000061818052004099999099299091999019991190999999910909910993990999909909990 -080806040400080809090900041010101100121202111100131214031500050116171700909999990099999900909999999911999991999909190992903099999099 -040308090904101011050200061011121200131411121200131516171800131515010400921900999199999999901909999909999900999901990090999930999999 -080105060900081010020904111010120900041314121500161617040300161618181800999999300990919099919909999009909909199009299909999099999999 -080905101104081206130300081414021500161414041500161717181900161701191904009109991290099999919999199099999099999910099900999399999990 -080910011100080910121104080910121100080610131400151616021700051603040400099999993999001099999999999999919909190991999910909900992999 -080804040600010809101100121210101304121214140200151614141700051603181700909999990093111990991999990999919999090099199999909999999219 -040808080904011011021213141011111212141004041504141016160317050618181818099909191093091099999909999990919999909990299099900099099999 -080808091003111111041010121213131404121513130205161718060419160120202020990929090999999990991999990999919919190199900099093009099999 -080909091010080811031010021212131404041212130504151616131718060119201818999099099999129919999919900999999999990919000900903099999009 -040809101004080809101011041213141414151515021617031818191920051818190106099999999909099999009000099999990991112999919999199993009099 -040308091004111102121213111404121213011415151516171406041616181919191905921900991099119099999910999999090399999999990099909909009999 -080801091000080811091000040212131004141415151004141606150500031718181800999999939999010999919901190910999999909199999909991900929999 -030802090900080810101000040611121200131415151204051615151700181818010400919992910999999999919990099099199099909099099099909030999999 -030809090900101112040500041102131300141115161600141117161600040117170600219999919090999909109999999991099991999999990119903999999909 -040808030904020806100900111112120900111112120100130514151600131304171600992900999991990919009999999999999919390900999099999009999909 -080409101000081109100300041213041400041215151400011215021400051216061400990999099990999990092900099999999099999991993191999099909099 -080809100400080811110500031213111404151513160100151513161600060217171704990099909999999990990990900299099990399999999999991919901990 -080805030900041002110904121213131400121215130600161617181800161601041800999299009999011009199999909991909919999199999109999309999999 -080109101000081109100400121212121304141515160200171515181800050603181804999999399990009991990999900090199999190999199999900999999290 -080809100300080211111100121313131304141504040500161717171700160118180600991299919991199919999909990199999909991090091999993090999999 -080306091000080802091000040411091200131415091200041615151200171705011200290999999999199999190999999001999009990990999090990039999999 -040108080800090909090400101111120600130511021404151616171700151616031700999990309999990991999909009099999091100999199999999929909999 -050208090400101108080300101204060400101213131300141415161600140117161600010099199999992991999999999990009099999109999099993099999099 -040105080900101112130904101415160600101415170200101815191904181815190300990990390990110099919900999999109999199099199999099999999929 -080809031000080809051000110209121000131314141500161714141500040406010400992999999999999909909991909019099999999199990190900030999999 -080803091000080209091004041112051000061313141500161616171700180401171700929999999991999001099990999919009999090910999909909399909999 -080905101100080909031200081313060200081415151504161616161700041818010400990199992199999990991999909990919009909919999990909030999999 -050308080800090909021000111104101000061112131300041401131300000000000000929990991999909999919999099999199001999039990999999999999999 -060809090400010810110400120810130500141410150300141402151500000000000000099099909993100999909909909099999999299919999919999999999999 -030804010500090802101000091111101200091111061200131415041200000000000000299999903099199999190999199999099999990909990009999999999999 -040408080400091010101000111111110600011202131300121214050300000000000000999990009090999990990999999911999391999909299909999999999999 -030805090900040802090400100611111100121213131400121213010400000000000000299999909999119909910999999009199999099993099099999999999999 -040108080600090908041000090911021000120405131000141414130300000000000000999090399999099999909991119009099999990909299999999999999999 -040808080800040909100100110909121200130502141200031515140600000000000000099999909990993999919909099099199091999919092999999999999999 -080804040900080810110900121212020900011313141400061304050300000000000000999999900999999990009999109991199399999900290999999999999999 -080808080400060409100100111111101200050204100400131414151500131304031500999090990999013999199999909019909909999199990919999929990999 -080806090300100511090904121311110200141516171700141518171700141501041904999290909999099009991900999990919091999919999099999390999900 -060808091000010808111004121212021300141505131300160417171804191919170300091099991993999099019999919900999099990999190990099092999999 -080808020900101011061204011013141400041516160300171716161800171705041800991199919199909099191931999990929009999099999990999999990909 -040809101100010812121100130812121100130204140500041515161600061715031600000099999993099999999919999999999109099190990919990929909999 -080309090500080810111204130206111404131516111704131818190100201818191900299999909099099091990990990919909919009910999913909999909999 -080409100300080611101000081111120200081313051400151515151600041701181804909299909990999999919909919909919999999900199991990309909990 -080910101100080902100300080912130400141212131504161616161700041801050600999199999299919999199999999009909091009991099999990300909999 -080808010904100211090904121314141500121214141600170603051800192020201804999909113990919001990991999999909999990920090999909999909990 -050809101004031111121000131111021404130615161400171715181400171715010400009909909992990999909999110909999990990990999091999930999999 -080109101000081109101004081112121300081112120200141516061700050403181704999999399990119099091999999999919999990900199099900999999210 -050808010600090808101100091212041300091402151604171418191904171403191900099999993099901999001909999999919911109999090199099299999999 -040108080804091010100200051112121300141415041600141417161600180617170300999900319190999900091999999900919990999909999999909992909999 -080109060400080909101000081112051000131313131400150216161600150404170300999999390090999999199991999919009999990199099199990019999929 -080509031004080809111204131314021504011617181500191917201500191917061500999209099199991009019999910900999311199090999999999909999999 -080901061004080911111004080911121000130914150200131617181804051903181800999909930999990099999900199990199099199909199099090999909299 -080909090900081003040200081011111200081313110400041415161700061515010500999999920199999999991990919999999099099901990000999930909999 -080504060900100411120900101313131300141414140100031502160400151517171700099990900990909999900999999099099999399991999190929119999999 -080808080300090210100600111104121200111113121400151616161400040104170500999299199991099919990999999990909900999199990999903909999009 -040604080800020910080800110909031200111313041200011313141500161616040500999990009991099919990999299999999199999990093900990990999099 -080309101104120409131104121209061100021409150500161717181800160117181800299001990990909099999999999199099110990919099909993999999999 -080909040300100211111100121313140600151313141404151617181904150118180500090990999299199901999999999099909190909999991000093990999999 -060501080900101112080904131412121504131617170200130317171800041919191900999990039999009009990900910999919919199299099999999990909999 -030808091000110808091004110612090500110413090400021414151500161714011500999992999999990099099990909990999990091090999919919939911999 -080910101004051111120100131111121400151617181400150419021400031919061404009900900999993999999909919099999900099099999911999999929900 -050808091000110808091000111112090100041306141400040204031400151515150400999090999990999999999991139019099990999199990099991920999999 -080903100400080909101000081102120400081113040600011113141500041113140500992999999090999999919999109991099099999999093990999990901099 -080601090500101111111100101213141404101202151604171718161604171719200300099090930999999999919900190991099999009919999999099199990129 -080809011000040809111000121313111400041313110400051502110300061617171700909999993999919909190909909099999999099919990099990192909999 -080109101000081109090200081213041404151516041400151517181400050618180300991999399190199990991999090900999909099999999009900992999999 -080409010400080810101100121310100600121313020500141515160300141515170400909999903099090909999999909999199991099919999912999999909009 -080801090904080810101100120210100600131415151604170315181904202018180500999909930999190919990919999910999199001999092990099990990999 -080801090600080810101000041112120500041302141400041315141400031315160400999099930999999990919900909991099019999999990999999909929009 -080804090500100811090600101213091404011215091604031217181600191717021600999099909999099999090909990990909311909991999990929919919199 -080309061000080411041000080211121000050411131300141411151500140116171500290999909999909990999911909999099900990999999199993009999099 -040809011000111112121000110612120400051314141500030414141600171717021600009999903999090999999909999999109009099999999999920919999109 -080909090300080210110400121213130600121214131500161718181500040501181504999299199990900991099999999999909919099910990099900399999990 -030404080400090909081000041102081200131111141400131515141600051515010600990992099099999999190999119099919999999909990900909930999999 -030808050900101108061204101102131400151116171804191120201804190120201800299099999099990099190999109099199011909999990099093999999909 -080909030600080909101104080212121304141415161700141418161904200501161900992999999099900091990900990919909911999999099919009399909999 -080910011100080212131100080514141104081514141100031516041700061516041700919999113991910999099990990999999099992900099999999999909099 -030809061000111111021004121313131000121214141004151614171800151904010500219999910999911099999999909999999909009999199091990030909999 -080808080300050209090904101111111100101004121200061314120400151501161700999299199990999091099999999919999909999199999109900300999909 -080805010600040809101100121212121304141516021700141516180400140316181800999990903099000999919999910099919901199990099999999999992999 -080909031000080909041104081213021100011214150600161217180500161617170400999299999199999090909909119991999390099919990190999909999909 -080808040300040910101100121202101100121314141100011515151500041606050400999999900290999990999991119999999199999109993999990000909999 -080809011004111209131000021409131004151609131700180619131704200321211705909909993991110919999909990109909999991009999999019099929990 -040801060400090909091000111213021404111212151400161617151400161605150300099999030099990991999901190999199999199909999099999992990999 -080404010900080810110900121210110900020610130900141410041500031416040500999999003999099999999991199109099999091990099999999090929099 -080809091000050804091000111212121200131314150100131302040300060416161600999999909999999900900909999901199999399910999999900192999999 -080109101000080809101000111212040300111212021300051415161600041706160400999999399999909991009999999999929091990901199099990099909909 -080309090500081011111100081012131300021404131300041515160100061515170400999099209999999999099919099199999199999100990913999909909909 -040808010400090808101000091112101000061112021300051103141300151116171304099999993099919990199909999099909991999991999999909219909190 -080109101004081111121000081111130500021415161600171818161604171703060400990909309990909999909999909991099119991099999999099900992999 -040108091004111108080200111112121304141506161600140517161600141818190300991100399199199999991990990009919909999999999009999902999099 -030802090600100808091100101004121300051415161304171717171300041818011300291999919099990999919990999909199900000991999999909039999999 -040808010904100811090900100212131400101512161400101512041400061503051400099909913990919991900999099919999999099990999999909999992909 -080809100300080809101100121302111104121205140400151617181800060401181800999299999999999909019991190919999999099100990109900399999999 -080808080900051002090904111012131400031015141404161717180400060119191900999999099999199009109919099291999990909919990900903909999999 -040809090500100209031100101012131400151612131700150612131800150412011804919990192099999991990999999919909019999999099010999939990990 -080910050400080310111100021212111100041212131300061415161300141401170400199999290099999919099919099099099999999019990909999309999909 -060809091000111209091000031202131000041414150100160514150400161617150400009999999991990929119991999999199099399999999900990999990009 -030808080200090906101100090910101200131313140100151617180400150405181804299199909199999999991990919999199999399000990900990999999090 -080909100600080909111200080513021204081415161204171818031204170118191900099099990999999999909999110901999019109192990999093990999999 -030808090904101010090900041102120500131313141504161617180100161606191900299909919999999999109909999901009999009190999113999909999099 -080910101000050909110100021212111300140415110400161715111800060315181804099990990999913999199919909199909900991999991990902999999990 -040801090900101010090900061112130400141412151500161602151504161718030500099999039999999991909901909909099990999919999199091990991299 -030504080800091011021200131314141400041516161700181816161700181806011704999992009091119999910999999901999009999099999990999039999990 -080806010500080809101100121304141500121302161704121318161700041318180300999999903099119991000909909999099919909919999990999999909929 -040403080500091011080400090904081200131306021200141315151200140115151200999090029990919999990999099909199990190999999191993999999999 -030809060500101109121304021409131300151416171700181419171704181801202004299999190091999019909999999190909909991999991109099309999990 -080808010400050909090900101112131304140215131600171819191604170319190600999999903099999909019900990999909011990199999199099990992999 -080909091000030602101004041112131300141512121600141717171700140105180400199992919999099099109900999999909919999199090999993009999909 -080809010500080809101100121209101000130209140600131503140400041604141700999999993099010909999999999999099119099999991299900990990909 -040808030900060808090900100211121300101415131300100516161604171718010400092999999999999901909991099991999001999091999999099030990999 -060108090904101108090904121308140500151515021600171818192000171818032004999900399990909091999901109099199999190999199991999929909990 -030806050904100808110900121202110904131415111600171819202000171701202004909002999991999999199990990991909091090091999019999399999990 -060808080800091003050200091004111100090412131100091414151500041414011500099999029199990999991999999990999990999090190909909939999999 -080301040900080410051100080212121100131312141100131315061604171718161600299099939099099999109919909919999910999990999099009099999099 -050809010400101011111200100411111200130214141200130614041200130315150400009999903099099990999999909999199119999090999999999090929999 -080902100300081112131304141112131304051112151600011117061600181818180400911999191290999099999909990099999990099909993009990999999909 -040601080804091011080800121314151500161314170200181314191904181305190300999900039999099909109990199099199099190999199999099099999929 -080909101000080909101000081111120400051314150400161304021700060103171700090999999999999999999909009009999911999901090991903999999299 -040803090900080810020900041110121300141414041500161617171700161606010500992990999999991900919999919900919999999900199099999030999999 -050106080800091011110200121013111400121013151500120404151500121604040300999990301190199909091999999999919999999999990909999902900999 -030809041000110209091000111204051300111214151300111216160400061201160400219999990999190991999999999990099010099919099999999399909909 -060805010900101010090900111111111204131313141204030402151600171819161600099999003999999999010999990999199990909991099019929199911999 -080809011000080809091000110212121004131412120500150616171700030416170400919999993999990991909919990109999999091090999999929990990099 -080109090900081010021100081005041100081204060300041313131300000000000000999999311990991999909990999999929009999090990999999999999999 -080909090400080302041000080611111000121311111400121205010400000000000000099999219099990999199990909999909909999003099999999999999999 -040808010600040909090900101111111100100512120200041314120300000000000000099999903090999999919909999909919999199999990002999999999999 -080809060300040909101100011212101300141412100200141404150500000000000000999999090290999999091939199999919909199990099909999999999999 -040105080800090910080800061110020400041210131300121204130300000000000000999990309999119990910909999909199099999999299099999999999999 -080808090300101011090600100504090200121212121300140415161600141401170400999299009999999999090999919009919999190919999009999309999909 -050308080804091011120200130614151500161717171704181919202004181801202000929900991990091999091909199091999099909919990909099399999999 -080909031004080909101000111112020400131415160400051718180100171718180600999209999990999990019999109991999001090991999993999999990909 -050108080800090910100400110612121300111412020400111515161704111515031800999990309999199909190909909999999091099091999991099991999929 -050809091000040809091000110812021300010814151304061614141300171616040300099099999999199909199909199999199309109099999999909992909099 -080809100400010809100200051106101204131314141500131316161700041816160300911999999093991990991990990099019909999999199990999992900999 -080109090904080810110500121313040600121415151604120215151600121718190300999909309999000910909999999999909109009199999999991999991129 -030809100200051112121304141115151300141116161304141716181300141906010400211199999190999099099999909999999909909999990001990930990999 -080808080300090910111200041313140400061313021500161717171800161601051804999999990299001999919909999999109999190909199991990309999990 -050809011004111111101000021212061300141404151600031417171700181818180400009909903999919991990919999199009990099999092999999900999999 -080809100600080811110500120213041400031515151604171718190100171718191904990099909999999911090990999219009999009991999003999999999990 -080609100300080811101200131402101200130515160400131717171804131901181804909299909999999990099990109991999991999091099999090309909990 -040501080600091008081100121314151100121602151100121617041100120417170300999990039090190901909991999991999909999910999999990999999929 -080803040900080810040900020410110900121310111100140515161600060415011600929099999999999919909990909199999119990010999919909939990999 -030809010600080809101100041209130400050214131500161614131700161604171700999992993099990991919909999910909911090999099099999999990999 -080109090904081010111100081010111100061213050300141513131604151502171804999909399099999999999909099919999990990199290999099091991110 -080809041004080311111000121311141004151305161600021317161600181917010600990909909999990902909999990099099190991999999919919930911999 -080906101000111213141500011212021504051616171700041616041700181818180300009990990990119999919939990990109099999990999999909092999999 -030808080600090910111204131302141500041616170500181616191904181801191900999992990099109099190991909919009099999990990909099399999999 -080808090600041010100100111112120500111302140400031313151500000000000000999090900999993990919999909991999990099910992999999999999999 -080809101000051112101000061312140100041502141604171718141600031704141600909999909990019990919909939991999009909919999199999099929909 -080910011104080910101100041212121100131314151100131305061604031718190200999909993990091909999999909990099999999900199999090991921119 -080808010904101111120900101105131400101502161704181919200600031919202004999909093990919999900999009919099919009919091909929999999990 -080806010900041010110900121010131304121202131300051415161600031718160400999990003999991999991999990909999901999910990099999190921999 -060808091004111108091004110212091000031314150400051616171800191616011800099909999999999091099999009219099919999910099910909939909999 -080808090900100411090300101213141400151502141404151516170500040106181800999990999990909999092990999009999911909999999000903009999999 -060808080300090210111104121010131100141516130500171717171804040119191900999290199991999019909909999199999100999199099999003900999999 -080809090904080810110100121213131300121214150400030502161704181919160600999909909999013999199990999991099999099919999900020190919999 -080806030904101112130904100514020900101515160400171715181800170119181800999900902990091099999990919990199991090999999199993099999099 -080601090500101011090904121211131400041511160200171718180400171718180300099990939099019090919999919009919999199091099999999999999929 -060808030900100802090900111213141504161717140400161717050400160118181800999290999999019909199909900901909090999990999999993090999999 -040804010900101111110900101212131400100212051500101604151500171717030600099999003999999999910909109999009919999199999909991990999299 -080806090300101111090900101111120400100513021404151513160400150113171800990999099299999999919999999990109909000991999199993910999109 -080109101100080809090500121213131300121204040300140215161600140604161600990099399099099991999990999999099909991999291119999099909999 -040801040600091011121300091411121500161411151500041411020500031717171700099999030099000990999909999099099999990999999919999910929999 -080808090904100311090904021211130600051414131300041414151600171819011600999901299999999019909911109099999990999991999990909039900999 -030804091000110808020500110412131300111212131300011415151500041617170600299099900099919999919990999999999091999199993999990099900909 -050108080900101111110400121302141400041506141400151516160300171716160400999090309091999919999911199000999999999999299099990999999909 -040808030600020904101100120413130500121213131400151516161600150117171700992990199091900910909999999999909909099199999099993099999999 -080504010400091010101000110412121200111313020400061313141400151515031400099990903090999900199999999990109999990991999999999099999929 -080902100300081112131400151617171704151818181804191919190600050120202004911999191299091901099999990919999099909199999990903099999990 -080509101004080211121000081314120300011313121500161617060400041818181800990909009991199999199919129999999399099099099909900099999999 -080509090300101010101100011212041300141212151604141717180200140417180600099990909299999990991939099999919091909091199991999990909999 -040809090900010808040400101104121200131111121200020603140500151515141600009999990093999991999910999199999990991990999999910290999909 -040809101000021103101000120413131300121414140500011516170400151516160600919990129991999919909999999900909199999199993000999999999909 -080403091000081104121000081313140200151513140500151516141700040601141700992999091999901990991999919099909991999919999099900399999909 -080809090300040209091000111112040400111312061400131312051400040115161400999299099990190991990999099999999990991999999099903009999009 -080901100400081112131300080514141304151502161700151818191704031818061700099099030999019990919999990991909910999190999999099909929999 -080809090400040609091000111212021000110512041300111414151600111414010300909099999999999900099999119909019999999919199919999932909999 -050801090900100811090900100812131304140415160200171715031800171715061904999990939999009999199909190009919991190999099929999990999900 -060809051000111109041000111109121200021304121200141516171704181803011700000999999999999999900990099999999190991190999119019939992999 -060808090300101009091104101012121200011313021400041313050400151617171800999990909299999099901999999909919391199999999909900090909909 -080801090904080810111200051314111100021516170600181819202004031819202004999909939099000999199900999991999110091990999909099999929990 -040401030800090910110800090910120800131414150200131416061700130405171700999990032999091999999999199990119999199900090999999099909999 -080909010500080909101100080406121104131414121104131414151600031718190200999999993090901999009909990999999099909990199909999991921119 -080109101000081109101004081213141504080216171505181819202000061821032004999999399999109090100909990991099919909190999199999199909290 -040503080900101112120900101304120200101414151500101414161600040106161600992190099999999990991990999909019991999999990909903099999999 -030808080804090210101000091112120600111112121304141516171800140104190500299909919999199991999999999099909999901909091000993009999909 -080909090400080810100300110212131300110412041300111412051500110116170600099099999999192991999919099999999990999099091099993000999099 -080909090600080204031000110412121200131314040400131315151600050115151600999999192091099919990999999100999900999999099090903999999999 -080906010500081011111204131414151600131314171600031802191604202020201604009999093099090099910999999999199900999991992919091199999990 -040809010500100611111200101314151500101314021600041314171700041314031700009999903099991990091999999999199009199999190999999999909929 -080109090900080810101000111106121200111113140400150204160500151503171804999999390999099991909999999990999900099190991099999900992900 -080808040600010910101100041210100400131214141500130214140500041616160300999999090093990991999990999099009199099999991990901999999929 -050601080800091011121300021414121504161417120400161818191904160318191900999990039090010999999919100199909990999900999999099999929999 -060408090400101111120100101111131300101414131300101415150200050316171704909090900990903999919999999990999999999999199991909109992990 -040104080900101010080900111212131300111212061300110502040300110414151600999990309999900901999999099999999990999019999999999102909119 -040808090900100811111204130211031204141516161200011516160600051517181900990990999999990000929911990199999199999999993099999990900009 -050801090900101112120900131415120200061415161600171704161600171704030400099999031990099900091999999099919999999099999909999920990999 -040801050900101010111100061212111100130214150400131304161600171717031600099099039099919909999999199919999011099901999999909929999999 -080901040400080910101100080910101100121213140200121215150600160403150500999999930099991999999900999990919909199991099999909299909909 -080803090500080804091000111202091000131414151000061414150400161601171804992099999999999909099991199019999099099999990909990300999900 -040808010400060808090900051010090900111002120300130414151600131314150400099999993090919999199909999999999011990001299991999999999909 -080109090900080810101104121210100200051314151604171718192004171706032000999999309999191090991999999900919999100001099999099029999999 -030809091000061109091000041202131300141414141500161718181500040518011504219999999990999990190900199999919999999990990091909939990990 -080809101000080809101000011111110600041213140400030515151500161617020400999999999999999990000939999919099019099019999999929919991109 -080609041004081109091200080313021400081515150500161718191904160118191900999009099099190992910999199991909999990199990009093999999999 -080501091004111112121000131312121000131302041400040615151400031617151400099000930999199991999999999999909910990019999999999199921999 -080109100400081109090500121313141500121313161500120217031504120417180600999099390991990919099919909999099990999199999199090920999199 -080803090400100211120600131311141504131311141400161616171700180405011700929091990991999991900999900999999999999100999919909039909999 -080809090900080810110100061213140400151213161604151513051604031718190200999999990999003900919999909999199990909099999909099991921119 -080809090900010806100400111111020500121313141500041313161500041716160300919999901993990990919999909090199999190999999990999992900999 -080109090500081009111100080612121304081412120400021515161700041515031700999999399091099990990999900999999009091999991900909999999299 -080901101000041111100200121111051304061414151500041414161500171717160300099990039199919999901909990009919999999990999999909092999999 -050808080804040909090900100211121300140611151600141417181800030417011800099909990999999909990911199109109999099991999909929939990999 -080804090300080806090900101010100200011112131400151604131700181805131704909299999999999909091999919919999300099099090099909999990990 -060808010400090208101000091104101000091112130500091412151600040312041600099999193099919991099909999999099990099190999990902909999999 -060108080500091008080200111213131404111213151500111216031500171718040400999090399990191990091909990999919999999999999092909090999099 -040809011000111212101000110213140500111514141600061718181604031918181604009999903999999991119999109919999099099199990990091999929990 -080909091000080511101004080212130600081415151500161718192004161603012004999999990999009099909901199919109999990191099199099239999990 -080808091004020603091000111213090400051413091500161617181804160119181800999001929999999910999919999019909999999100099099093099999099 -080909011000060909111000121313141004121516171000041818020500031819191904099990993999919999199999100990199009999991090919999909929990 -060208091000111212040300111314151500111614141500111617170500040117170400011199199299909991999999099919999909999909990990903999999909 -040808010900101108120900101304120900141415060900141404160200050317171700999990993990001990099999999909999909099909199991909919992999 -080604090300101010091100121204130200141215131600171515131600040105131600099290909999991990991990919999999099990099999919903099999909 -080806010400090909091000020404111200131414111100151414160500150317171700999999003099990910990999009199999099991999999900999909929999 -040408030900100511090900121213021400151515141400161617171700161604010600909290909999999900019999919090999999999909199099999030999999 -030809091000051109091004041202130600141415160100141717161600041818181800299099199990999091119901909999199900399099999999900999999999 -080401090900081010110400121010111100020613041400151516141400151503170500999999030999900909999919999190999099991900999909999909992909 -080809010600020909101100121313140500121313151500120416151500030417181804999999093091990919110999199999099999999099999909929009990990 -040806090900100811090300100812020400101314151500011616151700051616041700099999909299099999019999999990109099999009993910999909909999 -080109090900080810111100121213131304121202040300141415161704140518190600999999309999099919009999990999099919990919299911099009990909 -050808080800030909041000111111021204041314141500161617141800161617010600099999999099990920990999110999919009999009199991999930999999 -080909090900080810100100110412131400111212051504110616021704031818181800999999009999993990019999919999019099909999199001099919929999 -080903101000081111101004081202130500081414140400151616171800040116170600929999199999999099109911009999999999991090091990903990999999 -080809031004111209061000110513141004111516170200111818191900041818011900999209099990999999009990990990019001199919999919909939999999 -080809100500080809110100121304141400120215041600120415161600120415030600999099990999113901909999099919009919999999999099999990909299 -080804010900080810110900021212131400151516171804151505191800060319191804999999903999999990010919109190009999909900999999902999999990 -080409101100080909100600120213100100121413100500141413151600030413170400999099099090909999999901939919999991999990099990929909990909 -080809091000080809111004031213111004141504160100141515170600140218190500999999999999999090099990900200099999399991999990990919911109 -060809011000110809101000121309140500150216161600041703181804041717181800999990993999909900919900909999199019990199099999099299909999 -080309041000080509111000120209131000141415161604141417171600060117170400299999990990999919909919909910909909909999999090903999999909 -080909041004080311021200081313061400151513161400171717171400180504011400999009219099911999991999909099999990190991999999909039909999 -080803040400080804090900020510091100121213141100121515140100041515140600929999990099999919090990999190099999999109999913909999999909 -040108080900101008080900101011121200130411120600021414141400040515030400999990399999090999099999099199909999991099991999900190999299 -080910041100121313141104011313140500151515151600021704061600181818031600000990999990990099999939099991909999091990990099919999999299 -040808080800030902101100120913101100140906101104151616101700041616010500099999909992919999199901999099999990000999099909909930999999 -050808040904041008111100120213140600121213151500161713151500030118181800099009999090999990009911009999999999991999999109923099999999 -030809100400040605021100121314151500121314151500121314161704120114161700211999991099900900919999199999999999999990090199093999999999 -080409090300100409091100120502131100121415151100121415150400120106161600099290999990999909199990199999199099099999999190993009999999 -080409031000081109061000111104021000121213140400121215150400050115151600099299999999099909909999019099199911099999999099903990999909 -080905101100080912130300080914020600081514141604171515181604170119041600999199901299999999019999909909199919900990990990093099999099 -080910111100080910021100081212040300081206130400141516160500040116160400099999991999919999192999999999099090099190990090903999999909 -080309090400081009090200041010111200131313130400050414141400151516010600929999999090991999991999019099199999990091099999999030990999 -040809090400100811091204100811021300010811141300151506031300151617180500999990999099110099919909919999999399199002999999999999900009 -080409030000080409090000081002110000121204110000121201060000000000000000909999992999999990109991999010999999999990999399999999999999 -040806090000030810020000111010120000110413130000110113130000000000000000090999990992119999919909999999199909999999999399999999999999 -080809090000080802030000101111110000010412060000041312120000000000000000999999912999199910999999999300099999999999990099999999999999 -080309090000080809090000020610110000121313110000040401110000000000000000999999299999999919099909999190999190990039999999999999999999 -080309060000080410110000081202110000081213130000011213040000000000000000929999910999099999199999099991999099999990993199999999999999 -080106090900081010090900081112020300081314141400041313150400000000000000999999309990999991912991199999999009990990999990999999999999 -030809090900080802101100041212121200041313141500061313011500000000000000999992999099110999919909999999199090099993990999999999999999 -080910041100080909041100081212031100131212141100060401140200000000000000990999909999909990999909929999999091990039199991999999999999 -030808091000110808061200110213131200111415151200110104150400000000000000290099999099909991999910999999999109999309099999999999999999 -080808010900101011110900041011110900030212130900141506130400000000000000999999903999090999999909999991999910992109091999999999999999 -040108090500101108090900121313131304141414151500020603151504161717171700999990399090999991090919990199909999991999990999019299919999 -040808080800010910041100121213020400121213141400151513051400151613060300099999110093999990190999199999199999999999999909990992990099 -040809100300111109101000111212050200131212141400041516141400171701040600099299099999909990991999999999019099990009999919990300999999 -080509090900081010101004110406121200021314121204150314161700181914011700999999099099999009909999999000999111901991099999912939919999 -040106080400091011111100041012131300141012130200151616171700051616170300999090300990199999199999999099999091190099199999909999999929 -040808030400020804050900101112061300101111141300101515041300100116161300992990999091990919090999999990099090999999991999993009999909 -040501040800091011061200091011131300091004130200091414151500041414160300999090039099909999990990199999999099199909190999909919999929 -080801040500080809101104121313141500121313161604171802160300170619191900999999930099090099190909109999199999900999999019990192999999 -080109100600080909111104081212121200081313141500021613041704181819030500999099390991909090999999999909999990091990091999091990991299 -040108050900101108080900101213130900101413021500101416171500060404031500999090399990190990919999999909199999199909999991900029999999 -030809040400100809111100100802041100101213141400051516140100171717170600990992999091199999199999099991909919999199990113999909999909 -050308080800090610100200111212101300141212041504161717181800161717010400929990999190990909991999999099919090909909199909999930909999 -040808060300090808041000091112131000140412131000051512130200151501131600090999999299990999099900999099999909990999199019999391999919 -080808080600030909101100040212101100131415161100131316161100041705010400999099990992999999199991909019999019099919999999990030909999 -080404040300080909101000080909110400041212021300141212151500140601051500099999900299999999919909909909199099199999190919990399999909 -080309090900081010040200041010041100121313111100121313140500120601151600929999999190990999991909999990099091999999999909999300909909 -040804040400010809101000021112101000131114141500131114160500130306161600099999900093199999199911099199099999099990099999999999929099 -030809091000110512021000110413141000110613130400111516161700040116161700219999991999019999199909909999099099099919990199903999999909 -040808040900010810100900051110100900121304140900060215140400161615150300090999999993199999999991909010999099099199990190990999999929 -050808080600090910111200090910110100040402131400041515161400031515041400999990990099010999999999939091999900099910990999999909929999 -080804090600011010101000111213131404151516051400021516161400171819031404990099090993999991999919900190099909991999999999919999911290 -040508090900100211030900041213131400151212061400161617181800161601181804991990012990199991099999999099999099999910099009999399999990 -080809100300080809111204061302141205151617181204191919202000212101202004999299991999919090199999000001999001909991999919909399999990 -080909010600021011121300140511121500141611121500171611121500031604041804199991013099910910990999999999999909991999999999929090999900 -080109091000081109091004081205131404041513131600171702180300191919190600999999399990999091900990990919909009099199999192999119999909 -080509100300110209101000061213140400151515141400011604171700181818171704099290999990119991999991909091999999999190993999990099999090 -050809041000110309021004121206131000121213131400011516041700181818171700910990299999919009919990999999909999099019993109990999999099 -030608080800090909021000111213141400110405151400161617171804161617010400999992099099919999010900999909999990999990199091099930999999 -030809051000061112021000131111141504161717141500181817141504181801041900219999910999910909919999990090999999990999999010099390999909 -060308080400091008081100121013111100021013141504161714141500180504011500999090299999999909099909099999999199901909991190909039909999 -080808090400101010100100051104121300111114141300150216161300040616160300999099900999993901909999009999999909990199999199909999990929 -080804090500041011111200130211141200131514141200131516171200031504010600990999090090099999999991999911999099999901999990999030929999 -080109040500081010101000081111111100120404021300121203141500160617141500990999309090999991999999999000109999999991099999909299909199 -020808080800090504100100110612131300140412041300031516171700151516171700199991091999903919909909099199999990992099099909999999990999 -050808010400090908101104090206121304141516161300141716161300031819191900099999193099910091009999900019999999099199999999991099929999 -080902100500111210101304031214151304061215150100161617180400161619191900111991999099999029919990000999999099399990999000999999990999 -080905011000080911121000080906131400151502160400151517181804030417171800009999993999001999091999919999109911999909999909020999999999 -080808080300090406101000091111101000091111020500091213140400151501160400999990999299909990999999999999109991999199990100909309999909 -040808010500090910111200090911111300140315151300141602151300040417061300099999093099000999999999909991999299999919991199909009990999 -050108091000111213130400141413131500161606041504170218181500171718180300990090309091099919999999909199999999900100999199999999999929 -080809100400050304021100121212121300141515161600141515171700140604011700911090291999901999991999919999199099999991999909990039999999 -080909030600081004111100081012021100081013131300141015160500040115171804999999092099999999099999019999199999990919990109903900999900 -080809101100010812101304141412100400141402150500161616161704031818180600990099909093199099990991999999999910099919999990029090999999 -080808080400090410100300090210101100121306111100141515151600040105171700999099909999992990999901999919999190991999091990903090999999 -080806090300080810091100121314091504121316151504011317180200051319202004999999909299999990091909090990999999909909193091999919901190 -060809090900100811120400100811130100140811151500020511041500161616030400099999909990900999999991139999099199991999999009919990999299 -080803090900050810090900111210060200131313041400041515151500041601171700992999999999999900991990099009919990999909190999990309909999 -080808090600101111090500100411091200101314140400101514021600040103171700990099999999999999990999909900009019999199999911903991999299 -050804030400090810101100090910100200121212121300141401061500000000000000099999902099099999990999919099919999199039099990999999999999 -080802090900100811120300101304141400101315141400100105040600000000000000910999919999912991999999099999999000999300099999999999999999 -080909010600080810111100121314111104150516161604041717021800031717181800999999093099009999099900990099919909900991999919999909929999 -040801060900100808111200131304111200131305111200141404021500140403161600099099939090910909099999999999999909990991999901999991909299 -080809090300040610041100121310111100041410021500161610151500161601040500909999000299999909999909999909199009199999999019999300999999 -080809061000080811111100121213040400121202141400151616171400050104170300909099909099999990990991099991999991990191999999903099999929 -050808090300100808090600111212090200111304141400111516141704110118191704099299999990999909990909919999919909999099990119093099999000 -080809031004081109091004120213141400151515141400051617181904202020010600992909999999199001990901999991999991999001990990099030999999 -040809090500010809090400100811020600120411131400121203141400000000000000099099999993190999919909109009999990099929999999999999999999 -040108040500091011121200091111121200090206131300140415151600170315151600990990309099109999999999999919099109991090999990919999929999 -080910041104120313131100141413130600141516161700021518161704051519011700000900999999990902999999999990909999091999991919009139991999 -080808090300041011091204131002091200141415161200061717181200041717010500999299909999999009099990199091999991199009990991999930909999 -060108080800091011121200041013140500151004161600151002171600150318171704999990309990099999000909099990099099999999999119999999992190 -030808060904101008110905101002120900131415160904131718191904130120191900299909990999999099109999199909199011009109999999093099999099 -080808010600090905101104120913141500120216171700121616171704180319190400999999093099909099910991109919099109999999999999019900929999 -080409010600080210111100081212110500130314150400161614171700161614170400909999903091909991999999109199099290999990099999999990990999 -060808020900100408110900121313110900051415110300161414171700040401171700999190991999099909099909199091929999999910990999900399999999 -080808010400060910111200131305141500161602151504161604171700031818171700999999093090001990991999009999999911909900999999929999999099 -050103080904101011041200131014150200131606151700131616151700131818150400992100399199009999991901119990909999999999990999999990909999 -080801040900080810101104121313101404121313150200121616051700120603181800999099939099090099099999910999919999099900190999990991999299 -080910030400080911041200080911021200051314151200161604171200160106171700992999919099990999999909199909199011099190999099993999999099 -030809090904100804111100100812111100100812130100021412150400050612161600999902990999909999999999999999099901391999991100909999990099 -080409090300081009091100081206111100041205020400131415161600130117161600099999999290099999999900999999199999090001990199993199999199 -080109090900080810110400121314140500041315151500041302160300041306161600999999309999090991909900999099909999999909990119999092909999 -080801050900080810110900120213131400120613131400151616161400031704040400999099939999910990910911999999999909991990999999920900990999 -080409090600080509090300081011041204081314141200151516161200150116170200099099999999099999002990990900999999990099999199993991999119 -040809091000111109091000031105121200131313021400151515151600061701040400009999999999990999909999999200909991199999199991990300909999 -080809101004080809110100121314140600121514141604121703180200120418180500990909990999093990919909909909999999109099199991990290999999 -040308040900100808110900100212111100101313140400151313140500060104141600929090999999900991999991999991999099099999990909903090999909 -080604030900080510110900080211110904081204131300141415130100141416161600099999902999009999999991990919909009999199999113999909999999 -080809090904080810110100120210131304121410131300151606171804031605192000909909911999993999909911990909999999991090099909029990999009 -030404080900101010100900110605121300110214120400111514120100041515120400990992090999990919990999099909909199999199999903999999909109 -080801090500100811120400100213141504100613161700101813161700031813161704999099930999010999919911100999909909099999999099929999999990 -080901040400080909101000111212101000131402151500040506151500161616160300999999930090909901999999999091999091999009999999909919999929 -030808080800090506101100091212101104091314101500021316101700041301180400999992990990909999999909990999909919991919091900999309909909 -060108080800091003110200090912121300041412051300151416161300040416160400999990321999991991991991919909099099999909990999900990999999 -040408090500101102090300121212131300141415131300141415161600060115160400991090019990992990199999999919999900999999999909903990999999 -040804010900080810100900041110101200111104131200061414021200031414050400099999903999999990990990919090999999190991999919999900929999 -080809050400080810111100120210131400121510131600151510131704030618010400990999909099999990990901199919909999999999099990029030990999 -030108090904101108090900101208130600101415161600021417161604181805190400999902399999909991999990009910999990991909991999009009999909 -080809090900100502040300101112131400101515131400101515130600040116171804999990919299909990199991999919999999099999990999903000999000 -080808090600011010020400041010110300121213111100121413040500040415151500991099191993990999919909999900929999999999999009900090999999 -050809090300061009021100121212121100131314141500131314141504040416011500099299099990911990999999919909199999999999999990009039990999 -080801090904081010090904111012021304140512151300161617181300161606190300999909939990909009199999910009199991990999999009999902999099 -080809100300110212130600111414141404151616040500151617181800150104181800991299019991100999999999990109999190999909099909993099999999 -080906101000110912121004131312121400031302151604171717171604051819011600009990999999999009990999909290999911109999999991099039900999 -040808010500090808101000091112131000090413130600031402151500161616170400099999993099909999919900099999909909999910992999991109999909 -080804010904100811090900101213130500100213130600141516161700180316161704909909993990009999910991999919999999099109991990919999929990 -080401040400080910101100080610121200080213130400041414151500051414031500099999930091190999999990099999909109999190990999999999909299 -080609090900081002110300121013041400121013151500121016151500041704010500999999091290919999199999909999909991999999990009990930900999 -080808090904101006090900041112131300141212021504161617051800161601031900999909099999999990090990099099999091109199199109999391999929 -040108080600091011120500131111141504131602171804131619191800131619190300999090309991909919900919900919999910009919999999999999999929 -080806040500010809101100121313141404121313141400151602170300181819191904999999900093999991000999990999999099999910990009909192999990 -080808080400010909100500110909101200131415021604171415181904171415030600999099990993999999990909199099109900100999199991099920999999 -030808090904101010111100121202131104121204141500161616161700180501190600999902099099999999199999190999109999999001099990909309909909 -080804090300080810090904111112051300111414141500161617180200060119191904999999909299999009091999099990919099999099199191903119999990 -080801090400100811111200131411111204151402161200171818161904061818050300999099930990090900999999990091999991990909999991009902999999 -050808010900030408090904101112131300100414131300100215161700181818160600099999993999909020919990999990999991999010991190999090999999 -080804090300080810111200131302061200131415151204161617050400160118181800909299991999919909199991909999999909001099999009993090999999 -060804010900101010110904041213131300121202141400150316141400151517180500099999003999900099919909999999919901999919999999992109991909 -080904101004080909101000031112120600130212120100141516171700041616180500999909909990999999000991999219999999391190991909909909999909 -020808080300090610110400121213111404151216110500151718111900150118181904199291999999099919090990000999909909999109990990993999999990 -080809100500061109090100021112121300141112121500140416151500140304040400990099099999193909909919909199909999999909999099999000929999 -080801090500080810110400121310100600021415151500160304171700161818181804999099930999100991999919999109909909991909999999992909919990 -030809091000080804091000111202130400111414150100161414171704060518171700299099999999999991000991099991999099399991990919009999990099 -060809090300101011121300051414151600041414021600171718181604171718011604099999009299909990901909099999999091199199999199099939999990 -080808010900100411090900041212131300140215061300140516171700140304171700999990903999019909109999999910999190999909999009999999929099 -080309100400080609111200080209131204141515161600141515161600041718010500929099990999099999909901990919009099999999999919999030900999 -080404030900081010040900081110051200081113140200041113151500061613011500999299009999909999991999099990919091199999990019999939900999 -080309090400080409090200101111121200131313131200141515161700051506010400929999999099091909091999999099999999190901999990909930990999 -080809011000080809101000051104121304061102141304151116171300031819171300999999993999009909919999010999999991100919990090999199921999 -030808040900041011041200131002141200151606141200151717141200150117140500299099919099990909199909199099999009099099999919993990999999 -080306090900101102090500121213131300011414151500041414161600041704161600299991909991119999910999999901999390999999090999990099909999 -060808080804010910110500090912121304141412121300141415021600031718180400099909099993000999999991900099999999999919999910999910921999 -080808010600091011111104121213140500041513131600151517020400181818180300999990993090099099199999909909099909090991099919999199999929 -080809041000080809111004031213131000121213051000021414151604171414010600999999990999000099999929999999999999991900099910019930919999 -080309090400081009090500080411121304081402121500011416121700061418181700999099299999199999190999990901909099999919093900999199901999 -080808080500060204030900101011111100121313130400141414141500040116151500999999192099099901990999999190999999091099999999903099999099 -040809090900010808100500111213041400111513021400161617061400161604031400009999999993900990199999999909099991190009999990999099999929 -060809100300080809101104121309101100121309021100011314151600041317040500099999999299999009999999099999999019199911993910999990900099 -040804030900101102090900101212120400100513131400100613131500161617011500009299099999019999199999999909109999099999990990909039990999 -080803090900081011090900021004120400131012121400151617181400061601051404929999999999009919999990909199999199990109999100909309999990 -040601080500090910081104091213130400141513130200161616031700181818171700999990039099000090199999999909909099190999199999909929999999 -040809090600050409031000111202131000141515161000141515171700181818011704009999992099099909199900119999999999199991999909909039999990 -050108060400090908081000090911121004131414151000130204161000131717170300990990399099099999999990000109099999999990991909991999999929 -030808080000040902100000111110100000111112040000060112130000000000000000299999919990099999199999999991999909990990999309999999999999 -080808010500090910101100121310100400061414151500161404150200040317171700999999003099990999999900909090199999999909190999909991992999 -050108090900101108090900101213131300141414140400151606031700041802171704999990399990009991999999999910909999990199999092901999991190 -080909041004080909101004080211121200081111131300141516171800031906010500990909999999999090909911999999099999991010099919920930990999 -080309090904081005110600120213131300141415160400141415171700041801171700299909990091999991009919999199099999999990099109990399909999 -080809101100021203111104131212141500131617141504131819201504130105061500910991920991999099909999909919999009909109999909093009999999 -080509031000110409091204110613131400111515160200111517171800040117171800099290999199099099901990999990919991199999090099903999999999 -040605010400080910111200131313111100141415021604141415171700181815031700999990003099019909190999999901999991109999199999990929999999 -060108080904101112030900101314150900100516151504171702181900171718180400999900309990099991929991909991999909909911099019999990999999 -040808080300091010041100121213041100121205141100151516170200061501171700999990099299909900999990099999999990999090199019999391909999 -080905101100081212101100130212101104140415061100141617181800030104181800909999099990999999999911090191999990999019099109923099999999 -080808080904011011060900121314140900121215040900161705181804021919190300999009099993909991099990999910999990999199091099019999919929 -080109090400080809091000111112121200131105040600140215151600041717170300999999399099099919990990999099999909990190099191900992999999 -050108080904101011120900101006120400130214121500161604120300161717171700999900309999090999999990999199909111199099299999999099909999 -080808040500060903101100041213101400151502101400151617101404161617011400999999090090290991999991999091999919999199999110099939999999 -080801040900080810100900111111100600121213141500121616160200040517030400999999930999090999199999999901909991199999199991900190999299 -030808090904100808091100121302111104121314150600121617051804120119201800999902999991999999109991990999099190099909991099093009999009 -040108090400101011111100101012130600030412141500161612141500161602050400990090309999099999990991099909099999092999999999999190991099 -080809011004080809091000051112131404151506161404151517021400031819191400909909993999990999919900010990999999109991999119991999929909 -050604080400020909091000111212031000110412041300111415161600141401161600990090090991999919929999999999909990999009091109999399999999 -080809010400101009111200101309141404150216141400150617170500150317171804909999993099900990919990990999999111999090999999999990929900 -080806030900080810090900041112020500131112141400131115041400130116170400999299909999009999919999109099099019999990999099993099999009 -080409011000081112131000081111141404021516141404171706181900171703051900909999903999900999919919190199999009901900099999999909992999 -080909011000110909101004061213141504161705151504161819190200160320202000099990993999999009001990090900999999909090190999999991992999 -080910010500110210121304031415161600171715161800171715041800191915061804199991193099190029119990199909999999099999999909999999990090 -080304040900080610111200080213131400151513131400151516160100050416171700299099909090900999909911999999999909099991999993909999990099 -040809090400080809090400041011111200061314021200011315151200051315031600999090999999990990099900999991199019199999993999999991900929 -080109090500080809091000111112131400111112150600031602171804041619181804999999399099090991909991909999009999999910992999099109901990 -080803090900080806100904111104120200131314141500131314160400050117171700992999999999909009901999099909019999199999999100903099999999 -080404090400080810091100121213090100021415091600051417171600031417061600990999099099000999999991139199999190099909990999999999929909 -080910100400080311110400081205110200131313061400151516171700150104171700009099999999299999990909919900919990999909199119993099999999 -080401090900080810100900111110101200130414151600061717021600031717051604999999039999090999990990999099109900990991999919999909929990 -080801040900060810111200131415161600131417160200131417181804040503181800999099939099010909919900099999919990999999199999000999999299 -060808030400020909091000111212121200131414151500161414171704040118051700999990092091999919990999999109999999991999091909003099999099 -040808010400090908101100090912131400041212131400051506021400031617171400099999993099901999091990919999999099999001990999999919921999 -030808040904100808111100101202111300101414151304051414160100171717170600299009999099909999199991999919999099009990990913999909999909 -040108080800091011121300141516161304140616171300181805021900181803191904999990390990110909919990990909199999990991999901999999999290 -080104050400080910111100080910111100080912120600040902120300131314151600999999300099909999999900999999999919090919999999990192999119 -080502091000081111111204080613040300081414141400151516171704150118171700901199919199999099192999099901999099999109999999093099999099 -040809011000031112131000141112061000141102151000050416171700041616171700009999903992991999909901999991999991190900999999990999909999 -040108080000090909040000101011110000100211110000061213030000000000000000999990309999909991099999999999999199990199999129999999999999 -030808080000010902040000100911110000120611040000131313130000000000000000299999919999199939909910999009999990990999999999999999999999 -080901030000080910110000081202110000121204110000041306110000000000000000039999992999199999199990199990999999999099990099999999999999 -080808030000040209100000111111110000061213130000041201130000000000000000999999092990119991999999999019999909999999990399999999999999 -060808090000100808090000110404120000110212120000110301130000000000000000999990999990909999909999099909999119999991992939999999999999 -030808080400091010021100090612121100091314121100090515161600170401041600299099991999919999199999999901999009099910999099909309909999 -080808090900041011110100121011111300121014050200061015161600041704160300990999990990993999999900919999919900999909190999990099909929 -050809031000020909061000110412121000131412151604171718151600171701150400002999999991999919909999909109999990001009999199999390999999 -080808080300090206100400090911121200011311121200131314151600171704040500999299199991090999909990099919999399999999099009990000999999 -040806030000090810100000090802100000111111110000041201130000000000000000099999902999999999999990199091999999999091990939999999999999 -080909101004060909100300110212131304111212131300111415160500110117180400099900999999912991999919990999999190999190999090993099999009 -060809010500101111111200040213131300141415161704141515181804031919181800009999903090991909991991999919909999009990999909029099999999 -080309040600081011111200130204111200131404151200131616151200131616010500290999909091999991999990999919099909999199990910999930999999 -040808060000090803100000091102100000090412010000131313130000000000000000090999999999299991999991099991999999990013999999999999999999 -080909010000040909100000060211100000041211100000121203100000000000000000099990993999919991999909099919999099999999999299999999999999 -080808080400040902061000010911111000121204110300131214150400051616161600999099119990909999199939919909929909999990990090909099999999 -080209010600081009111204081009131400030515160400171818191904171818191900119999993099099099910999109299099900099900999999099999909999 -050806030904041004110900121213110900011213110200141516171700141418171700009209099999909900999999999999919391199119999109999099990999 -080910100400021103041200041313141200041313141200011515051200061516161600119991929091990991999909999999999099099199993999999900900999 -080109090000080409060000080210100000041111040000031111040000000000000000939999990999999990199901999919099099999999992909999999999999 -060804030000010808090000101002090000101011120000131313040000000000000000009999992999999930999991199999999900999090999999999999999999 -080808010000090909090000100211040000101012040000030613130000000000000000993999919999999991099999099910999990992009999999999999999999 -060108080000091008110000090412110000090204110000091313030000000000000000999990399991099999099999099909999109999199999929999999999999 -080409030000080209090000101010040000111111110000120113060000000000000000999999092990199991999999999919099999991909993909999999999999 -080808030000040209090000061009090000111213130000041201130000000000000000992999199990999991999999999010999009999999990399999999999999 -040808010900040808100900111112131400061115151600041717021600031717051600099999993999901909991990009099019999999999990911999909929999 -080809090900080810110100041010111100120213140500120415161600120306161604909999999999093909999999199910009199999900999099999099929990 -080808090904101002090300061112131304141516130100171717171804191919192005999909909299919990199990990001999099399911999990099990999900 -080808030900101011040900101011111204011314140200151614140600050417171700999299909999999999901990990990919399199199090199900099999999 -080109091000081109090400081112040300081112131400151502160600051517181804999099399099199999199909999999029999190911099919999999900090 -080809090900100602040300111213141404151516140500151517181800191919011804999990919290999909109900090991909999999919999919990039999990 -080809090900080810100400110612121200131402040300151617171804050117181800999999909099099909999909999091929119991990991099003999999099 -080406030900081010101104121313141500161314140200011717171700181818040500999299009199999009091999999099919099999009193999990990999099 -040808090500040808090600100411120200131314121500131316121500171701031500099099999999999909000990919090919999999909999019909399999929 -040501060800090909090800101111120800100411120200041314151500041603151500999090039999999999919909099999909999199099190009990999909299 -080809100400030802100500041112101300061414101300151414161300150401161600919092919999999990190909199999999091099990990999990399999999 -050804030900060810040900110812020900131312120400141315151600140115151700099299909999999909009909919909199999999919090199993990999909 -080409090300080809091000111112061000131414021000131504161000130105170400909999999299999990099999999090099191199990991099993909999009 -080808080900031002040900041112121300060414141400151617170100161617170500999999119992999999100900999991909909990991999093909999999909 -050808090900100806090300041112021300141414151500011617171700041818181804990990999990999900092999199901119999999109993999990999909990 -030809090600040809040400100811121300140215161600141515171700140501171700299099999999999909000909999910009190999999991909990399999999 -080803040600080909101100020909121304141516131300141718191900051701191904929999990099990919909919990919099910999919990009909399999990 -080409050300081009111200081006110200081013131300011014150400161616170400990999099299091999999990919999919099999919993190990909999009 -040809090900101111111100041206130100141402131300141415151504030516161700009999909990999900999999039909999919999911999999020990999909 -080809101104010812131300141515131304141617181800021604181800061619030500990009909093099991999919990990999990991909991999909990991299 -060108091000111108091000111208091300141505131304020403161600171819161604999990399999999991990990009919999109901099099999919299911990 -060809100500110809120100110804130400110814151500030402151500161616171700099099990999093999919999009999199009999009999919929190999999 -080809090904080802100300041111121200061111120500131414140100151516170400999909991299019999199909999999999990090919990993999909990009 -060809090300100809091100120802131404151605171400181919171404180119171404999990999299999909091901110919999109991999991909093999999990 -080309100600081111100200080411041200131314141500041314140100051617171700921999999099991999991999909000919999199999990993990099900999 -080808090900011011091200131314151204131305021204161617181900160617032004999999099993110999019990990990199999900991999091990991999920 -060804030904100811111100100812021300141212131300151515151600171805010400099209909199999999919999199009999990990919999990909930900999 -060104080500090910111100090912111300141402151304161604171300161617170300999090300999009999999991909991999901900991999999999099999929 -040108090400101010111100121313141400121313050200121515161704120615180300990090309999909999199999199999919090999099199991099919909929 -080306090900101102090400121212120500131415151500131617171800130104181804299991909991100999199999909919099999999109990990993099999990 -080809030500080809101100120209101300121204140400151617181800060117181804992999999099999909990911909999099999999100090009903999999990 -020808010400090408101100090612101300090305101400151515101400161616160400199991093099910999990990099990909299990999999999999099999909 -080304091004111206131300111212131300021414151504161414151700181818010500290001999099909999999999099190999999901999991910999030999999 -060108050400091010101100121314141500121302041604121717181800031717181800990990309090990999919900909991909999009919099999999999929999 -080805091000080811090400121111090100021313091400151613061704181803041700990099999099999990999919139190999999091990091999091999992909 -060808010900100808090900101112131404101512051400160204171400181903171404999990993999999999019900100999099919999199991900919999912990 -080809090400080809090300101105121300101402151304101617151300040117170600999099999999099990992909019999199111909999991099903990999999 -080801090904100811090904101202130300141516131305171818181904202020200600999909939999109091999909199011929919900990099999009990999999 -050808090300101004091100101002091200131314140600011314141500041617170400999990099299091999999991109199909909999999993990990090909999 -080109090200080810041100050412121100041312121100141415160300141406171700999199319199199900009999999999999009999900299099999009999999 -040805090900100811090900100812021304100812141300151515161700040103180600090999999999909999099999100999199919990191999990903910999299 -080106090400081010090400081111121200131111121204021415161700141418030500999099309991990999909909099199999999901999991900999090991299 -040802091004110812091300110814040300110615160500111715150100171718181800091109919199999999192909999991099900099999999993909909990999 -080910100300080204111100081212110600081213141500161616171504050104181500919299199991099999999999909999099990991009999900003909999099 -040808030900040804100900111212130900141515150200141416160600050116160400099299999999909900909999099009919999199199099099903999999909 -050108080904101108120900131114140900151516060904151517171704021819200300999900399999090909009919999190999999909900999999019999911129 -080506010900101112090904031302141400151515161600171718161604171919191904099990903991999021091991199990909999999099999099099099999990 -060108090900101111120400101111130400100214141400101503040400051515161600990990309991900999909999909990999199999190099999909299999099 -040808010900060808100900111102120900111113120900141513041604050317171700099999993999901909999991119990999999990199099990002990999999 -040801050400090910101104031212121100130214151100161617171100161617170600099999030099090099919999999291099919991190999999999999999909 -080801090900080810090900111213051400111212150200161706151800040403151804999999939999019999091990099999919099199099090099900999999290 -040808040900101011121204130314151200161602171700161606171700181818010500999090099099099099099929009199909911999909999999990930999999 -080109091000081109041200081113131204081114150500161102170300180604171700999099390099099999999990990999999019090910999919909092909999 -080809100400080811111100121212021304061415161704181819191700181805010300990099909999099990999999010999119091909019999099999032999999 -040106080800091010111100091010111100091204041300140215031300041616160500999990300991909999999999999999009199990109999099901920999999 -040104080500090910110400091212121200131314021500131314161500060317171700999090300999999991000999999999199991999990999199902900999999 -050104080900101111120904101111130900100402131300141415161700061403181700999090300990919099919999999909999991990919999910909919999299 -050808090600010808040400101010101100121213131400150213141400150416170300090099999993999991900999999199909999099199990199999199990129 -080909011004080909111000081212131000141412150400140216170400030516180600999909993999909999919909009999109999999191999110920909999909 -040508080300090208080600091010111200131313130400141415160400140117171700909290999991190999999909909199009999999190999090993099999999 -050809090400101112120600021112120100131415161700130415181804130315181800099099009991190919999999939109099990099099099999099999929999 -030806050900101010040904021112120900131312121400131516171800151501170400909092099999999091909919909199999999099109099109999390999999 -020809090300101111111100051212120400131415041604131315171700060118171700119291999991999991999909999919909900909199099999903099999099 -040809100500111112120100131313120400141515151504141602171800140317170600000099990999093999999999909990199999909910991190999990929999 -040809010400040808101000021112121200130614151500131314151500040314040500009999993090919991099919999109909990999999999999902900999999 -080109090900080810111104051202131400151516061404031517181400191919041400999999309999119009919991109910999990902909999909999009999999 -060108080904101112130900041415130900161702131804161919131800031919051800999000399990110999099900999999999111009909999999929909999999 -050808010900100808110900101012121200040602131400151515161700030416160400099999993990901999991999999099919901199910099999929990990999 -080809091004011109091004121111131004141502130300161705131800161619200600999909099993090099999919990199999111990999290091999999990009 -080909090105101111121313041111141313151502161718191520201718030620042118099990990309990909999999019999100911999990991999929999990900 -080109101004081112041000080405131300081402131300151416171700061416160300990909300991099990999999999990999111990901999999909992999999 -060308080800091010041100121310021404151305161600171717171600040118181800999990299099999909900999190099109909990091999999903099999999 -080910111100030402061100121212131404151513131600171718181800171701040500119992919999999990100999190999909909999019099999999300999999 -080808080300060209090400101011110500101011111200011314141504131316171804999299199999190909199999999999909999999019093199099990990000 -040808090904100808090300111213141504111617171800111617021900110106051900999900999999999900902909090900919999999991199191993009999999 -080805010400080809090900100404041100020412111100131312061400131303151400999999903099199910000999999199999900991999099999999909992909 -040308080600090410110200121210101300051214141300041514141300161616010400929990991099091909991999999999099099999099990091999030999999 -080905031000080904101000080911020400121211130400040411141400061511011400909299999999909999919990109099099909990999099919990939900999 -080809021000031109121000131309120400131314120600041515161700041515010500901099991992199999990999999999999900090991999900999930909999 -050809101000010811101004120811021304121211141300151516170400151506180300011999999993099099910999990909199999999091999090999019999929 -050808090300100208041100120613141100121513141100121613041100040113171700991290999991109919999990999999999900099090991999903999999099 -080808010400030902101000061112121200041314141500161614141704161605171700999992913099099990191909999909909099099999099099099099999999 -080301040904081010111200080211110600131415161604171715161600171718190500299009939099990999199919909911999010900999999999999999990009 -080910040600030910111100050210111100121212131300041415131300161617010400190992999099999991999991999091099999999919990019999030990999 -080909090300080210110400081213140400121213040500151513161600150113061700999299199991900999099999009199999990999199099009993990999909 -080801090900101011090900101012130400141512120200161706041804051703181800999990939999909999199990009909999099190999190090009999999299 -080806090500080810110100121304141404121515141400121516170200181816030400909099990999003990019909990999999990999999199911990990999299 -080809031000041109101000121109021300120409140600121515160500120115171804909299999999999909919990909999109999999001990919993900999900 -080903100400080905101104020912101100131415101600171718191904171706011900929099999999999009099919999190909100099199999119099939990999 -080106090500081011091200101013091204141516021200140417181200140319181804999099309990099999099999090019999911099091999919999199992990 -060809091004080811111000011211111000131404150500131616031704131602181900999900909999090990999939999919099009099199999992099991991119 -080409090600081003110200081213051404151515161600171718161600171818010400999999021099991990991900990990019999990909999909999930999999 -080909010400080909101100041212131104140215151100160615051100170318181800099999993099900999019909990999199119991099999999919900929999 -080903101104080912121100080912120200081313131404011516170600051819202004992109999999999999991999999909019099109199993000990999900090 -040809090600101009090400041112131300031415151300160215151700161605011700099099099999990990909900999990099919992199999990991039999999 -080909100200080309111100041213111100141415041600141415171600040515010600091199999199299999999900999990919999999990999001909930990999 -080808090600101011110300101012131404151612131404171812021400050112190400990090999999999999902999990099999001900991999191903999999009 -080801090900080810091100121212041100020613141100150416051700181803171704999999939999000999199999099199999900091900099099919999992990 -080808040600091011121300090914120100031515120500160217120400161618181804999999090099000999999990939990999999092099999110991099999990 -040808080300090210101000091111121200011111121200131415050400060416171700999290199999199999199909999999999390999900090099909099990099 -080809031000041112041000040512131000141512130200161512131700061501131700909299909990090999999999999009919999990999190019999399909919 -080903010500100211121304141411111504141416161700181818181900202020061904129991993091199099910990900999909999099990099999999009999990 -060308020900101111120900131414151500161414051504171718180400171701181904991990211999990909919999199099999999900910999099999390999900 -080909090904080210030400081112121300141516171700181919191704181806010500999909119990929991990999999919009019990919999990099030999999 -080809040300080810111100121202110600131314041500131314151500050114160400990999909299999990090991199199099909999999999909903999999009 -080808090903100511091213140611021515141611171515141804171704140119191919999990999920991109919990109999099919999199990099993909099999 -080808090904101011040600101012121300140212121500160517181500160304011500990909909999909999090991909919999199091901999099999039929999 -040108080600090908081000090911120400131304141400020415151400161616030500999990399099090999990990099919099990991090999999919990999299 -080910100600080910031104080912131104141516021700181919191904181801052000999999999099929099199999190009109911090199990999099390999909 -080909011000080811121000040411131000141411021000150511161600060417031600099999993999010909999990199999199909990091999999909099990929 -080906100500080811101200130411101400131315151604170215151604181903011600009999999099999909990999909900099999909099991190019939912999 -080808080300091006111100121002131400151616051404171618181400040118180400999990999299099909919911199199999190900999999090903999999909 -080808090904051011120300041111121300141402120600011415161700181818180400990909099990099999992909919911999991999999093900990090999999 -050809010400041009091104121213141400121202141400151515161600061717180300009999993090090099919991199999999919999910999999909199999129 -080109090600081009111200051013111400041004110200041015161600171717160300999099399990111909091999999990919099999999190099999099999929 -080609100300081109100400081102120400081112121300141516171700040105171700901299999999990999199999199999909919090199990009903099999999 -080901100500041111111104121212131300141515150600041617021800031616181800099090030999999099109999999091909999990991999119999909929999 -060809091004040509091000111212131300141212131500161718021500160103191504009909999999999900090909099999999099990119999911993999999210 -080804030904100402111200131415151600131715051600171718181600060118181600999200909190911909199909909909999910999999999099903999999999 -040608080900101108120900131313140904151516160400170316161800171702010500999990090990990990099999900999009909999999992990999130991999 -080808080300090204101000091112121204131313130400141516061700050118171700999299199999099991909999990010999999091990991099903099999099 -050108080400090909080400100411110200100411121300101414141500100616031500999090309999999900190999919999019099999990199999999099990929 -080109091000080811111004121311111000140515150200161615150400160603170400999999309999199090999909919099919909190999099999990209999909 -050108090900101108091200111108040600131402151504161704151500161818180300999990399990900999990990099199999111900999990099990992999999 -040801091000051112091000131314091000131302151504161604151500171818060300099999039990109991999991909991999991909009999999909902909999 -030408091004111112091004111113131000140615161600021718161600171701190500909902909999090099999999909199099990991009999199919309999909 -080909061000080902111000121204131004121214130300151516130400150117180500990999999999111901999999990990929900999109999990993099999009 -080808080400040209100100111206101000130414151500031414161600171717170500999099119990913991999910999199099999992090999909990999999909 -040804090900100811090900010812120600051314120400151316171700151302170300999990909990009999990939999910999099099909999099999992901199 -030809101000110809091000110812131400150216171404181818181404060401190500999992999999990999009990999199099111909991999990000309999909 -080609090400081009090500021111110100121314151500121614141500120304041700909099999991190919919999939109099999999099999099999090929909 -040804050900041010110900121313130900120214140400120614151500120304011500009999090999999909009999909919199199099091999999999039929999 -080803040600080209101100051209041300140409151300141616151300141604011300929999990091909991900901999999999099999919990910999039999999 -030808080200040909091000110404121000131314121200131314141500060416010500299199999199990909999909919090999999999991999090909030990999 -050809101000040809100300111112020400111112131400151612061400040112041400009999999290999990919999109999099999090099999109903999999099 -080409090600080209101100121314101100150514101100031616171100041616010400999099099990199991199919999199999990992019999910999930909999 -020808080300090904050600101112131400111115151600011715151600171704041600199291999999099919900910009999999999999199993090999999990909 -030809100500080809101100021213100600040414141400151516160100041516160400299999999099900919999911099001909999999919999093999999909909 -080804090900010810101100121310101404120515061404121602171800121616031900999999909093190990999909900901099999909919999011999991999929 -080809100400111102121304111114151600031714050600181714191900181701191904900999990099110099919999109299009909999999990909999399999990 -080109091004080809091004111112130200111106141400151617180300051904181800999909399999090091999991119999919999990001999902900999990999 -080909010400080909101004061112101000131414141504161617170200160318170500099999993099909099999900099990919099900999199991999990992199 -080609040300101112131300141505130200141616161700181819191704180119191704090990909299099900999999919900919999990099999191093999999990 -030504080800090910080800090910101100120213140100121513161704181818060400999992009999999999990999909919099999399191999110009090999099 -040801091000040809091000040811111100020812121300141512121300061603051300099099939990999999199991999099009199991999991999991909902999 -080910050300080911041200080913041200080914021200011514160600151516160400900999999299909999099990999999099009199091993990999999991909 -050808080904101102060300121213131304121414151600171414181800171701041900999100919290199991909999990910999990099999090999999390999909 -080809100500080809090400111213031400111515061404111617171404110117180200999099990999990909099900929999999990909909990199093991999119 -040308080800090909090200101006111200101013131400051516161404171801160400929990999199999999901999909990919999999090999091000390909999 -080801050400080809101100021212111100131414150600130414151600130304150400999999930099990911199999099109999990099999999090999090929999 -080809090200080310111100040504110600121212121300141414141300041516010400909199919199299909999999099909109999999991999990999030900999 -080509101100081203131104081414151100021415151100161717171804160119040600900999990991299099909999999199999119090919099999093090999099 -050801090900100811090904120813130200120413031400151516160400151516170600099999939990019009991999919909909992999909099099999909999909 -080109090900080810110400121210111100130210140400150510141600170304140600999999309099009919999999999919909199991999990900919090929999 -080409101004081103101000121305141404021515150600161718191900161601191900900909999990299991990910990199099199999991090019999399999999 -080808080900101112120900100612120100130304141400151602171400040517170400999099990990099999999990939990199299991999991111900990999999 -080909031004080909111004120206131000140515161000141417180400191901181800999909992990919091999919099199099990099000099199990399999999 -030508060900101011110900021213110900141515161600141515161604140401170400909092909999999991999919009190999999999999991909090309999909 -040506010800090910080800090904111200040213111400151513161600151517031600999990003999119999900999099019909919999999099099999199999299 -060804010400091011121200091002121200091013130400090503141400151515141400009999093090119999999991999991909999999991990929909999999999 -050108080804091011121200131415120200161417171800061403171800041419191804999900309990119909091990999099919999190929999999999999900990 -080109090500081009091100081213131400151504141400150216161600061704040300999999399091090999999900999199099909999999991199900902990999 -080901100400080911120600130914151500130916161504130516160200040317171700999099930990999999100999199990999009909999190999909991992999 -080808090400011011090900051211020400131314151500161314151500060414040300990099119993999990999909199900109999999999990999909902990999 -080909010500081009111204081313061200140213151200161718191904160320191904999999993099110091909909999919999090990190999199099199992990 -080910101104081205111100081314021500081616061704011616181804191919180300909909099999999990009901119919919999009999193999099092999999 -080910031100080912121100080212121100081314151504161317061504050118190400912999999999990991999919999990099199909909990009003099999009 -030809101100120809061100121302141104121313151100120416171804191919010500299099990999199999199999190999199091999019099910099030999999 -050808010400090909101000021112101000061113141500041103041500161616160400999990903099919919999919099090999990099990990299990999999909 -080609090900101010100100041112130400141115131300161616170200050318171704099990909999993999019999909090999909990999199911909199992990 -050108080804091011110600121212120400131313130400141414151500021617180300999900309090099991999999909919999999099190999999919999911129 -030804090400080810090900020611051200131411151200161711151200041701151200299999909099909919099909099199999119099999990009909399999999 -030809091000040809111000120802111304141515111604171518180600050118181900209999999999999909990991190099909091009909990999903990999909 -080405091004111102090300111112121300011412061300151617171800151517170400090100999299019999199999999999999390999119099190990999999909 -040808090500040808090100101112091300020612141500161614141500161603041500099099999990993990999911109199909099091999999999999999992909 -040108090900100808111100121213111100120513021400041513061600041513031700990990399999919900999990999909199999190999199009999991909929 -080501090900081011110904041211111300141415160400141402060300171718181800999999039990099090990909909909199991099919999909909192999999 -040808090900100811090904121213020500121213141400151515151400040106160300099999999990909009099999109999199999990919999999903902999099 -040403080900101111090900101112060200101313141500101313161500050104171700992990091999999999991990999990019999099999990911903009999999 -080809090300080210110500121213141400121215141404161715150600041701180400919299199999190999109999999991999909909990990090909309999909 -020808080300090405100600111212121200131414151500131617181800130104181804199291999990990919009919999919999999999190990009993099999990 -080501040900081011110900081211110900081204131300041415021600031715150600999999030999999990999990909990199099999091990990999910921999 -080801091000080809091000110212131004061415151500141416170500030416180400999999939999990990919901190010999999999990099099920909999909 -080809011004020411101000121314151600121314051600120314171600120414180600919901913999019919009990909999999990999999992909999909909909 -080910011100120210131100031415131104051416130600171718191900171704191904199991193999910921199991990990999099099009999909999999999090 -060808020400090808101000011111111004121213140300041516170500181818171700991090991990999991999939990900029999999900990090999099999999 -050804010900041011110900121213130900141213130900151616160200150306040400009999093990091999999990999999999099090999199991992000999999 -080409100300081109101200041309101204011409020500151516171800151506181800909299999990999990999909900909199391099119999109999009999999 -040108080900101108080904121314141500121606141700120205181704121919190300999990399991099019090909909909909909999990991909091999999929 -080401050904081011110900080411110900080212120600131314151500131316031500099909930990099999999990909999199919999190099199999199999299 -080909040300080909101104081202050600121213141500161617171804160117171800990999999299911099199901099999909900091999999090093999999999 -060808080800050910040400111212131304111212131300141415160100031702161600099999900990099999090909990999999991999911999993921199991999 -080109061000081109121000131109051000141109020400151616171700040416031700990999399990100909999999999099009991990091999999900999999929 -040806090300100811091200131111091400131315020400161616171700040105171700999990909290999990991999919909199911091999999909903999999099 -030804090400100808091100050602091200131415091604131715181800131715011800990992999091999999190999199009909909109999190009999939999999 -080109090500080809091004111111111200131414150200161706151800041903181804999999399099099091990999909009199999190999190909990999909290 -060801050400040809101100120809131300020409131300141515041600141503161600099999930090109999990919099199999099991999091909999299999999 -080104050300080809101100121302141400121313141400120415161600120415170600999999300299009919991911199999999999999909090999999999990009 -060808010900100208090904101112121304101412121500031416051700181818041900099999193990919091909999900919909999999990092099999090999909 -080808080300060910041100121313041100041313051100011415160200141415171700999999900299099900999909099099999999999090193911999909991999 -040208080800060909040300100909110400121212120400131415051600130115161600019999199299999909909909909919099999099199990009993999999099 -060809030500100809111100121314141104151614140200011717170400181818180400999990992099999900099999990009919019199199993990999099999909 -050108080800090910111104090904121200131314121204021516171800191919030600999990309999099099990990999199999900901999991110909920999999 -080804090400101004091100101204091300141202151500161205151500161603010600990990999099909999990990999099009911990999999099991930992999 -080301090600101111121300141111151300021616151304171716041304170518191900299091930999900919999999999191999190909099999990099090990999 -040808010900100808110900050411110900120313041400121502060400151516161600999990993990900900999999999991909290999919091109999999990999 -080601091000080509091004081112131000080214131000151617131804190317171804099999939999090099109911999990999199999109991990019999929990 -060804030904080810111204131410111500131416110200131417171800130117190500909200999199999090991990999999919990999909190191993909999909 -050804090600100811110300100811111200131415041200011616021200041617171200009099990999999999992990999090999009999090993991999119909999 -080409031000020909041000110404061000111212121200131313131400050115150400092990999991909919999909909990909999991099999990903090999999 -050308040600091008111100121313041100141315151600040215151600171717011600999990290099909901999909999999009099990199999190990939999999 -080904100300111110100600111202051300141515161700141515161700140401160400009290999999999999190901099919909099099999999909990399999909 -080909100600081104121300081111141404081502161600011717161604051717180300090999990099090999999909990911909991999199993999099919909929 -030404080900101005090900111002121200111314121200061515161600041515010400990992090999909999909991999991999001999999190909999930909999 -020808090900100808111200101003131200041404131200151616161600050104170600199991990999999999209999999919999099999100090999903009999909 -040108040300091010101100091212131400091212020500041515161700061515161700990990309299999991991999919999199091099099990900999999909999 -050803090900101011040900101011060200121212131300141515161700041515010400092999099999909999991990909909919991999919990910909930999999 -080909090904101112040300011312061404151617171400151817021400151818190500099900990990999990992930090919999019999099999911999909999909 -080809100600080809110100051212121204131402151600041718041600171718180300990099990999093999919909990919999011190909999009999992999999 -080808040900101010090900011112051300141106040400141115150400041102150300990999099999909990990930099999909009999990999990909199991929 -030808090500011011021200131313141400151606141400151504171704181818180400291999991093910991109999999009999909999990999099090999999909 -080808050900101112120900130212121400151616161704181919171704031901040600999999090990999909990911909199199999901919999909029300999999 -040501030800091011080800061211020400131211141400041215141400041215161600999290039990099990919999909099199091990999999099999990909999 -080808080600030502091004111112101000111313131404041515161400171819011400999092919999019099919990099999199999009901999999909039900999 -040408010900100808110900101213130900040513130900141414150200060315151600999990093999901999909900999999999909990909199999909991992919 -040108090900101112120900101113140400101104021500100516161500040316061500990990309990199999019999909990199999099091999999909909992999 -030808080804050910020400110612131400111515151500111617171804191917011800299909091990909999010990919999919999999991090099009939999999 -080804030900100811110904100212120900100613140900101516170400151501180500999999902990999099199911999999999909099900991100999309999909 -040808090400030810090600111210090500111110131400150216160100151716160400099099999999900920999909999999909999091900991993991999991909 -080409101000080603111000081212131400081512130200161517131804050119191904900999999990921999991999999999919099190909999110003990999990 -040108040900101010090900111111110200120513141500121216171500060416031500990990309999999991909999919090919900999990999909900999999929 -080910010400050611121200041311121400150216171400151818171400150318171404009990903099999990990900199991999019999199999990999999992990 -080909090600080402101104081212051100081213140300151516171700150401171700999999909090911099199999999999029090999109999109990399999999 -030809100200061112131400151512131404051512130100161612171704161618190400211199999190099999999999910999999909390990999009099999990009 -080401090400080810090900111112121200131313130400051415020600031616160400999099039999099999190999999909199999099901990090999919929909 -040608010500091008111200131408151500131408151500040216171700031616171704909990993090090999919901199999999999999190990199999999929990 -080609100300081112130500081102140400081115141600041715161600171715010400900299991999910999199999109999999001999999999019909930999999 -080504090900081011121300081415121600170206120100171818121904170318191904999999009099099999090991109019999190399099999999099999929090 -050104040800090909101000111206100300110213141400111516141400151516041700999090309099909919099919999919929911999099999909999990999909 -030808090904101112090900021312120500141404151600171818150100041818150600999902909991999991909919999199009990099199990913909999999909 -020808090300101011061200101011041200041311141400151617141400040117170500191291999999990999999999099919909999990109990009903990999999 -080304090400080802091000041111091000061211090500041313130100141414140400299099909999110999999909999999999099099001990993999909999909 -040809100400110509120100111309141500161616161500170218181500171703061504000099999999913990909990909091999999999199991990999909992990 -060809031000080811121000130214141404131304151504011617151500181818180500992990919999900909199911990999999999909109993009999900999999 -050808010900100808110900101012111100131302141504131316061704031819202004999990993999909999990990999900919991109919099909099190921990 -080509031000081102101000121304141400121315151400121315151600120104060400909299909990119991999990999999999009999999099990993000999999 -040308080900100608080904111112020900111113141500161613171700051801041700929990999999099009919990019999919999199091999919990399909909 -050801090904080810111200131411111200151602041200171618180400061618180300999900939099010990999909999091999900990919099999909999999929 -080804010904080810100900111110101200110413061200141516170200050317171800909909993999090909999999919900099999999909190099909991992919 -060104040500080910101100121210101300121204140200151616141700151503141700999990300090191999991990999990919999199099990990999999999299 -080909031000080804041000110204121000111313141400151313141400050116060400992999199999099991909919909990099199999999990909903090999099 -080109091004081109091000081111121200080513131200021415161704061819030400999909399991090999999999099990999099991909991900001990991299 -040104080805090909100811121213101014121203040414151616161717021819061717999990300909999919099099099999909999991920909990911099919099 -040809091011120809091004120813131006010813021415161617181920161605191903099009999909999999099909990999999391119119919109999909290999 -080808040904031010110912130510141504130416141718131919141818021919140106999999090909990029990909990990909999999009099991919993019199 -080403091004111212061000131212050200131414151500161614151700161601041800092100999990990999991999999990019091999999999090999390999909 -080801090600080809091000051104041000121302141400120415041400121616160300999099939999190901999990909919999010999919999099999109999929 -080801091000080809090500111111121300140604151300041617021300031617041300999099939099099999019999909000199999990991999119999909929999 -080804010900080810100900111210101300060214141300031514041300161617051304909999993999090990990909999099199919999199999990921999990090 -080809101104081213141100151616161600151505171804011906031804202020200200990909900999090900999909999999999909109092993099091991999919 -030608080500090910081100090910101104120213141100151616161600041717010400909992999099999999909999990919099011190999199999909030999999 -040804010900061010090900041112131400151516131400150217171400030517171400099999003990919990100909999991999999999119999199920999999999 -030808090600100408021100121304111100141516161604141717171700181818010500299099990990911909999909999900919909909991990999990930999999 -050608080800091003041100121314111104021514161600171717170100041818181800999990099099299901909999990019099199991900999993900999999999 -030808080800040404020900101111050900121111130900140413130100061515161600299999991999901900909999999099999099190909990993999099909099 -050809061004111203101000130214151500160414171704181814171700180119191900910900129999999901990919999199099909901999999009993099999999 -080808010904101112120904041312140900021305151600171718061900171703191900999909903990099009999991009990099199091990099199999299999999 -030809090904080810101100020410101200131415040500131616171700131601180600299909999099999919990999909100999900999909091909999309999909 -080601091000081109091200041314141500131314141500020403161500171717051504999099039090099909190991999999999999991999990990919209999990 -080809101100080809101100051213100100121202141404150616141400031718040400999999999999010909199999939991099909900919990999999100921999 -030809091000041105021000041111041000121314061000151514161600151514010400219999991990901999909999999090999099099099199009999930999999 -080808010500090306101000021112101000041104131300141115161300141515040400999991293099909919999911199990099999990990990909999990999099 -050108080904101112090900131415161704131414181704192020021700032020061700999000309990199999199909190999199990909991991910929999999099 -080808010600090910111104121213111100141402150400141416171804191919050300999999003099909090999999199991099909099919999911009902999999 -080403090900080804020900100411111100121213131300121214150400060501161600992999099999991900019999999091999999999919999009900300999999 -040408030500020909091000111112101000041314141400011313040400061515151500992990019091999919099999099919999099999909993909990990909999 -060809090900101004111104101004111100121314021500051616161500171701031800099999090999099099999999999090099011190199999999990391999929 -060809090300101109121204101302141200100515151500101616171704041801171700099299099999999090199990909991099909999991990919090399909999 -080903100400111213101000021214150500161214171700161614171704181801060400129091999999009919999999009199999999999099999109009300999999 -080910100300080910100400040902111100121212120600131415160500040115150400999299999990999999190900199999199999090919999100903999999909 -080910101000080905110100120913141500020406161504171818161500031818041500099999990999993999019911109190099999901099991999999909929999 -040808090900011010100900061111111200131314150200130316171704050418171700090999099993999991999909919909919991199919999209009099990999 -080809090300060205101004111213101000141415160100171418191904171720191904919299199999099001999901199999199990399900999099099999990090 -030806090904101112090904020512131404151612171400181817171400191920011400290909199991999019909990990199099111099999999099999039990999 -040308080400090910101100090212131300061414131300151414160100040517171700999990209099999999090919999910999990990999990913909909990999 -080109061000080811121000131313141004150502161600151717161604180417190300990999309999009919909999900091999091999909999999009919909929 -080304010400080609101000080211101200040511111200041313141200151515041200299999903099909990990911999009199999999909990990999009999999 -060804090900101011090900011212121200131304140300130215141600041717170500009999099999009990999939999910999999299999991110900990999999 -040804030900101002090900111213130500111213131400111215161704061201161600099299009999919990199909999999909909999991099910099399909999 -080909090900081011120300080213140400080413140500151617141800060117171804999999099999912990199911009999999099991999091090903999999990 -080801091004080811091200041311090500141311090600140215161600141703160400999009939099009909990991999999999999099109991909999990912999 -080809010400080809101000111213101404111215021400161206171400050318191404999999993099999990091900090990999999199901990999909919992190 -080809091000010809111000061212021004131314150400131305161600170403161600919999999993910990919909990900109999999901999999909999909299 -030808080800090910020600011112131300041114130500151116171700041116160400299999991999090999019931999991999991990999090009909999999909 -080809090400061009110100121313111404041313111500161603110200051617171700999099090999093909999909010999919099999099199999909291999999 -050801090900061011090900121212131300140402151300141616151500031616040400099999039990019999019999999009199991999919999999999900929999 -080109090900080810060400111213140500151204021600171718181600171718031604999999309099109999199900109090199999090991999999999999999290 -050108090900101111090900121111021300140415151304161715061300041718180300991990319990999909919999919090999099900990990999909092999999 -040808010900100808110900101213110904140215160900141718061900140305191904999990993990900999999991190910099199999900091999992099999990 -040809100500111112130100141212131300021516161600041517181804031506181800000099909999013999999919999199909199999909090999099099929999 -080901101004080911101004120913141500120902161700120418160500190618160300999909939990109009099999009999909911999009099999909999909929 -080909100400080309021100081213041100061213131100141414141500040416010500990099299999911999999900909999999999990990199991909030990999 -040809010500100809111100021209111100131209141500131216040400170316160600999990993090019999999911999199099999099999099009919999929909 -060804010900100811120900100813040400100802141400150504141400151616160300009999993999110999900901999991999991999099999909999902909999 -030408090600101011021204101013141500161613171500180513191900181813011904900992990099110099919999919909999990999990199999990939990990 -040809040400010809101000110209101000121203131300121415131300141404060500019999990093999999999911099199099929999099999909999000999999 -040404010600080809091000080802091000111212041300111212131300110305140400999990003099190999999991999991909099099999999999992909999009 -040809101000110312131300110602131300111414141400151616171700040501041700019999210999999999199990999991909099999991990919900309999999 -080109100400080809111200130409111200140209051200141516041200170316160600990099399999109909999909909999999110999099999009919999929909 -080910050300080909111200080411111200131314061200131315160200040117170400990999909299999999099909999090999909099999199191903110999999 -080809010400080809101100121313131400151602141400061617181804031605180400999999993099001909901999999099999911990900999999099090929999 -080504090300080810111104120613140200121515141600121515171704121801171700099299901999099099091999999900919990999999199919090399909999 -040503080400090908081000110612131000141512021000151512161000040117171700999090029999999909919999999009199099999991999199903110999999 -080805010900080810110904121313130900120314020904151614171800040614191900999999903999001099999909909999999929109991090019909990990999 -060809100400110212131300111114040300151616171700151616051704150118181800900090099991119999992999099910999090999999999999093009999999 -080804090900080810021100061210131104141410151100141616170300051601180400999999900999019999919990910009099999999910299999909309999909 -080109090900080810111100121304141104121305150200161306171700041303171700999999309999119990919900990999199909199999190099909999999299 -080808020400030409101100121209111100130409141400151515151400050601040400991092991999919990999999999099909900990919999999900300999999 -050808080800091011111104121013130100121213131400150216061400030417041400999990099999999009099990939999999999091119999190929099990099 -060405010800091010110800121010131400151616171404151618021400150418180300999990003990990909919999109091999991909991999919990999999929 -080309090400080806091000110405121000021314141000151314141000151304010400299099999999099919909909909190999199990999999190999030999999 -050808010400090909091000110612041300111414131300111404021500031616160400999990903099991900001999999990999999999901999990999910929999 -080609050400080310111200131304141504130214141500161717181500161717011500909999900092900919990990900919999999999111990999999939999999 -080409031000080909111000121213021000121214061004011514160400051718181800099999992990991990999999119991999919909190993999990900900999 -040802060300091011111100121213051400121213131404151617171400040117171400919990110290999991999999099999999909909199990090903999999999 -080803091000080811091000121202091000130514151604170618191904171720011904999999929999019999999990109991999091100909199999090039990990 -080910110500080910120100080910131300140902041304060415031600171717171600001099991999993999999999099091999990900919099099999129999999 -050608080800091010101004111204131300111114140200151515151600040103171800909990999090999090990990999909999999199019199999903991999219 -050803090900080806090900101104120200131313141400151515150400161601171804092999999999099990991909009099919999999901999999990300999900 -080905101000080911031204130914150200060916151500171718191904171701191904999999902199999009091909999090919901999919999009099399999990 -050803090900101006020900101011120400131313140100151516141404151516041700092999099999901999919999109901999991399099999909099990999909 -080910030400080802111104051213111100141415161600141417161800040117061800912999199099199099199909099901999910999909999990903999999099 -060508010900101112120904021312120904141415161600031417180400191919181800909990903990199091999919900199099990999909992900999099999999 -060801090904101112130200101012141500161617051500161618031500041818041500099909031199019990901999999909099909999909999992999999909909 -080804010600050809101000110309101000121304141500121616021500121616040400909999993099009909999999999029199999999101999910999990909099 -080803090900100206090904111112121300111112141500161718181900050401181904929991999991999091090999999999909990099190990199900399999900 -040108080400091010110500091212110200091212111300090414041300151606031300999090390990910990999999919999919999999909990909909999900929 -050108090900101008111200101008041300021408150400161715151800061703181804999990399099000999990999999919009190991999991990909999992990 -050804090900011010090900110412121200111102131300041406131300031516160400099999009993919999919990999991909919990199999099991900929999 -080806090300080804090904101102120500131415161600171818181800170119191904909299999999999009019901109919999190991909991999993990999990 -080910100600041110100100121204131404121213131400151616031700051602181800099090099999093999919999900990999909990919999992909191999199 -040808010600090908101000090905101004111202131400151616171400041803171700099999993099009999099999990999919011190199999999901990992999 -080910040500080910111200080410111300081410110300011516021700041515061700090999999099999999990999919909929019999111993910999909909999 -060508090900101010100100110412131304021415131300161417171800161403170400909990900999993919009909990190999199990909099999999990992999 -080104090904081010090900111010060400111202131300111415131600110515150300999909309999909909999919099999909111999909990991990992999999 -080803091000080809091000111206040200131415151500161414050400040117171700999999929999991990991900999099019999990919990909903090999999 -020809011000111209101004110409131400110513130400030615161600171718161600119991993999019090999999009999909909992900999099999099990999 -080801090400101111111100101012131300030402131300141414150400161606170500999099030999999991990991999901999999992910999990990009999909 -080808090500011011110400121011111300141516020400141717180300141706181804999099090993090999999909909019909911999901999999999992999090 -080910010400081110121200081110121200050413130200041413151600141406170300099999093099019999999999999091999909199999190091999019999929 -050801090904061010111200131310111400131516160200171716160400171703180400099909030990911999991990999909919999199099099999999919999209 -080409040400081009031100081212111100081212021300011405151300141406161300990999099090992999099999999999199091999190993090999909999099 -050809090910020808110310121313131304121404151616011718191616042020202006099909909991912919999999990909999109099190993009990999909990 -080808030900021011120904131311110900061404150900011617181804051616181800999999092991119019999999999919099009099199993009099999909999 -040809011000110809121000131415121000131306121004031602120500161617180400999990993999000909999990099900999999909999999910929199991009 -040808010600040910101100121213101400121202151400041617151400031717150500099999903090090999190991999999099919999919990099999990929999 -080409010500080410111200081310041200080410141400151516160200150316160600909999903099001999999900999999019909999999199091999990992999 -040809040500010809091000110812120400110412120200110413141400061515140300090999999093090999990901999999999909199999190909909099999929 -080801090904080810090300051112121304041412121300151617021300061717181800999909939999009990192909990999999009999091990901909909999999 -080801040600091011121300091004121400091002121504091616121500031716051800999990930090109999090999909999999919009919999999991990929909 -080801040400090909101000111112101000111312060200051412031500041617151500999999030099919990099999999999019099999099190999999029900999 -060809031000111209131000140409131000140502041000011516161700151516161804002999999990099909999990909991999999999010093999999990991900 -050104080800091010080800111010120600111113121400021504041400161616031400999990309991909919900999999999999909091900991999991999999299 -080809100300110209040600111213141500111613131704111818191900051801191904911299199999999991900999909919909909009199990909909399999990 -080808030900041011060900041213020900051214140904151216171700151201171700999299909990099999009901119999999909900990990199999399999999 -050809010600040809101000111109101200111113021404151613171700041813031700099999993090009999999990919999919999100991990099999999900929 -080409010400080809091000111111111000020406121000131305121400031504120400909999993099990990919999999199999090091999999900991990929099 -060809011000111209101000111109130400050214140400031504161600171717161600009999093999909990910999999099199919999190099909921999999999 -040104080800090910080600090911120400131414021500130514041500161616031500999990309999090999909990099919909091199099999990909999999929 -030804090900080810100900021110100500061212130400141212041500140116171500209999999999990919999910909019999990099999990999993009999009 -050808010900100411110900101011110900040204121200131313121400150304040600099999003999999999999991909019099990999199099999919000929999 -040808010400040909090900101111061200101002131300140504131300031515151600099999903090999999901999999990919911991909999999920990999909 -040106080800091011120800091311110300090214151500091605151500041604171700990990390991099999909919999919929911999999990909909990990999 -050808080804091011120100091013140600151002141604151017141600150418190300099909909990113999099999009999999019009919999999999199909129 -080909100300080909101100080512101100131415021604171717171600040618010400999299999999999999099990999090109911900199999990909030990999 -080503040900101010111200021313131300141415151604171715151800171906011804099090929099990919909999999190999919009999099099990939990990 -080109100500080811121204131313121204141515160600171819191904021818200300990099309999099019999999990199099090991999099099019999919129 -050102080300091011121304141414151500061617171700181819202004181919202004991990311290991091199999999009099909999090999099099999999990 -040108090500101011121204101013121204141516161600141702180300141706181800990090309999099099999990090019999919999019999919999092999999 -030808090900100808020600101112130500101414151604101715150400040118181800299999990999910999919900009999199999009099099199903909999999 -030808080400091010020500090911111100121212120400040613141500161313010400299099919990919999910999999991999999099901999090909930909999 -040808090300100805090400101102121300101414061500101414161500041701161600999290999999999990010991109919999999999990990900990399909999 -080801090904051010101104121314151600021714181800041714181800031714190600999909039090999091090919009199099199990999999999999999929009 -080804090900101112030904131112140200131112150600131116161700040116180500990990992999999009991999919999199991999919090190903999999009 -030809091000060808111004121302141004121515161704121815190500120120202000299999990999999009109911990999009999009990991000993099999999 -050809090400011009091100121010130200120314130400121516171700121506171704099099099993191999991909919999909921999900990999999099999990 -040809031004111205101004130214151500131617151500131618191900130118190600912900199999999001009919999990999909999990991009993999999909 -060809090900100808040300111204131400121215131400011617021400051818181804909990999999909900992999999090999999999000993911991199909990 -080808080300090210101100121314100600121305151504121316171504120104181800999990999291191919999990909990999999909999991000093009999999 -080809101000080803100400040211121304141511161300171811161300171706010500919999929999990991909991090009999091999999990090999030999999 -080809051004111209131000110309141500110409151500110616170100021819171704999909090990999999900929999999099909999900999913910199911990 -040808010400060908101000111112100400111113131300140205031500041616161500099999993099119901090999999990999999999199090999901029999999 -080910100200080810101100011212051300141414141504061617170300041819191904919199199199999991991939999909019999909099290099990999900990 -040106080500091010110400091010121200091314021200151514041600040314161600999090300990910999919999999909199991999090099999909999992999 -080809100400060909111100120313111400121502161400121517181404051504011400909099990990909999999929109991199119999991999909099039909999 -080401090900081010090400051010110600121213110400121202040300140415151500999999039090909999999999109009999991099910999999909192909999 -080801050600040809101000041111101000041112120200040313131400151513130400999999930090019999999909099999019099999999199291909990990999 -050809010600101109121200131414121200130315161704131802191704131818041700099999093090909909999999999990199291009910991199099909999999 -040108080800091010111104121313111100060214031500161617051500161618041500999990309991909019999919999919909992990119999109999099999099 -020808090300100808090500111112061300111114151604171715151800170104041800191291999999999919990999099990909909001999999090993099999909 -040108080804091011120600131111141400150402161400151717161800031717160500999900390990199999900909199099199901999919099999999990929999 -080808010500090909101100041213131400150213061404150416171400180317171400999999903099909999910909909909999119009909999090919999929999 -080802090300100811090900101212130500100414150100101616161600060404171700901990919299999999199999909901099991399990999999900009999999 -080109101100081213051104081415151100160615151104161617170400021817170300990099309999009091999910999109999999909999099999919999911929 -040308090500100406110200101012121300141512121300141616161600141717010400921090991999901990991999999099999009999099199999999030999999 -080806010900080810110900041202131304141516161600031717181800051917181804999999903999001999991901190919909199992909099999990999909990 -080801090900051011120900131014040600131002151500131004150400131616170300999999030990109999900901999991999991999909099999990919999929 -030608090500101108091200101308141204100208140100151516140400150417141800999992099090999999909919100919999919399999999009999990990009 -040808010900030808090900061011121200131302121200130414151500041616160500099999993992999999191990999001999991999900999099999900909999 -030608010400090908101000110908121300110208041400111516171700110416160500909992993099999999910999199919009019999909099099990990999999 -080409010400081009111204081309051200080209141200151617061800150317181800999999093099010099909901999919999999099100091999999999929999 -080808090900101111090900120213131404151606050300171818191904040118191900999990999990999990990911910199029909991099991909003999999999 -080808010400091010111100041010111104121213131400151603170200180617170500999999903090909909999999990999019909999099190991909290909999 -080404010400090909101000110612101000131314141400131515160200050316160400099990903099909909099990999099919999999909199991909990992999 -080801090900100811090900041212121200131302140600041515141400031605040400999990939999009909199999999999109901990919999999991000929999 -040809031000040809041000040809021000061111121000131314151500130516011500092999999990909999999900119999999990990090199909999039990999 -080909010400081011121300081010141504061602171500051618181504191603181500099999903099900999919999090999199019099911999999009999902999 -060108040300091008111100121308111104141308021500041316171500051816171700999990390299199900999999990099199091090900999999990999909999 -040808090904041010090900011010111200131313051400151516021700031818180600099909099990909999999939009991909999099919099019999910929999 -060801091000040811091000120804090400120804091300120214051500031414151500099999939990100999090909999999999990099199099190999999929999 -050808090300100808111104101202130400121214140600011514141600151517180400091299999999999099109991009099999919999999093190999099999009 -080809040300080210101004111112130600041114150500161617151800161601151800990999909290199091999999009090999900099199999190999399999999 -040805040904030810110900120813140900120813150600161713181800021717011800099909900999099929909999909999099909991990099919919139919999 -080806090900080810090900041112130100041412130500030412131500161717021500909999999999909990099900039909999099099999999991920999919119 -080609100500080802110300121213141404121215161700181815191904180115191904091099911999992909199999990991909990099099999199093999999090 -080909031000080409101000080211121300141415151300051615151304171804010600992999999999999990109991909019999999999199999190000030909999 -080808010900101010090900041105061200131313131400151616021700151603040400999990993999909900001999999909919999990999199911999900992999 -030809100600080811041200021314121204051515151500161617171800161604011800290099909999999919009919990910099099999019099999999939990999 -040603080804091004080800111212120200131313141500161718141400160118180500992900099999909900991999999009919999190099999119993999999909 -080808090600041010110100041010121200130214141500131614141700130304051700999099900990913999999909099910909199999999091999992009999999 -080601090900101010090900051111111100041213140200151515141604171703180400099990939999999999109909999990919009199909999990090910999299 -050106040300080808091000041111091000041111021000121313141400151613141400999990300299999991999909999999099991190099999909900999909999 -080809011000051109091000111102121000131415041000031404040400161616160600909990993999991999999991119100099999992909099999990909999909 -030805090400061011091200131402151200131316161204171716160100171818180400299099109990999991009991119999999999109099999093999099999909 -080105090900081011120900081010040400131313130400141502160300061517171700999999309999000999900999999019999999090919990992999119909999 -080804030904080810110904121310061400131310150200161610171800160119190500909909992999991009991999999099019999190991999110993090999999 -080804090900031002110900041004110400121013111400121015111400040601051400990992190999119999999909009999999091099919999999900399999909 -080910031104080910121100080910021100080913131404151613171400050106181904999209999999991999919990999999199099900099999109903000999900 -030809041000060409021000111212131000011212040500141415151500141416160400219999090999919909919909109999909399999090999099999999990909 -080109100400080809091100121313130400120614021500120414161500120504031500990099399999090991990909999909199990199999990991999029909999 -080409090500080802101000111213101004030414141500160614141500161617011500999999090099199991199919190299109909999999999099999039990999 -080801040900101011110900121311110900120205141500121616041700120616030400999999030999099999999911909999099109099190099999999990909299 -080601050904101010100900111213141404021515151500161617180400161603181800099900930999990991009919990190999999991990099199999299999999 -080104040900081010110900081010120900081313021400041515061600051504031600999999300990990999999999109909199999199909190990999099909929 -040808080300090210051100091212111100091212131400151617181404040117170600999290199999909991099999999999099199091990991009003999999909 -080801090904100811090904121311140500121304150200120316171700061819171700999909939990019009919990999999109990199999199219999999900099 -080909090904080803060200041011111200131415111600171717170100181805191904999909929199999990901990999090919009199991999993990009999990 -080309091000080509041000081112121000021312121000141515161704041515010600299999999999909990099999999109999999091090991910099930909999 -050808010300090808101100091212101104091312021100041313141100041516061700099999993299999999099909190999999991199999990900999090900909 -080910101000030909051100060212120400041312121400151313161400151704011400109992999099990991999909909919999099999909999910990939900999 -080808080400090910111100090610021200131410041204151617171200051801170300999099909999919999919999919009099099900919990099990392909999 -050804010300090810101104120813141500121313021600121717181904121717180600999990903290999099191900199999119999199090999990099990999999 -080804090300101112090900101113140400101115020600101116171700050116160400999299009999999999019999909990199999099901990199903919999909 -080809031000080409101000111109020600121314150400121616161600120104170500999299999990999909919990909990199009099091999999993009999909 -080801090900051011120900101011131300041402131304041515160600171515180300999999039990019999910999999999999001909919999900909999909129 -050108090900101008110900101008020600121213131400151613041400041703041400990990399999919999919991909099199999090999990990990299909909 -040408030500090408041000110208101000111112131300141515131300141515010600902990999090990909999991999919099911999909999999999930909999 -080404090904081010090100080510111200131415151200061415151200031617180200099909909990903999919999919909099099990999999099999991921119 -040808040900100803111100121212121300140515150200161616171700060104171700999090999090929909991999999090919099990999199919903099999999 -040809101000021111111000120504030400121313131400121504161400120116160600090999009991999919929909999990909999099090991099993990999999 -060108080400090910101100091210100200121213141504161617181904161617030500999990309099191990991999999999019990900909199991099920999999 -080306090400100511121204100413121200021415151500161617181800161617011800290991990099099099099990099190999199999190999119999939999999 -080109090900081011040600081212131404151212160200151504161600051703181800999999309990099991900999110999919999999099199909990919909299 -080809031004110809101004110209121305111415161700011819061704202020202100992909999999999090990911900999099100999109993909090990999909 -060809100400111109120100131309121200131409051500041403040200161417171700000099090999993909999999999999919999099999199999909201900999 -080801090904080810111200131415021200130515160400131715161600180415060300999909930099199901909991199999199999999099090999909992909099 -080803050900100811040900101202130900101414150600101617181804161601181804999099929999199991909991909991099999999190099109009399999990 -080104091000080805090600111212120400131414021500161414041500161604031500990099399099999901009999909019999991190999999909999099999929 -060104080400090910101000110912120400111312140400151502140300151505141600990090390999999909099999909919999999099109999119999992990919 -040108080904101008080900101004060900111202130900111114151600171717050300999000399999099999999999999010099910999919999911909902999999 -080910101004041112120100130212120600131415161600171415161600030515180400019900191999993991999919999909909999991999999009929999990009 -030802090600101112091304141414091304151516170100151518191905202021191904919092119991999099199999900991099991399900999099099099990990 -040809091000111112101000011112131404061515151504161605171800161602190300009999099999999999990930900919099999900199999991999012991199 -080904011000081112131000081212131000140206151000140516171700140304041700099999003999019999999999909910099199999990999009999009929999 -080808090400051006110100121204111100131313131400040215041400031515041400990090090999903990999999099999109999999199990190999999929909 -080808060900101102051204100313141400151613141404151713181900171713010400999099099091109099190929999999999909909099090910999930999999 -040809031000080809111000040212111000131414111500161414151500050406010400992990999999999990199991999019909999990990990919900030999999 -040809010400040410101000111111111200131305021400131516161400061516031400009999003099999909991999919999199990199090999099909999999929 -080808090500011011121300141111061304041502161600151504161600171818180300990099110993990999909909990091999901999909999999909992909999 -030805090900100811090900021212061300141212131300151515151600040417011604299999909991999919090999099199999990991990999990909039990990 -080406090900100411111100121314140500121515031600121515161600120117020400099990900999999900090909999990999099299999999999993119999109 -080809090300100209091100121314051100150616161604171818181800040119191904999299099991199919999900099199909909901909991999903099999990 -050809100300061112101300141502131304140416161600141718181900140118181904090999009290099999099911190909999999999909091099993999999990 -080809030500080809101104121212021300141414131300061516161704181901160400992999999099019099910999019999999999999099199091000399909909 -080909031000080402111200080513141400081513160600151513171800040113181804099299999190911999199990999999099099099990999100903999999990 -080609010400081009111100081212111100081312051400151515041604031717180200999999093090999999099909099909919999099099199990099991929119 -080609100300080809110400121212121300051414020400151515151600040401161600909299991999099990910999909999109991990199999999900309999999 -040806010400090910101100091213111100140413151500040305151500161616160200099999003099099990919999999009919990990999999909992991999919 -080909010500080810101000031102121300141415041300140415161300041715061300999999093099999990991990119291999919999090999990999999900099 -080801090904100811090600101213141404101515150200161705181800190403181800999909939999900990199900190999019999999009190999909999909299 -050408091000111203131000141215021600141215151700141218061704140118041700900990990999921909991999919999199019099990999099093999999909 -080909100300080911101200041302121200041406151500041616151500171616010500999299999990919990199901999919099099999109999919909930909999 -050108080800090909090200100411121204131303141500161317171800160417170600999990319199999900991999190092099999090990099999990990999999 -080601090904101010090900111111120500021314151500161717041500161703041800099900939999909999109999909190999190990199999909999990992909 -080109090400080809090500101112130400141111130300150216161700040616161700999099399999090919999910009099999999990199299191900999999999 -030801090500080810100600020410101100121213041100121214141100151516041700299099930999990919999990909191999910999909999999999090990909 -080809101000030804111100050212111100131313141400151515151400040106160400909992909099999991999999099010999990991999999999903909999009 -060108090909101008111212101008041213141504161713040205031717181818181904990990399999900999999990999199099109099199900099991920999900 -080808090904030602091010041111121010041111041313011414151304161616171805999902919999090999199909009999909099999190903999990909999000 -050104080808091011111111091212040613091214141504091614141718021919200318999990300991099990999099099999900999099099099099019999919129 -050802090909041011121204031311141401041511161717181811191917181804191906019999119090919091991929993999009099999090999099999999999090 -030806090405040810111212130402041212131415161617131414161617131818040117290999990009190909199909909991990991999999990909090993999099 -030808080909101112020909101113141515161718191515051720202020041706040104299999991999909999010900999999199000990991909999999003009999 -080409090909101111040312041111021212131313131414151617180406150105191919099990900990999299999909919909109999999199990009993000099999 -060809090104031009091112131414141112151602171712051804171712191919202004099999099309090929999999910191909119999009990999999909099099 -080809101111080809100511121313100214151313100414161617180414040106190403999099999999999909090999911099999099099091999110903009299909 -080808090909031006110412131314151616131302041601171717171805041919181804990999999902909091909099119991999919039999099999009909999090 -040808090406100808111111041212131414041515151401161617051818031602191818990990990000999999999009009999099099939999199190999199929119 -080301090905080410090911120213141414121504040616121717181916121717202020299999939909019019919911199900090999999099099900999999999099 -080805040109080810111209130410141409131516171418131919022021031919062020909999990399090999991990090990199009909991909919099909929999 -040808080809041004050309111112131409011515151409161617181919161606200219099999099990999990002999099900999399999019109919999011999919 -080604090910081112090910081113140210081515041616011515171819202020200503099999909999099999990909110991019099999999913990990900299999 -080808080109040510111109061213141115160402171718161919171718031919040418999990990399099999099000090909019991909919990999999900929999 -080808090909101104120404131314141506051314141616171717170216040118181903999999090900099909900999900999999909990099199999903911299919 -030508090110111104091210131302091410131315090410040415161617181815161906900992999399999191099991111999909990990099909999099990990990 -080109090909081011121313141516171713180604171719180220200419052120200319999999309990900991099910099100990999999999091199990999909929 -080403090410111204131310141515050210141416161710181816161906181801202020092900991990099990991999999909019909109099999990999390099999 -030809090110111209091310021415161317181815041317181819191917060420050417299999199391999019909911110999099909999999999999009009990990 -040108080808091011121313051414120215041414120615161617180419162020202003999990309990110990999909911999909099999009919900999999209999 -080809051010080809111006040309121314151509161616171718181818021920210104999999990999099999900099900029909999999109099999919913011199 -050108090909101112121302141112121516140417041518141717061519142020202003990990309990191109999199909999991990999099910909999999209999 -080808080106090510111112131415111112130416170212131616181812041903181804999990990300909999099900991909999990919990199999990999009299 -080109101104081209101313081409150216081409040617181405191920181821191903999009399999111990991909091999001999999999910099999999290099 -040809090909080804101010111213020403111214151516111714041506110114181905999990990999909909919291109999999090909199909009993999999000 -060808080809030402101109121212131314150504131316151718192020212121210120099999999099011929191099999999990990909099199000909903999999 -040108080808091011121205101011121213041411151613171802151616190306152004999990399009999909999999999919009019999919901109919090929990 -080808080904011011060312101013141212151502040504161616171717041818181804999099099903009999992999119191909910990999909999900990099999 -050809011010021109121010130409141515131609040415131617181906031617172020019999193991910910999999009999999099999990009090929909999909 -040809090903041011111111061213021414151616161614151517171718041919050104009999909920999990919900919990999999919999109999990003009999 -050808030609100802111209101313111209100404111209101415161717040401041717992900999999119999999999099999999099909901090010900309999999 -080904010503081011111213080411111413151506160213171504181919171720201919099999003029099999990990919090919999010990099909999999990999 -080909090605081010021111031010121111131314151515161304171819161604010404999999990000991999919929199990919909999991909900990930090999 -080509090110080409091010081112131414151515150206160417181919202003041919909999999399090999999100009999919999100091099919909299999909 -080910010411080912131313140912150216040912151704181812191717181806200503909909903900919999999909110099910999999099999909999009299909 -080808080909011004061111121013141111121015151516051002170304181818192004999099099903099999909990099990990099999999900119990912999910 -080801090504081010101011120413131414120413131406121502161704120318181919999099030909999000910999999999990999999019099019099919992909 -080803090904080804090910111111110210120604131410121515151516121718011905992999999909999990091999999999019999919000919999199030900990 -030809090410110404021210110613131410110513131515161617041501160418181818219909991990991999091990900999919099990999999009399090990999 -060108080910111208131310140415161310051717161810191717160403190402202020999900390090199900109999999091999999099999090999999199209199 -080808080104040910101010051112121313141402151313141617040406031616181919999990090309999990199009999991099919999900099999929099099009 -080409101103120909100413141516020613171718180413191918180513190120202020099120999099999909019909109901999999090999999199093099099999 -080309090905080410110212081304140412131315150612161615151712161601181919929999999109001999919990909099199999909099999090099309999909 -080405090910111212090904131415161704131415021717181415191920060115191903099900909909909900999991009999990991990991990999103999299999 -080404090106081011111111081010121213141415121213141416160217040318192005990999090300099999999199991990999909999990109999909991092119 -080301091010080809091010060211040504041211131415161211171818191220201818299099939999999991199909999919000919000990999900909999900999 -040108080409101108080909121313140405151313141617150204141818191919190306999990399091090910999999999199900990009909991990991999099929 -080901101011080912101013040912141406150912141403151616040517151618021920099909939909009909999099099999999999999910929999999190109111 -080806040909050810110909011212131415161612171815191919190415022021210315909999990990900990099939000919999990091999099999919999911929 -080804090603080809090410111213021410111515161705111815161919042001161919999099909929999990110999911901999999009999990009990399909909 -080109101010081109121204081304121204081415151606020415151717181919030517990999390901099990999990990909909909901999999990910990919299 -040104080806090909081010111212130404111212021414111516051414111517041803990900399099909901990999999999090991199999999090999091909092 -080801091005081112131415161612171717161612061818021920201818041919030421999099030009009099909999999999909910991999991099909999099290 -080409100104081110101212081102131414151116161414171103161804061905202020900999999309191999909901909091999999990999099929900990090999 -080804040903081002090911051204131415161617171415161617171415060118181415909999990920119101999999099919099999999999999099903099999900 -080910101005080911041212080613041203081415161717181819202002181801202021999999909909090999099999992900019909990900919019999399199991 -050804010404090810111112090813111114090815151514090616031702181819171720099999903000909099999990091999999999909909910992999099190991 -080809100304110412101313111414101313110415161602110617161601181717192005909999909200999999099999999990091900919999990999309900909090 -040809100411040812020611130403141511131617181811131617181801131619191905001909911999999009219909919999919999909999999909399990900990 -040308080804090910100211091210101311041406151511161616171811040417170105929990999109091999999990919909919099909900199909909993090999 -080109041011081209091311081214131311081214021515041606171515041804050403999909390099999999909999099999999011199000990999990900200999 -040809101111120809061313050809041313141509161616170218192004171703012020990090999990990999999990999099090019999110001919999939992999 -050809101103120813130414121513131414121616160204171718191920170121191906090099909029099990999999999909919999190199909099093099099099 -080403090410081111121010081313141516081313020416171718180616171701181905092909991990990999919999900999199991090199999190999399999900 -080909040110040909111210041305141415161313141415170306021815041919191815099990990399900099991099999090999090990999199991902019999999 -080809090909080210111101121213141505121216161717181920061717040320202104909999999099199391191999110990999999099190990099902990999990 -040809101010011111121204131311121202051314151515161617030418161619062018000999099903999990999999191990991999990002909999999090999090 -020808080109101111121209130411121209131414151505031404151504041604061718199991991399909919999999990900999990902999999909090900900990 -080106091011121213090411121213040411141513161604141413021603170518181804999000909999100999999999990099099909909991999909200099999990 -020809010404100811111212100811111212100813131415031617061805161619202020119991913009990999999999999990990999902999009009999090999099 -080809090110081109091010121105131415121116021406171718191404171704202103909999999390991999919900910999990909199001999999099019999912 -080605090903081004090904111213021415110416161417111816161901112020201919090929999990999990019090999990190099909999090999390919999919 -080808080104091010111112090910111113141516170218192016170621040516170321999990090309999099999099999099910090199099900999000999999929 -040601080809101011121209131011121209130411140209130415160517180403191717999900030999019909999999999999919909199991090919909209909909 -050808080804090410101010111212130604011212041414151616171703151516180204099909909990999909090009099999999390999199129999999991990110 -080803090405081006111212021013131212141513131617041518191917201501192117929099990909999919009909999199909199099990999109909399909900 -040401080808091011120613021414141413151616161613151517171819050317040419999990030001909911199999999199099999999909999990002990999099 -080406040109081011110909081211111314151616161614171705181802171703192004999999000399099990990109909999099099990909919999199991099219 -080806020903080410110909121313131415160517171415181919201415211919011404999199901929099909019999999099199999990091999900009939909990 -080909061004081112121001131412121005131504041616131718181616130319182002090909009999990390999909999999910909099099990999999999192111 -080803090905101011040902101011111213140415161604171804161601061819191919992999099909999199909199901099919900900999990909309990990999 -080809091003080805090406041112021314151112160417151118181818151119012020999129999999099990910009909999100991999919909999999039000999 -080309060510111213141415111216141417020416181717191916202104191916012121290901909909909099999909999199099999991090099110099939999999 -030808090410110808090410110612091310110414091505021617181819041717011919999902999999999999090990900990999990001090991919091939909999 -030408040109101108121209041302141409151616141409151716061819150520202020999992090391199199199900191999999090999999009090990999099999 -080106040909081011120909081314121215041614040315171714181819170402181805999999300999109990190909990909999090999099209999999199090199 -080909091004081112121013111112121415161702041401180519191404030619191404999099090909999909999099910991999119031099999990029999990990 -080809031005080809111106041209021314151509161414151517181919040120202004999209999199999990991099919009199999099901999119903900099999 -080909041010111212121010111113130314041513050414011606170214041818181804090990099999990999999990992909999099999000093991191919909990 -080808091011121202130411120304141411151515141411051616171718192021170106990009999999119099019929999999999999999099109909009993000099 -040808080809101111120409021303141409151616141717151616181717150401050619999900900991990919299919999919999099099990999909990309099990 -050108090904101112090913041111141414151515021617181819202006181819042003990990309900099999990009999919999991000901909999999999999092 -040809100105111102101212111113061212031313141415161616140415041704041815901990019309991999199999999999090299909999099909990099909900 -040809101112130809020603130809141515040516161515171816161920181801042020009119991929990999919909099999199999090099090099999300999999 -040108090910111208131410061208051410041208021404151616171418151516192003990990399990100909909999990999999091999091900999099919999912 -080402090910110512120903131412120415061416171715011416171718041416191920091910919929999900999909999991909099999999903199999909009090 -080808080910030411040910120211110910131415160901171718161920171706212105999099999999990920999991990111999191139909099099099909099099 -080808090909101111020603121104131314121515131316121517040518120119190404999990991929990909919909990990990991999990000099993099099909 -040802091004080804111111031212131301061212141305151617181919152020201919911100909199999929991999093999999099009990990090999009999999 -040809030610110808120210111314151510111316171510111318181801040504041919092909919999911199999990999990999090019999199999300090999909 -080504040909080410110909081212130206081212131403151616041718150116191919099999900999909990900999110999919999990199120909193999999099 -040108080809101011110909101012111314151516020617151516181904202020032105999990309099199999199999900901990991099991909991990991999920 -080309090904080405100211081213101111080414101515061617171717041616180104929999999109909190999900099909991990999909910999999903009099 -080808090904030402100511041212101311141212151511141416151511061718040104999992010909919099999909919999919990909009999999999003000999 -080409101111080812041111031313130214151515151616050417171801192020202006900099999999909990099029911999091999999090199999309990909990 -080309090910081105121210080406121310021404131310041515161718041515011918999999299091909999999909099199099199909100990910999930909990 -040801091011120809091011041314141011021514141611171705181619171703040406999900939990990900199991999919999199901900909999999900092999 -080809090909081002111201101013141414031513161604051713161618061713041920909999991199119399009999999919099299999999900099999900009990 -040809090510111109091210111113031402041513161616171818181819200604011919009909999999991999921099991909991000999991990999009039909999 -050804040910010811111210060813131410151513031410151602041404171717041418009009999993090099999909990919299999999119999109009999999090 -080304090610110504121210110213131210141515151510141416161718041916160104290901990990909999999919999910909999909999199090099993000999 -080903101010110212061313141412121313041415151617181915152017052121010417129991999901199999909999999999109009999099090990009030999999 -040801090909100811110406050811121313141516170213181816191920181803191904999990930990999999990000109900199099190999109999999999099299 -030805091006110809091212110813131204110213131415011617181419202020202104990002999999999999909909909999990119999991903110090999999900 -040801090903100808090911101212020613100414151613171718192013171704190513099999939920999191919999109999999090000900099099999090999999 -080809101104080909021203131415161217041415041817011415191817051420061817999109991199999200919909199999099099999999993100999999900090 -080910041111080910121103080910131304141410021516011406171819042020202005990999999990991299919999999099190990009991993999091010009999 -080809050110080811111110121304140410151616170210181617170404180603191919909999900399999190909909009099999990110999999990990209099999 -080809101105080804121113141414021115031616171718191616201721060420200121900099999909900999999099111299991990919990990999009993990999 -080910041104081212121204081313061414081302151414161717181803050117191919900909099099999990909099999991999991190199190999203999999099 -080901101004080911101004120411131313021411051515160411171515181903171706999909939990009009990909999999090119991999999090919999012999 -080808080909101112120901101112121313141102151313160317060418051919191904999999990999091399990909999991999099090910009999902199099999 -080409051010081109121310081111121415041616120317181616120617040119200217909999990999900999990009990909999099929999990900903199999111 -080809041010080809041112130214061112031414151112161718181119052018180104990999999909090911999999999219099991199999900990000993090999 -080910100104080810101111040512131411041502131416041718181416031918180616909999099309991909100990999991990009999019990999999999921909 -080808080105090910111212090913141212151516170204061518191919202018040321999999000309991999019999999990199909109999190909990999199092 -080910101010081111020604051111121212131415160403171418192020171401212020009999909999919999910099999091902990990910999099999309909909 -040809040106100811111111101212131414051215151414161715150218191919032021090999909300099999909199099990999999990099190999199099199921 -080804090410110812121310030404121410151605061717151618181717150218180104990990990099099999990999009209900999999900999091999993011999 -080209101005111206101001041204131415031216171715181616171915182020200415011900199999909309990999000999909290999999999999090990909999 -080209090909081010101001081111121314031105151316041717041318061920211818119999999199999399900999090299090990999990900999999099900009 -040808080104090909101112131314151512131302161512060317161812051717040404099999990309900099991990199991999999090919999999092900009999 -080901101002080911111112081304141412081506141412161616161703040518192004999919931910099990090999999909999990999099029999909900990090 -080409091010080309091010081112121213060205141513161714141818192021011804909999999992999999090919999919909999900109909990901139001999 -080910111106080912130304080912120414081502161714011819192014051819192114900909999999992999919009999901909991099091993190999990909990 -080904101011040912101004010912061313051415041313031515160417181818021717009900999909909999900930999919999010999999009919929919999199 -040408080808091010101001111112121305111112121314151602061314170418191903909990909990999399991999910999999909909919990090909199909192 -080801091005111112131404111115150216171815191916201821191916061821210403999109031199019099091999991099999099990999999009909990299999 -080809091010080309090611020512130411141516161616171718192004171701212121999099299999990919909990909190090909991090999190099309999999 -080404040910081112021303081114151616171114151618171114190405170114191906099019909129991999019909999999990991099999000199993999999090 -080109021003081109041010121209040404121213131415161613051718161606191919991199399920909991999991099990900999090999009909099990990999 -040809090909100806110503100812111314101212111515161718110219040118182004099999990999909999990299991909919999990099190199003901099919 -080809091006080811121304011415160217181815190517181815200417212115202003909009999999111991091039091999009909999990999999999990290999 -040809100611021203101111131414151616051414171618191919202018042101202018919990129091999919900919909999099990990919999909990399909990 -080808080106091004111212091313041212141313151617140518021919200418180319999999090300990999099999099999919090109091909919909999909929 -060802090909101112121203131104041414131115161614131117051618130119202118911990199929099909909999999990909900999999990009993099999000 -080803091010080811111104120613130214121516171414120518181920120418180104992199999199099099991999991909099000099999919090199993090999 -080509031011120909131011141415041011141402061011011617181818041619192021099900992990910999199999099991999999999010993999999199001900 -080803091010080811111111061212120205131414151617131414181717041920210104992999991909999990991909909999910990019990990999999903000099 -030408091010111204131410111516061717110216181717051916181801202016212121900992990999090990990099909909999119999999090919390990990999 -060809041010020803111010121314151605121317171819121317172021120104202021919990920991999919900910009999990999009999999099993909999090 -030508091011121212131011021404131004151516131717151518131717191904010620900002999999990991999019999190909919999919999919990039099990 -050808040104060808091010111212021313141204151313040316161617181919191917099999990309999909009199019090199099999991999299009990909999 -080910011111021210131311141510131316141504171816191520170416031521050616119991993999019010999999990999009909991999099099929099999090 -060808080804090904021010110503121010111312121404111515161701041515181818999990009009991999919999999902919999909099190909399900909999 -080104090904081010090905111012120213141412120413041415060313041617181818999909309990919099901909991099909999999909990909290099909099 -080808080903041010111111121006021304141516171704141418181818191919010405999929909199999909919999900000199909909909199099999030099999 -080105091011081212130614080412151617180219151616182020152121042020032121999009300900900990999099990991999010999199099999909999999299 -080808090104101010111112130214111115061614171715181905171715031919042015990999900309999009999091199019909999999109991999929999999900 -040308090404101108121313140508061315021616161615171718192020171701192020999090290901900919999090999190099999991990999109999399999909 -080503091010081111021010081111121304141512121316171717041818040119201806092199999999991999910909999099990919900199999909903099999000 -060808091004110408121313111405150413111616161601031702181919202020181919099009990999900990009909999909009999939999199119921999999919 -080809031010080809091011041213021411151616161617181920050617040121212117992999999999999990190999190009109999990199990099903000999990 -060809091004110809091201040813141515160802171818190320171818192020170504009909999090991309910999199991009099990919999999992999099909 -080809061010080811121010131415121603011417041604181419021604181919051604990999909999990909099909902990999309909990990911091999999900 -080209101112080604131212081414141401031515161617180415161617181920050417111199999199909990901999993299909990909999999999990009900990 -080809101004080804111012131304111401150416111717151506021717031818180405900999909909991090991990993099909900999901999999999910029999 -080809020410030811121210060411121210131415161710181915152020052121012020911099991992909999999990999099199009000991099099900939999999 -080904101011081212101011041212021311031404041313050615161616171815150104909909099990999999999909119910990299999090919999909903000999 -040104040808091011120808091313141515091313041505091616020603171717181919999990300990990991009999009999999999909910999910909919299919 -040801090904100808090911101213131111101413130415101606171815050219202003099909939990909991099999999919990999999190099900001999991192 -030809090909040808021011121305141011151516171711151518191911040620011904299999999099919909919909999900109909999909199909009039990990 -050809091010110809021010040806121204130814041503011617171717161618181804999090999990119999919090999099919000929109993999999999990990 -080909100111080909121311081414151611031717170211061819192020042105192004090999990399990199999999000999999299119999090090990999900990 -080808020909030506100909111210101304111414141415161717181920041717210120991992991999999990090900990999109999900991909991909903999099 -080209100104080909111213080314141516171714141518191919190405202020202106111999991309991099990929900999990999990990909990999909999900 -040808050409100808111209130314021209131414151609131717181619132006011604999900990999919902919999919999919990999900900991099939900990 -080909101004081111111012081313131314151502161717151518192017030504012106990999999909990999909009990991199919099991099909920030999990 -080909090204080310041112130410041114131315041114161617181114161605060114999199290109999909999099909900999909999900999000099003999999 -060108080808091011121213141515120404161702181818041705192020031719192020999990309901009919990019999091099919990900999990999999929999 -080401040909081011120909131311140415021311161615171718161615031705060415999999030990000999999091090999099199991999999909999009929990 -080109101010081102040305081212121206081304041415041313041515161617181818991999310201999999199919999900000999900999999990990099999099 -080109090909080810110506121313141515121617181515120402191919120420200403999999309999190999109009099991999909099010999919999090209999 -060108080809101111111109041213130209141515131617181515190417181820210503999990309990999001999991919909919099910990999990999099299009 -060803090909100811110502100811111213100804141215100416141417181616190104092999999919999099999190999990091999919999109999900903009099 -080809090605080410101010111102041213111114151216031704181216171719200116909999990009099999999091090991999991992991999901099903990099 -050108090909100808111112131302111415131316041417180619191404040319192020999990390991999019999091009991990990990019909999909999992909 -080903101010111212061313021212140513151617141818191919191818202001042104129991999909990919999999999190900190999190999990990300999990 -080109041010081109121004081313131314151516021717151516181717192006210503990999399999990991009009990990199909199999999909909909200909 -080209030506041009091111041012121111131012121414151016171718040401170418019990192009999999999999909099999009090999909109900390999999 -080909101104080904121111081314150603081316161718191320200518040120200218999009990999999990009990999999002009099999990190903999999911 -030602080809101011080809101212121301051415161617181419161620042121212104901992919999199099991999903990909999900909900099999990009999 -080909100311080909121311140502041311141415151311041616161617061801192021991299999990990999109999999901999919999199000999990309009900 -080909011004060909101011121212130511020404141411151515151411161603040417099990993909919099109999909190099099991999999999919900092999 -080909090904081011110500081213131400041213031400011215161704061218021900999909099999999990090909999999999009299999193919099111901919 -080804090300080810090600111010090200111212121200131414141404050115160400990299999999999990990999919909919999990199990999003099999009 -080808040900041011110900011211110600131314021500041616171500051616031500990990099999190991999939909990199909199990990909999999909929 -080306090900101002110400120413111100121313041400121515151500120104051600299991900099199999199909999999909999999910090999993090999909 -080803090900060810111204131313140200041516161600171515181800051901181804992999999190009099901999909990919999990991990919990399909990 -080609090300081009091100081212130200081405131504161718191904040118181900999299099999991990991999999909919099009009190119003999999999 -040808010500040809090900101111121200130402121200130414140400130614140300099999993090099999019909999099999901999919099099999999990929 -040308090900101111111100120213131300121214040400151516160600150116160500929990919099999901999919999990909999999100999090993999999909 -080802090900080410090900030511120100131414140400131315161604171717061800919999919999099929109990939991199999999900099099099090999909 -080801060900080410110900121010130904021405130904151617131800151903131800999099939999000909999919900199999199900109999090991999992999 -080804010400080809090900101010101100120413021100141515061100041616030500999999903099999990901999999009999991190919999909909190999299 -080910050300110212121204111314151500111314151504111617181900040106191900000990999291199099999999999999999099909900091009903099999999 -030808091004111106091000021112091004131314151000131316171800041905011800990902999999999999099919900190999909099990999110990039909999 -040308060500091008111204101008131404021516131400171716181400171716011400999990290099999009900999090199999110099099999919999939999999 -040806030900100811090900121313020400141313150500161616151500040117171700909290999999099909019999109099999999090199999999903090999999 -080910101003080902110404081206111314041215111616171818111616051818010419999929919990919999990009900990999999990009990900999939009990 -080809101104121209061113121209041114041516171101050218171919031818171919900099990909999999999099900009999911139199990190999999929999 -040805030909101112131309101415131302101415161617100415161618192020012106099299009999009999999199999999901000999999919099109930909990 -080109091004080809091104021212120413141516171813141919202005140319202006999909399099190099199919909100999990009099999909099999929990 -080805010600080909090900101111111200041314021200151616041200040316171700999999903099999909901909999999999001199919990990909990992999 -080809100500040809110100121213141500121213161600170413160200060318181804990099999999003909919990019999919999990999190999909991992990 -080309040500081009111200061010021304141516161300171716161300170118191304929999990090910999919999190019999999990199999099993099999000 -080808090300101011120400130612120200141515041600171515181804170105181800999290991999009999990909919099919999990990190919093999999099 -080906101000040911100100121213021400121215161400170518161404171704160300099990909999113991999991199990199999090909999099099099999929 -080804091000031102121000131114051000131516161000130404160100061717171700990992190999109999199999999991099009099999999993990009909999 -030808090400101011120400100502120400131313141400151516141400151501040600299099910999090999199990999991009991999099999919999300999999 -080809090600041002091100121013141400031015141404161017170100040518181800909999909090199999190919999291999990909919990993909909990999 -080804010400080809090900061011111200040213111400151515161400170316160500999999903099099999910900999991909919990190999999919990929999 -080801060400080809101104041213021100121213141100150513141400161718180300999999930099011099999900019999199999990999999999900902909999 -080801090400080810090900111213021400151213131400041205161400041206160300999099939999009990199909919099199999990990999909999992900999 -050808090300041004091104061212091100131212141100151617180200161601181800099999099290999090099999099099999990990990199019909391999999 -080804090900080810090100041111020500121111131400151516161400061716040300909999999999113991999999109099199099199909999999990992900099 -080809090500080609090100101111110400121302141504120416161700181818180300909099999999093909199999999099109901909019099991999092999999 -060308080800090904100200090905041100121313111100121313140400041501141400929990999199090999901990999909999991999999090909990399909999 -030808080200040609101100121212131104141415161600171718161600171705010400299199999199909900009999910999199909999909999009999030999999 -080808090904101010090100111112131400111115161400171718021400030604051404999909909999913999199999109990199909999991999119920009999990 -080808080900020403040900101111120900101011130600141515150400050116171700999991029999999919909999909999099990090109999990903099999099 -040809060300101010101100011212131100141412020400141415151500051617181804009999900299999990999939919909109999999911999999999009900990 -080909101000080909100100041111110300121206131404121215161704051818021900990999999990993999919999999099129999909901199009009911999019 -080804040300080805091000110602121000111113131000141414151500040104151500909999990299990909099990119991999919991999999909903999999099 -050108080909101108080906101112131313101114150416101102151504041718181903999990399990090999999090099999990919909919999919000991990992 -080801060900080810110900121313130904140402150900160515151700161603181704999999930999109991999909900091999909990919090999999919999290 -040809041000110309101004111209131300111414130100021414151600061718150500009999990999999092990919099999999991391999991990999090900099 -040106080800090910080800111212121200111113040400140413130500021515160300999990309999999991009999999910009999991999990990919999919129 -080609010400081010111200081013131404151513131600041505021700031818181700909999903099901999991909910909909999990991099099999919929999 -040108080600091008111100120413051400041313021400151516041400151516031400999090399990109900109999999099999991199090999099999999999929 -080903101000111213101004021213051404151513161704151516161800061920011800129991999999999019990999900109909990009999999190999039900999 -080806030900020810110900121212041300141414141300011515151500051617040400909999992991119919990999999199099999099199993999990990900099 -040108080800091011121200091314121204151514021600150414051700061814031700999990399090119990099999990909199999199990199099999999900929 -080808080500040904100600090911121200040211130400141411150100140316161600999090990999900999909991999919099099099190999913999909929999 -030809090900051010020600111012121300141414121304151617181304150419011300219999919999910909919909999999999990109099990901099039990999 -080809010400080809091000020511121200131411061200131511161600130304171804999999993099190919990909099199999190999199099999992990999000 -080804040900100811030900101213050900101415150900161415150200060117181804999099909999992990099990099990999999990999190199903191999190 -080909040000081010110000081002120000040106030000000000000000000000000000999999090999999999109909199030299999999999999999999999999999 -040602080800090510080800091112120300131112120400131415161700130118181804901990919999099999192909999999999099999019099190993009999990 -080903101100080909121200080513040200081414141500161616161500060401041500992199999199999999091999099900919099999909999991900309999999 -080109090300080809091000061102121300041414140500151515161604041718181600999999399299999991091909119911909999990099999909090099909999 -080808010400091010111100041010111100021213061400151515161400041703160500999999903090919909999999999991909110991999999990990290909999 -080804040300080809090900061004111200131010111200141516110200171701110500909999990299999990991999099099999991990919199091900390999999 -080808040300090210101000111204131300121214130500151515150100161604170600999990990299199901999999999090909911999991999993990909999009 -030408040400090908081000020905111100120413111100121415151500121406010400909992990099990999990919099199999900999999091199999930990999 -080104090300081009091104081002121200131414121200061414150500041617181800999999309290099099991999199011999999990999999990999009900099 -080910020400030911111200051311110400140615151500141617181800161601181804111992991099990999990900999999199909999919990009999399999990 -080808010400030909091000110212101004131314140400130615161700181818180500999999903099999929919991990111109999999900999090999900999999 -080808090900050410090900111213140100041513141600060217141600031717140400990999999999099909009901139919999099099199990199999990929999 -080109101000080809110300121309141404150516141404170616021800191919190400990999399999192999919900990001999999900991090919999090999999 -080309101100081212130200041212131400151616131404171716131400180501061404921199999190999999991999119091999999900999999099909399909900 -080808090900051011110300121204061304121214141300151614141300040117180200990999009999999900902990990999999999990999990199903191999119 -030808080804090410021100091212121100091313141500091617151500061805010400299909919999919990919999909991999991999991990009990030909999 -080909010500060909101100121310101400121215151500161616021700030404181704099990993099900999999900919999919999999991999910920909999090 -080509041000080611111000080403110200081212121200131415161700130115150400900999909990999999290999919909919999990910990190993990999999 -080501090600081011090900081213131300141502161600141717041604031717180400999099039999019990919909999991099009999919999990099999929009 -080501090400081010111200081010131304081402150600161617151504181818180300999099030999990999990909090919909911999009999999099092999999 -080301091000110412091000131414091500021414041500051604061500161617171500299991939999900910199999909199999199099099990990999099990999 -080805010904080810110900121310100900121402151604120417181800031919180600909909993999990909919901999919099919009019099999999190929999 -080509040300101112121300101112121300101114141504011116040200061716161800090990909299999999999990999999919099909909193199990901909919 -040809090400011011091200041011021200131011051200131011141400061504140300099099019993199999919909919999099099999999199999990092909999 -040508090300101008090900101002111100121212111100131314040600040115160400999290099999999999019991199199999999991909099909903099999009 -080109101000080809100400111209020600110409131300110414151500110516040300999999399099909919999911109999199909999901990999999092909099 -040809090400010809090600100804111100101203130200100514151600041414151500099099999993190999019909999999919092999091199901999999909999 -080109090904081010111100081010120500080213141400151515161404170304180600999909300990999999990999099991099919999190999999019009929909 -040809011000111109091004120213130400121413131500121616051700031616061800009999993999090099919919909919999919099909099909929990999909 -040809031000111202131000111414131004111415161000171515160600180501161904912990199999199999199999090999999090099199990999909390909900 -030809090900100511040600100402121200131314121200131315150400161601151700219999919999099999100999999001999910999999999199990390999909 -040508090400101108080100111112131300141516021700141818061700141818031704999090090999093909109999999991999001199090999999999999999920 -020809100600111212120100110513131400110413131404031516171700151504171700111091991999993999909990999999999999002090999009999099999999 -060108090900101010090900111102040400110412121300140412051300151516031300990990309999999919990991099991999099090999990990909199999299 -030809051000110809061000110802121000131314141000131314141500041604010400999092999999990999099911119999999999999999199091990030909999 -080409011000111109091000111112121000131414141000040515021604031718061600099990993999991999909990999099999999190991999910090109921999 -080808080900011004110900041211110600131313021400151616041400170516031400999099099993099991999900999919909991199090990999909999909929 -040808030904100808061100101212121300141515150200161617171804160117051900099209999199909999091999999099019999190199099099093990999909 -020808080300091010101100090912111100011314151504061616161604171805190400199291999999999999099999099910999309909090999999000900909099 -080909101100080906031100081213140200011516051704181819192004181819192004999199992999999990091901119910909399909000099999099999999990 -080109090400081009091100121314141100041315061100051316021100031717171704999099399990099991099909909099999919099919990919999919929990 -050108090900100808090900101011120600130402141500160417171504181817170300999990399991909999909991909091099099090919990999009999999929 -080809090400101009090100101011041200131411021200131311151604051711030600999099099999093999109999999909999091199999199991090920909999 -040108080300090908020400100911121200131405121200130615161600171717161604999290399999910909919991199009999999999009099909999099999990 -080909010400080909101000080411101000120411061300051414021500031616160400099999993099909990999999099099019099990909199991999910929999 -030809050600101112041300101102141504101616141500171716141800171701140400210999919099909999190900190999999999999099099910999390999999 -030809090900080804101100020512041300141412151500141412161600061701160400299999999099090919900999999109909999999990999109990399909909 -030404080900101111080900121111080900120205130900141515131300061501160400990992099991999999999999999910099199091999991909999309909909 -080806090500041011121300031415161304141417161300021717160100181818160400999099000990909990099929990990999999091999999903919999999109 -080409100500080811111100121213020600121213141404151613171400041818010300900099990999999990909999109999199999909099990019909032999999 -080809010500080809091000111111111204131406021504161703181500160419191900999999993099990990919999910099919090100091999999990219999999 -080909090900040610110100031212111100131412151600131402151700041404150500099990909999013999199999999299999190099919099199999990909099 -030809090900100804111100101205111104101314151500021617151500061817010400999992990999099990999909990990909911991109991999990930909999 -040809101000040811101004120805031300120614150200161617151800161601151800009999909990909099021909999999919900999999199019999399999919 -080909101000080911111200081311110100081415161604141417021804190406050300999999909099990999999900939901999999909911199919009002909999 -050809100300040909101000111111111200040406021300141415151500141401161600099999099290909999991999919999199999190009199099999390999999 -080809101104080802040300041213141400051513141400061613171800161601171800991109919299109991999901999999999000999999990009999399999909 -080808010600090910101100090910100500121314021504160403171800161919191804999999903099090999990999999099199900000091099999999219999990 -080309090500101002091100061213131300041415150400011615151704181818171700299991999099109999190900999991999009099999993199090999999099 -080801090900101112090900101013141404151505141400040216061700031616041800999999039999009999109991990910999999999190090199999990929909 -040508030900101112060900101013040900141313040200141515151500040116161600909290909990090999999990099999919990999909190999903099999999 -080910100300081110041204041102121200131114141500161114141500051701180600099299099999909099199999999091909999990999990090990309909909 -080909101000080909101004011112021300051415161700141415161804061915040300999999999990909091199939119909019009999999199999090992909099 -080803050900081010041104021010121304141415161700181919161700061919011700929099999099990019990919000901999999090919999919909939999999 -080910011104081212131100081204131404080215131600171815161600050315190600009909903999910999099999900919909919999999990099909999992009 -040809090900031010101100121305111104121415150400160215150100161617180600099999090999999920999919990910099999099199999993991919991109 -080504090300080210111100081212040400081212131400151516130600150116130400999299001999119991990999099999999190091999099099993999999909 -040404010600080909101000110909101000110212121200131314151600130305150400999990003090999999999909099999199919999109099990999090929999 -030608080900101112020900041304040900141313150900161615151700161605011700999992090991111999099909999999099099990999199091999039999999 -080910101000051112130100141512161604170218191904172020191904172020030600009990909999113991909909990019999911909099999999099920999999 -040108060900100808110900121314150900121602151504121617170500121604180300999990390991990919999911009991999909909919999990999019999929 -080905010400061010111100121314111104120215031600121715151800171719191904099990003099919999199901990919909919999092099999999990999990 -080403090900080810090900111102041200111113131200141413051200060115160400092999999999919909109991999999999999099190999099903099999009 -040108080900101008081100101012051300140402151500141406161704181818160300999090399099999999990991099091909091999909199990090992999999 -080809010500041011111200101011111200130314021200131516170600041818181804909999903090091999999999999099999991199210999190999909909990 -080804010400080809101000111105121200061104121200131313021400031515150400909999993099009909019999999099999990999999199911929900999999 -080808030400020409041000111212121000111313050400141313151500060116151500992991999099909910099999909909999999991990091999903099999099 -080301090400080610111100081210111100021210130400041404151500141416051500299099930999009999999999999199009119999090990099999999990099 -050804090300040804091000110812091000011314021000151314141000151516170600090999999299999909099909099900999319199991990999999999990009 -060804010400091010101000021111111200131314031200151316161700150516160400909990093091999919990919999090299999990909999990999990990999 -040809090300100209090500111212130600141415131304141615171700040118171700919290199991990919999999999190909900909999991999903099999099 -080808010900020610110900120404130900121203140900150516161700150416161700999991913990910919009909999999099929990990099099999999990999 -080909090300080205101100081206131100141215161100171515181104040401181800999299199999909991909999999090099999990190990909000390999999 -030809101100121305021100141515160600041515161604171818191904171801191900211099091990999909019999199099909999909910999999099399909999 -080808050900031011110200040612121300141412121500141416170100041616170400999099909092191999991990999099919999199991999093999999909009 -080801090900080810090900111112131404110612150200051612151704041803191700999999939999019909991999000999019099990999199099090999909219 -080809101000081111110100030612120500130214120400151514161700151514040400900999990999993990919999909299999911991190099990999900999999 -080501090900081011040900081012041300141002131300141015160600140404160300099999939990190999090999099999999019999910999910999099909929 -080804090500101109091200101314141504100214140100100416171700180316170600999999009099999990090991900919999199399990999009919990929999 -080604091000081109091000121213041404121202151500161617151500160118050300990999099999999900090990990999009911991999999099993092999099 -040805010600040909090900101112131300101014141400151616020400031616171700099999003099999909199990999901099999999991991910929999999099 -080808010500090410111100091010111104121314021500161717041500061717031500999999003099999999999999990090919091199010990999909999999299 -080809090900031011041200050213061204041415151600171715150100171818181800909992199999909991099909990910009019099099999993999099999999 -080109090600081009091100121314151500120414160200121714031800040514181804999999399090090901909991999909999991199999190999900929999990 -080809101000030809111104121309111104140609151504140216170100141819200500990999999999999020999909090199999900909990991913991199991009 -040808030400020808090900101105090900061212120400131414141500130104161500992990999091999919999910999919099999990199090999993009999909 -080609100300080211121204081313121204141315160500171819192000170119192004091299919991199099999999990199099990091009991090993999999990 -040809101000010808101000111111021200131304141500131316141500060504140300091999919993999999019999909909109909999999999099900099999929 -080809100300060811101000120511131400151515020400161617171700161601040400900990999299999999991909919090109991999199999199999300999999 -080809090300080509101004111202101000131313141500161617180400060119191904999999999290999009099911199199999999091990099009903099999990 -080910011100061210111100031210041300141415021600141404171700051818181704009990093999909999991999909299919911199990999909909909999990 -080809041000020803111200130611111204131415051200131617181200130117180400919099929091999919999999990900999000999999991000993990999999 -060208080800090910110300090912131300011412150400161612041700040512171700919990199299909999009990999919099399099999999009909999990099 -080801040904080810110900051010120900131415160904131515170200130318170600999909930999011999999909099909099090909999199991999990992199 -030808080900040410020904111112130900111112121400151617051800060117171800299999991999009009919999199999909919999199090099903909999909 -080109101104080909120500131415120300131316121700181802191704181820061704999009390099909901999901999991929999990919999911099099999090 -080910101004031102051200131314140400131314151600171718181600040118061600199902109099109999190999999999999999099010999199903999999909 -040803090900101104090904021212131300141215161700141815151700140605011700929990199991909019909919999999099919099090990999999039909999 -080806010904080810110900051213140900021203150400161617151500041618181800909909993999010999199991909099099199991929099199999099909999 -080809100500080909110100061213141504161202171504161218181804161219200300909099990999913991909901990991099099009919999999099199999129 -040808030900100811110900100212060900101313130900141515160400050115170400092999999999999991099991999991099099099199990900903999999009 -080809010400080809091000040211121300061411051300041415161300031404161300919999993099990991909909009919099099999909990909999099929999 -080910100300110410101204130602121204131414141400131516170500181801191900099990099299999009099999190901999999999190990199990300999999 -080903101000110912101000111112130500011412150400041402151500061416170400099990929999909999999999909909099399099919990909999199901009 -080910031100080910111100080910021200080604131200141516171700040104170500992999999990909999999999199999199999990001090119903090999999 -080801040900060810111200131313111404151604111400151616021400031718051400999099939090910990090999990990999999999991990919999199921909 -080910101100120210041100031313131104141415150600011615151700051819171704199991199999999921009999900991999909099999993199999009900990 -060809100400110809100100120809100400121213101400151505160200150317171804999090999999993909999990999990909900199090199909999991992910 -040808090600020808100300111212121200051304141400151316171400040116171700999090990991912919999919999919999009999990990099903999999099 -080801090900080810090600110210040400121310141500121610141700031805141704999999939999100919909919999019909990099199999990991099929990 -030408090900101112020900131305041400061516161400151516161400041717011400900992999991111999091999909909999009999999999991999039909999 -040809090900101011120100101313131300141404151500051604021500031717170600099999090999003999919999999909199990999099990901999910929999 -080804090900080810090900011110060200111112041300141504041300051616031300909999999999919990901931999999919900990909990990900999999929 -080909040400100211121300030512121400150616161400151716161400151717010400199991190099199920190999999999199999999099990090999930999999 -080309100400081112121300081112121304141102061500161717151500050117180400929099910999999999999909900991999110991999991999903909999009 -040601080400091008081100121313141100121502041100121616171700121616050300999090039990090909199999099919099919999919999919999902999999 -030808090500101008090600021004111200131313131200141516161200040116161704999092999999900999909919099199099999999919990199903990999900 -080910100400020511100100121314141500121617171504121818191500031818061504119091009999993919099909999900999999909090999990929999999090 -040809091000110809091004120813131000011413150200161605061700041603181800999990999999999009909909919909019319999000199999909991999299 -040804010900080810100900111110101200111104131400031516130400051616020600999990903999090990990999999999109999999909092199999919909109 -030806090900100811090900020811121304141511161300141711161604140104180500999992909991999999909919090199999119999999099109093009999909 -050803090900080810040900111112130200111114131504161617131504161601130600992990999999009999091999999990919909909099999011099399999909 -080909031000080811121000050413021000141415041000141616161604171701180600992999919999019999919990919090999999999900190999009309999909 -060803090900100808090900101002110500041213131300141515151500140416010400992990999999999999019999109001999919999199990999999030990999 -080801090900081010090904111010120400131414141504160217170500180619190300999999039999909099999909909019099999000199099199909199909929 -040108090400101111090900101213130400101204131400101202151500051206031600990090309990999991999990999990909999099999999119909091999929 -060808010900100808090904111111121200021305141200151617141804031919140400999990993990919099109999999190999199099199091099029090999999 -050108080904101108120900131313120900141516021704181819192004181819030600999000399999090901999999999019999911000991099999099990999299 -080808030904020510100900111110100904011213141500061617181800041717181800992901999999099919999991990991909319099000990909999999909999 -080809090300100209091100101012121104051312121400151617181404190601201404999290999999199991999999900919999909990199990109009309909900 -080609031004081109121004081314121000131302121000151616171804050116192000999909092999099099099999199091999919991999091909003900999909 -080209101004081112101004130514150100031616151700181616151700181806041700111909999999009010919999039290999999099999990999999099999909 -050808090900101111110300101012041300141412041500141412021600060112170400099999090999999990992999099909919990999999199191903919999109 -040108080500090908081000110912101000131313141500160204060400161717170300999090399999999919099990099199909990991900091999991999999929 -080902101000080411101000030411121200011313121200051314040400151515160600119999919999099929909999099901999399999999090009990999999009 -080801090900080810090900111210131300110510040200111415161604110406160300999999939999099990909909199999919900999909199099090099999929 -060408090400101108120300130208121204131408051500131617171500130117171500990090099990999909992991190919999190999999991090993999999999 -040104060400080809091000111105121300111414140200151516161700151516160300999990300099199990910990999999109999190999199991999999999929 -060809101000031109101004121109131300121204131300050214150100161616170400009999999999909029909990999999999999999100990913991109999909 -080809100300080809110400121302140600121515161600121517170400040117170500991299990999990909199911009999999190999909099999903999999909 -080105090400081010100400081111111200081313061400151604171700021616170300999099300991999990990999999909909990991909099999919999919129 -080910010500041111111100121212121300060214141300151504161300150316160400009990903099999999910999999919099099999100999999999990929999 -080809100500080811120300131314121500131302121504161616120400060117171704990099909999999909092999999990999911101999999990903099999990 -080808010904101011120900101005120904031314120900151614041700061802171700999900993999000999099999990999999291999190090999901199991999 -060809090300080810110400051202111100131415151500011416171700041418171704999290919999999990190990099091999099999919993999999199901090 -080909100300080910100500081102121200130404121200131415161600130106170400999299999999999990190911999199999999999009091009993009999909 -030808090900100808110400101213110500100214110100150414111600151517040600999992990099999990999990009999999119390999999010999090999099 -080910051100080812031100040412131100011412021104061412151600171815151600900999099999092909999990199999199319109999999900909999900999 -040805010904100811090900121213041400121215151600061715021600031818181600999900903990909909001990999999919999099099990991999919929999 -080801090900080810090500111112121200020404131304141415161300141403170600999999939999000999199991999199099990901099999009999909992909 -080809030400101112131300100204130600101414141400101515040500040115161600992990919099199991999919999990009099999990091999903999999099 -080808010900041010100900111112121300021112061400151504161704151503180500999999093999990909919999909999009119991909099990099909992909 -080806040300080809101100051210100200131214141400011215150400161615150400999999900299091990999999919099919099999919093199990999999909 -080803090600101111091200101313090200101313141504101617180400051901181804992090999990991999991999999999919999109901990010990399909990 -050808030904100804110900120213130900141513130100041616161600171706181800992900999999909901909919909199999119399990990999990009999999 -080910100500081110100100081112120400080613131404151513021600151503171804009099999999993999199990999991909999009099999011999991999210 -080809090900080804100300061111101204131411101500011617171500051804170200909999909999999990992999990099919090999009993199990991900919 -080809051004080804111000121302141000150616161604171718190300170118191900909909900999999990909911999191009999901099299009993999999999 -080808010400060909101100020909101000121213141500031604171500051616041500999999903099910909999919999190999990999100992990999909909999 -080105060904080810111200131402150400131416171700181416171700181416030400999009309099900919099911099991009999999999999999999990909299 -040804060400090802101000090811111000091212120300091314051500040116151500009999990099919999199991999919929999999190990099903099999099 -080809100500081109090300121106131404151116171404151118021900150120202004999099990999999909902990990099099091909911199191993099999990 -050808080300090904101000090902101000111112130400141415151500060116170400099999099299909999999999199091999910091999999099903099999009 -080109090904080810050400111213130200061415161600141417161600181818030400999909309099109990199909919000919999999909999999999020999999 -030404060800091010040800111110120800111113130800021415161600051717011600999092009999999919909999999990099999991990091919901139999999 -080808090600101112130500031402151504161718151504161918202000191918012004999099900991909921090991990991999901909099190999999939999990 -040103080800091011020800061212131300041214141500051614141500041717171500992990399990911991199909099990909099999999990099999999909909 -050809101100010812020400130814141504130814141500161717170300061818181804091099911093199999919999910999999099999909290999909099999990 -040108080600091011081200051314021200131315151504161617171804161617170300999990319090190999019900999999199999909091999991099992999999 -080809010300060510101100121204101100121213131100140413130200141516170400909999003299999909999990999999199909999999199091999900900099 -040108080800091004110500091213130600090213131400091515161400041515031400999990390991090999909910999919909999099199999919909929999999 -050108080800090909100600110404041200131302121200131314151500031414160400999990300099999919909909999190999910999910999999999909929909 -050104080800090909081000041112131000141112021000151116171000041616030600999990309999990990109909099999999091990991999919909990999299 -080808060900101004051100101012121300040212120400141415161600140315011600999090999099999999000990909999909019999101999999999939929999 -060808030900050808100900110212131404151515161404171818191400040118191400092999999999990909109911990199099999909190990900903999999999 -030808080900041006020900111105040900121213140900121515161600041515011600299999091990901999999999909090999999199901990909999939909999 -080309101000081109101000081111021200011313141200041313151600061704051804929999999999999999190909199999199399099991990910990090909900 -060809010400100809111100120809051100131402151504161717151500161703041800999990993099909909909990999099919011900199999999999290999909 -060809101104011209090500131313141400151602141400151616171804031919190400090009099093099991999999199999999111999990999990029900999999 -050801090400100811121300140415131300141617170200141617181800140603181804999090930990019909919999099900919909999999199999999999909290 -080910011104121010131100120514131100120615151100031602150400171717180400009900993999909999999990109991999909999919999190921909999909 -050406080800090910101000090911121300141402040300141515161600040115161600999990009099099999999999119091029919999999991909903999999999 -080808020900031011120900011010041304141516171300141818041300051818061300991992991999910999199939990909099900099099990990999999909909 -080808080900031002060904111112130900111104140900151617181800150105181804999992199999109099199991009999099999990100999099993999999090 -080409031000111212131004041212021400151516161400151517171400050617011400092990919990990099909909119999999999099999999091900939999999 -080801030900101010111104121314151104161717150200061717150400051818181800999299039199999090199909190090919999190999099999999099909999 -040808010600090909101000110512101000021313141400151516031400151517040400099999903099919919999990099199099990991999999129999990990099 -020808080300091005111204131406111200151416161204011416161700041418171700199291999999099010999990999199099199009999993999999099900099 -030808010900060210110904041213140900051313140900151516141700041518141700299999913990199091919901109999999099999999099909999099900999 -080804010904080810090900111212131300141212061300141515150200140305160400909909993999009999919909099099099999999999199991992900999099 -080909011000060909111000051213141404151617171404150417170200150318181800099990993999909999010990990009999099909999199090999991992999 -080109090600081009091100081010121304140204150500141617180300161619191904999999399091090999999999900190009199999190999112999099999990 -040802090300011011121200131313121404041515161400171515181400171705180600091999011293999991199999990990999090099999999990990090999999 -080801040900080810101000110612120400110212131400151605041400041616031400999099939099199910090999999999099199090100999999909999999299 -030804090900080810111100021010111100051213141400041516141400171706010400299999900999999919999919999901909091999999990009990030999999 -080802050400080309101104061213141400151613141404151717181800151717011800910999919092919099910909999909999900909991990909999939999999 -080910011104021213131100140513131104151616161104171818180600031919202000119901013999990910999999990199099999901990099999920999999099 -080409090300101009020400061011120500131311141400131311141400040401151500099290999999910909919999199909909999999999999009900390999999 -080904011004081112131000081415161600080206161600171718190500170318191904099909003999019999100991999910999999999190999900999999929990 -080809090400101103090200101213131404051513131600171718181800171704010600999999029099991990991909990909919009099099199999999030999999 -080809010500080810101004040411111200131302111400151516161700031516160600909999903099999000991999919999909901999919099199999990929999 -080806050900101010030900110412040900130212140900131315161600041701161600999099009999929999199909999099099119999990099109990399909999 -060808090300101008091104101012091100011314021504161718050400161619191900099999999299999099099999999900019391109110090199999099999999 -080104090900081011040900041212061300041212141300151505141600151502140300999999309990909901090999099999999099099199999991999092991199 -040806090900100811090100020812121300141412051500141403041500160417171500090999999991113919909999909199909999099999999290909999909909 -080106090900081011090900101012130400140215130400141616130500140316171804999999309990109999109999909091999919099199999999999990992000 -040803060900101111020900101012130900141414151500041617151500161604010500029999190999911999999990019999199990999999990009999030999999 -080804090500080810110100121213131300041415151604141415021700031818180600990099990999093999019990999099199909109999199991999910929999 -080409091000081104090300081112021300041106141300011516171300151505171300909199999290999999019990999099199999999001993119999099999909 -080104060400080909090900081010100400081111041200021111121200131415030500999999300091999990990999999999999090991999999909919990911299 -080809051000080804101000111212130600041212020400141414151500161601031700900999999999099909909909909999099091999191099999990391999929 -080404010900081010090900081010111200050206131300041403151500161616150400099999903990999999919999109919909090999199090999991299999909 -030809100200111212131304111212131304140515041600141718181800141717010600211199999190999099999999990990919900999909199999999030909999 -080808090200050310041100121213111100121214150100041414161604171818180600991199910199299909999990999990199990399990999999009909909909 -080910100500040910100100060911121300140211151504161604151500160317171700099090999999093999109999909099909019909199999909999909929999 -040808060900100308020900111111111200051314121200151516161600151504010400999990290999911909991999909990999009999999199099999030999999 -080808091000110212091000031306041000041414151000161614171704161601180500999991199999009921999999909910999099099990999009099309999909 -080808010400040909090900041011041200130211141500131611141500130311060500999999903090999991900900999919909199099999991999992990999099 -060108080804090910041104090912121300140212121300151617181900151616030500999900309099090099999999999199999109099199990110999920999999 -040108080900101111110900101004121304140215161300051717181300061717031300999990309991990999999990900199099110990919999919999929909999 -080909090904041011110500121212021304141415161700181419191700060119190300099900009099999990999999110910919990990990999999903992999999 -030809090900100808041100121202131100121204141100051515161100061515010400999992999091999999109999199999199990199099990901999930909999 -080901050600080910111200080904131400081513130200161517181804041517180300099999930099010999019999919999919999990909199099009999999929 -080808080300050609101100041213041100121214141100011514140200161616171704999990990299000999999909099990999909999999193199999011999990 -080808091000110412091004131412121000031502161000171717181800050619011804990990999990990099999919999219099911199999199909909039990990 -050809100300110809121300140802151304161616161304171718191904170601191900999290991999999909019990190091999999009991999019090399999999 -040108080800091011060400121212020500131414141400131315151600170403151600999990309091009919999999199099109999999991099999909299909999 -080809011004110609121000131409151000021409161004170318180400171718190500999900993999010909999911909199099999901990999990992909999909 -080808090400011011120600131402151600130317171600181919171604181919051604999099900993119999910911109999099299999909990999099909999990 -080806090900011011091200131311110400131305140400151515020400031617171700999999009093109990990999999999199909099091999990999919921999 -060808010904040808100900111112100900110213100500141516161700040316181800099909993990910999199991999919999919099019990990909990992999 -080406090300101010111100121302141100151515161604051718191900171701191904090990990299999990919909199091999999900190999109999399999990 -080901101100051213101404151515100400161602101700181819191704031806191700099090039099019099990999099999999911099109999999099099929999 -040108080400091008110600091012131400091515141400090216160400170516160300999090399991000999999990099999099199999199099199909999909929 -040408080900101108080900101012060900011314030500151514140400160217171700999990099999990990099990909909909392999199999999919190911999 -080109100400080809111100121209021100121204131400151604130600151705130300991999391099199909919999999990199999090099099099990999990929 -030808060400091008111100051202111100121213141504011616161500041718181500299999990090999900199999999991909991909091993990990909909999 -060404030800090909091000111213021400111516141400111516171704110516011700999290009199991999019900919909999990999991999999090939999999 -050808090400100208110100101212121200101314151600031317041804061317181800099099990991993991019999999999099990092900099099099999909999 -030809090900061010111200041002111200041314151500161617151500161604010500299999190990999999199909119909919090999009999999999030999999 -080309051000081111041004120211131000140615161700141818191904141818011900290999909999999019909911199099109090099901999999099939999999 -080809101104010812131400041515130500161615131704161618180600021919190300990009909093009991990999999019999999009990099999919999919929 -040508091000111212131000061212131000141414151000040216151500031716010400900990990990999999999909009999099991999199990199999930921999 -060808010400090909101000021111101000121104051300121415151600120315041700099999903099919991999919999199909999099009999090999990929909 -080902100604110312121314151516161601151717181819201705181819042121212119119091910902991099991990993999909990900999999999909009999999 -080805090300010810111204131314140200131314141504161718061504161919191500999299901993991091091991919999999999000090999099099099999999 -060808030904100808050900111213130904141515160200141517171800140117170400999200999990990909999900990909919091199990099999993990999999 -080109100400081111101000081111040400080512131400151602130300061617171700990999309099999999999909099991909099199919290019909099999999 -030809051000040611121000131402121000041415121004161415151700161401171700219099919999999900199901999999999090009999990190999399999999 -050808080900101010110900120613141500161613021500161617181504040301041500999990990999999909900999999009099911199999999911002309999999 -060809100400110409100100111109121300031414150500161614151700161602150400009099999999093999919990009999109299999999999990999190990199 -060805090900101112090100131414151504161414151504161718191904161702190300909990099990013909109999990099999999909019999999099192999199 -040808090400031011090400121212090400051302141400151516141400151516010600099099099999090929099999999991009019999199999119999930999999 -080808040900041011120900131415120500130215120100161615120600160315170400999999900990900990999990909999999019399199999910999909929909 -080808090900011011120400131415161604130617161604131817170500021818190300999999900993090991909910090990999909909999999990919999919129 -080901100400080911100400080412101300020514141500161614171700031606171700999099939991199999090909999190009099091990999999999099929999 -080910110400080912130300080914141404150902161600171718181904061701180500990099909999092999919999990091999110991999999190009390999999 -080802090900040810090904111112130300141414140600151617181800050117181804991999919990099099119991929919999999990109099999903999999090 -040105040400080808080900101112121200100413131300100214140400100614140300999990300099999991990910999990999099999999091199990999999929 -080801091000080811091004041111091200061314091500030502161704181819171700999999939999099099990909199909909091099010999999029109991999 -080809091004080809091004041112021300141115161600141117160500140106180300999909999999099099900999109091199919999999990090993019999929 -080809101000080811101004121206130400141415151500140216171804031919010500909999909999909090909999009999099999999190099919021130999999 -080910101000080909020400081105121200011111121200131414150300160406170400999999990999910991019909999999999399999090290999909009909909 -080801090400080810090900061111111200131414150200160417150400051717150300999099939999009909199999919990919099190999999900900999999929 -040809011004111209091000110613141004021513141400161713181800051903181800009909993991190990909999090199999199999199990909901999992999 -080109101104081209101104081209131100140609021100151617040300151518190500990909399990199099999999919009199991990999290009999999990009 -050108040909101011110906101011111213141516171813021919201813040319201813990990309909090999990999990109999900091999991909909999992999 -040803090909040804041005110812130214110812131315111616171701041616171706092999990190099999991099999999910099909901990999399999909090 -080909091010080805111010061213141516011217020416041818190316041818202016999999090999990990099000009990909990999900990999999900909999 -080808020500030409091000041111111100121306141400151515141400161604010400991992991099099999910999999099199099999009999909990030999999 -080801050900101010100900111212040900041212130200141504130400061515130300999099039999991909099999099099919999199009090999909999999929 -040108091000110808091000110612121000110212121000031314151600171704040500999990399991900999909990999999999199999199099009921000999999 -060805090300101111090900101111120200101313140400101315161604041701161600909290099999999999991999119991999099099910999909090399909999 -030802040900080810110904041210110900061314110900151614140100171717180500910992919999999099999909199909999909090991990093999909999009 -080309101104081213101104080205101404151617171400181920171400060120201400929909919999100091999900990919999199991909991099903999999909 -030408080800090906041000090902051100121314151500041313150100161616171700999992099099990999090991909991909099990919999993999119999199 -080502090900081011091200081011040300081011060400131014141500161601170400091999919999991999992999099999999990990919090090990309999909 -080805090900101002110300101012131300141415130600141416171704180401041700999999001299919999199991999919999990099909999109009309909999 -040808050900101011060900101011040900121211131300011211020400031415160400990990909999909999999999999909009910999999993910999919921109 -080808090300101009090600111102121304111114151600051718191904202020011904999299909999999990190999090991009919099199990119099039999990 -080805090900030806090900101112131400151616161600170218181904170418011904990999999999909920990990009199099999991191991990099939990990 -040808080900101011110904011012120900041312120500141415021600140603171800999090909999999099099931999999999009099919999011999991909219 -080808010900041011110900121213040900121402040900061515051600031515171700999999003990990999109991999919999919090919099990999999929099 -040108080800091011121200061011121200131011140200131004141500050403161700999990390990119909999999999999019099999999199909900991999219 -080909090900080402040300101011120500101313141400011506041400161616160400999999919299999900109999999991009090999100993999990999999909 -030808080900061010020904111105120904111113141400011516141400171718190400299999991990999090919999990990109999999009993119990099999009 -080105090400081010101000111111121300141402151500141416031700040616160400999099300990999999910999199091909999999919099999900920999999 -040803060900040808100900040511100900121212020900041313131300141501161600099999920990919999999990999090199999199909199999900309909999 -030808090500100404021100101004041100121212131100141415151100141406010400291999991099901990909999999900999999999900999091999030999999 -030809090900041011121200131302121200131314041500061614171500161605010400299999199090199999199999199999919909999990990001999030999999 -030804091000111111021204131414151500131414151500161718181904051718010600290099199099911099991909999999999990999991090099009930999999 -080309090900101104121204131415151504021414160600171718190100171718180500299991990999099010909999990190999199099910999913999999990909 -060803040900100808020900110412120900131312121400131315161400040117170500929990990999910909919909999099999919099909999909903909999909 -080609090300080210041100081205131300081214131300151414040400040116161600999299019999190991990999999990999010990999099909903099999999 -080603090900080510090900081110100200121204131300011414151600041414040400092999999999999990991909909099919999999001993910999900909999 -080809061000080809021000111204131000111214151000161217050300040117170400999999990999091990919999099999199011999999290099903909999909 -080803090600040810021100121213131100121413131100151516161600041701050400929090990999119999919990999999999909999019099999990300909999 -040808010600040808090900021004110500121313111100121313141400150316041400099999993099919901000919999109999999999990999999919099929099 -080809090500080809090400011011111100101012121300030402141304151617180600999099999999099999090931999991999999999991999010029109911909 -060801090904100811120900130814051500160817171504181802170300181819191904999900930999909909199999099091999019009199999199999192999990 -080804010600090910111104120913141100120405021500121603171700121818181800999999003099009099999999099900019999199991990999990219999999 -080809100600030809051100041209111100041302141400011515141400041515161600990099990992999991999901999991909009999919993999999909909099 -080209101000111209101004110513130100031413131504161606041700161818181800199991199999119090919999939299999909009090099099999990999999 -040808090500100808111200011302041404151617031400151617181400150618181400990090990990990991100939990901999099999992999919999999909999 -040108080800091011110500121311140300041313151500161702151504161818180600999990309090099901999999929099199999999019990919090990999999 -050809100400111102121204111113131300031414151600171714151800171704010600000099099999199099190999999291999991099099099999999030999999 -030808091000040208091000051112091000131112091000141115161704040618011700299999999990199991999999999099999990090990090119009039990999 -080804010900101111110900040504120900131302140900131315061600030415161600909999093990991900999999019999199911999990099999920999999099 -080901101000080909101000040411120400130311140600131315150400050215150400099999939999909999100990999099099299099919999990991999901909 -080808010900101011120900100211040900131313060904141516170500031515180400999990993999110999909919999919999999001909990900929909999909 -080903101000081111101004021106121200131305120400131314151600171718010400129999999999999019990990999109999999999900099110999030990999 -080803090900081004090900021004110400121313111400121313110100150504110600929999999999099919909909099199909999099999991913909999909009 -080910011100081210101104081314151100040204161600171705181800170306181800909999099990990099919991199000909999999190999909999999929099 -040809010600041011121200131311051200141511161600041511021600031717171700009999003090919999999990099099999090999999990919999919929999 -040809011004111209101000051309141400041516141400171516181800031502061800009909993990999900919990199991999999990990991999929199991099 -060108080804091010050200111010121200111313121400041313031500161604171800999900319190990999991909999990919999999999190992990990999009 -040802040300090810101000090811110100041211131400121215050400061616161600010999919299999999999901939909099999090909099909990999909999 -030806091000111212041000021314141004131314140500151515151600041701181800290099190991999919999999900199999919999919099990990309909999 -050108080900101112130900140406131300151502161600151504161600041717170300999990390991009910090999999199999911999999999999909019999929 -040305040400080909090900100611020400121213131400151213131400150116161400999990200099999909199990109099199999990999999190993999999909 -040308080900101008080900101105121304021114151600041117171800061117011800999990299999999999900999990190009190090990999190999939909999 -040806090900101112130300101112021400101112051400101115161600040104161600009999091299999999919999109999999990999919990109903099999999 -040806010900100808090904100211121300101405151300101416171300031418181304099999903990999091119999109919999999099900999909999999929900 -080801060900080810110900121213111400031202111400040415150500161715151804999999930999010999999999109291999919999990999099909990900900 -080901061000080909111000080412131000141412150200140416160500041716160300999999930990911990909999099999919909199991999990900999990929 -060105040800091011110800041211111300141415021300141616170300041616171700999990300990090991999999909019999911999091999999909992999999 -080109040300080909101100081213041100081414021100151414161604151706051600999999390299909991999900099919999991190990999999099999900909 -080910111100080512111104081212130400081414150600160314171804161902011800900999099999999099909999009999099091999991092990099139911999 -080403091004081111021200081111131400150516171400151518181400060118191904092109999199911999999909099991099999099019999199903999999090 -080809090500080809090100101102120600100312121300101404041300040415151300999099999999093999919911909991999299099900990999900999999909 -060809101000110802100300111213141400111513141404161713041800050119181804091999919299099999199909999909999990909099990109903099999090 -080609101004081109101000081202130300141404150500011415151600041718181800999909099999999990012911199199999999999909093099990990900999 -050108080900101008110900101012111100131302140300151504161704151504180600999990399999990999099990099199999911999091299901099909999009 -040803091004041112021000131312120500131314141500161614170600161601171800092109099990991990919999999999109909099999999009999390999909 -080808080300040206040900041010090900110410121200111313131400110501041500999299199990099991909999999099099900999919990990990390999909 -030808040900100808090900111204130600110205130400111414130100151414130400999992990991909991999990909919999909099199999993909999909109 -080609010500081009111200081309141500081302161500171816161504031804191504999999093090990999919999919990999111191099999999029999999000 -080809011000081112131004141115131000051106161604031102171600181818190400909999903999900099999900099090199999909991999919929109999909 -060308050400090908101100090908020400121212131300141516171700151504011700929990990099990999909990199999109990990909190999999039999999 -080909030600080902101004080411041200081313131300141415150500140116171800992999999099109099199999909901909099999199999099993090999009 -080803090900101010060904021105121300141515131300161515171704180401171700929999199999999019900990999109099199999990990909009399909999 -080808080600091011120300091011130400141011130200151511161704150105180400999090999999992999919999999099909999190099199111093009999909 -080808040400010909101000061109101000111112130200141516131700050416130300990999099093999990999999199090919999190909990991900992999999 -020809100300111212121204111314151504161614151500161617051800060119181804111291999999999090999919990919999990999900999099903099999090 -080808090400041010110500120210131300121414151300120604160100031717171700999099900990990999909910999919999991099901990993929909999999 -040108080800091011110400121314110500151314161600171302160300061318181804999990309099099901099999909099099999990999990199909192999990 -030408090400101011090900040402121200131306121200141415151500141405010400990092099999199999190990199090999999999099199099999030999999 -080808080900030402040900101010101100061205111100011213141500041617151500999092019999999999109999999919999099999900993009999099900099 -080803040400090909101000021105101000041213141400151616141400171717010600999990920099999919099919999919099919990919999919909030999999 -080409090904081011121300141415160600141402161700181805161700180103160400999909009999900900090990999999999911091909999999993990999299 -080309100500081112131404150213130600151617170400151617171800041601181800920099919990190091990991999991999999999999090099999309909999 -060808010500090808101000090911101000041212021300031415041304161616161300999990993099909999999990099099919991199910992199099099999999 -080909040400080909101000011112101000051314151500131316020600031717171704099999990099999999099931099901099099999919999919999910929990 -080808080600090310021100090910121200051313141504161313141404171819010400999999291099999999910990999909919999900999199909009030900999 -080801090900080810091100041213021100141513160600171713160400170405160300999999939999911990099990919099109009990999999990999999909029 -040308080400091008080200040511111200131304111200131314141500161601140600929990999090091909991990999999999999999900199091909399999909 -080609100400081111120100081314141400080204151600171715151600170318051604900099990999913999199901999910099999099199999999999099929090 -040802090300060804090900100811121300101415151300101414161300100105170400011999999299999909009990909919999009999999999909993009999909 -080104090904081010090900111010120600131415151600130205151600131703180400990909399999999909909909009991999919099199991099999909912909 -030809091004110808091004110502121000111314151004111617181900202017010600299909999999990099199999119909999900109991990000990930999999 -030402080800091010080800111111110500120413140100151504141400061616161600901992919991999999910999999099199090399909999999990909909999 -060809031000111204131000140215131000161615151000161617181804191905011804912990199999909901999909099919999999999990099119090039999990 -060108090400101112131304101114131304101114141500101616051500021718190300990090309991009099999990990999909999999999990909919999911129 -040801090400101111091200101111091200061302091400131315150400040516150300099099039990919999999999909009999991099919099999909099990929 -080401060900081011121300141411150500141402151500041616041700031616171700999099039099100901999999099999909919990919099909999999929999 -080401090500080810091100121213131400020613131504161718181500031918181504999999039099100919090999999199909909901999991099991999929990 -080909031004080909111200131314020600151516171700151518170500040118181904999209999199991909019999109901999999999919999199903900999900 -080808080904030610110900121313131404151605171400180219171404181820011400999909990999009929900999990199099199999109999910091139991999 -060805030400020909091000111212131400111212131500111617171500110401170400909990092091999919990999999999909990999909991190990390999999 -050809101000080811100400120304131404121516161700121516160100021818180600009999909999909999900929090999009909099999999993919199919909 -080403090900101111020904121113141400151516170100151506170400181818170500092990999999991009919990199091999901399999999900999999999009 -040108080804091011111200131411111200151502161700151518181700060405180300999900309091999919999911999091999999099910999999900099999929 -080809100500010811120600131313141400151502161404151517160400180417160300990099909993090991909999099199999919909919999910909999909929 -040108080600091010050400111210131400150216161600151717180300151717181804999090309991999919900919999919009099999109999912999999999990 -050809031004110808101000120213040600141414141500161616171500040118181500912900999999909901990919099190999999999190999990903099999999 -030808080800090910021100091213141104051215161100171718191104061718010400299999199999119999919990010099999990999900999991099930900999 -080909090900080404100500080602111100081212041100131214151500040314010400099999999990990999009990199991999099090999199909902930999999 -080601090400081010091100081010091200131314091204040215161700031515051800099999939090990999999999009991999919909190990190999990929909 -080409101000080502111100081212060300011212040400131313131400000000000000900999909999919990192909099999999399999090099990999999999999 -050804010900080810100900040204101100061213131100031413131100000000000000999990903999199991990909009919099099999199992999999999999999 -080601090400081011091200101013090500021414090400151514160400031717171700999099039990190999090999099919999199091990999990991999929999 -080803090900080205090904101104121304101414140100151516170600151518181800929999999991909091990909000919099999399090999090999099999999 -080609090300081011120400130411140200131311151500011616151500051616040400999299091990990909919999919909919909999099993919999900909999 -080909101004110605121004131313141500030402161700011819191700181819191700099900099999900009990999909291099909999910993990999999991999 -080903050400101111121304021111140600011515151604171718181600171919181600129991990099990019900919099991999399909009999999999099999909 -040809090904080810100300061110101200131415051604171715181600170115190200009909999999999990992999999000919999900090999119993911999919 -030808040900100811120900131302140600131315151604171715151800170501041800999092999991100999199999909991099909000999099999990399999909 -060808010500090808101100121313141104021315151100161717170400161603180400999990993090919999109919900199099999991909999990999909992909 -030802090400080810110500121313131304121414140100121515160400121717180600919092910999910999919999990999199099399990999900999909909909 -080109101004080909101004111213141500111213020500161213170300180613192004990909399990999099199900009999909991999991990999909912909910 -080808030900021004060900111212120900131404050904151516171800150116181800992991999990099919909999909109999909901090999009993909999999 -080809090900080810031104120613141500161616020500171718181904170120191904999999909999992009091909919090199991091999999099093099999090 -030808050400040608020900101011111100011212131300141212131300141516040400299999990099010909919999999901909399999999990999999990900099 -030608080400090909101100121302141504161605041500171718181500170118181500999992090099990999109911090199999909999190999090993999999999 -080808030400060910101100120210051300121415151600011415151700041404171700999999902090999990990911999999009199999999093090999099909999 -080409101000081112130100081415161604060215161600171715181800170304180500909999900990113991909990990019999999999199099999999090929999 -060808090904100808110904121314151604031702180100191720212100191920212105999900999999909009900911900291099999399911990099999999999190 -080808030900101102040900101012130900140612131300151512161700050112040400992999199999199999109999909099999900990999099109903900999999 -040808090300100808090904101111121204101111021300101415061600050117181800999990999299999090919999990999199191099909091990903099999099 -080904031000080911101000120913131300050914040200011516171700151506171704999299909999099909991909999999919000999099193119999999999090 -040104080800091011080804091010121200090213140600091503161600051717161600990990399991909099099999099990999190099190999999901299999999 -080910101000030402051100121314151504121616150100171616180600171919191904119992919999990990190990990991999099399991999910999099909990 -080809100400110212120100110612121300110314131300110414151600171717050400910099119991993990999999999990099299999990090999999000999999 -030808090900051008090900111202131404111506161400111515171800110104041800299999999990999990109999190909199990099991990910993009999999 -040808080800090605100100091104121200111102121200131415151500041416040300099999900999993990919909099999999901990019999999909992990099 -030809090200101011111100101012120400131312140100130415140600041617140500219199999199999999919990909909199999399999999000999999900009 -030809090600040409090400101102121300141115121600141515121600140501121700219099999999999900190909109999999009999999999919990390999909 -080501040900101010100904111213140900110602140900151515140400031616171800099090939999999099919900009999999901999919999999999100929909 -080809100400111112120100111312121400150216161404171803161404051919190600900099990999993990999991909919099099900199999999001290999999 -080806010400080809101000110412101000041314140500131302150300161604151500999999903099019909199990999091909909999919999919909992990999 -060809090904101011121204130211121200131311141500161717181904031717010500099909099099099099999911999999909991091901999990029930999999 -060808010500091011111200041311110400140215151500141616171700141616030400099999903090190901990999999910999099999190999999999990999299 -080409100500081109101200081309101204131314100400151502161700150106031800999099099990999999999900900999999919091910999911993091999929 -080604091004081103101000081112131304141102131300151116171700181801051900090909990999929999919991990091999991990999990109990390999909 -060801090400101011091200101013091400151313041400050216031400171716160400099999039099009999190999909999999099090199999999991929991909 -030802090600101112130100050414141404151515161604171718181900171718181900919092110991993990119999990090909999909909999990999999990999 -060808080400091011121300140315121604140515161600140204170100141818181800999990099090900909099929990999999990999090991093991919999999 -080910101000080911121200010913041200041404030500141406151500160217151500999999909990909999009930999910999099999992099099919999911199 -080609090400081010101000081102120300041314151500131316160100051716160400099999990099999999119909929901999099999910999093990999909909 -080209090400101009110500100312120100130412120400131415151500130616171700119091999999990992109999939099999999999009099099999009990999 -060808090400100808110100021212111100131313141504160517181504190318181500999090990990993999099919199199099999001009999999019099929999 -040108080800090910100500040911121200131314121200131302150400060316161600999990309999090999909901999901999999999919099919909919992999 -080809090900081011120300011006021300041014141504051014141600171704161600999999009999119999912930999999119099109999990990990999990999 -040803090900101105090900020612121200131404151500041414161600171717011600929990199991999919090909999190099199999990999919900939999999 -080801090400080810091100050612091100130402141100131315141400030416160400999099939999010900999999199991999900999919999199929090990999 -060108090904101010090400111111121200021313121200140313051500141617180400990900309999999999190999099199999199990999099299999900900099 -080903101104080909121304061415120200161616171700181819171700181801052004092109999199999090091909099990919990999999999019999390999900 -060108080400091008080500091111111100091213040200041213141400041513160300999090399990090991999999999909919909090999199999990919909929 -080404010600080409091000081109091200131314141200031315141200161617020500099999903099990990999999909009199999999999992199999119990109 -050803091000110808091000041202091000131204141400151515151400040116170600992990999990999990999991199099909199991909999990903099999009 -040308090900020808090900101011110400101012050400131415151600060117161600929990999991999919909990909999099909999109090999903099999099 -060503080800091011110800121314040200121314151500121316151500041301170400992990099999990900901999999999919990999999990019999309909909 -080909090900081011120100101013140400021515140600161704141804161603140500999999990990113999999999009100999999991099099090099990992999 -080601091000111112120200131412121504050404151500161616031700181818181700099190931199099909991990990000999999999992099999999099999909 -080603091004080811091000121314091504160217091500181919202004051901202000099909929999999909190991900019999190991900991999009399999999 -050104080800091010080800111012130400140612150400140216161600171717170300999990309999909909999910009109999990099999991199990992999999 -040808030900101102121304061114141500161114141500161718191900160105191904999290909190911099199999999099999099099919990109993999999090 -080803091004080811091004121311090200141415151500141416060400050117181900992909999999099090990909919099919999999919999109903090999009 -030808040400090808101100090402121300041415121300051415151300061401041300999992990091909999190999199909999009999991990990999399909909 -080808010900101112120904051313130900141402040900151516171804151503190600999999003990991009999999919991999909099019099919099910999299 -080109101104081213050600141515151500141416171704180219191904202020200300990009309091999910009999999990999990901999991199090992999999 -030808080800091011020500121204131300121206131300141515150100140416161604999992990991119999910990999999999990990091999993999909990990 -080809101000010811101000121213140400151515161600040206040500171717170300990999909993099991090999099199099999999190090099991999999929 -080109090400081009111100120413141100120515141600120206140400171717170300999099399991009910009999999990909909999999091909991999999929 -080104090400080810101000111112060500041113141400151502160300151517171700990999390099199909190999999091099999999911299019999099999999 -060809101000041112131000031412130100151512161600151512041600040217170500000999999990990990999990139299999990999999999909991199901909 -040808010904100811120900131313141500041606151500171717020500031818181800999900993990001999901999099900999099999991999900999919929999 -040808010600090908101000091111101000121302140500151304141600041303140400099999993099009990999999999099199911090909999990909990992999 -040801090900061011090900121211131304120411131300031402151600171418051600099999039990019999919990990999999909999991099919929109911999 -080804030500091010111200061010021304141414141500041616171700181816011700999999002090919909990999110999919999999990190909999939990999 -080809090904080804100600041111120500131111140100131502160300131717161600999909990999990990009909909999099091399199999192999199999199 -080309091000111209091000050213141404150616141400151516160400171701180400299991999991999991900991190009999999999991999090990309999909 -080808080500091011110200060312041304141516171300181817171300181919011304999990999090091999191992990099099000999999999091999039999990 -050108080400090909080400101111121200101111040400101314021500100603161600999090309999990901999999099999999999999010099911990991999299 -040102080804091011111200131011110300141015151600140515151700141806041700991900319199999909992901999999999009099999090999999909900999 -080801090900080810090904111210131400151515151404051603171800041616020600999999939999919009919900909999199999909991990290999910909199 -080309101004080509101000080211121300141515121300041516171300041806011300929909999999999990190991909019999099999919990910990039909999 -080909090900081010100100111212121300141402041500141616051704031616061804999999909999993901999909909991909900999919099990099990929900 -040108080400091008110400101012111300141512110400140216160500140616160300999090399999999909090999009199909199999109999190999999909929 -080906100400110212101300031414101300051414151300161715151304161818010400199091109999009921999999999999999091999999990090099030999999 -040508080900101108080904121102130300121114151604121117181800120617011800909990999990990099909991099991929991109999990119990939999999 -030809041000041112021000041113141000151515140600161717140100161617140500219999910990911999999900919990999990099999999993999999990009 -080309090900080410050400080210111100081210131300011210131300061415160400299999909099009999999911999999099999999999993109990999900009 -050808010900100808110904121213111100121214151604171414150200060318192004999990993999900009099990999999919909000999199999909991992110 -080804050300091010111200091013131200091406131200091516170200040118181804909999090299990999999999999909999999999000190191903119999990 -040308090900101111121200061111020500131414151500131414041500130116170400990990209990909999999909109999199091999999999909993099999009 -080809090900010810101104121210101100131214151104160214060500041718190300909999999993090091999999999999999100901990091999901999991129 -030806090904100811040900100811121300101411121500021611151500041718010500999902909999909999990999999909909909991990991919901130991999 -080909010400061009111204131014151500161414151500160503170200161818180400099990993099900099019900999099999999999999199991990210999999 -080803010500090404101100021210101100131314141100131304040600151515151600929991993099990910099911999090999999999990999999990090999909 -080309090900100411050400101111121204021314121200151616171800151616010600299991909999909990990999990109999190999109990910999930999999 -080809090300040809020400101010100500111212130600111212141400110115160400999299999999910900919999909991999990099999990999993009999009 -080904031000080909111000121204021000121213131404151613171400050118061400909299999999991900919999999990199919909190990990903099999099 -040108080900101010080500111212040400131212141400151602140300061617171700999090309099999901999999099099909990990199999199909192999999 -080909100300080211121204081311121200131311141500041616171800061601040500991299199990199099999990999999099999099910090909999300909999 -050108090900101010100900111104120600131302141500131316171704041816160300990990309999999919909999909910999911199999199099090992909999 -020808080300090510111100121010111100131415161600171718161604040106191904199291999990999919999999999190909909991099999009003009999990 -080609100400081112120300081113141504081102160400171716160100170518181800090099909999999999902999110991999919090199999193999099990999 -050801091000111112091000111314141000021504141000161717181904031717061904099999039999109999099990999109999909091999091909099909929990 -080909090300080210111100041213111100141504160500141416160600040117171700999299199990199999199901999919099990099199999090903099999999 -080809090500101109090100120213131304141515150300141416171804061920181804999099099991193919999910990919999999299900999090099099900990 -080309091000081106091000080212121304081415161304171718191304170520011300999999299991999999000919990919099911909991999000099039990999 -080909090500081004111104081212110100081212040300130214141500061617171700999999099099999090099909139999099999999199290191900999990999 -080104050900080810110900121313020904141313151500141604031500141606171800999999300999111990999909910099199999999909990992999990999009 -020809100300110512121304110412121300111415061300161617171300160117170400111291999990999099999990909990099909991099999099993990999999 -060803090900041011110900041011110200121013051400151016161400150104041400092999099990999999991909999990919009990990999191993099999909 -030809091000051112121000021312121004141415161004171818180100041919190600299999190999999901999919990190999999009100990993900999999909 -080109040400081011121200081313141400151306141400151504020500031617171700990999309090099991990999199099999990999991099099999919921999 -040809100600111111110100020412120500131314121500131314161500040304161500000099099999993919909909909190999999999999999900902099999999 -080910041104081205041100081203131100141515021100141515161600061701161600909009009990990999999999219909999991199999990909990399909999 -080808090600040510110100121310101400031302141400041315161600171718161604991090011999993999999919999291999910999909990909999099990990 -080804010600080809101004021112131000141115131300141116170400140316180500999999903099119010099999099190999999999900999990999909929909 -040108080800091010110500121013130200141513131604171518181600190618031604999990309999990909909901919009919999900999999099909999909920 -080309100400081109040400081109021200051113141400151113131400040116160600920099990990999999990999109999199991990999990199903090999999 -080909040300080909101100081205101100131314021100131315161604040117180600999999990290999999999900999099099911199990999099003099999009 -050108090400101111120200101111121300101415161300100604171304181818170300991990311090991999991999999990099099999000999999009992999999 -080809011000080809091004111213131000111406131500110216041504051718190300999999993999190091999900999919909990999199999190090199909129 -040808010900040808090900060410101000111102121300111114121500031616040500099999993990999990091999999091009999999919099099999190929099 -080902051004080311111000041212111000061212131000141413130100141415160400119009919992999999999909999999199090099999999993999009990909 -080809090300050209090400101111120400130411120600141415120400141401161600999299099999190901999999909099999099090919999000999309999999 -080905021004061112121000011313121000141313150300141416151700181804150400099100001999099999199939999999929990999999999000909090999999 -080509101100081203131104081214020400081515151500161617181804160106191800901999921999990099919990199991909999990199999009093909999099 -080801090400080809091004111111041200021314151600171814031600181814050600999999939099090099190999909199909111990992990999999990999099 -080809010500080409101100021213131400151606131400151717171404150304181400909999993099019999190911909100999999999099999999099909929099 -080808080400010910100500110912121200110913020600110913141504041617031800999099090993990999999901999999109990999991999991099091900929 -040503080800091004110800091213140200091513161600091517161600040117170600992990099999909990901909999999019999999909990119903999999909 -080903101004111212101004021212130500141415161600171717180100061920202004129901999999999019909999909190099911999991999903990909909990 -080805010400091010101000020411111200130614111500131616161600130304171700999999003091999919990909909199909900999999099999999090929999 -080605010400080909101100080909111100121314021500121614171700120304171704999999003099901999999909999909109091999999099199992999999090 -080909011000080909111000080512110400131312111404131315160200061718030400099999993999900999090909999999999909109999199911990190909299 -040805010400040909090900101011121300100614021300151514161300150317161300099999003099999909901990099990999909199991999099999999992199 -080801090900101010090600111111111200131402151604041715151600051803041600999990939999999991900999909091909901900099999999990209909999 -080604010500080209101100121213101000121214151604031718151600171704151600999999003099190901199999199990999990002909999099999099999999 -080409090300080209091000081112120400081305141400151516141404150116170600909999999299191991999919909999099109999199999099093909999009 -050103080400090904101100090912101100131415021100041416161700061416161700992990391099909999999991999001199991090999999090999999909999 -080803091004080811121300051415120200161417180600161417192004161401191904992109999199099999091909019999199999999991090019099390999990 -030809090900080810061100021210101100041313131404151616171800041616010500299999999099909919999919999919009099909991090900909930999999 -040308040900021010110900121212110900131314150900131316170500060104171700929990910991909919999999999919999990099909999000903099999999 -080104090900081010090904111010060200120313131304120514151600171717181900999999309999919009991909099099919929909990099009999990999009 -080309090600081010090400080411021200081314141200151614141200150105041200929099999999999999010990999990199099999099990190993009999999 -080909090300080206050400101111111100040412131400151512121400151501041600999299109990999991900909999091999909099990999099999390999909 -060104080800090910110200090910111200041310041200141410041200140515040300999990309099191999991999199909999099099999999009999092990099 -080909010400080909101000080504101000081112021300031114151600061414041600999999993099909999099909999999919011199999092900999909909999 -050608040300091008111204131008111400011015151400161017150200041818181800990990099299999009991900099999999319999909190991909099999999 -040808080800010910110400120913131300120914030400151504160600150216160500099999990093009999099909999999909909999102999990991999991909 -080109050600081010101000111204131300141402041300141415151500041616040300990999309090999991909910999199999910999919999999900902999999 -080109050600081010101000111204131300141402041300141415151500041616040300990999909090999990909900999099999900999909999999900900999999 -060104080400091010111100121010130500121415161600120217161604181817170300990090390990999999909919009909999900999999991199090999999929 -040809100300111110101204131102141504131616160500171718181800171701061900009999909299099099991991110919999099099199999199999390999909 -040405080300090909090600101002111100101012110100131414151500041414161500999290001999999999190991999999999911390990999999909999999009 -050809100400111209131404151509160200151517161804191917171800190106031800090999090090990009999990919999919999909091999199993099999929 -050608090400101112121200011313131300141415151600141417021604041817170300990090009990999990099939999919909919999991999919090999909929 -080806030900080810110904120204130900121414140400151516160500150116171800999999902999119091999919909990099999091009999999993990999009 -040808080600091010111100121010110100120213140500120415161700120304161700999990990090919999999999939910099199099900990999999099929909 -080401090904081010090900081011121304081411050200151411161700151406180300099909939990909999199999110999919909090999199991999019999929 -060108080400091011081204091314150500161616160300171718181904171702191900999990309090090091999990009919999999999199299099099999991199 -080603091004081105091004081112090200131415161704181819202000181801202000992909099999999099090990919009919900100991999019999399999999 -080305040400080609101100080212121300141512161300141515161300140417011300299999900099900990990919999919999990999999990910999039990999 -080409101100080409120500081309140300011506141400151502161600041717171700909099990099909990999900999909929399999901999919901199999999 -040804090900011011090400121013141400121013050400121006031500121602151500099999009993090999909900099999009999999999999992991099991199 -050808080804091011111104090212130400031415151600171818151900171818010600099909999091999091909991099291909909999099090990999930999999 -080106090400081011091204081314091204080215151200161617181800160305181800999999309090999091099991000991999919999190999099999099929999 -050404080800090902081000090911111000121311110300121313040600120114151600999990009999911999199991999919929999999999990909993090999009 -080109090400081009090600081011110300081012051300141402151604141417181804999099399999090999999901999991929990999919199011099099999090 -080109090900080810020600111104121200111105131400041515130300041515160400999999311099199990019999999999019999990009299999999909909909 -030404080800091011050800090902121200130614121204131515150100131617181800999992009999099999000991199999999909909901999993999909900099 -080803090904080810110900051210110200131415111600171717181804060401181800992909999999999990991909999900919099190901999919000399999999 -030406080800090909020800041004111200011314110400051414151500161616151500990992099999919990910909009999909311999999990909999099999999 -080609100300081109101200081113101200081415021200161616161704040118050400099999999299999999099991999911099091199199099999003090999099 -040808030900100808110900120413020904121414150600161414171800161601170500999990992990991909999990110991999990090999990900999390999999 -080910100600080810100100111212131304111202131304111415160500041703181800909099099999993999199909190999999991909910999190991909902999 -080609010400081009111100081009111100120213141400151516141400170304040500099999993099999999999900199991999110991999999909919000929999 -080109090900081010101004081111121300141511020400161605170600160318170400999999309990999091999999909099009091999001999990999999992109 -040809101000111112130100041114151500161706151504161703180200161718180500009999900999003999019909999900999099909999199991999290999999 -080809090904011010111100051010111100121314141400120206150400041617180300999909090993999999999909099910999999999190090909991999901129 -080808040400040910111100121212110100021313141400151504140500151503160600999999090099099909099999139991099199991999999090999909992909 -080801090400101011121204101013051200040213141400151613061400170318181800999099030999109099909990999019999990999199991990919099929999 -050804090900061010090900111003121300111104021400011516161704181818181700009999099990999999990999219909919909199091993999091199999909 -080109090600081009091100041012051304141015151300021016041300171717031300999999399090099999990900090999999109091999999009919999999299 -080808090900101002090400100611121300031415150500161415150100161404170400999999909999119999010990909299109909999999990993999909999009 -040804010900101011090900121314141500120514021500120616171500120316041500099999003999009990919909919999999909199991990919999999992909 -040808030400090810101100090210051200131313131400061515161600171515010400992990999099999991990999999010009999999991099909909930909999 -080509031000080909101004080211120400081314140600151516171804151501191900992999099999909091999991009991999919990190099190099309999999 -060808091000110212091000111113091004141404090100031516161700051816160400090999999991199999199999100199999999392900999090990990909999 -080909010400080910101100081210101100080602131104141414151504031605171500099999903099991999999909999909999991109919099999091999929009 -080808060400040910111200030913130400140913130100140902041500140516161500999990900099990999000999999299999999399910991199999099909909 -080909011000060909111000041212111000021204111300141415160400031705161600099990993999909999999999109099909190991999099009991999929099 -080509031000080909111000080206111204081314111200151616111700040116180400092999999999990991999919990990999909991099091900903909999909 -040809090300100205111200131415121200011616171800191916171804191906171804919290199991900919999919099910999399999099999900099999990990 -080104090600080810111100121212120500041302141400041515151400161616170300990999390099009919990999999019099919999919999999900919999929 -040809101004030509091100121314151600171814151600060214151604191914011600009909999099990920909990999199999191090199999199090939999999 -050808040900101111090900101102120300100413131300101415160600040117171700999990090999999999912911199999999099999909991000903099999999 -080808090500061003090900110212121204131415161600011717161600041718180400999999129099999901990910990199999100999199993999999090909999 -080909101000030402041000061112121300141415121600141415171700050401171700199992919999990990190999999009909999999991099019900399999999 -080809090400080809100100111111120400060305131404151616171700151616021700999099999999093999019999099099109999009201999999999919909199 -040808060300090808051000111202131000041414151600171715151600171701041600990990999299999909009909119901999091999999999090999309999999 -080801090904101112130904140215160500141718181800191919190600032020202004999900930991109019099919009910999999999199099999920999999990 -080809100400110909120100111314051500111314141500110402161504060317181500909099990990913999109990999999999999099019999919009919992199 -080201090500101112091304141512091300030612161600171718180400171718180400199091139999900011999991999299999900999990999990999999990909 -040801040900101010100900111205130900111202040900111214151500160614140300099999030999990901909999099999999910999919099999909999909929 -080309090900080804040200101011121304101011121400061511161700181511010500929999999199990909091999990999919999099099199001909930909999 -050408080400091002080300111111121200011314141200151516161600151517060400999090019991192919999999999919099399999009999099999990990099 -050809100300040809110400120802131300121414131300121406151600120104161600099299991999910909199999199909999991999990990099993909999099 -080801050600080809101000111213101000111413150200161617150400160404150300999999930099019990999909099999919909199099999090990099999929 -080808040400091010041100091010121300141402151300141415151300050106160300990999099099999999900999099009999919999919999991903902999099 -040808010900101011090900101005121200021313131400151504161700151503060400099999003999909999019999999999109199991990099909999900992999 -060809030400040809090200100804041100120813141100051513140100151513140400092999999099991909991999999090099009190999999903999999990909 -050808080800090909090300041011111204011314141500131314021600041717170600099999099999999990992900990909919399999991199191909900999999 -050803090904101112090900061312140200151512141604171712141600170118190400092909099990999900991990999999919999109099999119993099999009 -080910110500081204111104081302060300140415151600171718181600170118181600900999099090999099099911099191929099191999999099993999999999 -040808090900100511120400131313131400011504161400151517021400031717061400999990900999909900900999909919199390999991999919999909929999 -080404090904081011090900121213140500121215160200171515181800170106180300999909009999999900009999909990099991190099199999993099999929 -060809101000011112101004130305141400151502161404151517161804191920161800000999999993119099919929099199199911909909999990099099990999 -080802010500080809101100031212131400061212151400161615151400041717041404919999913099990929119999109999099999990999999099909009999990 -080803090900080404090900021011121200131313121200141414141500051604010600929999999999999910009999099109999999999910999990990030909999 -050108080900101008080400111004120200131415151600171403151600171406041600999090399099199999019909919009919999190929999999999909990999 -080808090400020503090900101112121304141112121300151617171300040117180600999091929990999919909999990199999199099109990099903999999009 -040308080400090909080200100405111200131414141400131516160100151516160600929990909099991999991909009099919099999991999093999999999909 -080809011000060411111000121311111004121415041000120516160200120317171700909999903999091909999990990900999099099009199999999991992999 -040806030400090810111200090813111100091413150200161613150400160113170500099999902099909999990909999999919091199099999190993999999009 -050808080300091010111104121213110400121213021400011513161700151506180400999990909299999009099999999999109999199099193111999909990909 -060408080300091008051100121002131100011014141100151016161700040416161700999290099999999909109909999991099399099919990199900999999909 -080409031000080909051000111206021000111314150400111316160400110116160400999299099999909900999909919990199909099991990190993999999909 -040808080500010910111100041212131400021212141400150316160400151516160600099099990993109999199909099999099199991909099999992999999909 -040108090900101008090200101008111204061308141504161617171800160517170300999990399199119999991999090909019099909090199999990992999999 -040108080800091010100200110412061300141415051604171718161600171718180300999990319190999909091990099090919999000909999999999992999999 -080304090400080406101000080211111000121212121300141516160100051516160400290999990099999990099911999991909999099991990993909999990909 -080609100400080209031100121213111100121213140400151513160500151501171804991999092090199991999999099999999919099990999009999300999900 -080309101000080409090200081112131300061414131300151416161600040501041700929999999099091999991900999990999091999919990999900390999909 -020808080300091010101004111204131400051513131400161616161400060117170400199291999999999010999910999019999909099199999999903099999909 -020808080300090909090600101112051304101415161600171704161600170118181804199291999999999919990990090909909900991099999099993909999990 -080910100400080910100100111111121300040214140500031514140400151504160600999099999999093909109999909910909099999199999990929909999009 -050809090600100811090100120204131300141515151500041617181804161603181800919090909999993901009999999019999099990190999199099299999999 -080809031004080809111004121304021400121215160600171718181800171719010500999909992999091000991990919999199991990919099999999030990999 -080801040900101111120900131111140900020405151600171718031600171718061604999999030991909919909999909190099999091099999129999999999900 -030804040400090810111200090810061300090814141300021514140100151505160400999992900099900999999999999990099999091099999193919909990909 -080808010500040909101000110909101200130614151200131604021200031616170400999999903099909909991909999009099990999909999991999919929109 -080808030500020404090900101112040900131313141400151616141400150116040600992991999099999910099909999190009999999199990909993990999099 -080808090900101005090100111111110400021213141400151216141400030617040400990999999999903909919999999190009199999909991999920090999099 -030805091000111204091000021306141000131314141004041516171700181801171700209999199991090919999910999999999919909919090009990399999999 -080109090400081010041100061010041100121213021100121214141400041505031600999099309990909999999909999919099911099991999999900991990929 -080503090400081010091104081002091200061313121200041313141500161718011500099999929099999099990901999091099991999999199991909039900999 -080808080904061010110400120310131304141414131300150216160100171716160500999000900099999999909929990199999999991990991993991999991909 -060108090900101108020900121208130300121208141504161617041500051617041800999990391990919991902991999999099999000900999999909990999909 -040408040900100308090900100511040200101212041300011212131300061415151500909090999999219999901990999990919090999999993919990999900999 -080808090900060510090900111213130100021414131500161714181504030419191904999990009999909999909911939199999199099190991999020909999990 -080903101004080911101000121314150400120216161704121816161700051906011700929909999999909901099999909910099199909999991190990039909999 -080809090900021010100300111212040400111213141500111617050600110117171804999990909991992919909999999999909900099099991009993990999900 -030808080400060409021000111109090500111112121300140412120100140415161600299999991099990900919999999991909909090999999093999099990099 -080805090900080810091104120210031300121210140400151515161600060104161600909999999999900009990911999999209991999190999999903099999999 -080806010900041010110900051010120900131414021500031414151500041616161604999999003990991999999909019999199191992990999999999990909990 -080909010400080909101104120502111100121314151500121614150600120314170400099999993099901099999990199991909019999199099999992909999909 -080909011000081109101000041112041300041102140600151504141600151505140300099999993999119909900991999991909091999099999901999992999099 -080809101100080802050300061213141404151213161600151213161700151204010400991199919299909990199909990999099001999999099999999930990999 -080304060900080810051100120213141404121515141404161617180100161619191900299099909099990991090999990910999999900910999013999909999999 -040806090300051011091204131314151200131314021200161614171204161601181800099299009999009009919999999999199999199099999011099390999999 -080504010600090410101100121212101100131314151100161602171704161618031700099990903099090909099999999999199901999919999109099999991299 -080808080600090410040300110212121200111113141400151313141400150104160500999090999999909900092911999999999999990199999909993009999909 -080805090300080810091104041202111100131314150400011617171700181818180600999999909299909090099909199901999991099091993199999909999909 -050808090300100808090904111102120400131314141400011315160600171717181904999290999999999000919990199991909999999919993909991100999900 -060805090300101112090904131102141400131104151500011116151500171717170400909990099299199009119999199999999090999999993009999090999999 -040401080800091011080400121011131300121014130500121002040300120615151500999990039990009999990909199999909991999919999909990192999999 -040805090300060809090400041002111200131304111200141415111200141401041200099299909990099999190901909919999999999109999109999399999909 -080301090900081011090900040211040400121211130600141513130500041616161600299999939991909991990909999919099919099909990999900090999999 -080109101100080909121300141415121304141416051304021703181904202020200600999099390090909991999990990990999990901999991990091200999999 -080909011004080909101004110212121300051415121300161417181300031404190600099909993999919001099999909010999999999909991909929909990909 -030808050900100408020900111111121200041313121200141515151500040604010400299999990990911909991999999090999990999991990999900030999999 -080808090500011010090900061010111104121314110200120415161704181818190300990999999093919999919909990909919009999009199991099019999929 -080803090900041006111100121302111100141414140400151516171700150105041700992999091990099990999909199091999999091999999009993009999999 -080804010600080909091004111111121300141402151500141617170400051817170300999999903099999001900999909991999901999991099099990999909929 -080109101104081212101104081212100400130214140600031514161600171805161600990009309991999099999999909190999199099190999999921999910999 -080903100400081112100600081302101404151316101400151317171800051301170400929099199999199999190999990091999919099990990190909390999999 -080801050900101011090900101012121200130414141400151616170200060316040400999099039999019999919999999099199909990999199911902900999999 -050809090600041009090200101011121304011411121500161617031800161617170400009999999090991999191991090919919399999009199992999990999999 -040809090900101006110300101012111300051414111504161414111704160118180200099999090999999999092990999909919099909999190999093101999919 -080109101100080812060500131415151604170415151600170218181804191919190300990099309099009910999990990199999099999999091099091999999929 -080809061000080811121000011305021404151516171400151516171400180404170300990999909999110991019939910909099909999999999999909992909099 -080309061000081109121300080405021304141415151300141615151300171601180400999099299099119999919909010099999999999999999091909309909909 -080910031100061202111104011213141500161213041500041213170500181818171700019290119999919099990930099999099099990999999900990999999999 -080909090600080403100200081104051200081113121200141115161700041101161700999999921099991990991999999990099009999901990910909399999999 -050108091004111111110612131314141412151516171812150219192012212121190304990000309099999919909999999919999990099109099199090999099929 -040808080804050906101112130214101115131616101117130316181819130404011819099999999000999990099011999991990999099990902919999039909990 -060105080909101004080909101002081112131415111116141417180316190404202020990090399999099999999091099091990991990990299099909009909999 -080809091000080809101000111213021404051516171400011819171404061804170300999999999999099990909901110010099999999109993999099092909999 -080809100300081109090500061202131300141516161604141718191904142001191904999299991990990990199909999901909919909199999109090399909990 -060809031000021112121000131312120400131314141404151516171704150118170500912990199991990919999999909990999999901909999099093099999009 -040808080600010910101104090910101200041314141200151614140500021717170300099999909093090099999999909910999099999199991990919999919929 -080801090904101010101104121212131400151516171800150219190400050619190300999909039099999099190999009991999910099199099199900999999929 -080809101000080809090600011111111100121213140300121213051504160402171804999999990099999990099939999919099919999990299999009191909110 -080808080600090909090100101004111204051314151600171718021904031818191900999099909999993990019999910999019000999099199911099999929999 -080809100500110312121204110413130600141513131600021718191904171701191900990090909992999099099999909109999919091119091999099399999999 -080909100400080211031200081306121200141404151500141416151500171701040500991999192099099991099999999019909999999909999109990300999999 -080809090300080210111204131314140500151514141600151517180600040119191904999999909291111019999999909199999909099909099909903909999990 -080801040900080810110904051213130900141213131500141216161700040216030600999999930999109001099999909999999099099999099999901920991999 -050104080800091010080600111212120200131414041500161614171500161604031500990990399999909901990999919009019099990999999991999029999999 -080803090900081010090904021112120400131105141504131116170100131118190600929999999999999019009919999999009999009900990113999099999009 -040401080800091010111200131010111204141502111200151516061700031616051800999990039090910909999999990099999091999910099999999990929909 -030608090500101112091300140402091304141415161300171818191900171801191904900092999991199999199909190999199901099919999909999399909990 -040808080800030910101000041112020500131314150400161714151500161614010600099999999092199999919909109901999901099099999999990930999999 -080905011004080911121000020913131004141516131700181903202004181806202000999909903990110999999919900199999119099029099999090999990999 -080409010600080810111100041205111100130214151500130314151500000000000000909999903099119901099999999919099199999999992909999999999999 -040802090900040810100300010804100600040811121200051313121200000000000000091999919290199999099939909999999000999099990999999999999999 -040802090900100811110300121211110400121213141400060105041400000000000000991990919299999900999991909999099909990300999999999999999999 -030608090900100211091200101013141200011516141200041517171804041517170500909992909999199991109999999991999310099909990990099990909999 -050604040800091011120800131313021400031515151400161617181404161617011400999990000990909990900999119299099999999099999901099939999999 -030809101000111104021200111113141204151617041200151617181200151606010500211999991999909999919990910990999999999990999001999930900999 -030408080904101111080904101111120500100213141500011617171700061818181800909902999999990099909999099990909119099910993999991199909999 -050106080800091011080800121211130400141211021500161617181804161617031804990990399990109990999999909099099991190999199099099999999920 -080909101000031102101000041213131300121214141500051614171504061819011504199992199999109999199909999991999999099099990019099039900990 -030808080900041006020904111010121300111105141500161616161700181818010400299999991990901099991999099999019999190901099999999030999999 -040801090900101010101100121313021100121313141100121506161700040503160400099999030999991999099999919999199099999991990900900990999299 -080104090400101010090900111112120400111105021300041403151300061414041300999990309099909990190999999999199990199099990921999999909099 -080801030500080809101004111111101000121314150200161317181904160620191904999999932099099099199999999901919091190909999900099099990990 -030808090200061008111104121213111100121214141404151617171700151505010400291199999190999090999990999990919999909091999999990030999999 -060808080300090410020400090911121200131414121200131415160400130501171700999290919999910990919990999090999990999991999910990309999999 -080809091004021109091004121304030500141516160600141716161800140119191900909009999991199019920990999109999099999999091090993099999999 -030809091000050809091000111102061000121113041000121415151600120401150400299999999999199909199999099991999919099199090190999399909909 -060508080300091011111204011314111500041314021600171314181804171314181800999990090290099099991931099999919099199991990919099999999999 -040808090900010808090900101011050200121211111300120414041300060415031600099999999993919990091999099999919909999900999099909091990929 -080809091000051109090400041112120600011112121300141404151500031402150400909099999090999999099909999999909319999901099999929990991199 -080809050300081010101000110602120400111314151504011617181800191919181804990999909290999909199999909901099900909919993999991199999090 -040809101100050209101100031206100400131212100400141415151600141415010400009999999990110991090999999299999199099991999990999930990999 -080509100600080411110100121211111300121415161300040217161300031717041300900099990999093909999990909991099919990199999199999909929999 -080904100500080909110100081211111300081214141400040315021604171717170600909099990990993999099990919999919999999991099299009110999999 -080809090400011009090600111112020500111113141500161617031804161919191804919099199993990990919990909990199999199909199092099999999900 -080409101000111209130400121213130600141415160200141404171700050103171700099990990990090999099999999099909911199999199099903999999299 -080808060400091011121300030502141304011516171700181515171700181919191904990999909091190929109999090901999399999919990909990999999990 -080904040400060910021100051213141100011215031100161215171100161615171700099990900099091990919901199999999309299999990909999999999999 -050801030900101010090904111212021304141215151604171718181900171718180600099299039999999001919999100090909999900909099999999990999999 -050108090900100808090400030611111100121314150400041302161600171717161600999990399990999990100999999291999190099919999109909099999999 -040809100500111106121200111103120200131313131404041515151600171701181800000099990999909999991999299909919999909099199991900390999999 -080904101000080911061204080913031200080914051500161617151504160118190200909999999099909099099999929990919900990099999199093191999119 -080806010400080910111200131313111400051515111400040216111400031616041700999999903090000999099999909099999991999199990199999990929909 -080309090904080810100600110210101200131414141404131515161704181920010500299909990999999919990911999991909999909901999990009030900999 -080409031000081112121000081312120400141402151500161616161500170501060400992999019999990990999999999001909919991999999990909300909999 -080105090900081010041100081010121100081312120400131306141504021617180300999999309091909999999999909999999909991999099990019009911129 -080909031000080802111000041212131004141212131000151617130500040117180600999299909999911990109999990099999999990109090999903909999909 -050304080904101112131400150212131300161612171804161617171800061919011800990000299091999919990911999999909909009919999999999039909999 -080801090900080810090500111112131304111104140600151616020400031617171700999999939099009999199990190999109909999991991919929090999999 -080809101104080806111104121304140300121315021600121317181800120117051800990909900999999090912999999990199090199999199119993909999999 -080905100600081111100400081111100100041213101400031515141404161515021700099099009999990999999999039999999000199999999999029991919119 -060805010400090910111200090913131400021515131604171717031804191919191800099999003099110999090999999919909199901999099929009999999999 -050808030904020808090900101111111200131314121200041515151500061601170400992900999991909910999999999199999990999109990999990309909909 -080806010400080809101100121313141400121515151400121616170200040316051804999999903099990900019999099999099999999999199911909990992900 -080809090900101010100100111112120400131114021500161717051804061717031904999999090999993990199999909991999091190099199909009991999920 -080309101000080609101000080211051200041311111400151516171700151504011704299999999999909990990911999999009099999091099009999039999990 -040809010400061011111100121213141400121215021404161616171700050318181700009999903090999990991990099999999991109910999999909199992999 -040801090900101010090900111111041200130614150400021614151500161617030500099999039999909991990999099190909090991999991999999990991299 -080909090900080404101000081104121000031302141400151516141400051717010600999999999099909990999909099909009901992919999199999030909999 -080801090400101010111100120406111100051313130200141415161700141515040300999099030999919909099909999099919999199901999991999902909999 -080809091000080809110400011212131300141414040500151506161704151502180300999099990099099990909939999919099999999109099991099912991199 -030508090400101004090400111202091300111406091500161414171700161601171700900092999999099991990991199999909990090991999919990399999999 -030808090400100408090400101102051200061314141200041514141200151501161200299099999999909990190901099019999919999099999999909309999909 -080504090900101102090300041106121200131114121200131314041500040114041500090990999290119999009999999099999909999190099999903999999099 -080301090900080410111204080213131400081513131600171518181600050418061600299999939090910099919911909909909999990909999999900999999099 -030808010900100811120904101111130500100214150400161606171804161619191900999992903999910099909999909919099190099000999990099990999999 -040808080900031002110900061010120900130414150900131414161704131818010500099999990992919999119909999999199900999991090990090930999999 -080809101000080611120400131313130500030402141400151516141400151717010400900999909999900990099999999201909991999999999009990930999999 -080809090900080810110300120210130500141515161604171518161604060119191904999999909999912990999911909199099990901999991099003099999990 -080801091000080811091000121204091300060214091504031617171700161604051800999999939999019999090999999009909911009199999099929990990909 -080809011000080809091000061112131000140204151500161703151504161705180400999999993999190901909999099910909199991999991299099900999099 -080910030500021111121300141504120600141617121804141617171904141601191900112991999099990910999909099999909990909999091190099399999999 -040809101104121212051100011314141400131315160300171706021800171704181800900000099999999990909931999999199990990901299999999919999099 -080809090400080805041000111213141400111202141400011215041600171717060300909999999099999909000991999991999091999999193009990992999099 -080808090900100311090900101002120400040405120100131406120400131414120400999999909992919999119991909900999999390999999900999999909009 -060108091000111108031204131414140200151616171700151616171700150404180500999190392199999001091999919009999990999999999999990009999909 -080104091000081112091000081304091000081302061400051515160400031515171700990999399991009999999919909990909919090919999900999999929099 -080801040400040909091000111112121300140212120500141406151500040304151500999999030099990909910990999999909119999900999999902999999099 -030809100500111204020400111213131400111215151400161717151404061717011400211099991999900999919909919999999909199909990999009939999999 -050808080800010910101104090912101100131314021100150616171704040318171700099999099993090099999991999901999991990991999019009199992999 -080309060500081009111200081309141404021515161600041515160100171717170400999999290099909991990919990190099199999999990913999909999909 -040808090904060810110300121314151604171302181600171318181600170119051600099909990999909900092909110991999991999999990199993099999099 -080909010500060909101000111112121200111304020400141515160300041515161600099990993099919999199990999909109909990991990999909992999999 -020809100300111205131304141215161304170615161604181915202000180115202000111291999999099019999909900199999099901990991009993999999999 -050809100400110809090300040812121200131302040400131314141500060114041500990090999990992999199990999091999919999990099090903909999999 -060809011000111212101000111212131304140415131300050316021704181818191900009999903990909999919999990099999900990999199911092190999999 -050809101004080809100600111209130100111415040400110216161600111717180300009909999999990999909991139919099009999109099999991999999129 -060104040400080809091000111109091000111112131000140215160500141717170300999990300099099919999999999999999990091900991990991099999929 -060808080804091010111100041010111104031213141400150216170500151501171700999900909990909909999999990911099999992119999909991390999999 -060108090400100808020400111112121200111113141504161313170300160518181800991090391990999990910999999999199990109990290999990909999999 -080306091000080811091004050212091300140415091300161616171300181819011304299099909999099091999901999991999090990919999910999039990990 -080409031000081109091000081212021000131412151500131617151500050104060400902999999990999990919999199919909099999199999009903000999999 -050809010400101010101100061213141400121215161600171717021604031818180400009999903099990909019999999990919909999099999991099910929999 -080804090900011010090900111110040600111105040400120213131300041415150300999999009993909991900999999990999999999190090099901999991929 -080801090500041010110400121210131404121215151500161617060300160218181800999099030990999999900991090990909999999109999909991992991999 -060808080904100511110904121311140900150316141700181819190200181801192004999900909999999000999900909099999921190999199099999391999910 -080804030900080806040900101111120900131411120200141415121600040117170500909299999999990909099999999099919990190999999110903090999999 -080910010600080910101104081213141400151617021404151819202004150305202000999999993099090099919900999990999001109910999199092099999999 -020808080804091011120100090611121200090313141500161617181500160519041504199901991999093990999999099990099299099900999099999009990990 -080809010400080809101104121213140400120213150500161717170300181818180600999999993099110091909999909919099909099199990992909999999909 -080910110300080204051200131415151204011415151604171418181900171718180600911299199991090919999919900999999309009999090099999990999999 -080805091004080802111000121314151004031314141600171718191604171706011600990909990999190919109990990299099999999091999900099039999999 -080808090500101009091104100312021100130404141500161616161700181818010600990999999099999099119992999099109990190099199991999030999999 -080909090904081010110100081010121204030502121204131415160600171718191900999909990990913999999999190909999991902919991100999009990999 -080909030400081002111100081212111100050412130400141414140600151501160400992999199099119999999909999999199999090001999990990309999909 -040104050800091010110800121210040800121213140800150613141400021616160300999990300999909901999999099990999999091099999909919999919929 -030809040400080809101100021209101000131313130600141415151600141401040500299999990099990991999919999190009999991999999190999300999999 -080509100300081109101200080409060200081309141504161617141804161601141800999299099990991999991990909999919009109909999010099399999999 -060808050900100808090900021104121304141515151500161617170100160304181800999990990990909909999919000119909999991919999993999009929999 -080808010400091011121200090413120400091313141400030402150500161616160600999999903099099990090999199999099099999910999090929199999909 -080801090900051010101004041112131304141516130200171818031900061818191900999999030990999099199900190900919099990909199999909929999999 -020804010400091010101100090506121300091412121300031415151300041617151300109991193099999990000999909999999999992999999090999099900999 -040809040400101112121300101111120100141402151500161717151500031717050600009999900090990999199999939991099919991909999999929900999999 -080910031104021212051100131212061100141415161600141415151704181801190400112901999999990919999919909991909999999999099090090309999909 -080801090900040810100900041110100400121102131400121115040600120516160300999999930990099999990990999099199091099919099909990199999929 -040808030900050808100900111212020900130614140400131516171700130401171700099299999999909909909999119091999999099091990019990399999999 -080808060910031102120905131114040904131115160904131718161619131818012020999002919909909999109999990991999991099099900909090930999999 -040809041003110809101006040809020412050813140412011516141412171718181818990920999990999999919009990990199099099009993119090999990999 -030808090910110808020410121212131410151516160406171516181919050420011919999992990991910999919999100091909999999991900990909039990999 -080909100400080811100500011212121200041313060200141313041500041603151500990099909999999990090939999990919990990999190909990999909299 -080805090900100811120100101314151604100417151600181902151600061919031604990999990999013999199900000991999909999919990199909999999290 -080809031000021111111004121314141000151516171004011518191900062005191904912991999990999019999919999910999999009900993009990999909090 -080802050900100811041200031311121200061311141400041304150100041616161600919099919091909929999999199999199099999991990903990909909999 -080509101000111209101004031302141500161616141504171718140600171701190400099990999990099090909990109291999999909999999010999309999909 -080109060400081011121204081314141204151314050200151616031700151616181900990999309090119099099909990099919999099999190999999921999919 -080808090400030602090900041011121200131313121200051415161600171701160400999092919999099999109909999901999999990190999109990390999999 -040104080800090910080800110910100500110212131300141515161700061515030400999990309999009919990999999999099119990919099919909920999999 -040809090900100804110500120811110100120413140300120413151600120602151500999990990990090999999900939999199901999999290999999191909199 -080105090400081010111200081013131200141513130600140216171804140416160300999099300990999999909999909919999109999999091100090999999929 -080809100500010809110400121213131300121214021500161718041504061818031500990099999993000991999990999999999911190090999099009999999929 -040809011000110812131004110814141000151514141000050216170400061816160300909990903999910099199999999099999919999199990190990909909929 -080808010400040909090900041011111200061311111200050214151600031414161600999990903099999999190909999909999019999190990190999999929999 -030809051000080811041000061202131000041212131400151616131400041616010400290999909999109909199991909999999099999919990910909930999999 -040803040500091010111100091010121100130204141500131614141500130601041500099999020099999999999999909019099199099909991199990399999909 -040108090906101111090912131114140512151614020412151717181904151717041903990900309999999009199909909909999091099091999991099999999092 -080808060909100411110909121311111404121205021415011617181415191920211403999990990999990900999990999999090990199091993199099119990192 -060408091010111111091004041212091314031212151516170218151504171705011919900990999999999099090909900999990991902199909099991030999999 -030808080200090910101104090912121300041412120400151617171800150617010500299199999199999099901999919909999099099091990090999930990999 -080809091000030809091000061105121004021312121404151616161600171701180400999999999992999991909990990019909199901990099999911309999909 -040608080300091008081100041202131100141513131100151516161600171701051804999290099990999990199991909019999009999999999199990390999900 -080801090900040810100400111111110400020612131300141415131300031405040400999999930090199991999999909190099099991909999999999900920999 -060808090900101008050904101011031200131313041200011415151200041617180200990990990999999099099990929990999990999909993199990191909119 -060809090300050210041100121213141400151213141400151613171704180401171700099299019999190901990999999999999999999190990109009399909999 -080809090500031006091100121314111100121514161604120214161600171804010400909099099999099920999999099909999991909099991199909930900999 -080404010900081011090900121314151504121306151500121305160200120317171800999999009990909990919900090999999909999999099900999991992919 -050106080400091011121200091011131200091411151504090411151500021616160300999090300999909999999910099999099099909099999999919999919929 -040108090900101010100900111112120600110205131300141516160300170416160400990990309999999919090999999910099999990199999192909999909909 -060108080500091008111100121314151600121714040200181814191904181803191904999090390990099991999991119909919090990999199999099999999290 -050108090900101008091100061002040300121314151504121316151500121317180400999990399999911909192999099911999019909999999009999099999009 -080901100600080911121204080913141204080915140200161704181900051718180300999099930990009099199999990991999991190009199991909999999929 -080910111100081210110100021310141504160617181504161920201504160320051500099999099999013999909911900199099990909009999099099999929909 -040808080800091003111100090212121204131314140600131314041500050116171800999990099990929999919911990199999909999990099999903090999009 -060808010904100808110900101213140900040215160900171715161800170315050400999900993990910991009999999910099099999199999990999900929999 -080808090300101011090904101012040200131312141400151617141400050401061800999299909999909099991990999999019990990999990019900390999909 -080910051100121212121100131313041100021403151504141416150100041706181800000990999999990909909999999192999999901999999113900909990999 -030808010904100608110900101012131300040214131304151516171700051819171700999902993999090999019999099019999911909990999009999999900099 -030809090400101009090400040602111100121313111100141414150400040501151500299099199999190999199990999091999990990190999999900390999999 -040408080300091008081100091202111100091304141500091616140500060117171700999290099999099999199911099999999009099999091909903099999999 -080910100400080610031104080512131300080212131304141516171700181801171700099999099099929099190999999909999110901990991199990399999999 -080805010600091010101000090911120400131311021400131304151500041604031500999999003099999999190999199909199909199909199999990999900929 -040809090600010809101100120813141404150813041400021616160300171818180500099999999093000999999910090199099999991999991992909999909909 -050804040900010810111200130810110400130806111400131516031700021515171700009099999093090999999919009999999990099999099129919999919999 -080605090300080810111100121213111100121214020400011516171704151518180400990999090299099999099999999990199909999901093099099910991999 -080803090900080204090900101112131400101516051400171818181804171701060400929999999991909991909990099919999019990910099999099300999999 -080803090904080810050904021112131400061516171400181819172000181801172004929909999999909019090911009991999000999919999090999399999990 -040106080800090909080500101111120200041111041300141516161300141716031300999990309999919990910909919099919990999099999991990929909999 -080909061000081112031300081114150200081116171704051616181804041901181800999099909099929999190999119999919001909999990909090399909999 -060108090500101108080400121313140300121313021500120416161704181818171700990090399990190990919909999999129999999991190991009999999999 -040105080900101010110600121313131300120414150200121615150400121603171700999090300099999909109999999990919909199999990990999919999299 -080801090500101109091200131114141504131102161700131818041904131818060300999999039090199909090999900999999911199090199999099992999099 -030808010600091008111100051202111104131414151604131414151700130418151700999992993091909991999901190909909099009999999990999999990099 -050608010400091008111104121208111300140215161300171818161300190318161304909990993090999090990991199910099199991909999999919999929990 -040801091000050809091000110804061200021313141500161313031700181818181704099999939990190999000919999199909191990992099999909999999990 -080109100600080809111200131409151604131414171604130204180500131919190300990999390099990991999919090999099990009900991990991999999929 -040801050600080809101000111109101000111109120200130314140400130404150400099999930099019990999999999999919999190991099299999909909009 -080801090600101111121300100214151600101714041804171714191900030514191904999090930991900999900919099919009999909999099999920999999990 -080509011000111209091004131214141500061214161500171717021504031819201504099990993990091009991999909099999999199091999999099919921190 -080809040400011011111200051011110200131313131404151516171400151506031400909999900093190999999909919909919999909090999909999099999929 -080910110400040603111200041313111200141405111200150216161200151516010400000090099999999999299909999919999990999190999990991930991999 -040809031000110809091000110812021000110812131400151617060400050117170400099299999999999999099999119999999010099199090009903999999909 -030809061000110809121204110813131204110213131400111516171800051920011804999092999099099099099999990999909199099190999910901139991990 -080406090300081010090904081010110200081213141404151617171400050118191900999299009999999099991999119991999019900190999099903099999099 -080804010904061010110900121010110900130514020900151516170300150418171700999909003990901999999909999099999900190901999999999092990999 -040809090400040809101000010811111200130804111400130205030600131515151500099099999990009999099939909999909109999999091099991929999999 -080401090900080810090900111213140400030602140400151515141600171705141600099999939999919990910911999291999901099999999900990999999099 -040808030900100811111200101311111400151516160200151517041804050117170600099299999199999990991999999000919919199999099009003990999999 -080309090400081009091100080512021304041412151500161712150100061712181800929999999090099999910999910909919909990999990903999999900099 -040809011000040409091000111213131000141513131600061517021600031717051600009999093999990909919900999009909999990991999919999909929999 -080809041000080809021000061111121000130411041400131315150300040115150500909099999999991900919999199999919999999010299199903999999909 -080509090300101111121300141502041304161616161300061718191904171701191900099290919999909909109991990019999999090199999109099399999999 -080801090400101112090200101314091500100506091504041616171500181818180300999999039090091999191990199900999999900990999909999902999999 -030808040900100808050904101002111200131313131400011515160600041718161600299099999999990099190990199999109999099991993919999090900999 -060301080804090910080800050910111104121302111400151516171700041819171700999900239999919999919999990019909011999009099999999099900999 -080109090400080809090500101112121300100412141500101604061500021717170300999099399999090910999990909909009999999990990099919999919929 -080909090904081011120100081311121204020511141400151617031800060419181800999909909991113990999999990109099999991999991129909099990099 -080809040300080810051100121202111100011314140400151514140400150406161600900999999299909909099999199901999399099199999190990009999999 -080109090600081009090500111213141500110304161504021718181504171718181500999099399990090991999910009990099999901290999999019999999999 -040308050600091008111100101008111100021213141400151613141700040413011700999990290099999909999999099199099111999999090099909939990999 -080909010500100411121300040614131300021515161700181815161700181803161704099990903099010909199990999991999190091999999999999999992990 -040808010900100808090900101011111100121212020600131415161600040305170400999990993999909999991999999900109999999991990119902909999009 -080309091004080802091004111112131000141414151500160517151500041819010600929909999999919009199990199999109999990909999909900030990999 -080401060400080910101100090910100400051213130200121213131400151503161700999999030099090909990999999009199999199999199999909991999219 -080801090900050810090900041110120400021110131300141106130400141503160400999999939990009999990991099099099199991999099099999909912909 -080801090904101011091200101011131200021411151200041605170400161603180600999900939999990999909991099199999190990190099909999909992909 -080902051000110312041000131314141000041314141000150616171700151616010400110991919992990999199990909099999999999091999909999930909999 -080909011000020909111000120413141004121214141000150316171800060519171804199991993999910919009990990999999999991900992990909099990990 -060808010904050808090900101112131304141414131304150316021700151819201700099909993999909909091900990999999990909999199291999119900199 -030809101104041212021100131212040500131414151600061414171600181818011600211909991990910999900909999991999999099990990919999039999999 -080809091004080309091000111112131000060214131004051516171700041819011700999909999992999919099999199911999019009991990909990039900999 -050801090904100811090900120813131300141406041500141403040200161617181800999900939990099909190999999090919999099999199990909291999199 -040806010400090810101000111111121200040513121400151502141400151516030400999990903090099999109999999091909999999019999199999990991299 -080605030904101111120900131111140900151514140200151516171804191916010400099900902999991909999999999009919999199919999010090930999999 -040808090400100208110100100612110500100313141500161613130400161617171700091099191991993990099999999990909290099999099999999099990999 -050308091000111212091000131212021004141515151000041617181804061917011800921990999999999909919999910090999099999909190009090939909999 -060809101000051112101000131312021404151512161704151518161900040118160300000999999990099999909990910999119911909909199999903992999999 -080808030900020504090900101111121300101111141504161616160600040117171700992991999990909919909999909999909090001999999999903090999999 -080909011004080811101000120513131300121415161704120618020400031919191900999909903999009990919999999999919009109901999010999199929999 -030808090600100211120100101013141400041516141400171518191904171505191904990092990999193991119999199999999000999999090909099099999990 -080106090900081011090900080412130200141515041600141705181804141717031800990999399990109999199909119990019099999909190999099929999999 -040804090900100811090900120813140400050213140100151513140600150313161600999990909999909909900909199909999019399199999990999999929099 -040308080900101102080900101112050900101313140600151313160400040117161600929990999999910999199909099991999999090990990990903099999099 -080804010900081011120900051311110400140215161700140618181704140318181700999999003999990990919909909909199111099099999990099999929999 -050801090400101011091204101313090600021313141404151617141400181803191900099999039099100099090999999199999990901999991199909209999999 -080801090600081010091100041010091100121314041100121202151600040405031600999099039999990999999909099910999990999199999111900099999929 -080309051000080409061000111209021000131314140400131314151500041617011500929099999999999900909990109099199999099999999019999039900999 -060808090300101104091200101113091200101113021200011114151200041605040400999290099999099999999999999999199009199999993111990000909999 -030804040900100808020900100611120900100511120900131314150100131316170400299999900999911999999990099999999999190091999093999009999009 -040108090400101112121300140515131300141615021700181815171704181815030600990090309990199909199909099999999091199099999999099920999999 -050808090600010808101100121313041100121313141100041502140300041617171700090099999993909991909909999999999999190019299919990999900999 -080801090400100811120500101314141400021306151500161604151500161603040400999099930991100999099990999190909999991999999099999900992999 -050809101000010909101000111213140600151213021600171213041600041213031604099999099993909999199900109099199999190990999999909999999920 -080809020400030805101000061111120400131313141500161617181804161601181800911092991999909999919999999090109991099919099099099399999999 -080910011100040412121100131312121400131315151400031602061400161604051700009990903999090999990990999991999999999919999109929090999909 -080801040400080909101100120909131300120414131500020616051500171717031500999999930090900999909919999900999999091909990909919999999299 -060308090400101010111200131314021200131515151500161617181904161605011904921090991999999999019999019999919099999991999000099039999990 -080109101000081109041004081212131400151212130300161718130400160502130600999999399999009091990909909999999099290199999190999199990109 -030808080200090610101104091210101304141414150100161617180500161919191904299199999199999090991999910009199990399990999000999909999990 -080809030400041011111100060212131300141512130400141612171700140112051700912999199090999991099901999999999099999090099109993999999099 -080809090600080809100100111112121200131302141504131617140400051804140300909099991999993990199999999991999991009009099099900999990929 -040501080800091011110800121311110400121313140200121516161600061503170400999990030990099999999999909990199999199099190999999209909909 -030808060400050808090904101102090900101112131400101115161604101701181800290999999090999099199999999991909919099990999109090309909999 -050809011000111111111004121314151500061414160200171718181800171703041904009999903999990090199909199099199999199099199999999290999900 -080104090500081010111200131014041200131514061200130216041200131616170300999099300990900999999910909999999199099199999999991909999129 -080808010500040910111100090910111200020610131400151616171804031616041800999999903099119909990999999199009099991990091999099909929999 -080509100400111209130600111209141404011215141400161604170200160318171700090090990999990999999909990990999311999009199991999999992199 -080909010500081010111100081012111100080413020600041413151600041713031600999999903090909999999999199901999991099991990991990999900929 -030809041004110609121000111102121000131414120500151414121600171701041800219909090999999999199999109099999999990999090910990390999909 -080804010900081011090900031211131400051211151500061202151500041617170400909999993990019999909929909999909099999919990199990090909999 -030809101000110809021000040612131300141412131300151412160400040112170500999992999991119999910990999099999991990999999100903999999009 -040809031000110409091000111213021000141415151000141416161700040616010500009999992999999990199999119009999999199991999090909930990999 -050308090900101112090200101104131300101415131300161617171704161604010600929990919999911999991999099909999900990999199099099030999999 -080804030900080810090900111205021300111415041300161617171700161604010600999299909999099990919999919900999000999909199099999930990999 -050108090900101108090900111108060400041213131300121204020400031415150400990990399999199909999999099901909099999901999990999919921909 -080509100300080211121200131414120100130614040400131515151500130416160400991299019991199919999919139999099999999099090999990090999999 -060102080300091011080800121211130400120411130400051415131600171717171600991990319299999901990991999999999900099909990090999099999999 -080409090600081010111100081010111100041213130400141213151600050102170300999999009099999999999909099009999919099999990991903112999199 -080808090400031011121204101011131300021411131304061511160100171718190500999099900992909099999999999199999119909090990913990099999009 -030809090600050410091100121202131404121213131500011616161500171717180400219999919099999900190999190999909999999091993990990909999909 -080109090400081010101000081104121204131405121200021516161700181818030600999999390091999999009909990109999909991099999090919990999299 -080306050900081011090900080412121300020412121300141415161300141404011300299099909990099999990990999199999909991909999110999039999999 -080805040900080810110900040610120900021314141500161614141500031704011500909999990999099999909999909000099119091999999999991039929999 -080109101004081109121200081309120300080214141500161616161704180519060400990909399991999999999910099919929919199099999990009090909099 -040108080600091008111200131304141500131316140500170216141804171703141800999990399091000919900999099999909909999199991990099999992999 -080104040500080909101100080912121100130412120400131415020600130415150300999999300090900999199999999009999999099991990910990999999929 -080109090900081011120500081304121200081314140200151614140600040417170300999999309090119990999990999999919999199099090999900919999929 -080903100400080911111204080902131300140915161300141718191900050106191904992999991099990099199901999999099910999910990199903099999990 -080304090900081011091200080604021200131415160500131315171700040115171700999999209099119999919999099009199909099991999119903999999999 -080808090400101111090300101104091200131415090600131616020500130116171804990099999999999999992909019909999909099901990999993910999100 -050108080800091010101100121304111100061414040200151414161600171704160300999990309999999900919900999009919999099999190999909099999929 -020809100300111213141504161213131704011218171705191920202004191921210600111291999999990019900919990990999309909909999999099099990909 -080809010600080809101100121213141500031213041504160213171504181813190500999999993099000999919990109999999999902990999190011909999909 -050108080800091011121200131314151604130217161604181819191904181820030600999990309990109999199991090910099999909109999999099990991299 -080109090900081010101000041104121204061314121200151502051600150317171800999999309990999991990900990919999019999919099109999990929909 -080808090500101009090100110204121200131415121204161417041800031406181800999099119999993991909910999109999990901900099999929099999999 -080105040400080910111100090912111100131302141500161617060400161617170300999999300090119999999999199901099999099010099999999999999929 -040108080200091011111200101011061304141414041500161617050300161618181800999190319190199999991999900990919999099909299009999999990999 -080808090900011006090904051112131300141512121300021616161704181919030400990999009993999091999990999019099199991099099999019990919299 -040808090400100808021100121206131100011214131100151414050300041616161600990090999990919991919999919990999399999099290909900999999999 -080808010400090909091000111213141504111216151500171204180200050318180600999990993099991999901900090990999999990909199991909990992999 -080406010500080910111200090904111200131313111200141516161200040403160200999999003090009999099999919909999999990099999999900291999919 -080808090900100411090900101213140200151516171800151516051804061901031804999999909999009999099900919990119991999990999099090399909920 -050408091000111202131000141204151000141215151600140317181604141717010600900990990999119909919909909990999999999291999900099930999999 -040809011000080811101000121212121300040214041300151614061300051614030400009999903999999999019999909919099019999099990909909990999299 -080909011000080909111004041205111000121204111000131415021600031414061700099999993999901090099999999099999990999999191111929990999909 -080803090900081004090900021011121200061111121200051314151600041704011600929999999999099919990919999919999091999991090009990039909999 -080109090900080810110400121313141400041313150200161604150600160503151700999999309999000991999909199099919999199009999999990990999209 -040108030900101108080904101202130904101414061500051414041500000000000000999990392990999091199999000911909990999999990909999999999999 -080909090900041004111100011010041200131314141200050614021200031516171200099990009099999999990939099919999919990091999999999919921199 -040808080800020910100300110612120400111312121400111304150500110104151500999990099991192919999909909999999909099990091909993999999099 -080809100400111111120600131414150100131616170300131616181804051902181804990090909999990909909909039999199991999999299999099199900190 -080809091000030409091000110212131000111114151600171814151504040514010600909999999999099929099991199919109999099999990009000930999999 -080808010400050409101000111212101000111312020600111314151600110317041600999999903099909900099909999999199099099991999910999109992999 -080801090500080810101000061111120400131102141500130316041700131816161704999099930999099999190909099999099019099910099999992999991990 -080808060900011011111204041311110400141415150300161615021700161605181800999099909093090091999909909919999919999999299019999011999999 -080605090900101112120400011312120200141415151604141404151600171717031600099990900990199991990939919909919909909909999999909999999929 -080909100400080904110300120213141500121605041500121617171500120117170600999099990999992900019911109999099109999999999099993990999999 -080801090500081010101000111206131300110402141500111616141700031616040400999099030999999990019909999999109901999919099999999900929999 -080506090300081011091204081302091200081415161204171718191904171701191900999299009999099090999991199919999019009910999009099399999999 -080910110400120310131300020410141300151610141700151518141700050618011704190091299999999919999999999109909900999999999110900939999990 -040808030900100811110900120211110600131314151600041717171704181818010500992990999999990901999901999991909991099091999999009030999999 -080901101104080912131104080914150500161414170200181806041900181803191900999009930990009099199999009099999991190990199099999999999299 -040608080800091011121204011314121200151502161704181819191700051803191700999990009990109091199939999991999910009109999999909999992999 -040809010600101010111100051212111100131414021504031414161500171717180400009999903099909999999909099999919191102990999999999009999909 -080806030400080809091004110212131400151516170100151816170400181816170500909999992099999009190991909019099919399999999010999999999909 -080409010600080809101100121309101404150216101700181916101704051919031700909999993099119991990909900019909909990199999999009999999299 -080808090904101112090100051113140600041115161604170318161600171702191900990900999999013909199999009991099099909919992999999199991099 -040808080500010904021000111213061000111213131000111214150300111204151500099999101093991990909990999999999999999900290999999099999999 -040308090400020808101000111212100500111313131400111516171400110401061400920090999991999919999999999909009999099099991109990309999999 -040108080904101108120500131302121400151515121404161617121400160318190600999000399099119909999990109991999999909919999199992099999009 -080501090400100411111100121212131400041502131400161606131700161603131700099090930999099909910999099999999011999109099999999999992999 -030504080800090210080800090911110400041213110100141414141500061617171500990992099999199991100999999999999000399990999990990099909999 -080904010500080410101100081210101100121204041100040213131100141403150600099999003099990999999901999990999999990190999199990919999209 -060808080200090310101100120410101100131414150500161617170100161604170400999190299199999909999990919099199990090991999093999999990909 -080909031000080909101004041112020400111113141500161717181800061717010500999299999990999099019909009999199900199999190909909930999999 -080809010500080809101000110309101000120413140400150216141700061818141704999999993099099999999929099199109901991919991190999099909990 -080809040400080809041000011111121300061112120200141515161700051515160300990999999099099990900939909999999019199099190991909999999929 -080309041000081112041000130204141000131515141400131515160400050116160600929099919990199991909919909990999990999999991990903099999909 -080801050400080910101100090912121300020612120400141414141500031617170400999999030099199999090999909199909909991999999990991090929999 -080910100300080910111104040902111104120913140600121516170100121518190500999299999990999099199901990999099911099901990993999009990909 -060105080800090909080400101004111200101013021200041413151200161604031200999990309999919909910990999999199909199099999991900929990999 -060809090200011009111204131415161704131315161804191920160300191921212105019199190193999090901999090909919999909009299999999099999990 -030808090900100408111100101202111100131313130100141516170400050618181804299999999099999990199991999019099999390909999009900900999990 -050108090900100808090900110612121204131302140400151504161700151518180300999990399991909919999909990190909911990901999991999992990999 -080809010500080610101104121210101300141215161704141819021700141803041700909999903099090099999999919999019000909999999111999909992999 -030806090500080810091100121310091404120215091404121617181800120401181800290999999099999991990990990919999190009909991109990399999999 -050108040400090908101000090908101000111102120600131313121200040414040300999990390099999999999991999901099991090999999999909092990099 -080509100300080809100400061109120200131114141500161614141704161601041800909299999999999990910999019099919009199099999990099390999909 -030809061000080809111100120409111100130209140100151515151604050417161600999092999099999919999990999199099190399191999999009909990099 -080605030900101010090904111212020400131212141500161617181804160119191900099290909999999009919999199099909099099190999009093099999999 -030808080200090910041100120613141400120515140400121616171700041616011700299199999199009999091909999990999909999901090909999939909999 -080809090904080810100100021111121204131111141500160417061800190317170500909909999999093999199919090199999990091900099099919990929999 -040809090904101111110100101012131304050206131300141403151600141417181800099909009999993999919991190919999009999199099990999209991999 -040806090900010808090900101112050400101312021400101312151600101717030400090999999993909990199909099999909991199999199991990920909999 -080808080900011006090900041105020400121113141500161616151500041717170300999999101993999990919999909090199090999901999999990992909999 -050804010900040808090900101112131400100215131600100615131700100304131700099999903990919999100991999919909190999999090999999999929099 -080808010400040909101000110909121200020504121200131414030400151515160600999999903099919909999919099100999999991999091929909999999009 -040305040400080808091000110212121300111114151500011616171700061616171700999990200099990999190911909999999900999199993909999999909999 -040802090300061004111100041012131400041012051400011012151500161616151500011999101290999999999909009999999099999990993009990999999999 -080803050400080804090900021010111200131304061400131315161600171717011600929999990099999919009919909919909999999900099119999039999999 -040501080800020910080804111210131400151610141404171618181900030618181900999990039991909011999991009199999999901999099090929999990999 -080909090900100411121200040604131400031515131400161615131700161602010500099990999099009909909999009909999991992999999990999130991999 -030408090900101111090900121104041300120214141400121516170500061501171700909992909999999919990909909990909119999991999010999399909999 -060401080500090909101000111212101304111402151600111718180400111718180300999090030999919909990909990999109091999019099999999999999929 -040809090900100811111200131411111200151402161204171805161200040106160300999990909999999900999991999091999991900109990991903992999099 -040808080900101111090900101111021200131314041500131314141600040106050300099999990999909999999909119919919909099999199999903002999999 -080109101000081111121200051104121200131304140400131302060300150416161600990999309990909999099909999919099909099990999199909192909999 -080109090904080810111104041213110300061415161700181802161700181805191700999909309999999001099990999919029919990019999911999909999099 -080801090500080810090400110410121300110614151604110217161600111818180300999099939999099900900999909991099090009919999199991999999929 -030809090500041009090400101002061100121314151100161314151100040114171100219099999990990999109991999199999999991999991090903909999099 -060802091000111213131000031414151004160414170100161818191900161805191904011999191991999929919999900909199990399990999909999999909090 -080506030904081011120900101013140900151515150200161718191904162001191904999909002999999909019999019099919999999911199099090399909990 -080808080909040310050909111210131313111406151617111804151519110220210119999099999999999902900999099919909990909199909909091913901199 -080909090300080210100600080410101104081213111100141415161700140105041700999299199991990999999999990900999190999109999000993099999909 -080809091000080809091004061112130200141414151600171717051800041901031804999999999999999090900999119001919990999910199999990399909920 -050803090900101112090900101312140200101312140600101516141704040104141700092999099990999999991999919999999099099909990119003099999909 -080904030500081010111200081010061300141515150200141416161704181816010400009999992099991999991909099909919999199919999090090930999999 -080808040600010910111200130909141500131305161600170204161604171818180300990999099093900999099919009990909999991999991099091999999929 -040804010500090906101000090911111000121213130400121202130300040414141500009999093099909999919990999909109999999919999999900192999919 -060809090400010810091100040810111104121310141400151305141400021617180300099099909993099999999999090019099199991909999999919999911129 -040103080800091006080800091112120200091314121500091314161600041705160400992990399999099991991901919990909999999999090999900990990999 -080104090900081011110900121311110600121404150300120215150500120404161600999999300990099991999919909990999199299199999199990000999999 -040805020900040810100900010810101100121314150300121617181804121606181800090199991990199999991939999990929000999000999999099099999999 -080809090400030802101104051213131100141413131104141516170100061819191900919092919999919099919900999999999999009991990003990099909999 -080104091000081112090600080512091300040212091300141403041500041416151500990099399090109999999999999909999019099190999999999299901099 -050108080400090908080400090910021100121314041100151314031100041314061100999090399999190999019999919000999999090999999992909999999099 -080803091004080805041000021111111000121314141000061516161700181816010400929009990999999919099999909199999199999109099190900930999999 -080409090600080409101000111202101000131415161600130415171600130315010500909999999099099909099900199901919099999999999091999930992999 -080809090300080609091000041112041304011414151300161414150200170518181800909999099299999999091900900990999399999999190911909099909999 -030805091010111213091010021414091504161414091517041819192006181801042020299999109991909919990999999199990199009919090090099399999909 -080309090600080810110200121210131404151610171400051818191400041818011404929999991099091999991990090999099009090999999901999939909990 -080803040900100611121300021415151500161717181800161717181804160501191904929091999099000919099919999010999999999999999909090309999990 -040108090902101108090912101113130412141113130412141106151603140405171804991910399910199999999990909099999999099900929990990900999090 -080809010500080809101100040412131400021515151400160617181404161603181400999999993099000909919990009999199199991900999099099999992999 -080808080900031011120900130614020904151617051800161617181804191917010400999999990992109999199909110099919999090999999009099930990999 -040108090400101108120400101306141500101616141500021717141500050317141500999090390999009991900910999999999990091999991999909999992999 -080109090900081011121200081313061204141315150400020515151604171819031600999999309991009999909909990199999909091999990990019999911299 -060804090300051011091200131411091204151616091200171616180200170118180400090999099290999990999909990090999090990999199991993199999909 -050804090400011010110600121010110200121313041400121303151500041616161600090099090993910999999909919990019999999999199929999990909999 -080808080900101102120900100613140904031513160900151517171800040517010400999999990991199990109999990299099901999991099990909930990999 -040801090900101010090900111111061200020513141200151504141400031504041600099999039999909991900999999190999090991909999999999990920909 -080803040900101111090900021111121200051304061400041516171700151501171700929991990999909919999919999919909099999100099109909399999999 -080803040906080404101104021212111105131212141415161616141415041701181818929909990099999010009999999199090999991099999909990309009999 -050808010910111111111204130414141414021515161717181819201721181803202006099909903009990910909999999199009199999190909199999299099999 -040809090909031011120613141415150513021416160413171716181813171704011904099999099909009029909999990999099199991999099119099030999990 -040801091010110812131410110215151416111715150418111719190406031719192005999090930091109999909019999919900999999999909990999999920900 -080904050110081111111110080212131304081415151316171404150416031406041816009999990399999099190011999900999999901999999090929999990900 -080106091010081112121010131414141516131718021919132020051919132021040403990099399999999901909009990919909911199999990909999090299099 -080405090909100402110306121213131415161213130415161718191915160118192015099990901209019909199999909999909999999019990109993999999900 -080809100104081111121212131111041415040516161417181819160602181803202020990999900309999909901909991000991999999909919099099999199299 -080209100111121313131111140515151515030416041718192020202018191921210618111991991399991919999090999299990909009909999999099099990990 -060802090104041011091213031005091214151516091717151616041717041818181804001999919300199099999029019909990990999990999999999990009999 -080109091004080811031212131306141212131315141605170402141618171704041619999009309099099991929990999999999919990019909910999099099900 -080808090404101111111212061314151212131316161702011816161919202021051903999099090900999909099999009990999999119099913199999009990992 -040308080104091010111213091010021414090415161414090617161818041717161805999990290309990199999109119990999909099999099909900999999990 -080809090909080810101106051213131304141515021616171515181904171701042003999999909099099090999999999000990991190990109999990301999992 -040408080909101105121213101103120214101104061515101116161515171816160104999990090909909999991099290999919999099909999090900993009999 -080801040909080810111209131411111215130216171215130416041215040516030615999999930999090099199911990999999110999090999999909990990299 -080109090600081009110400081213131300081214151504160217151504181818050300999099390991090999999999999990999099901909991119009902999999 -060809101000041111120100131111140400130214141500130516151500130316170400090999009990993999919999009999999119099099999999999900929099 -080801090600081010090400111010091200111302040300111314151600040415150500999099939999999909990909009919999910999919299911900999999909 -040808010400090908101000090906111004021213141400151605141400031617171700099999993099009999919999090999199111991909991999999990929999 -080910100600080811121304040414151300161602151300161717151800031717010500909999099099009099909990109091999909999919999990999930929999 -080804090900101011090100121311040400120611140200121511161600120403160500990999099999013990909909999999909901199999190999990999999209 -030808090900100208090900061104120400111113141500051616161500171717010400299999999990199901909999999990009990990190999990999030999999 -050304080400091010101000090911021200131414141400131516171804131506011800999090200999999999919990919990919999999091990900099039999999 -080910051100080912111100130903140200130915161704131515160400130104180600990999909990909999911999299999919099109999990910993909999009 -050808090900101002090904111012131304031415130600011416171700041819171700099999909999199099109919990291999990999919093199990999900099 -060508090400100408090100111108090400111212121200130214151500161603150400909090999990993909999990009999199999999991991119919999992909 -050108080800090910111100090412121200130614020400151616171700040316171700999990309099199999199909999099199091090919999909909999992999 -080808010904101112130900101014130904060415020900161717181800050319181800999909093999001999099990990999999901190910990999909199992999 -080910011104120613141100120415051600121717021604031718181600191919181600009900903999001999091990909999999991109990992999999999999099 -080809101104121202130300061214131300151516170400151518181800050119191904991100919299199999999990099010999999099900999999903099999990 -080909061004080909111000121314140100151514141600041517020500031717180400999909990990990999009900939099999999090991099919999909929909 -080808080400010910110600120909131300141515151500141404021600050403171700999099009993900999909909999091999999999901999991900991999299 -040801090900040810100900110812120500061312121400150204141400041616160300099999939999990909199909909909999019099199990099901999999929 -080409090300081011121204131302121200131314151600171717161600040105180600999999009299909000999999199991099919091999999999903009999909 -080808080300090210101100091210130400091212140400091516171804061516010500999299199999190999990999199999199999099901990000099930909999 -060808080800020910100100110909101200131314151200131305041200031604041200099999191991993919999999909190999990999990999099920999990909 -080304060900101002041100051212041300141212151300141616161300171717011300299091909099190999190999999099099099999910999990999039999999 -030808080200060904101100121204131400121215151604051718151600171718011600299199999190909990901999999990019909909999990001999939999999 -080906010400081010111100081010121100131402121500041617121500031604120500099999003099919999909999999019909919990919999199999999929009 -040808080900100504111100121302141400061515141400031515161600041717011600999090999099999900009900199991999099999999192999999039909999 -030808060904100408020900101112130900101412131500101612171700040112170500290909999999919990919999999909909009099991999119903990999999 -080809010400080809101000111112121000111105021304041415161300061718031300999999993099909990999990919990199999009091990919999199900299 -040108080300090908081000111112041000110613021004141516171000141616180500999990399299199990199999099901999991100990990099999909999909 -050604080800090909090100041011111100121212120400130204140400131515150300990990090999993999919909999901999999099190999090991999909929 -080801090500080810111104061210111100121210131400151604040200150317171800999099930999019000999999999999919999090990190099999991992919 -080309101104080802120400131313120100141414121500161705121804161906181800291009911099199999099999939990999999090009099999090999990999 -080808090904031005110904040212121300141415161700141415150100181818190600999902199999909091900991999099109909099991999993999009999909 -040108080900101008080904101011120600130204141400151617170300181818170500999090399999099099099999009190099199990199999192909999999909 -080609100300081109101204081314101504081617101804191917050200190120202000999999099299009099091990990909919999900099199199993101999999 -080909100400080909111100011212111100131412060400131502160300130417170500990099999990909990999939999999009019999199999192999119909909 -040106040800090909090800101011051200101311111400151604031400021717171400999990300999990991000999999909909999991099999099919929919999 -080805091000080806091000011103091200131404151500131402151500131617040400990999999999099990990939299919109099999909999919991190991099 -080809090904101112120100041113140400151102161600171118161600051818060300999900009999193909999990009999999011990909999999909992999099 -080804091000010811110400121211131300121206131300021414141400040315051600999099900093099991999999099999999909991999991999909190992909 -080806090900080810091104120213131100141505130300161718181900040118181904999999909999900009099991999019999199291909991090903999999990 -080910110500081212110100081212111300080206111400151516161404041716031404000099999999913999999999909910909999999199999199090999909290 -060803040900101104121200111113121200140213150500141413150100161613150400929090199090999999099999999919099199099999999113999999990909 -080903100500080909110400120602131304121414131300151416160100171816160400929099990990990999109909090991999999990919999993909999900909 -050801090904101011091212101313131212141406150402141416151718041919152003099909039999011990999999999909091999099909919999100091999992 -080401060904101111121300141111121200141505161704141518021700141518180300099000939090990999999909199909199909909991999910999999999929 -060105080904101011120900100413131404031513131400161617021400161819191900999000300999109999199990900999999299999191999119990999990999 -080808010900040410090900111111110400060212131300031412131300151414040500999990903999009999910999999091099919999199999999929990919099 -080809090300041010101100121305141104151516171100151518180200060118181904999999090299999909909900990099099990999909199199903991999910 -030808090900040608090900100402110400121213111400121215151400050415010400299999999999009909199999909001999919099999999190900930999999 -080309101004081111111100080212131304081412120500041516170100151518190600929909910999999991999991990999099099090019999013999999990009 -050401080400091011121200131411121200150616161700151802161700151818031704999090030990019909999990999009199999999999999110999999999290 -080801040900080810090900110512061304021414141500161718181500191903181504999999930999109910090999090190909999991909991999991999992990 -040803040900100808090900101102120600131114140500131114140400041101150400929990990999999999109909909991099999099999990090909309999909 -080909101000080909100100080611041204051302141200041313031200151616161600991999999990993999199990090991999091199909999992900999909999 -040308080600091008080200110412121300110512121300111415151300040415011300999990299099191909991990999999999909999990990091900939999999 -050808010400090808101100041212131100141412041100041515021100031616160600099999993090901909909999099999999909999990990901999910929999 -040106080800090910021100121210130300120510140400150410161600171717161600999990301199199999912990199909999990090999999099909999999099 -040108090904101108121300141115151600141102150500141117181804140619180300999900399090110909919999909991909999999919999999090199999129 -080910010600040511111100031212120400131414151500161602171500161617170400009990903099999990919999999291009999991910999199999990999999 -050809101004031102101000121313141504121304141600171818191600061818011600019909119992999999190909190999909999999901990900909939999999 -080808090300100211090600101012131400151516171704181919171704051919010400999299909999119991990991009901999999909919990919009930999999 -080910111200080306021200081314041200131314041204151514161600051714011600911999291999901999909999999099999909900990199909999939900999 -060508010400090909091000111112131000141515041600141515170200140317170400909990903099991990909999099990019099999999199991999990992999 -080304091000111112051300111112121304021404151300161717171300161818010600290091999099990999999999990199099909991090991990990930999999 -030808080600091011120400021011130500141411151500041611151500161601041700999092099991990999909919909199099990999199990199999390999909 -080909101000080304020600080411121300081405151300161715151300041717011300991999291999900999919990019999999909990099990091999939909999 -040808090900010810090900111202060300110513131300140415161600141718161604090999919993999990199909099901929999990909999999990099990090 -080808060300090910101100121210101304121214021500041616161504171801190500999990990299999990991999990991119909199919999999000309909909 -030809090900101111021204101311141500161718140400161818140100160604140500219999991999991099991909919900999999099099990903990999999009 -050804010900080810110900021212120400131314141504131316140600170318181800009999993999000999919919999199009999009999999909919090929999 -080804010400040809101000111111101200131406151200130216161200030516160400999999903090099999099999009990199199999191999199920999999909 -050809011000111109121004111113141004151515161600171802161604190306202000099999093999999099019990100991099999999919991199019090929999 -080806090500011010090400041010091100121202130400141415161600031404161600990099099993909999990909909919099919099910999199999999929099 -080803091000111212120400020413130500141413131500161717181804061701181800929091990099999919099990999199909999090109999909009399999999 -030808091000051112020400041111131300140615150400161615171700161601171700299099910090919999919999999090199999990099099009999399999999 -080808080300060209091004111213141000111115161004051718181000191901180400999299199999999001099991099991099909000019999999990399999909 -080901101004021111101000120313040400121413151500120613161600051713161600199901139999909919090999999929099190999099999909999999900999 -080910100200050311101204131414141400130415061600131715181904131715011900009190999199219099991999999999019909999999199001099939909999 -030808090400050408091000111202131300110404131300111414151500041414010600290999999099999900190990199909999999999909190909999930909999 -080809091000010809090400111112120300110212120400041313040600051415151600999099999093999991909999929999999119090090999999990090909909 -030809040400100808111200130602110500131314111500161717181500161717011504990992909091990999199990109999999991990919990910999939999990 -080901030600100911121304140911151604171711180200171719192004212119192005099990932099091009991999190099119999199990999990099999990990 -080803090400080804091000021111121200041111120400061313130100051415151500929999999099999919000919999099909990999919990993990999900999 -050408030904021008040900111012120900131412120900011516160600151516161700992900099991199919909999999199999199099190993999999990990909 -080309101000080611121004081313020500081415151500161718181904040118181900929999910990919099919999909990199019999109990999003999999909 -080808090500101010111104121314111104030602151600171819161600171719010400990999990099909099999911990291909991199009999999990930990999 -080909090400080510110100121213131400121213131504030402061600171717171600099099990999003999919990909999909999909919099909920199999999 -050809090300101109021200101004131200041415131200011616130600041616171700099299099999919990919999909900999009999909093919999909909999 -060808090300100804090904101112130200101415151600171717181800040105181800099999999299999090019990019999919009199910999999903099999999 -080906031000111202101004131314141504131316141504171819191500050119191500009290999990919090199991990999999909009109990999903999999999 -080404010900080810090900111210061300110510041300041414021300031414150400999999003999009909991909909909999990999999990991999919929109 -080809010500080809101100121209100400020609100400131415101604031715161600999999993099010999999991909109999999091999991900091999929999 -050804090600030810101000110812120400110812130100140215161600041717161600090999990099999929909999909999999999391001991999991099909199 -080809010400081011121200131006121200141002151600051717151604031717041800909999903099119999999900999099909919090919999999099990929909 -080609101100121314141100051515151504011616161600171704040300170218181800090090909990999900099999990909999399999199999099999902911999 -030808040500090808101000110612101000111313131404021516171800151504011800990992999099999919099999999900099999001911091199999039999999 -080806010904080810110900120213130900121413130900121516161700031504051804999909903999099999019919909919999919999990099099929990990900 -080909091000041112131300040212121300141406150100141416160500030417171700099090999099199991999909909919199990399990999999920900999999 -080910040400021103121200131111121200130614151500131614041500050117171700110991929090999919999999099999999990999099991009903099999999 -050809101100011209131104141509160600141709161600141702180300041704181800090099099993009091909999909919999999999999990119999092909999 -080808090900101011090900011012131400041505131400061617021400031717040400999999099999909999099931199900999099099091990919999900929999 -080109091000081109101000081104120400131414141400021516170300050618181804999999390991099999909990909199999099991999991112900909999990 -060801091000080811110400121211110400121213141500050316021504171717171500099099930099999990999999909990199909090991999919092199999999 -080809011000080809101000050211111100041213141500161704181504031717061500999999993999099999091901999919099990090109990990099909929999 -040809030400061009111200130209051404131315151500161717181800160117181800099999092099919900990991900919909999991990991909993999999999 -040308091004111204131000141212021000141415051000161717171700161818010600921900991999909909919999919990999999999000199999999030909999 -080801090900080810091100121314111104021514161600041514061700031814051904999999939999109910909990990199099199999999090990991990929900 -050809011004111112131004111415161604170218161600191918202000191918030600009909903999019099190991090919999019990999099999999990999299 -080809011000111212101004111212131300111402151300041404061600031405171800909999903999909099991909999999999911190900099999999990929009 -080910100300080211120500081313140400151313140400161717181800060117181804919299199999000991999999909099999990090910990999903999999990 -080109090904081011121204081314150500081316170600181302190300181320191904999909309999009091999900009999999900090999999192999199999190 -080910110400080912131304080912140600010903150500161617181904161617170200900099999999009099999909909999099392099191999191099991999919 -040808090904060810090900110210120500131414140100151616170400031616171700099909909999919909919911909199199999391909999990929999999099 -040801090900040808090900101010101100121202131400120315130600051615130400099999939990919999910999999099109991999919099999902999991909 -080801090900061011090900101012131400021516131404041705131400031818181404999990039999109999090999099190999199909109990999991999929990 -080910011100020612131104140312131100151612131104171718131904171718051900119991013999910019999999999129999199909099099099099909999999 -060809090904080810111100011213111100141414051504021617181900161620031904099909909999009990999931999991999999001909091900999999991290 -060108080400091011111104091213140400091515161700091518021700031818051700999990309090199090919990909990199999999991999910999909929999 -080409031004080611101000080212040500131314141500161314141700160118181800902909919990909999199911999199009999999999090099993900999999 -040108020900101008111200131008031400150616041400171716181800051716181804991190399199991999929901999090999099990990099999909999999090 -080808080400060910111204051310121200141510160200141517031800140104181800999099090990999099909900999999909911199909190999993029999999 -080904100400110909121200110213121200110413141400110506150100031617171700090090990999999999999911999909099991999991999903920909990999 -030808090400100406021100101213141100101212041100101516161600151505010400291999991099909990919999199991999099999910099099999030999999 -080808010600091011121300090514141404151616171800151516020400031919191904999999903090010990199999990990199999099091099999999919929990 -040808080600040910110100051212131400041212021400031515151400161616161400099099990990013999109909909999999091999991992999999909999999 -060808010500091010101000111212131400030402131400151515131400041604130400999990903099999909190909199999999901992919999999990990909099 -080806010500040809101100121309141400021509141404161504171700031818181800999999903090990990919911199199999199909999091099929990999999 -040108040600091010101000111213131400151515151404160217171400051818170300990990309099999901999900999919999999001999991199900999999929 -050808090900010808040900101010111100021213141100041213150400031206160400090999999993909999199999099190999190999990990990999909920909 -080809090300080809101104121314150200121216161704181818181904060120200500999999999299991009019990919909919999100991999990003900999999 -050108080600090909091000041112101000130214151600131714141600130304041600999090390999999901909991999991099919099199991999999009929999 -030405080900100211080904121311080900141411081504141611170600161601181800999992009999199011999919999999909999009990090009999309999999 -080801040900080810110900041210131300141510130200161717171704050618180300999099939999000999999900199909919099990999199999009919990929 -040801091000051112091004131212091000141515041000021616171700061616031700099999039990000099999919999109999999091999091999909999999299 -040801091000111111110400121212121300021415051300041415031300061615171700099099030099999991999999909199099119990999999929990999909099 -040804090400010808101100121212131400021513131400161506171700051503171700009099990993900999190999099199999199990909099999909999992999 -030408090900101111120600131111141400151616140500021717181804041717011800909992900999999919900999099199999991991911091999099939909999 -050801090900040810110400040811110600121202131300121204131400151616160300099999930990190999999901909991999901999909199999909992909999 -080801090500101111111100101213141504101616161700100206031700041819191904999099030990999991099999000919909999999199999099901929991990 -080809011000111109101000111105121300020403121400151516120600150404120400909999993999119999909999009109909999991929099199999999909009 -080409090300080209090500081011110600121311111404121315141404120116171800999299099999190991999901999999909099909919999199093090999009 -040308040900101010100900110612020900111113131400041515151500161617010500929990910999999999919990919990919909999909190999999030990999 -080808090300040204060400101111111100121213140500151216161700150116161700991299199999999901000999999091099999090919999190993999999999 -050809091000111212101000110212130100110404141500110306161504171717171500099999009999999991909919139990099099099990992909099909999999 -040304060800091010041100121010021100120405131100141414130100151515150400999090209099999909909999119999999999190009999993999009999909 -040801090904080810111200131415061200021415151200041416161700031416160500999900930999100919099999999199099199990990999990999990929999 -030809090500100809090400111112131404111112141400021516170100181906171704999092999999090919099999090999099999991990999113911099919990 -040803010600090808101000111102121000041313141400051516141400171717170400999990923090999991999991119999099090999999990009990999999909 -080601050900101010100900111111110904121213140200121514141600041503170400099090939999999999199999910990919909199999090999909910999299 -080904101000080311101000081213130200061413131504161414151500160401170500009999999999219999991900999999919099109919990999990309999909 -080809100400111111101000041212021300051212140400151515141400060104160300909999909099999909009999109999109999990199999999903019999929 -080109091000081109090200121105131400151113131400041616061400041617040300999199399190199909091999999099999999090909999909999992900099 -040808080800030910110200061205131404151513131600151717171800191919011804099999999092111999991909090909919999999090199991999039999990 -080801090600080409091000111111121000131402150400161617171700161605040300999099939999999900199999109909109091990919999999999002999999 -080808090900041010110200011010041200131314051200131315061200161617040300999999099090911999901939999909999900999909999909909092999099 -050803040900060810090900020811111100121314151504011617151500181817170400029999990999909909099919999190999119909919993109990990999999 -080910111104081210111100011310141404151617170300061817171904052002191900909909099990909999999930090919999019990099299999090199909199 -080809100300080211121200051314121204151314141604171318191604171301061600991299919990199991999999090099999909000999990109099309999999 -080804090900100811090100101202130300100405141400100615151500161717171704999999909999113991999901199900129999999999999999900909909990 -030809090400100809091100100404121200100213121200051415161600171406011600999992999099099999900999999900999191999111999199909039909999 -080806090500080810091104011010091100121213140200120415151500161703180400909999999099999090999939109999199900199999199999900910909299 -040508080300091008081100101012131100141512131100141612130200040104130600999990099299999909099999999099999091999099199191903099999909 -040408010900101011090900021212131300141212131300140615151600140304051700909990903999119919909999099199999999999990090999999090929909 -080401091004081111111200081314140200081314151500161306151500161305030400999109031199999990091909999999919999990999999099999920990999 -060108090900101111040900121111130400120404131300120214140500151514140300990990300991999919999999009999999999999009091199990999999929 -080803040900100204110900041213110900040514110900151514140100151516160600929091999991099991999901999991999909090990999093999099999909 -080804090400021010100300111112120100131112121400151616051400170616181404999090900991992919999991939999999099090909999999909909909090 -040805010900101112120900041104120900021313060900141313151600141403041600099999003990190909099999999919999199991990099909999909992999 -080209100400111111100300121212121300011414131304151617170600051817170400111091999999992919999999999919999390909099990990900999990909 -060809100200110309121200111313121200111404151500141416151500041704010500911190299199999999999999099999919999990909999009990030909999 -050808090900021011090904121213140100121213150600160313151700040413151700999990909991119019919999039999999990090299999990909999990999 -080808090300040210110600121314141500121313141600171717171604180401051600999299091999119901990999999999909999990910999990009399909909 -080909011000051112121004131415121000131316171700030402171704181818180600099990093999090099999990199901999990999019999999029190999999 -040801060500090808101000111111101000020412120400131314151500031304151500999990930090909999199999999190909909991990999909999099929999 -020808080300091006110500121212131304011414131304151614171700041618171700199291999990090919909999090919999399909999990099909099999099 -080801050900080810090900110410101200110204040400111313141500061313031500999999930999199919909909909999009199999109999900999999909299 -080109100400080909111100081213131104141513131600140206050400171717170300990099399991909999999910990019999999099190099099991999999929 -080103090904081011090900081213130200081415051604171818181904171720200600999909329999919991991901919909909900900909099999099090999999 -030808080500090909021000061112121304111112121404151616171800041601191900299999991099909999910999990099909909909991090910909309999999 -050108080900101111080904121111040900131415020600161717180300161717181804999090309990999009909999999091909091990091999999999992999990 -080909090900080310101100080612100200081314051504161617151504161601181804999999999099299999990990919990919009909900999019099309999990 -040108090900101010090900111213020500111213130400061204141400041215040300991990319999999909919909909999199999090901999999999992900099 -080906031000081102101004121213131300121214151600171714041800170114040500909299099999119001999990999999999900099199099909993990999099 -040108080600091008111200090902131300140515150400161615150300161617171704999990399091000999909991999001909999990999999992999999990990 -080809010400080810101000040211121300051414121300151414161304151503170600919999913099999991909901909991999099999990990999099209999909 -080305090600081002090400081010091100121304091100141415151100041615010400999099209999919999190999999099999090999091999090990930909999 -080808030600020409101100121314150400131316150100051716181800171716181804992991999090900919099919009999999911390990999099999999999990 -060809031004111205131000110214131300111515151500111616170400040116181800912900199999990991099910099999999099999999991900903999999099 -030608090400100808091100121202091300051214151500161616151500171701040400999992099091999999190999199999109009999909999919990300999999 -080104090600081011121200081311111204141414020500151616171800151616031904990099390990999991909991990991999991990991099991999991909920 -080404090400080809090200100311111200100513041200100614151200161616011200099999909099191992991999999990999900999909999901900039999999 -080809091000010811121000131311141000131311050400151502160300061504171804909999999993100990909999999999009999990919999919999012909910 -050809090200041006111200011303111400131304111400151617111400150417171400019199109190991991999939299999999990090099999909990999999999 -040501080800091010100400090911111200040211111200131406151200130304161200999990030999990990919999909999999019999100991999999909929099 -080910011100120910101100120913140400121313020600151616161604050317041800009990993999990999199999109999199999099991990999009190992909 -050804010400040809091000020811111200131306041200141315151200160315151200099999903099990909910911999190099999991999999099919999929999 -080808010600091010101000111112131400151616021704031616051700181804041700999990993090999999991990019999199191002990999999990099999909 -040308091004111213091000110206091000141415160400141717181800051701181800929900919999199991999900909919099911099991999919999399909999 -080809090600010809090400101111121300101415040500100216171704101818170300999099999993099991900909909991909910999199999119090999999929 -080106091004081112091000131314091000131502091000041617181804161619050300999909909999990900099990099909999990990009999909099090999099 -080804090900080210051100121314151500161414151500031717171704181804010600999999909090109991190919999199999991992991999999090030999999 -080909090904081004110300081206131400081516141400171718021904050118181900999909099999092990919999999900199009999091999190003919999999 -040408090900100402090300101112130500101104141400151116141400151616010600909990909290919999199999109999199099999909999009999930909999 -080604090500080210100400111104100300111213131300141414151500040104151500990099090999190901999990929999999009991999999909903099999999 -040801090900100811090904121212131300041402130300051414151600061718181800999990939990999009109999199999999091999919290911999099900999 -080809090904080310020400111112121200061113130500141516161700040116161800999909911099299909919991999999999999990109090099903990999909 -060405080800090909090800030410111100121310111100121410151500040210011500999990009999999999090999999209999991999091991999991939901999 -080808030400020604091000111205091300111414151600111414161600110117170400992991909090999919990990999909009190999999999909993900999999 -080809090300101009041100101004121100041314141100151515140200050104040600909990999299999999909999999900099099999019199991903000999999 -040408080400090908081000010911110400121212121300141515060200050316161600999090099999090999990931999991999999190099199990909991992999 -080804010600050909090900101011121200041302121200141315161700031315150400999990003099999990991999199991999019999999091900929990999999 -080804090400101011121204101013131200140215131600030617171700181818010500999099000999909099999999999119909911192099199999999030999999 -080409090600081009090100111112131404111115160200051715161804191919160300999099099999093900199999110990919999199099990991099092999999 -080801050400090910111100090912131100020614130400151504131600151503041600999999030099109999099999099100909999991909999990999909992999 -020809100600111204031300111214151504111214140400161217171800160117170500111991992099999999090990090999999199999999090090993990999999 -080809011000040809101000111112020400111104131300140415131300061616050300999999993990119991999991109990199999990999990909909002999999 -080401090500080810091104121313091100141313090200140415151600141706150300999099039999011009999909999999919099999999190991999999900929 -080609090400080809091000011112101000131412151600170512041604021818180300999099099999099990999930099919099199091090999999019999919929 -080109101100081209041104080609130500081415161600021717181800041717031800990099399991099090909999009999999900991090991999999999909299 -040809030600080802101004111112130500141112131500141612131700140112181904012999999099109099199999999999909999999099090109993990999000 -030809101000040209111204131304140600131315151600051715151600181717011600219999999090190091909999009999099919999999999090909939909999 -040408090300100209090500101111111100101213140600151516161604150117181800909290909991190999999999999999099000991999099099093099999099 -040108080800090910050600091111111200041314141200151514141600031502041700999990300099999991099999999901999099999999099990929190991909 -040801090400041009090500111112131300111106131300021403151600141404151600099099039999990900109991999999999990991990099299919999990999 -050809031000061109121000011313021004141413041000151616171700041616171700099299099990919990119939910909099999999909990909909999999999 -030806040900100811111200130805111204040214141200151614140100151517181800909092999099999919999919000919099999990199999993991199991099 -080808010900041011090900101012130400061414151500041605151500031717170200999999903999909909019990909990199099999099990909999991929919 -080901041004080911121000130914141000151502141600151517051800031906181804999909930990910909919999999091909919999900099999991099929990 -080803090400080810101000021112131300061412131304151617180100151505191904929099990999099919999919999019999919909910999013990909990990 -080910100300041112121200131402150600131415151600131417161600130501040400099990009299999990190900199999999999999991999919990300999999 -080309090500101102121200041313121204041313141400151515140100161616160600299991990091199909199999990999909991990999999903999909999909 -040808010400090909101100121202131300121214131300031514160400051714160600099999903099991999091990199991999999999990092199999999900909 -030808090600100808021100101212041100041212131400051516171400181818011404291099991999991999999909999999019090999090990901999039999990 -080808040500091010101004090911111104011213031400061502161600171818161600990990999099999090999991990911999399299019199919900999909999 -080802090300081011121204061013131300141015050400161717181800040117181800991999911290199099999999999090909090999109990909903999999999 -080106090500081011090400081011110200041004041200131014141200150414031200999099309990100999999999919999919009999990990099909999909929 -080808080500010909090400101112131404021516160600171515181804171703181800999099909993999999190911000190909099991999999909099999992999 -080910111100080412111100081313060400031414141500011616021704051616181800909999009999909999009909999990909299999991093910099909909999 -050308091000111206130200141516171704141416171704181816192004181801192000921190999190909990901909990999999999909091099019099399999999 -060408080300091008021100090912131100051414141400041515151500041601171700999290099999919990919990999990109099999919990999990390909999 -050808080900011011120904131414121200151414020400151516171804191919030600099999099993000091999909999099999991099991999910099190999299 -040801040900080810101100121310101400121315160400051302160300061317171700099099939099090999990991999999009019990919999999999192909999 -080910111100020905120100130914141500130614141500161718191504031717041504111991901999993919909999909909999999991909999009029909999990 -080809101000041109101004120209130100121415161600120417161600031818060500909990999999119091919919939999099900999099999909929000999999 -080109100600080811121300141402051504141416160400171703181804191919191800990099300999090919990991090991909999990991999929099909999999 -080109090904081011120400081013130500141013130200141006031500041616171800999909309990100999199999999099909999199909199999900921999919 -080409011000081109091000081213131000081214151600050402040300061717171700999999093990090999919999999991909099090910999099999192909999 -080409090600080403091000111105021000041112041000131414151000131414010400909999929090999909919999019999999009999900990901999930999999 -080909010600080909101100121313141500121613051704120404171700031818180200999999993090901909001999999909019999909099999999999091929919 -080909100300080909111104121305140200121515161600121515171604120104180600999299991990999090991999099909019091999999999909093009999909 -050108080800090910100400090910111100121304111100140215151600140604040300999990390099099999999999099199999199999109990191990002999999 -080309101004080802101000111213140600151515141404011617181904052020201900921909999999919909190991999019999999909190993099099009909909 -080804010900100811120900101314150904101616160904051718020600031717191900999999903999019990109909900991999999909919090919999919929199 -080804090300080210090900110412130500111414151604111414061600110117171700909299999991119919999999009900099199009990999999993099999999 -080405030900081010060900111010041200131313130200011415161600171717041600999299009999990909991909999990019999199199993009999009999999 -080808091000040311101000061212130200141512130400161616131700040501131700990090999999219999991999919009999091099919999999900399999909 -080909011000040909101000031102121300041105141300151506161300041717171700099990993999999991191929119990099099999090999909999990909999 -040801090900050810090900110812131300040806131300140215151604171717150300099999939999109909099909099999999999990109990191009992999999 -080804090904021011121304141516170100141518171700141506191900031505191900999909009091190010109999139999999990999909099999929999999099 -030604080400090909080800051002111100121213111100121214151500161604011500999092009999999999190900199999999909999901999909990039999999 -080802091004010811051000121212130300141415151500141416160600041718161904991109919993999991102999099909999909999909999999999090900900 -080105090900080810090904111212131304141212021500161718181500061920031504999999309999009001999999990099099991190099999999900099990920 -080901101100121313101104121314021100120615161100120515161700180403160400099990039999900099999991199900199999999999090999909990909299 -080808080900101002110900121204131300121204130100140315161704141406051800999999911999199991910999099999999909390290999900099090999909 -080109100400081112131300081414131304151414161600060204051600171717170300990099309999099991999909090099099999990199999999991009999929 -080805010904081011110900121311140900121516020904121503171800120619201804999909903990091990999909919999199911909990099299999909990090 -080801040900081010110900061010120900131412121500130416020500130416170300999999930990990999909909199999909009999991099019999999990129 -050808090600100808110100120213141500121617181804121617041804031919191900991090991990993991009919909990909909909990999999029099999999 -080808080400050909100100060209101100121313041400121313151600030415151700999099911990993999999901909919009199999999099999929990990909 -080109090500080809091004111206130300140215131300161616171700041818171704999999399099090091999919929190999111999900999999909999999090 -080301040900080810110900050210111200131310111200131304111200041404061200299099939999900901999999909919999919999909999999990999900909 -060108080900101108080900121205041300121204041300141414140300040215151500999090399990099991000999999999999909999190999999991992901999 -030808040900101010020900111204131300061415151300161615151700161605010400999992900999919999010909999009999909199999099099999030999999 -080809090500010809091004111202131400111515131600111717131804110306041900919999999093990090199909009991909999999199099999092090999909 -050808090900101011021200101011110300131313131400041504161700151504010600990990991199919999992990999991999999099091090909999930990999 -080905031000110402121000130614121004151616171704011616181700191919181800009290999999011909199909990091999090909999993999990999999099 -080805060300090904101100090902101000121212131300141515131300160415010400909999090299991999099999199091999999999199990919909930909999 -040806090400100811120300100813121400100815121400011615021400161617051404999090900999999999092909999990999909999990993911999199991090 -030805010900080810110900121202131400121215150400041615151700161606041700209999993999191999191990119999099999099099999990909009999999 -080209091004111213091000141213151000031215150500061216161600041701180400199901199999999919909999909290909999999990990199990309909909 -080808090400100311110600020411110500121212131300141516130400140116160400990091299999990919999990999190909999990919999100993999999909 -080409031000081111101000081111021200081314060400011314150500041616160400909299909999999999991999119919009099999999993900990099909909 -080901101000080911100500080911120400131311120400131411021500060403161700099999939999000999999999109999999909999991090991900991999219 -040809100500111111120100131313131404151616141404151517021800031919190600000099099999903999919999910999999990909991999110929900999999 -080801090400081010091100021010120600130514121500131414121600130304120400999099939991900919900999999100999999099999099999999090929999 -060308080800090405040200101011121200101004121200131314141500161616010400929990999199990900091990999999999990999099199091990930999999 -080403091000080805111000121211110200121213131300011414150600041414160400092199999999909909991990999999919999999019993900999909909909 -080801090600101111110500021212131400151216161404171703161400171704180400999091130999999919090999009199099999901999999299999909999009 -080808080400020403090900100411121200131311141200131315140500061601141700999991029099999919909990999199999900099999999199990390909909 -080906040500101112131300141412151500031402151500161717181804041717011800009990990090909990999999999290999911999909190999009939999999 -080801091000080811090400121212091300140404091300141406020500031516161700999099939099019999099999909000999999999991999909999910921909 -080910051100081204111100081204130600141202131300141515161700031515010400000999909999999999900999099099999111999999199901929930999999 -060804010900041011110904121213140900121515150900031616160200171717170500099999003990991090999990009999999999099999192991999909999909 -080910010500080911121300080404121300141402121500141416121700030406171700909999903099900999999999099009999919099919099919920999999099 -030408040900101011020900121213140900121213140100040415140600051515140400909992900999111999999990019999999999390009999990999999909909 -080808090300041011121300141011110200140615150500141615150100161604170400999299091990991999991900919991999909099999999093999909999009 -080109090500080809091000110612041000131312140200131312141500160403140400999099399999191900099999909099919999199999099999909990909299 -080808080600040909090100101011110400051204131300121202131300140304151600999090909999993999919990999090109999999999999119919990929009 -060809011000110512131000141414131004151515131000030402130400161617181800909990003999900909999999090999999991999919099999920109991999 -080801091000081112091000130414150400130206161700131818051700131818031704999999939991100919009909909990099199099199999909999999999290 -040808090900010808100400111204101300141402101300141406101300151503160500090999999993990991099919909199999911999999999099990919999209 -040808030900101008111200101004021300141516161300141516171300061504010500999290999199909999001999919099199009999999999919999930900999 -060408010400090909091000111213141400111202140500111215161600110415160300909990903099999999100901999999909919999919999919999992990999 -080106090500081010091100081002121100080413141100151617141100040318181804999999309090919999919999109991999909090919999199902990999990 -040804030000090810100000090802110000091211110000090104060000000000000000999990902999999999199911999999999009999900993999999999999999 -030806091000111213021404111516161704111516161704181519191700051519011700290099199099111099991999990999999909000999990991909939999999 -040108080804090910100200090910101104121314141500161717171500061819050300999900309999991999991991990900919099990099999999900992990099 -080509011000081112121004131314151004131304161000171816160200060319191900909999903990099090919999000990199999999999990091909991992999 -060308080800090410100200090911121204051314141200151614141700181818010400929990999199090999991990090909999999190099990990999030999999 -080109100400081109101000081209131400151509141400040206030500041616161700999099399991999990909990099199999990990199999099991920909909 -030809101100080809101100120405101300140215151300061615151300041718011304990992999999990919999999099109099199999199990990991139901990 -080804040300080809090900101002111100121314111100151616170500061601181804909999990299999909919999199091999019990199999900909309999990 -080909010400080909101100121204100600121202101300050414131300031514041600999999993090910991999990909999999919090019999999999990921909 -040809090300100209091100100405111104101213131300141415160600140117181800099299099991199999999999090909909199999109999000993099999099 -080904030500101011111100100212130400141515131600171515131604170106131600009990992099999999199911909199999199990999999909093099999909 -040408090900101111030900101102061200131313051400151516171400151504011400909990909999929999990991909091909999999190999110999039999999 -080809090600080809090100101112130400100404131400101516021400151503051400999099999999093999199900109909999990099991999119999909992999 -080808090500101102120400101113141404031115141404161617181800161601180600999090900999199999100999190999999291909910999099999390999999 -080809100600080809090400051112131304141112130300141115041600140102171800999099990999990990099909990999999910999919290999993101999119 -080901061000050911121000131314151000131602151000041617150400041617170300099990930999000990199999199999999901999919090999999999909929 -040801090400041010111100121212021100131415161600131717031600131717050600099099030990919999999999119901909099999919999929999990999099 -050403080400091010111200091010060200090413141400091513161600041513011600992990091099991999991999909990919901999999990019999939909999 -080902060400080510101100030412101300141415161304141417171300181818011300110999919099099929990990999990199900909991999990999039999999 -080804090904020810090900111213140500111516140100111706181804031919191800999909909991119919010990999909999990399000999999020999999999 -040808080804090909090100101011120400130214150600130516171800130316181800999900990999993999919990109991099119099900999090999999929999 -080304090900081011110600121011111300021014131300041515151500041604010500299999900999999919990999999199099111990991999999990930900999 -040804090900010805090300100811020600101212121200101314151500041313151500009999999293999999019901909991199999999909999099999999909099 -040308090600101112131400100204131400101516131404101516131700180501171700920090919999199991999910999999999199009999999100909399909999 -040804040500080803091000110412021000111212061000011313131000141414140400909990990099921909999909119999999099099199993999999099999909 -080804090500080210091104031212090400131212091400131516171800151501170600990999199099190029199999909999999090099010099999999390999999 -060804010400090810101100090910101204130214141500161714141800051717031800909990993099090999999991900919909019990999090999909929999999 -060809011000111209101000131209140400021203141500161717181800041717051804099999093991119919999999009199999999091929091999909999999090 -050108080600090910101100090910040400120413021400121515041400121515031400999090390999190999990999099001999991199900999999999999999929 -080910101004111111030400121212120600130214141500131614141704161618010500009900999099999990929999999919909999999199090990099130991999 -080809050600080810111200011313111400041313110300151515111604171702161604990999909099999990090939909999999990990919299999099199990190 -080903041000080909051100021213131100141513131100041516161100061501170400929099999099990901999919999199999119099919990999999309909909 -020808080600090910030500111010121300141415041600011417171704181818180400199091992999999919990999009109909909099909993999090999999909 -080601040500080809090900101011121200101004120200131414141500131604170300999999030099099999991990099990919999999999190991990919990929 -050804090400101011110200011211041300141215161300141206171300141217170300009099090999091999991931999999099000999900999999999992999999 -080803090904101111090904021112121305141512120600161616161704181801192000929901999999999019990990900199999199999190099999090300999909 -080809090900040803060200041011041200040513131300141415151600141415011600909999929190990999991900999990019999990091999090999939999999 -080401040600091011111100121212121300141414021300151617170500150317170400099990930090999990190999999919999991990991999190992999999909 -080804090300080510111204130402141200151515141200011617141200161617061800909299991999019009199999199009999991999199993090999990999909 -040308080900100406080200101112131300101412131300101415160400051401171700929190999199999990091990999999999099999901999010999309909999 -030809090900061011121200131302141204131315141400161715181900040515011904299999190999199909199991990999909919999099090910909939990990 -080109090900080810110400121212130500061402151604171718151904171718180300999999300099099919909999909919999011109909199099099992999999 -080808080900100306020900100411120904101313140900151313161600170405011600999999291999909999919990010999999999190991990909909039909999 -080309100500081109120600080209120100081313121400041516141400041616170400299099990991990991999991939991999991099909990999990909909909 -080910031100041210041300121210021300061414151500011414151500051617170400009290999199999999909999019909199099999999993919990090909999 -080109100400081111121300080411021300141515161300141515161300170506040300991099311990999999919909919990999090999999999999909002909999 -030808040900100808060900111212131400110215151500111616161600040501040400990992999991999991900999909919909109999999991999900300999999 -080903101100080912131300140912120200140615151604141715151804140104051900092199999199999999991990909999919999109099990190093090999909 -080103090904081011121304081402121500161414120500171718192004171719190600999909320991910099990911199099909999990999999000099990999999 -060104040800091011120800131412120800131402040800131415051600031515041600999990300990110909999909999991099999999919099909999999929909 -080804090500081006110300121013131400121015141404121016021700120118191704990099990999099909902999999990999999909901990190993119999190 -080109090500081009091100081213131100140413021100150603161600040417171600999099399999190990199909999099199909990991990999909219990999 -080405010400080909101000080909101100041212111100041212130200141415030600999999003090999999991999099099999999999999190911990190999299 -060108090400101010100500111102121300141515121300161517121300040317041300990090309999999919900991909091999999990909999999902909999999 -030808091000111104091000111102121000051314121200061516171700041801171704999092099999999999099991109999999009999901990019990399909990 -040608090400101002110300101213131300041212141400151515161600050117161600991090011999992999199909999991999990990919999999903099999099 -080809100400080811110400011213140500021313150600161617171704031618181800990099909999990990099931009999999190091999999099099099929999 -040408080900101010080300041105020400121113131300141415151600141415010600909190999299909999919999999090109999990019999990999930990999 -080906101000080204101000031104120500131414121200131414151500130104150400109999199999099921909990999919909999999999090909993090999999 -080809091000080809101000061102050300121113141504121116171804121101041800999999999999009990909901999991929091109999999100099309999999 -080802091000110809091004030412131400151515150100161717171704160618051900911991999999999029010990909999199999390990999999099090990909 -080509101000080811121204021314121200151617180600150417191900150301191904909999900999999090099919099119099910999099099909999399929990 -080109101000081109101000081209130400121202141400150616041704031816160500999999399990909991990991199999199991990910090999099990921999 -080804010500060909101100120909131404121215161404171717171800031919190200909990093099990999919999010999099900909999199990999991929919 -080804030900080610041100121310141100151510140200011516141704181818180500909299999199009909999909999909919991199919993190099090999999 -080808040900021003110900120604130900141415150900161715181804051701181800999991920990990910999999099199099919090990990999009399999999 -030804040600090808101000091102101000121212040400131313141500040114140500209999990099999999199991099019999999999910099900903990999999 -030809100200111205131400111215131600111215131704110415131804191906011800211199909199999999991999099999919009109099099999009039999999 -080609091004080805091004111213031004111415161000110217181900202020011900999909099999090090999990290991999919099190090919991139999999 -080109091000081109050400081212131400081212150400061616150300040217171700999099399090099991909999909999009990999199990999991992901999 -030809101004111112021000111113141404041516140100171516181800051516190600219909919999911999991990090999999090399990990099909909999909 -080909011000080309111004121202131000121214151000161714060400040514181800999999293999991009199990119999099909999090090999900999999099 -080801090500030810111100040212111104131412150600131616161704131819171700999092930999919991999901190909099099099099999999090999990099 -030808050900101108020900101111041200101314151500161317151500061304010400299099999999911999991999999990019090999999990009909030999999 -040805090300010810111100120813111404060815021400161617171704161818181800009299991993199999190909990091199991999009999999099099999999 -080808080400030910111204061313111400151313111604150217180100051917181800999999909092909091990909999999909999009190990913991999901999 -040108080800090909090600101112130500101415151500160217181904161603191904999990309999990919999910009910999999990199999119099919999290 -040108080400091006110400121011110300121013131300051002140400151616161600999090390990090999999900999999929999999910999190900999909999 -040108090904101008090900101008051100121313131100121402151600041706031800999900399999109999900999999091999999999919990911990991900929 -080309040600081010111100080212111100081314151504161614140500160117180400929999910099909999199911999999999190909199999090993099999009 -080808090900101111090300101213020400101414051500161414171804060117170400999999909299999990919999109901999099090999099900003990999999 -080809100500080909110100121302141504161718181500030618181504191919191504991099091999993999109911900190999909992099999999099099999990 -040809010400100211121300101414150500101416151700031816151704181816150600019999113091910999000999999999999990092999999099099990999999 -040608080400091008081100121202131404051215151400031617171400181818011400999090099990990909990991110090999999999199992991999039999999 -080403090900080810090900020511120400131313140100061515151500041616161600999999029999199919909909009190999991390990999999999099909999 -080906101000030911101000040211110400121313141504161313141400171718010500190992999999999991909991999099109999000999990909999030990999 -080105090900080810090900031112130200111106141504041617141500181819141504999999309999119999991921119999909999009909990009999099990990 -040108090500100808090900110612120400130212121400151616161400041717031400990090399990999909190990999099999919090199999999901999999299 -080801090904080810110904121213141500121616161500050617021500031818181804999909939999010099910990099999199999990901999099999919929990 -080904060300080910101104080912101300140912131300151515150200040501161700999999900299999099991999909099999999990009199999900311999919 -080901100400020911101204130911141500160911141404170611180500031919181800199991939099109019990999009199999999901999099009929999999099 -040809101000011109041000121209041300121202141300151506161300051703161300010999190993999999999990099991999991090901999999990999909299 -030802060900080810111100121313111100120413140400151516141700151505010400919092919099919999999909999999109900999999999000999030999999 -080809090904080810101004061102121304141415161700181919202000050319012000999909999099099099990900190901109999199919190999902939999999 -030809040400060909021000051111121300141111121500141617121500161604011500219999990090911999991999999099919999999909990001999039999999 -030808091000110808091000121305091004141516171000021818171704041919010600999992999999999910999999090109099991091019991999000930999999 -080904101000080811120600130214151500131616151704131616181700031905011704909999090999000999099911199909999999009991999999920939990990 -080909010500080909101100121204111104041314021500031414161600061718161600999999993090901990999999990990919001199990992999999099900999 -040803090904101111090900121302041400121215151500161717171700160518010600929900199999999901990991909991909909999999190999999030990999 -030808060904100808110904101212130900100514150900021617180400191901181800999902990999999099009999909990999990091009099109911399999999 -080909030400081011111200080211121204131415161600171815161600060115040500992999199099999991999919090199099000991999991999903900999999 -030406010400080910111100080802111100121314141400151616171804051616171800999992003099099999099991999991199009990909999900009999999999 -040808090500010808101000111112121200131102140400130615141400130416170300090099999999909999199990999990999090099919990999999199909129 -080109100400081109121204081113121200081113021400151516061700041505031800990099399990009099999991999999999991190999199009909091999929 -080902101004111213141404031215141405161617180100161619200600212121202004110901919999099029199999190990199999399900999090990999999990 -080808090600041002110300011213111100141515161604171515181804170519181800990090119999919991992930999990099099900990999999099099990999 -080801090900100811111104101212131404101212021500101616170400060316180500999990930999099099901999090999919999199991999910902909999909 -080808030500020604090900101112041300141112041300141112151300041101041300992991999099999910090999099199999999999990991100999309909999 -040803090900061010040900041010110200121313130100140405151500141616161600092999099990999999901909119991999099390990990999999009999999 -080309101000080811101000041211020400061313131304141415151600171815010500921999999999999990919909909900199999900999199991909930900999 -030808080200090506101100121212131304140415130100141617181800041616181800299199999190901909919999990090999990399090999009999999909999 -080509010400081009111200081313141400081502141400041617170400161606170300999999093099000999919909199919999919990019099999999999990929 -040809101000110809091000110812060400131314150500131316151700040102150300999990999999990999000990999090999919999919099991903192999199 -040108080400091008081100121010131100121415151100060215151104051616160300999990399090099999909999909991999009999999990199091999909929 -040808091000110808021004121212120300051313130100141515161604170615161600999190991990919099192999999991999099399990990909009999909999 -080109101100081212040500080612131400151515141400020403161600171718161604990099309091999990909999099199099999991990990999919299991990 -080509100300080209090600081112121304141415151500141416160400040116171800901299999999199991990919990190909999999990999099903900999909 -030809041000060809051100020809121100131309141100151516171700150401041700299099999099999909909919099199999910099919999009990309999999 -060809090900101004111204101013140100051515151500160217171804161617170300099999099099900099909999139901999099999199999191090992999999 -080809090900080806100300111104121200130514120200151515161600040117041600909999999999092909919999999090999099190909199919903099999099 -080909090400081010111204081314140500060215140100161617181800161619031804999999900099990099909900909991999019399199999009999999991290 -050208090900101108080300121313131300141515160600041515170400181801171704910990199999992901999999999019999099099990990900990399999990 -050806090300101009090400101002041100011213141500161616141704181818171700090299099999999999190999099901909390099119999999090909999999 -030408090400101011090900051213131400040213130100151616171700151506171700909092909999099991990909909919999019399900999999990999999099 -050804090900011011090900121311141400120411141400021506161600151517030400009999099993009991909919999909999999991900999999919990991299 -080808010400090909101004041105101000121213131400151617130200060317171800999999903099909099099909999909919909999999190090909991992919 -080809100400080405100300111106101200011113101400151513161404151517180200900099099999909999992990999999919399999190999009099991991119 -080409060400080809101000041112100100130212141500130512161600130304161600900999999099019999199901939919099199099099099999999999929099 -080808010400040909101000061102101000121113140400031115141600051115150400999999903090999999099901199990099199992909099990999999909909 -080105091000081112091004131404091000131502161000131718161604130619190300999999309991000019999900999999999111999999990099090092999999 -080809031000050811101000121212061304141402151600011717171700181818040400992999919990909990199999900991909901999991093999990900999999 -080309090900081011111104060212120100131412121504161617181900161717052004299999999091999091909999939019999019009999099000999990999900 -040808090900040808100904111112100500061312100300011412021500161612171800099999999999900009999999009909999019999199293919990911999919 -080106090900081011090900081011121300140211040400150416160500150316161700999999309999109999990909099999009119991909990999999990929909 -050801090400101011091200101011091300141504090200141515161600140406170300099099039999011999991999999009919990999999199999990019999929 -080109090904081011120300081006131300081402131300151617181900051717041904999909909990090999909990999999999000999099990000909999999090 -050801090900100808090904101112131400021512160400170318181904171718180600999990939990999099100991099919909190991990999990092990999999 -080909030400080810111100040212130100141412151500141412151500061617040500992999919099199991909901939999199901999999999999900990990099 -080401090900101010090900051112121300141412120600040215151500041616170300099990939999909901990990999919909999990199999199990919909929 -080809011000060809091000110504121300141402151300141404161300030417171700999999993990091999091909919099199911999990999909920990999999 -040804010400091010101000090911111100041204020600131314141400130315150500099999003099999990991999999909199009099091999999999910992999 -080809100400111212100100111213101400111313151600051717021804031717040600900099999999913999199909909999909991990991099919099900929999 -020808080300090910061104090404111100121213141500121216171500050118181500199291999999009099999909999190099990999909999090903009999999 -080209090400101010110300011212041300061415151300161615171300161605041300119091991999992991999939999900099999090090999999999009999999 -080808030500090906101104121313101000121313140200121516171700120104171704999990992099909009990999999999919999199901990119993099999990 -080509101000080909101004110212130100141515161600141517161600030618041904999999099990999091109919139190099999999909999999929090990900 -080509010400081011111200081311111404081302151500061316171700041818170300909999903090099999990991990999009919999919990919999999909029 -080808010600020909090900100411121200101314151200100404051600031717161600999991913099999919009909999990999900999000099999929999999099 -080909090904080806100400041103121200131414151500021416160100171816160500999909000999990990999999999002909999990990991993919999911909 -080808030400020509090900101011110400101012110100061313141500041313161600992991999090999919909999909999999911390090999990999990909999 -080406090300081011121200131411110200151515151604171718191900170105191904999299001999999900991909999090919999909099199119993999999090 -030608090400101112120500101312120100100214151500041616151504171716181800900092909999190991999999939919999190999009990999090999999099 -080904101000080911101000010912131404150912040200051616161700061803171700009999999999909999099931110999019099990999199990990999909299 -040809091000010808041000111213141000110506151000110204151500111616170300009999999993909991099919009990999099999999091909991999999129 -040801090900101010100900111112121200021314040500151316171700061303170400099999039999999991090999999190909190990909999909909990992999 -040808090600100808110100121213111404151515111604170218110500171718190300999090990999903909999991100919909999900199099199999999999129 -060408080300091008081100051002111100121013141500161017041500160117170400909990999290199999199999199099999000099999990009993990999999 -040808080900021003110900121306110900051414110900011414151500041617170400999990129991999919999910999919999090099999993909990099909909 -080809090500080809090600041010111204021013141500160317171704161601181800999099999999099999090999090091009199091919999999092309999999 -080409100300111109121300141102151300140504061300141617171700141616010400099290991999919999199990119999999999099009190999999030999999 -080104091000081112091000111113091000141404061000021515151500041617030500999999309990099999999990009190999999091999991999990190909299 -080808050900101010090900041112130100061114151604170318191900171702191904999999900999999999009909139991099009009919092999999199991990 -060808090904101005090900101011021200131314041500161314171800160114040300099909099999099999909991119919919900999999190909993902999999 -080309100400110609101204130514151504021414151500161617180100161619191900290991999090999019090990990199999990991990999113999909999999 -050809090600101112090300011312121400151302161404041317171400181817170400909090099990199991992939999991999091100909999999999999990909 -080808030900041011110900121211060900121213140200011516171704181819051704999299099990999990999999999990019991199019993109090099999090 -080808010900051010110900121010130904121206021400151503161400150417180400999990903999901999999909910990199999190999999921999900990099 -080809101000080802040300051112131404151516161404151517161800191919010600901999919299999999109900190999199909009999999900999030999999 -080809090500011010091100121010021100041306041100041415031100161615151700919099199993999999919909919000099999999099990992990990999909 -050108080800090909101000111212101000061304040200141313151500160404150300999990309999919909999909999000919999099999190999909099909929 -080808030900101111090900120513020400141313151500161616151500040106170400999290999999999909019909909099199099999909999919903009999909 -040801040600091010111200090910110500131313110400141402040300141415161600099999030099900999990990999991999999099190999199999192999199 -020808080300091011110500101011121200011313131404151516041700151518060400199291999999990919999990099919999399009099099009999990990099 -080801090500101011091200101313091200140413151200021617151204060318150400999090939999100990999999999199999099091999991199009199992909 -080809011000111109121004111113121000061313121000141502040300040516171800909999093999910099199999999999999099999010990999900192999119 -080808090500101009091104101012121304140312120100151516171800190216040600999999909099999099090990900999999299391991999910919900911999 -040108080500090908080400101010101100061212121100041302140300041516141400999090399999990991099999909091999999999019990919999092900999 -080906100500030902101100040912101300141404151500141416151700041616011700199992909099119999990999099090109999999999099909900939999999 -080803091004080806091000021112130400141115151600141115150500141101170400929909999999090919909919099990909999099999999190999309909909 -080809061000080209111004031209131000051409151604171415151600181904011600999999190999999021909991009999999091909999990090909939900999 -050108090900101010110900041204131300141415131300141415040600021616170300990990309999909991909900999919999990999999099909919999919129 -080808080904101011120600101013140100151502160300171717161804191919200500999009990099019999119999939091999991999909299991099099999009 -040808090300100211111100121212120400041313141400151313160500060401161600991290199999099901999999909919099099999999990909900390999999 -080609090200080809031004111111121300141516160100141516160500141704181904999199099199929090991999919990199909399999999999990000909900 -080910101000080902040300081112121300081412120600151414160500040117171704999999919299999990109999909909909099990919999900903099999990 -080809100600111109101200110209101200031309140100151515151604041718040500999099099999999991999999009219999990399191999990099000900999 -080808020400030409091000111112091000110513141000151616141000040401140600991992991099999990999990999990199909090909999919900399999909 -080808090900040210091100121213131104121214130100030415161700181818050600990990999999199991109999900990999999392900999090999000999999 -040108080600091008081100121313040400141313150500141616151500021717170300999090399991090910990999099199999990099909999999919999919929 -080808010400090909101100030502121300141414141300040615151600171717170400999999093099991999091990119291999999999099099990909090999999 -080909090300081010041104081012121304141515121600011515170200051819170600999999099299999099901990990009919099999999193991990199909109 -030808040500090808061004021112131404151612171700151818191900151801191900990992999091999091900919900199099190999109999909999399999999 -040803090900050810110900120810110200040810110600011314151504131316151500092999999999999909991909919099999991099019993199099999990099 -080808030400020604050900100411090900101011121200011311121200041415161600992991999090990919099999099909999999999199993009999009900999 -080309101000080604101000111111020400041213130500121213131400151515010400921999909990999909919999009999199099999999099090999030999999 -040809100500110809100100040812101300040812121400030402061500161616151500990090999990093909999999909999109099999019099909929199999999 -080809030500021004111100121010111100131306040400131314140400040114151500912991909099999919999919099919009909999999999090903999999099 -080801090904081010090904061010111204131314151500160217181800192003180500999909939990909099999909000991909909999919091199919990912999 -080309090500081006090200111012131400111012150400111016171700110404011700929999999099991909091999919999199990099991990009990039999999 -080905101004080911110100081211110400081304141400150216141400031616170600999909900999093999999991999910009999990199990199999909929909 -080808080900101111120904100213130900101415160300171818181804040105190600999990999999900090999910999919999911291999991999003900999099 -040809010500100909111104101212111100130212141400151617141400060304181800009999993099919099199909999919909199991999991909902009999999 -080309101004080909111100081212111104021212131400151617131300180604010500290909999999999999099999990199909191999009090999909030909999 -080501040900080810111200131314111500030602111500161717181804041717181800999099039099990990199990109909999991992910991999099999909999 -040808010900101008110900101212130904140504150900140616170200140318181800099999993999001999099999900009099990999999199001999919992999 -040809090900101011120100041111121300141506121300050204121300161616160300009999090999913999999909909919999090990199999909991999999929 -050808010900101010100900041111110900060212121300141503121600041704161600999990903999999909199999909919999019099099090929900999990999 -030809090600080804101100021213051400150416161404171718181400171701181400299999990099090991990919099190999999901009999190999399999999 -060108090904101108080400101213141400101202040500101215151600031715151800990900399991090999999910099999999910999919099999999990921909 -020808080800090410031100120613111100120514151500121617171700120104181804199991019999929919999909099990999900999990991099993090999990 -080809031004050809111100121309021400151309061600171318191904040118191900999209999199099909991991119099909999090999990099003999999099 -050801091000061111111000121204131000031202131300041414041500161717171700099099030999999909019999999999999291999119099990909990909999 -080809100300040211120400130411061400131311141400151516161600151501170500911299199990100999999999909909999990999019999099999309999909 -080509101104081213141400011215141400061216031700181816161904181820021904990009009090099999099939999990999999290199199999099999991110 -080909010500080909101100080612131400031515141404161617021804161604191800099999993099991999001990099999999990902991999110099909999099 -080808010900101011090904041213141500161706021500160418181500050318181500999999903999909090901900099909999090199991999099909999992999 -040308090900101111091204131111021200041415051200161615171200181818010600921990999999999009919909919909999099099099999001999030999999 -080809061000031109041000121109131004021415151000160515150100161617180400900999999992990999999919000199099119990999999093999099999009 -080808010904061010090904031010111200131313021400151515151400041617180500999900903999909099991999919299109991999990999999999900900099 -050108040900101010090900040611110400120211111300120414151300120314140400990990309999909900190999999999999119099990999009999990929999 -040108090900101010110500121313111100141313151600021706041600041717031600990990309999909919990909999199009999991900991999909999999299 -030608091004111111111200131402151600131717151804131719200500130119202004900002999099999999190909199909909991009900099999993999999990 -040108080900101008080900111012130900111415131300041606020400031717170500999990399999099909999991909991999091999001990990999919929909 -080801090900101011090900100412121204031314140600150214141604171805191900999999039999099999109990990991909919992199999990011090919999 -040808080800090204031000111212130400111206141400111516160500110116171700099999099091099911920999199999999909999990991090993999999099 -040808030910050808110910121313020910141413150910011404151604171718192006092999999999919009919909199999999910099909993999090990990000 -040803090900100811090500101206131404101515021600101515171600181801041600099999929990919999910990900909199099199999999911990309999999 -060801091004111212131400111212150400110502161600111718181604171719190300099009030090909999990999099991099909999919999999099199990929 -080109061000081109091000121202131000051214151004161614171804161614030400990999399991090919999991199099199909909091099999099920999999 -080901061005111213141004111516171704111802171700111920202100191903202104099900030999109091900991990991999909999019999990999999999290 -030806090400100811091200131302091400051315151400161615041400161601041400990992999091199999190999199099199909099090999999999399999909 -080905100400110909121300041415151304141415150100161616170200060318181800099090900999909909909999900999999909399919999911909991992999 -050808080804091011110100021213141500161206171800161219192004160319202004099909990991193919009919909090009999999990099999092999999990 -080803090900101011020900101012131300051414130100041516160400061716160400992999099999911999199990999091999991399090990990999999900909 -050809030400041009091100121314021100151516161700181816161700181806011704092999099099999900919900919990919909199099999999999039999990 -080910031104080909111100080212130100080614131504161617131800161604130500912909999999999991909991939991999991000099099009999990999099 -040408030600091008111100091208021100091313140500011313150400161615150400992990099099999990999909109909199991099999993990999099990909 -040403080800091011080800121311050200141415161604141717171700060118181800992990099990999909991909909900919999909009199999903099999999 -080809090400080810110400011010120200131414151500131403151500131606040500999099909999919990910939919909919099999999999929999900900999 -050802090600080810101100031210101104131214140100041215161600041718161600011999991099999929999999900999199009390900999999999099900999 -050803090200101109091200100413131404101513131600171718180100171706191904099199029199099999991990990999919009199991999093999909990990 -060809100500011112101304111114101300041515151500161702181800160319181804009999009093900099999991999091999999999019990919999999992190 -080409031000081109051200081314141504161614140200161617181800040117170600999299099199909990091999990009919919199999999009903990999999 -080809060300080810051100121313141404121515151404121617180200040119181800990999909299999909001999990909999999909099190191903199999199 -080601090900101010111100121314151100121604040200121705181800121703181804099990930999919900999990099900019999999099199909999999999290 -080805091000031102091004121213141000121213130600151516170400151501181904999992109999109099199999909999099909099091999919999300999900 -040808010400090909091000111111111204051302141500161317141800031717140600099999903099991999991999910999199901090919090999999990929999 -080909101004081109120300081112121300011114061504161617181904161605200200999909990999999999092909999990919310909019199919099911999019 -080809011000040409101000111212131300111212130200110406041400110503151600909990093999919999199999199999999099199000199999999991909219 -040108090910111212090910131212140415131604140417130204051717131818180306990900309999999909999019009990990199099199999090991999099929 -080109100600081109100500121302100300141515101604171715181904171718180400999099399990990901099999199011929999100999099909099990999999 -080309101004081111111000080204121200131414151604061417180100051919191900290909909999999990999910999019909990000919999913999909909999 -080910010400110412121300141412121300141515151600051717021604031717061600009990903090990999999990999991999999090991999919099999929909 -080605030900101112131304141115021304161115171804191915201800190115201800099290909199999009019999990099199091009099999199993999999909 -080809091000080409031000021111121200130614121204151617181800051901181804999999999990929909190919999199999990901009991109990399909990 -080808080400040909101000060909021100011213131100051415161100041414040300999099099990919999919909919919099399999099990909999002909999 -040408030400090908080200090910101000011111121200041314121200051516160600992990099099991999991991999919999399999099990009990990900999 -080309090900080810110200121204131400041516131400041616131400061701130500929999999199900990091999919909999091999099990999990399909909 -080806090900080810090400111110031200111310041200011410051200041516160200990999999999909990990999929909999900999999993199990101909919 -080104040400080910111100081212111100081205061300141415161300021716160300999999300091009999099999999999909999091909999909919999911929 -080809100500060811110100120213131400121513131604121517181904031518180400911090991999993991099909909919909999909909099999099090929999 -080909100400080909100400061111100100121111101300140215040500141616160300090099999999990999999999939099999091099190099199999199909929 -040804090600031010111100121010111100131414151604130217171600051817011600099099000999999929999999999190909991009191991999990939909999 -040809100300110205041200111313131200141415151200141416161700040116160600011299199999999991009999999091999999099919999190903990999999 -080106090900081011090904081012130500081014021504161617181500161717030400999999309990109099199999009991999991100909999991999920999999 -080808080400090903101100090905111104061213140200151617181900150118181904999999099099929999919999090909919091199019990190993099999990 -080109061004081111121000131114151600131717020500131717181800130304180400990909309990990909909991109999109991999990999999992099999909 -040808040500090808101100011212121204061314151500031614151700161618021700990990999090990990909939990901999091999999092999999919991199 -080806030904101112090900131114021500131116160500171116160400040118181800999200909990999999019900909999109999999999990190903099999999 -080910111100041212120500130402141400131515140100131515160400130304160600000990990999999990110999999991999099399990999990992099999909 -080803090500080809091000021112101004041313130600141415160100141417181804929099999999099919999911990991099099099091999903999099999090 -040808090300100811090400050612091300140412021300141412151300041601151300999290909990999909090990999999199099199999999011990399909999 -080803090600080510091100021213091104141413091100151617181800040401181800929999999099090919099990090109999999999199990109900399999999 -080409100300110209090600121213141400121213141500161717171500040105041500091290999999199901990999999999999990091909991999903009999999 -080909011004020909101000110612131400111515130500110415130400031617181800199901993999919919009909909990909999999999999999920090990099 -060809100300111110101200111102131200141516130500141718131904140401191904009299909999999999199999109909999901099919990090090399999990 -080808080500040209101000111109101000110612120100031312121400041516041400999099990990199991999999199999199909392999999090990999900099 -080803040900080804090900021011110600041012131300051415131300141404010400929999990999909919909919999990909011999999990009999030999999 -080909100400080904100400111213100500111414021500111414161500110601030400990099909999990909999990099909909991199999990991990320999999 -080909010500080910111200131314111504131304111600060217111600031818041600999999903090919999190991900999909999990109999199999109929999 -050808080800090902100300090910100600111213041400111215161700041201041700999990919299199999999990999919909019999910099900999309909999 -080404090300081011090900081111120200131414121500161414121500060104040500990299099999099999991999999090919099990999999911903000999999 -030808080900101011110904021213110100051415160400171718191904171706191900299999199999990019999911939091199901099009999909099099999999 -020809011004110812121000130612121004141515161600031505171600181818180400119901913999990919999990990190099999992990999909999909999909 -080901101000080909101004081112131404051502131604171718130600171719190300999999939999909091900901990091909909909019099999999199999929 -080406010500080910101100090910101204130214151600131303151700181818180400999999003099190909990999990910909990999199099999991290999999 -080509031000081109091000080412021304081415151600171815151604060119191900992999099990999999910990190991909019999199990990003099999999 -060808080800090310021100121314111104151605171804151619202000151619012004999990999099911902199901990990919999109991990909999939990990 -080808090900011011120900041314051504160214171504181814061500180314191900990999909993009991909991990099999010009199999909999999929099 -080806090900080810090300110410121200131404121200141415020400050116161600909999999999999909902999099009999999990901099199903119999999 -080808090200011011091200131415161604061718031604171719191904202020200500991199199193099990091909990090999999209909999099090990999999 -080909101000081109101004011212120400131314150600131316050300170218191904999999999990099090900939999919999900099999999009919992911190 -080808091000041102121004131405151504031617150600181817191900181817011900990999990990119091910919990290999909999091099909999939999999 -080809090300080809021000110512131000111212041400151515150400041601170600999299999999919909919999109909909099999910099999990309909909 -080802091004081111091004030411091000061213090100141415161700181818190500911909999999900029999999999909999009399900999000999900999099 -080808080904101112120400021112120100130414150500131616161700130306181800999009990091999919999991939100099999099909999990999090929999 -040808010900100808110900060412120900021312120500141415151600031404161600099999993990909900919999909999999119091909999990999099929999 -080909090900081010060500030410111200131304111400021304110100151515150400099999909999999999900999099209909990099999991903919919999909 -040803090900100811090904120802130600141414131300151617170400050117181800992990999999919009199911909199999999999190990099903990999099 -050809010400101009091100121313131300041414141500161717021500061703041500009999993099999909910909999091909999999991990919909909992999 -040809090600101109090100120413131400121516161404031716161400171718020500909090099990993999919999999909199009009999992999999919991109 -080808080400010910111100121310101404151306141400021616161600171805030400999999900093099991990919990199999909991999991999909920900999 -080909090600081002111204131415151600131717050300131718180400130118180400999999099099111001091999999919929090999999999090993999999909 -080909090600101004111200031002131200141414151500041616151500051601040400099090999999909929909991999991009990990199999999999300909999 -060408080300090208080400051011121300141411121500041611121700161601171700999290099990199901990991909999909900999099090999999399999999 -040108090900101008091100101012060200131312121404131305041500161617031800999990399999111999091999909099919999909999199990909091990929 -080803090904101112090900131313131404150205141404161616160600171701181900999900929990999990109999990919999199901900999999909300999909 -080304090600081004091100080412091100021313141100151314141100150416010500990999299091909999999990099199099191099999990999999030990999 -030809041000111209021300111414051500161414151504160617180100161919191904299099199099111999901909999999999090909991999003999099999990 -080909031000020609041000110512041000131412151500161412151500160112170400192991999990909919999990999199009999991999991009993909999909 -080808080300060205090400101111121204101013121200141516170400140118181800999299109990990991909999090919999919999919990100993099999999 -080804010500091010111100091010110600090412131400151616021700031616041700909990993099999999999999999990109900190999191911929909999999 -030808010400090408101000111102101000110512131400151612131700060412131700999992993090909919999991199990009999990099090999900999999999 -030806091000110812120400110812121300040214140500011514141604171717181600990092990091999999999999909910909019999999993999091199999009 -080801091004080811091000041211091300141516091304170218051300061919190300999009939999109991990909999919999009900109999909901999999929 -080609100400080811120300131305121400131315121400011604021700181818181704909099900999099990092999999999999900999099199091991909999990 -080609100400080811120300131305121400131315121400011604021700181818181704909099900999099990092999999999999900999099199090990909999990 -040808080800010909050400101010101100121213060200121414151600041403150400099999099099909991999999919909009909999909199991909990999299 -080809010400100211121300101415161304171418161300191403161304191905160600919999113099910991099909090099999919990929999999099999999009 -080809100300080809061100120402131100121213131100051415151500041604010400901299999999909999199909999991999919090199999199990930900999 -080805090900061011090400121212120300011314141500041314141500041316021700999999009090009990999999999990929399999999990099999991901119 -080806050900100811121300100211121400101504121400101617171404030418011400999099909099999990990910999919999999099109999190029039990999 -080904101100080612031100081312140200080415051604171717171600181818011600009199992999999990991900119991999990909019999990909939999999 -080906101004031102101000121213140500121213151604041713151600181813011600199902109999199999109999999999009999900099999010999939990999 -080309101004111202131005141515160100141717171804141919191904142020200600291901911991199099019999939999099999009999090999099900999999 -050809031000020811101000120813131404121215161404171819191404060119191400912990999991009919999990990999999900009199990099003999999999 -080309011000081109121004040213141000061513161000171713161600171718050400299999993991990091019909199919099919990999999099999090999099 -080909011000081111111000021213141004151616171704181616171700190305040600999999903991990919909990090109909999901999999999919000929999 -080401090904081011121300141405150600141416160200041716161800171703181800999909030990010990910999099999199999190999199099999999999299 -080404090900081010090904081112130500140215161600140617161800140301181800099999909999999090909909099900909111999999999019999309929999 -080801090900081011090904121212130600141504131604171818131900170318020500999999039999019099010999999999999090000099099999992910999199 -040108080900101108060900051112130904141516171700021515171700181818030400999990399990009999999900000919999100991999999999919990999299 -080401090900081010101004081112131300061102131304141115051600141117180300099999930990999091909991999091999999909919099990999199909129 -080801090904080810091100121314061104041516050200151517171800191917170300999909999999011999009900990090909909099999199991990999999929 -080801090904080810091100121314061104041516050200151517171800191917170300999909999999001999009900990090909909099999199991990999999929 -080801090904080810091100121314061104041516050200151517171800191917170300999909999999000999009900990090909909099999199991990999999929 -080801090904080810091100121314061104041516050200151517171800191917170300999909999999000999009900990090909909099999099990990999999909 -030808080400090904020400090910111200131310121200011310061400051516161700299099991999909999910999199909999999999999093109990990900909 -080401091000081109091000081111121000081306120500030404121400151617021400099999939999090999919909999900999999099099999900929919911199 -080809030400080809091000111112020400130514151500161616041500060117171700992999999099990990919999199091909900990919999990903099999999 -040104080500091011081200130411121200131406150200131416171700131403171700999990909090111909999909999999009090999999199919999299999999 -040104080500091011081200130411121200131406150200131416171700131403171700999990909090000909999909999999009090999999199919999299999999 -040604080000090909100000041111100000121202100000031201100000000000000000990990090999909909999999199991999919999999992939999999999999 -080609090300081011121200081302140400081314141500161317181804040105181800999999090290919999199999199999909019090909999909003999999099 -080309090500080404091000080211121300081414151600171414151800171706011804299999999099990990009919009919909999999999099910990039999990 -030809100600110409021200111313041400111313151500161616151500041717010500219099990999011999901909999999919990999999999909909030999999 -040108091004110808051204131414141500131316171700180216171700061919190300990000390091999010990999999990909999991999991999901999999929 -050801090400101011121300101014141300151614141700061618021704031818041700099099030999000999199999999009909999990991999919099909929999 -080808060900051010030900111004120900111113141404011516160200041716161800999090099999999999929999999900109999909009199199990990909919 -080409090904081011120300131314121204131516170200051518191900061501191900999909009999992900099990990999919011190999999109999399909999 -060809090300100204111100101213051100100414151500101616151500171717010400919290199999099991999901999901009999999919999919999030999999 -030808080904061010110905121202131404121215161404171718191400171701201400299909919999990009109999990991099901909991999019999309999909 -040108030900101008090900111212020400111212130400110604141400051516141400999290399999999991019909909999199991099900990999999999900099 -080803040900080210101100121210100500041313131300141414150100061616170400929099999091990991999991999999109999990991999903909099999009 -080809031004080809101004111109021200131309140400151617181900061616010500999909992999999090991999119909999900099019990910909930999999 -080903101000111212121304141515150200161617181804161619191800050601190400092990099199999009991999999090919901909919999999900399999909 -040809101000111209101000040213141500161613171800161617171800030506011804009999999990909900909991109919109999999999999999920039999990 -040808090300040206041000041105121200131414120100131414151500131616161500091299199990090991990999999010999091399990999999999999999909 -080809091005030811061004121314141004121502141004121617180100121920202000999909909992990091099999990919999910009919999093990119909999 -080803090900080810060900020411121200131415150500131615151704161601181904929999999999909919090999999100099999999099091199099300999900 -030808080400090904021000111213131400151616040500151616171700150106171700299999991099090909910909999901909990999999990909993999999099 -040809011000111112121000111104131000040614141400151502051600150304161600009999003999999999919990909009199999999919099109999099929999 -040308080400090910080200110910061200111313141200111313151200051604010400929990999099991999991999999900099090099999999991990030909999 -050108080600090910101100090910100400121213141400151202040300040416161600999090309999990999990991999091099999990910999999900192999999 -050808090400100204031100101012121100131412121104131515161700130115180600991990192099099991999999999919999919909919090900993999999009 -080804010600080804090900041010100900111103041200111314021200051516161200909999993099999990009999999009019999999929999091990119909999 -080804010600080804090900041010100900111103041200111314021200051516161200909999999099999990009999999009019999999929999090990119909999 -080804010600080804090900041010100900111103041200111314021200051516161200909999999099999990009999999009009999999929999090990109909999 -080804010600080804090900041010100900111103041200111314021200051516161200909999999099999990009999999009009999999929999090990009909999 -080804010600080804090900041010100900111103041200111314021200051516161200909999999099999990009999999009009999999909999090990009909999 -080808030400090510111204131415121200161602171704161618171700060118191900999990992090919009199909999901909919909999999009903909999999 -080806090300101011121304141516160200171716181904171720201904050120201900999299001999991009091909999909919991109919999199003999999999 -050808080600090910041100120313111100121202141400011516141400041717170400099999009099990999099929999990099911999999993119990990909999 -050108090400101011121300101014140400151502161604151506031600171717181800990090309999000999990999999191199919909992999099909999999099 -080109041000080809111000120609111304140209151300141617181300140304051300990999399999109999990909990099999910099199991900999009929999 -030809090500040810111200020810130600141510131304161617181800160401181800299999990090990999909919999199909110909919999009990399999999 -080109091004081109091000081213141504121216021700181919051700061919031704999909399990199999100999900991999901190900999999909999999920 -030808090900041008090900050602111200131313141400151515150400040116161600299999999990099999109990909091909991999991999990903099999999 -040808080800090410040500111213131300011212140400030602141400151516161600999990909999999900000909999990909391999999999019929199991999 -040801090900060810090900111110121200051110121200131314021500031304041600099999939999019909919999999099999909999991099119929090999909 -080409050300080210101000111106121200111113140400151516170400151501171700990999009290199991999999999990099990099100999199999390999999 -040108080300091008081100121302061100141516161104171516181800171505181804999290399991999919199911999099099009009999090999999099999990 -080808080500020904100100111212121304141516161300171516181800030619181804999099191991903919909999990199099999091990999099929099990990 -080104040400080909101000041112101000131312120500131302060300140415151500999999300090999991999991099009909999999910999999900192999999 -080804090600080810090200011112131400111115131400161704131400041717050300999999909099911990191931909990999999999009990999909992999099 -040804090900101112031300101212140200101516160600171716161800171701051804009999092199999990991909919909109909999999999090999309999990 -040809010600080810111200130214151500051614151500161617171704031818180400019999913099910901990999099019999999999999099999029900999999 -060808030900101105120904130214151504161718181500161618180100041919191900992990199999990001009990990019999919099999999093909909999999 -040401080800090910080800090411120600021311121400151611121400031717120500999990039999109999909990009199999199999199991990929099999909 -080808080500090909100100040611121204130211121200031411151500161704151500999099900999993999919990190099999019999199099999921099919999 -080901100000080910100000080304110000081212020000061212040000000000000000993999999999099999919999099929199091999990990999999999999999 -080809100400030209100400061109100400121209131300121201041300000000000000999092199999190999999900099999909900999930999999999999999999 -040809091000010809091000040802031000040811111200061311141400000000000000019099999993999999199909999991299099099999090099999999999999 -080109100300081111101200080411021200131313061200141505041200000000000000990999309290999990999999119099099999990999990090999999999999 -060408080400090508080300090910111204011314021204131315151500000000000000909090999990999999902999090900999391109919999199999999999999 -060808030900040808101004111212130200141212131304151501040500000000000000099299999199999009091909919999999091900930099999999999999999 -080909090900080310060400110210121204131310121204131405010400000000000000999999909092909919999919990919999911909993090099999999999999 -050808080900011010090900061010111100041213111400150216031404150417181400099999990993999999990909099991909919990199990199099129990199 -050808080900011010090900061010111100041213111400150216031404150417181400099999990999999999990909099991909919990099990199099129990199 -050808080900011010090900061010111100041213111400150216031404150417181400099999990999999999990909099990909909990099990099099009990099 -080909100300080909110500121212130200061415151604171415151804191919010400099299991999990999019999919990919909100999090999099030999999 -080809101004011109101004121309021404151616171405181616192000181803210600901909999993199090919909900009199999900991999990999910999299 -080109090400081009091100041213141100151513161100150213160500030613170400999099399990190990199909099999099999999199999190929999990009 -040808030900060808040900100411040900121213140200011313151500051616161600099299999990909999099909999090019991199099993999990909909999 -060804090500010810111100121213111100121214020400151616171700150416031700099099900993999991099991199990199999090901999999999999990929 -080809090900040804101000111105101004111112120200131406151600130103171800999999990999099900999999090999909919190199199900993991999219 -080903100600081111111104121302141400121516170400121518191900051501191904929099190999999001999991099991999919099990990109909399999990 -080909100400080409110300080212121204131314151600131317170600050117181800999099990999909990902911990199999990099909099099903999999099 -080909011000080909111000081204041000061202131000051415150400141415160300999999993999901990009909999099999991199019090999999999999129 -080509090300080210090400081111111200080604131200040414141200151514010400099299999999110991999909999909199999999901999990900930990999 -040106080800090909080804101112131300051114141300151114031600021718180400999990309999909091009909999090999999999999091999919920911999 -080808010500060910111100121314111104121313151500041617041500031818180200999999093090909990099900990999199999999009990909999991929919 -040801091000111213090400111213130400111202140300111215150500161606151700099099039099909999999901909999999919299911999999909990990909 -030808090200041010111104121212111100131314151600131314170100060514180400291199999190909099999999999990919999199991999003900909999909 -060108090400101008090400101008111200131408151600131702050300171718181804999090399999099999900999099019909990099199999109999192999990 -080903101000081105101200021113141204151113141200161713181204061913010400129999999999999919009909990199999999991990991110099930900999 -080809090300080809061004110512131000110414131000111516170200110116181904999999999299990009099909999990999900999909190119993911999910 -080509090300081011121300081402151604141417170600181817191904181801191904999999090290009999901991110999999999099199999109099399999990 -080609050300081009091100081002121304081414151300161715151300041801041300099999990299991999199999190909199999990099990090990399909909 -040809030600100811041200100213121200101415161600101417161600041717010500912990999090009991999991999991099909999919999919999930909999 -040804030900020808100900111212130900111212130900141414060400050115161700999990902991919919999999099999999999091099999999903000999009 -080309100500081111111100121213021400150413131400161616161400040406010400921099991999999909919990999999199099990919999990900030999999 -080808090500011004111100121314021104031515151500161617181800191919061804991099101993999999919911190299099999999090999909999009999990 -050608030900101108120900131408040900131515160200131517181904130118181904999990092990991990999909099990919091199999999099093099999900 -080109090900080810110400120413131300140415150600141415150500021616170300999999390999090910009999999199909099999999999090919999919129 -080403090600100411121300021111121300141415121300141415121304051601171700099090920990999909999919999199999999099999999109090309909999 -080904100600081112120400131312121404011515150200161717171700161603180500909099090990990909999991910919919399999999199999990910999299 -050808090904040808090100101112131300141512131300161512170200040318170600099909999990903990919909999009999990990999199991909990992199 -080809090500080810090100111112131300141412131504141412040200060316171804909099999999093999019990999909919999909999199990909991992110 -020809090904101111120100131114120500151616121700031618121704191919060400119901919999913919099999909190999999992909999990099090999099 -080809100500110802120300111113131300141414150400011616171704061819171704991099911999992990199999999901999999099910993999090999900090 -080803090900100804020900101106121200101304140500151516171700151501171704992999999999901990919999099909199090099091999019999399999990 -080109101100080812021104131404151100131616151100131617181904130617030500991999311999199090919909909900999999999901999990099920909999 -050408080800090909100600031104101200111113141500021617181800161601181804999990009999999990990929999990009909091990999109919399999990 -080803050400080809101000020909111100121314111104151516161604151718010600929999990099999919990999099199999119909919099999090030990999 -080809050300100909111200101313141200101313021204151617181800040601180400909999990299999999009999099999999091109199990109900390999999 -080805090900080804090300041011021200131313121200141516161600141704010600990999999299999900019990919990999999990001999999990930990999 -080904101000110206121004031305141400151316141400171718191900171718011904109991190999099021909999999990999019990910999919999939999990 -040308090900101002090900101011120500011314151600171714181804170614191904921990999999119999999990099919009309099099999909099909909990 -060108080804091005110200121213141500121616171504181616191500180419190300999900399090091991911991199999999099000990999999999992990999 -040108080200091011111204061311111200141516031700181816191904051816191900999190319190199000999999999900919099290999999909009999999999 -030808040900101008020904101111120900131111141504160517181500191901061500299099999999010099919999999999199091000019999990909309999999 -040405010400080809090900080802041000111112101000130412141400060312141400999990003099199999900991999901999999990990990999909999992999 -080804090900081010090400111111121300061414150100031414160500171717020400999999009999909999090999909090099991399999999910929919999109 -050808040900101011040900040411110900121202130900121414141400030406011500999090909999090900999999999991199919999991099999920030999999 -050809090904080804101100121313141104121315151600120215150100031718190600099909990999909909909999990999009199099199999993921919991109 -060809011000111112131000141115161004170502160300171818191900171818041904009999903999001999999909110001999999999919299919999999999090 -080910020400030605111200131304141400151316161704151516161700181818011700111992091099900999919999999990109909909999999099999039999999 -040801091004051112091004131312091000131302141000151617141400030618191900099909039999199001999999009999099919999919991199929009990999 -080309090400081009090400111012061300141502051300041515161300171717011300929099999999999909190900909991999019090999999910999039999999 -080910101000111112120100110413141404151515141400031602171804051616061900009990990999993999919999190901999999999919992900099190909909 -060305080900101112041300140212151500161616161704181819191700181819011704990090299091990919990910999919099999000991999999999939999990 -080809100600050804110100121213131400121213151400161604021400031717181404900099990999903900919999919999999999199091999909999919929190 -080601090900101010090904111112121200111102130400141414141500161603050400099990939999909091099999999999909911999991999990990200999999 -080603090900080810101000111213130200111415150500111615151700110401040400092999999199999990991999919901909909999099990990990300999999 -040408010500091011121200131014121200131014020400151014160300061717161600909990903090009909999999199999909991999991990999909092999999 -040408010500091011121200131014121200131014020400151014160300061717161600909990909090009909999999199999909990999991990999909092999999 -040408010500091011121200131014121200131014020400151014160300061717161600909990909090009909999999099999909990999990990999909090999999 -080309010500080409091000081111121300021104141300151617171300061617170400299999993099990990109999909199099199990900990999909999999909 -030808090904100808090900101112120400101113050600021114151604171801191900999902999999909999099999909990999999991900099100011390919999 -040408090900100308020500111208131300141414141300061515161700041515011700909990990999910902919991999099999999999990190901999939909999 -080401050900101010110900061212121200021313130400141515161600031715160400099990930999999999100909999991909199991990991999991999929909 -030809100500060809090400020811121304141414141300151516041300151501171700299099990999999909900919000190999999999019999909999390999999 -080909040300080909101104080602121204131414121200131415160100051718161600999999990299911099199909990091999999999990990113999099900999 -080109060500080810111200131414141200151616161600150417020400150417170300990999309099900991099909999019999999999091999910999999909929 -080808090300051011021200131306141200131315161200171715161604041701041800991299919990019999019999909999199901999999999099009390999909 -050804010900101011090900101012130400040212131400031512130600151504161600099999003999909999910999199009999919099199099999929909999099 -080209090900101005110300011006110400121304141500121616170400121616171700119991990299099999999930999909009099099009999999999990999099 -080805010900101112130904041415130900161606130900160217031800191919181804999999003990090000999991199910999999999199099929991199999990 -080808080600040910111200131314150100131315151604021717171604181818030500999999909090090999009991139999999999009199991999019990999299 -040808030900100808090900110212120600111113141500161616160500040117170400999990992990999990919911999999909990091909999990903099999909 -060408010900101010110900121314040900121515021600121715181604120318180500909990903999901999099900909999919991199990999199092990999999 -060808090400030808091000111112120500131114151504130216151500131718010400099999999099990929000999999990999999909109999919991130901999 -080809030500100811041200100213141504101313141600101718141600061918011604912999999099909991090991900999999099999919999010990939909990 -040108080900101108080400121313131300121202141400150506141400151504160300999090399091099919999909999999999911990009999999999919990929 -080909061000080409111200130214111200131414111200130415111600030517010400999099099099909909999919999919999991099099999900929030990999 -040809101000110809100300110809020600121213131400121213150400040116170500099999999299999999919900999909109999099999999100903099999009 -080809100600111111120100040213121200141413151500141413161700030413050400909099900999993991199999199019909999999999999900920990999099 -080910100600080910101104040912130100041402151500051416151500031417181800909999999090990099119909939991099019999909990999999099929099 -080309091000081111111000081213051004021415161000141417181800190604011804299099999999999990999990900190999990091990999119909039909990 -080809100400010811020400121213141504120616141500171717140300181818180500911099991993090990019999900990999099999909999992999099999909 -060808010400090808101000090411111100091212130200091412151604051414170300999990993090919999199909999991999991199999199091009919999929 -080409100400080802101100120306100100121313101400151316161600040517171700901999919099190919999929039999999990099999090999909990990999 -080409051000111212031000131414041000151414161004151517160200060117171800090990909990992909999999909099999999909099199109903991999919 -040808010900101008090900051111111104120213141500161713181500060313041500999990993999919900199999990910099199991990991990902999999909 -050809101000030809100600040809111200131402151504161717181800041717011800099999999992999999900991909091909001900999199909909939999999 -030808091000110808120400111314150100111314161600021306171604041318180500999092990099999999009999939999199911991990991099009909999909 -080801040500080909101100120909101300020414101300151514041300031516060400999999930091900919999999909100999999991990999999999990920099 -080404091000111202130300111214141504111214141500011216170600181816160500099190901299919999199999990999999099099919993190990909999909 -030805090900080810090900020611120400131313141500161617181804191901181804299999909999999919009909099190009999099919999009090399999990 -040108080800091011121300051414151304041414020600161617181800161617031800999990309990090991909909990999099091999001099999999999999929 -030809090400100809090400021112121300141112120500061516161600151501170400299099999991999919090999909199999199999109099199909309999909 -050808080400091011031200101002131300141414151604171718190600171701191904999990909099092909991991199919999990009919099009999399999990 -050809010400041010101000040211111200131411111200151416161200151403061200009999903090999999991991919019999099999999990990999999992909 -020808080300091011121200011311141204051511140400161611140600161717141804199291999991109999999931990999999000099099999999999990999000 -080801090600080810111104121313051100121313021400120415161400121718031404999099930999009099199909099999999991099991999919990199909290 -080309090400081004091100081212041300141212061300140215161300051715011300999999299099900991900999999099999999999190990910991939901999 -040801040900080810041100121210131400121205131300150216161700150616160300099099939099199991900999009999999909990199999191999992990999 -040801040900080810041100121210131400121205131300150216161700150616160300099099999099199991900999009999999909990099999191999992990999 -080809090500080809091000061111111100040212130100031404151600171715151604999999999099990900099999999911999091399190999909921999999900 -080809051000080811121004041312121000141313060300011516021704181818191900990999909999999090099999909090999099999900293919091111999999 -080809051000080811121004041312121000141313060300011516021704181818191900990999909999999090099999909090999099999900299909090011999999 -080808010400091011111200091011130400091415161600040217161600031717050600999999903090990999990990099991099919999199990199999900929999 -080801091004081111120400131111061400151602171400151804171400051818170300999009930090909909909999999019999911199009999999909992999999 -080409030400100909111100120205111100121313141500161617181500161601061504092990999090999991999910999999099190999199999100999309999990 -080609101004080809101004111202131404151617171800151920170300150121212105990909099999999090909911110190919199999109299999993099999990 -080902050300080910101000080906041100080912121100131312120400130104140400910999919299999999999999999990099999090199999090993009999909 -080401091000081112090600081212131400051504161400171718021404171718180300099099939090019999919999999009199909099091999919099999999929 -040809010400101011111100101012131400050413131400030602151400161617151500009999903099999999019990909099999909999910999999920199991999 -040808010600090908101004111212051000111212021300111404151300110316171300099999993099919090109909999999909991999991990099999919992199 -080808010400030909101100120904041100121202131100141414141100061515051600999999903099901929909999999990999911199990999999909090999909 -080801090900101010111100121204111100121313021400151313061600041705031804999999039099919990999990999909199999199999190990900991990920 -030808040900100808040900101011111200130214111200051516171200061801171204990992999999990999090999999919999011990991999010990399909990 -050108090900100808090400111212121200110204060400131415160300131717171700990990399990999909190999999910909999999190990112990999999999 -050809090904101010110300120213140100121215141404161717180400161717190600909900099999912991999991939991999901900900999990999909999909 -080605091000111103121000110204121004131313121000141516171700041818011700090090999999299999999910990919999999990910099019900939999999 -080808080500091004040300091010111200091311111200091414021200040115160600999099000999999999992999999909999099999990990991903110999199 -080808080400010910100400111210130400111214130200110615161600110503171600999099099993190990919909999999909909199909199099999999909219 -030808090400011008021100121314140500121306141500121616161704121818180400290099999993910991910991999999999009099099099999099090999999 -080808080500040409101000111109101000121102130100120614150400161616170300999099990999919900999999999091199909399019999900999199999129 -080910111100030502111100041213130400141413131500061416161500171701160400119992919999009999199990909009999999090919999999990390999999 -050801091000110809091204130814021504130616170400181816191900181803191900999090939099199009990901190909109999990991999099999999999299 -080808040904030502060900101011110900101011111200130414150100131316171700999002919999009999199999999999909909099991999093999009990099 -040809101000011111101000121206131300121214041300150216160400150516170300009999909993909991090999999999999900990199099199990999999129 -050809101004111112121204111113141400011513160200151513170400061813190300900900099999099099999991199919919399199991999990990919909929 -040108090600100808090400101112121304101405121300101515151300021617180300990090399991990999999900900909999909999999990999919999911129 -080903100400081110101200081302141204081313150600161717171704160118190500929099199999199999199999100999199091990919099999093099999009 -080401040600080909101100080409121300021414151300041614151300051603151300099999930091990999909999009109999190990999999099999299909999 -030809100200061111111200131314141200131315141204051617181900041717011904211199909190999999999999999999999909109001990900999939909990 -080309090904080810110200121213140100151515160400051717181800061717041800929909999199011990199999139909099999099990990909999909909999 -080909101000050911120400011314150400161314020400161314171700161306031700090990999999100991199939009999999091099991999999999099999929 -080801091000080809091100041213141100151505141100150216161600060403170400999099939099199901099999099910999999999199999199900910999299 -080609090400080209091000081111120400080313140400151513141400151513010500999999099091190999910999099999199290999999099999999930990999 -040808010400090908101100090405101200131314151200131316021200031716061200999990993099001990091999999999099900999999999911999909921999 -080909100400080811110300121311111404151506161700151518161904050118180200999099090999999990992909990099019909999999199109003991999919 -080301040500091010101100121314151500021614061500171814191904171818191904299991930099990919190991999119999199999990990009099999999990 -050808010900100808090904101112130400101114141400031502161704181916160600099999993990909099019990909999199999999919099190021999919909 -040104040800091011110800121305110800121314140800151314140600021616160300999990300991099919999900909999999909991999099999919999919929 -060809091004011109091000041213021004141513161000141713161800051717160300099009099993199990919900990909199099999999999991999092909999 -080409090300100509091100120402111100121314151500161616151504060117171700099290999999099909199990099991999119991999999909003099999999 -040808020600040808090300011010111100121013051100141415150400161615150400091099991990999991912939999990999090990909999990909999999909 -040809031000061109101000121309020500121314151500121614151500120414010400099299099999099909919999109991999909999099990919990930999999 -080109100400081109121300141115150500141115150400140616020400141616170300999099390990090999900901999999999999099991990910999999999129 -080902101000080311111000080611111200040413131400151516161600151504010500119999919992999999990990999099109999999091099099999030999999 -080808090900101111090600100204121200101314151204101616160100030517180400990999999999900999909919099919999911009991999993929909990009 -050304080900101111121200101111021300101415151504061617181804191616011800990090299099999999990999119999919099909001999099009939909999 -040108080500091008081100121313131400151602141404151718181904151717060300999990399091990910909999999199999110909919990991099992999099 -030804090400100804091100100812121300100614141300021514141300051604011300909992999099999999000909999999099909091999991199990939900999 -080910010600080511121200131411121200041411020400151416160400150316161700009999903099099999999909199099909901999991990999999990992909 -080309101004080811110200050411111200131415161600171418161600171406010400921909999199099999991990919099199000999999990909999030999999 -080805010600090909091004021112121300141404151604031417181800191919181800999999003099990019900919999919009990909999092909999099999999 -080605010400080910101100081212131400081215021404161617041400161818031400999999003099990990919999199991999091109909999009990999999929 -080805010900080810100900111213100904041214151600171706181600031702191604999999903999099999999900090090109999099901999999929919991190 -040809091000010809091000060804110400120804110300051313111400041302151500099099999993099999009999909099999090999199290999999191909199 -030808080200091011111200091011111204091013141500091617181904050617010400299199999199999999999999990990919900199901990090000930999999 -080809090900081010101000031104120100111113121404021516121700061505120400909999990999999999909929939990999991001919091199909990990999 -030808050900060808100900111110100900120213140904121516171800121501040400290999999990999991999999999910999911909091090910999300999999 -040308090900100508091100121308061100121302040400121415161600120117161600920990999999090909909999999991999110999999091099993099999099 -080808010400060910111200130914111500051616111500031602111500171718041504999990903099910999199900909091999999999919999999929199991090 -080109091000080806111100121212111104131314020400131315161704181819030500999099399099999991099999990901099991099991999910009190999299 -010808060000090808100000091110100000091104040000021213030000000000000000990993999990999999099990999990099999991999991129999999999999 -030802091004110808121004131314151004131616160100171718190500171718200600991902911991999099919990900990199999399909999000999909999909 -080806030900080810040904110412020900111312141400111512161700110105171700999299909999099090009999119999999919999190990900993999999099 -040106080800090904080800090910111100120213131300141515151600140317050400990990399999999999009990099199999109990199099999999100992999 -080609010400080909101100121210100400021313131304140315151600171815150500909999993090900999999990909999199199901990099999912990919999 -080801090900081010090900111213131300141206150400041202040300051216161600999999939990909901099999999099009999990900999199999192909999 -060408080300091008110400091202130400091414151500091616151500051601171700999290099999990990109999009901999099999199999909999309909999 -080109101004081111101000081111121304081415120200161705121800160603181804990909309990999999999999110990919099990009199999990999999290 -080509011004081109121000081111131000081413131000151502161700041806031904999909093999990999019999099999999009999919999011990091909920 -080801060904080410110900121212120900131415160200041718160500171718160300999909930999911900099999999009919990190009099999999999999929 -040808080300090210111100121310111100121415150500120415151600171701040600999290199990999991999999099910999019099999990990909300999999 -080109090904080810110600121310141504121210021504161610170300161605181900999909309999100990999999000909999991909991999099999912990919 -080409090600100409110100121304111400121313021400121515051400120316041400099090999999003909099909919999999991199919999990992099999099 -040108080500090908101000111111101200131415161200040406021200031717171200999090399999119990990999999099199009990001999999999919929999 -080805090900011011110900041006111200131014151504130216151500130417180300909999099993099999990909999990909100909999991199999199990129 -040808010500090808101100091204131100090414131100030402131100151515130600999990993090900990019999999909999991999919999999920190999999 -080409010400080509091000081112121300111114041300061502041300161616031300909999993099990990910990999091099999990919999109991999999299 -080409090600081002091100121013031400041005041500161617171500161601171500999999019090999999120901999099909999999100999190999399999999 -050801090900100811121300141414140600021515161600170415161604171703180400999990939090990990109999909199099199990999990999099209999909 -080909031004081112121000131415121004161617170200161617171804060119200500999209099999999900999900090999019999999999199191003099999009 -060809010400101109121300100414151500101414151500161717020500031717181804099999093090001999991990099999999999999991991910929999999090 -080808050900030402100900041110100900041213130400141413131500141616010600999992910999099999199909909909199009099999999090999030999999 -040804010900101011120900101013130900021415040900051415151600031406041600009999093999119999909999909190999190990999999990999099929909 -040604010400080909101000110909121200131314121200051315151600031717170200999990003099999909919909999990999900999990190999999991929919 -080209090904081011110300081205131304141516171300181919202000060119202004919909109299999991999990990019099000999190990999903999999990 -080903100400080909111204021314141404151516170100151516171700061816190500929099990991990019990919990910999911399999999999999909900909 -080904010600080909101104121212121300140215160500141717161600141717030400999999903090910099190999999091009919999199999999999990999299 -080409010600080810111200021310111200140415111200140416041200140316160500909999903099110919999909999109999990999909990909999990929999 -040104050800091011110800120411110200121313131400120403151500121616150600999990300990190900999999919999019999999099199929999999999009 -030809091004061109091004121213141500160217171700161819202004162101202005299909199990999091090999909910099919999991999019090399909990 -080801090400081010101000020411121300141404151300161703051300161717061300999099130999999919099990009190099999999190990299999999999909 -030808090904060210090904111213141400111516171405111819202000181801202004299909919990199091909991999991099909909010990909999399999990 -080309101000080409101000081109121300051402150400160417150100161617170600929999999999999990990900909991009009999919999993990919990909 -040809010400101009111100120509131100020409130600141515130400141403130400009999993099119919999990099199909909991909999990999999992909 -030808090904100806090904021111120500131114141500131617181900130120202004299909999991099019909919999999009199999990091000993990999990 -080409011000081109091000081212131004081214061500051614021700031819191904099999993990091999909999090999019999999999190001999919921990 -080309101000080802101004111112121304111105141300151616171300060416011300290999909999199099199990990999199990999991990900900939999999 -080809090300080809091000041112131000141505161004141718160200060118160400999999999299999990909900099909999909909099190191903990999199 -080809090600040209031000111213041004111414051000111414151000110116161600999999092099199901999910090999999999099999991900993099999999 -080808080600040910100100111210100400111313021400151513161700051504031700999099990990093990999909909991999991199099199991999929900999 -050808080400010910101000111204020600041314140400131314151500161616160300099999191093999990019909909099199909999991099999999902999999 -080109090900081010110500061004041200131313131200140215151200041615170300999999309090909999909900999919999999091999991199990919909929 -030808090900100808090900110512121304140204150600161617150100181818150400999992999999909919990990900199009199999109999193999199999109 -060809090400080809091000011112040200131314041500051414041500161616031500999090999999191991091939909900919999090999999990990999999929 -080808080300040609101100051202041100131212141100151616141700041601141700999290919999000999199991099099999090999199990990909399999999 -080404090900081010090900081006051100081213021100141415161600141401031704099999909999909999099909999999099011099191999199999391999920 -080801090900081010110400061010110400040212111300031414111300151405041300999999930990990909999999109999999011099199999999929009919999 -080801090900080810090904110212131404031512131604171812192005172121210600999999939999109019909910900919909999902190091999099900999999 -080409010400081009111200081009061300081409151500141404160200040316160500909999993099901999901990999909919099999999199991909090992999 -050809101000011112101000111104041300140215151300141616171300040316061300000999009993999999099999999199099199999190999900909909992999 -030809090904101011061200101302141200041516141200171616181800050401181800219909919999909990199999199909999901090990990999900399999999 -080809090904080810111100011213140600050413151600171702180300171919191904999909900999199991109939909909999999190911299919999099909990 -080109091000081109091000080612131404080212151600171712040500170318191904999999399991090999099909000999909199099190099999999099929090 -040808030900020808100900111212130400111212050400141515151600060117161600992990999991990919909999009999999199999190090999903099999099 -080409090300080209051000111212121300141415151604141415171600061801191604909299999999190901990999909091999909909999999909990309909900 -040108050400091008111200131006141400131015141400161017020400161617170300990990399090000909999990999999999911990991999910999999999929 -080909100400080909111204131302140300131315151504161616171700060118190500990099999999991009012991199999999909901990999999903099999009 -080809101004050811101000061213140200011516161700181516041700181504031700909900909999999999090909119901919319999990999999999099909929 -050804010400090910101100090910101200041313021400061515150300161616171700099999003099999999990990919999919091199919999992909099999099 -030801090904101112121300021414141400151515151600171818061904171718050400299909139091999919190999999119909999990990090999099990999099 -080903101004111111121200021314121200131314140400061515150100041617180500129901999099999919999919099999999919090991999993999909900009 -030808080200090909101100051212101304141212101500161717101804061717011804299199999199999999091999990099919090199999990900009939999990 -060408080904100408080900110212131400111112151500161712151800031712010500909900999999999900900991909919909991991999099099929930999999 -030808010900101011090900101002121304051415121600171718121604171706041600299999913999999999191999110900909009999099999909099009999999 -080401050900101111121300141515121604141506121600140217181600140418180300099090939090900909190999990990999999999199999119990999999929 -080305091004111209090400130214141500061617171504181817170100181819191900290001999099099910999919999910999919000099999993999909999999 -040601080800090909080800100511041200101011111200131415021200130416170300999990039999909909190909099999999999999091990919999199990129 -080401090400081010111200081010060500131415161600021414161704181818031700999099030991900999990999099190999090991999999990019999999299 -080809101104080804050600011212130300141415161700141515181700191919021704900009990099099990999939929919199999999191999999999119999100 -080103090900081005020900081111121200081311121200141506161604041718191904992999399990901991919999199999999909999099090999000090990990 -050809091000111111090600121212120100020404131300141415161304031718181800009099999099909999909999939190099099991990999909091099929999 -080405090400081010111100081010120100031314140600041314151500161302151500999099000999999999909909039999199299999990099999909199901999 -080805091004080811120400130211110600131414141400131516170400031501181800909009990099999990909919999910909999999091999910929309999999 -080409101003080909101005111204021306111204141515111216171704041201171718099929999990999009919990900999199990199999190019999399009990 -060104080309101011121314101015160214171715181814171915202014041915202005990920390919111999901999091099999990999099999999999999909090 -080109061004081109121013081414121015160517121018021919122004041919032020999099399901990099099909990190990900991999901990999999909299 -040808010910030811121306141111121515140416121515170216120404041818181805099909993009000929999999909999999991991099001199900999999990 -040801090910111112090604111113141502161704140518161719191818161719190320099909039009019999919990911000991999909999999999999999190992 -060503080909101011080804101004040212131404151515131616171718131616011704999090029999919099991990991909091999999009109909999939009999 -080809090104041009091111121314061111151414161616050304021717181919190417999999099309990900909990999099919090999991909909902919909990 -060809090110110809091210130814151210161617171804161617021919052021040319999990999399991009019990999099199909009991999991990999900092 -080808080904040610111112051010111104031314141401151316171717151502181904999000099099909099999009999999909999932999199099999010991190 -030808040406050808020909011011110909121311141516121704181519121717181504299999990000919999919939999919900010099990900999999099099999 -080803090906080810101011041202051313141415161718141919191920212121210104992999991909999990199090999091009999009010909999999093099999 -040608040910110408121213140208121204151508161616151718191901031718191905909000999909999000999901999919900991999999199999329999990090 -080910111112040910111112030904131412151617141401061817171919040220051919009990999999909999909999090299099199939191090999991199901909 -080109101004081109101205131409151515161609020617161604181804041919181803999909399990100009999909099909990991099991909909990999909992 -080903051011081212131311080602130411141515151511161617181904161617012004929009199999999999190999999001099999900009199991099930999990 -030804091010060804111010041202111113141215161713140518181913140418180113290999990990909991999091999091909091999991099091099993990999 -080804090504040803101111121314101111151514101604150206101718191919190118990999990009999900299909999099909919909199099091091913999999 -080801090906041010090902111010041213141516031213051716181213171704191204999999039900919199999109091000999999290099999990999909099099 -080804010909080210100909031110100512111113141516041713060418191720202020999999103999990921990091999990990999009090909999009099909999 -080109091010081109091010081112121314080515161704031802161904181820162106999099399999199999199909900901990990099919099999029190991990 -040809091002010809090311041212131111051212140604041516161616171718181804019119999913999990902909999999099099099009909999900099099999 -020809090106100409091112101313131112101414041512031414161712041819161605119991099309991099999999909990009999992999099990999999000099 -080509090904100411111212130311111414131302151414011616171806041916202020099990990909099909999029999999099911999991093910990909009999 -080809011004080811121013141515121013140216121013031704040613171704051819909909903999900009999999199919999990999100999999029999090900 -050408040604090908101011090908121013141414141313030402151617181818040117990990099009999099999990090999099999199991199019029103999999 -080909100304081111101213081111140415081616160502061718181818192001212121099999999209990199999199909990091099909990919099900309909999 -080809100611080412100511131414140211151616171718191616170320040121212121990099909999099909090999911091991990990999910999203099999999 -050804090910111112031310111112120210041414151515041416161616061704040118909900099999929999990990911999991090999999910999990003009999 -040108080808091011121313091414151313091414040416091702181816051704061803999990309999090991909909099999009999999019999919109909290999 -080803090906100804090904101112120213100514151613101714181913040414180113992909999990909990991090901999999999099090099009109993990999 -050804010909061011120909131313131415161602171418161617170418190403202020099999003990901990991999910091990991999999999999009299009999 -080609101003111209101013141215021313141616171805141616192004140104202021099990999929909909909991119919909990909990990990993099099990 -060808080104090909091010111112131414111516041414151517031802051920212121999990909309990999901990099900999999099909919992999091100999 -080105090404080810091112131414091515131414041515131602171806161619192003990099399909900091099909999999999999099919090900099199999912 -030808090910110808020910061213141516040517041518191917171520191901211520999992999991919099919000199991990999900090999099999309999900 -080801090909081011111212131011111212131014150403161704180519061717022021999999930990999909999990909991909991990001929990909919199911 -080309090410080409090611081212020411081314140411011516170518151519191919929909999909990990919999109991999099099019903190999909090999 -080808020109030410111209131415161609170518161609171919062020041919212120991992991399009099911900099009999990999900909999999999909990 -080909100106050909101011041202041314151617171314151817171319150304201919091990999309999090190009099901999099999999999199092909999099 -080808091010110212091001111313041415111304161617030406161618191919190504990199999991119399090999900999990909902099909909999900099999 -080109091004080809091104051212021111131212140315131604140415131706141804999009399999099991999009119999091099929999999099990990900900 -040804010909101011121313141515161313170515161802191906162020191904162003099999003099001999909909999009991990910909199999999999290999 -080909090906080810101112131415160403041717181819201717021919050121212121999999099009099009999900009909992990990999990991903119999999 -080808010609100311111213101411111515100204051515161616161704041818191904999909903902990099990991999919099109999999099990009990999090 -030108040909101108120913100508141513100208161613101718190420062121212020990992399999109090900999909999099119999909999000900999999909 -050809031010111213041010140213151516141718151919142020202006040121212121912990199999999901909090990919999910099919990999903099099999 -080808080109041004061109121213141409121202141516040517181916202017170316999999099399990900091999990990909901900919999011999992990999 -060808090300100808091100101202131300101404131304151516171700051801041700099999999299999999001991199919999999900109999109990399909909 -080809041000030809101000060209041100121212131300141515131300050416010400999992990999999991990901999991009999990919999919909030990999 -080909010600080909101000080404101000111212021300140415161600050315160400099999993099909999099999999909109091990019099999909990992999 -040401080900101111080900101111080900121313040200121313061400051503161700999990039990911999999999999090919990999999199990990991909219 -080802090900100611090900101011110300120413131300141414150400050104160400901999919990999999992999999001999999990919099909903009999909 -040808080800010909101000110912101000050412021300141512060300041516171700099999999093999999199909999099119901999999290009909099999099 -080504010400080910101100080210120600081313121400151313141400030416171700999999003099990990919919999919909991991999999909929909990099 -080808090300100211091204131314151500131314041504161714180500160114190600999990999291111019909999999999999900909199090909993909999909 -080808010904101111120900101013130900021413150900161616171804190603050400999909903999900999919990999999099119991990999990009200909999 -080808080400091002110300091213111100040613130500141414140100040415161600999099909999019990192909999999999909090919999993909099990099 -080808080403090910101011040912021304141404061515140516161515171717011804999999909029999199919990919009910999999900999991900030999990 -080909091004080311021204131111121214151515161614171819161614052021060114999909291099999009919999999090199999900999990909900003990999 -040808080910111111111210041304141403011515141416171518181916060518040216999900990099990999990909999900992390999919990991909991990901 -040808090105100808091112100413091114151515090614161717021814031704190414090999999300991099999990090099999999999991091919029900999099 -060801091003040809091112041313131302141515151616140517041616140417171819099929939190099199919109991999990099999009999909999999090900 -040108080808090909091010111112130610111404021504051617171818191917170403999990309099999909199999109900190999190099199999990990290999 -080809101010040511121213141111121201031504161717181806161917181802160404909999009909909009999909993999919290199199999909099990091199 -060809101104121202131401121513131605031504171717181819191920181821212121001109919199190399990990990290909999999999009099999999099999 -030808090909101108021206131304141204151516161217150516161217041819012017999992990901119909919999919990990909199999999099999030900990 -040806090910041105090910121314151501161616161517180304191917202002191917009999099999099000909990993090999999909990192909919999991199 -040108080808090910111112091314150506161717181819021717181819202020030419999990309909099991009099099919009199901999999999919999999290 -080809030410020411121212131111141506131616161704131818191904130118191905912901999900999919900999990909099199009199099999093999999990 -080910111213041414151616030502151717181919151717041906152001212121212020000000999909999999099090199291999199999999099901309999999909 -080808030904021011111213061011110413141015150413161017151818160105191818992901999091990999999999909090999999090999900000993909999099 -050808090110110808090910031212121310140215151617141415150418041906040418990990999390999999991999910219909999009199009999990909900990 -080805010909080810110912131414110415131414160602041703161618191919192021909999993999001199999199090999991099909999910929190999099900 -080809090904080810061111011213021114151617041414151618040503151920202020909909999999109991199939111909999000999909929909999990900999 -080808090104101011111111101012121314151602131314170418060514031818041914990999990309999999901090999999999111991909090909929999999900 -040108080809101111121209101111121213100414141504100216051515170618190304999990300991999099999999990990990099099999991109909199009129 -080808080109101112130909100206141414151617180519152020042121032020042121999999990399111991999010999199090900909090909999929999999909 -080910110312080913061412151602171712151819171712151919202021040105202004991299919999999000100999199909999999999091990919003999099099 -060108080909101108120905131414141516170218181919170420041919170321212121999990399991990919000019990919999109999009999999999000929999 -080910101111060410100512131414151616031414151716040218181818191919010420009990999909990990909019999299999999909190099999901139099990 -040108080406090908081011090912131111141515161617021518192017212121030517999990399009090999999990009109990999901909999900919990999299 -050808080209011010101109121314141516120614140403121718191904121720191904099109199193999990991900991909902999999909990999099099999090 -030808080804040904020410090911111010121211111304141414151617050106181818299999991909909909910999999099909999999019009909003009099999 -080910011112040210131112031410131512161617131512061618041519201818041505019990193999910991999999990219999990099909909990909999009099 -080808091003111102121204131114121204131414151617131818191905130104191906991129919999999099199999999909090099909910009909993099999990 -080808040910030402110910011212130914151212161717181819191717041804190605999992010999990999199039909999090090990909999990909090099999 -040208080803091011041212091311111414091516051414091717171819060120211919019929190099999991999999999910099999999109090999003099999009 -060809090410111203131310111414021310111414151504011617151518051917172004009999099090929999999999110999999090999109903999090990909990 -080808040106090909091011041213131111141415020516141403171818041917171818999999900309990190999909919990100909999991909999990299909999 -080809100411120809100413141515100516061517171816021917172016212121030116999909999900099009999009099999909999990099091191019993999299 -080109090903081011111212081311021212081405151604171818192020041818062121999999390920999991919991919909009909900090999990909990999099 -060809101011040809120311130804121211140802151611171718161601171719202105099909999999099909992999990090199991990019999099399110999190 -080808030910111106121212111113041402041516171405181816161904181801201919999210999919999999099190901909990001199999999099099309999909 -080809100300111112131304111102131300141504160400141717180600140501181800991299019999999099199999199909199909099091990910990399999999 -080910100500080910100100080611121200081314021200151504160300151504171704909099999990993999019990999990999909199001999999999912990990 -060809041000031109091004121113131400151613131400170218181404051918011400009999990999999029900990999199999919991119991990090939909999 -080909101000081102100300081204061300141516161600141417170400050117170400999999909299119991999990909019909999999109999090903999999909 -050809090904101112121300100312131304140615150100140215150400141617181900099909099099090999999929990199099909399999991999991910991109 -060108080900101008110900121213140900121213040200151613031704050413181800999990399999111990999990099999019999999099190999000921999999 -050108080804091011121200131411121204131411151604171418021600061419200300999900399090119990999909990999109999909991990919909199999129 -080104090500080810110600121204111100121204021300041415151300161616031300999099300999110909099999999999199909199090990999999099999929 -080109100400081112120600131114121500131114021500131116051500041704031500990099309990190999099909999999199999199999999009900999990929 -080809011000080509111000121313131000141516061000041502171700041504031700909999993999009999919909909001999999090919999919999099909929 -040104080800090909090800101002111200131415040500130615150300130416161600999990309999990990919999109091909099999090999992999099909999 -080901101004080909111204081314151600031715151605181920021604062121211600999909939099900099199900109999999299909191990119009099999999 -080803091004080805111004121313040200121213141500011617181500191919061500992909991999991090091999999999019900999099993111999099999909 -080309101000080611101000080212120100041312141500161717051504041718181800290999909990999999099919939919099919090099990909009999990999 -040809010500100811111200060211111200041313041200141413041200031415150400019999913090990991999909999919099099999199999990929090999999 -040106050804090909091000111112120400111112131300141402150300141416151500999000309099990991999999909999999910999919999919999092990999 -080808010904101011120904131313130900141516171700180219031704200519190600999909903999900090919999999010999990990199999199009920909999 -030802090400101109090400121313131300121414151500051414151600171706010400919092119991999999910909999999199990999999990990990030999999 -080109020600081011121204051011121300141011040300151516171700151504171700991099311990999099999901919999929099990900999909999999990999 -080409090300080209091004081111111100121304140600151514140500150116171700999999099299191091999919999199999199099109999090993099999099 -050108080300090908101100090902121300141515061604141715041600140418181800999990399299991999019991109009909990909999990909990099999999 -080109101000081109101000080412130400140406150500140216151500140416160300990999399991099990099999009199099099999909091199999999909929 -040809090600040803091000111105021000111112121000011314141500041614141700099099929999999900919990999999199999999091093199990990909909 -080910100300080211040600081213141400151516140400151516160500040117171700919299199999909991090991999091999990099999999199903900999999 -080801060900080810110900121314050400021515151500161617171800031617041804999999930999000999199911099109909999991990999990999909929990 -080805010400090909091000110212130600111412151600041412171700031412171704999999003099990999919901909919199991090999099999999999929990 -050808010600090908101000090404111200020413131400150313131600171717171600099999993099119990009999909199909099091999999999912999999909 -050803090900101112040900021313141400061515041400161515171700160401171700929990199991009919990919999919999990990999090909990399999999 -080808010600091011111200091313111200090414051200151502041200150304161700999999903090090999199999999991999900999919999190999990929009 -050804090600101011110100101213111400151513021600151513171604040318181800090099090999093999199990909909909991999991999999009919992999 -040808010900050808090900101011121300041011140600031502161600171504161600099999993999909900019999909999109099999991999119929099919999 -080309090400080809090600100211121300141411151300140516171300041816011304999099299999990919909911909999099901999091999909999939900990 -040804060900101011111100101012041300141502131300141616171700140105170300009099099099999999099990099099999111999999191999993992999099 -050804090904100806091100120213041100141513161100171513181800031513011800990900999990990990099911099109999991991991099999929939999999 -080808080400020910100100110912131304140903131300150916171704060518171700999091991991993909999990090099999929990999099909009099990999 -030809101100121213021104120513131100061415161704181815192004181815012000211999991999019099999990999991909009009990999010099939999999 -060809090400030809090400040810111100120402111300121414131300121414010500099099999992999999900901999991999901199909990999999930999999 -080808010900050610100900030410101100121314021500161617171500041604171500999990903999090999999999919209919111199909999099999099909999 -080809090600100209030500100411121300101414151500161414151500160104170400999099092991199999990990009990999199999999990909993009999909 -030809101000111209021000131414151600130514171604131818181604061904011600219999999990019909910999919999999900109991999999090939900999 -080809101000030802101000041112130400041414060500151416161600150117171700990992909999199999199900009991999999990900090999993099999999 -080805090400010810110600121213131300121214141500160214031500041717041500909099990993009991090999999999999999091992991199900999999909 -080309090900101102121300050614121300151515151300041616161300171704010400299991909991199999199999199009199999999991990990990030999999 -080808090400100511090100120211091300121415090400121616170600031617170400991090919990993999999911909909909909999909999990929999990909 -080409100400081112100100131302100600131415161600171715161604170315180500901099919990093990199999909901999999999099999909099909992909 -030809100500080811021204061311141200151516161200171716161200041718010400211099991999991099999900009999999909199999999999999030900999 -080309090900080810101100040210101100041213041400051515151500161616010600299999999099999991999909909919909010999919099999909030999999 -040809101000010809101000040804110500040811111200131415041200031402061200000999999993999999990900999999999019099919991909929199991099 -030808090500061008020400111010120400111313141504111616171800111616011800299099990990910999919999999990109999109909199901999939909999 -080809101000080809051000111206041304111415031304111617171300110118021900999999999999009990990900900999999919209119990999993191999119 -080909090900080310111100081010111104121213020600011415041604051417181900999999909999299999999909190999199991999019093909099190901009 -040404010500080808090900101006111100101012111100131314020400041315150300999990003099909999019999999999999909999001999910999199909929 -080809090300080209091000111112131000111104141500161617140500040104140600999299999991199919999990009999909909991999099009903099999909 -040808040300090208101100051213141504061613141500171713181500171701181800999990990290111991999909090919999099999199999100999399999999 -030808060900100808040900101102120900131414040400151616161600050117171700299099999999909999199901009919999190991999091999903909999999 -080904010500081010101100120413140400121515151500060216171700031616171700099999003099990909019990909999199999999199090199999999929999 -030808090904100208090904101112130400101415151500161617181900051717010600299909999999109091999991909991099099999091999000909930999999 -080909101000080209110100121205131404120615161404030417181400191919191400991999991990193991009999990999099900002900999099999909999999 -080601040904081011090900081212120200081314141504161614141500160517031800099009939990109991999999919909919909909999999099999091990929 -080409101004110509100300121213021400121213131400061516171404181901171400099900999299909900919999999999199919999199999100000399909999 -080904031000081112101004131412020400131512161700131512060500130118181800909299099999999000919999199909909910099999990909993090999999 -030809100500110212131304111414151504161417151500181819200600181801202004219099910999199091990999990099999010990919999900999399999990 -080809031000080509061100121209131300041409150200011414161600041718161604999299999199909900991999999909919011199999993909999099900990 -080909100600080909031104121202131100121214151500161616151700050418010400990099999999992009099999119991999919999199999910909030990999 -050308090904101108090904120604131300021415131300161718180100161618191900999900299991909019909909099199999100999199990193999909999999 -080501060904101111111200101314141500161714141504180219191500181804190300099000939090990991099999909919999099900199999199999099999929 -040608030400091011121300090914021300151514161600151514171700050114171704992990019090919999919999109099999999999990999109903999999990 -080601090900081010101000081112130400141415160500141402171704041818031700099999930990999999199990109909199991099919999919000999999929 -050108040900101111020904121111131300141516061300170416160300171818181800990990309990910009919999999090099099990099299999999999909999 -080809100600080809110100121202131404121215151604031715041800191905181800991099991999093999109991900990909999902099099909990999999099 -080809101000080802100300061112120400041113121404151116171700050118181800991999919999992990199909999991909099009919990199903009999999 -030808040400090906101100091212131300141212150400021616151500041616010500999992090099990999090999099199999991991919091999909930999999 -050809101000041112130100041414151604021414151600171706151600171703151600000999990990003999919909100999999199991999999099999999992999 -040806030900100804111100040812021100050812131300141414131300041515010400909290999190999909099990119999999991990909999999909030999999 -080305040900080802100900111106120900131414140900131516171800130401171704299099909999119999919999099909199999999991090010999399909990 -080801090904100811121300141515121604021515120600171819202005212103202004999909930991100919990999990199909099991999990009019999992990 -040103080600090904101000090911101004121311021400151617141400051618181800992990391099099999999999990019199911990099999009909099999999 -080109101000080811121204130514121204131502061600131717171804131903202000990999309999099010099999090999909119099919099999091990992999 -080808010400091011121204051311061204021411151600171711151800171903151800999999903090019009999991090919909199091999999990991999992999 -080401090900101010090600111212131400151612050200151604171700041603171700099990939999999909100999119099919900999909199999909999999299 -030809090200101009051104061213141504161717170100161818191900161818041900219199999199099099901900910990199099399900999999999909999999 -080808090900041010100100021111120600131311141400130415141400160305171804999990900999993991909919909199099999999909999099919990929000 -080909100400081112130100041114131300061114141500051104020400031616161600099099900999903999999900999999919099199991090909999919929999 -080808040900101011060900031002120904131313130900141516171700041501180500990999909999099929909991090991999999099991990019909309999909 -030809101000110412101004110613141404111513141400021617180100051917181800909992009999909099099999990909999900991990991913901999991999 -080903100500080804111104021212111300141212151300141616171300041616010600129099990999999019099919999999099999999910990910999930909999 -080804091000011111091000121111091000130206090400141415161700140415030500990099099993999999999919099199999109099190999190990990999299 -040808090900100808090900041111121304061102141300151516171300031516010500099999999990909909909999000999999991190919999191999930929999 -050808010400091010101000061111121200131111021200131415160300130404161600999990903090999999919909099999999099199001999999990092999999 -080801040900080810090900111112131404111115161400051702061404171718031400999099939999109991909991900991099999990910999199099999991299 -040801091000111212091000041212091000131314090400031302151500161605061500099999039990919909999999909999999991099910999199921009999999 -080309100600080909111200081314141204021314151200041616171800041616010500299099990999909999909999990199999199099100990910999930909999 -050108080800090910100400090911111100121313060300041313041400151502161700999990309099099999999999999010999990990999299909990191999119 -040108080500091008111100091212130600091212021404091516041700181818031700999990399090099991900999099999999991109009199909990999999929 -080109060300081011121304080511121300141411021500141404161600041718161600990999309290199099999990999999019901199999099909999999900099 -080109041004081112101004131412151600131712051600130218181600131906180300990909309999099001909919009999999199999190999199990999990929 -080401050400080909090900081011111204131302111200131314141500031614140600099999930099999999919900900991999919999999999090991990929999 -040108080500091008081100091012121200131004140400131002140300130615161700999990399090090999099999999099909909999999999109990192999119 -080309101100081204130200141205151600141215151604141217171800140601170400921199999190900999991990999999999909909999190091990390999999 -050808010904100811110900121313110600041313141404151515141400031617180200999900993999990900990909099999199099909999999909999991921119 -080309091000081106091000121213021000121214141504161614141704051819010400999999299999999901009991119999919999909999199091099030900999 -080910100300080904101100080902121104080913131400051516171800151501040600999999999299900999999991110999999019099919099009909300999999 -030804090400080810110500021212120600041314141400151616171700151616011700299099900999990919009919999919909099999109999919999939909999 -080801090900080810091104060412131100141402131104151617131800031905181800999999939999010009019990999999999991909019991199920909990999 -030809100400110809101200110805101200110813101200021415161704040618011700999992999099909999999990909999999901991911991190009039990999 -040801090900101010100500111212060400111212131400111515021600170403161600099999030999990909199999099999909991099091999991909999909299 -080808090600101004090904011011111100121213141400121204021500031617180500990099909999999099909931999999199900999901099999999910921199 -030809091004061109091004121302141500161718141504191918201500191918010500299909199999999001900901119999999000900999999991999930999999 -050108040400090908101100090912131300141504131300141502160300141506161600999990390099000999999990099019999909999999999119999992990999 -080809100300111209101000111314151504111605151504111718180200060118181904999999099299999990091990990909999999909009190199903991999910 -040403080800091010020800091010110500041212121200131415161600060117171600992990099999991999919909909909199099999109990909903099999999 -080808090900100411121200101002121200041314030400011514160500151514170600999990990999919990199999999901209099999099993990999909991009 -040105080800091010080800111110120400111104020600131415161600171715031600990990399990919990919999909990199999090091999099909999999929 -080809100400081109090100121213141504121213061500160213170400051818180300990099099999193991909990900999099999990199999900901999999929 -080801090900080810091100041212040600021212131400151515131600040503161600999999939999100991990909099999999190091999099999900299999999 -030808080800040904020600090910111100121314111500121316171500041301051500299999991990999999010999999090999999999901990010999399909909 -080809010400080809101000111109021200030409121200131415061600041705161600999999993099099999991991199299199999999009090090900999990999 -080808090900031002040900111112131304060514131300151515160100171717170400999999099999190921190999990991999901990901999993999909999909 -040805090300101112091300101402131300101516160400101516160600040117171700099999009290009999999911199999999999099999991099903090999999 -050608080300090208080400091010040400091011121300141415161300141401160400999290099999190991999999999999009090999109999100999399999909 -080109101000080909111000081202111304141516110400170516111800060416031800999999399990999991990999100011999919090099999990909929990999 -060809101000010805041000040811111200131311040200131304141400151503141400000999909993990999999901919909919990999999199099909999999299 -080605090300081004090900081011110200081204040400121213141400040115141400090299999999099999991991919919099099999909099099903099999099 -080909101000080909110400081211110100131202140300061214140400041516170500099999990999900999999991939999999019290919999990999099900009 -080803090400081006111104121213140200121214141500051617181804191901181800992999991090999090091990999999919909990990199019090399999999 -040308020900101111120900131106120900141504121600141517120100041517170500991990211999999909999999099099909090099999999993999909900909 -080909101104080909101104011212101100041212130200141516031700061505181900099909999999909099099939999999909991190099190099909021999919 -080809090300100209090500111213061400151516141400151516171804040116191904999299099991190919999990099109999990999999999000003990999990 -080109090600081009091100081012131100080412131100021415130400040316130500999099399991090999909999099909999999991999991190909199992909 -080909101004081109101000081213140400011513021604031717181600061917051600999909999999009990909901909919999391009991992919999999900099 -080809101100080812040400131312140600131302151500161617041500160117050300990099909099009990999999009999999911991900999999993992999099 -080803090904080810090900021110120400131313121200051415151500161706010400929909999999999919909911999991909999999910999099900030909999 -080901101100121313101100141313150400141602150300140617151804051717150400099990039999900909999999909919999919999019299911099990909999 -060808091004010808041000111111111000121313020500140403151600171815151600090009999993999991909999999009199999090991999990900299909999 -040809090900040810110400030802121200131314061200131315161600171705011600099999909990900999099929199911999919999990199909909039999999 -080809100400110809120100040409131400051515021400031515061600171717161600909099990990993909919990019999999091199990092999999099999999 -080902100500110412101304031414101300061414151300161617181800041617011800119091919999999020199999099999999991090901999099909939999999 -080910100300040911021204050913131200141413131204141516171700181906011700099290919999911099999999999009999999109091999009909939900999 -080910031104021213141100151212141604151717140600151819142000150105202004112901999990900919099999900999909099999909991990993099999990 -040108090904101112090900131313141500161714140600161717050300160218181904990900309999099901900999999919909099999999999909991992991910 -080909090900101111050400120213131300141414040300151516160600150116161704099990999099999900909991999019929990991999999099993990999900 -080910101004081111110100121213140400121313150200160617171804190517170300009909909999993999919990109999999991190999190991009999909929 -080902010500100411121200030613121204141413131500161417171500041818181500119991013099999929199990190999999909099990990999909099999999 -050809090900100811110300100211121204101314120400101315161700061301180400909990999999992990999911990999999900999999091100999309909909 -050108080800091010100600111112130400021114130400150404131600151503131600999990309090999999109991909199999990091009999990999999992999 -040801090900101011090900121314141500120514141504121616021700061603181904099999039999009990199909999999999099009901999991999991909210 -080803060900080804100900021112100900111112100400041314100100151316170500929999990999909919999919909999909919999919999913909099900009 -080808030900101011120900060211050900131414150900011414161600041718041604999999902999919990999991099019999090099999993909990999900090 -080309101004080611101000080412020400131312140500131312151600171712011600921909999999009999919999109009999990099999999010999939990999 -050808090600101112090100131415091600170218181604192018181604192020031604990090999990113901999999009010999999900199999999099999999290 -060501080900101011080900101012080400131402151500041416151500041616040300999990039999190999999990009919999011990909999999999902909999 -040104080800091011080400121313131300121414020600151516161600151505031700990990399990909901090999999990109999990991999999999991990929 -080509091000080209031000111112131000111114060400040414141500161616010400909999992990199991999999009990999919999990099990900030999999 -080401090900081011090900081213141500160217171804161919051804161919030600099999939991199999009919009010909999909199999909099990999299 -080902101000080905111204080903131200080414151200161617170100160417180600011999901999999099919992999999199900099991999093999999990009 -080805010400080809090900041010111104121013131300141515021600031515170600999999903099099999991999090099919099999999191911929909999909 -030408060900101008080900101002110900121313131304121414150500121401161704909992990999999999909991199999109999909991990919999300999900 -080901101000020911101004120913141500121313160400121717181804031705190600199991939999109019990999009999009999999990999909029009999909 -080806091000080802110300041212111300141212131300141415151500040504010400999199901299919990199999999099999990999019999999900030999999 -050808090900060808090900100403111204130211110400141515160100141417171700099999999990909999900909290099909019999199999993999119990999 -050803090900100808090900111111121304140215161300171515161800060401160400999990929999999901909999000919999199091999091999900390999999 -080304090900081002090900080611121200080411110400041313131300141401040500299999909991199999190990999999099999099091990999990300999999 -050804090400101011111100011012130400031412130400150212131600151506131600009099090999999999099931909999999919992199099900991999999099 -080104090900081011090904081213141400081515141404160217170600160517180300999999309991099090909990099999999099901999991190990919999929 -050808010400090208101000091112101304141512161300031712041300181818061300999990193090919991090999990919099199992990999099990999999909 -080501090400101112091300141412090400150412090600151512021600171703161600099090939990000990990999999009999999999999099911909999999299 -030809091000110809091000020512121200130414151500161616151504041718010600299999999991999919900909999199909909991909999919099030900999 -040104080400090910101100090910101100121304140200121305141400121306040300990990390099191999999999999009919909199999999099999902990999 -060804010500090909101000111112101000111312041400151602171400040317171400009999093099919999199990999909909990999019990919909999992999 -080809101004080809100300051109121304141414140200041516161700181906011700999909999999992900919999910900919999199019999990900039909999 -080809090904080810100100111110101200131415121204160503170200041819170600999909990999093999999990999990199009900999190991999290900199 -060408030900101002090900101011111200131411111200151515161600040104170500909290909999919999199999999099999919990199099909903009999909 -080909090900101112120100131405120400131415151504130316171704130618190200099990090999993900999990909999199999909991999299099191990119 -080809101104080512060400131312140100131312141400151516161604031718190200900009909099099999909990039999999999990999199999099991921119 -080808090904100511090300120613020400141515161600141517161600140118180400999900999990912909199909199099109091999999999909993090999999 -030804090900101111090900101111041200100213051400151515151400040401061400909992099999999999990999099911909199999910999990900309999999 -080808090400101010100100051112131300031414131304151616161700151502040600999099900999993990109909999991999999902919099999999190991099 -050808090900101112090100131415161700061804161700031802161704191919161704990990999990003999019900999090999999099999999019029199999990 -050108091000111112041000111113131000061404021500141416161500040316041500990090309999009999999991999009199990099991999999909999992909 -080801060900080810100900111205130900021212140300150416141400041717170400999099939999199919909999009199999191290099999909909099999909 -080309101000080909100500080211121204080613121204141516171800141920011804299999999999909999900911990991999091909991990900990039990990 -050808010900100808110900100212040900101314150900101306151500041303160400999990993991910999999910099910999999099909999999909909992909 -080805010400080809101100041209131304141509131300061616021700031818171700999999903099090999919900090909999099990999199911999199929999 -080910111104121313111100021314141504161718031504191720212100061701212105000900999999999909999911990191999992901999091109999399909990 -080909090500080810111204130210101400151617061404181619202004031601202000999999990099900090999911909191099919901999999109029399999999 -060808010400091008111104121305111100141515151600141717021804031717181800999990993099009000999909099099019999999999199911099999929999 -080809090300080809101104120613101100121415020500121617181904122001191904999999999299999009099999919900199911999199099109090309909990 -040808080300090910061100090910121100131310121400151617120200040501120400999990099299999999909999999909919901999919190091900390999999 -040108090900100808061100051213111100141415040400141416161600021717170300990990390990999991099909099919909900999999999999919099919929 -040801090900100808111200100504131200101415151200100416021200031616060400999990930990919990919999009999199099999091999919999900929999 -080501040900081010110900081010110600120213111400041503111400041616041400999999030999900999999909909091999919090199999999991209909999 -030809091000110809091000050802041004121314061000151515151600171701041600999992999991999999099991090091999010999199099990990309999999 -040401060800090909091000111212051300021404131300151515161600171703161600999090039099990991900919999109999909991999099999990299999999 -040808010500091010101000090906111100020412131300141415131300031404160400099999903099999991990999999190099090991909999999999009929909 -050801090904061010111104121310111100021414151600171414161600181803041900099909030999909009999911999199099099091999999999919990992909 -080808090900101112090900100212131300140412130100140412150500030416170600999999909999199991909919999199999901399999999000929909990009 -080805090904081011111100121303141404121506141400121617180200120119202004909909090999999990909999290909999990999091990191993191999190 -080804010500090910111100090912111100041212061300041415021600031515041600999999003099009999999999999099019999999009190911999909929999 -080901101004080909101000051111111200130214061200151616041200170316041800099909939999919999910909999991099119991909999909919990929909 -040808010900101008110900121314110900121502160904121717181904031717050600999990993999001999999900099999999911109199999900099990929099 -080909050600100309111104121202111100041213131304141516170100181818191900099990290099999009199999199999919999900991990003999009999999 -080109090900080810041100121313130500120204141400151504141600151517030600999999309099190909190999999919099909999199099909999990991299 -050808030900100808111200131314111204131315110200061617111804161601191904999290999190999999099999090999919901990019199991099390999990 -030808040900101011111100101002121200041314121200151614170600050401171700999092909099999999909991199999999001999090090999900399999999 -080104090900081011090904081212121200081314150300131316150600041702150500999999309999009091999909999991999909299919999990999199900109 -080809010400101109121204100613121200101413130500151602170300181818181904999999093099099099099999199909999999090019990019999912999910 -080109090900081010110600081212111100080504130200141504161600040403161600999999309090919999999909999999919090090999190099900999999299 -080803090900080810101100020610101100121314141104151514161104150501170400929999990999999919999909909190999199909199999109099309909909 -080801090400101111111100121314041504121316151500121302170300051306171700999090030999999901999991090991999990999919999919999092909999 -080809100500080806111200131304110300131414111500161417111804040117021800990999900099990909999999099999929099190919999999003919999109 -020809010600101112131304141115131304161117181804031717191800202020190500119991913099919019999990090190999990902990999999999090999999 -080109041000081112121004081112121300141102151300051616171800031616040600990999309990190099999999909091099999990910999990999990929099 -080809011000080809111000121209060400130409021400131315161400051718031404999999993999010999990990099099999091199999999900999099900920 -050408090900101108091204131415021200161616161204171718191200170106190300999990099999909000909991119019999999909199999009993992999099 -040808090600030802101000111111101004121213141400041516141400171701051800099099910992999999199999990919099990999109990199990390999909 -080109090300080809100400051102101200131313131400150406161400041717171400999299399999999901190999909911099999990990990990909009999999 -060808080804020909090300101111111200131415121204011617170400181805171900999900990991992919999999999109999190909109993099990090999909 -080309041000080809111000120209131000121214140400051515151500041606010400299999990999990991999991009991999999999091090999990030909999 -080809090904011011110600121311111404151602171700051618171700031619202004999909009993199990990909900099199911990909999999999099929090 -080903061000080905111204081314141504080214141604171818191900171701191900929099999099909091900999990919909199901990091909999399999999 -080809100400080811121200041313140600150216161600151717171700150301040500990099909999099909009999009911999199999919999999999300929999 -080801090600081010111100121010111100020413140500151504161704151803161700999099030999909999999919999100009999991900999990091999992999 -040608050400091011121300031402121200151416161704151818161700151818011700909990900090090999099991199299919199109999999909999939999999 -080109101104080812131100141515050400141515160200141717171704181803190600990009309999009991909909999999909991199999199999090910999299 -080106090400081010111104081012131300081212131304141502160500170318181900990099390999909099999901099999999999909910991199919900929909 -040108080900101008080904111012120900131415150600020515151600171819031604999090399999099019099999999190999099091099999990919999911290 -080808080400010910100500090911121200131302141500130304061600041717171700999099099993199999190999199999109911999909092990999990909999 -080805090904081011090904121211130100141411150200161718191900060403191900990909099999999090909990139999999901199909190099900999999299 -080805010400090910111100090910101100040612121200041314041500031616160200909999093099999999919990999009199999999909190090999991929919 -080804030900080802100900041112060900041312121400011313041400051516161400909299999999911990109909999909999019999999993999999009900909 -080404030900081002111100121010111104131414150600161417181800050117181800099299909199919909199999990019999090090900999999903999999999 -080309100500081112120200081112061300041114141400151116160100150416170400921999991099991999991909999099019999999991990093990909999909 -030808080900101112130900021414151500051414151500161717171804160406010400299999199991900919099919999099999991999991090999090030999999 -080803090400081011121200131014150200051014160400171714161804171714010600999099920990919999991900119099999991099999999990099930990999 -080309100500110909101004120213141400041516161700060416161700181818011700299991999099999019090919999910099019099099999999909039999999 -050808090400040408100100111213131400111513131400111504160200110316160600099099090999993909019900919999999909999999199901999990992999 -080104091000080811091200131305091400151515091600171818021604031818060400999099309099119990990999099999909990999991991919029900999999 -080809090300080809091000110412121300141414051504161718190200160601191904999999999299999909901990999090919990900009199919990391999990 -040809010500101010101100060412121100041302121400151515161400030416161400009999903099990900199999999999909091999010999999920999999999 -080901101100080909101100080412101300081414021500040614161704181818030500099999939999911999091990999999919991190099099919099020999999 -080901031004081111121000081111021300081415150600161715151804160519191904099909032999991999991999119990999909090099999990090990999990 -060809011000111109121000131109141500131609051504041718021504031818191500099999093999991999901900099999999909909090990991099919929199 -040605080300090908080400101102121300101014151500161614151500161601041700999290009999099999190991909919099919999099999909999390999909 -080106090400081010101100121314141404150216161700181803161904181805191900990999390091990910999990990199999119090999099929099999999099 -040809090900100802110300121313141500161313061504161617171500050118041500999990909999919900112999919099999990909199999099903099999099 -080909031004080909111000080212131400051516171404181819201400061919011404992909999999990991909901909901099099909910999019999939909990 -080809051004060809111204131415161600011715020400181815190300181815191900999009999099000000999901999919099391099091999999999992999999 -060104080804090910111200130914151200161414051200021717171700181818030400999900309099000919909990999199099999991909999999919990999299 -080801090400050810100400111111110400121213130200121214141400040603041500999099930999990900199999909091999999199999199999900290999909 -040108080400090909091000111202131400151506131400151505161400171717030400999990309099990919999911109090999999999991999099990920999999 -020809100300111111121204131305121204131314151600171819152004170119190600111291999999999091999999990990099900099199090099093990999999 -050809100400111111110100021213141500160413141500161717141504180317061500009099900999993999109911909109999999999909999999019999929099 -040808010600040908101100041212051100131212141100131304141100031515150200099999993090901990999909999999099990099999999909990991929919 -050808010400040804091000111111091000020612091300141404151500031404151500099999993090900990999999199190909099991909099999999999929099 -080809090400011009091100121213021100120413141100150613141100160413050300919099199993999990919990919999099099990999990999909992909099 -080809011004080611121004131311141000150211161004171711181900170320051900909909903999019099999991009919099199901990999990992099999099 -080501090904101112090900131415160600131702181800131719202004031719202004099900939990919990019990909999199111999909099999029999999990 -040801090900101112121200101013140500021504141600151506141600041703141600099999039099099999109991909190999199099999999909991999902999 -080809031000080809101000041112021300051114141400151116161700040416010600999299999999009999919900019999919999990999190991900930999999 -050408080300090210110400090912040600011313131300141415151600141404151600999290019999100991909991999991909399999090099999999099999999 -080909100600080909111204080513141204021513131204161718191900032018011900999099990999909099099999900009099119901991991909991939929999 -080809101004030809101000111209051300110609141500111617181900021604011904999909999999999920990990099999909099099900999110919039919990 -040405010800091010080800111110121300111104061300140215161300141717170300999990003999999909919991109999999999999100990009991999999929 -080809090904080810110600011212131400041213131400151515020400031617180500999909990099909990099939199999999999090901099999999919921109 -080409101000081112130300080213130400081414141400151515160400050106171700990999009999092990999911999999909099991999099909903009999999 -040808090900040808021000041103101000041112131300141112131500051612010600091999991990991999299909999999199999990999990900990930900999 -080808010600091010111204091010130500141404131504141403130200161617181900999999903099990099919999099099909990109999199999990291990119 -060104080300090909081000111202081304141415081604171415181900171715180500999290309999990919990911190090909999909999090909999990999999 -080809090900080210100600031111111200041304141504161717180100051717181800909999199999199929190999999909109090009991990903909999999999 -060809100300110205121200111314121200151514160400151514171704040118181800011299199991099999999919999919099990099999999009003099999999 -060308080804091005040200111213141500111613170100181813171704181813191900929900999199090900991900119999999901399099999999099999999099 -030408090400101106091200111104091200130214141200151614141700151616010500900092999999909919999999009919999199091999991190999930999999 -050808090300101008091100101012091300041415021300161616171700060104171704099999999299999999091999199901199999190019999909903099999990 -060808090900030808041000111212131000141502161000040516161000171717010400090999999999909929099999199191199119099999999099909030999999 -080909090904081010111100011010111204131305041200131314150600021617180300999909099990909999999939900910099999999999999000919999911129 -040808090900100808111100121212111100041313140100151502161700150306040500999990990999999909099999199991199099399910999190999000929999 -040308080400091004081100121313021100121313141100151616161100150405010600929990999090999990019999999999199991990919990990990030999999 -080105040900081011120904081010130900141415131304141415021600031718190600999999300999009099909909909919999919909999099919999910921199 -080109090904081011110400121311141400051313141400151515060300040216171800999909390990999991990900999099999990999199999999991902901119 -080809010600080809101000110212101000041312141500161304041700031305171700919999993099919991999909099019909999099990091099929999999099 -040808090500030808101100121310100100121314150400160217171704181818180600090999990099990929999999939999199911991190091999099900999999 -080909090900081011120100130512120400061414141404151602170300151817171904999999900990093909999909909099199999909019999919990992909910 -080803090900080804021000111213131400041213041400011215161400051215170600992999999199091990919909999099999919999990993000999999909009 -040805030400090810111100090812061100090813130200091415131600040115171700099999902099999999099990099999919099999999190111903909999999 -080809090904040810051100121313041100141313021500141617180300140106181800999909909999009900999909099999909091099191999099993092999999 -050308090900100808111104120206110100131313131400150416171400181818041400929990990999999001999999039019199999090909999009909909999999 -020808010900101008110900121003060900121305140900121504041600041717171600199991993999910909909992999909999990099090099099990999909999 -030808080804010906020500101011121300101415151604171815151900171818202004299909991993900991919991109999009099909099090999999990999990 -080910111104080810110600011205131400151516131400171819131404032002131404909909099999909990990939999910999919999919991900021199991990 -050801040900061010090900111010031200131313130200141415041604141415161600099099039999999909921909999991919999190900099999099999999999 -080804091000040806090300041111021200131111121200141516161700050116161700909199999290099990919999199099999099990190999090903999999999 -040408080300090208050600101111121300101111140400101516160100101517171700999290099990109991990909909999099990099919999093999909999999 -030408090600101104090900121302141500121216141500011716051500181818181504900992999091909991900991999991999999999099993990991199999900 -080309100600080909050400080211111200131411111500161717151500040118181804290099999999999999000919909919999199991909991909903099999990 -080909020500030410101100061210101100041213141100041215151600171215011600191992091099999999999909999999199009099901999990909939909999 -080903101004111212131404021212131400151617130100181819191904181820050600129901990099999019999999999109999111390990999999099090999099 -080109101000081109101004081213131400151605131400150617031404021819041400999999399999999091009900999919999190099099999929019199911099 -080109090400081009111104081213111100081413021500161413041700050618031700999099399999109090199909999999999901199999190909909099990929 -050108040300090808101000090902101000111213140600151216040400151217171700999990390291999999999991199909099009090909999999999000999999 -050108080800090909040400101011111200100211111300031415061600141415041700999990309999909919090999909919909999999199099090929990999909 -060808091000041108091000021112091300141115051604141117180400140301181800099999999999990909099919009190909999909900099109999399929999 -080808040900011011090900121314151600171314061604021814191600051818031604999999900993999991000910099199999999901990991909909999999290 -040804030500090810111200090810021200131410151500161610151500160117040600009999992099991999999909119909999090990999999199993090999099 -080409101100080809101100121309101100040214141100031506161700151505010400099999999999999909999900099909999019199199199901929930990999 -030804091004111213141000111102141000151506141000161616140500171701180400290909190999199999199999199909999909099099999910990309999909 -060805090300100209090400101112121300111112121300141516171300041818011304009299099999199991990999999099999999999109990110909039999990 -080109100200081112041304141112151300161112171304051112180300061919181800991199310190199099999909099099099999900990299999999099909999 -080309100500080909111100081212021104081314151600171717181600040406011600999099290999999999199999190999109009199909999901900039999999 -050308080400091011080200041011121300141011121504161617171800161601170600929090999990991999991999999099919000109091999990999390999999 -080809010500080909101100040412131300141415151600141417170200040317170600999999993090900909919990099999019909999999199991909990992999 -040809101000010809111104120805111100130802141400131516171400131806040300090999990993099099999909099099999991999119999109990902990999 -080601090500101010090400110212121300031412041300151516161300151504161300099090939999999919000919909919999999092199999990999099999999 -050808010900041008110900041012130900141502130900141616131700031604130600099999993990901999999900099999999111199999999900929990999099 -080605030900081011120900081304120904131314120200041514121600151501171800999299009999909990999999990090919909999099190919999311999919 -080803090900101004110900121212120200131313130600141516170400050116160400992990999999909990901999919999199999099991990110903999999909 -080409090300100209091100100412121100101313141400101313140400060105150400099290999991199999999909909990999990999999991990903009999909 -080801090900080810110400041210101300141504051300161517171300060217031300999999930999109901990999909919999009090999999999901929991999 -080808090900030402060900101011121300101414041500011616160400171717170500999992019999909999190991009919909999999190093999990999999909 -040801090900040808090900101111111100101202131300101415041600061417050300099999939990909999199999999919999011999999190009999992900099 -080809011000080809111000041213141400041506141400161605040200160317171700909999993999999999010900099900999999990099199999999001992999 -080910031104081213041100060213141100151513161100171713180500170118180400912909199990909991999999909019099910999999099199993099999909 -040806091000111202091004130314091000150516161004171816160100171819191900099999009991199019199929999091099099009999999093999909909999 -080801090500080809091004111213141500110602041500111616171500031616041500999999939099090090919909109991999900999919999909999909929999 -040808090900030810110400121313141400121202141400151616161600170504010600099999900999999929000999999990999911999999190999909030909999 -080609090500081010090100111112121200111113141500040216040400171717170300999099099990903999919991999999099909090109099909991999999929 -080904101000030904101000040211120500131306141400131315140100041515161600190992999999909991900901199999199999999909999003909909999999 -080804090300080810111200041310100200051415150600141416161600040117171700999299901999991990991909919901909019999909999999903099999999 -050808090900100808090900011112121200131313021404150416041700180616031700990990999990999991199939999991999991100000199999909999909929 -040501040800091010110800090910110800041202110800131306110400031415161600999090039999999999999990109999999011999109099999991999920099 -080909020400080909101104080312131400081512161700061515171704181818010500991999991090999092910999999999109990999901999999000930999999 -040805010904101112120900131412120900131402150904131617181800061917180300909900093990190991999999999999999011909901990999990999909929 -080809090900080810030400111210100500111304020600141415161704140118181800999999909099929990999999909909199099999001099199093110999999 -050808090900100808110300100612021300101412120400101414150400040104150400999990991299999999019909909999109919999999990900903099999909 -040801060900100811120900050811120904031313120900141513021600041718161600999990930990010999999909990999999299999991090919900099990999 -040809101000040909101000111111050300011213041400121215161400061717021400009999999999909909009999999990929309999990999009991999909119 -080804040900060805101100031212101300141212101304021516171700181501171700909099999090090990999929999999999190001999999109919399919999 -080804010900080810100900061112100900131111020900131415161704041418030500909999993999991990999900099999999099199091999910099190909299 -040809090600011010101000041112121300140212051500141616041500140316171500009999099093999999190901999919009999999199990999999909992909 -030508090600101008080400021011111100121213131300041414151600041414010400900092999999999999090910999199999999990109999910999930909999 -080906011000080911121004130914151004021617151000181804190500181803191900999999903999900009919900090999999111991990099909999999992999 -080909010400080909101100081212101300141206101500040516021700031816161704099999993099901999991999099999919090990099199991999919921990 -030808090900041008020900041011121200130511121200141516160400060116161700299999999990910999919990999099999999990001990199903990999909 -030805090900101112131404101502161400101515171400101819192004060119192004299999100999109099199999199999199091099109999990003999999990 -050808090900041008110900121212111300141502161304171818181300030406011300099999999990999990090999199991199119901991999990920039999999 -050308010900101108120900131108140904021515151504161717180600161717190400999990293999999909919919990190109199900909099909999909999909 -030402080600090909100400111104100400051112101300141412101300141415010400901092911999990999999999009999999909990999999900999030990999 -080909030400080909041000110212131000141212051000141415151000040106040400992999999090999991909919099199999999999090999090903000999999 -080901101000111212121304111414131300111414151604110217050600041818180300099990030999999091909999999999999990009109099909901999999929 -080910100400111213131404111515150300110216160100111716161804051919190600009990999099090090999999929919999919399999990090009900999999 -050108080900101011090904101011120400061311141400151502040300151516171800999090309999199099999999009009099999999019999909999192999119 -060508091000111108120400111308140300151616021704151616171700040118181800999090090099999990909999199901129999909991990999903099999999 -040108080904101108080900121313141400121315051600120215150600120417180300999900399991090919099999099999909999099999991190990199999129 -040808080800091011120100130414150500131314161604170206161600171703181800999990909990013999109999909909999910909199991099999909992999 -080809100300110209121204131405121200061516171804191919191800202020011804991290999999199001999909999910099911900991999990999039999990 -040108091004111111021200031314140500151514140600151516171704181818181700991000311099999999910921999999999909099909999999099009999999 -080910100400040210101100121204060300131415151600131415150500130117171700009090999999191991992999999190099199099999099099993099999999 -080805090400101111110100101012131300041414131300151606171700031802171704999099000999993999019990999099999990999991991999921099991190 -080304040900101010110900120204130900121414151500161614151500160106050400299991900999999991909910999999009999991999999009993000999999 -030808010904100808090900101102120600131313140400151617181800051717181804999902993999999999010911999991199991099090990909909999999990 -080909041000030909061000050211121000131314141500041616141500171616010400190992999999999991909901109999199999999099999900909930909999 -050809010400100409111200101009131300140409131300141515150200060316161700009999993099090999919990099999999909999999190990909991992919 -040804010900101011120900101006131300141504161300141515160200140317160500099999003999001999991990999009999909999999199991999990992199 -080809010300080810101100121314101500050414021500161714181504160614181804909999903299999999991900199009999991199999990009090999999990 -080808090300100211121204100513121404151617181404161619191400060119191400991299190999199099199909990091999999000910999199903999999999 -080909101000081111101000081202130500121214131504161718131904040301130600999999099999909999099901999991909991909199090910002390999999 -080304090900080802090904050410110600121314151500011616151500171718181800290999999999199099109990999091009000999919993999990999990999 -080809010600101011111100101002041200131415151200040416151200051616031200909999903099199999900991999901999099990009999999999929909999 -030808080200090910101004090911120600131304141500161717151500041817010500299199999199999099019990909999199990990991990909990930909999 -060809011000111112131004111114131504160217131800161903132004191921202005009999003999910099190999990991909019999199099999099299991990 -080609090904101011120300101013141400151515161404011718021900202005191904099900990999909999092999099099199999909111993910990099999990 -040809100500110312101300111402101504111416061500111716161500041717011500919990219099999999190990110999999990999999990091909939999999 -080109090300080809091000111102120600111313121404041516121700181804120500999999399299991919199991999909909990009099990090990090999999 -080910111100041213141100121213140100030513140600150213141604151718180400000990009999999999999999139999999909092999999190091900919999 -050102080300091011121200131111140400150416161600151717180600151717181804991990311290999901999999909009099999999900990990999999999990 -050809100600021111100100121111101304121414101300121414151500031604150400011099199991993919999999900999999990999990999999920999990909 -080409100300080509041100081202131100081414151100161717181804061717011800901299999999999990109990199999199999190909190909099939909999 -080803090600080810100400020511111200131414151200131414161204130401171800929099990999090910999999999199099999999990991909090300999909 -080808010900101011090900031011041200040211131400151511130600051617130400999999903999919929990999099919909010999099099999999999900009 -080806040400080902101000111213101000111414150300111414150400110116160500999999000099919990199991999919929090999999999990993099999909 -080509090900101111120300101111121300101414151304101416021700060104180400099990909999999999992909999999099099909910199911903009999909 -030808080200040910041100041010121100131415120100131616120400051616120600299199999190099999909999019099999009399909999990999999909009 -080403090900080805020900101111111100041213130400041414141400151515010600092999999999991909019909999999109099999019999999909030999999 -060809090500100809091100040812031100131314151500131316041500040117170200999090999990990999099900999990299999999909999109903191999919 -080808090400101102091204131114090600031115090500161717180100161717180400999099909991190019190999999291999999099910999913999999909909 -080808010400090910111200131310061400131310020400151516161700150416030500999999903099010990900999999999909991999091999990999990990299 -050808090400101009091104101012121300011412121300061516041300031717170200999990909099990099990999999909999319199900990099999991929919 -040809101000010909101000061111021200131111141200130515161700130415040300091999099993999990919909999999199099099001999991999902909999 -050809011000111109091000121206130400021214151600171704181804171703181800099999093999190991900999099199999900091999099099099999992999 -080109090900081011111200081313051404081313040200151617031804151506191800999999390990191990991999090999919990990099199099099029999919 -050108080804091011121204091314060200091514161700181814190300181814202004999900309990119090991990099909919999199091999992999999999090 -040809090500101009091100121314031500041302161500011316160600041717171700009999099099999999120909999091999991099999993199999090909999 -080309101000110609101000120209131300141409150500011615150400041717171704299991999999099919909919999919099919099919993190990999909990 -080401090900081010111204080610111300141414111504031617111800161619020500999999030990910090990999999990909999909999092199999110999199 -080109100600080909111100121212111100040213131300051415161700041414030400990099390990999999199999999910999099999199090119999920909999 -030809050600040209101104121213131400151613171404151819191400150119191400219999990090190091909999999199999100009109999999993999999999 -080808050900011011120900131414120200151614121704041819121704181806031700990999909993090991999909119009919999900099999909099099999929 -080809090300040609091000111213141004151516161000011516050200041717171700909999999299999900909900090990999999999999193909991091909999 -080809031000080809041000050209111004041213111000141415110100140616171700992999999999190991999909990919999919090919999013999909990099 -080809011000110812101000110506131300141414131300040404021500031616161600909999903990909990991999099999999990990099199991999019929999 -040308040900101008060900101008111200021308111200051415161200171414010400990990299999909999990999999199999119999010999910909930909999 -040308080900101011080900101012020904061314151500161617151500051817010400929990999999099999019999910990919090999099999009999930900999 -080109101000081111121304081111061400080205151500041616151500171716030400990999309999900099990919909999909190999199999999900990999299 -080809090600080305021000111111111200131414041500131414161704130418011700919999291099901999991999909999919099999990199901099039990999 -080801091000041112131000111112141000031502161600171718161604171706050400999099030990999999909990199999199911992109999999099000999999 -080903101000080911111104120913130200140913131504160517180100041717190600992999999190999099991909999099919909100019999913909909999909 -080801040600080910101000090904041100121212131300041403131300050215150400999999030099199999990990909919999999990199999929991910901999 -060108090900100808111104051213111104141415041600141402171600181818031600990990399990909000199999990901999990999919999911909999999929 -080909010600020909101000111213141500111216170400111818191904031818051904199991993099919919099990009990009999999900999999029999999090 -080801090500101011121300101014141300151614141300021706181804041717031804999099030999100999099999999919999199991999091909009999999290 -040808080800010910110200090904111200131414111200041414111200051506160300099999919193190999091999999909999099990999999999990902909099 -040503080800091006110800041211110200041213131300011214141400041215161600992990099990099900991991919999999009999999993099999999900099 -080909090300080205101000081112061000081314141504161617181504161601192004999299199999999991099991099991909009909919999009099300999900 -080903101004080904051000080911110200011211131300061415161600041718161600992909999990090999991990999999919311999099990099999099900099 -060809050300100809111204100809131200141415021600141417181804041901181800099999990299999099909900099999019911199999999109090399909999 -080801040500080809101100020406101200131314141400031315161600171704161600999999930099100910090999999199909999999999092909990099999999 -080808080400040906031000111102121200131414050400131514161600130117161600999099099990092990991991199919999999999990090199993099999099 -040308080500090406080400101112021300101114151500101114151500101616010400929090999990999909010999199991909999999999990019999030999999 -080804010900080810110900041212131300061212021400031515161700051518181804909999993999000909019999999999919099199991092919999990909990 -080409010400080810111100031202131300040514131300151414161600171706161600909999903099199920191999199909999999990990999909900099999999 -030808090500101111111100101204131300101204131304021414151600171414010600999092900999999990999990999999999999901000999910919930919999 -050304080900101008080900101011060900020412130904141516161700181816011700990990299999999999099999999190099090001990991190990939999999 -080109041000080809111204131314141400131315060200161617181904161605180300999099399099100090199999999990919990990909199991099099999929 -080609091004080809111000031213140100151513161600151502161600050417180400999909099999910990119990939299999990999919999199909909990009 -030808080400090910021100090912130500141515161604141515161704061819011700299999991099910999199990109099199990909999099999099039900999 -050809101004111209130100140615131604021715131804191915132000031915202000099909090991113919099990900199909199909199099999929999999999 -080904011000080909101000081111120400081313131300140615020400031616160500909999993999909999919999909990199099990919990910999919929909 -080804010600080809101100121314141100121514141100160504170200160318181804999999903099001990099909999909999999990099199900999991992990 -080804010500090910111200091313110600141313111500140216041700141803171704909999093099010999199999999999909999099919091190999999912990 -080803090600080804101100051212120200131314141500161714141500041704011500992999991099991990091999919001999999099999990099909039999999 -040108080800090909100400111102100400111112121300141404120300141505160600999990309999990919999991009991999999199099299099990909990909 -080901101000051112101004131312141500021616141500041616141504031718190600099990039999109091990999099199999199999999990999091099929009 -060808080800010904100400090911120300131111051400151502161400041717171700099999099993990999009991099099029999990919999911999099909999 -050108080400091008081100090212120600091314120300091304041500041316161500999090399991090999990991999919999109299909999999999909900909 -080405090600081003111100121013111100021014041500161616161500171717010400990999090099299909999999099090999190991909999990990930999999 -080909011000081111101004081111121200021314151504061617151500031805041900999999093991919099909999999199099109909109990999991090929909 -080910010400081010111200131314111500020604111500161717181504031717051500099999093099900999999991109100999999991999991990099909929999 -040805090400030806101100120804101100120813131100120213141400151617011400009099990992099999999990909999999999099191999199909039900999 -080304091000111204091000050213090600141413151600171413181800170113181804290991999991900991999901099999909990099999990199993999999090 -080808090904101011120100101313141500161313041500050217061504181818180300999909900999993999019999109099999090999919990190091999999929 -080809031000050811111000120211111300141415061304141416161300040117180400912999999990999991990919999190999909009909999990903099999009 -080809100300080409100400061109100200120409131400151516161400150501041400909299999999999990990990919099919909190901999099990309999999 -080801090904080810090900111102121300141414151600030617051600181819041604999909939999019999991999119901999990092900999099999099990900 -040809051004011109121200131314121200131315161704021515171700181818030600099009099093999991099990099990099999001999999999919990999299 -080409091000080609091000080304021104081212121300141516171700181805011700099999999999090999990999910920119099999099190909909039999999 -020809090300100406040400111112121200111113050400141415151600140115151600119291999990999919000990999999909990999109999099993999999909 -080809030400020810061100121213141400121513141404011513050400161616171800992999919091199919900999999919999990909999993099990900999009 -080109090400081009091104061213111100141414141500031602041500171718051500999999399090099091099999099019999999099919999109921099999099 -080809101000080811100100121311141404150511021600171717171804192006031804900999999999913909999990090009999991190999199999009999900920 -080109090600081009090500081111120200131111041400131503161704151518181804999099399990190999919999019099919999099999190921099990999990 -080406010400080909090900101011121200100311121200051314150400161616021700999999003099999909919990999999999990999291999199909110999109 -030808090900100808090400111206131304140215151300161616160400171701180500999992999090909919999910990919099199991990999990909309999909 -050808080804091010030600111010121300141415120400141415120200040115161700999900099999999909920999909009999999099999999191903991999119 -080801090400101112121304141112120400051115151500031602171800161617170600999099030990990009990990999099199999999919999100929990999999 -080409090300101109091204131105141500161717021500161817191504160106191900099990999299999009901900999099099191199990991999093099999999 -030808080200090610101100091210101104091213140100091513161700051813040400299199999199999990999990910999199990399990990090990900909999 -080104091000081112101000081113140600151513161600151513021700050413040300990099399990109999109999909999999909999991199919909902990999 -080905101004111111101000011213141404151513141400161502170300061819202004009900999999909990999939990919999991990919299909901109991990 -080903100400040906111100121213110200121214151500041614151500161601050400092990991099999990099990919990919999999999990019999300999999 -080804010900081005090904111002121300111014151600031004151700181818180600909999993990909099919911909991109991992909099999999900999999 -080809100500111106120300111113131304141502160400171818181804170119191900900090999999992999019999990901999119091990991999093909999999 -080809090400010810111100121314111100051514021600041514061600041714031600999999990093119990099909999099199999199999990009999999900929 -080804030600080809091004111209091300111202141500041216161700181818010500909999992099999090990909999991909919099990999190900930999999 -080803050400080909101100020412121200131313140400041515161600061515011600929999990099900919099990999199099999099190990919999939909999 -040809090400020809090100100804111100121314150500121616150600031616151700019099999991993919909990999199099900099099999999929990999909 -060108040900101108090900101104120400101113140200101113151600040515150300999990390990119999019999999999109909199999199991909999990929 -080909031000080909101000081112131300141402050400141415151600040104150600992999999999909999109900999991999910999999099090903099999909 -080808090400100411110300121205131300121202130600141414151500040116041500999099900990999909902999999990909911991990999999903099999099 -080106090904081011090900081212131404080512151400021616171400181819030400999909309991009999999909090999099099991990991990909190999299 -020808080300091011120400091013130600091014151500161017171504050117170400199291999999000999999910999999909990999909990099003999999909 -080801090904080810090904110212131404111516171400180319172000051919170600999909939999019099919911100990099199990209999990909990999999 -080910101104031202101100041314150100131314160600171818191904051818191900199902199999190999109999939099199991099090990909009999999999 -080309061000080409111000121209111000121202130400011414151600041414050400929999990999999900999999009991999990099019993900999990909099 -040809090900011010101000041112130500111102131300041415161600031717170600009999909993999999109901999999909919999919990009999190929999 -050104080800091011020800121212130400141515131300141616060300141616170400999990309990910991119999909009999999999999290909999999999009 -080305090900101011090900100211121300141511120600141411120100040404161600290991999999999999909919909919909911999999999093900009999999 -040108090600101108080500121113141404151113021600171113041800171713031800990090399990090909999991090099999991190990199999999999999929 -080910111104120510110300131310061400131310151404161717181404161701190200099900099999909909992999099999999991909011990999099311999919 -080306090900101112090900100412121300021414151504161616151500051718010400290991999990999990990999999190909199909919999919999030900999 -080403050900081011090900081011110200081213141404011513141400041613170600099099929999999999990999919909919099909099993119999999900009 -060108080900101108080900101005120200131415161600131304161604171717031804999990399990190999919999019009919909999909999999009991999920 -080804090300080210101000110612131400151612131400171616131400050118041404909299991991199919999999999109999999991909991900903099999090 -080909101100080309101100020405101100121314150600131316160100040416160400199999299999999919999999909100099900091999999193909999990909 -030809090900050808021000041112131000141515061000161515171704041818011700299999999090911999999900909990099099990999199909009039999999 -060808010400090908101104051212131304021412131300151616171700181903171700099999093099910099199909090999999119991900999999919999912999 -080109101100081212050200081212131404081513131400161506031400041718191904991199310190999999991999990909999909990999999092900999990090 -080808030600020504090900101112090900101113141400151515151400040116040400992991999090999919099999999990099900991909999999903090999099 -080109100400081111111100081213050400081212141400021503041400061516171700990099309991999990999990099999909990991999991990909290991999 -030404080800090210080800111110121300141516121300050416121300061716011300990992099999199911909999999991999009090999999919990939900999 -040809010500041009111200131309141400131309150600160402150300161617171700009999093090919999990999099999009909990919999099999192999999 -040804090300100811121200100813140200100805151500161717181804060117181800099299901999999999091901119990999999999190990999003999999099 -050809100400011111021200041111131400151617131400151617130300061617130400011099191993991999991909099900999099999999299999909999999909 -060108090400101010110200121213131400121516161404171716161404170518190300990090309999991990111999999990999909909099999999099902990099 -040608090500101008111100101008021100041213140300150413160100151713161600909090990999999999919999099909129001999999999913990999900999 -040808080800090502040300101011111200101004121200131414151600131306010400999990919299009909199999999999199990990991999900990030999999 -080306090900080810090904111212041300021212141500161616161500051704011500999999209999999019090999909199909191999991999990990039909999 -080801090900101010101100121212121304141415160200141718031904052006191904999999030999991999091999990909919991199919099029000999990990 -060809011000030409101000110412131400151502131400051516131400041717171400009999993999009929019990909199999919999919990919999909909999 -080109101000081109101004081213140200081516161704181516191900060520031904999999399999109099199900119999919909009999190999909029990990 -080809031004081109091000120405021000131314141400151617181800040601181800999209999990099999909909019099199999990999190019900399999999 -040808080300090904101104091212130500141212021500011617171500181818170600999990990299901099919999999099109091099109993999990999999909 -080109101004081111101004081111120600130214121200151616161600170305181804990909309990999099999999999910909190991099999999919009929990 -050308080400091006080200041011111100121013130100141513161600041504161600929990999090091999991999999091999009399090990999909099999999 -060809100400011111111100121212131304040214131300151514161700150318180500090099009993999999199999090919999090999199099990999900929999 -080803090400101010100500021112120400111112121300141414151500061601040400929091990999990919999919999999909999099109099999990300909999 -080804090600080810090500041112091300031412151500141412161700021812011704999099909999099999090900909999099299999990999910919939911990 -080801040400060809101000111111111000120513141500121616020400031616171700999990930099019999919999999099199909099901099919999909929999 -030809101100120613021100121415161104051414171104181819172004181801172000211999991999019999199909000991999990900919999090099399999999 -040808090300100808110600101002111200131314151200131617181804040105181800999290991999999999090991109919999990999900991099003099999999 -080801060400080909091000111213131304141516170500040216171700181818180300999999930090990991099909990019009990990199999999991999999929 -080910031100080910111100080906020500040912121200041313131300141516010400992999999999919999919909099999109009999999199999909030900999 -060808080300091011121300091002041300051404151300161617181800161601181804999290991999919999199901099919999999090100999109999399999990 -080909090900081010110100060212121304141512121600171718180500041703180400999999911990993991999901900909909099990919099999909299999909 -080809090300040809091000061102121000011113051400041115151400161704151400999999999290099990999909119991999399999910999199900099909909 -080808080900011011110904121313060900121313141400121516021700040503181904999099099993099091999909909999999999999010999911900991999210 -030809100200111112041300111112121404061516161600171717180100051919181804211199999199990999991999990909019099999001999993909999999090 -080809011000041109091000120213131000141404131000141415161700030615050400919999193999990901999909909919999909999999099900920900999999 -030805090904041010090900021112131300141212150400161617171700161601180600209909199999999901990919099199999999091090999199999309999909 -080801090900050810090900111213141504110402161500171718181800171704060300999999939999019909910900090999199901990919999999999902990999 -080808030500020904101000111213101000141515150100141416161700040616041700992991999099099910999911999991099999399009999990909999990099 -050808030900101010100900111213061400151616160200151517170400040117170400999290099999999909991909099900919999199199999090903999999909 -080808080904101011110904121211130904121202141500051617181800061903011800999909909999999009999999900990099911190199199199990239909999 -080809101000031102121300111114121300061414121300151617121300040104040500919992910999999999199999999909999099099199990009903000999999 -080501090400080810101100121210101104021313141104151313161100171703180600999099030999199991999999900199099099901990999999919909992909 -080801050400080909091000111213140600150204161604151717161800151717031800999999930091990919999910909010099999909199099909999999999299 -080809061004031102121200131404121200131515150500131616170100130418171700919009119092919999999909099909199999099991999903999099990999 -040808090900030808100900111112130400021415150500161615151700160406011700099999999999990929009999909910099199091999999190990039999999 -080501091000111213091004061415151000161602171700161618181704031918180400099090939990019090919909999991099919999999999099091999929909 -080109051000080811061000121213021004121213141504161713031800041713191900990999309999909919099991190999109999100999199992909999990099 -030408090904101011090900120602131400121513131400121516171400051501041400909902909999199999190990199999999999999991990010999309909999 -050809010400100409111204101309141400100215151600031715181800171706181800009999993099090099919990999909109019999199099999929999990999 -080309090400080809090200041011111204061314151200161617171700161618010500929999999099991990991909990909099000999909199999999030990999 -030809101100121213021100141414041104061515161600171718161600171705010400211999991999001999909999990090919990999999999009999030999999 -060801090900051011090900121313131304021414151600171718191600031718041604099999039999009909199919990190999990091900999999999909929990 -080801030904081010111200131313111400041516110200171718191904170605191900999209939190999999191999999901919991190090999099090099999999 -080109091000080809091000111202131300141505131604170406181604191919031600999999399999990919909911199009909909900991990909009929999999 -030808080900041010020900111010121300041415041300161715151300160605011300299999991999991909991909009999999009099999990091990039999999 -050804090400100811120100101013131400021516161400170416161400171703061400999090900990903999919991909919099199991999999099999909992999 -030808080400040909021000040909111100121213111400121213141400060501150400299999991090919999990999999091999999999990999009900309999909 -080401050900101111110900101204130900101414020600101515151500040316160400099990930990999991909999009919909991999991999999909190992999 -060808010900041008110900121313110900141313150904041616021700031816051700099999993990001999999909099099999999100991099919999999921909 -040308040900101108040900121108020900061314150900131316151500171717010500990990299990999909909991119099999900999999199909999030999999 -040808080500091011031200021313121200141515151500061616171800041616011804999990099091129919999919999991099099990991099909999939909990 -080808030900021004090900111213130500061413130100151616040400151616171700992999199991999919009911909999999099399009990909999990999099 -040308090400101108090100100212131300101412131300041512161600051706161600999090299991903999919911999999999901999099090999990099909999 -030808080800040909020400101104121200101013121400011516051400061717171700299999991999990900919909999990999991099019993109990999909999 -040808091004110312091000131305091000131314021500161617181504161601190600990900999999219909999999999990109909199909999011099309999909 -080209101000081112100300131112051400061115151400161115041404040117181400911999199999992909999900999999099909990990990999003099999009 -080901100400020909110600121313141400121313151400121605150400031617150400199091930999909919000999999999099999999099099999929099999009 -040808090600101011110100021011111204130414151200161714181800050314181800999090900999193919999999990100099999091999091999902999999999 -080910111204031302111204131305111404151617181800151919181800151919010600119902919999919099990999900900199900999999999909999930909999 -080910031104080802061104121213141100121215161704181919202000181919012005912909199999199099109999999991009991009091990909999939999990 -060108090900101008021100101008121304140415151300161603171300161618051304991990391099199999910999990099199099990991999929999999990090 -080808050900031002111200131304111200131314151604171718150100171706150400999092199099119999099999999999109900009999999003999099999909 -080808080500020909100100110412131304110614131300110315151600170415181600999091991990993919009909990990999909999990992999909999909009 -080910010600040910111104051212111100130212141400151617141400180317170400009990993099909099999999199099099019999199991909919999929909 -040808020600030808090400041010091100121310091400120515151400040415011400091099991992990999999909999999909009999901999090909939990999 -080804010500091011111100021213131400150313131404161606170400161618181800999990903090199991090919999199999999901200099999999909999999 -060809011004111209131004111109141000151502161700151818051900031818202004099909093999010090999999199999199911099909099990929990999990 -080808080904011010090904111112131400110215150500161703180600041919191900999909909993909099109990909991909919990190999990901299999999 -080904101100030905121100130214061100131514141100130416161600131717010400190992990999900991909999999919999919999991099099999030909999 -030809090900050808021004110604121300111415121600111717121804111701191900299999999090919099910999999900909999999009090910099309999999 -080808090300060210110400121213131400121213151604171717151500040118180500999299091990119991990999999999909909001999999909903909999909 -060408090500101112131300021114151500161717150400161717181804160301181800990090009999099909009919099119999999999999099909099399929999 -080801090904101011121200101013121200140515160600021703161600041818181804999909030999109999099999999100909990991999991999901299999990 -080309091000111112121000110404121000020513131000141515151500061617010400299991909999099999099909999199999999991090091999999030900999 -030404080900101004110400101002111100121213141500121205141500060116161600990092090099999999099991999991009910999999999099903909999999 -080503091000081112021300081212141400151516141400171718181804041701061904992199099199091999919909999990999901999019999999009390999900 -040601080800090910100400090910101100121302111100121415160400120405160300999990030099099999999999999909199091999019999910990999999029 -040805040300090810111100120604110200121213141500161613171700161601171700999990900290099900099999919999919909199091999919999399999999 -040808010900100808110900100204121200101314141204151314141600031706051800099999993991919999900919099919099999909999991990920990990909 -080309101004081109101000080412131404021506161600171819161600171919010500299909999990999990090999000199909109999199990119999930999999 -080809020400030410100500111112101300111112121400061515150100161616160400911092991999999990990999999999109999099091999993909909999909 -060508080300091008081100091213041400091204041400151216160200150116161700999990099290999999091990099990999099999990190199993991999919 -040108080600090908080500101004111200101002131400151616170400151517170300999090399999099919090999909999009911990091099999999999999929 -080801090600080810090200041111091200131114141204051514141600151517040300999999939099091999191999199090999099900099199999999092999099 -080209060500101112131304100314151504161617150100161818181800041919191900100991199099199099190929990991999991399990990999999909909999 -080910011100040912131100060914051100151514141600151517021600040417170300009990903999910999199909909999909909999991999919900999999929 -060809091004011109091004021212121200131414151504161414151700160305181900099909099993190099199919999109099999901999999990999990929009 -030808090904041011090900021011111200130514151200131316171200041806011200299909199999999909909919999199099909999900999110990039909999 -080809100400010811020500121211131400041511031400061611041400161617171400911099991993090999919990919999999099299099990009999999999909 -020808080300090910040400111111121200011314121200061516170500041616171700199291999999009919990999999919999300999009090909999999909999 -040808090300010808101000111213140200111313151500111616051504111616060400099299991993999999191900119999099999999999990990099990999099 -040808080800090210030600041010111200131415110500161617111804160117111800999990192990999991990999909091999009099919999100093999999999 -050808030400040908101000110204121300111414121300111414121300110104040600092999999090199991990910999999999999999999991900993000999999 -080909100300080210101100081212131104081212141504011616170500061616180400999299099999199991999999090999009099009919993990999909909009 -030808090500100808110400101012111304140215150600141615150100171717170400990092999999999999090999900910099999099199999993901919999909 -080304090900080510111200080213130400141414131500011617181804161606181800290999999099900990099919999910909999999919093109099099999999 -030809090200101005111104101012111104131313041400061515161700181915011700219199999199909099999990090990919999099999199901900939909999 -080804010900101010100900111112120900041102130900041415160600141403170500999999003999991990099999999099999991199919999100909909992909 -080904011000081112101000080412131400081515020600161615171700040305171700909999093999099999991999019909199091099199999909902999999099 -080808090900021003090900111212130400111214141404151516050600150117181904999991199999299919909999099999909199909109999009993090999000 -080808090900031002040900051111111200131314141500131314161704041818010600999999119992909999190999999099109999999991099090099030909999 -080809090600080809090500101102121200101314151204101616040300040116171700999099999999990909099991999911999191109990291999903999999099 -050408090900100611090900121212131400031516131704180216171700181816010400909990909999099909090999999990909919902190999919991930999999 -080106090900080810090904110510120400111314151500110216171504181818190300999999309999109009909909909991099919999199999119099019999929 -080909011000081111121004081113041000081313141000031502161700181906051704099999903999910099109999999999999999099910099199921009919990 -080509090300101011120600101002131304140415160400141717181800141701181800099290919999900999199999990091099901099991990919999399999999 -080808040900101010100904031105120900131114140900150614141604170218011600999999900999999099909999999290099909991999099090019139911999 -050809090400100309091100101204131100140213131100041515151500161617010600009999999099990992099919999199999119199999190999999030990999 -080809051000080809041100121304031100121214061100151414161100150104170200909099999099990990999900929999999999090999990919993011999919 -080309041000081112121004131412121000151502161600151517180500040106181800920999919990990090999909999091999910999999999000903099999999 -050602080300091011080800121314141500011614141500171717171504181804191904991990019299099909199909909909999319999099999999090909990990 -080309090900080406100200081112131304011111130500041415161600171418161600929999991999991990091900990999999391099009999999909099909099 -080409090400100406091100121212021300031414051300151516161300151516010400099990999099999900000999119991999299999990999991999930990999 -080109101000080909101000041112131400151104021600151517170600040317170500999999399990909999190990199090109999999991099099909999992909 -080901100600111212101300110412140500111515161600040215161600041717170300099990039099900999999999909901099990990199999999991999909929 -080808080300090910110600091202130400141414151500161616150400050117171804999299919999900999199991909019099999999919999999903000999900 -050809101000020803101004110806121300111114151300011616161600171704180400019999929991999019909999999990099990099109993999990909999009 -080901101000080911101004080412131404021516171400051518181400031518061400999999939991109099009990900190999190990990999999999999929909 -080104040600080909101100080912121300140512121300150216041300151516170300999999300091990999009999999109999999091990991199999999999129 -080801040900081010101000111212120600111305021404151616041700151616031800999099039099999991999909999909109999109009190909999991999929 -060104080800090909101100121314101504120216100500121616171700120304171700999990309099999919090919000919999919099999999909992099999999 -040104050400080808080900101111121300101411021500101616061500101616031500999990300099999901990999009999999091199090999999999999999929 -080109100400081109031200081113121200061114021504161117171800160517170400990099399990092999999991999991199991000999090099990990999999 -080509010400080810101000020611111100121204131300141215131300140316170400909999903099199919990909999199909990990999999099992099999009 -080109090500081009091104121212121300141415021304160617181300161619031304999999399099190009199999909990199909909091999919999199990290 -060108080904101108040900121314151504161702151500181719190500181719190300999000399999099901909901190099999091999919090999999999999929 -080509101000081109101004081213140600011516031700181816171704181816021904099999999999099090900900099909999319299999999099099991999110 -040108040904100808090900111212121200131405020600151515161600171717031800990900399990909901999999999009199909090991999999909991999929 -080409090300101105091200131314140200131314141504161616171500040106181800099290999999091900991999919999999999000919999909903009999999 -080803090400080205090100101112091300101415091300161415151300061404170400929099999991093901999991109909999990999999990999909900999099 -060804090400010810101100120810101100120502131300121414131500041403041600090099990993190999999909999999199901999919999990999990902909 -080901101000051112101304141512061304021616171300181616171300191903170400099990039999009099999911990190099990091999999999919999992909 -080808080600010910100500111110100200110412121300141503131300160417170400999099909993190990999999919999019999990099990929909909909909 -060108090900101108090900041213141400121215141400020404161600171717030500999990399990909901009990999990999999991009099999919990999299 -080910111200031310111200040214061204051514161200171714181800170414011800199992199999909991099901990999099001099091999999999939990999 -080309091004081109121004081305141500021616161600171718192004171701190600999909290991990099909990909109909999991110099999099390999999 -080905061004111112131000111114150100161617151504181818021904032020202000009900990999090999009999039990999909909999199991099019929999 -040608080400090908080100101111121200101104121200101314150200100305150400909090999999093999019909999999999909999999199111992090999999 -050408010900101011090900031202131300141215131300061215160400041215161600909990903999999990091991199299999190990990099999999999909999 -080309041000111209051300060209041404151516161400171816161400171818011400299091999091990991990909990910099999999199990190999939999999 -080601090900081011111204130211111200141414151204161705181200031919190400999999030999090009999901999919099999901090999099929909999909 -080805060900040810110900121310100900141302151600171318181604031304011600999999900999090909999909999999009111191999999991029039999999 -030808060904100808020900101105121300101112121304141115161300041117011300299909990999910999919999999990999099109909990991909039990999 -050803090900101011110900120411110200131313061400041515151500041601171700092999099999999909991999909009919999099909190999990309909999 -060803090900041010020900051010111100041212121100131313140100151515150400092999099990911999999909999991999999090991999903999909999909 -080809090900080810100100041112120400130212120400130614151600130314140500999999990999093999919901909919999199099900999090999990929999 -080808080400090310101000111202131300141415151604141415041600060117180500999999909092999919990911199999199999009999999199903009999009 -050808080800091011120100091111130600041414150400161602171700161604031700099999090990913999909999909991099999090919999019999999990929 -050308040900020808040900101111040900121213140900121215150600040116161600920990999991990919999999999109099990099909099099903909999999 -060508010904101112120900130212120900141516171700181516191704031519190400909900903991190919999919999919099190991999999909029999999909 -080609090300080409091004081111051200081113141500161613140200160113171804909999999299099099091999099999919099990999199109993991999110 -060808090300100808091100121212091300041414091504161414170200050118171704999990999290999990991999999009919990909999190999903191999190 -020809010500101111111100100412131300100414141400031515041600041506161600119991913099999999009990999999099909992900099999999999909099 -080809101100010812061100131312141100131305150400040304021600171717171600990099900993199990999999199990109999999991999900902919999999 -030809090400100409020400111111111200040513131200061415151200161415011200219099999990919909910999919009999999999990999991909939900999 -030808090500100411121200101314121204100215160600171715181800171715010400990092909999909990999990190991199119999091099999999930999999 -080809010500021011111104121313141500121617041500120317171500121819061504909999903091999011199999009909099909999999992999999999900090 -060408080300091008081100121302141400121516171400121515170400120105181804999990099290991990109911999990999990999999091999993009999990 -080109091000081109091000121204041000121314150500160414140600021717170300999999399990090991999990999909099900091099999990919999919929 -080809101004080809101000011111121204131114141400151602170300051806192004999909999999909990099939090999999109991999991119900912990910 -080801091000110812091004131415041004130215161000031715051800171715061900999999939991100019909919990919999910999990092199999990999909 -080105090600081010111200041010111300140215111304161615171300180415031300999099300990900999990999999019999019909099999919909929909999 -080809100500010809101100041202101104131415101104061617180300161619191900919099999993909999199900900901999099900019999912999099999999 -030804040900041010101000111102051200111113121200141513160100041516160600299099109099999909199999099991999900999999990093909199999909 -040801040900101010100900111112130400111104131400031502131400151506130500099999030999990999010990999999999990099999999119929990999099 -020808080900101112030900041112060900011113041400041115141400041515051600199991992991999999999909909990909309999990990909990990909909 -040408090900101108090100120602131300120414151500121614151500120314050400901990999990093909109990999991909909999999999199992900999999 -080808010400050909090900041011111200130214141200130614151200130404031200999999903090999991900909999919999019999099999919999029909999 -060108090400100808111100101012111100130212141500131612051504041718031500999090390991909999099999999919909090999190999999001999991299 -050809090900101006110400101012130100030414141500161614171704161602181800099999090999990999009990939990199999092099099999099190991999 -080909011000080909101000081111111104121306141500040216171704051816190300099999993999909999919999990919099009090199099199090999909129 -040808080900100204030900111112120500111113131300141516161700040116160600999090102999999901999990909999999909991999991090903990999999 -040808080800010910101100120410101100120213131300140615050400160315150400099999099093199999999990999991999119991009099999919909929909 -050308080800091010060200091010111200090404131400150416171700151616011700929990999190990999991999099900019999099999199009999939909999 -080804030400080809101100050212111100131312140600131312151604171717011600909999992099119991999999999019099999099990999110009939999999 -080109090600080809091004111102120300111113121400150413121400161704120500999099399999991019192991099999999909090099999999909999900909 -080809100500080811110600120211110100121313141504121617181904031616180400990099909999190991999919939999099099009909090909029990999999 -080109100400080909110600121213131300121202141500161718181504190503181504999099390999909901990991999999109991999919990099009999909290 -030809091000080811101004020411120600130511140400151516170100151518181800299999990999909019999909009199999990091090999113999099999999 -040803040900101006110900101002110900041212120900131414041500050114161500929090199999909999999991199999199999090199090999903909999099 -080909011004110909101000111213131300110214150600031617181800191604051804099900993999919991990999999919009990999100999999929009919990 -040801090500101010090400110412090600111113090200141513031600171717161600099099039999910900999999009990999999199099190999909929999999 -050808080300090410040400111102121200111113120600041413151500161616011500999290919999099909100991999999999910999999090019999039999999 -080801090900081010090900041010040600021112131404151516160500031716181800999999039999909909900999999991999110001990099999991909929999 -080808080600090910040400011111121300041112120500141516161600021717170300999099909999009999090939909999909009999199991099919999919929 -080109050400081011111204081311111400150206161400151718161600150318180400990999309090190099999991909919099190999999990099999990929999 -080904031000080911051200081314021200081315161204011317171204181817170600999299909199099999009999919990199011909999993099090999999909 -080905031000081112061300141516021704141515181804141919181800140120202004099299009199090999091999010999199999909909990919993909999990 -080808090904101011090904031002120600131415161700181920201704051901201700999909909999999029009991109999199009990901999099009399999909 -060503080900101010021100121314151500131314041600171714161600171701040400992190099199991909919909199999999900999099999909999300999999 -050808030400090808101100090204101100121213101100041413101500041613010600992990999099999991999909099919999911999999090090999930900999 -040808010900040808100900111210100900111304050900141415021600031515040600099999993990901990999909999999999009090999199911999900929999 -050806090900080810090900110212131404111515151604111717181900031717011904099999909999909990909911900991909999009991099909929939999990 -080309090400080402091000081111101000041111121300141516121300050117061300929999999099019999199909099999999090099199990099903099999099 -080809011000111109101000111112121304031412121504160617170400181902170500909999993999909999910999990909909909902919099099919199911909 -080910010500081112121300081112120400140215161600140617170400140317170400009999903099190999999999909919099019999019099999999999992909 -060104080500090910080400090911021200131311141500131611140400041616140300999090309999919999110991909999199999099099099099909999999929 -080309101000080609091004081112020400131415161600171717181804050119181800929999990999999090910999199001099909990919999999003099999099 -080309090900080410041100080210041200131310141200130510151200061616011200299999909999990990990919999919099919999090999910909039999999 -080906100400080909110100081213131300141516161704140218160500031919191904990099990990913991099999999910909099909199099199999199929990 -080306090900101112090900101112131404021112131304151112161700151804010500299991909999999999990999900199999199900990999110990930990999 -080909090900080403040200081004061100081010121100131415121200040501161600999999929190990999991909999990099999999909190019900309999999 -050808010600090808101000111213101400041204151400041616151400031602151400999990993090909909999990009099199990999999990999999199929199 -050808080800091010111104011010110300121213021400041516171800151506041800999990099990999099992939999901199991090900099099999009999999 -050809100300110609091200111302121204111414140400151616161600150117180400009299991999999990199990990991099999090991990999993099999009 -080804010400040910111100121212111100061313140200041313151500161605150300999999003090009999999999099099199990199999199999900099999929 -080404010900081010090904081010111200061314151200160214171200161803051200999999003999919099900909999919099099999190991099999909912999 -040809010600101011111200031011131400150216131404171716131400171705130400009999903099990999900991999219999909901199999999999099999909 -030408080800090610110100091213111104090214151600091717181600050418181600909992909999913990199999990901009119999990999999909099990999 -080309100400080802110400061211111300141415051600141415171600181815011604290099909999199999190909909901999999999990999010999939990990 -050608080400091008080300110212131300111212141300111516171804111504011800999090099990192991999999999919999991099991999000099039909999 -050808010600091010111200131010040400131302140400151616161600151717170300099999903090910909900999999991999999090910999999999919999929 -050808090400100803091100101006091200131404091200151516021200040117171700999990999090929999990999099099999099999001999190903119999999 -050108090300101008111200101002131204141515041200141515160400141717180600999290391999999999019999100011999999099999999900999009999909 -080801090900101011120904101013140500040415151600031715151600181818020600999999030999099099109999009091999909099999992999991910999199 -080903101000060904111200050913130200140913040400141415161600171701161600092990999199909999901900919999909999999010999909990399999999 -020809100300111204130500111214141400011215161600061217161604181817170400111291999999990999009919999990999300999909990999099999990909 -080909010600080909101100081212131300041204021300141414151600040317170500099999993099900999919999099999999099199901099999909010992999 -080804010400080809091000021106091000121313131000121415161700050315150400909999993099199991999910909109999999999990991900902990999999 -080808010500090410111200131310101200131304061200041414021200031516161600999999903090991909999990909990999999999990990911991990929999 -080409101000080609110400081209131304141502131300161617170500160117170300090999999999900990999909090900999119991919999990993999999929 -080808090900101011090904051012060300131314021504131316171800191901041800999999009999909099999990099009929911909991199191990309999999 -080808010400090910101004030511121300141415161300171402181300171704061300999999903099099099919990909290199990990991999119999099999909 -080808090900101104090300101105121304141102150400161616161700060118171700999999099990099999902990910999199111991999099999903099999099 -080804010500090909101000021106101000121313041400121313041500160317171700999999003099919910999999099109009999999999099909919990929999 -080909011004080911121004081314041000021515151500161717180500161703190600999909993999910090109911999190999999991999091909999909992909 -060105080800091011080804091012130200141015161700141016161700141804031704999990309990109099199999119990919090999999999999990999990920 -060808080800040909100100040211111200131311111400130315151400040516171400099999191990993991909909909919909999999990992999909999990009 -080809090904010810041100121314141100151614140400020503171700181818180600999909909993999991009910909109999999091090999999919299999909 -080409030400080909101100080212131400080612131400151516131400051701041400092999999099990991909919999999999090091909999199990309909999 -080805090904080810110100121204131400121213131404151515021400031617180600999909900999903990919999019999999909909999999901999910921199 -080910010400020410111100120310111300121410151300161406151300041405171300119991093099919919999999909929099199999999990909909999999009 -080806090900100511041200101314041200100215151200161615151200160301040400999990909099909990099901999911099999099199999999999300929999 -080801090900061010101004111111121300141414040200051515031604171515181900999990030999999099019999919990019999999909199999009921909919 -040808090400040808100100111212060500111213021400111516171400111516031400099099990999913909199909999991009991099091999919999999999299 -080808080400010910101104121213041100021413131100141415161100030517180600999999099093190099199991909199999199999909999990929009990909 -080801090904080810110900121310110400121410110500150216171700180604170300999909930999009999990901999919999999099199990119909092909999 -040305080800090910080400090211121200061311121200141411151600141411010400999990209999900999099919999919999919990990999910999930990999 -080409010400080809101100121309101100040509041100141402060300141515151500909999993099099999999900109009099999999919999909990192999999 -080909010400081010101000080611111200031311111400041502141400000000000000999999903090999999910990999999909299999119990199999999999999 -060801090900101011121200101004021200131313131400151515040300000000000000099999039099019999999999919990199999199909299909999999999999 -050403010800090909100800021111111104121213131400121213131500041617170600999990023999999919910919990090999999099999099999990090909999 -080809100500031112130600141516131700181516171704191516202004021516012004900099099999000929999999999199099999901990999919019939911990 -080504090300100411091200131411091200151406021200011616171700041616171700099290909990999909999999099099199099099001993999999999909199 -080904011000110212101004051314141400061315161600171715161600170315180400099990003999199001119999999999909099999199999099992909999909 -080509100600110409101200110209041304111414151600111414151700030118181800099990999099009999990910900919909990999999099999923090999999 -060108090400101008021100101008121304141414031500161617181804161617051800991090391999191999991999910099209999990909099999099909999999 -060108080400090910101000090911121300041415120500161617171700161602040300999990309099999999090990999010909990999199999999999192991099 -080109090400081009090400111012121200131014020600041014150300051604151500999099399990190909199999999099199909090991999999990992900999 -030806090900101011020900101012121200040413141400151613140100150413170500290999199999111999991999999999919909990999990003999909990909 -080109101100080909120500081313141400151313060400150216161704150418160300990099399090909991909999999999999190999999091191099092990999 -040108090900101008110900101008111100121302050400120614140400120415160300990990399999009999999999999199909110999919990990999199990129 -080804090400081010101000111111121200061302040300011314141500051314041600909099990990999909999999199991929090999919993990999990901909 -060308090900101008090900101008021100041212131300141412151600051404010400929990999999999999990999199909109091999099999910909030999999 -040809011004111112131000110214131000151617131004151618191900031605061900019909113999910991999990999010999999909909099999999009929999 -080804010904080810110900121313141400020613141400151505041600031718181800999909903999110991909919999199999099991909099990991990929999 -080808080300090210111104090512131400091212150400091617181800060117170400999299199999199090109999009999909090999190999099903999999909 -040808010900100808090900101112130600140215161600140415041600140315051700099999993999909999919901199910009199999990990999999990929909 -080901101000060911100400120913130400120402141400120315140500041616161600099990939999190999909901999901909990999919999999992190909999 -060808010400090908101100121302141400121516141404121517171800051517030400099999993099001909991909199901999999909919999990999990909299 -080409101100120509130300121415021600121406161600121717181800040117181804099190991290999999019999099999199999999001990919903999999990 -080910061104080910121300081410150500141402161604171718161604170119200300999009999090990999909990009099999910901919999999093199999129 -030802090500080804101100121314101000041314150100161614150600161614150400911992901099990999999900999099199990399099999990999999999909 -040408080600020910101000110909121200111305121200111415161600030104160400909990909091999919099999099919999909999199999009923090999999 -030808091000111209091004051302141004151614141000171819192004170119190600999992909991199099199900100999999099990019099199093990999999 -080802090900081011090904031213131300011414150600051414161600171704041600910999919999199021999999999910099399099999990909990909990999 -080806040900010810110900121213130904141413130900140215160400051717170300999999900993000991999990990199999999999109999900901999999929 -040809090900011011041200131414121200131414021500131617061500161605031804009999099993009991999909199999199999199909999009999991990920 -080104090904081010101000111202131400110415051600111515171800110306171700999909300990999990910909199991909090999999099999992090999999 -080809090600101009091100121013141500121202161600041718161604031705010400999999099099990999909990009999909901999919990199099030929999 -080809090600080810031100121314111104151617021805191920202004190121212104909099999999929990199909190099199009109909199199093909999990 -080803090900041010060900111110120200111113121400151617121804051601120400992999099990909999991999999990919990999099190011009390999999 -050808090400040808090100040210091100121210091300121414151600031414061600090099999990993999999901909919909991999909099909929909999999 -080910110300060510121304141410150200161610151700161819151704181801041700009290991999991090991999919909999909999909999010099309999999 -080109090400080810101000061112130200141415161700141418181704050418031700999099309999199900919990919990919900999990999999009999990929 -030808080200040909101000110909101000041213140500151212141604171818010600299199999199999909999909999990109999990909990900009930909999 -040508090400100608111100121313111100141313150100161616151500030402171700909090990999909900999999999099099999390909999999929191990199 -040105060400080808091000111112121300111102041300141516161300041516160300999990300099900919999990909999099919990919999099909999999929 -080601040400080909101000080911121300041111121300030504121300141516021300999999030090909999199999109099999999999099999909929919911199 -080801091004080809091104121314141100151617180200051606191900041603191900999009939099099000199999999009199990190909199999999999909299 -040804050300091006111100091204130200091414151500161614171700161601171700909990090299099990919990919909919099999991999019999399999999 -080910051100080910121100130910121100040210121400151516121704150304010600999999990999999909999901999919909099999119099910099030929999 -080808030600050910111104120213111100141415151600171415151604170118190400992999199099909001099991999091999919999999990990093099999009 -080904101000060911101000010912131304140912131304151612171700051602170300009990999999009999999930090999999099900199999999909992991199 -080806090900080310090900110212121300041414141400151515010400000000000000999999909992999919090919999919009999990903099999999999999999 -080309101000080611121000080213121404151617141404181818180500040119191900920999919999999990199991990019099190901909999999903900999999 -080109090904080804100500111112131300111102131300041415161600141403170600999909390099999919009999999990999910999919990109999909992909 -080806030904080810101104121314021500161317171700181319190500180119190400909209999199999009901909119991999019990990099999993999999909 -040809090300100209091100100512120600101312041400151515161400040104161600099999099291191999999999909909999009991990999909903090999999 -080910111100050910110100060912130400141504131600171718131600031702131604099990999999003999919999009000999099999999999190929199999190 -080306090904081010100900080211111200081311111400151516171804151505010400299909909999999999900919999919909919999991099000099030999999 -080903100400080911110400080911111200080213121204060514151600171814011600929099990999999999990999999919099011909999199001909939900999 -080809040600100209111104121309111100141313151604031718191600171701051600909999990091199019999999999191909990002919999090999309999999 -050608080400091008111200091013140400151013040300151013021600150113161600909090999999090999900999099099999010999999299919993919999999 -080808080500060909100300111212021300011414151600171714041600171704181604999099099999919901912909999919119399199990999099999999999000 -080109100400080809110400120509131300141406131300140215151500041617170300990099399999090919909999999109999909999990991199990902909999 -080809060300080809101104041209131100141213131100011516170200041817170500999999990299909090999999999090999099999009193091991999901909 -080809100400080809110100121209131304141402151300141416051704031616061800990099990999093990919999990999999901199919099990099990929909 -080304090900080802090900101011051200041314151204161616161700181818010600299999909999199999190990999991099001909991099990999030999999 -040808060500090909091000111213021400031515151504161617181800041717011800999990090099999999900911119299919999909001999999999939909999 -020809100300110412120600111112121300141414151604171718181900050118181904111291099999999999990999999910909990009199999099903999999900 -080910101000060411121200131302120500131314141400030415151600171715010400009990909999009999999991909991099999992999199991990930990999 -030809100600080809041100020512121200131313130400141516171700181801171704290999990099999919090999999100999999991999091109990399999990 -040106080400090910111100090910021200041314151200161617031200161617170500990990390099009999999999919919199011999009999992999990999999 -040808090300100209090400101011121300011414141400151516050400171717170600999290099991199999990990009919999399999009099909990999999909 -060809090900100211110100041213141400151513141600151513171700040313050400019999119990993901999990099919999999099999099999902990999099 -080809101104080212031100051314151500061614150400171614181800041601181800991909012999199991990901999999999009999990090909909399999999 -040406080300090910080800090902110400121314141500121617171500120501171500999990009299919999199999109909199909999019990999999399909909 -030809091000110809101000060812120400130212121404131516171804130519011800999992999991999999009909999919909919109099190901099039990999 -080909090300081011051204131415151604131706151800131719190200130119192004999999909299099000901999990909919099999900199199993991999910 -080306091004080511121300081411121200021515161600171718161600171704010400290009999099999990990909099199099099991999999119999930990999 -030808090200061011111200051311111200141414141200041515151500041616010400291199999190999990999900909999999999090999199999999030909999 -030808080900101010100900040402110900121211110500041314151600131301040600999092999999999990199999109099999909990019099900999300999999 -080109040500080809041000111112121200111313130400060214150400161616160300990999399099090919990990999919909999990199999000991999999929 -050401040800090909090800101112130800040212131300141414151500061617031500999090039999990919909919099919999999990199999909901999991299 -080409101100120504131100120213131100120614140400120414141500031616011500090990900990999999999911909999109099999999999090929039999999 -040804030900101004110900101012020900131414140500131515061600040115161600909990092999991999099991119919999099999190099999903999999099 -040808080800010909100400110909101200130614040500130214140400041515150300099999099093909999999919909190909990999099991990901999999929 -050408091000111213041000121213141400021504141400161717171700161603010600900090909999909909999999099099999109991199099999999930992999 -060809090500100802090300110812131400110815131404111617181804110119181804999090919990992999199999999991999999009010990199093099999090 -080106050400080909091000081112041000131414150200161614171700161604170300999999300090991990909990999090919999190991999999999992990999 -040809041000111213101000111413130500151616160200151706181804150103181800090999009999909990999909909000999999199199199099093999999299 -080801090904081010090900111010020500121212131304141516130400140617180300999909939999909909999909199909109999909099090099999019990929 -030808091004110808091000110512041000131415161000021718181800041717010600999902999999909999099999999100099909091900991999999130909999 -020809090300101104120600131312121400011516171400051818171404041818171400119291999990099919990990999919999300099909990999099999909999 -040408010500091008111200041010111200130214111200130604151200130315150400909990993090009999999909909999999111999099999900999990929999 -050804030900101011120900101006020900131415161600041415161600171715010400909990092999091999099999919009199909990999999909999930990999 -030808050400090908021000090411111000041213141000151616161000171717010600999992990099111999999999999909099900990990990991999030999999 -080809100300111112120400111102121300051415160100171718181904061718181904991299019999999999190991909919999011399009999990099999909990 -060105080900101112120904131312120900141415160400171402180300171719191904990990390990199090999999909901099999099919999992999119990990 -030808080500060910021100041210111100131410151500161610041704161601171700299999991090919990999999999009909000999990099099099399999999 -080405010900080810100900111110100904121104131400120215161400120617180300999999003999990990999991990990099099999190999190990199999129 -080809091004080806051000041112131004011415021600031715181600191919191600909909999999999990009901100919199391099990992199999909999999 -080803090900101011090900101002120500131414140400131315151500040106040400999999029999919999919991109199999999099099999099903000999999 -080909031000080909101000081111020600081112120400131415161700040115050400999299999999999990919909109999999909999109090900903900999999 -050308080900101108080900101112020900101314140400150414160100060417161600999990299999990999999991109999199009090999999013909999990099 -060108090900101112090900101312121404100415041400160217170500181818180300990990309991099990999999900900999990991909091999991999999929 -080808080500090909100400110312130400141212151600140217171600061817011604999099909999990999009929909199099999099909991990991939901990 -080106040900081010110900081012120900080212040900131305141500040304161500999099309999900999199999999999099119991999099090902909999099 -080809100600080509100300111209101304141516160200170416161804171701191800999099999990992909999900910909919009990099199999099319999919 -050809091000011109091000030402121200131313121200140415151500141606170400019999199993990999199990099291999999990909999999990009909909 -080910010500080610111100081210131104081410151600170204031604171718191900009999993099019999999991090919099999099109999999091929991199 -080509091004081102120400081306031400081315151400161615151404160117181400999009011099199991929990999999999999990199999099093099999009 -050809090400031009091104121313061400120415151600121715150100021718181800099999099099099029090999999990009999099099999193919909919999 -080804030904080810050900111213020900111413131500111617181500110104180600999209909999099990909999119909999099999919990100993090999999 -040809030500101112121300100212121404101515141400161515171800161606011804912990199099999991990999990910999999990990990910999039999990 -080909090300080210100400081110100400121213141500121216141504061718010500999299199999190999999900999991909901099909999999099030900999 -050809101000010811111100060812120300130812141400040402140400151515161700090999909993999999099991999099929099999919999019909000999909 -080808020500030910110400121306111404121215111600171715181900171701191904991099911992199999990990990909909991099099999000999399999990 -040809010400101009111200131009140500131515160400061515161600031717170200099999093099990999919900009999199990099999990999999991929919 -040808030400020809091000110612121000110413131000111413130400110115160500099999992091199910999999909990999999999099991090993099999009 -060108080400090909091000111111121300021415041300141416051300030417171300999990309099990999199999009190999190999909999909920099999999 -080809041000110312121200111102131300040406131300140515151500141416010400909099909092999999099991199900999999990999199999990030990999 -040808090600011011121304101011141300151511021300151511161700040318180500099099090993909099999991109999199909999991999990909910992999 -060801090900100811090904120413021400121215161404170318161600051919191900999990939999019000991999119991099919900209999999909099999999 -030809090904041011041200021011051300141511161600171818161600171818010600299909199099990909990919909199909199999109990919999930999999 -040801090400101011091200051004091300141415150200161615150600161603171700099999039099011909991999099999919909199099999990999209999999 -040108090904100808090900111212131400151216061400020417171400181818030500999900399991909910909999909190099999991009999999919990999299 -080804040900081011090900011006041200131314021200131314041200151605031200909999090999009999099939999919099991199999999190909999900929 -080401090600101111091204051111131200141414151204161615150300160217181900099090939990900009909999999991099999909199999999991992991119 -080808060300040910101100040910101200130905041200140915150200140115151600999999090290999999991990999099999999990900190199993991999919 -080809100400080811101000011211060400041211021300051214141500161614030400900099999999199991990939999999099091099991090999990990999299 -080808090400011010101100121213141104061215161100170218191104171703190500990099909993990990199999090991099099999910991199099990992999 -030809041000111111121204051302141204151514141600171717171800191919010600219099919099999099199900190999909999999019099990999030999999 -080809090900101111110100121313131300140515021604141417161600060404031800999990909999993909199909999999199900109999999009900091999929 -080809051000080809041000041112121004061312140300151617181800150102181800999099999999090990999909900909999019299111990999993199999199 -080805090400080810091104031202091100131415090100061617171800161617171804990099999999919021199991909999999000390990999990999999990990 -080809100400030804100100110206101200131414101200131304151500050404151500990092909999993991999909909010999991999909099999900999999099 -080803090600081011091204131011140200151011160500171819202004181801202004992999999099991009991999119099999999090010999009009399999990 -020809100300111213131300141504161700151505161704181819161704180119160600111291999990099919999999099199999999909109999000093999999909 -080801091000080811091004051213090600041214091500161203040200161717171700999999939999090009199999909991999001199990190999999291999999 -060801090900100811090904120813131300020814140500151617181904151503202004999990939990199099009919999190909999991999990000099990992990 -080809090300080209090400061011121304141011151600171811191604181801051600999299099999199991990999000099009019990990990999099309999999 -040808080300090210100400091111121300091414150500161414171700040601171700999290199999090991999999909919009099999990990909900399999999 -080905101104081204021100131414150300011414161600171718161600041718180600909109091990999909012909199999999390999009999999909990999999 -060105080900101111111200101313041200101314021500100416171704181818031700999090300090999991999999099991999991199009199999099029999999 -080109050400081009021104121212121300141515031600171715061800171719191904999999390090991091011999999009919999290999999990999990990990 -040808080300010909051000110909041200111313021400110615141400041515041600099999900293999999991909999991019991199909990999999990909909 -030809041000040909101000111102120400111113120600141414120100050415161600299099199990909999199999909991999999099019999993909119990199 -080309090904080610110400080212130500141512161704141812191900181812011900299909909999900990099919099919009919009999990919999939990999 -080801040900080810101004111112131304021415131600061718181600051903181600999099939099199091099999090190909199990109999999991999902999 -080801090904101112090904061112121300021114050400151617181800151903181800999900939990109099999909909990909190991909991909991999992999 -080309090900080610101100080210101200131414050400131414151500160401150400299999999099999990990911909991909990999999990909909399909909 -060803090904080804040900101112130200141412151500161712151500050112181800992900999999999909001909999909019999999099990119903999999099 -080809030400080809091000051104021200111113131400011515161400041515170600992999999099999990910999909090199999099010993999999909909909 -040809090904011011121200131311121200051404150200161617171700161603061800009909099993119999999990999909919090099099199999999290999909 -080909010400040910101000110204121200111304121200141313151500030506151500099990913099999991009919999909999909991990999999920099999999 -080809101104120213031100121214151100011614171104181814171900181804060500991909012991199999999990009919999390909099999990999900990999 -030804090900050806090900021011111200131313111200041414151600171414010400290999999999099901990919999199999999099910999910909930909999 -060108090900101111111100121314151504121617021804121917171800122005031804990990309990999901999991190900199999109099999999990999990920 -030809101100040909101100040602101100121213101404121515151600051718011600299999199990999990199999999091909991109999190991999039900999 -060804050300090210111104121213130400121214131500161617171700161601181800909990090299119001999999999999909910990919099999999309999999 -060108090500101011121200101013121400151613131400021717171404181804030400990090300999999999099990909919999199991999991999009920990999 -040501040800091011080800121211131304121211131300140215150600141617180300999990030990009990909999990999999999990919099199991999991129 -040809101000110409090100121313140300151313141600170402141600171705140600000999999990993909199909999099929999190919999019999999999009 -080801090900100811090900101012121200131306140400051504040300040216161600999999939999199991090999999910099999099190990099991992901999 -030802050900101112130900011414141504161718181500161904181500161919061504919092119991919999910939900999999009099999999909999909909990 -080509011000080809101000111209130400041414021504161617181500161606031500909999993999019999999900009091999991109990999009999099999929 -080809051000040909111000121314111004131302111500161718111500040603011500909099999999909909999999100091999919090199999199900239999999 -080306090400101112091300040212141300151612141300151612140100051604140400299991909091999991909901999999999009099999999913909999999009 -040804010900100808090900021111061200131111141200131516160400040316160500999990903990919999100919999199999999099990991990902999999909 -080808090400101010100100111213020400111405151604111417161600061717180300999099900999993901999991109909199909909991999909999919909929 -050108080400091008080400091011111200091311110400140215151500040616160300999090399991099999990990909999909199999199990199909092990999 -040809010600101011111200050411111200131313141200151516141200031502170400009999903099099990999999999099199999099909999919929199991009 -060808010400090808101100040512121300141515151600141417021600031717041600999990993090909900910999909991909999999091999919999999929099 -080809030400040810101100121206021100121213141100011313151100051617150400992999919099999900919999099999199901099999993999990999900009 -050803091000040209091000111106121300111104141300151617171300150117170400092999099999190901999999009999099999990100999099993999999909 -040108090900100808051100121314111104120415161600121702161600181818030600990990390990999991999901090901909999999919999199991990999299 -080910100600051110101204111113021404031515151604011718161600191920202000099990099099999099900991100299199999909199993009999099990999 -050808030600020808090900101010090900111111121300141404151600040104161600992990999091999919999999999919909990099190099909903999999099 -080801090904081011090900101012121304141516170200141819170500140604170300999909039999019999901999990990919009199009999990990099999929 -080910101000031102121304141515120400051515120600161717120100161617181804199992190099119099990909999099999990099999999903999999990090 -030809100500041109021200131114141500131114141604131718181904171701180600211999991099999909910999999999909999909091090090099399999909 -080404091000081111090400041211090100131313131400030602141400151515050400990099099090999999999909039909199999199099999919929100999999 -080808040300060909091000011112121000131412121500160404170200161605171700990990099299999999099931999909919099990901190991999999990999 -080808091004111103120200111113121404150613131405151617181404192021011400991109920199999999991999990099999999909009999001009039900999 -040804090904101011111100061012130300011414141500051602151500171818181800009909099099999999909909099900929399999199999919901199909999 -050801090900101010100600110204121200131414121200131414151500160403041500099999030999999919900910999919999099999990999999909209909999 -040104050800090910110800090912130800141515040800140216161600140617170300999990300999099999009999009109099999999999991199999199909929 -080809101004051112100100131412150400130206161600131704161600130318181800900909999990113991909999909919099109999099999099999990929999 -080909100300081111121300011111060200141415161600041417161604041717180500999299091990991999991939909901919991990999999999090909909909 -040104050600080909090900101011110200101011121200131414121200040414030400999990300099999900991990999999919999990099999999900920999999 -080804090400080810091100041210061300021410151500161605151700161603011700909999999099990990990999999009009111991909999990999939992999 -080409031000020909101000111112120500131313130100140615161700041818181804092990999991909919990991999991999999390900999090909990999990 -050802090900060810040900110812040300110413141400111513141400151501040400091999919990909999192990099991999990999099990099999300999999 -060809101000111209031304141409151500041409151500161617050200160118181804099999099090992009991999999099999999999009199190993191999990 -030808090900100808111100101205111104101314150100021617181904202006191904999992999099999990999999990900099911391100991999009009999990 -080809031000111109051000111212021000011212131300141516131300061704040400999290999999999999009909919999199399999199990119900900990999 -080309041000081109101000081105121200021113121200061114151500041604010400299099999999909999990990999199999119990910999919990930900999 -080808090300061010110400121202130500121214151500161616171700040104171700999299091990910999199991909999099990991909999909903099999999 -080409010500080610101000111212121300021414151304161414171704181903171700909999903099999900190919999109999990901990999999019999912999 -080409090400081009090400081011121200051013120300011414021500061614171500909099999999999999090909999990999001999911293999990919909919 -080808030500020909101000040909041000011112130600111114141400041504161600992991999091909909999999099991999310099999999099990090909999 -080808091000011111121000051113061000041413151000161613171700040402170300999099090993909999999901999999099000999099999999900192999199 -080909100600080511110400081212111300011212040400141404150300140216161600999099900999999990990909009999909390999199999092999919911999 -040208080800030904100400110912130100141415131300141616161600050617171700019999191099999929019919039990999909999990999999900909999999 -080808080400010904100600090911111100121314021504121216051500171717031800999099099993990999009990999019999911109909999909999091999929 -040808090300040808090900101111120200101313140500101313151600100106161604099299999990999999091909119991999990099990999990993099999990 -060801090500080810101000110212130400141516160400171516181804171503181800999090930999099909919991109019099999990990099999099999992999 -080804030900080804040900101011120900101313130200011414061500161614050400909299999999999909009990099999919099199190093999999990990099 -040809031004080811041000050212131000141414131300151616171800151616010600992900919999999990109901099919909999999919999910999930909999 -080809060400101009111104101009111100051213141500161616021700040118180300999999090099909099999990999909999909190901199999903112999999 -080902101000080811121304041111050300011414141400151516060400151517171700911999191999991001992999099919999399999099099099999009999999 -080808090300101011090900101012120200131414151504161705151500060104180400999299909999999999091999919091999990900199990099903900999099 -050108080900101004080400111111111200131414061500131402161500130317181504999090399099099991909999909091009999999919999919999919992190 -080808080500020909090100101111120400101113131300140415160400030615150400999091991999993919099999909990099999991909999000929999990909 -060803040900101011110900101011110900040212121200131415161700130405011700929090199999999999999999999919009999990111990190990039999999 -030808080200090909101004110412100500111314150100161617170400161617180600299199999199999099090999099909199900390009999990999909999909 -020808010900100808090904100411120500101314150600031617151800161604151800199991993999919099000990999990099909092099999909999099999909 -080808091004111209091000111304141000151602050600171718181904170118180300999900999999099990909999909000099119991919099991093992999999 -080109101104081206111104131414141400151616171700180516171704021919200300990909300999999001909909999919099199991099999999019999919129 -080305040400080809090900100211110400121313141400121313141400120406010400299999900099999991099901999090109999999999999999999030909999 -080808010400040909090900101010100600021112131300141415161604031705161600999999903099999909910999999109099909991909999909091099929999 -080809090300100811121204101311121200101411020400101516171800060105181804999999909299099099999991999919199991099199990009903009999990 -080806091000051102120300131114151504131116171500131616171800130401170400909199091299119909999999090990999090999199099999990390999999 -080809011000110909121000131313141000061516021000031517170400051504170400999999093990991909999999919990199099999901992190999999900909 -080804010600090909091000111111121300050412121400031502041600171717161600999999003099990999010999999009909999999910099199921999999999 -030508080900101010060904111102120900111113141500161616161500041718010400999092099999999099109999119999919900999990999991999030900999 -080808030900021010040900111112130904111114150100051617180400161617170600992991999990999919909990000999999911399909990000999999999909 -040105080400090910111200091314140200151614141704151616061700151818031700999090300999111990901999999909919099909999999990999999909929 -080801040400090909091000110204121300111414151300111614031300110617170500999990930099990919909919909910999991999092999999990099999909 -080808010400090910101000111112121300111102141500041616171804031616050600999999093099099990091999999999919991190910999990099900929999 -040803090900100804090900111212050200061212131300141515151300141401160400992990999999999900091909999999019099999091999999990309999909 -040801090900100808090904111111050400021213141500161606171500031817171500999990939999909009190999099991999110091900999999991999929999 -040808010600040808091000111212130500040212131400151616161400151517031400099999993099910909100909999999999019099199999999991999991299 -080105091000081111111000081213141404080603141404151617181904021616202000990099390999999991999910090999999099901920999990019190919999 -080809100200011111111200131414061200131414151600130517040300130418181804900199991193999990909909999999919990999900290999999099909990 -080501090400081010091100121310090600121314021500120416160400120316161700999999039090900999999901999999909911099991990999999990992909 -080809010500080809101104121309101100121409101104031504161100151517020600999999993099000099999909999909999909909901999999929910991199 -080809011000080809091000040405111100031202111100041212041300061415161600909999993999991900991999999990999291999919090990999990900099 -060809090500101009110100101002111200131415111200160415041700161615030400009099091999993999199999909001999999990090099999999990999299 -080109100400081111120500131114120400151616120300151616121700150602171704990099309990900999999901909091999999999999299999990199999190 -080809101004011112061300111114151300161718151304020503151300191919152004990909009993909999099999999190999009901999990999919290999000 -080902041000110312121000011313131000041406151000141416150400041616150500119991910992999999919939909909999099999909999090999999909009 -040108080800091010051100091012130600141402131500141416131704031616130400999990309091999999900990099199999919099919099999099990929999 -080109091000081109090400121113040500121113130200121415161600120406170300999099399090199909109999999999909999199909199099990019999929 -080808080500090910110100121310110400040210111400031516061700151516160400999099990999993990999900909099999911099109099990929990999999 -030809091000040808101000051102121304061415151300161715151300161804011300299099999990999990190909110999999099999099999091990039909999 -040108040600091011111200091304111200091402151500091416161500170516160300990990309091090990999990999999999110999919999999909999909929 -080809100200010811111204041311111200141504031200141616171700061616051700911199999193099090999909999909999009299099999909909999999099 -040108080800090910111204090910131304141410151600140210150600051718190300999990399099900099999999090199999999099199099009991999901129 -080909040300080504101000081102120400131414061500131414161600130401161600099999990299999990019901199919909099999990099909990399999999 -050104080600091010021104121010131100141515161104141717180300141717191900999090300990991009919999199009999999009900299999999909999999 -040809090904101010031100061204130200121214140500151614171700151801171700099909092199999990991999019099199909099099999909990399909999 -080806030904080810100900040211120900131313131400151516171800150516010400909909992999199991999901109999199999099091099909999930990999 -080809031000080809061100041212021300141516171700141515171700140104040500999299999199009909091999919990199099999909999919993000999999 -040806090900101112090904131312140500131302141400151515161700041801160300009999099990999009909990999999909911991990199999990392909999 -080109090900081011110200081211131300081403131504161718181500040506191504999999319199199990991909999909999992000090999999900999999000 -040806010900101111120900101104130900020414131500161614131700031614130500099999003999919999909919909190909900991999099999999990929999 -080809090400031002091104061213131104051413131100151516171100150118181800999092199999109099199909990909999919990199999090993009999999 -080809090900101011110400020411110100121213131300121203140600050415160400909999990999190910999999939199099999999990999290909909990009 -060508090400101112131300031412131300040212151504161612150100171718181800900090909991999921999999999919099099909199999193999119990999 -080109090300081011111200081011111200041013021400151506160400151504170500999999309299199999999909999991919991190090999900999909999009 -080910110300050909121200040402131300141414131300151516171804151516010600091290919999999999109990199099999991999919999010099930999999 -080806010900041011110900121213110900120314020900151515151600040405041600999999003990090999999990199991999991999291099999900099999909 -080106091000080811121004131414141000131516170500130218031904131818201904990999390999000091999919999909999900099999991929091999999000 -080801090400050810091100121313141404120402141400120615161700121818180300999990939099100991909909990991999909999919990911999902999999 -080909101000030902051100120413141100121206151100041616161100171717010400199992999099109999199999199909199990999091990990990930999999 -080409101004081112130600140412120100151505161600151517161600031818180200909909900999090900909999939099199999999909999009999991929919 -080809021004080803101000011112131400041111151400050616151700181818150400911909991999999991219939109999999099099999999000909090999999 -030808090500040808091000111102091200111113141200061516141700041801141704299999999090990999199991999999099919999919090000990399909990 -080801090500081011090200121013091404121013131500060416041700181818180300999999039099991999191990190999919099990909199909990092999999 -050809090300010809091004111112131404151106021600151718191900150418191900009999999293999091991991190999119009199099999099999999990099 -040804090400101005090600101011090100121111090300121213131400040402151400090099099999900999999990939999999991999019299999900199999119 -040408090900021011090400121311141400120511140100121516171700031506171700909990909091999911909991999999999901399990999009929099999999 -080808080400091011111100011012120600131314040300131315021604051718161600999990999090099999990939999910999910999919299919099919900099 -040808010900100808110904101012130900061412050900151512021604031718191600099999993999901099999990009999999009099999199091099919921199 -030809090400101009091100101004121100130214141100131516171700130506011704299099199999999999909990909919999199999990091119999039909990 -020809010400101111121200101311141404100315140400060516171700181818171700119991913099919999999919090920999999090909999099999099999099 -080805040900101112120900131112120904061114140100031114141500161617020400999099009990999909999990900099099999399999999990929910991199 -080801090900101112121300101114121500101102041604100317060400051818181800999999030999090999990999199991009099909919099909902199999999 -060104080800090909080800101011110500101204131400151212160400021717170300999990309999909919090999999990999099091990099909919999919929 -040804090300040810090900111102121300111114131300151515151600060117051600099299909999999900019999199991999991990991999990903099999099 -080803091000080806051104121314150200161314171804011914171800202014171804992199999199999009001999119099999009009999993109990999999990 -080104090904081011091200131014141200151014140200161718191904060503191900999909309990909999099901999099909999190909199099000999999299 -080809100400080804100400110312100500111312101400040212141400151512010600900099999999900999999929999999909199999190990919991930991999 -080609090900081003040200081010111104011213111100141513131604171818051900099999929190990999991999990909999311999099090999009990909909 -080904100500031112101300140215150600141415161604171718161600171701191904199092109999900991090991999999999901909099999919999309999990 -050809060300041009021100041212111100131212041400011515141400041616161600099999090290919990119999999099999090999199993999999009909999 -030809101100051210101104131202141404131215141404011617181900202020200600219999919999990009199999990991999091909091993110990990999999 -080808090300101011090900121011050200121314151604121717171804121901060400999299099999999999991999999900019909009909199991090300909999 -080104091004081112121000080612121000131314021000051315151600171715031804999009300990199990999999999990199909990991999991990991999920 -080609090500081010091100081210130400080304140400021515140100161616140400909999999099990999909919009929099990091999999993919099999109 -030809100500111212021304111415131300111617181804191920181804191920010600211999991099909099919909099900919909909909999099099930999999 -060809090400011009090500101002111200131415151200131415151600131404030400019099199993999999190999009091999099999999999990999920990999 -080806010900101111090900101111121204101305120200040314141400151617041800999999003999909999991999990900999099199999199299909090900909 -040108080400090910111100091213041100051415151500161616020600031717171700999090309999009991099999099019999919999991999910929909999999 -060104080800090910080804090911121200131415021200131416050300131416170400990990399999109099199999999001199991999990299999999999990009 -040308080804091002110500101012131304141515131300141515161700140618011700929900991999919909190999990091999999999990090919999039990999 -060308080900101102080904101112130900141414140500041516171700041801171700929990999999919099199909109909199999090919999009990399909999 -080809100600080211041200030411131204141511131200141611171700140518011700900099199999109920999999990999999909099099090919999039990999 -080808080500010910021100121314150300121304151500121316161704041316160600999999191093900999019990999990929099999999099099009990999999 -030806090904051011091200101011131400040215131600171715131800171715010400209909199090999999990999099919909991090199999190999930999999 -040808080804090909100300041110100600111102121300141516171300140105181300999900909999902999999999909091999991999091990119993909999009 -080109100600081111111104121314151504161317021500181819200300181805202004990099309990999090199909090091999991990991999099999092999990 -080801090900080810110900121314150400121304150600040205150400161616160300999999930999109901099999009990999999090199999990991099999929 -080910100200110910031200130404051200041415151200141415151200161617010600009190999199929909099909909099999999999999999091999030990999 -080904011000041111121000051111131000141516161000140617170200140317181804009990093999901999909909999909099099999999199091999990992990 -080808030900101011040904051211130900141411150200141411160100061716160400999299099999099099909909999909019991199999999913990999900909 -080809010600080809091004111212121304110214150500031617181800191919190400999999993099090099910999990919009019999910992199990999999909 -080910101100050912131100010914131104060902151500160317151500161618040400009090999999109999199939990991999091999999999219999000990999 -080910111200050410111200031302111200141313151500061616151500041716010400009990999999009999999999119291919199999999990909990930909999 -080409100400080209110500081209061300081409151304031617171800161601181800909099990991909991990999999919099910002919999090999399999999 -050809010400100411121200101111121200040413021400151513131400151516030600009999003099909999999909999909919991190999999999999020990999 -060809041000080811121000131311141000011511040400161602171700160305171700900990999999900990999991909919009399999919999109999999929099 -060401040800090910101100090910121200131414121200021515160300170518181804999090039099190999999999999199999990991099991912909099909990 -080309100600080509101100080209041204131409151600131317181800191919011804299999999099909990990919990919009911099991999909909039999990 -080909010600020909101000111213101000110404141400110305141500161616160400199991993099919910999999099900099999999999992900999900999999 -030508010904101112130900061104131400150216131400171718131400170418181400909902903991900999990999099019999011999999999009990999999999 -060208090400101109090300101112121204131114151500011604151500171717170500019099119999992999999999990090999000999199993099990990999999 -060401080804091011080800121311141500120511160200121711181900171703181904999900039999009900999909119909919999199991099099999999999290 -050809010600101010111100041213131100141513131604141718021600031818041600009999903099919999199900999909999999009091990919999909929999 -030809090400101009090600041002111100051212111100131313130100041414150400219099999999999999190909999901999999990190999993900909999909 -060809101100121314101104121315101100120502101104161717181804031917011800009999909999999099099909199991999999000011990999099939921999 -060808091000110809091000041213140300011215161600041202161600051217170400999090999990999990099909929990199309999999990919999199901909 -050104080800090902080800101112131300140403131300141516170600141504171700990990399999919919119911999009999992999990099909999099909999 -040801090900101011090904121212131400151516041700150216180600030516181800099999039999009099100999999991009999999199099109920999999999 -080309101004081112100500081113021400081513161404171819201400171701061404929909919999919999910999919909999091109019990009999309999990 -060808080500090304101100121212131300040214131300041516161700151516011700999990990099990902090999999991999019999199099990909939991999 -080804090600081010101000011105121200131314141404131315160300170218191904999099900990999990999930999919099909909999999912919199911090 -080808080900060404100900111111020900030504121200131314151600131301151500999990090999999999009999199299109999999009199011999399999999 -080910010500030402111204131415161600131415150400131717181800061717181800119992913099090099119909999999199909099990999999999999909099 -030808090400060808090900101002041100121314151600051414150100171717150400299099999990999999190991999919009099090199999913999999999009 -080909031000080804041000051112021000131312120600131314140400040114141500099299999999999990009999119009999919099909999999903990999909 -080309091004080409091000081112131304021415131300051616170100181816190600299009999999999990099909990190999199990100999913990909999909 -080809100500110909120300110213131300111414141400151617180400060104181804990099099999992990919911999999999999991000091999903099999990 -040808080804050910110100121213141400021513141400160604171700161603171700099909990990113991909999099919999199991090999909999999992999 -030804091004110808091000121302091400051515151600171718191900171701061904909902999999990919099911909991909999090199999109999309999990 -080609100300110209090400111212131300111415131304161715181904161615010500099290991999190991999999199999999090909091990090099930999999 -080103090900080810040900111110120200131310061400131315150500160415150400992999399999199990901999119909909990999999099099909999909909 -080809090900010810111100051213111104140215160400140617181904140317171900909999990993199990199909990991099119099000999990099999929999 -080808090500101011121304101011131304031415160600170215180100192015181804999099090999999099909999090909099901092991999193911999919990 -030809061004110812131000110814131004110215161000171718190100170405191900990902909999999999099991900911999199099010999913990099999999 -030805091004110808121004111302121000141506121004161718191900202020011900290009999999999099199991999019999990000199090119990939999999 -080109100500080909101100081213040400121214151500021616151500061616030400990099399990990991990990099999999900991999991999909990999299 -080809031000110806041004110212131400151512161400151512171400181905011404912999999999099091900901999999099999999990999010909939900990 -080502090900080610090900080411120300081313131304141515161600040115171700901999919990999999119990929991999999900919990909903990999999 -080806091004051112091000031313091000140213091000141516170400041801171700999909009990099990999999999299999911099191991910990399909999 -080809090400050409090100101112131400151516130400151516130200060317171700909099999999993900919900009999909900999999999991909991992999 -080909101004080811101000031211051300060211141304151617141304181920011300099909999999909921999999999919099990900199999910001139901999 -060809100200010811121200040813121200141413031500141613171500040417170500091199919193199999999909999909299909999999990900900990999999 -080809010500081009111100121314111100120214151504121614041500061718030400999999993090919990199991999919999090909190999999901990991299 -040809090900051010111200131010110400141414140300151516021700060104171700009999099999990909990909999909099999999119299919903019999999 -080104050900080810110900121313141500120206161500121703041500121717041500999099309999000991999919009999099109999190999999999299999909 -050808080300091011120600101002131300141415131304141416161704181801160400999290919999990909109999199909999901909919099999090390999999 -030808080804090510021100121310141104151510141100161610141700161601040600299909991990999909919900990999999909999999099010999300999999 -040808040900101008110900031002111200131313110100141516171700040605171700999990990999919999190990909291999999399990990009900099999999 -080803060500090909101104121202131400121215161700181919202004181919012004929999190099999099100999199990109909199999199909099939909990 -040809090400041009090100111112131300140215161600141717051600141717030600009099099990993999109999999901099019999190999999999990999299 -080910100300041112101300051112140200151616171704011616171704061819191900009990999299991999919990919090919099909999993919090909909999 -050809010400030810111200130806141400131302141400151504161600041717171700009999903099901929991999999990999911999009099999909990999999 -030808090900100811090904051211131304140215150600161715151800041901181800299999999990999001909999090910999199091999991199990309909999 -040108080900101008080900111012131300140515061300160417171704021818180300999990399999090999099919099100999990991909990999019999919929 -060809100300040211111100121314141504161317141500181919191504181805011500009299901999199901999999990099999919990910999990090939990999 -080909011000081111101000081111121300040206051404151616171700041616031700999999903990919999999999009019909909009199990919909929999999 -080903101000080204101100041213131100141414131100151515151600060517010400129999999991990991099991999099999990999991099990909030990999 -080910040400061111111104121212130100141402130500141415151600031715181800009990900099999099909999939990999919099911999990991990929999 -080808020900041010041100011010031100121314141400150416161700050616161700991199910190999999999939929900999099990909990999909999990909 -080909031000081109121300141106020400141515161700141515181804140104180500999299099199991909919999999900109991999990090999093990999099 -080804091000080802091000111111091000011212091304141215030400140516170600909999999999110919999999999919909399909902090999999099990009 -080803090400080810090900021112131300141405150400141416151500171701060400999099929999999909190911999199099990099999999109909300999999 -080109101104081213141100151514141100151516021700061804041700051818031700990009309990119990999999999999199990199000990999999999909929 -080109090500080809090400101112121200100206041300101415151600100315041600999099399999099991090919999999909109099199099199999999992099 -040308090900101011120200101011121300051411121300141415121604061718010400921990999199901999999999999909999099999999099000099030900999 -040104080800090909090800101112121200131102141500161117171504061103170500990990399999990999199901999099999911090991999999009990999299 -080803090600080410101004111213130200111414141404111516051700110118191700992099991990999009991900999999919999909109090999993009999099 -080808010400050409101000110212121000110612041300141515151600031717171700999990903099999990099911919909909999091909099999929990999999 -030802090904101011121204101313121200051414150600161414171800191919010400919902110999999099199999099991999991990991090990999030999999 -080509060300081011111204081311111200081415021200161718191904160118180400990999009299999090999999999901199909190919990109093999999909 -030809100400111212060500131212141504130216161600171718181904171718011900900092090991999999990999900919099109991999099199099939999999 -030809101000110812051000130802141400130604151400131616161600171704010400290999909990999909009991199990999999199091999999990030999999 -080909011004020909101000110612131404151612131404170318131400170519131400199901993999919910000999990199999199900209999999999099990999 -040106080800090909091000111104051200110413030400021313141400151515151600999990309099990919900990999909909992991999991999990990999909 -080910110400041213130500011213130200141215151600141404151600061717031600090090009999999999990939919991919019999999999099900999999929 -080909090900081011110300081011111200041306121204011415020400051617181800999999909990992999999999999909199099909001993090991919901199 -040809011000111209101000131414141500160617021504161717051500160318041500009999993990009909919999919099999091109990999999999199992099 -030809100200111112131404111112131504161606131505161617181504191919011500211199999199999099991990010999999999909901999009099039999999 -080808090300100211121200101305121204101404151500161717151800160117060400991299919999199991999919090999099109990199999900993900999999 -040108050600090908101100090912121200130414140200151516161600151503170400999990390099100999199999999090919099990999199999999910999299 -050601080904101111080900121111130904021415160904171418161600031419202000999900039990909999999919000190999990901909991999999099929099 -080809030500101010111200041314111200041315111200011316021200061316160400909999902099999999099909999990999009999991993910999999901909 -060308090900101112090900041312021404151612141404171818191900171818010500921990999990999990919990010099999099909091990909999930999999 -080809011004080811121000130214151000130616171004131819172004030519192000919909913999910991099919099900099999909909099099020999999999 -080809100400111112100600111102101300041415161600171715161600050315010400909099909999900999999990119901919099999099999999909930992999 -080806090900080810101000110212041300111114141300151617041300040103051300909999999099999990990991099911999999091919991909903299999909 -080803090904080810090900021112131400151515130400161717180100060405181800999909929999999909190911909199999999090910999913900999999099 -060801040900100808090900101112120400100412121300051415021600031717171600099099939999909990190909999909999999099901090099999919929999 -050104080800090909080800100411111100121213020600141215161600040415031600999990309999909909199909999991909901999991990919900999999299 -080903100600111212101304021214141500161616141700051818191700041818011704129991999099909019990909999199909990999919990910999939909990 -080806090904080810090500110312131400111502131604171818131900040118131900999909909999009999090992199999909111001999991990903999999999 -040809091000050803091000110812021000130614151500161616161500171704010400099999929999999909919900919990919099990901999999909030999999 -080808020600030910111200131010111400131304111504041616110100171717180500991999191092999999990999099999909990000099999993999009999009 -060808010900101111120900131111141504161714141500040218051504191919190300999990093999999909910909000999999009990919999190091999999929 -080808080400090904101100090912130300141212020500151515161700060116161704999990999099991999012999999909199191091990999999903999999900 -030808040400091008021100090512121200090613130400141413130400140115161600299999990090919990910999999999109909990999999190993099999099 -080808040900041011120900061010130100141414151500041616021500031616051700999990900999900999909999039099199999999909990911999990929909 -080509011000080211111000081213111000081204141500030614141604171717170400909999903991999991999991109990099999092999099999090090999999 -080804090500080810100200011106101200131414141500131316161704181818040300909099990999191991991939999900919099999999199099009992999099 -040808010900100408090900111213131300031202141400041215141400051615040600999990993990909909991909999999919291999919990199999900900999 -080909010400081010111200131010141500131305141500031602141504061718140400099999993090900999919999909909999990999999992919091199901909 -040108080800091011040200120411041300121214141300151514141300150616050300999990319190109909991909909990999999990999999999990092999099 -080808090900030402090904040610101100121310141100151516171100051616011100999992919999099099109999999009199009099001999999999939909999 -080909030600080910101100080210121304051414151504161414170100181818190400999999992090999999900901900919999990900999999913909009999909 -040809090900010810111100120805041100120813131400060213131400041516170300009999909993909999999909909990999919999999990190991999901129 -030809100500041112131300141502161600141717161604141818191900061818011904290099109990109999199900199999999990909909199999999939909990 -080809011000110809121004061304141000030515150400160215171700181818171700999990993999009000919999009909199999992999099109911999999999 -040809030400101009111100101012121100041302140400151515161600050106161600092999099099999999199999909901999991090091999919903099999999 -040108080904101108080400101205131300101415161600100602160300171718181800999000399090099991909990999919999919999019299919909099999999 -080806030904100811121200101314121200101516170200100516181904202020011904999209909199999990099990999909919001199099099919009939999990 -040808030600090808101100090205100400121314101500161617101500160118181804992990999099990991999919909190999190099109999099993099999990 -060809090300100211120500101311111404151316171404181319191400040119191400019299199991900999999999990190999190909990990090903999999999 -030808090400101008091104121302091404121313090500151516171800151501190600299999999099999090190991900999999990990199099100999309999909 -080803090500080210101000111111111200131414141200151617181804040104061800992999091099199991999999909991999099990190999099003099999909 -080801090900081011091204131314051200131302151204160617171700181803190400999999939090009099109991999999999911900091999999909919999209 -040108080900101112120200101111121300101414141300101516041300050617040300999190319190199999991999999909999999999900990999900092999099 -060808040900020803090900101011120400101011131400151617171400040117170500999990920991999919909999999999009999999100990090903999999909 -060308080904101112080900100513040900101402040900151416171700181818011700999900299999190999199990909991999919990990090119999039999999 -050104080800090909090800101112041300101112021300100612141300150412030400999990309999990901909991999999999991199099999991909920909999 -080109100300081109101000041109120200131109121400151604121400040506120400999299399990199999991909119999909099990909990999900999999009 -060809090400101009090100101004110500121302111104121313141500121616160300099099099999193999999990999919909911909991990991999992909999 -080804060300080909101000041102101000121313141400151613141400150401051700999999000299909999999991199019999999990999990009999390909909 -040801091000111112120400111113130600140513131500140304021600141717171600099099030099099999199999909099999099099991099909992919999999 -080304060400080909090200081010051100121010111100131414151600131414010400999999200099991999901999999099999099999909190901999930999999 -030809051004111109121000111302141000131315141000161718191904060104191900219909990999999990109999199999999991099019990109003099999999 -030806050904100811110900120811110904130814150900021617150100161618150400999902900999999919999999900190999999991009999903919999991109 -030809041000111109021000121213141000121206151500161717151804041717010500210999999999911909999999009990919999990999090909099930909999 -080808080600090909090100101010111204130411111400030502151400161718151404999099990999993999919999000099909099999991999919920199911990 -080808030900021004090900111112130600111112131400151516131704150105130400992991999999099910909999999999909999991909099000093099999909 -080806050900080210090904031112131300040414131300151616161700181818011700999999100999999021009991999991999909990910099999909039999999 -080808090904061003090200111212131400111212131500051617181800041901181804999909099190929990991909999999919991199910990099990399909990 -080804091000031102041000121313141000121313061000151515160400050116160400990092199999109999199999009999999990990199099999903099999909 -050809031004111111101000061212021300141415161300141417181304191920011304009209909999909909919999919990999990999990999001099039990990 -080104090400081010111200131010121200130504141400020603141400151515041600990099390990909999999919099900909999991999990999919290999909 -080904101100080604101100081212100300081212131400151602131700050104171700009999999990900999999999099999929199191919091919903099999999 -060308080900101105080900121213020900121214150904161617181804160104181800929990999990099990919999199991999990009019999109093099999999 -060809090900010808101000050411101200131313140400150304020400151616161600099999909993999999199990109090109999990991999900992919999999 -060801040500090910111100091010111100020412131400150312131600171717130400099999030099109999999999999199009900991999099999912990999999 -040801060500090909091000111112131004141102131000141516171000031804171700099999030099990999019990990099999991999919999190991999920999 -080808080400090310021100090410121200131314120600131314150400050114160400999999291099990999919990099099999991099999999190903909999009 -040801090900100811121200040813041200030813141400150513141400151502040600099999930990909909199990099999999990992999999099999190991099 -080808080900041011090900041011110100121314151600120217171804030617170500999990909999909999999900939991999190099119099199020990999999 -040308090600020808091000110512090400111313141400111315151500110116170400929090999991990919990909099990999999999999091099993099999009 -040801040500090909091000111112121300061412121500161617021800031617181804099999030099990999190990999999909009999991099119999999929990 -080401090900080810101100120510101100121302141100151506161100031504041700999999030999090909999999999909199911999190999909929990990909 -080804090300080805091000111213141000110615021600111515161600110104170400909299999999099990919990009999199099199999990919993909999009 -080109101004081112121000081313140600080213151600171717171804050319202004990909309999099991999909099999009919099199999990009190992990 -080803090900050810090904111210100200131314151504161717171700180401061900992999999999999000991999999000919999909001990999909390909909 -080803090400081011090400101011090200011211131300141414140500041516170600992099999999999909990999919909919311999099999990999009900909 -030809101000110809101004111202041300111214151604011215151700061218190500299999999999199099190999999991009091909999093190999099909009 -080801050400080809090904100611111200130214141500041603141700181818171700999999930099199010099999909199009199990199099999991299999999 -030809090900101111020400100504121200101313121200141313150600140104160400219999991990990999919909999990999091999999990900993009999909 -040809101000011111101004121111131400121502130600121617171804121617050300009999909993919099910909999999909091999019999991099902999999 -040108090900101010101100121213111100141406021500141416161700050316040400990990309999999990199999199099109909999991099999909900992999 -080910110600080812110100131212020400130414141504161614141700161605180300901099019999993999999909199909109999909999099090999019999929 -080509010600100909111200131404111200130215150400131615150300131616170400099990993090910901999990999919999999099199999192999999999009 -040104080600090910101100090905101100041204021300141414141300151616031300999090300999190999999990999009199909199099999999909999909929 -050808090600100808110100041204111100130214151500160414151500160314171700090099999990913901999990999919099019990099999999999909992999 -060804010900100811090900121311141400131311141400040515020400031616160400909990993999009900919909999999999999990901099099999919929909 -080105091000080804101000111102120300131304121400131315121600040617121600990099399999099919909991199909929909199999099909909099990999 -080806091004010811121000131405151504131617151504131617021800131603192000990909990993119990910909090999999009909991999991999991999219 -080106090900080810090900111213040300111415021604111405171704181818171700999999309999009991999990099919929011909901199999090999999999 -080801090400080410111200131414151200161616151200031705151200041717020600999099930999909900199999199099999990999999992900999919909109 -040808090900010808100900111111101000041213041400030602151400161616050400090999999993999991999999099901909090999019999909929100999999 -080906101000031102101004121213141404151617141404181617171900051601191900199992109999199099109999190909999001900999999990909399999999 -030608040900101108121200100508131300101415131304021617181800041717011800999092099099099999990999999900999090901990991919991939909999 -080104090400080810101100041212130500021212140600151515161600171703161600990999390099190909199999009999999190091990999999919999992999 -080808080300090206101000111213101404151617171404151819170500150120202004999299199991099919999900090199999199009199999000993099999990 -080802090300040810111100041210101300141206151300011216161300041217051300991999911290999990990991999099099009999990993999999999900099 -040808090400101009090100101011111200020411111200131405151500041603150600990090999999193999909999909199999909991999091909901999992909 -080809090900080802101100121305141504031617170100161618171904062020201904999999990999111991991919010299199999399999999000009909999990 -080803091000080811101004121211110600121213021404151617181900050117202004992999991999999090919999999999109911901999091000903999999090 -080808010900021011120904131014041500131016151504131017181900031717060500999991913999010019999990999990099990909990999090929900999999 -040804010900050810090900111111111200041314141200031502141200041516061200099999903990009999919999909909199099999919992999999109901999 -040408090900101011090900101011110100121212131300060214150500031414160400909990909999909999999991939919099999999190990190999909929909 -080604010400091011111200051313131200141402041200141515161200031517171700099990903090091999999999919091999919999900999990929990999999 -080809010500081009111100121309111100121204020600140415151500140316170400999999093099009990999909999990109999990991990999999109992909 -080504010400080909090900081011121204131002121200140615161700141418180300999999003099999991909901990091999999990019999911999902999999 -040408080600091008080300091112020500111113130400141415151600140115151700999090099990992999199909109999199999999019099199993990999909 -030408090900101108020900100508121200041314121200151617171700151504010600909992990991119999919999999909999909990009190999999030999999 -080809090600101109090100120213141404121513141400161613040400031617180500919099199990993901909999090919999999999190099999929099999009 -030809090900101011040400020412041300141415151300051615151300161601061300299999109999909919090990999190099919990999999090999309999999 -040808090900100808090300110512020400131312120400141414151600060117171700099999999290999909919990109099999999999010099990903099999999 -060408080900101011080900011012130904141414151500160217151500040518180300909990999999909999099931000991909999990199999199909199990929 -040601040800090910080800090910111200050210121200031314151500161604151500999990030999109999909999909019999999999109099999921099999999 -020808010400091008111200090413041200091413041200031505161600151506161600199991993099010990009999999999999900992009099999999999999099 -030809041000111109121304111102061300141414151300041615151700051801171700299099199099900099999991099991999991999999090090990399909999 -080105090900081011090904081010120400080213141500161717061504161717031500999999309991999099009999009999099119090910999999099999999299 -080909031000080904051000081111121300141111150200041616151704061601151800999299999999999990001999909099919099990909199919099391909919 -080809031000040811111000120211111004121314151500121316171504061819010500912999999999999901999909900919099911999991999909099030900999 -080901041000080911101000080904121300080912121300060314020400151516170500099999930999019999910999999990999999990991999910992109991909 -060804090900101102121200111113131200030513131400041515150100161616160400909990090990199999199999999299909909099991990993999909999909 -080109100600081111121204081111131300051402130400041516161700181818160300990099309990909099999999199909999091999019090990990999999929 -080806090900030810111100120204111100121213131300141515151600170504010400909992990999909991099999999919099919999991990990909030909999 -030508080800091011040600021212121200131415161604131717181800130401181800999992009991999991000919999199999100909190999999999399909999 -060809010400041010101004111111111200130214151200161614171800160314051800009999903090999099199999909919099109991990999990992909999999 -080909090900080810101000031112130100141506161604171802191904170520191904999999909999999990909990039299199199909109190119099099990990 -060401040800091011080800121213141400120405141400021515150300161617171700999990030990109991090999999900999999991999991992909999990999 -080804090904080810090300051112131400151102161400151517181800060104181800999909909999099999002900099999999111199909099999903099999999 -080909100600080909110100081213140500151513020400151613171704181813031704999099990999993999019900109999999901099991990999090999999920 -080808040400010910021100120913111100120904051400121516040300121516160600990999099093919999119901999999019909999099299099999909999909 -030808080500090410021100121313141400041313061500161617171504160117181500299999991090910909199909099099999999999190999099093909999909 -040603040800091010100800110512120200111314151600111717181804111701181800999990020999999909910999919909919900199991999919099399909999 -080801040900100811120900131406121204130215161700130518161704130319161700999999930991109919090919990919099919099919990999099199992999 -080801090900101010100904110212131400111516131404041718131400031905130600999990930999999019099919009919999909909109990999991099929909 -080409060300081009051100081209131100141209021504161617181804161601181800990999099299909990999999199099119909100919999009099399999999 -040608090900100508020900111208130300121208130400141415161700141401181804909990991990999909912999999099999999999001099010999309999990 -080109101004081109101004121109131400151109141400160502171700180604031700999909399990109009909999999099099999990919999019909099909929 -080910031100081204051100080213061404151516161600011717181800041717181800912999199999990991090991990091009999999019993999999999909099 -080808040600030904101000040211101000121311111400120415161400121515010500999992190099099991999999999019099919999091999900999930909999 -040108080904101008080900101011110900120213110904121214150300061605171700999900399999099999999990999919999019009919999912990009909999 -040808020500030809101100041209101100061314101100151515151100041601171700091999991092999999999900999990999091999019999990990390909999 -080601090900101111090400101212121200101302141500101316040500041716160300099990939990900991999999999991009909999910099999990999909929 -080901101004020911121000130906121404130915051600130317171800131904181800199901939999100919990990990999909909099909092999999999900999 -060308080400091011081200131011021400131011150400131616050400130116171700929990999090999999910999109999999010099190999999993990999099 -040808010600091011111200090411111300140215151300140415051300140304161300099999903090090999999990909991999119999099999990999999929009 -080809101000040811120100060211130500141411151604141417181804191903181800919990910999913991909909999919009999009999999109009299999999 -080809031000081112101000130214141400131515040500131515161700040104160600992999919999109901999991999991909990999999990900903090999999 -080803040900080205100900111112120900041112121300141516161600140401170600929999990991990991099999999099909919999019090999990309999909 -080910110500080404110100081213111400080613041400031502041400151516161400000099009999993999999990109909099999999919999109929099999999 -080909101000030402061000110512040400111212131300111415131300161616010400190992919999009999199990999999009991999999990009999030999999 -050108090400101008080600111213141504110216171704111818170300111818191900990090399999099919990910000919999911909999990992999999999099 -080509090300080609091000111102121000110404131000141415161600041401161600909299999999999900199999199999199099990901099019999399909999 -080808080500091010100100111213131404110213130600151516170300150418181804999090990999993901999990900919909999999199999112990909999990 -060104080800090909090800101010100400021112120400130404121400131503051400999990300999999999199999909100999999091009999990999909912999 -080809010600100809111204101309140500100215161604031718181600191718180400999999993090910090999991009919999900909109999999929990919999 -080109090900080810021104121210041300121210041400151617180300150506181800999999311999191099901990999999919999090909299009990099999999 -080809090904080810101100011213101104041415020500161617180300161606191900999909990999190991999930990900109099999901999099999012999999 -040408030900101108080904101213020900141516160600141716181800140501181800999290099999999090909901119019999919099099999909990399999999 -080109090900080810041100121314060400121304151500121302161600120405031600999999309099909991090900099999999909999990999119990099999929 -080904060300080910101100120902100500131304141400131315150400040115150400099999900299991999199911909199999999999900999090903999999909 -060108040500091010111200131010141404131516171400181802170300181819191904990990309090990999909909090919999910990919999999999192999990 -060803090900040808041000111112130200111112131400151512050400150112161700092999999199990900991999999999919901199990999199993990999009 -080309090904081011111204080211111304141516171700051818170100061818191900999909299091999099990919990919009011990999999903999909909999 -080909030400020410101100121314141500131304141500161616161500050106041500192991999099999910090990999199999909991999999990903009999999 -060108080300090908040400090902101100121314141400121516161700120416051700999290399999999999100991009000999999999099999090999999909099 -030808090400040809091000021106121200131313121200041414150100161616160500299999999099099901990910999199999991999991990993999009999909 -030804090400101111090600101111091200100513131400021515131600041515011600909092099999990999999999009909009999991919091999909939999999 -030408090500100808091100100612120400100212120100131314151500131304040400999992099090990999900999999909999199399110999199999900990999 -030808080900101112020904101111130900101415130904161515131700040501130600299999919999919099919999909900999091900999099999900390999999 -040608030400091008111104091213021100091415161600091717171600050118181800999990092099909090999909119991999919999199990990903909999999 -050601080800091011080800121212131304021414131300151614171800031604170400999990039999909900190999990991999199991990091999999090929999 -040106080500090910111100120910111100121313130400121402040300120415151500990990390099909909999990999919909999999019999999990102999999 -030608080904101108080900121202130900121214151604171717181800041919010500999902099991999991909991909991909991109999199909999030909999 -080804090500080810100600110210120400111314151500111316170100031304171700909099990999990990999911109999199900999991999903929099999999 -080803040904080806100900021111120900051313121200011413151500041617151500929909990999099919909919999919909099999990993199990099909099 -050308080800090410100200090910101100121204131400061516161400041716011400929990999199999990991999919099199999990001999090999939900999 -040809100600110809120500110213130400111413130100111414150400030404151500990090990999090999099919909919999999399991999910920999999099 -080404060300080910101100080410101100121213041100011213140200051516141400999999000290999999999999999000999999999990193091991999901199 -080808010904021010110900121313060900121313040904140515161600031718161600999901913999910919009999999999999999001909099999920099990999 -080809091004010809091004111111121000131402051000061516171700031818171704909909999993990091999999099199099119990919099199991999929990 -080309090904080510111100081210021100081314151500161718151504160106190400929909919999999990909999199909199909990909990119093909999009 -040106080900101112080900131314080904131314140400150216171700151518050300999990309990000991999990990999999999099199990119999992990099 -040104050800090902100800091112040800131415150300161415171700161406171700999990300999911999199911999090029909990990999999999999990999 -080305090400101011091200100213091404151516091404171518180100171918180600299991909099990991099999000919999990909909999193990999909909 -050806040400090909091000021112121300141112131300140415151500140301040400909990090099999909990919999199999919999910990999999300929999 -080809090904010810111200041314140500151614140600151702180300151718180400909909999993900991090900999919999099099199999192999199999909 -080809010600020810111100120410111104121310141500121617181500030405181800919991913099919919999990990999099909099009999909920099999999 -040809101004030611101000121211111300121214141400050215151600171717010400009909909999099929990999999999009999999199090990991130999999 -080910030500080909061104080212131400151612171700181818181700040119191904992999919099999091900919999199009900991099999999903909999990 -060809090900101002111100100304111100121213130100041413130500041516161600009999911999199999999929999990199999390099999999990900900999 -080808010400050909090900101011110600121311140200151504161604151503161600999999903090999999190990999999199009190909199999099999999299 -060308080800090405100200091112041300091212141300091515161300171715010400929990990190909999991900999999099999999900999901990930999999 -080804090900080210090900031110121200131410121204051515151500161601060400999999109999199929990990999909999099900919099999990300999999 -040602080300090909081000041112120400111112121300011414141400051516171700901990919299991901999999999999909999099109993999999009900999 -080803090900080810110400021010051200131415151200161616161200061701040400929999990999909919990909999199099109999199999990990300909999 -080309090900101111060400121313130100021415161604171718161600171705191904299991900099999919099999939110099199909909999099999909999090 -080809101104080502120300131412120600151416161604171418191904170120191900991109919290999909199991999099909909900999990099093099999099 -060108050400090910041100040910121200131310121200131415151500021616170300990990309099990909990990099919999999999999990099919999919129 -040806090400101010100100111212021300111212141300111516161700041516050300090099090999993999199909919999199991999990199099999992909099 -080809021000080811111204050306121204131313140100151516171700041819171700911199990199999092999999990090199999399900999909990099900999 -080309041000080511111000080211111000121213130400121413131500041401060400290999909999099999999919909910999999099999991190909300999999 -080802090300080806090900051011110400121314141400151516040400150117171700911999909299999991999990909019999009999109099909993099999999 -040809010400100611121200101011111300041414041300041414021300031515150500009999903099009999991999999000999999099999990991999919929909 -080309060400080909101100080212101000131415151604051717181600041717011600299999990099999990990919099910999009900199999910999939909999 -080601090400081010090904111010121300111415160500111702040300171718181800999099039990909099999909109909109991999019999909999192999999 -080805090400030806100400110212101300111412101300111512101600041515010400990092990999909991990999999919999999099199990110999930909999 -060508010400091008111200041308111100131308141400151616170200151616030400999990093090000999999999999099919909999999190911999990999299 -080808030400020406040900101011121200101013121200141516161700140501161700992991999090999919000999999990999990999109990199990399999909 -030809010400050209101100121210101300121214141400151515161600060417160400219999993099199901990991909999099999999990999999909099990009 -080809010500080809091000111111041200131313131404030402151600171718150600999999993099090999100999999991909999909010099999929190991999 -080809091000110802090300111212121204111314150400011316171804191919050600999199999299919990199999990991099099999910093190099000999999 -050608040900101112130900011414151500161414151700161618031704021919191704990990009990909990000939999999999999099199999929019199919990 -030404060800090910080804090911120500130214150100131617171700131616181800999992000999909099099999909910099019399911999099999990999999 -080601090900101112090400051314141500161314141500161304021504031717181500099990939990090909109990909999999099999901999999099919929199 -040809090900101102040300101212131300141212051300141415151500040104040600099999019290909999199909099999999999999100999999903000999999 -080409050300101009111204061009111100131415021600011417181600191919191604099990990299999099991990999090199099199909993111999099999990 -050108080600090910081100121310100200141304151500041303151500161616170400999990399099100990999909919099919990990999999929990909999909 -060808040400090909101000110212101000111314140400111314140100031504160500990990909099999990999911999991009999999999999093920909990909 -040408010900101010090900111105041200110604021200131314141400131304031500909990903999909990001999999999999990199091999099999091999929 -040804090900101112120400100412120500101313141400151613141400031602010600099999000999090999999999909900999091999999991999929130991999 -040108090900101008090904101112131400151602051404170618181900171718180300999990399999009099999910009019099919900919990991999992999999 -080904101000031102100500121314141500121313161704121818181804121919010600109992199999199999100999999999109999909901099999099030909999 -030809100600111213140500111202151500161718151504161719202004161701202004219099910999999999100900999991999091909991999019099399999990 -080801090400080810101000111213131304141202040300151216161700151218050600999099930999199901099999990099099919990919299991999990990099 -080109041000081112061000081113131000081113020500041414150300041604151500990999309999109999199909909999909991990901999999990992909099 -060808090400101111110100101212120500100404131300100314021300150414140400990090990990993999919999909990199099999999999291909919909909 -080809090300080609090400101102040400121212131400151613131400050117171400999299999999990900199909099091909999091999991099903099999999 -040308090904101108090900120213131304121415151600171815151600061905011600929900999999199901990909990919099919999999990090900939990999 -080909101000081103120500080204120400081313120600141313151600141404010400090999999991290999999919909910999999099990999910990030999999 -040604010400080809101000080811121000131311141400040515141400031616160200999990003099009999909999099099919999990999999009999991929919 -050809030400041009091100121013141400151002141404151016161700151818010600099999092099999909190909999991999991909999190091990930999999 -040808030900100802090904051112130600141515151504141616171800141616011800999290999990919000199999909901099099909901099999999939999999 -080306090904081011090900080212131404151512161400151718191404171720010500299909909999099990909919090919999919099910999919099030990999 -080409100300081109121300141515131300011515020600161605171700161604170400999299091999099900919909999999199391099090999099999990990999 -080309061004081109121300081109141404021516141404171819200100051818202000299009999099990999909990990190999110900919999013909999999999 -080304091004111112131404060212131500161612131700011612131800191905181800290001999099999091990901999999909990099999993199990009999999 -080809090400101009090100021111121300140511151604141417171804190317170600909099999999193919009999909199909099009990099999019990929999 -080809011004020811121004131414151000131414051000130616171700030418171700919909913991910019909999099999999999099909999009929099990999 -080109040500081009091100080412120200131314041500131316161500061716031500990999399090191990091999999099919900999999999991999929900999 -080809010500080809101000111112101000021314041500041314141600031306040400999999993099119919999999099190009199999999090999999000929999 -030809011004110809091000120805131300140215131304161718181900062018181904909902993999990919019999999199999111909909090999900999990990 -080806010904101112130900100213130900141515160900041515170400031805171700909909093991110999999919999919999090990990999990991999920999 -080309100400080802110500041212121200131415161600171715151800171701061804921099991999110991999999999019999090999199099199999309999990 -080809100600051109120400131314150200131314041600171714041600170114031600999099090999099909000999119999919900999999999109993999999929 -040809091000031109091000120404130100120614141500120214141500161605041500099999099999090929009909939999199999099099991199990099999909 -030608090400101111120400100411121300100414121300021516160100151516160500990092009999999990990999999990999909091900991993999999991909 -080504091000110612131304110212131300111415151600141415151600030417011600090090999099999090999991199919109099999999999999929039990999 -080808080600091011111204090911111304141515161604140205170100141819200300999999099099099090990999900999909991909191990903991999991129 -030805090400101111091200101002091300141515151504140616161700141816010400290999199099999999190999109909199999909919999990990930900999 -080905101100030909101104120213101400041516171700151516171700041816010600109992999999999091990901009091999901999999999999999930900999 -080109090400080809091000041112040500131313141400060215161600171717170300999099399999990991090990099019999990990910999199991999999929 -080309041000080411101000080211061200041314141200151614141200150517011200929999910999099999900901999019999919999099990990999039990999 -080909090904081010110100121010111100021314150500161718061904031720191904999909909990913999999919999190999190099100991999029099999090 -080809090900081011111104041012131304141515130200051515161700061801190300999999909990999099099999990000919091999999190991990319909929 -080309101000080609101004080209110500041212131400151212161600040117171600299999999999999090909911999991009090099999990909903099999999 -050809101104121309031404121509160200121717181800061717191800202001191904099109092199999090991990119991999090999999990909990399999990 -080804010600090909101000041112101300141515131300041515021600031717170500999990903099909999091900999999999099990999199901999910929999 -080309090900080610100200081110101200081113140400151617170500150401170400929999999190999999991999919999199001090919999090990399999909 -080804090900030810090904111204020600111213141500011216161500051216161500990999999992119099919999009999199011999999993090999999909999 -080803010900080610100900021110100900121304140900121215151504050416161600929999993999090919999911999009099909999990999999009990990999 -080109101004080809101000051111111100121213141504120604021500031617181500999909399999199999109999999091909901909091999909999919921199 -080808080400020910100300111112060400111313041400151313161600150501161600999090999991192919999999099990909199999990090909990399999999 -060801050904100808110900100411110900101212131400151602170300041818181800099909930999910999999999999901999099199911290919900099999999 -080105090600080810111100121313111100121415021604121417041800121417031904999099300999099901999999999991099091109990199099999991999920 -080909010600051010111100121010111300021415161304170315181300170415041300099990903099919999990919999199999119000990999299999909990999 -080809031004110812131404061515021604171515181600171719180100202020180500909209909190991009019999190999999999099919999013999099999909 -040408090400100502110300101213131300101214140600101516171700151501171700901090911999992990199991999990999999999199090109999399999999 -080809100600080811120300130211111400151617181404161617191904050117191904900099999999992990919911909199099109909990999999003999999990 -080910111104030902120600130914151500131314151504051617170100181917170400190902900999190999199999999999999999909010999993900999900909 -040308080800090610110200120410101300141414151500041616171700051616011700929990991999091909991990909099919999999901990909999939909999 -060308080400091002111104040512131300141515131300141515161600141718011600929090991990019099199990199099999999999991999909999039900999 -040809100300110204041200131305121200131314150100161614151500161617170600911290199990099991909999099999099911399999999999999900990999 -030808040900040810110900120602130900121415160900121715161600041715010500299999910999990909199909119999999090199099999099999930909999 -080902100300081110101200081304121200141414141504161617051500040118061500919299119990999991999990999919099999009199999009903099999099 -030808080900061011090900051002121200041304121200131314141400041516010400299999919990099999190909199999999990990999199099999030900999 -080909010400080909101000061112131000141404041500161417170200160317170500099999993099909999099900909909019999990909199991999990992999 -080808080900031002040904041010110900121314141500121614140500061701181800999992919999999099109999999019009999099199990190990309909999 -040808090400100209091100121213131400121215151500031616171804051616010600999990909090199991190999999999109999992991999900099930909999 -050808010600090909091000041112131404151516171400181802171400180304171400999990903099990999109900900991999909099919999199999099929999 -080309101104080610101104121314021100151616051100151616171800150119181804929909919999999000919999199001999999999990090909993099999090 -030809100200111105041200111113141200150616141200151517141804041717011800211199999199999999009990919990999990999099999900000939999999 -080109090600081009091100121013111104141013020500151016160300040416161700999099399990199909199999990099099991090991999999909992990919 -080910110500081212120100081313131404080206151400161604171800160317170400000099990999993999919999900910099999999190999090999990929999 -040608010900101011110900101012110900051312040900131312041400031515150200909990903999999999099990919099999999099999199090999991929919 -080809030400080809090200061011121204131311141204151611171800151911010500992999999099991990991900990999999900909990199091990930909999 -080109101004081112101000081314150600080514150200161614171704041814170300990909309999199990190909199909999999190999199999099999900929 -040808090900100808090300061111020400121213130400121214141400041516010500999990999290999909019999009999199999099919999999990030900999 -080502090300081010111204081310141504011617170600181817191900181820202004901999911299991099909909900901909319999099999909999099999990 -080808090600041009090400111213140100040213141500031613041500161613051500999099909990090999119909939009999919099199999909929999999909 -080901101000111212121000130514141500130214141504161718061500040318180400099990030999999909199990999999999919009199990190909990992999 -050808080800091011111100121010130100041402130600040315161600171717041600999990099990099909999999939011999999099211999919909009999999 -050808010600091011121300141414141300021516161300041717181304031718180400999990903090010999199999999190999199990190999999099990929999 -080809100400080811101000061213131300021414141400151503010400000000000000909099909999999999009909999909099199991993099299999999999999 -040108080900101108081200131313131200141515150600140216171804140504170300999090399090099991999999999109999999999999091110099099909929 -080808090300101011110500101002110400011213041400151515141404161718180600999299901999990999999999109901999390999119999909009999900909 -060208080900101010110300011211110400131214151604041217181800051217181800919190199299999999199931909990999090000909099999999999909999 -030804090600050810111200021310101200140415150400161615171700161601171700290999990090909991999919909190999909991999099109999399999999 -050809060300080810101000111202131400111513131400041616161400171801041404900990999299999990199999199909999099999091999990900399909900 -080910100600020503041100121213131104141213130100141415161600041718161600119991029099999919909991900099999999399909999909999999900099 -080801090900020810090900111206131300141215151304161705181800031904181804999991939999109910009999999199099999901009099999920999990990 -040408090900101004060900101011021200031311121200041414141400151504010500900990909999999999900991119919999299999999190999990030999999 -080802090900100811110904031212121200131313140100151617181804060519181804919999919991990029919999999990199999399000990999009099990990 -060808010904100808110904121213111400121215110400161602111700160318180500999900993990910099190999999991909909999919999190999090929999 -030808080600090910021100041204131400151616131300051616170100181818171704299999991099001999991909919900999099990991999903999099999990 -040108090900101112090904131415151600130204151600131718061600171718030500990990309990099091999910909990999199999190999199999990999299 -030808080800040409020500100909111200061313111200141413111200141404010400299999991999910900999909199999999090999999999090999930990999 -060801090900051011121300141414131300041502161600041517171600041517170300099999030990109991999999099901999091999909990999999992909999 -030108091000111212061004111212131000140215150400161617171704161618190500990092309999999099909999099110999199999009099999099099999009 -040809090600080809090100051010101004031102121300141415161700141415171704009099999999993999919909990999919911192109999909999909999990 -040809100500021106100100121313101404151503161404151516161400171717181400911090199991903919999999000199099929909999999999999909999099 -030808080200040909101100061209101000041313140500041313141500161616010400299199999190991999999909999900109099999999990900999030999999 -040806090900100811090900121212130400141515130300161515021700040105171700909990999990909909099999909099999991990991290999903019999999 -030605080900101112080904131302140904151614140900151718191900150104191900999992009991109099199990990991999119099999991009993099999999 -060808080800090909091000011111101000031111121204130214121200151604050400999990909999999990999939099999099999902919999199911000919999 -060808080800010910040200040910101100120905131100120904141100041515040300099999199193099999901909999999099009999990999099990902909999 -080601090400101010101100121212111100131305141500021303160400171717181804099090930999999999199999099199009990991990099999919209999990 -080809100600020805110100121314111100151514161600151514170400030414170400911091901999993919999900999199999990999990999990920999999909 -080910031100040410111100120210131300141515151300161616160500061701181804002990999999999990909911999199999999091099099999990309909990 -080910011100060212121100031312141100151515141400161617051804161619041804019990113999990991999999099219999999990900099999099099999090 -080604090900080510090900081102121300140415131300031615171700181818011704090999999999009999990911199199199999992099199009999039999990 -050208080800091004060300111012130400111014151500011614151500171717170400919990199290999999009999009990999009999199993999999000999999 -080409091000080809031000021104121004131114150500161117171700061101181800999999099999129919999999900190099990991909091199999309909999 -080808090500031004091100121304091100041402091100151516160100151516160600990099909992999991999909909010999919999910999993999999990909 -080809100500010811120600131314141404131315160200170315181904172020202004900099999993000991999991990999919991190990999290099990999990 -050808030400020804090900100411090900101111120400061314151500161601151500992990999091909919999999999909009199999190990109990399999999 -080109100400081112120400081312120600051313140300151516141700041502141700990099309990990991999990909099999999299019999999999199909109 -080109040500080810101104121313141100151313141400161602060300161617181904990999309099990001009999999099999999990910999999999192999110 -080903101000080904051004080902111200081313141400151516141400041701061800929999999999999099000991909991099991990999999019990390909909 -030808080600090904021000111112131404111115161700181815191900181805011904299999991099991990091999090999019909099999199009999039999990 -080805010300080809101100040409091100121314021100121315161600120604171600999999903299019900999999999990199909199909990909999909909099 -080801090600080809090400101011120400131415121200131603040200130517171700999099939999090909919999009990999009999099199990990291999999 -080509031000081109121000131109061000041114140200011114141500041617041500909999992990991999909909999090919999199999093199990999900099 -060308090900101108090904121308140500021516161704151516181700191901041700999990299999909001999910009199999919001999999909990309999999 -080803040900101011040900101004040900120213131300050614151500041414011500999099029999190999999990909019909919990099199909999939909999 -080808080900031011060900121013020900121204140904051514140100161718181804999099999992199999109999119999999999109009999093909099900990 -050108080904101006080904101011120900131402151600131704181900131717180300999900399999099099909990009919999011199900190999999992999999 -080409100500080809110100040609110400121309141400151515021400031617171700900099999999003990999999909099199009999999999911991990929999 -080909010400100909111204061313111400031516110500171516181800041502181800099990993099900009090999999999909291999990990999909199991999 -020808090300100404040400111111121300051406121300151516161300150116161300191291990990999919090999909919999099999109999099993999999909 -080808090904101112090900011312120500141402150600141617171700031604041800999900999990909990999931909999199911099190999999999090929909 -030805090904101112131400021512120600161617171700161618191904202020011904209909199091990919909919999919009999999909999119099039999990 -080808090400101011110100100611111200030513041200141415021600171717170400999099900999093999999990919990999909092999199111999900999999 -080109100500081111111100121213140600121213151504160413041500021717170300990099309990999991909990909999999990901999990909919999919929 -080109090600081011121204081302121204141414150400031617170500161617171800999999309099119090999909190991999990092909999099999990999909 -080803090900101011020900101012121200011313040400141304151600051717170600992990999999911999199991999919099399999999090090900900999999 -040108090904100808111200131415151200130615021200131616161200130317040500990900399990919990919909909909199999999991999999999100992999 -080809060300051009111204101013131404151613131700011618180200041618181900909999990299999009001999990099919009999999193999999991901919 -080808090900101011120100101002060300131415161704130418181900130518191904999990990999113999909991999901929091109009999999999909990990 -050108040600091010041100091010121300091415150300090215161600171718181804990990309099909999990919909999099199999199299119990909999990 -080808090904101010100905111212121200111302141504161617181904032021010600990909999999990099909999999991199009009911099099099130921999 -080909010600100909111104040512131400151516131700150318021700191919191704099990993099909009091990919999999900099991999299999119999990 -080906011000041112121000041312121000141415151000031602151700161604051700099990003999099990999909909999199909999919999190929099999909 -080909090200080304101000081111121004131415120100161617120500041606121800999199299199909999999999910090999000399909999099999090909909 -040808030900021011120900130404040900131414051500131416161500130116160600099999092991119919099909909999909999999990991090993999999909 -080109100400080811120600131313141404151516141404171816160500021919190300990099300999090991909999990919999909909199091999919999919929 -060809101000011112121004111112120400131305141500161616160300040217171700090999009993999099999990999910909999099190999999901992991999 -040803010900101011090900061002121200131314121200131314151600040405171600099999023999199999991901199990999909999990099999900909999099 -080808090300050210110600121213141504161217170400161817171904161801191900999290091999119991990999000990909919999999990099099309999999 -080209090400100411121300140311120100061511121600151517121600041717051600119991991090900919999929939099999909099999999909999999909909 -080802040900100811110900030411120900061313130500141404150100141416160400919099919991999929919990909999199999090991999993999009990909 -050108080400091008080600111111110200121313041400120404151500161616031500999090399999199909190999919099919099099099199999909099999929 -040308050900100808110900120213110900141414151500161617151500160406010400990990299991999919999910099919909999999919999019990030999999 -080509090300080209091000081111061200081111121200131314151600130104040400999999099299191991999999099999999990990199099009993000999999 -080910101104031210101100040204131100141505061100141516171700181818011700199902199999999991909999009019999999999900090119999039999999 -080803091004080809091004111205130200111415161704111818181900062001191900992909999999999090910999919900919090109091999999990309909999 -080808080600010910111204130909140200131515141604131718141904171705032000999999099093000099999999119990919099909099199099099091999929 -080808080400090610101100090904100200121212131400151515131604170501031800999999990099999990990999919900119991999919199999009391909929 -050808080300090210111204090913140600011513131604171819191900172020202004999990099291111099909990909919999399009999090999990990999990 -080809011004080809091000111112131004111414021000151617181900050317060400999909993999991990999990010999199099990991999110902900999999 -040801050900101011111100101004121200131314121200151506021600150403161600099099039099099999919999099099999990999001999991999999909299 -080801090900061010090900111012041300020512041400151512161600031712160400999990039999909999090919099199909090991999099999991990929999 -030801090400101011111204131011111200130214151204131614171800131605190600299099130999990099999999999919199011909990090999999900999099 -030809101000040809101000110804121200130204121200141516161600051717010600299999999999099909909999099019999190991990991199990930909999 -080805030900100611110900120211040900131414141400131516170400130104171700999990902999999900999911909199909199999109099909993099999999 -080109101000080909101004081111110500081202131300140615160400141704180300990999399991999090999999999999909110990919099019999919900929 -040808080800040902100300040911100600120913101400011313151400041615150500099999909990192999199999199099909099999199993990990999900909 -080809090600101009091100101002120400041314151604051414171600181801031600999990999099090999999991199919109019009991990999990329999999 -040608080300091011081200091311141500091304021600011304171600051317171600999990099299990990991999019999199009999991993090999999901999 -080910010400081111121200081111051200081302060400141415160400031717161600009999903099919999999999909919909910999919999109991990929999 -040108080300091008110500121002131300141015061604171718181604171718181600999290399990900999199909099091999910900909999990099999999999 -080904101100061203131300041212131304141402151600141717171600050118181600090090099099929999999999090099109911999999991999903099999999 -040403080800090910080800090906040200111213131400111215161600051201160400999990029999919999991990909909919909999990190919999390909999 -050809100400011109120600131314141504130214141500031617181504191616181500000099990993090991099999900999999199999109999909029999919999 -080306091000081112091000130214091004151516091700151504181704191919010500990999299999199909199991900019999911999991999900090930999999 -040809040600100811031200100813141500161616021504011717181500051717181500090999909090999999020990199991999991909991993999999999909109 -030804090900040806100900111202101000131314150100131316161604171717051800290999999999999901090901999991099999399911999099099090999909 -080809090500011009091104121313141504161313170200061819172004181819170300909999999093190099199909110099919999190099999901099992999999 -030808090900040802090900050410111200131313111100141406010400000000000000299999999990199999190999999001909991999003099999999999999999 -050108090200101108041200101308031200101415150600141415150400000000000000991190390190199990999999929909999999099999999090999999999999 -040803090900020808100600111212121200011313050400141414140400000000000000929990990991999919900919999919009399999099999990999999999999 -080609010400080809101000111111101200051302141200151503041200000000000000909999993099019999199999909091999919099190999299999999999999 -080909090300080802101100061212130500011212131400151515040400000000000000999299919999000999190909999999999390099900099999999999999999 -080406090900080502090300081011041200081013141200011013130400041515151500099999909290919999109999999991999010099999093999990999909999 -080804010904030810110900120213130904141413131500141616171800191919060500999909903999001929999991910119909999999909099990999000999999 -040208080800090905100300110912101300111212100400141415160600141401170400919990199299099999999991909999909099999010999900999309999909 -040408010600090908081000090911121200051314141400030402151500161616160400999990093099990999019990999009199999999019999909929190999999 -030809090500101109090600101112121200100213040400101404150100161617151500299099199999099999990999999910909009999190999993991099991199 -080809101011080809100311121209021311120514141504161718181920060118182104999999999299999990919990990999109999990019000199003990999900 -080809101004110809101001111213141516111217050216111204181806041903181804990909999990099390991999001990999990919909199999090999909290 -080301090504101011091213040211091313141511091617180411191617181804061617299991939009990991999999999019990010090099999909099909990999 -030809040000100808040000100211110000061211110000131313010000000000000000990992909999909990999919999919999099999109999939999999999999 -080801040000080804090000101109090000060212120000131313030000000000000000939999990999099991999900999019999909999199999929999999999999 -040803090000010804100000111111020000121213130000120613130000000000000000092999991999099930919999199090999999999099999999999999999999 -080409010000081009090000111112040000111102060000031313130000000000000000999999093999099909109999999991999919992090999999999999999999 -030809101004111213021000111214140500111214061500161217041500040118181800219909919999910999919999909999099999990919990199903000999999 -080409031000080802111000041212041300051212141300151514141300151501160600909299909999111991999909909999999099999019999990999309999909 -080603090900081010091100081010120200131314140400151316171704050401171700992999099999991999991909919990199999999910090099000399999999 -040408040500090908101100090908121300141415060300161415171700160102171700999990090099990999990999009900099919990999299999993199999199 -080808030000040204010000090909090000101112120000101306120000000000000000992990199999099991939999999909099099999099999099999999999999 -080910011104080912111100080913140500060915161700031802161904201818161904009909903999919999199999909991099090099919099999029199919990 -080809010400050809091000031112131000041114041000151502040600151516161600909999993090990999919929199991999090999119099109999999990999 -080808080400010909040600050909101000110212101000110413131400110313040400999099090993999999990909099919999190999090099999999900929999 -080801040000040809090000101102060000101212130000101212030000000000000000939999990990099991999901099991999991999992999999999999999999 -080809010000041009110000040609110000121202110000031204110000000000000000909999093990919990999999999091999919992999999909999999999999 -030208080000091008080000111112010000131112040000130612040000000000000000919992199991999909939990999099999990999099999909999999999999 -080801040000060809100000111111020000121204130000121203130000000000000000999999930990199991909999199909199909999999999929999999999999 -040809030000101010110000060402110000011213110000121213110000000000000000002999919999999909199999999901999919993999999909999999999999 -080801090904080810110200121212121300141516171304180519041300180619190300999909931199019990991999999090099909900000999999999992990999 -080803090900080810050900021110121200130410041400131510141400130604010400929999999999990919990909999109009999999999991119990030999999 -080801090900041010110900121013130500141502040300161717181804061717181800999999030999919909919999909091099099999019290919009999999999 -040508010400090410111100021210111300140610151300141616171300140317171300909990903099999900990911199199099909999900999999999999929999 -050808010904101011120900100611130900041411150900161711180200160319191904999900903999009999919999909909199009999091990991999991992990 -080904030000080904100000080902100000081112120000011306120000000000000000909999992999999999099909199991999019999199993099999999999999 -080401090900081011090900081111030200040604121200131313130400000000000000099999939990019999991999999900219999990990099999999999999999 -060808080800090909100400040204100100111104121200031104121200000000000000099999990999910991999909039919099990999999992909999999999999 -060103080800091011080800091012130400141002131300151515150400000000000000999990329990909999199999999991909010990999999990999999999999 -040808090400011008091100121213090600140213151500140313051500000000000000099999999093100999199990909999999110999999992909999999999999 -080806090300080802090400101112121200041313140400051301141400000000000000999299909999019990190909999099199991099939990999999999999999 -040108040400090908101100090908100300120502101300121414100600000000000000999990390099190999999999999001929991199999999900999999999999 -040108040400090908101100090908100300120502101300121414100600000000000000999990990099090999999999999000929991199999999900999999999999 -080910010500080411121200081313141200061302140400151515150300000000000000009999903099019999199999999991909990990919999992999999999999 -030808090400101011091204100511090400021311141400150611011404000000000000999992909099990099999909909199099111990993990999099999999999 -080309090904081010110100021010111104121213141500120506040400000000000000299909990999913919999919990900099999099000099999999999999999 -080808080500090910111204011314150300161614151504041614020600000000000000999999099099000090999931929909999999909991990910999999999999 -050808080800030902101000041111121200131411121200131516171704040106171700099999119992999999109909099919999999999109990909003099999999 -080304090600081009091100080212041300081412151600171412161600171401040500299999909099199991190919999999009900090999999999999300999999 -040801090400100811090400101211091300051411060400151511161600151502160300999090939990900990999990909999909090999099999099999192999199 -050104080600091008080200041112131400151515131400161617131804161617170300999090309990991991191901099909999999990999199999099902999999 -080109090500081009090400041011111100121013040400021414150300041406151500999099399990090999999909999990909100991999991912999999900999 -080809060300100811121204101302121200101415160500141417161800190401161804990999909299999090099900199991999901099999999919909399909900 -040108090900101108090900121314151504061614020500171714181800171704031800999990399999119909919909990909199000099991999099999999990929 -080506010900081011090900081213141504080213041600171813161600170313191904999999003990009999910991190919009999999199991999999990929990 -080910011100040910101100040912121200060904041300141414150200050315150400099990993999091999991909999999919009099099199991909990992999 -080803090900080804090900100404110200121313131300141414140500040601151500992999999999099909991909919090199999990919999990900309999999 -040809031000111102121000110613121004141516161000140516160100141717180400912990199999199999199999990901099909099099999993999909909009 -040108040900101111040900121111130900051414060900150214161600151503161600990990309999999909909909009991099099999999991109999999992999 -060808090400041004111100011212120300131313131400151616051400041616021400090099090990099990999939999919929999990190999999909999999119 -080808090900101010101104121304061100121302141100121504161700121803010500999999900999990099999999999990099011199199199901991930992999 -040809101004111112100100061314151600170205151600171819151600170319191604000909999999113991099909009910999199999099999099999999929990 -080809011000080811111000121211131004021204131400151617131804031605130600909999903999990999909991990190909999991999091909099090929999 -040808030900100808110900101213020900101405041504101414161500060116161500999990992999991990999991119910999999909990990909903999999909 -060408010500091010101000111111111200131404151200161403170200161604171700909990903099999909901999999099099090990999199929999991999099 -080805030904101112130900041415150900041415150200161617181800161606011800999900902990091999099909999999919999190019999019999939990999 -080808080900011011060900121213130900121414021504160417181800050319181804999099099993190990199999999999109991900019099999909199992990 -080501090900101010090600110212131400151516171404181919201404031919202004099990939999990919009919999910099990009199991999029999999090 -080109090400081010100500081112131400151512020400151506161600040317161600999099390999999999190900109909199999999991099099909999992199 -080901100400060910101100040912111100131314150200131305150400041616150300099090939999991999099990999090919909199909999990900999999929 -080801090900080810111100121314110200151516161704180516161704040619031700999999930999199991999901119099019999900999999099009099990929 -060801090900100808090904101111111100021204130400141415161600031718051600999990939990909099199999999910009199991990999909991099929099 -030802090904100811061200051314121200151614171700151814171700150414010400919902919091999999109909999909099099999999990019990930999999 -060801090400100811110500101211111300101414150200100314161700181818041704999090930999090990999909919999919991199290099999999009999990 -050108090900101108090900121213140400121213151500041613021504171717060300999990399990999991009991009999999999999091990919099002999999 -060508080800090904100100041112131300141415131300141416170200040316171700999990000999993990919990099090999909999999199911909999992999 -080808090904101010090100061111120400131114021500131616041700051616031800990909999999903999919909109991999091199099199909909991999929 -050108091000111112130600111112140200151516161700151518161704190418031704990090309099119999919999919900919999999999999099009999909920 -080801040500080809090900101106121300100314021504161617171800161604181800999999930099099990991909099999019929109911099099999099999999 -030808090600100808090900101112121304100205141304101516171800151519010400999992999099999990909999990909099190909190099910999130991999 -060804030900080810110904121213020900121214150500011616171700041818181800099999902999991009099999119991999910099190993999999099909999 -030808080400040209041000051111121300141111121300141516161700140116160600299999919090109991990909999999999190999999091090993999999909 -080910110300040212120600130512121404131515151400161718181400161901181404011290199999190999999999990901999099999919999099990399909900 -080904011000080911101000120906041300141516161600151505020400031717171700009999993999009999901900999099919099999991099999999019929999 -040809090300100809021100100812131400101516161400151516161700060105040400099999999299919999111991919919999009999999999990903000999999 -080801040900101010090904111111110600021212130300141212151600141404170500999999030999999099100999999199999191299999990900999900999099 -080309090900080810060200110410121200110513121204111415161600111718011604929999999199999909901990099999999900909999190909990039990990 -050802091000110812041304111114140300151514141600151517181600060117170400091199919199909090192999999909999999999919999100903990999999 -040801091000111112091000111112131000141402151604141417061800030517170400099999039999999999909990109999109911909900099999929990990999 -040809051004011111121004131112121000141515021000161515171800061919031800000909099993999099999901909099199990990991999991900999999929 -060801040500040808090900100211090900041211131400121211130400031515130400099999930099919909999901199919009099999999099999929999999009 -080910100400061110100500121314151500121302151500161317171704160118040300099090099999090990909991999991999099990919999999093092999099 -050804090900010808090900101104121200131404121200130215150600131616170300099999909993909991009919999199999109999199099199999919909929 -080109090400080809090600101112131400101115021600171818051604041818031600999099399999099901990991109990199999199909990909009999999929 -040805090900100811090900100312131300100406130400101415160100021416160400099999909999009999099929099999999099099900999113919999919909 -040108090900101010090904111106120500111104121300140215161700141403161800990990309999999019909999099999909909990199099119999990999209 -040806090900011010090900051011111100121304141500121316021700041316160300009999099993999999990900999919999009199991199119999992909999 -080509101000081109100300081109121304081402150400061617170100181818170400999999099999909999992999910900199011099199990193999099999909 -080801090900101112090904051111061300141402150400141416161700181803160400999990939990109099990999909091999901099991999990990990999299 -050308080900101008080900101011060400021213131300011414150400041616160400999990299999990999099999999190009119999919993990999009909909 -080604030900081010100900081112021300081104131300141414141500160401050400999999002999999999190999199999199999990009199991909300909999 -080808090900011011090900101012131404151516160200151506171804050417170300999999909993199999109999110099919909999999199091000999999929 -080801090900080810110900121314110500150316111704021819111704061820201704999999939999090999190911099199999929001919991199009999999900 -030808050600090908101100121202101104121213141100151616170100041616180400290999999099999990199999990991099999090910990993999919909109 -050106080800090910100800091111111100121213041400021515161700041515030400990990390999999990099999999190909990991999091919909920999999 -080804090900080610090900111111120100131313121204050414151500031617180200999999909999909900909999039990999999900991999009999991921119 -080909010400040909101100051212131400060215161404031717161400181818161400099990993099909999910909109919999000909199999999921999999999 -040108090300101008110400101002111200131405111200151617181800061616181804991290399999990999199991099909999090090099999009909999999990 -080809090200010810111200131404051204131516031200130616161200131704181800919199999193009990909909990900999909299099999999999990900999 -080808080400050910061100030902041100121313141100121313150100161616170400999990099099109999199929099991999999099990990993999119999109 -080209101004111112100300131314150600011617151504181819192004181819190500111901999999092991099999999910909390909099999090099990999999 -080209101004111112100300131314150600011617151504181819192004181819190500011901999999092991099999999900909990909099999090099990999999 -040404080500091010110100091012111300141412111500140212161500030412061500990090090990903999999999909999909991999199999190920909999999 -080309040500081009111100080212111100061212130400141415160100140417171700999999290091909999999919099919999999090910999013999909990999 -080506010400080910101000080909111100021204111100131304141500031316161700099999903099999999919919199190999199999190099909929990999909 -080806091004080811121000130214141400131516171700130418171704031818010500990909990999000999099911999999199900999009999999029930999999 -040809090900100811120400131314141400131302150300161617170500040117170600999990900990090990999999999990999919291911999990903999999909 -060808080800050910021100041213141100011516141104151517140300041717181800099999909990911990109900999991999319909999299909909999999099 -050808030904100808111104101212021100101314151600171718061600170119201604099209999199999099019999999909199091099019999199993009999090 -040809010500101011121300101014141400150216170400151516171800060316181804009999903099910999199999999901909110999999999999902999999090 -050804090400100811120300130811021400151511161400151517171800060117171804999090900999909909992909199909199919199909999999903999999900 -040808080800010909100400110909121200111113120400040514020600031515151500099999090993990999999909999991999990090919999010999919929999 -080801090400080810101100120413021400121313150400121617151500121606050300999099930999091909091909919999199999099909999099999902990999 -030802091004051112091004131306141000131315161700181815151700180419011700291909119990199099919999099999109909099091999999999039990999 -080109090904080810101000111112130600111105140200151504161700150403181800999909309999099991999991109999199990190990199909999991909299 -080801090900080510090904111212130400141212151500141617020600031818181804999999939999909000109909909999999990999919990010999919929990 -040801040400040808090900101010040900111213131400111213130200110315050600099999930099919900909999999099919909999999199991999100992999 -040508080400090308081000090911120200131314150600011616161604171717181800909990999099291999991991119919999990099109993999090909999999 -080909100300080809110600120502111300141415111600171717181800040104181804991299999999999900190999999091909919991990099909903099999990 -080808030900101112121200131111021400131304041400151515151600051706010400999290999199999909919999019999999999999000199991990030909999 -080903041004111204131000021214131000051214141000151516161700151516010600129001999999999919099919999999099919090991999090999930999999 -080809101100020803101104121314101100151516170600151518191904050118190400919991929999999019999990009100999990099999999099003999999009 -080804060904081011110900121311110100041313141500021617051500181818031500999909000999090999999909939099199991099919991109919999999299 -040809090300050806101000110804101000121313020400141413150100141416150400099299991999909909999990999009199991090999999993999199990109 -020809090300100611121200131111121200141515151504161617180500160104180400119291999990999919999999999190099199909109099909993099999909 -060408091000111111091000011212131000141212050200151604171704151503181700900090909999999999999939119999019099990099199099099919999299 -040308091000110808091000120213091000041414151000040615150100161717170500999990299999990909199901999919999091099999999093909099909909 -080901101004051111121204131111141400061516141400031515170200181818190400099900039099999099990909999091999991999999192911999009999909 -080106090300081009091100081202131100141415131100141416041104041716180500990299399991990999199911099900999999999909999999090909909009 -080804091004080811111104121212131300051402131300011516161700151518060300990009999099999090990999999911999091999199193999999092990099 -080906101000030902101000110912130500111414150400111416171704041816011700199992909999199999100999199999199999999991090009099939900999 -080309101000080409111000080404020500081212121200131415161700141401061700920999999999019999919999999900109999990199090109999309999999 -060808090500040808100100110212101000111312041400111515161700031515160400091099991999993909199991999919909090999199099909999990929999 -080104090400081009091100081204131400041213131400061202040300051215151500999999309099090991999900999999999019099919990909999192909999 -080209030600081011121304081414150100051414161600170418161604171718191900919999112099910091999909139999099099999009999999099990990999 -030808080900100211110904121314140900150516060900171818181804040119191900299999919991199019999900909199999990991009991999003099999999 -080909090300080204101000081112100400131314151500131314151500040104050600999299199999999991099919009190999900999999999999903000999999 -080809050300081009111200131406151604131417021800131419192004131401192004999999990299099900901990990999019911199999990190099399999990 -080609091000080503040200081111121300141111041500141616171704141616011700099199929199999990901999099099919999999900190909099939999999 -060108080804091010110500121004110300131415021600170415181800171715181800999900309999910909099999999009129009990091199999999999999999 -050304080800091010041100120210131300140406131300151516161600151501171700999990209099999909900911999199999090991990999199999309999999 -080304050900081011040900060212130900040413130900141515160100141515161600299099909991099991909901199999999999090001990993999999999999 -080401090904101112090900131415161600130217161604181817190600180319190500099900939990009999109911999999999119909990099199992999999909 -080801090900101010090900061112130400141402151604141405171704031819191900999990939999919999019900909999199911009999099999091090929999 -040809060300101112121300141112151300141105021600141117161604140104181800900990099299999909999990919999199999199909990119093009999999 -080609040300081011111100121302041400121515051400121516171400120104171700990999009290999990109911999999999999999990991009993090999999 -080909031004080906041100121314021500051614171700181814191900180114191904099209999199990909091909919909199099999091999119993999999990 -040106080804091011080800121011111300120214151304121617181300121917030500990900399999009909999919999999999111009991990999990920990999 -080803091000080811091000061202091004130514151600171818181804171919010400999999929999919990999990190091909901190999190999090930999999 -060809091000030502111000121212131000140415150100161604151700161604171700009099999999011929199999919099199909390999999900999999990999 -080806010400050910101000111111120200131313131400150416161700151516030400999999003090999990199999119999019999999099199991999920990999 -080803040900080804051000021111121300141414121204151515151600171701061800929099999099099919900919999919909999909190999990990390999909 -080304090900100411050900100211121300101411120600101415121600041515010400290991999999909990990911909909999991099999999090999930909999 -040401080800091011080800121311141504161302051500161317171700161318060300999990039999009909900901990999099019999919999999999992990099 -080809020400031010110500121010111100130406141400041515141400161616010400911092991999990999999909099099199090999999999909909030999999 -040805090600011010101100121212111104131314150200041316161700181816160300090999090093999990919999990990919909199991990991999992990999 -050801090400100811120600131313131404021515161600171715181900171703191904999090930990109991990999900919999199991990099909999999992990 -080309090900080406101000081111020500041211131400011515160400041515161600929999991990999999019909109099999910099199093909999999909999 -040105060400080910111100080412111100080213131300081415151600171715031600999990300090109990199999999991999919999199099199909999999299 -040108080400091008081100121013130200141004061500141616041500051616031500999990399090199999190909919099919909099999990990909999999929 -060108090400101112121204131414141400130215150500161715150300041717181800990090309991999010099999999999999119090099999992909999999099 -080903101004081112021000081314151500060516151504171818181800171919010400929909199999119999910900999090999999909009190999999030999999 -040801090400100808090600111112091300111114091300150516040200150317171700999090939999910909099990919990999999990909199009999991992999 -040808080800040910110100120910101300030614151300160217151300161604150500099999909999993909919900999901099999992919999190991099999909 -080309101004081112130500081111141400021515161404171515180100061919190400990909209999909999900919999199099190909999990913909099999909 -080809020600080804100400110304101200111314101500111314101600171714010500911099991999909992990999099999909000999999099990999930990999 -080809100600080209031104121314151100121617041104121818191100120501191900991999092099199091999990009919999000909199999909999399909999 -080109090600081009091104121212120400130214151600171718150300041818150500999999399090090091999999909199999111199009299999909999999909 -080306090400080810091104120210091300121410090400150510161700151501181700290999999099999091990919909999909110990999999009999309999909 -030808080600040509021004111212131400151216161400171716161800171704011800299999901099090009919999999090199099099999999090999039999999 -050108080800091011110400091012110400090404021300090403131300061414141500999990309990190999999999099990109099199999990929909990999909 -080809100400111112130100110512141400150212141400160612040400160317171700900099090999913999909990999999999119991990099099999099929999 -080901100400020909101100121313140400121313151504120316171700120605171700199991939099900919099999009999099999909900992999999099909999 -080803091000080411021000121211130400121205131400061516131700151501130400992199999999991900919990999999909999999009090010999390999999 -030809040500100809111200100813041200100214151200161617171204160117180600999992990099990999099999099900999111099991999199093999999009 -080309090900080810051104120213131400121506161600121718161604121919010400299999999099009091990901909909199990999099999099099030999999 -080803090900080410020900111210130500141414130600151515130400041601131700992999999999011909999909909901999999099919999909990390909909 -040308090900101112120904131105021400151116161704151516161800191919010600929990919999999009910909919990919909909999199091999030999999 -050809100300041109091204111102131200141404131200141415130100161616160600009299991999999009199991999919999999099909999113999099999909 -080809090904011010111100041010111100120213141400031515161400171506050400999909009993909999999999999091099019999199999990929900910999 -040108090900100808090900101011040400050212121200131313061400150316041400999990399991909999090999999910099099999190099999919099929099 -060809011000040509101000111209131304140215131304141617181800141619031800009999993999919900909901990019999919909019099999999199999299 -080803060500080910111104020910111104120913141500041617181800161601181800929999990099999019999919090999909010090919999009999399999999 -080809030400061009111204130209141400131516141404131718191900130118190500999999092099910000999911999999999900909099991009993999999909 -080909031004081102101000121212120500041314061500161617181500161601041500999209909999119901999999999919909090999109999100999309999999 -080304090904101011051200130211141500131311161504171718191500171706011500299901909099999991900991999999099991909091999000999039999999 -060508090400101111120300131111121400131515161404131515171404130117170200900090990999999909992909999999099999909990990999093191999919 -030504080800091010101000111102120600111314120400151316121700151501120400990992090999999919909991109999999909999909099910990390999999 -050809101004060909101000110412120100111303121400111504161400111702161400000909999999999909909990939999999929999191999990991099901199 -050404010600080910101100121212121100031314141100151514021100151616040400999990003090999990919999919999999219999991999991990000999999 -080801090900080810091100041210131400021510131604171706130500031718180400999999939999000909990991099919909199901999099909999909929909 -080809011000051111121000061111131000141515021004161515171804160319181804909999903990991999909999099099999099109991090919099199992990 -050801090400020810111100120813111100121414150400121415151600030604171700999090930991909919199991999990099999999999099990920909999099 -080808080300040209041000111213141000111113151000161617041000050117170600999299199990909991099910099999099999091900999999903999999909 -080809090900100211120100131111120400140315120400160615150500171717170400919999191990993901999999909091999929090999999990900999999909 -080803090400080405101004021112121300141512121300011617171300181818180600929099990999999010090999999109999119999919993190999099999909 -080809031000110809121000060409051000011313140200151313141400041604171700999999992990091909999990999990019399999999190919900990990999 -080509091004081111101000081111121304081402151300040616151300031718011300999009099999999999990909190991199909090019999999999139921999 -080609101004081109100300081212131400151212161404171819191404050119190200999909099990909999902999999099099999900900990199003991999919 -050808030900011008040900041112120900131313130200141415151600141415060400099299999993009991099909999919919999199009099999999900999999 -080809100300080809090600111202131400111516171704041505170100041518181800991299999999999990190901009919999911900999999993999009909999 -080304090900080510090900081112061300021414141400151617171804041617011800299999909999099999090990999109009199999091990990009939999999 -080904100300080904101000110912130500110904020600111414150400110114161600909299999999999909010999099999199909099091990999993910999199 -050608040300090908101000090902101000111112130400141515131300160415010400909990990299999999099991199919909911999999990909909930909999 -050808080800020910110100120310131304121210041300141510161700061804161700099999911991193919909999990929999990990999990900990999909099 -080601090400081009090500081011111200041013110400041002040300141415151500999099039999090999919909909091909999999910990999990192999999 -050108090900100808111104120413111104140615161600141515161600021718190300999990390991999019099909090199999090999999990999919999911129 -080801090600081010100500110212131404151516171804151519172000031919172004999099930990999999910911100190909990909999099099929999999990 -080909090905081011120100131415160600021715181804191915181804031920212104099909990999113991909919009199099199909199999999029999990090 -050108080804090909101000111112101000130214151504041617150300161618190600999900309999999919099999099199999111900099299099999099999009 -030806090400080810090400021110091200131405091204151617181200151517011200290099999999999919990911199999999090000091999009999939999999 -050108090400101008111200101004111200130204111200141414111200150306161600990090399999009999999999009199999190999199999999919009929999 -080904031000080811121200131311061400131315150200011616150400051616170400009299999199999909991999999990019919199199093999999999909009 -030809010400050809101000110809120400060209121200131414150400131414161700299999993099999909910909999919999011999990999909999990909009 -080803010600080209101000111109121300111109051400151504161400151704041400929999993091999991919991109999009999999099999090999909900999 -040808090300100808041100101012041100011312021100051412150400141416160600990990990299999990999999099909999391199199990190999909990909 -040808090300100808041100101012041100011312021100051412150400141416160600990990990299999990999999099909999990199199990190999909990909 -050108080900101010090900111204131300111212131300111404060400021516170300999990390999909919090909999999999999999990090099919999911129 -060801050400090910101000090911111204131311140200151516171700151504170300099999030099099999091999990909919999199001999999999099999929 -030508090400101108120600131308141400150208141400151617181800150417011804999092090999009919990999199919999919999091990909999939909990 -020809100300111112061304110412141300151512161604011517161600181818190500111291999999009099999909909199099999909999993009990999999009 -040801090904100808090900111212131300061212141400151602170300050418181800999900939999909901909909999099099999999019990992900119999999 -080905101004030911101200130214151204041616161200171717171200181819010600199902909999909991909901190099199999999991999990999030990999 -080803010600080409090900021010111200041013131400051513131400041504041400929999993099999910919919109990909099999099990999999099909909 -080109101104080909051200081313140400081313141500161616021704031818190600990009399090909999190999199999999999090991099999099910929199 -080809100400080809110500061212111300041214111300150316111300151502011304999099990999099909090999099999999091099919992999999139991990 -080808010904040610090900111111120400131312121400131315021400031617180500999900903999009999019999909909999999099919999919999919921109 -080909100500080309101100081202101100131415151604171715150400041701180600999999299099999999199991909019909099009199099199909309999909 -080805090900080810060900110410121200131410121204150210161604031718011600909999999999999909900999999009999199901190999919021139991999 -080804090300100811110500101211110400101204020600011314151600171717171600990299991999990990999999909999199099999001093900991919999999 -050808010900020808100900110612131304141516161600140304171700141804171700099999993991919910090999090199099199999200999999999999900999 -030805090400061011091204131402091200151616091200151616171700181801171704299099109999199009199909909901999999999990990909909399999990 -030808080800091011121200061002131200051014151500161717171504160401180400299999919990999909199990009991999091999991990999090309999909 -080809100400080811110100021211111300141414061500161717041504160317180500900099990999993999999911909199009999991999991909092999999009 -040809010400051009091100121313141100121313141500031616140400171616020600009999993090999990919999909999999090099999099999929919919109 -060108080800090910110400090910121200131314121200021304051500161616030400999990390999990999909990099190999999991900099999919990999299 -060401040500080808090900100211090900041211131300141515131600031515161600999990030099999919099919099019999990999199991999929909999999 -080808010900101010100900021111121304141405150600141403041604171819161600999999903999990999100919990190009999999990999299009999900099 -040809101100121203131100061415021100011615170500181815171904181815191904001999921999990990919900999999199319099999999019099999999090 -040809010400101011121200131302141400131315041400031515161600061705161600009999903099009999991990199991999999099999092999990099909999 -080401090400101010111100040612041300141412121300141415021300051515160300099090930999909909199999909909999909099991999919909999999129 -080109090500081004091100081202130300081404131300151616170600151616170400999999399091090999909911199909929909990099099909999999999909 -050104080804091011120400131014141500131014140600131016021700031616181800999900300990109999190999909999999999999991090910999909929999 -040809090300041011021200051010131200041414131200041414131200151506010400009299919990911999999909099999999099999999990901990030999999 -040808030900100811051204131414021200131516171700131518171704131501061900999290999190009090999909019999199909999909999919099390999909 -040809090300101009090400101002060400110404121300111414121500110105151500009299999999990999199991099199909099099909991900993099999999 -080808090400011010090500111010090600120213131400041513131400151516030400999099909993990999999919009190999199090199999999999990991299 -060808090904101112090900131312140200151612171704181912170300050120202004099909099990999909909999119099919919900199990992903099999990 -040809051000041109101000121313131400121215151504160206170100031818181800099999090999009909990999999999009999901190999093921919999999 -080805090900080810110600031213131300141515150100140404161604170218161600999999900999990990009999999209099999399991990909019999911199 -040808050900101112090904061312120100141415161600170218161600031919191904999990090990999090909900939999199991991119999199929099999990 -050804010600040809090900100804111100100804111100120213140400121515150300099999903090199999090909999999999999990100099909991999999929 -080809090500080809090100100211121200131411151200130316171804130419061804919099999999993991909919099199999190999200099999099009990990 -080804010900081011110904121211110904121313130900140615050200140316171800999999003999999090999990910999099999990909199090999991992119 -050809090600101109090100101204131400021504131400161617131804161603181800009099999999193991909900909919999190991999999190099299999999 -060809010500040809101100120809041300120809140400031502161600151517171600099999993099010909900999999999909090999910999199929099999999 -080609090500101109090400121104131400151116131400151516021400040103171400099090999999090909999900999999999901999991999191903999999219 -040808040400010808090900101010090900111213140200111206041500051203161600099999990093919990999999999000919999099900199999909991999299 -040805030400090808101000061104101000121213130200011214141500161614140400999990902090999990999999999000919919199999993990990990990999 -080905100300080911121200130914140200150914141604151717040400150117180600999299901999909909991990999099919999109910090999993999999009 -040809050600080809101100040209101200031309101200141315151200041615011200990990999099990990999901999919999999092910991999999939900999 -080808040904101102090900120313051400041515161600171515181800170106181800999909900991199919190929999991009090999999990909993099999999 -030804091004110808121000111313061000111405151000021416171700041418011700990902990999990999099909099999999909091990991919999139901999 -080509041000110909041000011213131000141513131600140217171604140617180300099090999990999990909931909999999019099199999199099999909129 -060803090900101011110900021211110400041213140100041215141400161616040500929990199999990919999919909090999911399999990099999000999999 -080909090300041005111200101002131204141415151200161717181200061717010400099290991999909999919999190901999999199099990901909930999999 -060808090900010808021000041112121300051112141500040414140300161717171700099999990993911990901909999999019099999999299999900099909999 -040308090900021010091100120513111100120613141500121613141700120401140400929990919991909919999909999999099999099099091109990390999999 -040809010400050610111100121212131100020413131400151516031400151517171700009999903099919900199999099109909999991999999129999999990999 -080802090600101011091200031314091204040405091200151516171700151518011700919099119999919929099990990909999999090901999909999039990999 -080808060904101112120900051112120904131114150900161117020400160118180300999000999990999999999999990090999011099991090919993199999929 -060105080804091010101000111102120300131114151600171818191900171818041904999900300999999901999999199991129019190099999909999999999090 -080509100400110309120400131302121400131315151400160615171400161604011400099090990992990919099991119999999999090999999091999039999999 -040804090900011011090900061204130200141215161700141215161700051215031700090999099993119990019909919999019009999999999999999999909929 -080109090400081009091100081212121300141402151500050416161704031816160600999999399091099990990999999199009919990919099099099990921999 -080809101100031213101100141415101100140602161604171704161600171704010500909999909992999991099991909901909991900999999909999930990999 -080808090400031010090900111112131300111102141304041516140100051718140600990099999992999999109999999991099909909919990993990199900109 -080905010400080910101000040911121200130902121200041415160600141415150300999999903090099999991999199091999099990010999990999999999929 -080409090300080209090500101011111100101012131400151613131400060117040400999299099991199919990999999990909999999109990099903090999099 -080902101000110312131400151512130600151504130400161617181804160105181800119991910992990999990991099999999990999199099009093999999099 -060809100500111111120100130214121200131514161700131515161804130403160400090099009999913919099919999919009999999999099999090290999999 -030804091000040811091000121202091000061213090400141415160400141401160500290999999999190909199999999991999919090190999100999399999909 -080803090900081011021200041311140500151311140400161311140400160401140600992999999190911990999999909099999090099999990090990399999909 -080309101100080409101104080609021100081213141100151617170100041617170500929999999999019099919999919909999900190091990993909999999909 -040108080300091008081100121202041100131214141100131514051600130617041600999290399990990991199999999091099919999090099999990099999099 -080309090600081009090200111111111200131304121200041314141400041505010400999999299099191909991999999999099999990901999099990030909999 -080909101004080509111000080212110100081314111500161306171504030418191500999909990999909990999911939991999901091990999909029999990009 -030408091000111111021000120513141400121513141404121617171800120417010600900092999999910999919999999909999999909009190091990930999999 -080809100400051111121204131313121200011415160200041515171700061803171700900099909999999009099999999990119311999999190999990999909299 -060108050900101112090904131314151504131303161500170218161904202020161900990990309990099091990990090999999992991999091119090999999999 -030809100400111112101300040602101300141414141300051515160400171501161600219999919099099999199999199009199999099991999919909390909999 -040809041000031102041000121213131000140406131000141515161600051515011600009099909999190921199999999909999999999901090909999939909999 -080808080500090910100100090911121304140315021600141515041700140618181904999099009999993999199999100099109991999290099999999990990900 -080808080500010909101000060911101000121213021400151204161604171717030400999999909093909999999901999901999991199909190999009920999999 -050308010400091010111100121213111100121202141504161616161704181818180600929990913099999909199999999991199909009911099999099900999999 -080803090900080404090900021010101000111205061304141414141300151516011300929999999999999910090999999199909009901990999990999039990999 -040809101000041111110100121213140600021205141500160317141500161604141500090999009999993909199991009990999199091999999909992099999999 -030608090900101108090900101111121204101314121200021514140500041601170400999992099999999999090999990990999910991199091999990309909909 -040801091000111109091000030612131000141415131004141402131600171718050400099099039999099999919990199291999999909919999190990090999099 -030808090900041010020400111010120400110512121300111415161600110601161600291999991990990999919999999990909099999991090019999399909999 -050808080300090210100400111112100600111112131300141512131604170401181600999290199999990901999999009999999910999099990999009309909909 -080809090900011011020500041211131300141511131300161511170300040417170600919999191993099990910909999909999099990999299999909099990909 -080806090300080810111204131402151204161617181200161617171204050119191900909299991999919090199911900199099990999999999099003099999999 -080809090904080810110300121314151500121206151504011616021704051618191700999909909999992909019990999900999999909091993999099119909109 -080403090904081006090500081011120200131411151600171711041800171701181800092909999999999999010909919099919091199099099009999399999999 -040808010900040510100900021110100900121304040900121414151500120314150600099999903999999900999911909100099999999099099999999990929999 -040804030900101111090900101111021200101313131300100614141400051516010400099299009990999999991999019999199999999999199999990030900999 -080809090300081010111100121002130400141404151500141416151500050106170400999999909290999999919911199199909999999909999009903009999909 -030809101004110812100500131314151504060216151500171716180100171716190400900902909999999919090999090919999919990990999993999919990109 -040806090300100809091100101002040400121314141400151515161600040105161600990290999999990990100991999199999009991999999909903999999099 -050108060900101112090904041314141400151316160400151316021700151303181800990990309990119090919909999999199999099991999991999991909299 -060808080804090910110400121213140100151216160400150217171800150517170300099909990999000999909991139090999999999199099191999992990999 -040804090300100808111204101302121200101414150600101414161600171701180500999290901999919099199991099919999990999990090999990309999909 -080803090900100605110900101213110200100414110400101515161600041501161600992990999990999999091900919999999991099019990909999399909999 -080808010900101011090904101005121300141516161700180306020400181919191904999999093999009099091999919909199099090991099909992919999990 -080803091000051111111100121204060200121314141504161614141700160401181700992199099190999999901990999909919999109099999099999309909909 -040108080600090908081000090911111000120313021000040513141500161616170400999090399999999999099991999099199929090991999910990900999099 -080809010400060909101000051111101000031112121200131414021500041414040400909999993090909999099909999999199999992999191911909900999999 -040108080900101108080600121113021400121215151400160515041400041717170300999090399090199909019999919990999999990999999009909092999999 -080904011000111111111000121213131404051215020400161615171800161615030600009990993999991990991999910099199991099090999990999990999299 -060801091000051111091200131111090400021404151500141416151704031818181700099099039099909909990919999199099199999909099909029099999999 -030804091000111205131000021415151004141416151704181816191900181816010600290999190991900919999999990199909990009199999119999930999999 -030809060500080809021000041112131404041512161600171712161600171701181800999992990099119999910900100999999909990099999909999309999999 -080808090300051004091100121314140200151616141700151616171700150601040400999299099999991900091909999909919991199999990999990300999999 -080609090300080209090400051010101100011212121200041314151500161604041500999299099990199901990999909991999399999009990909990999990909 -050802090300101011121300101011120400141411061500011416161704181818181904011999191299991999999999999919909909099909093999090990999900 -080309101104080812131100141412021100041512051100161712181804161601190600921909991999099990919999919999999009999990199019090309999909 -040808010400091010111200130410111200051414111200031404110600151515021600099999093090909909999999999009999990099909999999929910999109 -080509101000080211100100031204130600141215151600171215150400171818181804991999019990193991909999099299009199099999999990990999909990 -080909050400080909101100121314141400151502161600151506160400040117170300999999990099990900990909999900999911999909999990903919999929 -060508010900100411120904131311141500031311161500171718181504171702191500909990903999909000910999909999199909992991999999099919991199 -080806090300101011090904101002121204131314141200131315160100041718190500999990909299919099199991090919999999999909999113999909900009 -080809011004080809101000021112130400141515151604171705181600170306191600999909993999019999109911909199099999001990999099999909929099 -080809090904080810101000031111120600040204130500141515160100171515181800909909999999099921999999909919099999090100999993909919909199 -080910110300080910121306141510161304171810021304191920212105191901212104999299991999999000919999990009199911000190999199099399999990 -080909090900040410101000041103120200131415121200131415151600131706010500099990999099999990291999919009999999999999190091990930990999 -030808080804091004110500091012131400090215141404161616170100181818180600999902099999900999909999099900999109909190999993999119999909 -080309090500081004091104081012121300021412120400011515161700061515161600999999299099999099000919909199999119999919093990999999909099 -080809101000110612101004110513021404111515161700181819192004180119190300909999009999999099009909010999119999990091199199093992999999 -030408010900101108080900101212130900100212141500161717171704160604180500999992093999090999919999999999109111990999099999099900909099 -080806090300080810110400120410130200121410051500121414151500040104161600909299991999999909910999919909919900999999990919903090999999 -080309090900080510110200080404121300141415061604141415151700181801171700929999999199000999991999009009919999909990199091990399999999 -080901061000080911111004121311111004141515151504141416020500031718192000999999930999099009999900900999199999909991999009999910921109 -050808040900100811110900121302110300141515151504161617181800060104181800999990990990990909199911929199999999901090999099903099999999 -040301040400080910101100120909101100121302141100121315150600120415150500999990230099990909999999999991199001999909099999999999909909 -080804090900080810090900041104060300011111041200131314151200051614021200909999999999009900009999999999929399999910999919900919990919 -080401090600081011110500081211111304021414140400150316171700151516171700099099930999090990999909900991909199991909999909992999999999 -080808010900040610090900021112131300141415130400141416171704050318181800999990903999019999199911099199909909999900999999002099999999 -020808090900101112090100131112140500151612141704031812140600181804140400199991919999913919909990999199909909002099999990999999999009 -060108080800090909101000111102121200111104121300051415160300141404170400999990300999999919999991199999919990990090299099999009999909 -080106091004081112091004081313141400080513141400150216171800151503190400999909309991000090999999099909999999991999091119999910999299 -030804040900100211120900101011120900041311120900041314151600061414010500909992090999199991999999999999999001999991090900999930909999 -080808080300090205061000110412121200131414150400161617151500160118181804999299199991990919090909999190999990991099099099993099999990 -060408050904101112121200011304141400151503141400151617171700161602181800909000909090099990999930999919999999999120999999999919991199 -040809031000050409041000111109021000111112120600130412140100131514140400009299999999909900999999119991999909099999999013999999900909 -040106080800090909081000111213101004111413150200111613150500041713180300999990309999911990999900990909919999199099999990990919909929 -080309090900081010050600040204111100121314111100121516160100121716160400929999919990999901900999999910999919999910999093990999909909 -020808080300091010040600091010111200091314151500011604170500161618171704199291999999999999900999009900999190999199993090999999990090 -080808010600090910111204090913141404151602171400151618171704150519200300999999003099901099991999190091999990999919999099090199999129 -080201040400080909101100080909121100030413131100061415161600171705161600199999130099990999999999009290999909999900990099990999990999 -080802090900100811090904030512121304141512121300040616171700181818011700991999919991199029919990990999999009090901999999990039999999 -080105090900081011090900121011111304061014021304031516171800191919190400999999309999109909999909990999199091009919992100999900999999 -080803090500080810091104021212121204131414151500161614170400160118190600929999999099000019999999990109999199999990999190993009999009 -060808040300090908101100051212131100011212021100141415041100161616160400999990990299009999099909199999199399199009999999999009999909 -020808080300091010111204090911111200011314051204061516171200181818190400199291999990999099999990999919999309909000990900990909999909 -030809061004050909021100121212111100131415151600170415151600041818011600219009999090911999999999099999199009090099999999909039999999 -080809030400080810041100060210051100041210131100011415131100141416171700912999999099909991999909099919999019999919993190999909990099 -080903101100080910101100080902121200081306121400151617181404050404011400992999999999999999190991999919999090990190999110000039999999 -030508090900101010020400111112121300111112121404151616161700150601181904900992990999919999910999999999909909900991099999990300999900 -080501090900101011090904101012021300061412151500040412161500171818160300099990939999919099991990019009199999999090999999909092909999 -080801090900080810090200111213141504160417181500161919181504051919060300999999939199019990091909090090099999999009999999099992909099 -080808030400040910101000110212121300111414141400110615161600110501041600992999199099999901990991999999109099999991999019999309909999 -080803050900081010110900021010120904131414150100131416171804130616041900929999990999990919999999900190099191399900999990090990999909 -080809090500081009090100041112131300021415131304160317171804191919061800999099999990093909199991999910999190901990099999012999999099 -040208080400050903081000110906121300110914151600170918181600170118181604019999199099929909990990909999099000099999990099993999999990 -040105080400090909101000111106121200111102121200131415160400031416161700990090390999909919090999999999999919999919991199929090999909 -080509060400100309111200131309110400131314141404021515161600171501161600090990999092990919990999999990099999901909999909919399919999 -040809100400010811021200131405151200161414151504171718180300171718180600019099910993910990019909999099999999900909299999999999999909 -080801090904101010090900110412131300021415151300061416150500031417181904999900939999909919099990099199999199099909990999999090929000 -020808080300091010101100090904121100011313121204051313140400151606171800199291099999999999999990999919909399909990999909900900900909 -040803090900041011090900121212060200051304141500011314141500161616160400092999099990009999091999909099919909999999993191999900999999 -080809010400080809101000110609101000041213131400151515021400030404160500909999993099909909999999999009919909099999999911920909999009 -040809101004111212120100111313140400111315021600111715151600061805031600000909909999993999919909109991999991199099999999990999900929 -080803090400100504091100021204091100130406091100131414151500041401151500929991999090909919999900999199999090999990091909999399909999 -080906100400080911110100121311140500041515151500161617181800031602181804990099990990093999919900909099199999999991999919929199991990 -080801050904101011110900101011121200131415121200160415020400170615180300999909030999099999910999999099999909990091099919909999909129 -060801040500090810111100120813111100140813151500140416040200140316161700099999930090019909999999099099199999999090199999999991992919 -080808010900041010110900041010120900051312120900031402151600141404061600999990903999900999919909999909999099999919999100929009999999 -050808080800010909091004111202131000141215151600171215181804190620031804099999990993999099919900109091909999990999099999009199909290 -050808080800010909091004111202131000141215151600171215181804190620031804099999990999999099909900009091909999990999099999009199909290 -080809101100080802121100131313140100031515141400041616161604061718051904901099911999999999119999939290999999999999090999099090900900 -050801090900101010090900041112130600141415161604141717021600031818180400099999039999999900100999199900199999909901999999999910929999 -080910021100031212131404151515161404171718180100171718191900050604191900111192999199909099909999910990199909399999999909900999999099 -080909101000081112101000051314150100161702181804160419191804160619190300990999909990999990099901139919999011909009999999099992909999 -050809041000010809110200120809131304121214151500161718151500061818040300019099999099910999991909990990919999999909990099909992999099 -040808080800010906101100121212041100131302141400131304151600040515150300099999090093999991009999999199999911999901999991909992990999 -040808090900101111120900101111130100140215161600140405161600140304170600090999999990910999919999939991099119999909990999999909929009 -060108090500101008091100100408090300121208021300141504161600041504161600999990399099190990999999999099029991990991190909999999909099 -040108090900101111121300101102141500101616141704101816141700050306140400990990309990910999910999199991909999909999999199902099999909 -080806040400080809101000011112101000041102051300141414151500041616150300909999990099199991199939099991909099099919999919900992999999 -060809101100041212041100041313131100141402151500141616151500040116050300000099999990909990999999999009909911999999991999903902999999 -080509101000081109101004081209021300121203141400151616171800060116040400999999099999909090999991119099919992999199090990903900999999 -030408090400101008090100101002090400060411121300141415131300141416160500901092999999993999199991999009009990099909999099999900999999 -080809030500080809091000110212061300110414141400151515151600040104041600992999999099999990190911099999909099991990099999903009999999 -080409100000080411100000021211100000131311010000130311060000000000000000909999909999099909999911199199399999999999992909999999999999 -080910040000010911110000020911110000121204130000120306130000000000000000109993900999999999999919999190099999999299999909999999999999 -040808080800091010030400091004111100091212111100040113020600000000000000099999099999999999920999999900999099990311999910999999999999 -080801090900040810090400051111111100030612121200131302140400000000000000999999939090009999199909999901999999992910999190999999999999 -040608010400020909090900101011111200130311111200131304141200000000000000909990903091999919909999909029999999999990999909999999999999 -030808090900101011020900041012121200061314141400151617170500040117170400291999991999919909199999999901999099999019990190903999999909 -040808010900101111120904131111121400051516121400170218121404031818190600999990903999900009990909999999999911990199990199099909929909 -080601090900101011090900101011121304141402151600141718150400051704150300099990939999109999999999000919909911999909090999909099999929 -080805090900080803101004111111061200021314151600171718151904171701150400909999999099999090290999909919909190091909099199099390999999 -080309100400081111121304081111021300141515161300061716161800171704010500929099910999999099909909119999999090990999199091999030999999 -040808080804090909090100021010110600121010131300120414151500120316170500999900990999993910909999909199999990999909999009999099929009 -060801040900101011120900101004121200021314140300040515161600171717171600099999030999109999990990999199999119299909999009909099999999 -040804091004110812090913030812141413150812141405151612171717150218060104999000909990999999909999990299999999999099009019999103011999 -080909091004080811121204130514121215161714181815031914182001060221212121999009909099099009999909999999909199902199099909391991901999 -080909100311080412120411081312120211011415061604171718041616171718180504990929990999999990990900911991009319999099909009999990099999 -050809091010030809111204130814141212020614141504161717171801041920202020099099999992900099999919999199909099001999091991399990900999 -080801040909100811120909101111120413101415120516100602171717181919040403999999930990000999990099999919990919909919990919909900209999 -050408090610111213141410011516141410171717170218192021210418192021210318900990990090099999099930090919999999110909990990999999999992 -080403090906080210091111081204131111141405131516141417131804040117181804092909999991110999999910999919999999909909009009903999999090 -050809091004021112131401151616131414151616131706151819132020031804042020009909990091111319999999099999909999909099099909929009999999 -050809100104110812121313060812120413040814150216171714181818171703192020000999990300990909999999999999901990110991999099999919099299 -080409061010081109091203081314150516171818021919171818201919170121202004999999090099990990909209009900991999199991990999993199099199 -080910100311080410100411080612120211080413131414151617171418050117170404909929099999999099099990901999919999190019900199903999099909 -080104091011081213140415081216171715081216171715181202060504180419191903999009300909909099099901999999999990990910009999990199999992 -080910101010031102121213040414141513161614141513161617181513191920050106199992199909119999991990909099999909999999999900099003090999 -040809101010061111111103011213040214151616171818051616171819042020171919090999009990999991091239999990011090990999909999999999909099 -040806040509101111111109101004041212131314141212031315161701040218181818099999000099999099090999999909099999992909099991391019901999 -040808010409100808111209101311111214101502161214061718051214031918202114999990993099991999099009990909999911199109990999991909929900 -040308050909100408080909100611021204101314121215101316161615040117180415929090999990999999910909199991090919999999990099003099999009 -080403090909080406101005081112101313081404021313151516161718040116161704092999991990999999099090999909199999090001999199003999099909 -080808080109101010110909120413141503120513130616171818021919041818201919999999990399901999910990999999102999990091910991909999999009 -050808010309100808111209101313141209151316161202170616161804171704041904099929993990909999919999019099991999010999009099999090999900 -040809091005080809110403121212110613141515111613171515110213181801192004999000999999090909999299999099909099199999190919109309999900 -080808010909051011111209131011111415161017040415181017191902040417190306999999093990091999991009991090099999900999919999109999090929 -040808090306101108021212011113131212141113151617141118181805140419192021991290999900919999919939999999990919009900990999990099099900 -040808080109021010101009111212131409111215160609171815150405031904202020999990909391999019099999900990099999091099909990920909990999 -080401091004080809091112131414140412150616021712181816191712181805041703999009039099199001990999999000199999190990999999999909990992 -040809100605031111101212131111101212130414141515130204161701041819191919009999909009999929999999909900009999999909091991391919901999 -040104040808091011110808121011130614121015161714120218191920120503191920999990300999999909909090909999999100009999991119090999999299 -040308080809101112121212131304141515021616161615061718191901202020191905999900299900999991999099009199999199909999190099399099999090 -080609011010080809111010021204131313141415161617141418160519200321212104099999993999110919909990999109900909999909909999019099029999 -040804060905101010101112011313131312141516030404141718181919141717021919009909090099999090999939990919999092999119009999999919999109 -060208090110111112121310141512121610031504161610171518192005171704212121911990191399991010999999990290999999999990000909999090999999 -040809030404100808041112100213131415101616161617181818181717060105191919992990919009909991990010909999990999991099999990903090999999 -040308080904101008111111101012121212020506131415161718191415161601041404999000299999099999090999999199099090001999999109991309099999 -060408090105101104091213041402091513141416151513031717181813041717191919900990999300909090991901199999199990992909999999099990909999 -040803060909080805100909020411111111121314151504161616161717181801191717929090999999909919909099999100990909991090999999990309999909 -080109090904081011060212081013131412081513131414041617181803051904181804999909319190109099991990999999999099990099929009990999900990 -080809090909081005111201061013131204141513131216031702181204191919202020909999999099901399919999999009990099909091999019029109999999 -080808080909061010110405121212131414150416171401030402041818191919191818999090990999900999099099119091999099039910099999920199999999 -040808080104090910101111090412121111031312120214151616161617151518060504099999990309090999999990999999910219199999009999999000090999 -040808010604090210101111090912101111131405151617031418181917041418180417099999113001999999099999909190099999002999099990999990900999 -080109040403081011121213141015121216141004170216141005181919202020061919990999309020119909999190999990199999119990909999909009999999 -080910110112131410111212130406111516130502111716181919202121031919042121090990099399091990990999090999909901999919091990929909999999 -040808091004110808121303140615161604141515021617141819202017140119202005990000999990991209919909999999190999999091990199093999999190 -080909090904101003041111101006121113021414151613171414181913172005011904099990999909299999909999990190099191009991990990990939990990 -030808090905100808090911101002121314040404151314161715151314061718040104999992999909909099999091119999999999090009990099009093099099 -080509091004111109091010111213041403151516171718151516190618040116200218099900999999999999090909999900002999999990999109903990999111 -060108080905101108080909121113140415161117181815190220181804032020212121999000399991099919999990009190999990901999991199099909929999 -080409101111080609101104080309021205081314141516011314141718041919191904909999999999019099910992909999190019909999093990090999009999 -080808090104101011091212051313091212141315021617061515181804192004181803999999099309000999999999099099910090199991909999900099909992 -080803090910080811111010020611111205131313131415041616171818192004010418929999990999999910990999909199090999009091999990900030909999 -080808080902011010110912131010110414151617111819201617212103051604212106999119199913909999999109990099991009099999020999909999990990 -080109090904081011121213081406121213141415051617181802161604181819042003999999390900009091999990999999090919990919909919999991990092 -080909010410080909111210081314021510131316170518191904171720191921210306999909993999901190099909911990190999909009909999999992090999 -040601080804090909081010111212041010110213131303111415151604110415171805999900039099909919099999099999999119929099999090099909909900 -080808090904040410111101121212121113140215150413140515161713140306180413990909999099009309919999990919009199999099999990099009929990 -080808080309101004111111120504060204121313141415121313141416120401171616999929009919999909991999999900010999999999900919990309999909 -080404090909081010101112081313131314080615021414161617051819160320040119990999099099999099090009999999999091199910919199192093999099 -080910101103080912051106081314021115081316170418191320202121040120202121999929909999009999099099919990190099999901000199903999999909 -080808030909021010101011041205131111041414131516061414131704181801131904992991999901999991999909999910909090909999009990900399999900 -030408090106100808111111121213141515120213161515171713180419171705202119990992090309999919991999119999999110999090909999999900999009 -080209050410081109121213081109121201031415151616141415171616040418190604119909990909999099999999193209009909999999999990909009090909 -080801090909080810111106120413111415161718050415191920200215190321212121999999930909909909199909900091999009999910099091999991992999 -080808080905101111090912131111021414131515061414131516041703130118192004999990999900909999999099119919099999999999190099293009999000 -030408080909101112131415161605171718161606171718021920202018191901040418909992909909090010909999099999999999991909099199019309999990 -080808030909020410110909120413041406121513131404121516050417120118181818992991999990900919009990990999999909099990901099093099099999 -020808040105090808101010091106121314091111151617031818041919202020201919199991990309919999090999900999090990902090099999990999999999 -050408090310111208091310121208090214151608171714151504171714041819200106999920099999999109991999991909099900999999999999100003090099 -080809051010030802111010121212041304061414141504161617181920161601181820919999910992909999190999990919009999990919009009099399999990 -080808080910111212121210011314141515161717041515051718020403061904202020999000999990999990990939999910999099990910999910990919200999 -080804090404080810101010011111041212131102141515161718140515191919140306990099990909999990000939999999909091990119999190909999099929 -080809090104080809091011121314151010040602151617181819151605031919041604909999999309990009999990919000900991999919909099999999929090 -040508080904100208081103121304141414121516161717121515181919120120061919999000099999191201999910999999099909099990991990993099999099 -050808080109101011111209101011110413140402151613171819152013171703210613999990090399991099990099999091999991900009099099999910999299 -080808080409041010110609120310131409150516161704150216161818041919011818999099909990990999909929090190909909009999091999901139999999 -050808090903101004090204101004111213141516111217181818111919062001111919990920999999901999991099999090990009109909909919990399909999 -080909101111080604121111081313131314081515150404161617021803160119052020099099990999909990909999990909990999090191999091993091299099 -080809040105040810111112131313131412151602171712181616171703192006212121900999909309909009991999919091999991990999999999200909900999 -050809100104111112121212111113130214151604041718151619191720150619191703900990090309999999199999911909901099099909919990990999299999 -030404080809101010080809110402121314111106121516041705121818191919120118990992099999999090190999190999990990909099099991900093999099 -040103080800091004080800111112130200141412151500141612171500051612060400992990399990909991991991119099099999999999999009999900909999 -060108090900101008090500101008111200131414020400131515160300130415171804990990399999199999990999109099199990099091999999990912999910 -030809060400101109021200101313141200011315041200161617171200160417170500299999190099119999919909199999999390999009999090999999990909 -050808030600020909101000110412101300110412121300111415161300110401041300992990199091999919999909999999099999999009991100990309999999 -040401060400080808080900101011110900120211130900041403130900141415130500999990030099990919999990999019999990990199999999999299991909 -060808010400090910101000090911111100121314051500161617170200040317171804099999903099099999991999999990019009990999199999909991992910 -040808080300090610111204131411111204151516161200011716160200171718190500999990909290999009099909990900999919999199193991999099999009 -080808010600040909090900051011111200131411121200131504040200130316161700999999093090999990991909909999999009999099199090999991992919 -080808090600011011121304141411020400141411151504161617151500160518180300990099119993900090990999199999199999909009999999990092999999 -040801091000111212091000041212091000031302141400041515160500171717170600099099039990919909999999999999199291999119999900909099999909 -080809011004020909111000121314111000151303110600151316110400151305170400999901193999919919999911909092999999099999999900999009999909 -080803050600080209101100121212131400151513131400151516171400040401170400929999990091009991990999909991999999999919999009900390999999 -080808030900021010050900111210130900141516130904041616131700181801060400992991999999999919909919909910999099900199099909990300999999 -040401080800091010100800090911120400131402121500161417170500061417170300999990030999999991900991999091999909090919099999909999999929 -040801090400101111091200101113091204141502161200171518181200051503180600099999039099910999999999190091999001990991999999909290999999 -040809101004111109120100111109131300141409151300140516020600031717180400090909099999013999999999099909999991999991099019999109929909 -040803090900101112090400021312141400151312061400150512160100151717170400929990199091909919999919099099999919999090999913999909999909 -080909010400020610101000111213030400141413130500141415150400161615150400199991913090999919990911299099999999099999999090909999999909 -060508090900101108030900121213141500121213020400161617181800160104181804999990099990092909991999919999199911091999999009993099999990 -080809090300101109091204011313141200151313141600171818140200040518040600999990999290999090909939999999919091990099199991900990999099 -080801090904101112090900101312141404101504141400161616020500031718190600999900939990019999919990990909999909999991999910991099929009 -080109090400081011090400081211131300081211131300140206040500141516170300999099399991000999999909099999999999991990091099991999991129 -040108080800091010110400121010020500121304141500061616141500041616140300999990309090919999919909909900199999090099999999999999909929 -030808090400100508091100121302091100141415091100141416160600040116160400299099999990999909199909999901999919099990999090903999999909 -080809090400010810101000111213060500111214020400111215151600041215030400909999999093099991900901999991999991099991999990999990909299 -050108080600091008111100090404110400091213021400091513041400041513031400999090399990119999099999909909199091099999990990909999999299 -040809010400050810101000111111111200131415021204161717181800061717031800009999903099999909190999999999199001900910999999909999999299 -040809010400050810101000111111111200131415021204161717181800061717031800009999909099999909090999999999099000900900999999909999999099 -080808090900011011090900041211110600051304021404151516171400151818031400999999099993109990999909999909109090109990999009999099999929 -080903101000080905101000021112131404150616171404181616171400190401171400929999999999999901009919990190099099901999991909909399909909 -080801050900080810100900111210100900041204131300141502130400160306171700999099939999099909999990909099199999999909991119919000929999 -030805090600100808110400041202111300041212111300141515111600041515011600990092990991990999199901909999999999990919990910999939909999 -080806040900030810110900120213140400050413140100151513161600151513161600999992900999900991900901999099999999399091999919999999990999 -080808010900050210090900111112130400111104141400151515141400040316160600999999113990919991099999099990009999999199999999902900999999 -080904040300080910101104050910101200011314021500161717171700161818180600999999900290099099991909999999019391199119990999999900999999 -080609040300101112131300141102131300141115040500161515171700181801171704090990909290909999999991199999999990990199090909990399999990 -080910101000110212061300031412051500141412041500161612171504161601181804109991199099990921999999099999999990999199999100099309999990 -040501080800091010110800041010111100061202041300141415161300141417170300999990039990999909990999099919999010999019999900999199999929 -080809011000080811101004121212130600040214131500161717130500040317181800909999903999919099199999009991999019099199090999909909992999 -050108060400090808101100121212041300140215151300141616151300140304171300999990390090900999100999999991999119999099999999999909929099 -080109050400081010111200131010041200130614151200130216151500130416170300990999309091900919999999099990999090999999991199999999990129 -030404080800090910110600120902111300121214111500161616161704181818010500999992000999919999190991999990909909099991999990099030999999 -080801040900081010111100121310111104141315060500040216171700031818171700999099939099909901999909990999909000990199999109999199929999 -080803090900040810090900110510120200131410120600041515120400161601120400992999999999099909991909919099999009090909999910990399999909 -080809060300081010111200131302141504131316160400051716160400171701181800909999900299990909991991110999999919099999999099909300999999 -060804010400090910111100090910111100120210051300141515161300170316160400009999093099019999999999999999009119991099999990919999929909 -030808090400101111090900121314140400050214140600151515151600040401161600999992099099999919009919909919999919090991999990900399999999 -080809011000080809101000111209131400110604131504111617021800031616040500999999993999909900991990919909909990909991099919999190929099 -020809090400101109090100101106121200100304121200101314140400131304140500119091999999093999909999099999999290999999090099999099999909 -080809031000080809091104061213021404121213151600051717181900041717011900999299999199091099919909910999919900999990190901999939909999 -080109100300080809110400061202130500041212140400151516161600151517171700999299391999990991019909109991999090099009999999999999990999 -060804010900100808090900100411111100121202040500121213131400031513130400099999903999999999091990999091909900999919999990999990921999 -040106080800091011080400091212131300090512131300140215030400161617171700999990309991000990999999999999999090991999991199990120999999 -040603080800090910040800090910100200011112130400041412051500161616161500992990099999999999901991919919009399999090990099990999999909 -080808090500041011110100121011111300040214141300041514141600171717030600990090909999193999999909999019999909099199990990991990999299 -080808080400040409090100101111091200051111061300141415151300031602041300999099990999993900999909109999909099099919999999921199991909 -080809090900081010110600121005130200141414141504161718041500040118031500999999990999909909990909019909119999909109990909903999999929 -060808091000110802041200131314031200051516161200011716160400171718181804990090999099109901199999999911299099999199993990999909999990 -080909090904081011111104011212121204131415161600170215161605061819200300999909909990099090999939990910099199991999991999091999901129 -080401090400101010090904111212131400111205150200111606171700181803171700099990939099999009190999109999199990199999190909990999999299 -080809101100010812101100131312041100141312021500161703181800060405181804900999999993199990999999999999009091190099199929900999999090 -080808080400090510031100021010111100121313140400061313151504161601151500999090999990929909999919999199099190099990990999090399999999 -080906101000080805101000111112120400131312140100031502161604041718161600009999999999909909909990909999199999392110999199099999900099 -080301090400080410091100080212111100081314141400151617181804061605181800299999939099009999109919999911999919990009999909009099999999 -080906101100080912131304080514131300151602171704151819192004150119190300990099999090909099099990999090999111909999191099093992999999 -040108080800091010110600121010020500121213131400150313041400161616041700999990311990990999919999909999199909090999999290909990999909 -060108090900101008090904101011121304141402151300161604171300160518190300999990399999009099999991000901999991990901999999999919990029 -080809090300080209101000111205101004131214150400161217171804161201190600999299999999199901999999990090099999990900090190099309999909 -020808080800090310101000090904110100121212131300140405131500160406171500199991991999999992919999039999099990990099999900909909909099 -050809091004011109091004121213140400151617020600151818191900150318191900099909099993190099199990009901999091099991999919992999999999 -050808060300090808101100091202131404091215131400161718131904171701130400099999990299911999199999090991999919090199990190099390999999 -080909040300081009111200081302111100141414140100150506161704151818181904999999990290999990091991199919999999390000999990099990999900 -050808010400020908101000111213101000111406041500161417171804031417171800999990193091919919099990999909009909991999099990029999999999 -080609010400100909111100041213111100141513021604141517171800140317170500099990993090999990099909199999909901909991090999999990992999 -060804010400090810111100120805111100121213131400041513041400031616160200099999903090009909099999999999199999199990990099999991929919 -080509061004111109121004131309021000131314151000161617181900160117040300099900990999999009909999919990199911999199199900993902999999 -050809040600101011121200100304121200021313131300141415151500161617010400000999909099909992999999099199909999991909999199999030990999 -080805030600080809101100120213131404121516161600121515171704041801171700909999992099119991990919990990909999999909991909090399909999 -080109090900080810110400121313111104141313020500151606170300181818171904999999390099009901999999990099909991990991999099900992999910 -030508010904101112090900111113141500040213161500171818191504171818061500909902903991999999010999199019099919999900990999099909999999 -040809030400100811111200050211111300141515061300141416171300040116161300992990919090199901990999999919999999999910999190903999999909 -080803090400080804091000111212090200061212051300141414141300041501161600992999999099099909990909919999919999090099999991990309909999 -040808080800030906101100090905121100021313120400041313121400041515010400099999990992909999909999909190999199999999090910999030909999 -080806040900030802100900111212130900111414131500111414161700110404010500999992900999119999919999999990909099999991099900999030909999 -080109090200080809091004111106041000121314141004151614140300171818180500999199399199199090909990999909999099900099299099909999909909 -040808030900060804100900110212130400111114141500161614141500161601051700092999999999990901009919009990999999999199999190999390999909 -080809100600080209110500031209110400011314151500161614151500041614170400990099199999990921999991009991999310999099999999999999909009 -080808010900101011090900101012121304051415161304141406171304031819200200999999903999909999919990910999999000009999999900099991921119 -080604010904081010110900081010121300141502121300141405121300030416121300999909003990910999990999199999999911999109999999929999990099 -030809100600110809120500111109130400140215161704141818191904141801191900999092990999090999909990999919009911009991999919099399909999 -060809100500111213131400111213131404111502161604011718161604191919200300009099900999999999999991990911909091909199993099099019999929 -080803090900100411090900020411121300140611151504161717181800051717011800929991999999099919990909909199099090901909991919999939909999 -080309100400080811111200040213041200141413041200141415161600050106161600290099909999099991999900909919999999999990099009903999999099 -050809011000040809111000060811111000041212131400151216160200040316160400009999993990900999999909999990199099199999190991909999992909 -080609090300080209091000081112121000131312141004011516161704051816160400999299099991199999999919999919999990009109993090090990909999 -040809010400101111121300101114141400100605151500101617021504031618181800009999903099901999991909999909919999999901999119099909929999 -060809090300040209091000111204051000131414151600171414151600171701150400099299099999190901909990999019999090990999999990999399999909 -040401080800090909041000111112121200020404131300141405131300141403150600999990039099909991090999999190099999991099999099999900992999 -080109101000081109121000080413040600080413021400150413051600151513031600990999399990109999100909999999999091190990199099999999999929 -080910100300110909061200131414041200011414041200151515150200051617170400099990909299909909999909099999999390999199199991900990990999 -080909021000030911121000131311121004131311141400151617140500060401181904191992991999999999999990100999999999999919990009900300999900 -040308080900101108080900121305140900020614140400151516160100171716160400999990299991099919999900909199999099091909999193999999990909 -080309101004080811101004120213041400151515161400171717181900060118180500929909919999909090199911999199099990099199999990903090999999 -040108080400090908040400090910101000041111120200131311120600131305120300999090399999099999900991999090919999199099099999999099999929 -080309100400110909101200110413101200021415161600061717161600051717010400299091999999999999099999909100909119990919999919999930909999 -050809090300101009021104101012111100061314141500161718191504202020011504099299099999919099919999199901999999990091990900090039999990 -040808080400010910110200120910111300050914111300150916111304151517060300099999099093191999991909199090999999999909990999099092999099 -080808030400020909101104121213131300121214141500161714140400060118180500999990992091919019990990999999999909099199090999903099999909 -080801060904101011111200101011111304021414151600171819151600040503151600999009039099190999999999900109009999991999991199900299999999 -080910110400080312111300141412110500141404110100021515151600060417161600000999999099990992999999009990999999391991991990909099990999 -080909100600080909051104121213021100141215041100141617171100140104170300990099999999999000909999119991999090999019999199993092999999 -040604010400080809091000080809111000120213111000121214111000050304110400999990003099090999909999999991999119999999999909902090999999 -040401080800091011080800120211131300141511131604171515181600030605181600999990039990909990999919099119999919001999999909920099999999 -080910110400080912121300080912051304080214151300160617181800190317011804990099909999999999999990900909999111191099199909919939929990 -060808010500090808101100041204131400021515161404171716161400031718181800999990993090910991009909909919999190901999999999999990929999 -080801090904100811090900121313130200061414141504161703151504051818192000999909939990109901999999919009919999909099990929009990999009 -040809090900041011111100030512131300140612151300141612151500170212010400009999099090999999990990999299999901999999099199911930919999 -040503080900101104080900121111080900131314021500011314060400041616161600992990099999999909099999999009109991099990093999991199909999 -030808080800040904020600040909101000111213101000141415161600171717010500299999991990990999019999099099999000990901999999999030999999 -060801090400100811110400040811121300021405121500161617171500161603171500099099930990190909999999009910909199991999999199999299999999 -080909090900080810101000011111020600121111131304141504131304161718050300999999099999099990999939109999199099900099999099009992900099 -040503080900101011020900041011120900131314141500131314141500060116040400992190099999901999919909999909109919999999999999903090999099 -040808090300100808061100101002121204051314121200151616161600151717010400991290999999990999190990190999999009999909190999999030999999 -080808090400031002110400051004110400121006111300141015111300140116161600999092910999190999999900999999909099990909999090993009999999 -080106090400081010111204081010051200081314141404150216161600151718190300999099300991900099909999999990999199900199999099991999991129 -060808090300100208110500100404121300101415121604011515171700181818171700999290991991119999090999999909909199909190093909999099999999 -080808080900050210100900111112130600110414130100031516130400151504130400999099099990199991199999909991999901392909999090999099999909 -080106050400080909101000111109101000111112021300041412041300041516031300999999300090909991999999999999999911199090990999999099900929 -050808010600090808101100091212131404091515021604031517181900202020191904099999993090901999991999010999109991909990092909999099999990 -080109090400081010111200080410111100131304141500131306021500040503161500999999309090999999990909199099199909999991999091900999999219 -080409090900081011110100080411111204081313131200141516021200030605171200099999909990093999999990910999999999099999991111920909999099 -080808090300100211040600121211131404121211151400161617181800160105181804991299199991999919900999990999099999099100999009993999999090 -080804090600080810110300121213051404121213131500161617171804160119190200909099990999909990092999090999919999990909199199093191999919 -080806030400010804091000111213021000111414151000111414161600111717050400909999992093091991999901919991199991999999099999999900909999 -040408080600091008080300090205111100091212110400091212130100041414130400999090099999192991999999999910999990099999990913900999999909 -080910111200040313131200141515131204141616021700141618181800140501060400000090999999299999999909990990109990199999199999999300909999 -040808080900041011110900121302110300141415151500141416170400060105171700099099099990999990199911929199999999999900099099903099999999 -040108080400090909091000111212041000111212040500110406131400021513130300999090390999990919999999099999999099999990099990910099911929 -050808090400010808091000041112130200141112041500161612061500161604031500099999999093911999001990999099019099999999999009999099999929 -080809090300080809040400060402101000111112041300111114151300161601051300999299999999009999190999099001099919999999999100990309999999 -060804090900050804030900100811110200121213141500011216161600041717171700009999992999999909091999999000919999199901993199990999909999 -080109101104080909040500081212131400151212021400151617180300150406181800990009399090909991999999199999199099099991990909990092999999 -080809010600080809101104121309141500121204051500161617021500031618180400999999993099999009910900019990999999999990999111929909999909 -080808080900011004110600121212120500131314151504160214171500181903171704999099099093909991909999909190999990909190991999919999912990 -080904031000111102121300111414140400051515161600171515181800170106181804009290999199111991990999999019099999999999990909993999999090 -080808010400091010101000110605121300111402151504141416151500031616041700999999903090999900919999919990919911909999999909929990999909 -080805010900101011120900101013140904150616170900151816192004150316022004999990903999909999919990000099199099999991099199092919999190 -080509101004080909111204081314150100081617170400181602170300061619191900099909999099990099009900139991999919090999999199909192999999 -060809010500100809111100120809111100041309041400031502161700041515161700999990993099919909999900999909909099099919092909999199909999 -050803060400090810111100120810100200120804041300141414151500040401151500999990920099999909990999919999919009999090199919900399999999 -080803090900080810090600021110121200041314121204151617170100050418181800929999999999909919990911199999999000909091990993900909999999 -080801090900080810100900111110101200130214151600130404170600130305181804999999930999099999990999999909109111999000099999999909929090 -030808090400100808021100100412051100131312141100131315161600041706011600999092990991911999999990999999099990999990199009900939990999 -040508090600101112120300101112131304141115130200141115161700140115180400900090909999999999992909990990999999199999190111993999999009 -040804040600091010101000090902110300011212111100131212041400151516160500099999000099999999192999199909999391999999090909909090999999 -030808080904101011090900061211131300140211131304151617181800051920011804999902990999999991909999999019999090909199090919901139991990 -050801091000041112091000061314141004151502140400150316171700181818171700099999039990009999199900900999999911099909992909999999999099 -080909090300080206101000111212100400111212131400151616161600040104170500999299199990099991999999999999009990990199090999903009999909 -080809091000040811110400051211021300141516161300140416161300140601040300999099909090999990919909919901999009999099999999999302909999 -080809090900080810101000011112020400131314151504131314030500041617180600999999909999199991910939199901099999909999099929900999990009 -040805010900080810100900111110100900041202131400151613131400031704061400009999993999099990999999919099919911199199991999920999990909 -080904010500081010101000081111120400080613121200141404021500031617151500009999993090999999199999109900999999990901999999999919921199 -030808090500101010021100121213141500121213140400161713141804040613011800291999991099901999991990919999999999090999999000000939999999 -080808090300041010090500041002090400011112121300141415151600041415150600999299099990990999199909199919909399999009099090909999999909 -080309101000111209061300040214141500160514041500161717181504161717011500299991990091999991090991999099999999099019999910099939909999 -060108040900101011110900101011111200051302041200041415150400141415160300990990309999190999999999909001099999999019990990999999999129 -080903101000081111021200080513131400081513130400151516160600040401161700929999199099910999910999999909909999990991999099900390999909 -040108090400101008111100121313111100041313050200141415161700140616160300999090390999099991999909199099019999999909199091999999909929 -080809091000080802101004051112041304031415131300161717181900161717010600999999909999199091190909090911999291999901999990999930909999 -080909101000080309021100081213131100041413131100151414061100040501041600999999299099919999919900999999999999090919990909900390999909 -080808090300101009091104101002121300141516170500141816191904040116190600999999909299099099991991119199999900099099991909003990999999 -080805030900081010101100120413021100141413131500141416171500060104041500909299999199999909099990119099999999999919999100903009999999 -040804090900100802090300100811120500101313120400141315150400060115150400909990999299919999199999009901999999090999990090903999999909 -080109091000080809091000111212131000111404131304111505060400021617180300999099399999099910999999099900999999909090099099919999911129 -080806030900080802090900101112130500141115161704141118041900140118181904909299999999919909199991909099099090009900099099993999999990 -080808030400020910111200130914140400130914050600151515151600040104161600992991999091000999990999999999999990990109099999903909999099 -080903041000111212121200021313130400141415150100160515151704161818180600129091999099999919909919909991999909399999999090099900909999 -080109090400081009111200081011111300041014151300021005061300161717031304999099399999090999990909999990999000999900991999919999919290 -040801040600080809101000111213101000111415160200111415160500110417160300999990930099019999099900999909919990199999999990999099990929 -030408090900101108090904111108120600130208141500161616161704051818011700909992999991999099909999999919009190091990999990009039999999 -060809100400080809110100121209130500141404151500141416021504031718181800900090999999993990919999009999199999999909999111091909929999 -080809051000080809111100121314110300040215151504161617171700160401061800999099999099099909999901129919999019909991999099990390999909 -030809090400100806110500100804120400100813141400021313141400151501160400999092990999090999909999099999009999991099999909911309999909 -030608080804091011110100121311111404150216170500151516181800191916181804999902090999993910999919900911909910999990999099999999990990 -060808030904101011111200101011021300140515161600171515161600040118181804099209909199999999991999119091999900990999990999903909999990 -080803090904101111090900101112120200101304120400011415160600051718181800992909099999999999991909919999909099999001993119990090909999 -080804091000080809091000110512121200111113040600140313151600021713010400999999909999090990990999999990999999991290099910919930911999 -080805090900010810101004110212131400150616161700180316160400181819191904909999999093199099910911199109909999091999992999999090999990 -080808010600090910111204090910051300140210151300160415151700180304171700999999093099010099900999999999999110991999090999919099929999 -080109091000080809090600111112121204131114140400150205161700041818180300999099399099099991999999990999099109991990091090901999999929 -080910100300040410021100041212131100140612151100141616161600171717010500009290999999919990919999919099999990199091990999990930999999 -060504080800091011080800091212120300090213141400151617141804150401181800999990009999009990999999929919999100991999991190090399999999 -080905100300081104121204081314150200081414150400161616161700061801171700909299091999099090991999919909999999990901099999990309909999 -040408050300090208101100091208131300091414131300151414160100151506160400909990990299111991999999999919999099999990999913990099999909 -030808080600090910021104121314041500011616151500171718180400171718180500299999991099919009100900999991999390999990099099999999999909 -080609090400081009091100011213141100151513050300151513161600041702160400909099999990090990009939999919099999999999299999901999991109 -080909011000060911121004131311121004131415121600030402171800191919190500099990903999900099999999990909999900099091099919929190999999 -040108090900101108090904121314140500151515140400021616171800061616031800990990399999099001999910909199999999091999991900909999999299 -080304090904080410090600080211121200051314121200151516160100151718181800299909909999900990099919999910999010999019999993990999990999 -040808090900100806111104121314111100151314161600171314021800050114040300990990999999999000099909099099999919990991199919903992999099 -080804090600080810111100121314141400151502161604151718161604050119190300999099900999099990990909999090999911909909991999003092999999 -080808010400091011121300091011131304090211140600151511161704151819030500999999093099110999999909990919999999099190999900091990991299 -080409090904080810060500011112131400151616040200151717181800151703181800999909000099099990999931119990019099999999199919999299999999 -040308090500101008091100100208091200130408141200131514141600131706010400999990299099990999999911909999099999999019999090990030909999 -080808090904101011090300101213020600141414150400051617181800191901181804999909909299999999019900109991999990090199999109990399999990 -080808090900060410090100111212121200111304141400050315161704181818180200999990909999093999019999999900199099999991999291009191999919 -030809101100120409101100121302141100121504141100121616141700060116050400219999999999990990199999199909999999099009990910903900999999 -050808090900041011090100121314150400120214161600120614161600120317170400090999999999113901099999009919099199999099999999999099929909 -080909010500080809101100121314151500121304151504120206160400121717180300999999993099110991909900999990999999909190099909991999999129 -040401080800090909080800101111041200020511131200141406131500141403130400999990039999909919000999999199999090991999099099999990992999 -080902100300080911121304081415150600081617171700011819202004181805202004911999991299091091099999999919909099999109993009099999999090 -030808080800060409020500100411111204101313121200101313141500100116171500299999991999000909919909990991999999999990990909993099999009 -050809090300040209091004111213061000121214151000161717181800161717011804099299099999199001999990099099999990099109990919999939999990 -080109091004081112101004081306051400081502161604171718192000171718180300999909309991099099990900909999909111900901999991999992999999 -080909030400020506101100121313140100041313151500161617181500161617181804192991999090900919909919139099999990999090999099999999999990 -080903041000080911051200060913141204011515021600041515171700181818171700099099909099999999009909090909009990099999990909999099999999 -050108060900101008080900111112130900111104130400140204131500161703131500999090399999199999199991009999999909099199991099919999912909 -080304091000081111091004081111121200021305121200141516171700041806011700290999999999990099990999999109999990991090991119990939900999 -060108080800091011120400130502121200131414151604131414171600130304181800999990309990119900990999199991009999909990999999992009999999 -080109100400081111101000081112130400081415021600171415041600051406031600990999309090999999999991009901999991190990999999909999990929 -080804090400080805091000111111110400031202131300121214150100061414160400990999999099990909000999999991199919992901999993909909999909 -020808080300090506041000111112121000111112131004011415131300041617181800199291999990999919009999999999999990009109993099990099909099 -050809090400101109090100100212131300101404151500141406151500031617170400019099199990993991909990999910909999999999999909991900929999 -030408080800090909090500100602041100101212111100101213140100101504161600999992009099999999199990099991999990999999999113990009909999 -080804010400080809091000111109091204111302140500061516161600151503171700999999903099090999990999990909109901999919990199999990992999 -080910101004111212130100141212151605141417021804191920211804060321211800099900090999903909919999910999919991109910999199002999999999 -080910030500080910111204130910061200130904140200131516171804130119191900099999992099991099999900999999019909099099199111093099999999 -040308090900100411090900121314020500121314141500161616160100041717170600921990999999099909019999199999909099090991999993999909909909 -060104080800090910081100090912050200131314151500131316150300041717181804999990309999111999091999909090919999999909999992909099999090 -080809011000080409111000121209131400121206041400040515021400031616041400999999993999991900901990099999999909090999999011999109929999 -080104090900081010090500111010121200040613121200141402041500160304151500990999399090909999909909999001999999999910099199919099929999 -080808090500011010111100041012061100131314150200161617150400161604150300990099909993919999009909999990919909199099099099999099999929 -030808080200060910111104041213131100141413130100141405151604171718181800299199999190009090999909919999999909399990999900090990999999 -030809090600101004091100101002051200131313141400151616161400040401171700909992099099999999090991909991909999999190990999900309999999 -080808080900031004110900051212020900061212040900041314141400131304010400999999990992900991999909119999099099999999190099999030999999 -050808080800040903060200100904111100100912111100131314141400041504010400099999929199990909991999999990999990990091999099990030909999 -080808040904031004111200050213141400151515141400161617181800160617011800999002199099990991009990999019999991999991999009999939990999 -060808080800090910110100121212131404150204141400151605171700150304171700099999090999913999199999090919099109999090999099999999929099 -080306090400081011091200081314141200021516161200171816161204181804010500299999909099099990909990999109999999991099991190099030999999 -080801090904080810090904111213141404111515160200111517180600110517190300999909939999919090019900990999919099199991099099990919999929 -080804091000111202130300141215161604171215061604181815191900051801191900999190901299119909909999990099999019909990999009999399909999 -080301090900081011090904081213050400021414140600151616171804151616171700299999939999109091090999099119999199990090099999099990999999 -050801060900100808040900101112131400101115041400100216041400031616041400999090939999999991000999009990999090999199999190999999929909 -080809090900021010100300111213141500041212041500161617051500160118061504999990909991992919999910009999999090999109999909993099999090 -080909090300080204050400101011121200131313121200141516160600040116161700999299199990099991900991999991999990999199990099903990999909 -040803090500100811091200060811121200130211140400131511141400131617010400929990999090990999999909999919099999999199090919991130991999 -030408080900101111120900130611120904140215150100161615150400161605171800999992090999999919999999000109099199399199999199999900999009 -050808080800010910100400111111111200040213141400151513141400150313040600099999990993099991990999909991099019999199999999999900929999 -080910101000081111030600021111121300141414041300041516171300151501051304099999009099999999929919199199999990999199990100999399999900 -080304091000080504061100081213141400021213141400151216161700151216010400290099999090999999000999999199999190999999090190999930999999 -080809090904011011121200031010121200130614151600171702150500171704150400909909909993009999999999999201909999091919099199999099999909 -080109090900080810111204131310140400131310150600161702180300160405181800999999390999100099900990999999099999090919990919990092999999 -080104090400081010091100121010061304121415021600121417181800121405031800999999309099909909900999990919909011099991999909999099999929 -080809101000011111111004121313131400121504051604121718180600121902180300990999009993999091990999999919909009009199099999991199991929 -080808091004011112120500131111121404130415161600130615161600021718190300990009099093999999999919000900909999999999990999919999911129 -040808040900040808030900101102060900120513131400121515161600121701161600099099999999929901999901099991909099999991099919990399909999 -060809090904031010100200111112131404111104151600171818151500171818010500009909990992991999991999000990919999999099199909999930909999 -080910110300051213141404121202141400151516161600171717181804061901180400091290019999999099199999999901909999999091999919090399909909 -030808080800090410111200131314111200060215161200041716161200051717010400999992999099099919099999999910099099999109990990999130909999 -050408080804091011121204011314020600151515161600171718181600171718180300999900009990199091109939109990199999999090999999999992999999 -080808080400040909090100101111120400100213121200101313140400060305150400999090990999993999919999109919999919999990990990902009999909 -080801040904100811120900101314020900101315161700101306161800051303191804999909930990011999999990019990109999999909099999999919909290 -060809090904100802110400121213031400121213151600011713180500191913181804999900911990999990120999999999909999099090093109999999990990 -080808010900061010100900111111110900041213130900030502130400141516160400999990093999999999919999909099199909999019999990929199911909 -050809100300080811121204041302061400151616161604151517181800191901181800991290919999909090199901909919909999909919099099990399999999 -030808090500100808090600101002091100121213141500161718191904160104191904299099999999999999190999099901909991999091090119093999999090 -080909010500080909101100121212131400040213131400151617041404150318061400999999993099900909910999199919999999990109991909099099929099 -080506010400080809101100121309141400151309021600171709041600171704031600999999003099010900990999999099999991190990999999999099999929 -040805010900061010090900111010121200041313121200141515021600031517170400099999003990909999919909999099999990999999191911929909999909 -080910110600121314051500131314161504171802161500171919161504170104160300000090999990909999999990990909999111199999991999093092999999 -080309091000080809040200111111121300141415160500141404160100040617171700929199999199099999901999019990109909999999999993900009999999 -040106080400090910080400110912081300111414021300111515161300110415030500999090309999990999099900099919999991199999990991999920909999 -080808090400101010100100021111121300041111141300031516161704051816061700999099900999993919909919999099099999099190092999099999900099 -030508090900101011020900101212121204041313141504161617171700161618010600900992999999111999991999990999919999100901999999999030990999 -080809090904080810111200131313140100151616171705060218191904032021191904999909999099000999909999139919099099900190999199099199921990 -080809031000111209051000111209021000111209131004011414060400041415161700999299099999999999909999919999199011909199993909999990900009 -030808091004111212121204111102131404151613131400061717181400051717011400990002999099999099990991190999999099190099999901999939909999 -080909010600080909101100120413131300121414150200121404150500120404150300099999993099910999199909999999919990199999090909990999999029 -040106080800091011080800091205130400091414141400151502161600151504031600999990309990009991099999909919099999999199999119999099999929 -080910011104050910111100120613141500120216171500121816191504120316041500099900993999009999919990909990199111999999991990092909999999 -080309090600081010100200110412131404151612170500181812191904181801191900929099991999991909991909910099199091099099999009099399999999 -080305090600080810090904110212130100141516171700181516171700041519191904999999209099909019099911939091199091990999999999909990999990 -040804090900100804110900100812120100100812120500130206141400041515150300990990999999900999909901939999999999099100990999901999999929 -080808010900040410090900060511121200131111121200040204141400041515150300999990003999999999019990199099999099990190999099991999909929 -080808010900100411120900101314151604170205061600181819191600180319191604999999903999010999109901900919099109991999999990999999929990 -080804090500030810090600111111111204041302141200151316171200151518011200999099909992900991909999990991999991190999999001999039990999 -080109090500081009111100081212111104130212140400131516171800130316040600999099399991009999999919990919099199099990990090999990929099 -080104090900081011090900101011121200050211120400131415150400160315150600999999309990909999999991099099999919099199991090919999929909 -080104090900081011090600121314151500121302151500121316170400120405170300999999309991099919900911999991999991999901999990999099909929 -060308090904100502090900101112121304101415161300171818191900040118191900921900999999919990199999990901099019099199990999903999999099 -040601080800091011080800121304141500121602141700121605171700121603181804999990039990019990010909999999909911999909999999999909992990 -080809101004080804061000011112130300141414141500161702151500160405181800900909999999099990909930099919929999991999991119990009999999 -030809010600101009111204021309140500151516171704151518181700191918180400299999193099990019910911199990099909909999999099990999999909 -080806030400080809101100011209131400151212160200151717161804151705160400909999992099099990910939919999919091199909099999099090999999 -030804090900100804090900100802110400101212131300101414131300061501050400290999999999909999909991999991009991999999990919990300909999 -080109050600080909101100121213131304121204141400150216141400171803191904999999390091900919990999990999909999999109991099919909912990 -080809040600010810101104121313131300141516021704141816051900140316191900900999999093199099190909999099199911009190099999992999999999 -040809011000110612101004111113141404151515141400051617181800031919190200909990003999999099091999990090999999999909190909990991929919 -060808030900101108121304101414121500101614120200171818181804040119190500099299999199099090991999999999919001190919999999003090999999 -060308080804091010111204131010111200021414111200151416171204151518010500999900299099999009999919999199999199099999999110099030990999 -080409040300081010111200131010140200131515161600131717161604130117050600909999900299991909919909919999919999999099990919093900999999 -050108080800091010101000110412131304040214131300151514161700150306181700999990309990999909199909090091999919999199099909999909929099 -040308080900100611120200101111131300101415131304101617180100051619191904929190999199091999919999099999999009909901999003999099909990 -050408030900100408111100121208131400121215150200061615171700181801171704909290999199099909991999099999019909990991199099990399999990 -080609010400081010111100081010111100041202130500041415131300161617170300909999903099919999999909999019099919099019990999990199999929 -080910011100051210101100041212131404151515161600061702161600181818030400099990093999999999910909990990109991990919999199991990999299 -080809090500010809091004111213141000111202151600111717171804110419060300999999999093199090919909199991909991199099199999099092990099 -080808080300090204101000091112101000131114151500131116151500040405010600999299199999999991099999999090909999999909990119900030999999 -080910110400061210130100141210131304021205151600171218181600171703041600000090999999913999999911990199009990991990999999999909992999 -080909051000080909021000030411041000041213131300041415161600061515011600999999990991911929999990909990919009999901990999990939909999 -050408080800090910100300110910101200110413041400111313021500040116160600909990990999999999992909999990919990999099190991903110999999 -040108090900101108090900120608131300121408041300040215160500031515171700999990399990109909909999999909999910999199090109999909929999 -080403090904081011120900131304140200131315160600171715181800171701180500992909099990009999901990919999199901999999099009999399999909 -060809100300110212121304141515131304141615171800141619202000051601202004911290199999099001999999990999909000099919999909909399999990 -080304040900080510100900081104100900021111120900131414141400130604010400299099909999999990999999999190099199990910099999990030999999 -030808080200090510101100120410101100131415151104161717151800041706011800299199999190999909999999909009999009109099990990909939990999 -080804090900080310090900111112120200051313131300141414151600041701060400990999999999299909190999919009919999999910099999990300909999 -040108080500091008081100121314151104120406151500120216161600121717180300999090399990090991009919990990999099999999991199999902999099 -080109101004081111121000080411120500081314150600161602040300161617171700990909309990909999999909909991999090099019999909999192999999 -080809090300080809021000111104121000011314150400051316161704061316161800999299999999910909919999999900199311999999090099099990909909 -060809030400041002111200130514111200131314111500161614171500160414011500012999199090199999199990999999909999099099999010999939990999 -040808010900100808110900120413130900141402131500161616151500030405060400099999993990901909999909919991999909999910999999920000999999 -080104090900080810111100121213130300121213131400151602171700060504170400999999300999199909109999999999929999990019199919900099999909 -080808090600101010090100111212090500021314090400151616030400171818181804999099099999903999999919109199999119090919999929909990909990 -050809101000060909111100120213110100121413151504121613151500030417180400009999990990919991999910939909099999909099999999920099999009 -080809100600111212130100111212141404110415140200111615031704051615181900909099900999913999999909190990999909199999199099009921999919 -080905101000081112130100141404151600141706021604181819191600181819031604090999090999003990919990919909999999109001999999999999999290 -080401091004081111091000121111091004131402151000161718150600051818150300999909039990999999999909000019999911990099999090909999999929 -030809101000110212131000111105131404151515161404171718191404171701061400219999919999199991990999990910099990009019999909099309999999 -080809090900101011041204101013121204051414140100021506161600171819031600999999009999099099909990090999099999390190991099919999911299 -030809090400100404021100101213131100101413131100151616161600150501060400219099991999909990919990999999999009099919990999990300999999 -080809101000080811101004011211130500040602141400151515161400041703181800990999909999199091909939909901099999990910999999901909992999 -080805091004080809090300041111021200131111061200141415161204140115171800999109909299999990919999199099099099999919999109093900999909 -080809100300010809101104121302100600141516100400141405171700181818171704909999999293991091999909109011999919999900099999909999999990 -040809011006111109121213111409121213151509041613151717170402051803191920009909093099909190999999999909909999099999019999990909109291 -020808010905100808111111101213041414151212161414031704161804061920161818199901993099919999099099099190999999092099909990990099909099 -030809090905101112021304140615161700181515171700181919202104181919012104299909199090111009991999099009099999999901999990099939999990 -080309101004081102121000061314121200151515150400011617170500181817170400290909909991199999199991999019099999099199993090990999999909 -060804010900101112090904101313131400101516171404100216161400051819190300009999093999919090190909999919099990909199999999991999901929 -020809010500100409091100121313141504161313141500031717141500061817191904119991993090990919009999900199999999992999999909990990909990 -040108080800090910101100120913061400121515150400121602170300120504171700999990399099090909990990099919909999999919999019990092999999 -030808080800090909100400020410101100121206111100131414141400050401150400299999199999990919099999999109999990990190999999900309999909 -030508080600090908101000110902120400111314151504111617151500110401181800999092099999909999099991009991999019909199999109999390909999 -080809100300010811021200041111131400151516131700151516131800050416061804991999911293199999911909919990909909999999099999900999999090 -080409100500080909110300081213141400061516141404171515020400170118181800900099999999992999019900999990999099909901990990993119999999 -040108080904101108080200121213141504161617181500161617181500051906180300999100399190199990901999090090099999999999999999900992990999 -080409040300101112131300101102131404061115141400161615170100161615180500090990909299999999099909190991999009999990999993999919990109 -020809101000110612101000110413130100111414151604031414151700051819151704111991909999099999919990939999099990002999099999999099900990 -030808080500090910021100121313131100121214151104161414171100180601041904299999991099009999919999999991999900909990990990909390909900 -030808090900040808021000111213131004141413131000151617171804190617010500299999999099919909919900990999999909099991990090009930909999 -080809091004010809091000111213040200140515161700181815191700181806031704999909999993191990091909999000019999090999999991999929990990 -040805010600040909090900101011121200101314021500161614041500160414031500099999003090999999919990099999919091199090999999990999999299 -040801090900101010111204131313131200141415151200140516021204170618190300099999030999910099919999999099199999999991999019009199909129 -080808010400050409101000040909101000111111121200041314020600131315160300999990903099009999999909999999919990990091999910999199999129 -080808020600030909101000040904111000011213111400151516171400151504051400991092991999919999999900999919999300999099999000999099999909 -080309090904101112131300141104131300021115161600041717171700181806010500299901909999909919999999099199099111999991990999990030999999 -080808090400101002111104101213111100031413150100051604151500061718181800991099911999199099999990099209199999399099990909999909900999 -080802090900080810040900110610050300121314150400121616151700120116150400991999919999909909992999999001099019999199099990993999999009 -080904101004080911110300080912021304140915161700141418181900060118180500990909990990999999092999190991119999199019099199903990999999 -080801090500080810090900040211120600131411121500041611171504031817171500999999939099919900910991199919999099090199999909091999929999 -080803090400080805091000111213140200011515151604171706181600171704181600992999999099901909991901119919999399909000999990999999990999 -050809100200011112121304141412121504141617181504191917180300191917200600011199109193999090991999990909099909909099299999999999999009 -040809090900011011110600051211110200131314151500161314151500160414030400009999099993190990999909919900919999990999999999990920999999 -030808010600040209101100121313131400121516160400121516160400121717170500299999913099190901910909999990909909999999999990990999999909 -080808010900051011110904101011110900121206020900131415161704040318191900999999093999091009999999999099999990199991990010009190992999 -080304010900080610110900080210100900041213040900141414141500051616161500299999903999091999999911919990999009099999099990900999999999 -080409101000080909100300111106020400111105121300141515151600040117171700909999999299999900919990999999109909999091090990903099999999 -080808090300051011120600131302141500041316141504171818141500171801140400999299091990010999199991999999999010009919999999999399909909 -050809101000041111101000121213020400121206141500161717141804160117140300000999999999909909099991109990199999190199199999093992999999 -080801090904100811090900100611121300100411050400021415150300161717171700999909939991109990900999999999009099991999991192909999909999 -080805030900060810111200131415021604171717161604181818180100191919202004999299909199091909019900910990999999909901999993999009999990 -080309090400100511091204130211121200141414151604171818191600061818011600299991999099999010909919099919099999909910990910909939999999 -080804050300090910101000090402110400121314151500161616161500060117171700999990900299999999199999199009109991990019999999903990999999 -040106080800090910100800090910100400111202131400111204141400151617050300999990300999099999990999999199999111999901999999909992900099 -040805040600091003111200090211111300091414141300151516171704151501171700009999090099929990990911999999999199099919999009099399999999 -030809091000061111021004051111121300141516131300171818181800171704010400219999991990999099910999199091999009990919099999999030999999 -040809101000111112100100111113131400150213161400150504160600150304160400009999909999113999909999909919999190999999990900999999929009 -080309090600081011091200130211141200131511161204131711161600130404010500299099999991999991909991909999999909009099990919990030999999 -080803091000080205111204061314141204151616171200151616181800041901181800929099990091909001999999990919099990099999090999990399909999 -080109090900080810050400111110120400111113141500040602160300171717161600999999300099099991999999099999009919090019999992999199999199 -080409011000080809111004121209131004141509051000161702181900161717030600999999093999019009909999900999999009090919999100999990999299 -080901101004081112101000081105021300141515160600041517161604181818190300099909039999019999091999919099109999990909999909099019999929 -080809090500010809091004111111111200131414151500061617020400031819191904999999999093199099190999999091909991990991099119991099929990 -080809090904011011121300101014050200151516061704151518181700192018031704909909099993111999001999999900919990909999999999909999900920 -080808080400020903051000061111121000131111141400011515141400041516161604999091929991999991909999999099009099999199993909999999900990 -080808080400020903051000061111121000131111141400011515141400041516161604999091929990999991909999999099009099999199990909999999900990 -030804090900100811090900100611110100121313131300021415150500040416151700999992909999099999909990939199199999991919991199909090990909 -050809090300100209091104101204131104101415161100171718191900061818011900099299099999199091999999090919099010999919099019999939909999 -080808030900021010110900121010131304051415131300161615151700061801041904992991999999990919909919990919999019999990999090990390909900 -040803090900041010110900121205130200041214140400151514140600151501161600092999099999909909901999019099109909999099999990999309999999 -080409100400080809101100121314100100121214060300151614171700050402171700099999999099090990999999139909999900999999290099900199999199 -080809090400040509090100101111121300141411120600151515121600030402120400909099999999093909919909009099909999999999999990929190990199 -080401090904081011090900081206131300081402150400161717151800160517150300099909939999109991909999999910999011090909999991999992909999 -030808010904100408090900111202131300141415161700141405041700061818181700999902993999909910991911199909909990099909999990990999909999 -030806090904100811090900100511111204101314151200021617181200191901201204999902909990999999990999990909099919091119991909990309999900 -080809010400080810101004041112121300031414121300051414021300061516161300909999909099999099991900919999999299999990990919999909900999 -050108080800090909101000041112020400111113130600140313130400141404151600999990311999999990910999199091999999090999999299999900999009 -080909011004080811111000041212111000051212131400151617130200040318130600099909903999991999099909999999919099999099190911909190992999 -080109091000080809051104041213131100141513131104031602170600181619191900999099399099109090199999999009999099909910999190929909919999 -080909101004080809101000111213021404151216171404181219061400050120200300999909999999999909009999910090199011900909999909903092999999 -080806090500080810090904111210031304141515160200171515161600040118181800909999999099099090921909990099919999190999990919903099999999 -040108080900101108080900121206050400121202131300141516130400031517171700999990399991090919090999999999099919999919991199929000999999 -050808010400090808101100031202131300141204151600141206161600141204171700099999993091991920191999199999009090999999999909999909990999 -040408090500101008080100111112121200111104130200140415151500141403060400900090999999093999199990999999199909190099199999999200999999 -080509101000081109100100080612121300140212121300141503041300140404161300099999999990003990919999909999999119999999991290999999909009 -040808080800040909100400111212100100050412131300141406131300031402150400099999990099909909999909939999199900990909999999929910991199 -080809030600101109121200130205121200131314150400161617180400161601181804992990999099199901999999999910099999091900999100999399999990 -080809091000031111111000121204131000121204141500060204160100171717170500909999990999990929999999099999009990099190990093991919999909 -080808010900101112130900141516161704041516161704031502061700181519190500999999003990900909919999900099999999909910999199929090919999 -080603090904101111090900121113140200151313141600171819141604040119051600092900999999999909991990999099919999990909990111003999999099 -080801090500020810111204131415111200131603111200131617181900130604191904999091930999100019999911999992999999999990990090990099999990 -040608080500090910111200130902141500131616141500131617141500040104031500999090090999000999990911199999999999999999991099903029999999 -040308080900101111080900051112020400131414141400151515151600061717010400929990999990990999919990999090109999990919099999909030999999 -080309101000080909111000080212110400041314110500011515160400061515161700299999990999999990999911909991999009099910993999999990909009 -030802040500080809101004061112131000041414131500161414171500181818011500919992910099999099109900199999999990090991990999990939999999 -080809090300101009091104051004121300011414121500041414120200161717180600999990999299099099991909999900919399999999199911900909909909 -050808060900100808040900111111120900040213141400151516171700150304011700999090999990999990909999109991199019999191999909999039929999 -080808060904101103120900131405150904021616170900181616191900181801191904999909090991290919909990990109099999991990999909991399999990 -060808080800090310050400091010111200130214141500131617181804130401181800099999909992999999900919909919909919099991990019090399999999 -060104080300091010110500121302141500121313161600121717180400121717181804990290391990999901910999109991999990999099999900999999999990 -080409091000080504090600110312121200111104131400151616171400021616011400909099999090909909909999999929099999091900999919919939919999 -040803090900100806111100120813140200150813160500171713180400171701181804992990999199999909091999119099009999990090999090999399999990 -040308091004110808090400110212090500131415090600131416171800131401181800929000999099999991999991909091999991099991999010999399909999 -040108090900101111020600100512121200100413141500101616170300041616171700991990311990990999919990999990919900999990290999909999999999 -080809040500030809101104121314141400121515160100121515170400021817170600999999990099990020009909999999099991399990999990911999919909 -080406010400090909091000051112131404151502131400151616131400171716180300099990903099990999100991990019999919999919999999990999999129 -040808090500100808110100021213110600141515111604171515181600170319191904990090999990913991099919999190909999901999999900999909929990 -080309101000081102101000111112131300041414150500011404160600171717171804921999999990919999199991999919099099099990993999990000999900 -080803090900080806040904101112130200101014130500011516161600041717171700992999990999999090091990919990909911999199993999990099909999 -080808090600101002111100101012041100051313140300151316140400040116141700990099099999919999199991909919929099999999990009903990999909 -080910100300080211111200081304051200081313141200011516160400061716160400919299199991099999999990999999099190099199993990990999900909 -080306091000080511091000121304141000021504141000161717140100161617140400299999909999900910999990999109999909091099991913999999999909 -080803090400080809091000110612050200131412151500131612171700130112040400992999999099991909991999099009919901999999990109993990999099 -080509090300080209101100081213101100081415100600041515101604171718010400999299099999190991999991199999999000099999990990099030990999 -020809010400100809091100100805041100100806121100030404131400041515141400199991993099190999909990999999999990092090099909999999909099 -060808080800090910041100121313111100120313140100121504160400050217171700099999909999999909009909999999099299399991991990991019901999 -040809090600031009091100121010021300121415161300121718191304051718011304009999999092990999990999199999199001999919999010099939909990 -040408090400101009090400101011120100130214121500130516161500130316160600900090999999190999919999039910999199099909999099999999929909 -040809100300110212121200110413060500111414151500161414171500160117170400091299019991199999099999099909909199999990990999993090999999 -080809101000010909101000050406020400111212121200131415161600131317040300901999999993999990919999909090199099990999190099999092999099 -080503090900081004020900111104121200111113130400141513131600060117171700992999099999901900919990999999199999999099090190903099999999 -080901101104081210101104131314150500131304161600171702160300171718190600099009039999199091999990009999999909999199999192999119999109 -040304080400091010111200131010111200130402111200131414141200130105060400990990290099999909999999999991999991999091990990993000999999 -040808080804090910101100090410100100030512131300141512130600161602171800099909999099090990999999939999199999992099990099919910991109 -080808090900011010090900111112041300110214040400061516161600151505030400990999909993999991990990099999909119990010999999999920990999 -080808080600020509100100111212131300141516131304151504171700031818180400999091091999903919099999099190999999901909099999920990999999 -080809100300080809101000111106050200041212121200011314151500041604151500999299999999099909991990909909919099999190993099990099909999 -080808040500010910101000090911061200131414021200150416161200040416031200990999099093199999199999999091099991090991999099909999990299 -080809101104121209021300121209040300141415160500141717171704181801190600999100991199919999992999099901999900099919999999090309999909 -060308090904101102090900121313141400150516141400151517171804041901171800921900999999119901999909999991999909999910999090090399909999 -040308080800091010100200051111111100120413130400121214131500061616010400929990991990991999991999999009109999999999999900900030999999 -080309041000080411111000080211111200131313131400040615151600171717010500290999909999099999990919909919099999099091099999909030999999 -080806090900030802090904101104120500101113131304101415161600171819011600999992909999119099919999009999199999909001999999900039900999 -030808010400050909101100121202111100041213140600151616161604171818181800299999193099999909119999999991109901990990999999009909909999 -030802090600080810091100041213091100140413090100141413151500051613041700919092919999999999199900909999999901399999999909990990900909 -080802090300080810090900041112061304011414151300161616151300051704151300919299919999919991990900090919999390999909999999990099909999 -040108080904101106121200131414121200131514021604131718051600131717031600999000399090099901999999199909199999109009999909999999999929 -030804090900100811110900121202110500121213140600011516140400171717140400999992900999999910990991099991999999099919993990991199999009 -060809090900010808101004111213140200111515151500111616041704051616031800009999999993999091990901119999919999999999190990099991909929 -060809100300110212121200131414151500161414040500011717181804191919181804911290199991999919099999099199099199999199093999090999999090 -080809011000040809111000121209131000041209021400151515041400051606031700909990993999910999999990199099199999199900999999990091909929 -080801090400101011121300101014141300150614141600170418021600031818051604999099030999999999109990909009999999990991990910999909929990 -080809031000110812131006111415021004111617181004191920212204191901212205992999919999919090919999190901999991900091099010099399999990 -080803090600080805101100021212131100141215131100141617181804041901181804929099990999090919999919999999999019099010999909090399909990 -060809101000041109101000121109020400011314151500051614151500171714040300090999099999199909999909199919109309999099999999900902999999 -080801091000081111110200040412131404061515161400171718181400051718180300999199931190999900091999090990099999990090999999999992909999 -080409100300080509090400081102120400131406121500131616171700130116171700099299991990990999199911099190909199099199999909993999999999 -060108080800090909101000111112131004111114130300151516171804150402190500999990309999909991999991900991999999999019299991099119990109 -080809101004080811100100061213141400151216141400150517021800031717041904909909909999903999919909099990999009999091099919999990929900 -030506080400090904081000040902081100121314151500011614151500161614171700990992099099909999990991909091909099999099993909999999991099 -080904010400021011121300141511121200141516171700140316171700140416060500109991193099119910990999999990099999999999992999999990909099 -080801091000041109091000121313141000150413040200151606171700150503171700999999039999091909099909099099019909999999190099999999909299 -080904101000080811111100121212131400011516160200061716181804051903181804009999990999099990999999119919919309999999190099090999909290 -080304090400101010090500040211120600131311141400131311140400040111151500299091909999900991999991009099999919999999999909903990999099 -080909090400080210031100081010061100011213051100141313151100140404160400999999192091999999999919099910999390999999990900990009999909 -050804040900010806100900040810100900110804120200111113120400141414150300009999990993099999999901919999919909199099999090999019999929 -080909090900080810110100120613131400150516131404041717041400031818180200099999909999903900919999999099999900100999999990999091929919 -080806010400080809091000041109091200041113051200031402041200141415151200999999903099090909999990909991099099999919999109929099999999 -050601080900101111080900121211081300121204081300141516021300030417170400999990039990990909999999109999999990999991991119920099999909 -050108080900101004090900101011120300040213120600141515161700041515171700999990390999999999009990929919999011099099990900909999999999 -040801040400040809091000111209131000061212131000051415021000031616161600099999930090099999999900109099999999999091990919999199929999 -050108090900101108121300141508121300140608021304141617181800140419031804990990399990999991999901009909999991909991999019990199999290 -040801090900101112120900131414141404150602161704181819160500181819160300099999039990190901999999990091999901000909099999999999999929 -080809011000081112121000131412121504130616021700181920201704050320201704909999903999090900999999900909109991990919999199002999999990 -080902101004110412101300030412141300061512141300011515161300051718181800119901009999909929999999999909999090999919999900990099909999 -080409090300100409111100101002120500061313131400151515161600040401161600099290999990999999109991999919009999990919099909900399999999 -080910011105121213111104141516171704141515171700140218192006142103222004009900903999909099919999190991999999999919991109099909912900 -080910011105121213111104141516171704141515171700140218192006142103222004009900909999909099919999190991999999999919991009099909912900 -080808020904101011120900101311140904151311160300151311171800061301050400990109991999999999919909990999129991999999990000999300909999 -030806090400101011121200101005121200040213131400151516141400040117171700299099100999909999999999999910909019999991999119903099999999 -080809101004080811120100131314121200131306151500161616021700030405180400909909900999903999099990999990919999999991999910920900999099 -080309060400101109121200111104121200021313041400151313161600171717010500299991990099909919999999099199909199999990090919909930999999 -080801090904101112090900040613021400151515151404050316161400171816161400999900939990019909091990919999199999909290999999909999900999 -050108091000111108091000121108090400131406151504021414151500161718030400999990399999000919990999999100099999901999999999919990911299 -040808010500020808090900101111110900120413140400120615141400031616160400999990993091919910999999999100909990999909999099929090999999 -020808080300091004111200131313041400151516171400151818171400050118061404199291990990090919900999999199999990999909991999903999999900 -060808010400090909091000041112130500141414021500041617171500161617031500099999093099990999199900009991999991190999999990999999990929 -080808050900100611121200131415021204161715181800161715041800160115040300999090999099099909009901190919199999999999990909993992999099 -080906031000080902111000080912131304010912141300151616171800051616040400999299909999911999199909990999099390999119990900909900999999 -060501080900101111080900041111081200131314150200131314161704181818040300999990039990910909999999919900919999199991999991099092999099 -040809091000011112091004021314141500161617171500161617171500060305041500099099009993199099199911999199099999099999999999902099999909 -080806091000111111031200131405040200131415161604131718181600130118180400999190902199999909991999909990919011909199999099993990999999 -080802090900080810091104031213141104150516140100151718140600151919140400910999919999999029199990100909999990399909990090999999999009 -080109090900080810101000111212040400111212040300131415161700050602161600999999390999999991000909999999999990990199299199900191999199 -080808010500091011121200091314121204151316021700151518181904040318180600999999903090909990999990090999109991999919099099009990992999 -080104090400081010111200081011110200131406151600171818151600051818031604999099300999911999991909999900019099990999990999909999999920 -050809090400010809090600100811111200101013031200021414041200041414151600009099999993990999099919999999999992991919991999999900909009 -080903101100081212131104021212140400061516141704181819141700180105141700129099990999909019999919909991999099909019999109993099999909 -040808010900100808110900021212110900131214110904150414161700180305160600999990993990909999999919109199999990901999090909919990929099 -080501090900101112090904131114150400131106161700130218181704191919190300099990939990109009099999009999099990099199999999091099999929 -040808090900031008090400111213130600111413130400110215150100161615150500099999999099099920909999909909999999099090991993991999991909 -080806090500080810100100111112100400131415161600131302161604170304181800999099900999093999999999099900109909999999999119019009929999 -060108080400091008110200050412111300041212111300141415041300141416160300999090399990191909191990199999999999990000999999999092999999 -080109090905081011121204081314021204081515161704181515161900181820060300999909390991009099999911190909199999109999190999999992990099 -040808080800040904021000051112120300131314140600131314140100151515150400099999991190999990012999999001999999099999999093999099999909 -080809011000111109101004111109121200131409151504050416021500031718190600999999093999009099919999999099199099900099999911999109921909 -050308080800091011060200041012131304141515131300161615171700041601171700929990999190909999091990090099999099999991999019999399909999 -080909090300080804101000041111111000121305021404151617171800150117170600099999999299999990099999999019119099109109990090993990999999 -080209051004081111121000131111121000031415120100041606171700181819171704119909910999990919999999199290999909399090990999990099999090 -050809090900101111031200021111131204141515151504161718190600202001191904909990099991929919999999900199099999901099991109909390999990 -040104080400090909080600100211080400101011120300131314141500131305140400999090309999900919999991909919999991290909999990999999990909 -030809061000111112131000111105141004150216171004151819192000181801202004290999109999900999999999090919099011009091099999999399999990 -080808060904101003040900101011120900021311140900151516161600150517010400990900999999299999909999999199099909091099099199999030990999 -080801090600101010100400111212121200111314150500160217151504041818180300999099030999990999199999999991099009090919999199001999999929 -080906101000080911100100120911130400030511141500161604171700041602171700990999999999093909919909099999109909092991999909999999901199 -080808090300101011090600101012091300141412021504141416161704041801051900999299909999999999090999999909109990109999199091090390909909 -080808090300051010090900041112131300041106020400011114151500041116151500990999999290999999019900999999199099099901993099999999901199 -080808080600030902101000040411121300141414120400151516160400150116160500999992190099199999199999009001909999999109999990993999999909 -060308080500091008081100091212021100131415151104011615150400171717180400999990299099199999019999999099199099009099993190999099999009 -040208090900041008090900101011110100031213141400150616141400151517040500019999199990919999919999939200099999999009999999999000990999 -080808080904101111110200100312121300101415121300161717181904040517010600999009999099991992991999999999999009190901999900009930990999 -080809100300111109101000041109120200051309120600141516121700140401120400999299099999999999991909919909999900990999090010990399999909 -080903101000080804101000020411110500121211111300141515150100060416160400129999999999999919009909999199909999099190990993900909999909 -050308091000110808091000110212091000131314040400131315161600040104061600990990299999999999199911909199999990999909099009903009999999 -080903100400080211101200081311101204081311061200141516171204181919010500129099999991199990999999090999999990999919990010009930909999 -080910110400080906120100081313131400080204031400041516171400151505171700000099900999993999919999909919999999999102990119999999990999 -040608010904101010110900121211110900051314020900151516170300151504181800909900903999900990999999999001999991999091999099999012999999 -080805030904080810110904121313110900141516170200181515191900040601191900999209909999099009999999999009019011190999999909900399999999 -080309091000080409041000081112121000021112121300041414150100061405160400299999999999099999009999999199909119090991999903999909909009 -080910011100080212131100081404130400081406130500031516131704181818171700019999113999910991999999009999999990099199992900099099999999 -080803090900080610090900021112131404151116161400151516161400040401170500929999999999009919099999090199099909099999999199900309999909 -080301090900080610100400080210100400051112131300141415151300041415150400299999930999990990999919909911099019999090999999909999999909 -080309101100121213100400050213040400140613151500141613151500141616010400290091909099999991999901099999909099999999999919999030909999 -030808080900101004020904101004051100061213141100151613131100171718011100299999991999901099991999909900999909190991990099999039990999 -080809030600101011110200041004121300141414141300051515161300041515010400992990919099991999991999009009999999990990999901999930909999 -080909011004080909101000081112131304051415130200161615171804061915200300099909993999909990091999990900999099199999199991000919990929 -060401080804091010080800091010111100021213131100141415160500031417180400999900039999909999999909099910999199991900999990999099929009 -030804050400040910111100121202131400151513131400151516161400040616011400299999100099199909109990199999999909999919999990909939990999 -030808080200060905101000111213101000111415151600171414151600040418011604299199999190999990099990099999919099999999990901909039990990 -080808050900020603090904101111111100011212041300141516161600041717171700999091929999999010990919999991999399099099090099909099999999 -080309090400080809091000110212131400111504130600111616161704111805011700299099999999990991990991109999999909999091099990090039909999 -080910100300080910111104120902111100120913061404151516171800151505010400999299999990999099199909199999919990909009199001999030999999 -050108040900101010100904111212131400150412161400171802061400171818031400990990309999990001909999909099999090990910999199999999999299 -060804040900101005111200100213111400031515111404161715111400161818011400909090099099999991090991199299999990909099990990999039999999 -080801090400080810110600121304141400021303051400151616171700151504171700999099930999100919909999099199999199090129099999999099999999 -040802090300100811111100100812131300010812041300140612151600141412050400011999991299999999999900099999999390999999999000999900990999 -080509090300100609091104101012131100141412151600141412170200040401181800099990999299099099909999999909019999999990199019900311999999 -050808080900101010090900011112131404041502130300161617181800161619061804099999099999909991199939910901929991990099999009999099999090 -080803090904100804111100101012130200011415161600171718161604171706190500992900999199909999991990019999199311999999999009099900999099 -080309041004080609111000080209121200081313120400141315160100170518181800299909990999990990909910999919999990090919999913909909909999 -080801090904080810030900051110120200131310141500131316141504041718061500999909932999999900991990199999119999199999999009090099909099 -080909010400060909101004111105101000110212121300141516160400170316181800099990993099909099099999999909109919999190091999919909929999 -080909030500080909101100080212121304081412151300061616161704181904011700999999992099919991990999990919999019099910099999000039909999 -050808090400100808090100101111091200100611040400131302140300041315151600099099999990913999199999909999909900990919999919999912909919 -040108080800090909050400041010101000110212131300141516160300141406160400999990309099999901909999999991099019990199999192999999990909 -040108040900101008090900111008050600120213141500161617171504180317171500999990390999009919990999099199999100099190999999019999929999 -040805010900101010100900061112120900131102121404131516161700131803160400909990093999991909999999919999999901009919099099990990909299 -080801090900080810090900111112131400110602130400150416130400031616130500999999939999009990199999109999909901990919990990999999929909 -030808090400060508091000111202131000041414141000151516160100150416160400299999999099990900199909119009999999199991999093999999909909 -080801090900081011090904041212131400151206040500160217171700161818180300999999039999009009109999909990009099990199999199999199999929 -080805091000111111021200031313061200041313041200141516171700141404011700990099099099911929999999909999999090999099190009999039999999 -080808010500040909090900021011061200130411141400151503161700151516160400999999903090999999100911999199909099991999099290999990999999 -040803091004080811021200041314140500011515151500161617181800161617170600092109999199091999019900999991909399999000999999999990999999 -080803091004040811091000121311091000140204151000051617150100181818180600929909999999999901999999009019999099099109990193999119999909 -080909040600040910111100011210111100131302141500041616140500041616140300090990999099099999999930099919999991099119090999999999909929 -080809101000110909101004120305131304141515160100171515160600021819160400999990999999909009990929990190099999391999999900919999911109 -040806030900041011110900121311110900041302141400011315161600051315161600009999092999099909999909909091999990999919993999999999901099 -080809050300100409111200101009130200061409151604171717181800191901181804999990990299091999919999919909919091109019999909990399999990 -040804010400080809101100120210100600131414151500130316151500130517171700999990903099110919999919909919099099999919999299999990990999 -080809090400021009090100111010121200130414141204150514140600031617171700919091999999993919909999099109099999901999099999920909990999 -080804090400081005090400061111091200031111131200140215131200141401160400990099999990909900990999099999999991092199999919991309999909 -040108060900101108090904121308141400050315021400161617181804161617181800999090399990909001909991999091999991999291999119099999999999 -040308090400101102091200041113121200041114141500061616141500051616011500921990999090919909199999999991099009999999990900999939909999 -040308090904101011090500101011021200131411151500131617151500130417010600921900999999999999910999999909109909999099990009990930999999 -060108090400101108091204131414091500161414170200161817171900160503191904999990399090119009990909919099019999999099199999990999999290 -040801090900041011090900101012131400020615131404161605171400161603171400099999039990109999090999099190999999901009999990999999992999 -080809051004030809101004111209130100141516171700140216171704181916200600999909990999999020909919139911099999999199999199009909900909 -080403040600091011111100121212120200131314151500131616151500040117170500099990920090999990991999919999199911999199999999903090999999 -050809090400041009090100110212061300111412121300111404151600031415150400019099199999993901009919999909999999999900099990929999999909 -080304090900101102121300141415151604141406171700181819171704181919010500299991900991190999190999900999199999990909999009099930999999 -040208090400101008080300111111110100121213141400121215140600051617171704010099199999992991999999939900099999999909099999999099900990 -080806010904101011110900101005110900121314150904161717170200160318192004999909003999091999099999999999999000900990199990999991992110 -040809011000050409091000111213141400151502141400161616171700030618171704009999993999090909919900099999999901999910999999929999990090 -080809010400080809101100041213061100140215151100140515151104160317171700999999993099910900199991099910999199999999990999019909929999 -050404080300090210111100121213111100141313041500161616161500060117171500999290001990119991999999999199999999991090999999903099999909 -080601030900081010111200131010021404130515151404130415151600171717181900999299039190991999919909190999099909909999099099999000999909 -080306090500101102090400121204091300121414091300151516171300041616011300290091999991119999990999099999999099999901999000999939909999 -040809031000021112101000131212140400131506141600131717141804130501141800912990199991999919909999999909909999999009091900090399999999 -030806040400090910111200021010041300051414151300161617171300161617011300299999100099990919990919999991099999990910999990999939990999 -080808091000111102120300131114120500131414121504011617181904062020202004991199919299199999999999099919909099909199093900090099909990 -030809090900041011020600101012121300141512121300041616170100051616170400219999919999919909910999999909999099090019999913999999909909 -060809031004020811101000121314051504121414161500121718191500120120202004992900919991109910999999990909099999999990991000993099999990 -080104091004081112091004080513141000080615161600171515161600021818190300999009309991009090099999099990099909991999999999919999919129 -060809030400021010101000111212131300111112131300141414151504040116170500092999019091999919999999999999999900999199999909003099999009 -080309090600081010091104081012021100131314151600131317171700050104180400929099999999999099919990999090109999099901999199903900999099 -040809010400101010111200031302111400131315150500161615171704161606171700009999903099999920190999909991109999999990999099099099999999 -080903101000080911021004120513130600121213131400151516171800151504010400992999999999011009199990999999909999999019099010999930990999 -030808091000060504021000111112041004111113141000151515161600171718011600291999991999991900099999990990099900199991999909999039990999 -080109100600081112131404081515150500081616161704180219171704181820200300990099309999100099190999999919999099909199999119090092999999 -040105080900101011080900101012080900130414151500021616150400060316171700999990309999900999099990999190999900991999991999909990992099 -040108080500091008111200131311111400131302151400161606151400040403150400999990399090190999199991999999999911090909999999900990999299 -080801050900080810110900041212130900141212130200151616061700041603171704999999930999011999099909099999919099990909199909909999999290 -080304091004081102041000111112131000141415150600051615150100171818181800290009999991109999199999909991099999099099999093909909909999 -080808091004051112131000011111041000141415150600141415161604021718190300990900900999990999009939999919999909099990999999019999911129 -030804090904060810090900111202131300111212141300110515161700111818010400299909909999199909109999199999999090099099199901999030999999 -050802090300041010090900111010121200131313120100061414150400041617171700091999019299999909999999199099999990390900999990999099900999 -080409010400081010101000111112131300110214131300061514161700151505030400909999903090999999109991999919999919999099090919999020999999 -050108091004111213140600151515141404161617181800161617031804021920202000990000309091099919999999990199099900999999999999019929911999 -080609090900081004111100121313111100011313141500161616021704031818040500999999090990909909999909199999199399099991099919099190929099 -040808080300090904101100090905120200131314120600151515151600041701161600999290991999901999991999019099999909999901099990990399909999 -040809010400041009111200131414111500131414111500031602061500041616051500099999093099900900990999199999999099999919992990999199909099 -040808090904100808111200100213031200101413151504011613151500061718190500999900999099910991929919999999999199909199993099990909900009 -080401050904101111111204131313140600151502141400151516171700031818171700099000939090990099010999999999999911999909999909929999999099 -080903101000080911121004040911120200131411151600171811191904060501191900992999999990999099991990999099019090999099190019000399999999 -040808060900050808101100120213131300140404151500141616151700031616011700099099999090990999009911999199199990999099099909929939999999 -080609090400080510091100080210121300141410131300141415161700030415010400099999999099990990909901909919999999999910999910920930999999 -080909090904081011120100050213141500161613131704161818190600031818202004999909119990913991999900009919909999909090099999929909999990 -040108080804090910111100090912061304141415151300161405151300021718190300999900309999009999999990090199999909091999999999919099911129 -080304090900080810090900111213141504110502141400161717181904061717011900999999209999909991990991990991909091990999190901099939909999 -080401040900101011090900041212120500041313131300140215151500141406040300099990930999909900199999909919999099999199990199999902990999 -080809101100030802100400041212100400131415150600161616150100171717170500919099919092999999199999909091099099099099999993999009999909 -080801090900080810090600111112131404111502161400041504171400051518180300999999939999190991009999090919999911190900999999999902909999 -080801091000111111110500121213040600120402141400151515141400031616040400999090930099999991999991099991909099999919999909999100929999 -020808080300090904101000090911061200131313131404151617181900150105181804199291999999099999990999099910909999900199099000993099999990 -080609091000080509041100080312131400151512131400151612171404021812011404909099999099099999900999999029999999099999999110011939919990 -040604080800090910080300090910020400111110121300011110141300051504140400999990009299999999919999999909109991099999993109990099909909 -050408080900101108080900121213140400031213151604170213151500181818010600909090999990099999909999999999009901902999099199911930999999 -080910111100120210111300030510141304151515161704061818191900201818011904199991199999199929909999990901009999909910099919909939909990 -040408090900101112030904101112130200101412131300151516171800151501050600909990902999999099991999999909919091999019999000999300999999 -080109101100080809091200131314051200131314021204150416161700040316160600990099399099099991999991999999099991900991990990909990992999 -060808010900040808090900101011111204041311111200141516161200031702180500099999993990909999919990900999999009999991991999921199991009 -030808080200090904101104090912051100061212131400151515151600171718010400299199990199909099999999999909019999090909199991999030990999 -060308050400020808090900101011090900101012120400011313131300041415151500929990990091999919999999099990999999999109093999990999900999 -050808080800010909100600111111121300141504161604140204161600141717180300099999099993909999100999909919909909909199990099991999999129 -080809041000080209051000031109121200131304121200041314150100061616161600999099199999099921900999999919999999999900990113999099909999 -040804030900101112050900131212020900141415151500011617181800161606181804009299099990999909909999119019999999999100993099999099999990 -080804090900080810100100111110120400110413130600040513131400031515150200999999900999093990919999909909199999090999999091999991929919 -030808090900060208101000041111101000121111131400151616171404051601180400299999999090199991999999999099909090090919999909009309999909 -040608080400091008080100110412131300021412151600141417171600030517171600999090099991193919009990999199909199099990999999929999990999 -080406090300080210101000080411111200081311051200131314141200040114140400099299901991199999999909909999999909991900999999903999999909 -030808091000040808091000111202091304141415091604141717171800191901050600299999999999999909190900900991999991009091099999990300999999 -030808080500040909021000111109041200111113141400151616161400061717010400299999991090991999901999999990919990999091990999909030999999 -080808090400100411120300101311141400101502061400101516171700041505011700999099900999992990919909199991999910999999990119999039909999 -040808010500091010101000090904111200021314141500061314140400031316161600099999093091999999000999999199009199990999099999999099929999 -050804090300101011121200101302121200141313061500141617171500040117170400099299001999909990999999199991099199999999991090903990999999 -080909040300100611111200041313111200011313021400151616171400041616051400099990900290999999099909999999919391199090990999909909999999 -040808090900101010090900011112130500060212141500161612040400160312171700999990099999909991199939009999999010099190099999999999929099 -060208040400090910101100090510100100031213141400041513161600171713161600010999119099990999999990939299099909999090990909999999990999 -080404010900081010090900051004111100120206111100131414141400130304151600999999003990919999909909099919999109991999099999999990929009 -050809060400100809111100020809111100121314041504161317181800160301181800999990990090999999999911999191909099901910099909999399929999 -080809101000040809111000061212110100021212111300141505111600171503041804999999999990090999099999139099999199091999099099919990912900 -080804050400030802091000061111091200131415091200130416091200130416011200999992900099199999190909199999999000999099999900999939909999 -040808080300090410041100090610051100090410021100091210131300040114131300999990909290909999999909099999999999199091990199903199999199 -080809010300080809101104121314151104161717021804191720201800060520201800999999993299019099199900910091199991900909999999900999999909 -080910010400081110121300081410051500160217171500161618041504060318181500099999093099010999990991909919999199099999999090002999999999 -080808080900040206030900101010101100121204131300121415161600050117041600999999192990999991090999999919009999999909991009903099999099 -030506080800091011020800121213141500121213141500041616161504171801041500999992009991119999910999999999999900999991999990000309909999 -080309101004080909111100080512111104021313141500041316171500061819011500290909999990999999999990990190909191090991999909999039900999 -040808010900050808090900021011120600131415161604130415161600130315171700099999993999919901090919099190099909909099999999999990929999 -040104080800090909080500101111111100101213020600140404151500161616031500990990399999909901990999999919999911090001999999909999999929 -020808090300100808111100100404120400101304121200131314141400060104150500191291999999909999090999999909999909991990999099903009999909 -080910010500080910101104080902120600080913141400151617181400150417030400999999993090190099909991909991099999990019999919990920999999 -080808040300040910111200130910110200141510161600051510161600061501170400999999900299991909999999919009919009999999990919999309909909 -030809090900060810040500110812131304110214131300151504160100151517181800299999909990909999090999990910999990990190999093999919991199 -080809090400080409090500100211111200101314151600100614151500030414010400909099999999099999090991999911909191999099099999929930990999 -050108090900101008090600101011110400121211111300120402141500161604031700999990399999190999109999999099909999099919999011909991990929 -030809091000111105021004111112121300141512121300061515161304041718011300219999991999901099991999999909999099990990999901099039900999 -030809101100051212021100131212141404151616141704151616181700150104061700211999991999990909919999990090909091909999999909993009999999 -080401050900081010100900081112131300061402131304151516171700151804170300999999030999999999190901099919999919900019999919999992900999 -080803090400080810111204130502141400131515161404131515161700181818010600992999991099010009199999199909999990109999099999990930999999 -030808080900101004020900101011121200131313121200041415061600041701051600299999991999999999010999999900999991999910090099990399909909 -060804091000111209090500131414140100130304151500021616151500171618181804909090099090099990999919939999099990991299999999919990919990 -040808091004110808091000111112021004031314061000151516171800151505011800099909999999909990909999110991999219099999199001999039999999 -040108090400101008111100121008111100041313130200051406031500161404151500990090399999199909999999199009919999999099199099909929900999 -030805091000040806101000020811110400121213130400120413130100041415151500290099999999999909009919909199099919099999999993990909900999 -080808030900021011040900121005131400121015150600121015151600040401041600992991909999909919990999909990099999099999991190900309999999 -030809090904080810020500111213141400110415141404161515171800191919010600299909990999119999910900099900999999900999199991909930999999 -040809010400100809111204100809131300141409131300031402151600171818060500999990993090910099909990999909999999999910099999929100919999 -080906100500080911101000040912130400020914141500160414141500161603010400909999999090909999099999009090999119991099999990999930992999 -030809100200111104121200110605121200131314140100131514141604171718041600211199999199099999999999999000199909399999999090090099999099 -050809090300100209040600101112131300101415131304011616161600171718180400099299099999199991900991099991999019909199993999999090990999 -080910110400080310111204080602111200080513111400151617181404191919011400919099299999999099199990109999999991990019990010099039999999 -080401060500080909101100080209121300141404151604141717151800031717151800999999030091909999900919909919909909909999099900929999999999 -050809090400101009091100061212111104131414021500011414041600171717031800099999099099099990999999190019199099199990193999999091999929 -080403091000110404061000111212130200111212131300141414151600050104161600092190990990999999091999999999919999990091099919903099999999 -080109090300080809090600101102121300101415041304101617051300101616041300999299399999999919100911909999999000909909990909999999999099 -040108091000111111101000121213131400121202131400150516161600040617040300990090309999999991990991999999999991990019999999909092990099 -080909090300080210050400081110121200131314141200131314141500061604010400999299199999999991900990999019999999999999099190990030909999 -080304091000081111041200080211131300041414141300051515151500161606010400290099999099990999990919999910999099999991090999990030999999 -040108080400091011081200041313141500061302141500051616161600171717170300999990309090190909109999909999999019999919999999909092999999 -040808080800090904100100111212100500040412101300031406101300141415020400099999090999993909099999009009999999099909992999999910991199 -080401090900101010110600121305111100140215031604171717161600041818181800099990930099909991999910999199999192909119999909909990999999 -080808090904021011090904121314150100161317180600191317181804031320200500999909099991199019109990139199099990091999999999029090999999 -080809090900080810100100051110120200131313141500041603040400061616171700999999909999093999999909119909919991199029090999999909909099 -080909090900100604111200051303110200131314151604171714181800170114181804099990909090991999991909299999919909109991999119993999999990 -080801090500101011110200101011111200131415151204041416171200061404180300999099030999091999991999999000999999900909999909999902909099 -080808080400040209031000111213131300141515150500161617181804160117170600999999912099199901990919999190999999991099099009093999999909 -080909090300080206100500111210100400111313130400110414141500110414010400999299199999090901999991909991999099099991990990999930990999 -080803010900080810100900111202100900110613130400111414151600041714050400929999993999999991999901909991199099099909999900999990900099 -080809101104020803101104120405101100131314151500161317151500160118190600919901929999999010999999999190009999999909990099993009999009 -040809091000060409091000111212121200041314140500151314021600040103161600009999999999099909090909999990909099999991990191903999999299 -080808010900100411110904121211111300121214141400150316021704151819060500999999903990991009991990999999919999990991099919092100991999 -080802040900080510110904031210130900141510130900141616171804141616010600919999910999990020999999999909999909099919099910099930909999 -040408010500090908101000090904111000120206110400121314151500120316151500909990993099119999909999099019909909999190999199999199992999 -080808090300100209091104101213130100141513131600171819061600051919041604999999099299191091999999939019999919090000990999909999999900 -080903100400080909111204081313040200081414151600011414151700051818150600992999991099991099091999909909919099999999193911990990909999 -060503080900101108080900121102130900141415150904041415151600041701181600992990099999999909199990199099199999000999999099990309909909 -080305090900081011121204081010121200021314150400160417171700161618010600299999909099909099999999099199099119099910999099999030990999 -080809060400080809101000011112101004131415161700130215050400131818180300990999999099099990999930090910009199999990091999991999999929 -080309101000111209101004131414150100021414151600041718051604191919061600299991999999009010999999939199999191090909999009090999999909 -050809090300041009091100041213140200041513141400161513170100161506171700099299099990991990991900919999999001999999999913999099909999 -080404090900080810110600051212111300021212111400151617111404031817011400999999000999009999990999999099909199991919991910091939929999 -030809101000041111021200041105131300141516131304141716181800140616011800211999991990991999991909099909999099909091999009999939909999 -080809010500080610101000111213141500110216171504031819171504181804171500909999903099999990109901909910999999909109999909029099999999 -030808080900101005020900041111120900061111130400141415161600140404011600299999991999991990099909919999199999090001999909990039999999 -080109091004081109091000121202131000121214151600171814151904060304150500999009399990199990919999199991099999090999099199002090999999 -080109090400081009111100081006110500121302140400121515161700121515040300999999399099099999090919999199099110999919099911999992999099 -050308040904100808090900111213061400151502161404011717171400181818191400990900299999909909199900099991999901909991993999990909999909 -040108080400091008111200131014141400131505021600130603161600041717171700999990399090000909999991999990199099199099999929999990909999 -060808030900100808110904121204110900121213140200151616161700050118041700999290999990999009999999999990019991190019099999903099999099 -080901101000061112100400131314151500161305151504160417170200160318181800099990039999090990109999199990999099909090199999999991992999 -080909031004081112121004050212121000061314151000011617181800191919191804992909199990999091999909909910999019099910993199990999999990 -080809061004051111121200130211121200141516170400141818191900031818011904909009909099999909999919999110099919099910999919929939999990 -080906100400081111121304081111021300141516051300171716181304170116180300909099090999999099909999119019099009999199999990093992999999 -040508010900101108080900120213140400120413151500120413150600031616161600909990993990990990910911999909199991999999999999920900999999 -040808080800091004060400090211121200091111121200090513141400031516011400099999099999999990000911999999999991999991999909920039990999 -080808080300090210040500091112131304090614131500091614171500040114171500999299199999109990190909990991999990099099999190903999999999 -080109101100081209101100130409051100130214041504131616171800131616030600990099399991099910999999099990909190909199099919999920999999 -080801040900080810101100121314151504020614051500161617181800161903181804999099939099190991909919090109099999991999999009999999912990 -080803091000081111091000021206041000131414151000041414151504161701180500929999999999990910999990909109999199099999999909000309909909 -030809091000060809041000020811041200131313131200141415161700141404010500299099999999909909099919099190999999999019099910999930990999 -050103080600090910081100120913081100120214141100151514140400150416170400999090329999990999199919099991999119990999999990999909990009 -080801090900080810090900111112131304110414040200150616171700150503181700999999939999019990091999990990919090990999199009999999909219 -080910040300080510041100080410121300141410021500141416161500060116171700900999099299990999991909919099199919099911999999903999999099 -080309100500081111121200081314121504021306161604041317160100181919191900290099909999999999099999000199909190909999999113909099909999 -080309090900100511121204130211121204141414140600011516161700151516181904299991999090999019999919090919099999999919093199999990999000 -080904101000081111120100081111130400050206141500161604171500160317171500090999090999913999909999999010009999999190999900999999929999 -080809090900010810111100041212110400061212021300141515161704141515030500999999909993119990990909999999199999190909190991099920999999 -050809100400111213130100061414131500160217171804161919171804161919031800000099009990993909099999909999109019909199999999099999999299 -080805040300080809101100121313041100061313021100141414151500041601171700999999900299909909099909099999999991190190999999990390909999 -060801090904100811111104120813051400020813130400151617181800031919181800999900939090199099090919909199909999991909991909991999929999 -080309101000080909111204080205131404151617181800151919181804151919010600929999990999990091990909900910099990999199990919099930999999 -080806010900080810090900110412131300051414130400031502161600171704161600999999903999019909109990999091999999099910999199921999999099 -080804010500080809101100121213131300141206021504140416161700140316181800999999903099010990199999999999109090909091099999999990992999 -040501060400080809091000080809091000111213140200151516161700150403171700999990030099091999999999999990919000990990199999990999999299 -080309051000081109121000130209141000131309150400040615151600171717010400299999990991909991999991109909199999999999099090909030999999 -040803091000050811091000040802121000131312121400131315040400060115150400092999999990919999199909109909999919099999099009903999999909 -040108080800091011121200091005121200091313031400091302151400060404040400999990399090009999099999999919999999299919999911900000999999 -030809100600111112020500131304141404151515151400161617181800161619011804210099919999019999910999990900999999199991999909999039990990 -060108080300090908101100090912101004130414020500151515161600171818180400999990399299091999999991990091199991090090999999909990909999 -080405030900081011090900081012020600081013141500161017041504160118181800099299909999099999919999199991909910090990990099093099999999 -080109040500080809101000111109061000111112121200021304041400041515030400990999399099009991999999099999999909991909091990901990999299 -080801091000080809091000051112131400151502041604171818191904030618191900999099939999999900919990109991009909909919091999029999990999 -080109091004080809091000111111111000121314020500121514161704121806030400999909399999090991999999999009199991099099999910090920990999 -080801090900081010090400111010121300141405151304021606171304181819031300999999939991999919900999009199099990901990991909091999991299 -060808090500010808021000041112131000141115031000141115161600041115170400091099991993999999019900919990999099299999999909999909909909 -080801090904080810111100120513111104040613141500031613171500161618021500999909930999009909199990990099909901999991992999999919991199 -080809030400021005111200131006141500161014141500171718181504170118180400912991999099090919909990999199999199999109999090093990999999 -080909050300080909061004111213131400111513131604111718180200110118191904990999999299999000901909999999919009909999190199993991999190 -040808090900101002090300101011061204051314041200011516171200151518181800991990919999992999199990900091999910999199993000999999990999 -060809040300101009041100101012121100011312021100131314140400040514140400900990099299909999999999999909999391199919999190909999990909 -080805060900101011120900101004120900131402120900151504121600150103171604999990900999909999999999999900999111991999099090993919999290 -080808080900100305020900101004111100061212111100130412141400151617010400999999291999901999991999099909999999990991999909900030900999 -060809101000111109090500121212120100130414151600041717021600031717041600909990090099999999909999939090199909190999999911999909929999 -080808090900101112090900111112060300011314041504131316051704181818021900999990999999909909999990099909929319009919199909099191999119 -080801090900041010040900041010111100041205111100061314021500031616161500999999039990909999990909199900999099999991990000999919929999 -040501080800091011080800121013130400121014130600121014040300040215151500999990039990109909090999999999999909099990999999991992901999 -080901100500081110100400081212130600080214131500161614131704161618030400099099039999090999019999909999999911099199099999099990991299 -040308090600100808090400050204091100041213131100141413130100141415151500929090999990999991990909999910099919090999999093999909999999 -030809100400080809110400021209131300051209041300141215161700141201061700299099990999900919999919099099999909999990999100999309909999 -080109091004081109091000081204130600051402040300151516161700151518181800999009399991099999009919909019999910999919299091999099999999 -080808090300100611121300101411150400101414021604101718181600050118180400999290991999990990910999999990199191909999991090903999999909 -080809011000080511121000040211111000131314141000151514140600031604170400909999903999991990999901919919999909999199999990991009929909 -060809090400011010040400111010121300111414131300111415160500021717170300099099009993999999900919099999999099999990999900919099919929 -040808080300090205101100091212111100091212130400091415161600060115170400999290199991909999909919099999999990099199999009903909999909 -040108090900101108120500131308120200131308141500161718041504061818031500990990399990999991990991119999919990990990990099099999909929 -040809090900100502110300101012040600131312141400151312141400150116170400009999919299009999109999999909909990999999990199993099999009 -080909091004080803101000110212130500141415161600141417040400060118181800999909129999999991909919009190999900999999999009903090999999 -040508080300090210061100090912121100130412120400141414151500040104151500999290019999199991909999909199999099091900999999903099999999 -080501091004080811091000041213091400121213060400150213161600171803161600099909939999190991099909009999909990999199991909919999912999 -040108091000111112121000111104131004141414051000021515161700180615031700990090309999099999909990990919099999991999991900909999909299 -080804040500080809101100011212121200131314150600131302161600171717031604909999990099900990099939999910999990099999999919991199999920 -080808090900030602091000041112131300141112131300051115151500041104010400999992919999990990190999999099999091990991999099999030909999 -050108091000111111111200131415161200130206161704131818161704130318191704990090309099999919999910099919999909909199999999099999992000 -080801040900080810100900111110100900041213060200141415031600140504171700999999930999999990999990919990919009099009199999990021999999 -030808080900101011020900101012120400130404120500131415151600131701150600299999919999910999919990909999999099999901099090990390909999 -040106080804090910080800090911121200131314021204131505161700181818031700990900399999009999999990099919999911909091999091909999999929 -080903100500080909101104081212130200141212150600141616171804141601190400999999929099911099991909919999199999999901099910099309909909 -080803090900080810110600051202111300141415111600141417171700040104181804999999920999199991990991999091909991999991099199903009999990 -080109100600081109121204080409121300141415160500141415161604021718190300990099399991009099990909999199009909999999999999019999911129 -080805090300101112131404101502061604101717161600181717191904202001191900990999090299911090199991090919999990990990990999090399999999 -080801090500101011090400101012091300141415041300141415160200040415030600999099039999099999190999119099099999999999199911900990999299 -080801090900101011090900101012130400141405151500041404040300060216161600999990939999109999099999009919099909990990999999991092901999 -080509030400081009091100081010021104081212121200131415161700060118180400909999992099991999999999010999199999990190990090903090999999 -030808060900101111121304101114150500100216170100100416181804191919191800999092099099900099909999109991199119399990999999090909999999 -060808040900031008040900101011110900020412121200131414141400051516010400090999099992909999999999909190999099991990991999999030900999 -080909101104081209021100131404151104131414161100011718050300191919190600990009999990991990919999090999199091999190293099999099999909 -030808080900040610020900111212130900140515130900161515171700180401171704299999919999919900919909999090999091990999099909909399909990 -050809101004010811121000060813120400140813021500141613171800161613030400090909909993009999999901909999999091199099199991999920999999 -080909011000081109121000041111131000141502131004161517131800061503051904999999993990901999999999999090999091100919999190909990992900 -040808091004010808090200111212091300141515051604171715181900171706180300091109999193999990991909999009919990900999199909999992990999 -080809031000080809091000041105021000121104131000141516161600060104171700992999999999999990919999099099199909090091990199903009999999 -050808090400101111091204131111091200131303141204151617061200150118190200999090099990999099999999999909099992100099999109993191999119 -080609090900080310020400080411121300081414121500161414121500040501171700099999911999299999910990099999909091099999990999900390999999 -060108080800090909100500041111120400041111130200141415161600141415160300999990309999910909019999909999199099199009199999999999999929 -080808080500091011110100121011111304121014151604171414060200170318192004999090090999993909999999910990019999900990199999999991992110 -080801060900101010100900051112130900141115040900161115170200040317170400999999030999991990999900909990099099990999199991909990992999 -080801091004080809091000021111111000120513140400151516160400170316160600999909939999090999919919999199099900091909999990919999929909 -040308090900100405110200101212111100101212061300101414151300041401160400921990999190999999091999999999919999999090990911909309999909 -080808080400090910110100090912131300040414141300031502161700151506051700999099099999093999019999099099199999999091999110929009999999 -030808080800090910110400020910050600121213131300141415160100141404170400999992090999990999999919099190909999991990999113999909999009 -040108080400090908101100090512100400131314100600131302151500040316161600999090399999190990190999099091999999099919999919909919992999 -060108080500090908080400100911111100121313020400141315151500040316171700999090399999090999999900999019999991990991099999909190992999 -080909011000080909101000020411120500131411151604131411170600130311180400999999993991919919900990099199099199009990099999992909999909 -080906100300051111121204131302121200131314040400151617171800150117181800009290091999999091199999199999909900990199999099993999999099 -080805040904080810101100120210030400131414151600011417171600181817170600999009909099190991990919299199999190099999993099990990999999 -080910030400080911111100080212130400081415161704141415150500060118181800992999919090999999199911009999099909001999099999903909999999 -040508080300090208080400101010110600121213141404151216141700181818011700999290099999190901999999909991099999909919090019909939999999 -080409090500101109090100111112061304141402041300151515151300161617180300099090999990093999109999990991999990999019999990999199990129 -050809030400021009091100121313131300141516160600011516161704041518181700912990199091999919990999999190999199099999993090099999900999 -080909011004081109121000080412121000131414141000151617170200050418030600999909993990009999999990919090999999990999190991900190999299 -030809100400080809101100021212100400051313141400151313141400040601041600299999999099990919099919909091099999999999990909900390999909 -080808060400010910101100090910100200121314141500161714041500160405031500999999900093190999999999919090919909990099999909990099999929 -080801090904080810091100121313141100051506141104161602140300160417181900999909939999100901999999099019999999909109999199990192999119 -080909090400081004111100121202110300121213131300141516170600040105171700999999099090999909099991099991929999991999991000903099999999 -040401050800091010100800111213131400021516131400061517041400031517171400999990030999990901099919909190999199999909990909999999929999 -060808030900020810100900111210100904130514141500131614140400130104171700992990999991999919999900990199909999099099991090993009999999 -040808030900100808110904120213140900151515160500171718160100061718180400999990992999919001999909009910999991099909999093999999909909 -050408030600091011121200090204121200091313141400091313151500040116161500992990019099199991999919999990099990999999991999903009999999 -080909011000110912131000110414141000050214140600031515161700181515041704099990903999900999919999999909999019999190099990929999919090 -060801090904101011090900101211021300141211151304160317181300041717190500099909039999019990991999919099199999900991999219909909999909 -030809090900060410021104121310140500121214140100151515161600041718161600219999991999910000990999999901999909399909999999990099909099 -080109101100080809120600131309020400131409151500161617151504161604050300991099391099199999919990909909199999999099999909099002999999 -080109090200080809091000110412131000140615161004171705160300171704181800999199399199199909009909999090099099900909299999999909990999 -040808030900021011120900130511141400151611141400011616040600171717170400992990199991900919999999999109999100999990093999990999999909 -080609101000080811120300041313021400151313161404151717171700150104180500909999900999909990092909199999199999109199990999993009999909 -080901050600080909101000081111101200081314041200040215161200041703161200099999930099909999199999909919999900999199990119990999909299 -080801040900080410110900121314150900161314060900161317170200160317051804999999930999019909019900919999099999999999190991999990992900 -050108080800091011110300121213131304121202141500160417170600161617180400999990390991992919919999990991099919090090099999999999999009 -040808030400020808060900101111111200131414150100130416151500131616170500992990999091999919900919909999199090399909999099999909999909 -080309091000111109101004120213130500141513131600011717171600041806041600299991999999909091090919999199999199999109993990990009909999 -060801090900040810090900110810100200121304141500041616051500171716031500099999939999999909911900999090019099990090999999990999999929 -080909090300080210100400111213141404111115141404161616160500061701181900999299199999999901090991990991999990909019999999990300909909 -060108080500091008081100121213141400120204151504031617151500181817170400999990399091090919009999999910099999909199999909921999999909 -040308080400091008080200090511121200091314141200041516161600151501061700999990299099191999991990999990999009199919990099999390999909 -040802090300060804101000040811111100120813130500121214141500040114141600011999991290099999999909999990999999999109099099903990999909 -080104090400080809090500041010111200131010020600131414151600131414031600999099309999999991090909009999909091999091999991999999999929 -030809090900100808110100120613141504160213171504181819201500181819051504999992990999913919109999990109099119009999999000999909999990 -080903051000111111121200021306121200131304141400041516171700041501171700129091999099999919999999099199099999999100990109999399909999 -030809091000111109091004121102131400121515161704121818180100120405190600299999199999099099990991119999919990109991990993990909999009 -040105060400080909090900081010041100080210120400081313121400151513030400999990300091999999990909909999999190999199099990909990999299 -080209090900081005060300111112130100041414131300151414161600170404161600019999199299999991009991139909999099999990990999909099909999 -060105080800090909080804101111121200131111121400150216031404041718181400990990399999999019990999099199909099991999991199090129909999 -050809011000041109121004131313131000141406151600140217041600031717181600009999993990009099919999909919099990099199999199999909929909 -030808080900041011020904051213130900141413131500141617170600161601180400299999919990919090919909999909909999099991990090999309999909 -040808090900060808090900011011040300121213041400151516051700151616021700099999999990909990999930099910929990999199199999991909999119 -080809090400030810091100060210041100041212131100141515161100041515010500999092999999990991999909999910099999090910990919909930999999 -080309100600080409111100080209041100041209131400151513131600151505011600299099990999099999999911999999009091099099999090999039999999 -080905100300081112101004131412060200131516171804131916202004130116202000099299009999999090991999999900019090909099199119093999999999 -080801090904080810090900111212051304141215161704181515160200180319160600999909939999019900991999090090919999900999199991999990992199 -080803010400090210111100121212121300141415161304141417171300060517041300929991993091199999110999999999099909909900999999900909999999 -060805090900080810110100121314151604121702181604121719191604032019191600999990900999113991909901900991999910909990999999091999929999 -040108080900101111120900131311060900131314140900040214040500151617170300999090399991900919909999999990999999999190099999901999901929 -060808080904101011110900121011111304121202040300141516170100051818181800999900990999990999999909910991929900999919990993900119999999 -030808090200101010111200130611111200131415161204171818191204051818010400291199999199999999099999999909099009100901999909009930999999 -080909010400080809101000111111111200041313131200141516021200060403051200999999993099009999901999999099999999999011990991900209999999 -080809090500011010101000111112131400110212150400161712151504180312060400999999090093999999190991909919009999999199991999019990929099 -080809090900080803100400111112131400051512161704011515021804191919190600999999990999929909910990999999109099009901993990091910999999 -030808090500100808111200101002111200130414111500131617111500040104061500999092990999999999099991999991909991999099990110903099999909 -030808080200060409091000111109091000111112120100131312141500051617040400299199999199099909999990919999199999399999999000999090900099 -080104090500080810110400121213131300121214021500160414041500161606031500999099300999900991099991999999199909190990990999999999990929 -080909011005080909111004121212121304141415151604141415061700031819200200999909993990901099901999990900919999909999199999999901921119 -040801090400101011121200101011111200131313060200050314151500161616170400099099030999019999999999999999919999990900199219999009999909 -060808090900100808040400101112130100101414140500101516160300040217171700090999999090999999009991139919999999099199999099901992991999 -040803090900100804090900110812050200041212131300141414150400061601151500992990999999909909991900909999919090999991999919990390909999 -080809100400030809100400110209100400120413140400121313151500050106151500999092999999990991999919009190999909999990091909903999999099 -080504090900080810100900110410100200111212041300011212141300041506030400999999009999990909999909919991919090999999993991990020909999 -080808090400011011120400101011131300141402040500141415151600030615150400990099119993900999909999999991909910999909999990920990999999 -050809090300101011111100101002120400041313131300141414151500060416011500009299991999999999199990109999199999990999199909909039990999 -060809100400010808021100121213041100121414051100151414160300150417171700011999991093991990099999099990999990999999290909990909999999 -030809100500041109100400121202100400131214100100130414151500130614041500299099199999190909199990909991999099399991999019999999990099 -080808010400020909101000110912120400110412121300110314151600110405061600999991913099919919900999999999999099099900092999999009909999 -030808050904100808090900111213141404150216141404171717180100191919190600999002999999909919099990990109999191909111999993999909999909 -080909011000080309111004121314141500120214141604121718181904120618180500999999993999990002019919909999909119909999099090090990999999 -080809040400080809101000060409101000011111121300041411051300031515160200909999990099999909999990099990999391199090990999999991929119 -030809090600101009091100021213141500161617141504161818141504051918011504299999199099999919090911199999999900009999999909099939900990 -040104080400090910100600090910111100051213021400151613171400151513031400999090300999199999990999099001999991199099990991999929999999 -080809101000111111100600011212131300141212130500141504021604140403171800909999909999990990909939199999999099099091999901090991999219 -080801090500101009091100101012121204021314150400161718151904031818150600999999039099190999099999990190999190099109991990029990999999 -060108090300100808091100101202131304101415131304101404161600171819051600990990399291999999991911190999999009909909099999909999900099 -080209090900081010060300111010041200011314151200051615151200161604170400919999190299999909999909099919999309999009990990999909990909 -040108080900101108080200061212131404151516171404151518051400191918180300999190399190199900991999090909099990909900999999909992999999 -040308080600091010110200091212121200090413141400051515141400041615010400929990991099991999091909999999199909990909999909999930900999 -080803040900080205101000111212121000111314151504161616151500061718010400929099999091909991999999999991909009909919999919999030900999 -030804090500041011020600121213131300121214141500011614141500161617181804299099100999110909919999999991999909999999993190999099999090 -080109090900081010111104081012131400080502141400041515161700031515040600999999300999999099999901199909199991990919999900999990929099 -080809031000080809091004111205021300011415161600171704161600061818180400992999999999990009919909019909919311999099999909900990999999 -080909090300080810061100041202131100141415161600041717161600051717010400999299919999090909199991009919999911999999990909999930909999 -080109090300081009111200101002110400131314151500131316151500061704050400999999399290991999099999199911909919999909999909990900900999 -060108090900101108120500101008131400151515150200160404031700181818171704999990390999190990909999119909919999990909199999900929999990 -030601080800091011120400091313131300090214151504161718181904161618180500999992030999900990199999999991099199909119090199099990999999 -080804010904100411120900101314140900101514160900030602160500171818181800999900903999909990919990909999999000999919099099929199919999 -080301091004081111091000081111121000021314151004161718151500060405191900299909939999900999909999999110099199909909990099900009999999 -080804060900080810050900111112120900131312120200141516171700040104170300999099909999990990099999999909909919199199190909903099999929 -080801090904051011090900121313130400121414151600120217171800120403170600999909039990009999190999999919099099099199099199999990909299 -080904101004110512100300131312020600131312141404151617141400150118181800009900999290999909919999999999109909909099990119993990999999 -080309100400080511041200081311041200021411151200141415151200041616010600290099909999909990999999099109999109099999999199909030999999 -080104090500081011111104081212130200081214151504160617151500161818031900990999390090099091999999119990919999900909999099999091999929 -040806010400030910101000111213141500111113131500050216161500171717170400099999003099999920919990999999199999099119990199999090999999 -060108080400090908081000090911111000121313141500041316021500031718051504999090399999090999999990999019999991090991999919999199921900 -080809091000080804091004111111121200051313121200141516171804060102190300999999999999990090009999999090999990999119990991003112999199 -080801090900081010090400111010120600021314150500161314171700030414171704999999939990900999999919009199099199099990991909929999990990 -080305090900080810111100060204111100121314141500161616161500041701041500299999900999099991999990999019909919090991999999990309909999 -040803090600100804111100050802111100121212121300141415151600141717010400929090990990099999999901099991909999999199099199999030999999 -030804090904080810090900021112130600141111151600141718181800141701051904299909909999999919009919099090009999099019999999999390999900 -080309090500081009090200110612121304111114151604171718191604171720011600999999299090191999991999900909919990909000999991099039990999 -050104080900101104061200101111131300101402131300101415151600041417170300990090399099090999990919999999999111999909199999999992900999 -080309051000081111121000080212121004041314151000160615150100171818180400929999910990999991999999990919099919090919999093909909909909 -080109091000081109121304081111141500080204051504161718191500061718031500999099390091999099000999999999099109900199999119909929999999 -050809101000111209021000110609130300111409131504161718181904160118180400099999090999019999919999999909929019109199990090093990999999 -080905100300081111111100081212040200081314061504161317171800161601170400909299091999999999991999909990919999000909190091999390999999 -080809100400011109120400111109131300140209130600151616161604171717030500990099099993000999999999099199909199990199999999009920999999 -030808080900101111020904101111121304141415151500141416171800051906010400299999919999910099919909910999919999999909199091990030909999 -080808080300090910101104091212131404011516131704181920130200181805130600999999099299999090091999990909919319909019199911990999990909 -080808090900101103050904121313141400151602141400150617181904151717010400999999099990999009200999999019999011999099199901099930999999 -040304080800090909080800100211051200131111141200130615161700131515010400990990299999999919900919999919999991099991999000999930909999 -080910030500081110101204130204041200131415161200131717180100131717180600912999199099999001999999909910999911099991990903999999999909 -030808010904100808090900111213141404150213140400161713180500061719191900999902993999919919199991090119909199999990990090909099999999 -080809020400031004111200011314111200131315111200161604111200161717050600911099101992999999999931109990999999999009999999999900909999 -040308091000111111110200121306141400121315141404121515161600041701180500921190999199999990991999999990999901909990990999990309909909 -080404090300081010090900081010060200111212131404151212131600050117171700999299009999999999991999909009919999900999190911903909999999 -080809040300080609101100121309111100041409020500151515160100171718181804999999990299090909999900999999199011099199999913999099990990 -040608090900100411090900100311121200100513121400150416161400021716011400909990909999099999909929099999999900091909999999910939911999 -080804010904080810090900111212121300110214041300031414061300051516171800999909903999909990910909999919099919999999992999999900900009 -080805090900100806090900111111120100131412121500130204031504131617180400909999999990909909909999039099999919099199999099091920991199 -080104091000081112091304081114131300081105150200161117150600160418150300999099309090999099099991199990919999199999090099999099990929 -080803090900081010101000021104120600051314141500161714141504160418011500929999990999999910999919909910099919990999990090099039990999 -040804091000011112121000051112121000131404061000131315151500021616170300090999090993999999999900909919999999099109999099919999919129 -080109090400081009090600111111120400130502141504161617171500161617180300999099399991090919909999909091099099000919999999999919999929 -060108080900101108080400101212121200131415021600131415051700130415031804999090399090099991999999999090199099199990199999990991999920 -080809090904080805100600111112130100141415161604031417161804191919022000909909990999900999909990939990199990909999199099029091999119 -080910031104080910101100080912021100130414151100161617180600160105191904999209999999999999909990919090199901990910999190993909999090 -080309051000080809041100120204061104121314151100121617171100121601171800929099999099109991999919990990099009099999991199999390999909 -020808080300091011121204131011121200141411151504141411160600050117181904199291999999999019999999999109099909909990999909903090999000 -040809100400110306121200111102121200131415150400131414160500130117171700000099990992999999099991999991099999099991990919993090999999 -040801091000110808091000121304091000121402061000151617170500150417170300999090939990909991999990999919999019090019999990990999999929 -060808080804090510110300120213131400151604131400171718191404170118191400999900990999012909199991999019999199091909999009093999999999 -030809090400100209091100101212051100101304141100011313151500061617041500219999999099199991999919909999999199099900993909990099909099 -080109091004081109060400081213141400121215141400030402051600171818181600999009399090199999109990099991999999999919999009929199919909 -080809090900050810100100021111101200131111141404150416161604170306181900909999909999993909199919909199909999901099099999019990929009 -080304090900080410090900080210061100121310111100121410151600141405010400299999909999099999990919099919999011999991999090999030999999 -080901100400080909100400081112101304141502100600051616171700181818180300999099939990919999990990100901909099990910999999999199999929 -080801090600080810110500031212121200131415161704181416161700180204041700999099930999000999199999999210909990901999999999991909910999 -040809091000030405091000111213140100110613141400110213151500160404151500009099909999999920909990139999999999999090991199909099909999 -080804091000080803110200121304141400151304061400151617171700151616010500990199991199929909991900999999999099999000199999999030999999 -050108080900101111120900101111060904031314041500160217171500181917171504999090309990990999909999990991999910992109999990911999919990 -040809010500041011111100121006131300041014131300150214160400151503161600009999903099999909919909999990999011999199091909999999992999 -040801090500101111090600121111021300141515151300041616171300041617170300099099039990900909999999119099099999990990999909999992909999 -050809100300110209121300140604121300141515121300141516041304140117181800091299099991199919999999999900999990099999991099093009999099 -080909020400080909101000011112041300041106050300041114151500161616151500091099991999999991091939099990929099999990990099999099999099 -080509101100080812121304030412120100141415151504161702181800061919181800900099999099090099999999939201999999909191990119909099999999 -040408030900101108121200131108020500131308140400151515161600060117161600909290999190999909919999109999099999090919999999903099999099 -030808080900041010020900011110120900111113140900061513040400051617171700299999991990999999919939999990199911099090090999990999900999 -080808010400090410111104121313131300141516020500061716180300171716181800999990993099099009091909999099109909990091999909999992999999 -080409021000081109041000011209031000131313130500141415151600141415060400991199099990909990999931929909999999999009099990999900999999 -060808080300090210111104090912041100131313131404151515160100051718191900999290199999199099199990999991009999009901999993999009900999 -080808080900011011041200130614050400131515021600131718181604171718031600999099099093109990190999099991999991199090990999099999999929 -080109090500080809101100121213140600121213021504161717181904161717030400999099399999000991990991199999199999100999190991099920999999 -080809031000040809041100121309021100141309150400141316161700050116160600999299999199099909909999919099199911999999090090903999999909 -030808050900101108060904121202040900131314151604011317181600191919191600990992999991109099199999999901009991909991993110990999999999 -080910110300080205120400081312121404151516161400151517160400060118181800911299199991999999090990990109999909099999099099903099999999 -080909030400081009110200081012131400081515151400050616161404171816010400992999999099911999991990009999999099099999999091009930900999 -040802040500091011121200031314121204061313151500161616150100171717181800019999110091999929199999990991909091999909999993999099999099 -080401090900081011121200080513121200021414151500160414151500161703060400999999030991109999999990099199909099991099999999999900912999 -080104090900081011091200081011111304081405150200161717151804061717150300999999309990111999991999990909919909999099190991009999999929 -080209090900080810110500041204031300141515151500141616170400140601171700919999119999919991920900999919909999999199090909999399909999 -060803091004051111111200131415150200131315151600171718192004171701192004092109099199999900991990999999919909199919999000099399999990 -060805010900101010090900111112130400031414130400151414131600151502170400099999003999909990919999009990999999992999099990999919991109 -080808010400090510111200090904111100131313021400040615150300161616161700999990903099900990099999999999919990199091999999909912999919 -080808080500030902101100040912131300060912141300151512141400151501040400999992919099100999999909999999999010999999099099999300999999 -080808090500061004090100041010090400111111111200040213121200041414150300990099999990993999099999009099199999099919990199991999909129 -050803091004110806121000131414151004131414021600131717181800131701181804992900991999999900019999990999109999199909190919999399999990 -080809011000080511111000031211111000130214141500161714181500041704061504909999903999090999999991999219909999091199991990999009909990 -080910011104080912131104080514141104151514141100151516160200060317181900009909903999901099909999990909999909999999199990909991992119 -080808090500101111090100021104091200131314091200131315041600040315150600999099909991913919099999999199999990099900099999902990999999 -030805090400040810101100020810101100121204130400121213131400151501060400299999900099999909999919909199099999999909099190909300999999 -080109090900080810060500041110121304141110040200151110161700181816160300999999309099199990909909110999919099090999199991909999999929 -080404010600090310111200091010111200090213111400151516170400151505171700099990903092990999999999099999999111099090099909999099999999 -040106080900101111080900121111040900131402050900151616171804151603181800990990399990900999999919909199999119099919999919099919909299 -030808040900101008050900101002060900111212120900131314141500040104140400299099999999909999199999099901999199091999999090903090999999 -080601040900081010110904081010111200051314110400151516111700031502171700099999930999990099999909009901909099999919999990929199991999 -080409031000081109091000081106021000041112131000011415161700141415040500092999999999999999919909099999199091999019093100999900999999 -040801090500101010091104121212041300021414151600171714180600171703181800099999039099990099190999999991009190091999099909999999992999 -030809090900080810021100121213041100140513151100061616171104181616010400299999999099111990999999999099099090199991999909009930909999 -060808010900050808100900040411100900120213141500031617171500161604171500099999993990910990199999999091999010099109999999929999990999 -030808040900061011120900131402150904131615150900131717040500130117181800299999910990909990199999190909999909099919990909993990999099 -030808080800090910061104121302141504121216171704181920171705181801212100299999919999990090190990900991099919909199999109090390999999 -080109090904081010110200121010131300141414141304151505031600171819060400999909309990911999991909999099999999900999199992909090900099 -080109090400081009090300081112121300081102141300151116160500040616160400999099399991099999992911999991999991199909990990909999990909 -040108080400090908081000041112121000131312041000141402061000051415030400999090399999099901999991909909099999999919999109999990901299 -030806090400080810100500021111111200131415161204171418181200041401181200209099990999999919090999999109999900001999991199909399999999 -040808010400090810101000111212131300041212041300031414140200151506160500999990903099999909919909099999999090999999192991990009999909 -040108080904101112080900111113130904141513130600021516171800191919030500999900399990009999099999900199909909991909999900919990999299 -040308080900101006080900101004021100041213131100011413131100041516160500929990999999099999910999999900199099999099993190990099909909 -080804010400080809091000111111110600031213131300141212041500161702051500909999993099090999190999999991999999992919099909919199911099 -080405090400081010110400121010131400121502161400011516161400061503171400999099000990909999990999009911999099999919993999999919909299 -040803040900051010100900110402040900111213141400111215151400111601150600029999190999999909109990999991909919999999999190990399909909 -080910111104061213110100041213141400151205141404161617181800031602181800009900909999993999919990099099999990900991999919929199991999 -080609100400080809110400121213021404121213151400161617031400160118051400090099999999900990099999190999199919199199999092993099999099 -080409030600081011111200080213141500081613051700011813191704181819191704092999919099199991990991009909999090999999993199099999990900 -040808080804090903040200101010111200131411111500050616171700181818011700099909929199990990991999999990919009090909199999990039999999 -080909090600080810110100041212131300041214131300030402151500161616170500999099909999003909919999099999999091999910999099929109999909 -040108080800090910041100120913051100121414141100031502061100041515041600999990309999909909099999099910999999099910992999999190909909 -050804090900041002040900101011121300030614121500161717121500161717011500090999099990109999190999909201999991999999990900999939999999 -040803090500100811121300020811111300141415151304141617181800061901181804929090990999999909909919999199099999909909091109990399909990 -050108080600091008081100041213021100141415151100041416161100041717170300999090399990199990199909919901199999990990999999990992909999 -080809090900080810100600111110101200011113131404031502161700181805040400999999909099999990999990909999909319909991099119921000999999 -040608090300101008080400101002111200051314111200011516171200151518171204999290091999999999190999199909999091099019993199999999990090 -040809030400041009091100121213021100121213041400151515151400060516011400092999099099999900919999109999999900999919999990909039990999 -080909091000081104031000121213051000121213141000151617180200060401181804099999999990092909999999999999099990999009190019900391999990 -080901101000080909101000081112131300051406150200161404171804041403181800999999939990919999019990999009019990999990190909009999999299 -080901100400080911110600120911110500130914150400131414161600041702160300999099930999990909999909909991099999099099990999990192909199 -080109091004081109091000121111131004141502161704180619192000180519190300999909399991999919909999900199099111100909199099999992990999 -080502090300101111090900061112121200131415151504131617181800040104181800091990919290999999999990999010999099909109999909903099999999 -080901100600080909111100020412111100130514141500161714141504040318181500199099930999999910099999099199009909991999991999002909999999 -040809051000110909021200031313041200141313151200141616150100061616150400009099999091911929999999909999999990199999990993999999909009 -080809090900010810060500041112131400151515141400031602171704041818181800999999909993199999100900099991099999999919992909091199909999 -040809011000051112121004131312121400131515061600041517171700031818180200009999903990091090991999999990919990999999190999999991929919 -060809100300110212130400111414131504111416161500111716161500040118180500911290199999199999190999990999099999999199990090903090999999 -080804090900100611110900121211110100121204130400051402040300041415151500999990900999099909999991939999099999090109999199999102909999 -040808060500020803090900101111090900041213131300011212040400041414141400999990920091999919999919999919099009999999093909999099909999 -040808030400040808090900100204090900111212131300111114141400040115060500092999999099999901999910999199099990999099999099903090999099 -080808080300050910111200041310141204151610141704011819190200181819190600999999990290999990909999990009919099009009193191999999999909 -040106080900101111080900101213140900101502160500101515171700040403171700999990309999900991999901199999199911099990999999900299999999 -080808080400010910021100090912131300141516161304141716160300050604181800999999191093090999019999999090999099909099299999900009999999 -080910030400080911120200080913041400151516161400151516161700050601181804992999919099911999991990999090099999199999999090900390999990 -030809091000050811061000020811121204131411121204151617181800041901181800299999909999999909900919090199999909901099991109990399909999 -080309090400100509091100120206131100141413131100141415161104171717010400299991999099999910909919099919999999999990999110099030999999 -060108040900101108090900101208051300101208021304141215160300141404171800990990399990109990900999999999999991900901999999999012999919 -080809040600040809091000111111120100050413131400151513131600031717170200909999990099990909909999939090199909199999199099999991929919 -040801090600080810091100121213090500020414090400151516161700151503161700999090939999100919090999999190999099091909999990999999992999 -040406030800090910110800090912020804131414141500131316151500051701181800999990002999919999199999100099199999999199999109990309909999 -080808080600090910110100120510130400121410150400120216151500041716160300999099090999913909909990909999999910999199099199990999909929 -080808010900101111090900041213130400141413130400151402060300040516161600999999903990919900199999909909999999099919990909909192990999 -080808090400030402091000111204091300111106131300141515151500140404010500999992919099019999090909999999199999990001999999990030999999 -030802091000080805111000041213111400151515111400161718111404061717010400911992991999900999999900009999999990999999990909009030999999 -040305080800090910080800090411120400020611131400151511131400041611011400999990209999999999009990909199099909991999999110999939900999 -030808090900100808110904100612110500100213110100041414111500161617041800990992999999999099099990909990999119399919999910909090990909 -050808040400090808101000091111100100091111121300040214061500031614171700999990990090999990999999139999999990099190090199999990921999 -080909011004110909121000051313131004061415161000141404161700031818180200099900993999901909909999990909099009999909199999999991929919 -030808090600101011121200131402121204131505161600131717171600130418010400299099910999099999199991990919099990999199990990999030990999 -030808080900101004020900041011111200061314111500161617181500161601051504299999991999909999910900909999999001099919999090999309999990 -060809031000111209091304111214141500111214140200041616171800051601170400099299099199999099091999999999919009199910990990999390909999 -080809090300080409060500101002111100101004111100041212121200041301141400999299999999999900100991999999999999999100990999990390909999 -080808090400101011110100100411110600121314151500120504160200120316161700999099090999093999999990999990109009999009199999999991992919 -050809010400100409091100101212131400101512041400061504021400031616161400009999093099990999919909019909099999999999990901999919929999 -040804090900100804030900111213130200111413130600111414151500110116040500909990992990999990091999919909999099099910999999993090999099 -080801090400081010091100041010091200030613131200140213151200141604050400999999039099900909990999999901999999992999999109991000919999 -080404090900101011111100101012131300021212130100141515151600031704060500090990999099999999909991199199999999391999991990991000929999 -040809100300110209121200111314141200111504140400161616160600050117171700011299199991909999999990999909909909991099999990903909999999 -040808091000111112090500110213131300030414151500041616151500171616010600999090909099999991009991999299199900999999999909909930909999 -080805010400080809091000040309090600111112131400150212161600150412160400999999903099090909990999999929199991091999091199990999999909 -040608030900101008110900101213020900041214140900151214141600150105170400992990099999919999919909199991999099099999090199993900999099 -080808080900060210090900031112130400141512160500140412171700181812011704999990990999119991910999999219199199999991099909990939990990 -080304040900101011120900100211130900050411131400011511161400061716161400299991900999909999999911909099999999999090993199990999900909 -080909090900080810110100051213141504160217171800161920201804160620031804999999990999013999109901900919909019999919999099090999999290 -080809090904101010030600111112120200111112121300140415161704181801190500999909009099929999199990919999919999990999199011009309999909 -060408010400091008111200101013131400040213131400151504051400150316161600999990093090900999919991909019999999999109999990999990929999 -030401080800091010101000090911121200040211130500041411061500161711151500999992039099999999199999099919099099099199999109900999909099 -080808080904061011090904011212121200131313140200151516171800051504170300999909990990099099009939999990199999199099199091909099999929 -080804050900031011110900060204120900131415150900131315151600171717010400999992100999999991909999999010099919099999999090999030999999 -080909090300080210110600081213141504161616161500011717180500041717181904999299199999100999199901900919099999999199993909999990909900 -030809090600101111121304101114140400100214041500011617051500181818181500909992099099900099999999909909999110999919993999991109999909 -080808010900100211090900101004121200130305121200130414140400130615160400999999113999919991909999099199999290999990999090999099909009 -020808090300101108120500101104131400101515151600101717181800040106181804191291999999909999900999099909909999099090991999903099999990 -080109040600081009111200131014141500161014141704041818021700031818051700999999390090000909990991999099909999900991999919999999929099 -080808080900101011020900030412131300061404131300041515151500161616010500999999990999111929991990099999999090999099190999999030999999 -080910111100081210110300081314020600151516171804151519201804051919011804909999099299999990919909199901909901909991999900099939909990 -050106040800091010110804121010110804131414110200151614171800151616190300999990300990919009999999990009909999190999199991999919999029 -080909100300080909110600081202131404081516171704181515170500180119191904999299991999999990910999190901909091900999999919993090999990 -080809011000110909101004121314050600041516161600171717020400031818181800999990993990919090190909099001999999999091999990999919929999 -080601040900101010100900111212131400020512151404160317041400161618181400099990930999990910900999999109099999901900999999992099999999 -080409100300081111100400081111101200051314021500011614061500041717171700909299909999999999990909909909199091099099993999991109909999 -030809101000111212020600111213141400051513141404161613171800161601040400211999991999999999010909999999999099909091099019999300999999 -040106080800090909091000041112131000141415020500141404161600171717031600999990300999999990109909909901909991999991999099909999999929 -080909010400080909101000081112101004130212141500131617181504061905031500999999993090919991099999990919999090099199999119090929900999 -080406010400080809090900031002111200131313131400151516141400051718181804999999003099999921919991909991109999990909999999999099900990 -040108090300100808091100121213051100141215021100161715181804060415181800999990399290909991999991099091999991190099999999000999999099 -080309101000080409101000111209131300141402041500141416161600041705010600929999999999999900909909999091909919099999099199990930900999 -050308080400090909081000111206021000041213130400011213130400041214141400929090999999999909919909009999199099099999993199999090909999 -080808080400090909101000111213100100140515151604060415021600031718181600999099990999999999099900039099199099100999999991990919921999 -080109090300080809090400101102061200131414141200040515160400171717161600999299399999990991199909099011999999090990099099999099999099 -080109090300080809090400101102061200131414141200040515160400171717161600999299999999990990199909099000999999090990099099999099999099 -050808090900040208090900041011120100131014141500161014061500040317171700099999199990999991109999139090999099099999990909902099999999 -080809010500040809101104120209130600141415161600171818161604031819191900919999993090910091900919999190099999991909999999029909999999 -030809091000111112021004111113141004151613171000051813192004181801062000219999991999099099019999190999999009090990999000099309999999 -060408010900101008110900021012131400150512160400150412171700150312171700999990093999110999099919009199909090999990990999999999929999 -080409051000081109031000111109041000061212131000011214150200161616170400909099999990992999999999999000099999999910193911990999999009 -080109100400081109121300081109041300081409061300051415151600040215030400990099399990000999909999999919999999090999099999991920901999 -080609100300080809110400121209130200121414151504161414151500161701040500909299991999999909910999019999919099909999999919990300909999 -080801090500080810091100121310061404120410150200121610171804161603191800999099939999011909991990090909919999199991090999099919999299 -080104091000080811091200131306091200131314021500161714151500050414030400990099399099119990099999999999199909190999999099900920999999 -080109101000081112051000081314151504160217151504160418191900160618031900990999300991099999099919090019999919909010999999999999909299 -040108080800091010111100121304111104141516160500170216160600171818180300999990309999909901999910990199909199999199990090991999999929 -080808080900011011120904061314141504051602141504171717181800031920181800999999099993110099919900900901999099909910999999999199921999 -040406010800090909080800101111121300101111121400100405040200100315161600999990003999909999901909099999919999999000199999999991992199 -080910111100080910110100080510060400081212131400040212031400151617181404099999999999013999999990099991909990099999999199901929901190 -030809090500080806091000021112131300041415131304161417170100181817170400299999999099909919900911999091999909909910990993909999999909 -080910101000031102120500040412120400131414151500131414151500161601040600199992190099119999999999999009109999999999990919990300999999 -080808080300090910041100090902121100131306121404041315121600171701120500999299919999909999199999199099909999009909090019990390999999 -080404030900081011040900081213061400041213130200151516160100151516160500999299009999009999091909099999919999190019999093999999999909 -080801060400040809091000111109091200020413141500161613051500031613041500999999930099199901990999909199099990091090999999999999929909 -040108080800091010111100091010121300090504141500090216151500040616160300999990309991909999999999009999009090999999991199900999999929 -060108080904101108080900121113140400121115161600121102170300120518181804999900399999990909099900009999999910999919999919999912909990 -040805030904101112120900130212040900141515161600141517161600140106181800009909092990999909999911909199909190999999999909993009999999 -080509100300081111110400081202041300041414151300061416161300171716011300901299919999990990199909099991999091199999999991909939990999 -080909010400080910111100080204111100121304141500061314141500031316040500999999993091119999999919099019099999090909999999999090929099 -040809010600080810111200131310141404031510141400160210171704161805171700009999903099990999919999190909999909992999099199091999919099 -060804090900101011021200101011110300011313131300141414040400041516160500009999091199919999992991999919999399999099099909990099909909 -060808080800091010110400121010130100041405131300031402151600171717041600999990909999990909909909139910999099999999099109929109999999 -080803090904100211110904121212131404151516160500151516161700061801192000929901999991199099190999000991999909999999099999990300909909 -040108090600101111121200101111121200101314141404150216160400051717180300990090309991909999999999999999099199900199999090901999999129 -080309091000081104091000080412041000021313131000141415161600140617010500999999299991990999099990999190099199999901099099999030990999 -040809031000110812101000110806021300110805141400041516141704181818011700092999919999919999919990919999919099999009990000099039999999 -060809101004111112101004131114141404131302151600171819201600030519011600000909999999909099099999990900999911199109991991920939999999 -030805091000110809091000040802041000120813131000141414150100040616160400999992909991999999099991099091999999090919999993900119999909 -080806090900080803090900101112131300041212050200141515151600040117170400990999999999929909991909999909919099999090190991903090999999 -060808010904100808110900121313140904151614140900171602180300040519191900099909993990900900919999990099999909990919999992900119999999 -040809050400010808101000110412101000111313020600111314140300111515161700090999909093999999199990099991909991999991999999990912909919 -080809011004080209111000061209131004141209151000161217180500160317170400919909193999919991909999900099999999090990090909992999999909 -060808090900100808110400101202130500101415131300101415150400040301161700999990990990990999009991199919909999999991999999902300999909 -080809011000080409111000121209111000040405111000131314110400031302150600909999993999999990999990099909999990090999999910929199991009 -080801091000080809091000111212121004130514150200161414061700160403181904999999939999091909909999990009919990090999199990990991999210 -080304091004081111110400120205131300141414131300151617181800150106181800290009990099999919909919999910999999990910999109993099999999 -060104080800091011110400121311110300121313051400121502161600121717041600999990300999990901999900999999929999999190199119999909909999 -060808010904101010110900121212110900130504110900041415111600031718180200099909903999909999999999019099999990990099199009999991921919 -080809090400081003091100121213130400121202141500061616161500041705011500999999999099290901909999999991109919090991999999990039909999 -080909010400100909111204101314151200100215151200161617181204190317050600099990993099910099199991909919999999999100999999019900929999 -040108050900100808060900111112121200111113141400031502141400161604170400990990399990990909190999999991999990999919999199921009999909 -080808080600090909090100101002111100101212050400131412151600130417030400999099990999993991909991999991099999999099090900999190990299 -080809090900080410031100021010120600131414141400131515150400160401170500999999909090999909920919199199999999999909091999909309909909 -040808040400010808090900051011110600120211131300141403131300041415161600099999990093909991999991909099099019999199999999909209991999 -080804010600080909101100120909111104121313021400151313041600050317181800909999993090901909999999990999919991199990090999909190992999 -080808010500090410101100091210101300141415161600140206031600041717170400999999903099990990999990909091909919999199999099991920909999 -080804010400040910111100020910110600120910131300121210131300050304041400999999003090119999999919909199099999999999999999902090999909 -030809090500080809091004021111121304141111121500161717121500181906011504299999999099999019090999900199999199999919990910909939900990 -080109090300081009061100121013141100121015021100161015151100050404170400999999399299099909909991199990199099199999990999900909999009 -060803090900100808091100021204131100141204151100141616161600140401050400929990999091999919999999099199099990099099091999990300999999 -040808040900040808020900031004110900061212131300141412131300151504010500090999999990919991919929019999919099999999999009990030999999 -050108080800091010041100121210041100021313061100141513161600041703161600999990300099999909999991099109999999991990091999901999992999 -050104080300091010081100121010081304141415021300061616171300041616171300999990309290999909991999090091999991190909999909999999909999 -040809090400101112090500101312031400101312141400011315020400061315161700009099099999990990999990929999999099999991993919999990901009 -080105090400081011110400081202131300081214131300151516161600150317040600999099300991099999900911999991999999999019999999999100992999 -080809101104011212060400131212140200131514141600131718191604171705031600900009090093999999999909119909919999999009999991099029999999 -030808010500090808101104121213140600150213161704151813190400151818191900999992993099900019919999199919909010009990990990999999999999 -080409100300110209101200131415151500161617170400161617181804060105181800099990999290111991999919999199099999099999999009003999999099 -080906101000081103121004081304141500051302161700011819191704181819191700909999099999929090910909909990199091999019993999099999991909 -080801030900100811120900100413140900101515140200061617140400161604140500999299939990019990919999099990919999199909090099999099999909 -040808090300100211110500101011041200061313141200151313141200040104140400991290199999190999999999909901999099999999990900903099999909 -040808030900020810040900110510040900121310141400151616141400060116171700992990999991909919999999999109009000991999991999903909999999 -080808030900101011121300101011020600141414150500011617151504041818181804999290999199091999910999999909199999099099993119090999909990 -030808080900041010020900040410111100121212111100060413130100051413130400299999991990991990991999999090999999990001999993999999900909 -080809040400100211111104101213130300121213130600141516161700050116161800990999009099199091992999999099999999991909091099903990999909 -050308080804091011110200041213141400151515151600171717171600060418011600929900919990991990991900999990199999999991999990909039990999 -080109040400081010111200081313131300080414021500161714061500161605031500990999309090900991999999999909199990199990990099999999990929 -040809031004041109121000130206141500131616161500131718181500130118180500092909099999100901999910909999099999999099991099993999999909 -040802090900101011090900061213050300041413150400141413151600040113161600091999019999999990192909099909999999090999999109903999999099 -050809090400040809090100101011111100101006021200131404151200040315150400009099999999993909199990999990109999990091999099909999992909 -080104060500080910101100080910101200080913141400031502140400041515161600999999300099199999990909909991099999999919992999999190909099 -040808090300050209091000041112061000131312141000131315161000040117161600099299099990199991999999909019999990099909999099903099999099 -030809100600041109021200131314121200131315151500161616161704181801040500299099190999119909919999199991999999999019099999090300999999 -080109100600080909101100081213100400141402101500051616041500031617041500999999399090910999990909199901999999099910990999999999920099 -040808010900060808090900101111111100051213130400140215161704141818180300099999993990909999919909999010909999999199990111090992999999 -060508010900101010110900121204110900121313110904141513161600031702161604909990903999900909999999099999999991909999091999921199991990 -040106040800090909080800100411121200101313121200100214151600101717050300999090309999909919099999099909999199999199999111999002999999 -060809010400100809111200100813141400100315161400040416160200171717170500099999993090901999991990099999999929999919199091909900999999 -080801060904080810101104121310101400121313151404120216170500181819200300999009939099090099999999909991099099909190999190990199999129 -080809090900080804031000111213141000061516141404151516170200050116180400999999999099999909029900999909909019909999199911903999999009 -080909101100080512031304080414140200151515161600171718161600171701040600999199902199099099091999919009199999999099999019999300999999 -080805090300100211121300100614041300101516161300101516171300040104171700990290991991119999999999099900999909099999991909903099999999 -040808010900050808090900041011111100120213131400120413151600120304150600099999993990919999199901999919009199999999099090999090929999 -030808080804091005110400091213111100090214141500161717170400161601180600299909199099999991099990999919909109091999091999999309999909 -060804090300040210111100121205111100121314151500161617181804160117181800009299091990119991999999999990999900991099999009093999999999 -080806091000080803041100121314151104121614151100011714021100051717180400990099999099990990299909990909999909999990993910999910909199 -040108080900101011090900101012130200141415051604141415171700041815030600999990390999009999999991119090919990909999199999990920909999 -060801090900101111090900051104121300141404121300141415021300031515160400099999039990919909910999099909999990999991999919999909929909 -080809051000080809091100121314141500120414160100120402160300120617181804999099999099099999900900909999199909399919990999999192990190 -080801090400080810091100121314150600120402151600041717151600031705151600999999939099910900019990909909999991099919990999999999929099 -060804090300100811120400130802141404151617141400151617181800051601181800990290991999919909190900190099999099999991999919999399909999 -080804090500081010091100121203091100121213021104011415161104061718191900909999999099999900999999219999999900109991993919091109901999 -080809090904080810110100121204131400151502141404151506051600031717171800999909990999003990919999919990999911909909099990929990999909 -080909030600080910111100080210111100121310141400121215161704041804010500992999999099999991999909999919909911999991999000090030909999 -040306080804091010100200111212121200131405151500161617171800161617010400990900299099991909991999999099199099999001999990999930990999 -080809090300080210110400121306140500121515161704121515160400120118181800999299019999190991909919999990009990009999091999993099999999 -060508080900101108120900130414020900130414150300131614151500130117170400999990099999091909019990999999129991999099990199993909999909 -080808080904011011110904121211110500121213141500021617041800061616031800999909099993990091999990909999099909091909091909909999999299 -030805090400040808101004111202101000111313131400111516160600171701161800290099990990999099199991999919909999099919990099909390999909 -040408090300101008110200101212131300141212130100061515150500000000000000909290991999991999091909099099999999390990999990999999999999 -080809090900100811120300101314021504101614171504061817171500051920011504999999909999912990199999110909999099909099990091999039900990 -080509090900080210031100121314141100151304141100161616161100060104040400999999012991199919999990999190999999991099999990903000999999 -030406080400091004080800111010121300141516121300021516171300051516011300990992099099999919090999099199999999991990991910999939901999 -080808090300100211090900121313141400041313151500161616151704040118060500999990999291119919999919999999909999990199999900003090999099 -080809100300080809111204131309060200051409151600171717181804191901181804999299991999991009991999999909019099999000199919090399999990 -040808080800091010100100090911111100050212121300141515160400060315170400999990990999993999919990999991909019999190090999909909992909 -080909010600080909101100080412101004081313051400151616161704031819190200999999993099909990990999090990919999090999190990099991921919 -030408090600101010020400110512131300141212151604171715151600171701181600990092009999910999919909999099199099909099999099999309999909 -040809090300060809020400100804110400100512131300101415131300101401161600099299999999910909919909999990109099999909999019999390909999 -050809090400010806021000040811121200041313031200041313041400151515141400019099991993091999991900999909999099299999090909999099999999 -060808010900100808090900110212131404111512040400161512051700031512181800099999993990919901909990900919909990999999991990929990999099 -050801040400091010101000110412120600131312141400021503161600171717161600099999030091999910099999909199099999991999099299911999999999 -080910030600080911051200081111021300081415161600141417161604040118181804992999919099099999900999199999109011999909999999003099999990 -080805030900081011040900041011110900121314150200161616171700040106171700999299909990999999909999999000919009199091999919903099999999 -080906101100080912130300081414020400151514161704151518181900050118181904999199901299909990919999999099109991009919999190903999999990 -040809090400010810041100120810101100131302141400131315141400160604050300099099900993099999999919909199999911999909999999909002909999 -030404080804090910080800050906111100120213111100141513161600171717011600999902009999099999909999099019999999990199090919991139999999 -080803090600101109091200021113141504041113161600041717161600181717010500929991999099999919900919900999909011999909999999909930909999 -030809100200041111121204130514151200131617171800131917171804131906011800211199999199999009099990099999019009999999999091099939990999 -040108090600100808111100021212051304141212151600141717151800140317150400990090399999909909190919090199909990999999090999999990929999 -040308091000111212131000111214021500110514161504111714161500061801041500921990991999999999910990919999999999909099990011990399909909 -060809100300110812131300040802131300141505161604171818181604171701191900991290919990999999199991999019099099909109999990090309999999 -080309100400080809111104120206111100121314151600121718191604051717011600299099990999909019999919099919909911999901999090099939909999 -030808050904100808041100121314111104121516170600021516180100191516181800999002999099999910909999090900999999091990999913919999911999 -040808091000110808120300131415020500131414161604130417170100181817170600999190991290999999019909199991909990909919999993990999990909 -030808040900100808090904051102121200131314151600131317181804191906011800299999990990999009109991999919099919099919099919090039999999 -080808090900020403090900101004110600121212120400131415161600050117171600999991929999999910909999009919099999099100990999903099999999 -080804090900010810110600051213110200141515161600141515161600141704030400999999900993199990190909119909919099999999999999990920990999 -040809090400010809020600100804111100121212111100131303140400041305151500019099999993910999919900999099999999999091999929909900999099 -080809011000060809091000111111121004051314121004031502121600171804191900999999993999990900919999190991999009909919099199921990919099 -080809090600041011091200011311050200141411151600141417041600041717031600999999099090011999991931099999919900999900999999999999909929 -080809011000111109121000111109131400050613131400030402041400151617041400999999093999000999910999999099999909999910999099929199911909 -060801090500100809091104120813131100140815131100160215041100041718180300999990939090190099099909999099999990990190999999901999991929 -080801030900101010100900111112041300110514140200151514141600151504060400999290939999999999191990909991919909190999099999999000999999 -040108080900101108080900101104120200101113041400101515151600051706031600999090399999199999919909919990019909999099199999900999990929 -080808090300060210051100121213131100041213131100141516171104181801170400991299199990909991099999999999999909090190999199000390999999 -040808050300090808101104121206130200121214151600171818151504170118191900990990999290991090919999919990919990190099999919093999999099 -080801040500080909091000041111111100120206131400121515130400120315160400999999030099999909910999999919099109099999090999999909929909 -080805090600080410091100021213091400151516171700181516171704180316010400999999909099099909090911199199109990991999999999099930929999 -080804091000111112090600111112120400131302040300131415151600050115150400990099099099999999909999909090099919999919291991903999999909 -030809100500111112021300111104141400061516141704181519191704181519011700211999991099009999910999999990919090909999990091099939999999 -080405030900081011090900080212131304141516061700141418181700040118181700099999902990099999919901190919999910999919999190903999999999 -080501090900101112090904101314150600101313161604020403161700181919191700099990939991109099999900009999999990901999090999919299919999 -040208090900061011090300121011130100121011141400041015151604171815150500011999199290999999999901139999999990999909099999009990900999 -040104080800090909091000111212041000111202061000111314151600131317050300990990390999990919999919099991999990999019999911999092999099 -080909090904081010101000080204110100121314151604171814051600030619191600999909999099999991919909039919099190001090999999920999999909 -040808050300090810111200131302141504131306141500161717171504161601181900999990990299911900199991990999999999999100999999090300999909 -030808060900101112131304141402131305141415161704181818180100191919202004999092909091199099199991990999909911009991999993999009999990 -080808010900041010090900111010121200131402121204130515161700031815060400999999903990919999990909999019999919909010099999999900921999 -060801090904101112090900101313141404101505021600101718181600190418031600099909039990109991999999190909199909199099999099909999909929 -080804010900080810100904051112101300141415161300041406171300031818180200999999903999990090999900919900099990990990999909999991929919 -080105090400081011121300141111151600141702151600140418151604031818150600999099300990190999900999199999999111999909999099029999999909 -060308080400091008081104091213141504011602151500161617181800051919191900999990299090990091909991900991999390999919999999991109909999 -080309101000080409101000110209120400131313141400150616141400051717010400299999999999099919909919009919099999990919999019909030999999 -080801090904080810090200111106051200111103131200041415161200041716161200999909939199019990001999999999999992199999990000999999900999 -050808030900100808061100121314111104041314150200161617171800160117170400999290999199909909099909990999919909190091999190993990999999 -080901101004080911101004081211130400051411150200161611171700161603170600999909939990099099909990009909999091199999199099999990999299 -040808090600100808090100110204091200041304091200141313151200161603150500991090999990993901999990909019999990999999990990909290999999 -040106080800091002080300091112121200090413131400091504131400161616160500999990309291919999199911999900909999999909990999990999999909 -080808091000031109091000120204131000140605130400151616171700041601171700999992199999099991099919909199999099991900091909909399999999 -080409101000081112101004131414060300131514161600131702181904130105191900990999009990999090099909999919029999999111999919093909999099 -080901050600080910111100120913111100121414150200120414151600120403170400999999930090099909199999199909919999199099999990999910909299 -080909010500081011121200081010121204081314151600040317021600181819061604999999903099909999999999090999199000190999999911992109991990 -040808080300090910041104090902111100121213140600121213151600170501151500999290919999990099199991999919099999999990099100909399909999 -040801090904101111121200131114121200131502161700131515161804130503061900099909030990919909999999199991009919999999099999099290909909 -040808080400050609100100111209041300110409021300111409151500111414031500099099090999913909999900099999999991099091999099999999999929 -080809090300101009091100101002040500121206041300141415161704140118181800999990999299991999199991099190909999999190099090093090999999 -080809090900011010020600111213131404040313131500161617171800051617170400999999011993990990919909900099909929999999099090909990999999 -040108080400091010101000110612131400111515130500111515021600031718161604999990309090999909190909199990909999999991999999999919921190 -080809090400030509100100111204131400121202151400041616161400171717061400909099999999003929919999919190999911190990999999999099999909 -080805060900080810110900121213130904121214131500011614021504031718191504909999990999909990099999900990999919999199993910099919921190 -040809011000050811121000030813121000141413131000141402151500060404151500009999903990919999199999999299999999099919099199900099999999 -080905010600080910111204131415151600131415021704131403181800131419180400999999903099901000901990999999919999109991990999999290999199 -060108040300091010111200131002141400131515041600131517171700051818181804990990309299991909919909199911909999099999999099900999999990 -080801090904080810091104121313141100151305160200171706181904171703201900999909939999090009109999199090199999190999199091099919999299 -080809101004080609101000111109120100111109131404150216170500181804170300909909999999009999999991139999999990000199099119909099999929 -080309091000080809091000040411021000120504131400120615161600171717011600929999999999090999019990999099199099199909199009909039999999 -080604090900081010091100081210031100081202131400011215040400041215160500099999909999909999999991929991919091199999093999999909900009 -080801090500101109091204131114151600131102061700181819202004181803202004999999039090199009990991009991909990999919099199099999992990 -050306080800090910080400090211111100121212131300141414140400040115161700999990209999999999000919999910909999991999999999903090999009 -060105080900101112130900141115150400140415150200141616171700141603171704999090300999909909099901909909999999199909199999999999999290 -080910100400041110100200011212131400151212131404151617181400151606050300099090099999191991991939099999999099909009999909999002999999 -080803090900101104060900101112130200051114150400161117181804161601181800992990999999999999001909919990199090999991090019099399999999 -040105080804090909080800101011121200101004131200021406131500161718031500999900309999999919909990099999099909991099099099919999911299 -050601080800090910110804090912110400021312111400151516171700030418171700999990030999109099990999099199999199099109099999929099990999 -040108090904101008090900111212130500141212151600021715151604180619031600999900399999099991900919099199999999991999991190009199909299 -040808010900040808100900111213140900150516020900151716181804061716031800099999993990901999099900919000199999999991999099009999999929 -080109090400080809091000111213021004051415151000161616171000040618180300999099399999199909019990990009199999199090999999900902999999 -080805090900101104090900100212131300101414130300151616161600040117060400990999099990909999909911199999999199290199999999903090999099 -080809030400050909101000110212101000061312140100151515161600040417161600902999999099999901999909099919999019399911999919909099990999 -080403090400080406091000080402091000081112121300011415151300051615151300092099999990999999099990109991999099999019993990991999901999 -080509090300081009091100041213111100141516020600141517181800141501041804999999099290099990999990999090199911099990990199999309999990 -080909101004111213101004011415161604171819162000170221032005172121062000099900999990909090099930990910999190099999991929091999999099 -080909061004081109121304081114150300081616151504171616180200170119200500999009999099990099009909029999999099900999199991993110999199 -080808010600091010111204051010121200131415021600131315171800040315170400999990903099901009999999999909109991999090099999909990992999 -080109040400080809101100121212120400131302040500141415151500141404060300999999390099000919990999999199099919990919099999999902990999 -020809100500111212121204111113130100141516161704030416161700181818061700110091919999999099919999939199099099902099999990999009999999 -060108091004110808120400131415161600171402051600171418181804171419190300999000390090919909919909199991999990999919990999099902999999 -040403080800090210081104121313051100141313151100161617171700160118180600992990099991119019909999999199999990091009999999993900999999 -040408080300091008081100121212061100131314151600011414170200051818181804999990099299099909099999999990019901999991193991990999909990 -080909101000080909100100080411111100061202131300041415150500041615170300991999999990993999199909999991999000999019990990990919909929 -080808080900041010030900050602110900121313111100141313151604171801150400999999912990999999199999999001909999990990999900000390909999 -020808080300090410100400091111100400011111050400121314141400061313150400199291999990990999099919909999999390999099090999909099999009 -060408080300091008111100041202111300041415151300011616171700051616171700909990999290909990999909199901999099999091093919999999909999 -040808030900100802111100101213141404101515141400101515061600040117051600999290999199919990199999990901999990999990090999903099999099 -080509101000081111061204011111121200131313130200141415161700140404180300909999909090909099999939199909919999990909199991999019909929 -080409031000080611111000080411111204130502141400151617141400150118181800902999919999099999990909990091909991990099990119993909999999 -080808091000011112091000131304091004131405090600141415160400021717180300999999909999000990999990990919999990099999999000909999919129 -080910110300080212120600081313141504161718180100191918180500191920202004911299199999199999190999000091999009399999999090999909999990 -080804090500080304091004021112091000131114151000061617181800161601181800990099299999909019999999099190999190099109990109999399999999 -080909090400030602101000051104101000011111121200040413131200141414140400199992919099919990999909099999199391999090999999909900999999 -080105091000080804111000121313131300140206150400161617171800161617031804990099399999990991009919999199099190099199999190999999999290 -080104040904081011110900081011110900081213140500021513161700181818030600999909300990090999999999999919099909099190991990919990999299 -040604030800020909090800101111040800041111121300011415151600141405151600999990002991999919999919999999009099099190993090999999999099 -030808080400040909021000111109121200111113130500141415161700141404010600299999991090991999991999999990199999999091099000999030999999 -030406080904101010111200130402111200131414141400131516161700130116160500990002099099999999199990199999109999999199090099993990999999 -040108091000111208091000131208041000141208020400151506161700150316160500990990399999190909999909999099099991990901099990999999992909 -040809011000041109121000131409121000151409161600170318161604050618180200099999093990009999999900919099919999990999999299009991990919 -040108080900101108081200051314061504161616021500171818190300171818191904999090399090099991900991990091999991990901999999999992999990 -050108090300101008081100101002111100121314151600171306151800041304151804999290391999999999199991099900909090990909099999909999990990 -080804090900080205090900031010110600121310141500040416161500171717011500990999199999909921909999109909199099090991999999990039999999 -040809011000111112131000111114141400050415160600171702161600170318181804009999003999919999190999999001909990999919999199999099929990 -080808080500091010061104011010121304141415161604141417021600181819190300999990990090999099990939000901999991909991999919909199999929 -040809091000041109101000121113140400121113021500120413051600120601031600099999099990099999009909109999199999199999199090999399909929 -040108080400090908080200050910111100121314150300121304161600041306161600999090399999191999091909999990199009299990999909909999999099 -080309091000080811061204130511141400021511141400161617171700160118040400999099299099990019990999999109999110999919999199993090999099 -040804010900061010100900021105121200131314141200131303140400151617171700099999003999990901909910999199999909999999099299909999900999 -080910111104030502111100121213141400150616161700151516161700041819011704119902919999099999190990999901099999099999999099999039900990 -040808030900101011110900101011020900121213131400121215061600040501041700992990919999999999999999109909109919999990099199900390999909 -050804010400090910101000091112131400020612151600171715151600171703041600099999003099199990990990909109009999991999999999999999992909 -050809101100011212131300141515131300141515160200171718161604170406040300000099999093919990999999999999919999190099999099090002999999 -050108080800091011120400090911131400021511061404161718191404161603191400999990309999100990909999909999099119901999991109099299999999 -040808080300090910110400050602111200041313141200151513161200151517011200099299019999990909199990119999999090999990999991999039990999 -080909090400080810031100020412041100131314041100131314141500060501041500099999999099129919999909099190999990999999099190900309999999 -080801090900081010090900041010111100051204130400141212130200060315161700999999939990999999990909199909109009999999990991909991992119 -080109090904080810101104121310101100021415160400171715180600031715190500999909309999090019999919999910909190991990999990999909929909 -080910011100040412121100131312120400141415151500141405060200040316161600009990003999990999990990999999199909999900199999909991992999 -040809030400100811110200061213131400011213131504161217171800051217181800992990919090991990991909919999909319909909090999909999999999 -040809090400080809090100021010111200130414141200131516051200130317061200999090999999193991909919909190999909999990990099999099929099 -050404010800090909080800101010041100121302111100121414150600031414160400999990003999919991900999999091999919999190099999999909929909 -080304060900081002111200130414111200131516171200131818171704131818010500299099909091199999199909909991099091999009999999099930999999 -040801050900100811110900120411130904120214141400121515161700121518030600999990930991190919999990900999099199999190999990999190999299 -080304090900081002090900081112131300111112130400140412151500160406010500290999999991199999190999999999999901990991090999909030909999 -020808080300090910110600090910120400131414150500161414171804160119191904199291999999900999999999909190099190999999090900093099999990 -060808091000010811091000121211091000121204091300021404051500161617030400099099999993999991999990099999999909091090099099919990991299 -080909101000080909041000081112021304041212140500011506141600171717170300099999999999909990990999100909199099099199993091990992999999 -080804090300080810090600111202131404111104151500011616161600171717170500909299999999919909100911900999999909999199093999990999999909 -080909090600080805101100121213131100120313131100141402151604041718010400999099090999900999999990999999999999199219199991091130901999 -050809101004011112100200131412041500061612171500161612171504181818180300019909119993911990901909999099999900999999999999090992999999 -030809091000111212021000111212051000130614151004131616171800130416010400299099199990911999999999909099999990009009199991999930990999 -080403090500101010090900021111120400131111121200141516161600171701061804099990929099999919909999009199999999991099991199909390999900 -030408080400090910111200090910111304050210141500161718181500060118181500999992009099999999990999900919909011099991990199903999999999 -080802090300080810111104040510121100131312120600141415161700141401041800901999911299999000999999999991999909999010099990999390999909 -080403040900080810060900021112120900131104120900141115151500140416010500999099029999199919909911999090999999990991099999999030990999 -040809041000020803111000120504111000121213111400011515061600041515161600919090929991999910999999999990909990099199093999999909909099 -080909100400081106100400081111101200080402131200051414151200031614011200990099999999909999990909009999999901199919990991991939929999 -080801090600080809091000111213141404041516170500031502171700181919191904999999939099999900100990990091999991099999999919920199919990 -040408090300101112121200061111130200141515131300141515160400140105161700900290991990999999991999919009999991999990990999993090999909 -080503090900101111060900121213130200121214130400151516171704041801171700092990999999999909001999919999909991999019999009090399909999 -080901101000080909110400081213131300081415151600021718151604050319061604999999930999900991099999999919009199991999991199009109992990 -050108080900101108080400061212120400131415150200131404161600130403161600999090399090199909919999999909109099199909199999999999909299 -030408090400101111121300141111151500141616151500021716181804061705011800909092900999990919990999099999999991991991991199009039999999 -030809101004110809101000110809120600130209141500040514141600171718010400999902999999909999999990199199109119999999099090909030990999 -050809101104061212131400150212131600151718131604151718131900151703010400000009999090999999990901199910999999909999099990999930992999 -030808080804091011110600021211111304141215051604141417181800191901181800299909199991999919990999900190909909009909099199909399999999 -030808080400090210101000090911110500121311111400151617171400040106170400299999919099199991990991999999999009090919999199903999999009 -080809090900080810110100041202130300141515131300141515161700140406051704909999911999993999199900199909929099999999999900999009909990 -080801060500090810111200041313131304140215161700181815191700180315191704999999930090010909919999990919009190991999999909999999929990 -040108080800091010111104121013131300141502161600051718161604061918180300999990309991909019099999999199999111990009999999090992909999 -080804030500080609091004110209121300141415160400171715181800171701181800999999902099999000990911909199099999999190099109999399999999 -040804010600090909101000111212101000110412131400031502160500171717161600009999093099909909999999999999109991999010099099929199999999 -080909101004080211100500080412130600080414140100031514161700181818181700990909999991190990109999109999199999392090999099999909999909 -080909101000080909110100081213141504081604151500170218030600170518180400999999990999913999109901990910099999990199099199990929999909 -050108080900101011040600101011110400120413141500161602140300161617171700999090300099199999999999909091999909190919299919999099999999 -060108080200091008041100121013131104121413131100121415160300121704180500999190399190190999099909990999999909999909299909999909900909 -080809090300040810111100121210130500121410021504011610171804191919190600999999990299999900919999999999109091009099993900091190999999 -080808030400091010110200090905121200130614151204131616171800131616010400992999919099911990991999999990999900009999190901999930999999 -080901101004080911111200080913111204080214061204031505161600171819161600999909930991190999999990990990999190909199999999921099910099 -020808080300091010110600091012121304011412121500041617170400051818181800199291999999990999909919900919909309999009090999999099909999 -080305091004080802111000121212131004041415131000161718131900161618010600290909990999199999109999190999999000999099099900990930999999 -080808010600090909101104121314151504120416151500030502171700181919171700999999903099990099019900090909999991999919099099929199919999 -040801090900100811090900101012051300141414041300021504061300041515030400099999939999009999190991099919999999091909991990909990999299 -080304090600081011091200081305141200021516141204171718141200171818010400299099909999009990999990999109999909901909999110999930999999 -080404010400080909101100080909101000121314021500121304160300061305161600099999903099999999990909099009919990199901999999999992900999 -080808010500040409091000111109121300111112121404151516061700031818180200999990903099091999991990099999919999909999199099999001929919 -080901101004081112101000131406150200131615151704181819201704181805031700099909039999019990901900999909919999909009999991099029999999 -080909060400050909101100011213101104141212151100140216171700140418170300090990999099999990999930090999999190099999991119999092990999 -040803090900100805020900110812130600111114141504161714141800160119191904992990999990991909019999999990109999900999090199993090999990 -050801090904101011110900121311111404151302141400161317180400061317190300099909039999099990990909990099199991990919099919909919999929 -040108080800091011120500090413121200141413021500141413161700060316160400999990390090109999199990999999909901999991099999909990992999 -080801090904081010101000021106121200131114121200131104151600170304180500999909130999999910909999099199999990999900099999919900929099 -080409090500081009091100081010121100131302121204131314151600030617010400099099999990999999099999199991909919909991999900929030990999 -080809100300110209121200131415121200130615160400131715181904130105191904999290991999119901999919999999909990999090991099093009999990 -080808090900101106090900101112131300101412120200101504041600050103171804999999099999909999909909999999909019199109199999903901999210 -050408090300100208090900111213130400141213130400141215161600141701160600999990099299119901999999909099999909099999999109990399909909 -080103090900081004090900111012120200131014140400130514141500130406040400992999399999099909991901919990999099099099999990999000909999 -030808080500040209101100121213131400121213041400041516161400151501170600299999919090190991909999999999999910999019990990999309999909 -040503080400090904081000090906080200111112121200131114141500130114140400992990099099099999990999919900919919990999999090993990999999 -040803091000051111111104121213140200061515151500161616171704181818011700092199099190999099991990099999019099999919999919099039999999 -080309100500080611111200130211111200131414141204131516161700130116040400929099910999090909999911999909999999909909991990993990999099 -080902100400080811051200030411061200041311141200151516161700151501171700110099919999909929999999099909999990090019099099999399999999 -080808080300090210100600090411041204131415121200161617181800160105181800999299199991099999990999090100999900991009999909993099999999 -080808010500060409090900101010100400021112121300041412151600031404161600999999903099099909919999999199009199099190990999999909929099 -080809010600050409091000031112121300041414021300151416161300041716161300909990993099090999919929919919999991190990990999999999900999 -040809090900100808110100100212111100100413140600100415140500030415141600019999991999993991999919099990009099999909999099929990990909 -040809010600041009111200021309141200150509141200150416171200150316171700009999993090110991999919909109999999999900990999999999929999 -080109090600081009090400080511120400130211141400151511161700151504031700999099399991090999999909009199099119999099099919999929990999 -080910011100081010121100131415120500130216120600130417120400130317170400009999993999910999199991909919999190099009999990999999929909 -040808090300100211120600131414041500131414161500130417161500051717011500991290199999900901099999099999999091999909990990909939999999 -060808030500090408101100091204021300091414141400091515151600041717011600992990999099919990910999909900199999999919090999909039999999 -080805090900080810090900041112120100131414151500040304021500161616160600990999999999009999909909939909199090990999999901992910999999 -050806090900031011040904121314141500121314141600120217181600120417011600090999099999099029000999999999909919099119991919990939999999 -030809101000111112101004131302140500131315150600161616161704040118171700219999919999099099109999109999199999090919999999003099999099 -030804090400100811021200041313131300141415161600141515161600061717010500990992990091110909919999999999919909999999999909909030999999 -080105090900081011090900081211130300080214141500161717181504061704191504990999399999999991909910099999929119199099990909009909999090 -050809100300110909101204131402101504161616171700181919171700060119202004099999099290999009991911110199999999990199999909903909999990 -080801090900080810091100041213141100121205041100151616160200060317170400999999939999019909019990919990099999990999199991902090999999 -030809010400100809111200130609051400130215161600130417161604131717181800999992993099010919990990999991009119999909999099099909999999 -050808010900041010090900111010121200020413041200141404151500031606151500099999903990919999909919999190099099991909099999991999929099 -080809100500111109120300111309041400061313151400161616161400040104170200999099090999009999992990999999099999990090999999903011999919 -080809051004111112131000111112121000011414151600041404020600031717171700990909009999900999999991999919109399999991090909999919929999 -050401080800091011080200121212061300141414141300041516161300041515040300999990039190019999001999999990999999990909999999999092909099 -030506080800091011120804091314151504160217171700181819202000181801202004999992000999999090009910090910999199991999999109999399999990 -080809031000080811051000120213061000141413041500161717181800041701181804992999919999109991999919909199909909991990091909999399909990 -040805090900101104090904101112021300141112120300011516171700181818170600909990099999999099011999999099129099999091993119999099999909 -040808080804010910021100121212111100130514151500061616150300041718181800099909119993919990919999999000199999990909999992990099909999 -050108090400100808111100101212131300100204031300101415150400160415150600990090399991909990999999099999999109999192099199909999909909 -080808090900100211090900031213130600041213130100141516160400041515160500999991199999109929199990909999999099399990990990909999999009 -030608050904101011110900101011110100040212131400151612121400041717171400909902900999990999999999939919199099099191990199909909999999 -080304090400081010111200080213061400081516141400171716181804171716010500990999290099990999190991909919999011999991999099099930999999 -050108080904101108080400101112130400101415160200171415181800061403181800999000399090199999199999109909199999190999199099909999999299 -080809010500101109121304140609041504161617171700161618021900031818191900909999993090001009901909990999919909999991099919999999929999 -060308091000111108091000041108090500121308091400150216171700041616010400999990299999990999999999999019909991990111090199999930909999 -080909101000080511100400080312131300141516131304140217170100041817170600099999999999000999099992999091999919909190990993991999901909 -080809090904041010021100121010130300140415130600161717181800051701181800999909091190999999912909999099999900990991090919999399909999 -080804030900080805101000111213101000111415160200141415161700060104160400909299999199999909099900999999919099199999999110903990999099 -080808030500020406090900101112130904141515131604171715131800171701131800992991999099999910099990990109909199009999999009999399999909 -080910100300080910060400080902111204081314150500161718181904160118181900999299999999909999190909900991099110091999991099093999999909 -040401080800090910081100091213131100020614151100160305171704181818171700999990039999100999909990999100999999091900999999012999999999 -080401090900080810090900111210100400130614141400030515151500161617020400099999939999009999999900999099109099999991999099929910991199 -080809090300101006090400101011121300141516021300141718181304140401180500909299999999990999019990099999199009199909999091090399999909 -040801040900040810101100120813141100120502141400120415150400120615150300099099939090199999999901999991909900999919090999999999909929 -040808090900010808101000111111101000061202131400041204051500031216161700090999999993919999099999999999199011099900090999999990929909 -080609040300080209091004080504111100081213111100141516161700140118171700999999090291191099999909099999999900991099991099993099999099 -080808010900101011120900101005131404021516171404181916201404030620201400999999903999110999900999990190099190909190991999029999990999 -050408010900101010110900061211110900131214150900130216161704131803160400909990903999900909999999999991999919099190091999099990912999 -080906101104080912021300010914150300161616171804191920181804191920200500999109901190999999012931999991199991909009999909099999999909 -080804091000080304041000111112051000110613141000021515151600171717011600990099999992990919099999999990099999091009099990919139999999 -080808080400010910111100090910051200131410031500161402170600041417170400999099099993109999900999999999909009990912099999909199999909 -040801090900101010111100061213111100121205140200151504161704151518180300099999039099919909099990999990919999199091999991099092990999 -080809011000080809101000110509121200131406150200161417170400041403170400999999993999019900999999199090919099199991990990909299999909 -040308090900100408090900110608020400121213131400121515151500051616010400929990999990999909909909199099109999099019999999909030999999 -080109050400081009111100121213131100121213130400060214150400161616170300999999390090009991999990999999999999099199999000901999999129 -040108080800090910101100090910121300041414050400031502060400151516161600999990309999190999990999099991009099999919999109929090999999 -030608080400091011121304051411151500160211151504161718190100161717191900999992090091990091909909999919999090909109999903999999999199 -050601080800090909091000111212131300020412131304141415160400141403161600999990039099999910900999999199999909901909099909999999992999 -080803090900080810020900040410110100121210131400041513131400051606171400992999999999011999999990939099199901999999990090990999909009 -080509011000080811111000121311141004021306151000161717181804192003181804909999903999190991909919990199099990991999099909019999912990 -080309090904080802101100051210101300141215161704181215191904061201191900299909999099199999190991999099909999000990990109009399999999 -030808080200040409101000111209131000141409150100141405161600171706160400299199999199999900999900919999199900399990999099990990990999 -080309101000081105100200081112121204131104141504161117180100161717190600921999999199099999991999990099919099109901990003999909999909 -060308080400090910081100090912021300141412051300151512161300041701041300929990999099009999910999919999999909099099999911990399909909 -080809031000080809111000011213021000051213131000041406040400041515151500999299999999091999019931999999199099999000990999990990909999 -060809100400111212131404111215020400111515161600171717161600050103181800090099009999900099990909199909199999999199999999903919999299 -080801090400101011121300101011060400021411150500161411171700161403170400999099030999900999990991099199999199090990999909999990992999 -080109040500081011121300081010141500080206141500031617141504161617140400990999309091000999990999909999999109999199999099029990999999 -080801090900101010090900041112040400131302060300130514151500041616151500999999039999909999190901099919999919999910299019909999999099 -080808090500031002091104121213130400121213141500161617171700160418010600999992199099100090199999999999909991999091099999999030990999 -080808060300090909091004011112051000111113021000140415161000141404171700990999099299999090999931999991099999190911990919999009999999 -030809061000040411121300141402121300141405121500161617171500040117171500219099919099999900199991909990999999991990999090903999999999 -080910101004040911120100041111131400030602151400161717181400161717051400099900990999903990919909919999999991192010991999999909999999 -040104080800090909081000111212131000040204041000141405151500140306151500999990309999909909109999909019999909099199099909999999929099 -080204040500080909090904101111120100031111131300141415161300141406161600109999190099999019019999939299099999999900999099999999999099 -040809101104031202101100131415101100131616171700041616171700181805010600009909909992919991199991909999199099990999999909990030999999 -080109090900081010110500121010130600121404151500121617021504041817170300999999309990910999919909909990199099999091999919090999909929 -050108080900101108080400121313141400151313021600171818181604060319191604999090399099099901999909199099199999090991999999002909999990 -080809090900030810110500061204021304141515161300141515171300141801171304999999909992119999910909010909999991199990999999990399909990 -040803090900100811090904020811121200131311121404151617141400051819010600929990999999999009909919999199999910909919990919900030990999 -050401080804090910080800090611121200020411121200131411151600031711151600999900039999109999090990999199999099991999991900991999929999 -080801090904080810110500121010111304141516110200171818191904061818190300999909930999099999990909100099999900190099199999009999999929 -080809091000011109040600051212130400141212151500140216161700140416160300999099099093109999199909009999999090999199999191990992999999 -060808050300091011041200131111141200131304021200151515161600040117161600990990909290099999909999099909999999199001999999903199999199 -030808080804091006110500121013141500161017141504021819191504181819011500999902990999999919000999999190999990001099999190019939999999 -050809090900010810100400060804101100121212120300131415021600041414171600099999909993099999990900909919999999999019290919909919999919 -080401090900081010101004111213131400151502131400151516171400030506180400999999030999999001990901999991999919999909999909920909999009 -040308080900101108120900100413120900021415120400051616171700061616011700999990299991999999099990909190999190999109090919999939909999 -040801091000110808121004110513140200111313041500161617171700161606031800099199931990919099901909099999919990990999199999999091999929 -080910110600120413130100120414131500160214171500161814051500161818031504000090090999993999199990909999099019999190999999999999999290 -080901101000040909100600041112131400041112041400150212031400051616161400099990939999909999100901909999999099099199990999901929999999 -040608030904100408111200131308111400131308110200151617181800151601180500909200999199999900991990199999919999199919990009999390999999 -080109090400080810061100121213131100120213131100031404151604171717180500999099309999009919099999999999999199099199099090021909999909 -030809091000040808111100120602111100131304041400151516171700151505011700299099999099999909199990199099919999999000199009999939990999 -040809101004011104101000121213141500120613141500161713141800051702140300000909099993099991990991999999999909990999999991909192990199 -080808010500091011121200090411121200091313141400151613021400040404060300999999903099019990999999999991999999990991990019900002999999 -080403090600080210100500081111121200131111041200141414151500040104151500992099091999190991999909999999999199991990099909903099999999 -080901061004040911111204130914150500131616021700131616171700131818031900099000939099990099199991909919099091999991999999999091999929 -080808090900100305090400021111121304141111151600141715150600140104181800999991299999909919900919000999999999099919090199993909999099 -060808010400090910101000091111120400051311141400030402141400151515160400999990903099099999109999909099099909999019999999929109999909 -080309101100080412120200131314141404131315150100161615170600161604180500921199999199991900199999990991999909399099999900999009999909 -040808020400090808101000011112031300111112120400141516171700140605171700991090991990999991091939929999999999090090999099990099999999 -080808090904101006090904111213140100021515161700181819192004181803190500990909999999909090909911139199099099091990099999099990992999 -040808080800090902101004111205101000131415161600170304160100170618181800099999999099119091999909099019199990990209999993999909990999 -080805040400010909090900101112120200131414061500161614041500161604031500999999000093999991999901919099919090990999999990999099999929 -040803090500100804111200021304141500131316141500171716161500171701061500929090990991900919990999999190999910099999999099999399999909 -080808090300101011121200101002131304061415150400161715150400050118181800991299919999909999199999190909199909090999990199903090999999 -060808080804091010110100091210040500091314141500160214171700041818180300099909990990913991909999999910909999099199990909901999999929 -080803090500080810111200131314150200161614151704161614181704190401061700999099920999911990991999919909999909909991999910009309909999 -040108080400091008080500091010111100091202111100041213131400061203130400999090399991090999909999999999999119999919090999999990909299 -080409030400081009061100101012021300141414141500161616171700050104171700992999099090999999100999199909109999999199099909903099999999 -080909100400080911121300141402050300141415150400011617171804161617170600990099999999911900192991099999999909999199093990099999990909 -080808080900100511090904101111121300100304121300020614151304161718011300999099999990999099990919999929999999091909990910019139911999 -080909090900100411110100121311110400120514141500030402151500161616040600099990909990993909999990909909199999099919999099929100999999 -080109090500081009090400081011121300080214040400151514141600061517031600999099399999090999999910009990909199999190999990999999901299 -080803090900081011110900041004120200041313131300141414140400040601150500999999929990991909991999009909919099999991099999900309999909 -080109101000081109121200080409121200131309041400130215161700040603160500999999390990109999999909999999909910999199099119900990999299 -080808010900101010100900111212131300061202051304141516041700041818180300999999903999990909919999199099999910909919090090909199999929 -050809010400101111111100101012120600131304121400131315021400031616170400009999903099999990190999999909999990999991999910999109929909 -080808010400040909101000040909101000111104120500130214150600131414160300999990093099919999999909999919009990999190999990991999909129 -080309100500081102101200081113041400081113151404161113171404181819010600921999999099919999190999999999099999900990990910090030990999 -080809011000080809101000111213130500061213131400040415160200171717030400999999993999999900019990909099999999199099199911909190999299 -030408080800090210110400090906121200041314121200151514141600171717010500909992909999110991919999099999999099999091999090999030999999 -040108080400090910081100121314111104121302150500121316161700180616160300999990399099909919099919990990099910999919099991909992909999 -040808010600020809090900101112131300101111140500101504161600030404161600099999913091999910099999099999099999099000999999920999999099 -080801090500080810090400111111111204130214061500161617181800160317181804999099939999019999910999900919009019990919099999999999992990 -050809090300100809090600111202041300141516171304181817171300181801191904999290999999099909190991999019099019909019999990999309999990 -080809100600020811120100130411141500131611171500131611041804031605181800911099991991903919909990909999099999999990099099029999999099 -080901101104080909120500080613141400151613140200171813191904170403191900999009930090909999199909199099919099990099199999090999999299 -080809101004081109100100121109131400150509130200161718191900060403191904999909999990913999999900119099919909990909199099900999999290 -080809010600041011111100121213051400121213021500031617181804041717181800909999003090999999991999999999019911199199092909099999909999 -080805090900081010090900041102120300130414141400131515161700131506010400999999009999919999119900929991999909999999190901999030999999 -080409090500081009031100081213141104081515141600011717140200041706141800999999099099992990099990990909919099999099193919999991909019 -080901100600080911121204081313131300141502160500171518191900031504191904099099930999019099919999999991999110091990999909929099999990 -030806090904101112131404101502131405161718131404191920211400191901212100299909109099999091099991990091999010909199999100999399999999 -060801090400101011111100101012121300020512121304140415151300161703181800099099030999199999099999909109999999901909990999919990912999 -060108080800090910021100090912040300131313131400051516171404151504181800999990391199919999192991099099999999990000999990099009999999 -080910040300080811121200041302121200141406151500161417151500160117050400000999999299199991199909199910999999999999990009993900999999 -080801090900101011120904101013141400041506161604031515161600171819020500999999039999919099910990099990199099909999999999929019911109 -080104090900081011090900061012120200131012041400040415051400041515031400999999309990109999199909919999019099990909999009999999909929 -080104050900081010110200121010131300120406140300121515151500041616161600999099309090911999991909999999199099299909990999990999909999 -080910010400021110101200131106141400151504141400151504051600031717161600119991993099090919009999999199999909999999999999920009999099 -080910101000080902060300110912131300141515041304161515171800040105181800999999919299109909999990099019999999000999990900903099999999 -080306090900081011121204081314121200021314151600041315150100051317180400299999909099099090999999999199909109090999999193999099909009 -080803040500080809101000110612101000111312020400141415161700140104171700999999920099919909999999999909199111091909999909993909999099 -080403090904081011120900080613120200141415161700141415181800050115181804092909999990099999091999999900019991199999999109903999999990 -080809091000030809091000110612131000141515131304161515171704021804010500909999999999999929909990999190909990901999999919011030919999 -080910060300110912131300040912140500010912020400151616170400151616171700000990999299999909919999909999199309099191990910999999999999 -080808010900061010110900121010111100120413051400120315021600171515040400999990903999909999990999999990919909099999199911902900909999 -080809010400060809101000111111101000040204121300141505131300160317171700909999993099999909099999199919909990090199991909919909929999 -060801090900101011090900101004121300040402121400151515121400040516160300099999039999019999010999999009909991999919999999909199990929 -080109091000081111091000081211051004080213141404031506141400161517180400999999399991900999909919990910999990909199999999929000919099 -080809031000080809051104011213141500161614140200161617171700040604181800999299999199009099091930999919919919199909999999900009999999 -080509010600081009111100081009111100041213141500031602151504171616180400099999993099999999999900099999109001999919999999029109919909 -030808080600091010021100091012131404151515130400161617131800160401130500299999991099919999190999900091999999099919999000990390999999 -030408040500090910111100090902121200041306121200041414140100151516161600990992009099999999009991199999999099999001990993999099990999 -080304091004111202131000060414131000151514161600171714161800171714010500290901990991199999199990999099009999990999999910999930990999 -030809101000040611021200131415151204161715151204171718180100191919180500219999919099911900999990990099999999100991999093909999999909 -080805090900081004110100121313131400120415061400121617171400120403170200990999090999993990019909919990099909999999999099990291999919 -030808090400101112020600101113131300101114140400151114141600151501050400290099919999910999919999999991999999090999990090999300999999 -080910110200080305111200131313041400041515151500161717181804061717011800911199299199909909991999909990919999990991990909099939909999 -080809101100040212031100051212131100141515161600141515161600041706010400911999192990999991999909109999199099999999999909990030909999 -080909090900080802050300101112120400101313130100141516171700040406171700999999919299109991999990909919999099390090999909900099999999 -080409090900081002060300111112120400111112120500011304141500161617171700999999019290909990199999909999999919999109093990990909990999 -040105080300090910081100090910101100120404021100121313141500121313060400999990309299109999999999999009199990199990099909999900999999 -040804010500080809091000111209131300111414061500111414040200110316161700099999903099090999919900999990919990999999199990999991992919 -080809011000111111101000041212121200060213141400151516141400170304040500909999903999919909199999999910099099999109999999919000929999 -080309101000080409090600080211110400040412111300141412151600141412010500299999990099999990909911999999909909990991099900999930990999 -080808090400011010100600111105121200111313121200141313031500040402161600990099099993990991999999999910999990990999999992900191999199 -040801090900051011120900131314121504131306151500031616160200041718181800099999039990010999099990990990199999999999192991990099909999 -040801090900101011111204131011110200131414141400151617170300050617170400099999031199099009991999999999919999999091990992909999990909 -080309090900080410110200080412111300081412111300151515111600170504010600929999999199001999999999999909999009999099099900909030909999 -080809100300080809111204131414121200131414021504161616171804060119200500990299991999999009919999999999199999000901099999003110999199 -080804010400080809101100040512101300141515101300141515061300031616170200999999903099001909991990099999999090999999999999999901929119 -060105080400090909090400101111021200131111141200151604171200151616170300999090300999990919999919119999099099990900990999999992999999 -040805010900101112120900100612120900101313131400101515020400031515161604099999003999099999999990919999919099199991099919999999929090 -080501090900080810090904111111111200131404150200161718151500160603191904999999039999019099901999999900919099990099199919990209999990 -080809040500101010101100011212130200141415161704141415061700041815031700900990999099991991991939099909019909909990999999999999900929 -040508091000111102120300131313121400061516171404181819191404180119191400901190919299999909199999999919099900900199999099093999999909 -060803090400100811110500020412121300141412121300141515151300040404011300929090990991990919099909999199999909999999991990900039999999 -050104080900101010110900121213131400121213131400061504040300040216161600990990390999900991990999999999999909990199999099991902901999 -080401091000081111120400081311121200041314141400060215050400161616160300999099030090999999999991099090999999999199090909991099999929 -060805090900040808090900030410110400121304110100121313110400140215151500099999909990999999009990009290999999399999999909919910911999 -080801090900080810110500041204111104131314140200151314141600150603171800999999930999010990099909990999199999190999199099990991999219 -080805010900060810110900041213140904151616141404171616180200170319191900999990903999009999919900090990909099900991999991999991992999 -080109031004080909101000081112061304141115160200140517181800140419181800999209399990999990191999990091019991199900999099999999990099 -050808010400090808101000020611101204131411151600130411171700130311181800099999993091919910090999990199909099099090999999999909929999 -060108090900101008090900111012121204051303140400041516171700151502171700990990399999099909099999990019999992999191090919999199991999 -080809090600041009090100051112130400141415131304161602170300161618171700909099999990093999199900099991909909909919999919999092990999 -080808050400010910101100121210101300041402151500161617151504031606181800990999099093190999999990909991909009999919999199029009999999 -080809010400080809101100121210100500131302140400131315140600031617140400999999993099000999990991999919999919099919999990999199921009 -020808090300101004110400101012131300061412151300161712151500050112181804191291999999090999909999099919999900990199990999903909999990 -080910100300080904111200080913130200080413130600141516171800140105181804999299991999991999091990919999999999090019990109993009999990 -050308080400091008081100101012121200021313140100041516140400041616140600999990299099999909900999999190999199399919990010999999909909 -080910110400040212131400151512131400150512131400031612171700041606011700090090009999199991999999999999999900992999099019999039909999 -080106090400080810111200131314141204131516171204050216031200181919191900999099300999000991909999990999099190909199999999901929909999 -050808010400091008111100121013111100141414151500061616020400031616170400999990993099009909099909999990919999990991099919999909929909 -050808090900040408090900101112021300101414151304101414151600100106150300099999099999999909090909119901099999909999199999993092999999 -040108091000110808120400111314151600111314051600111302170300061317170400999090390090909991909990909999999990999999999192999199909909 -060108080800090910111104090902110300120413140400151505141400151516171700999990390999919099192991999090099099090909999999999999990099 -050809011004111213141004110215151000110615161000171818161900031818161904919900113999919091099919909999999909091999099909929999999990 -080509011000080809091000111213141000111204061500161217170200040317170400999999093999091999909999099990019099999999190091909990992999 -080409040600081010111200011013141200030513041200150216161200151516160400990999009090990999909931099999999990992019999199991999999909 -030808090904100811120600131411151504161411171704021418171700191420010500999902990999090919909999090199999999901909999919919130911999 -080309090900081011110200080612051300081415161704181919202004181919012004999999299099191999991990909990919009109901999909099939909990 -080801090900080810101004111111110600021213141504161718181900030518041900999999939099099099199999999190009199009109991990920999999909 -040801090904100808090900111111121300141502161700051818161904031806161900999900939990919999010999999099109911990199099999099999929099 -020808080300090906101000111213141000151204161604011217171600051217170400199291999999999919099999009199909109909990993099999999909909 -080409100300081111121300081111040200081414151600171818151604061801150500909299901999991999991999909990919999190909990919009399999909 -080809010600080909101100021213041100141513161100141713161100140305041804909999993099910991009919999199999199099199999999992090999900 -080309090904080410110200081213111100050414140600151514141600151501171700929909999199099999091900999990199999990099099090999309999999 -080809090110040809091010111111121314151516171814041919052014031919210206909990999399990999001999990990019909999990190999999991929110 -040801091011061212131111141215151516140205171704141818041919041818031919099099030090909999099019999999090199999109099990909999999299 -080309090510081112091310080214151310161617150410161818151901041818202106299099999999009990999911900991999991999999090991399990909000 -080309090900080402100500111213141504111616170600111616171800110119181804929999991999919900190991000919999099999999099909993099999090 -030508091000111112130600141402131504141416131500011718181904171718180400900092909099199999199999990991999991099091993190099990999999 -050806090900101011090904011012121304141515121600141515021704031819201700099999009999999099009931900999909990999991090999099919921199 -080803040900080804040900021010111200130510110100131314110400061516161600929099999999999919000919909999999991399099999000999099900999 -050106080300091010111200131010121204131415021600131417181604131419191904990990390290909999999999990919199011999999999000099999990990 -030804090600101105091200021313091400151313141400151617180400151601181804209999199091990919099919999999099999999910090009999399999990 -040808080300090910021100090912111100041312141500161616161700060405011700999290919999911999999990999909919090999990199991900039999999 -030806090500100811120400100813131400100204130100151616171700151504171700999092900999909999090999909909999109399191990919999099999999 -080809010400081009091100121212121304051415151300161606171304031802191300999999993090990990910999990909199099999991999909021919991199 -030808040400090909021000041105120400131314121200131314141500161616010600999992900099910999910900999909999909999999199991999030999999 -080103090900081011021200081314041200151516161200151517171200040604170500992999399199911991199901999909099909999990999999900090999999 -050808030900020808040900101112130900041111061400151516171400150104171400992990999991999919909910009099999990999199999000993099999999 -080803010900100211090900050612131404151616171404151616181400150419181400929991993991199999110990190099099990909990990999999099990999 -080801090900080810101104121310101400021504160600041517181800031517051800999999930999190091990919999190009199999990990909999999929099 -080904011004080911121000031313131000141515021000161506171700040518171700999909903990001999999929999999199090190909099999909999990099 -040108080800091010101000091104051200041111131400151516160600151502170300999990309990999991990999999990009999990190099999999119991929 -080910010400080510111200081306111100081415161600040215041600171717170300009999993090999999990909099909199901999999990109991999999929 -080409100300081109101000081205131404151616021700151616171704150118190600099999999299099990991909910900199099199999999919093099999009 -080804091000010809091000051112121200061314031500161602171500161604181504999099909993099991999901999901999099299019999911999909999090 -040108080400090908101100090912101100131405101500130216101504130617180300999090399999909999099990909010999999099199999199090199999129 -050808010400090808101100121212121300140215161304140617041800140317181800999990993099990909010999999919099019909010099999999999992999 -080809031004080909061000111213141004151515150200161718191905202001191904999209999999999909009909090900919999990099199019009399999990 -050808080300091011041200131002121200141015161600171515161600040106181804999990099299009909999991199099099199991999991999903009999990 -080903100400080404100600021111100500041111121200131314151200131301151500129099999999990910099919009999999999990919999000999399999999 -080803090400080504091000111204090200111113141400151613141400060113171700992999999099909900990900919999919909999999990119903909999999 -080909010500080909101100061212131400041212040400151602171700151616031700099999993099910999100909999999009999990919999019999999909929 -080804090900080503101104121313141404011313141400151617021800061717191800909999999099920000919909990999999399999191990919901999999009 -080809011000040811111000051212131000141204151600060317021600181818181604909990903999999999919999019099919090190991999299999119999990 -060801090900100808090904111112131400111112130400150216161600171803040500999990939999909001009999909999909999999109991999919900912999 -080804010500080809101004111213141400111515021404111516171800191919030600999999903099009099919900099999999990109991999910999190999299 -040803090500080804090900041011110200011011111200131313131200061415161200992990999099099990991909919999999319999909999999999099900009 -080909100500020909100100111212131300111214131300110315161704110418061704199091999999913919909999099999999990999909992900099009990990 -060808080400020903100400111210101300111212051300111415161300110115170400999090129991990919999999999990999990999909991090993900999099 -040809100500110803121300110212121304111415161304171718181900170118180600019099920999999991999999990910999190001909099099993990999999 -050808090900040808100100111212100400021312101400061516101700151503041700099999990999903909999919199199909199090199099199999209999999 -080910010400050411121200021313121200141515161700141515161700140304160600009990903099009999999919199190999990999999999990999099929909 -080309041000080509091000081112021300080612041400151512161600170401161600929999990999999990910990919999919909990990199019909399909999 -080809090900080810100100021112101304140415151600170415061600170318051600909999990999993999199911900190909909991999999090999099929099 -040803091000110812101000040812130200141412150500141415150400060116161700992190999990999999991999919009199909099999999199903090999909 -080803090900101010090904110512130200141412121500141416171804061919010400992999099999999009991999919009199999099919099019090930909999 -030408050900101008111204101008041300140208151500141616151500061601171700999092099099900099999999909919909109999999991909909309999999 -080809100300010809110500121202111300121415111300161704111300040618181804919299991993990990199999109900999999999009990999900990999990 -080803060904100811120900101002130904141415161704141418191900202020010500929909990999199999109990190999109900109999199909999030999999 -080909041004080909110200080312131300141516161700141516161800140601050400999009999090911999191992999999919009199999999990990300999999 -040801090400101011121300101014121300021516041300151516051700030616171700099099030999100999099999999190099199999999999909920999999099 -080809041000080809091000110312121004111302141500111313160100061704180500999099999999999909099999990921109999099911990993990909900909 -050803090900101011040904121206130200121214131500161617131500160104131500092999099999009090991999919990909999990909999119993099999999 -080802090300080810091100051210130400141410150600141416171700040116041700991999919299991990999991909019099990099909999909903909999999 -080401090904081011090900081213131404151616050200061617171800191919190300999909039999019990901909990990919099990990199991999919999929 -080609090000081009040000081103010000041112120000040212120000000000000000099999990999099990999902999999399099999199990199999999999999 -080806090500080810101004041111120100131111121400151616021400031718191404990999990099999090909999939099999990190999990901999919921190 -030808040000091002110000090411110000091212120000090113060000000000000000290999199990199999199999999901999999999309999909999999999999 -010808040000040808090000100402090000101111060000101112030000000000000000390999999990909990199999999991999090999919999929999999999999 -040808090904101011090904101012021300061412151600171812151900050103151900090909999999909099090999199009109919999199090999903999999299 -080910111204131313131205011415161704181819201704180219190600212121210300000000999999999090999990090909099909009999990990990999999929 -040508080800091011110100021211110400131414141400130615041600130315041600999990090990993909999911909190999999999000099999999999929099 -080809090200080305041004111112131404111115161700181816160100191919190600919199299199999099001999090999019900199999999093999909999909 -080409090300081009091100081202131104081413130600151516171804150119190500999299099999999990199999900901999099990991099110093900999999 -080604090900081010111200081010021200081313141200151316171204150104050300999999000999999999909999199919199099199909990909093002999999 -030808080804090910111104020910121300141510161700141515181900140501040600999902999099999099990919909199009999999900091909999300909999 -080309091000080804101000110512131400021515161600171515161600170406010400999999290999999919090909009199909999991999991919990030999999 -040406010800090909080800041010101000111112130200111104130300000000000000999990003999909909919999999900919999199909999992999999999999 -060809040000101009030000040209110000121213130000121201130000000000000000000999999999099999929901199919999909999999999399999999999999 -080309040000080909040000101010100000060204010000111111120000000000000000990999299999909901999999999919999999990103999919999999999999 -080501090900080410090400081112131300081414131300061404021500031616161500099999939999919990910900099999999990999991090909999919929999 -080309051000080809101000110409121300021409041500161717171500160406011500990999299999999919909999909109909199990100999990990039999999 -080808030400090909101100121205111100131414040200151414161600040106160400999999092099999909019999999909919099990990199919903999999009 -040408090500101112131400011115021404161115171700161118171700161818060300990990000090190999199939190999199099999909999999999992999099 -080808080909011010020409111010121313140405151503161718151919060420201919999099191993999999910909919009992999990909090009900909999999 -040809040600100803111100100204121100131313131400151515161600050104161600919990920099999991999999099019009999999919099909903999999099 -080808040600050909090904101011121300101014031500011614170200161618181804999999900099999009099999919990219999999099193191999119999990 -050809090904100811110300120211110400121314151604121717171700121818010600999900909999992900999991999919909919009910990999999030999999 -040108080904101108080904121313131300141402150500161616171800191919060300999900399999999001090919999199909911999091999991999002999999 -040809091004111209091004111113141000031516160600170205180100191919181800099909099999090099999990009999099919092101999993911999999999 -080909100600080909111100080412021304081412121500161617051800160117040300990099999999909999099999110909919099999010199199993992999099 -040306080900101004080900100205080900041111121200131114121200131504010400990090299999909999999910999919099999990999990119990930990999 -060809011000111112131004141414151000161604151000031702151800041717150500009999903999000099019999999090999999999999092919999190909999 -040304080900101004080900100211080900041212080600051212131400151515011400990990299999999999099910909019999999099990990910999039999999 -080808080300040209090900101104121300111114121300011516171300061616050400999299199999999901909900999999999919999910993100999900909999 -080910111200080909131404021513131600170618181604191918181604200301051600990099909099990009999911909101999999901999999999019309929999 -060808040400040808091000110212131000111414151500111416151500031616010500090999999099900909909911199990199999999909999999929930999999 -080409101000080809031000111213130200061213131400011215041400041216170500909999992999999990091909919099999999099919993109999999900009 -030808080400050910020600111112131300141516131304141717180100141717180400299099991990019999190999999091999001909091999993999999999909 -080801090904101010090900111112120600111105131300141516021300040417180300999900939999999990100999999999199990990091999919900199999129 -030806090900100811121204130814121204131315161700021819201704051919011700999992900999999019099990090990999990991990991910001939999999 -080801090904080810110904121212111104131415151600020515151700181819030600999909939999000099199999990910999199091999090999919990991299 -030808080804091010110600121311111400151616171700021616171804190405011800999902099999999910990990909190999991991999991990009039909999 -080806030900080810040900051112130900141413130200151416171704040118181800909299999999909990099990999009919999199919990199003009999999 -040808090900100408110400121212120100061314141400050215161600031715161600990990990999990900909999939010999999999190990199999999921999 -040308060904101108080900121314020900121516160400121517181800120105181800929000999990990990919991199919999999099900990099993999999099 -050108080400090908081000090911120600131311141500130211040400161616160300999090399999090999090999099199099999099199099909991999999929 -080901101004110909101004061212121200131415151600130217031804131917200500099900939999909009199999999910909999999199090999091920991199 -030805090400060808091000111112091304140212121500161617180100161619191904209999999090999991990999900919909199091990999113999099999990 -080909010600081010101000080411120400081314151500051316021500031616040400999999903090999999199990009991999091999991990919999900929999 -030808040900101006111100021005111100121304141500121313161500120404011500999092099099909999999919099199099190099999999910990039999999 -050308080804090909090200100411121300101414151300101414161700041818010600999900299099991999991990099999099999999990190901999030909999 -050601080900101010100400111112121200131402150400131617151500130417170300999090030099999990919999999901009099999019999999990999999929 -040809010500080809101104121212101004021314150600161714181800031914181800999990993099009099990999190910009199991990991999991999929999 -030808010904101108120900101113140904100215160500171818191900061818190400999902993999999999019999000909199111090909999909909990999999 -080910100500080911031200080913141504061313021504161718191500171701041500999999909099999999020909910909999991100199990109999309999999 -040806090300051011091200131414151204131416151200131717150200130117150400099999009299099900909999990999999991999019190991993999999909 -050304080800091010080800110404020400111212130400111212141500060114141500990990299999919909919999009909199999999991090919903999999909 -050408090300100208111204131414151200130614161200131718181904130118181900999290091990119091999919099999099099099999991099093999999909 -060808090900051008090900011111120400131402151500130404151600031717171700099999999990009999099939109999199111999099999900929990999999 -040106080800091010101000090904111100121202041100121213130400140513130300999990309091999999090999999199099919999919999990909999909929 -080309051000110409041000111109121200021309121200061414140100041516161600290991999990909999990999999199999111999991990993990909909999 -080909011000080809111000121313131004120414151604120317021800120619190500999999993999991990009909990990919909109991099299999110990999 -050809090300100209111100120413131400151513131604011517181804061919181800099299099991199919990999999109909909909999093009090999909999 -080904101100080904120300060913021400050915151400161615150400160117171700909199991290909999919901109999999009999199999999993090999999 -040408010900100508080900101011110900040611111200131313141200031516170200909990993990991999909990999099919999999090999909999991921119 -080104090500081009090400081112120300081112021300041114151300061104150400999099309999190990919909999999129999990901999991999090909999 -080109101000081109101004081212131300060512131400151515020400031617180400999999399999099091990909999099999990099019099919999919921109 -080309090904081011110100081213130600021413131505161617181904162020202004299909909999193991909999999119909199009990999000099990999990 -080106090400080810091100121314090400151314090500151614171700150402170300999099309999000991990901999099999999099999990999990192999199 -080806090904080310110400021213131300141415151500141617170400050117171800999909200999900919099911999991999999999919990199903990999909 -080501090900101112090400061112131300021112131300141115160400141703160400099990939990190999909909099999999199991909999900999999912909 -080809101000080809111004121213140100120502151604171819061600032020201604999999999999010009119999939991099909009910991199929099999990 -080309090400080409101000080211101000041213141400061215150100051615150400299999999099099999099911999991909009999910990993999999900909 -080910010600080810111104121210111104121213021400151516170500150318181804909999093099909099999990990990109999999901099099999919992990 -040809100600111110100300121213041400121215051400161617171404160117170200009099909999999990092999099990999909099099999199093991999919 -080801090600101010111104041212111100041212021300141415161700140318160500999099030999919099099909999999919999190091099919999190992999 -080809091000080811061004121213021000121414151604171418181904050118180300999999909999999009009999119991919999000990190999003992999999 -040808090500101006091100101004031100041204131100011415151100141415150200999990099099090999999990999909299099199009993999999991991919 -030808090904101108121300141402120600151616120100151616121700150418040500990902999991990991090991999091999999399999999910999090990099 -080809041004061112101000011314021500161616161500171718041500171718050300900900099999109991199939119909999999990990999099999992999099 -080809011004080809091004111213141004111215161000031205171800192020020600999909993999099090019909900990199999999901099999929910919199 -050809011000110809091000121212041000060204041000131314141400130304041500909990993999990909109999999910999099099199099999999090929909 -080309091000080409091000080211121200051314121200151616061700040116171704299999999999090999909911999991999090999019990909903999999090 -040808010900041008110900031212121300140506151300141602171300140417171300099999993990900990910999999209199999999901991119999999990999 -040508080300090210111100121212120400131415150400161615150600160117171700999290019999109901999999909199999199099199999099993090999999 -080106090900080810110900121212051304141516171304181919171304021919200300999999309999000991990999090919999100901999999999019999919129 -050808030900020810110900121304110904141515060900161515171700181801170400992990999991009919999990900109999999091999991909990390999999 -060108080800091010110500121010130400120214141400041515040300161616160400999990309991900919999999009999999119990099299999999009999909 -080809091000080811111000031213051000060414021000151515160400040117171700999099990999099999999921999991099901090991999999903110999999 -040809031000020805111000120813111400121215111604171718180600170118180400012999999991999919090990999999909900009199099099993999999909 -080910111100040410110400011210040600121213130200040314141400151515150500009990999999000999909931999991909999190999199299999909999909 -080309090500080404101000080211101000061212120400011313141400041513140400299099990990909999999911999991099099099199993999999990900099 -060401080800091011080804090911120400131411150200131616171700051616180300999990039990019099919999999909109099199909199999999919909929 -080104090900081010100900081102121300080614121300150514141300161704030400999999300991999999909911999901999999090999990999909920900999 -050808080804090910100100060410111200131415111200041617171200031817170200099909990999093999919999999000999009199999990099999991921919 -080903061000080909021000111204131000141516160400011516171700041505171700929999990999919900919990909099199099999999093109999099909999 -050108080804090910110400090912110300131414021500131416151500130417180600999900309999900999099990999919929991999901990999999099909009 -080809100300040211111200131311111200061304051200141415161600041701161600911299199990099991999999999999999009999190099109990399909999 -080809051000040809111200131314031200131314151200040216170100061818181804999099999099000900999999999999299991990019999193991919909990 -050808090300100808111200130614150200161714151804192020151804191901151804999290991990991999091909999099919090109099999919090399999990 -080609090904081011120100081314140500151514140400151502160300171718161604999909090999003999919900909099999999099919999992909199999190 -030808040904100211120900101013120900041414120100151414161600051706161600999902090999119991999999009090999999399990990999900999990999 -060108080900101108080900101112040900101112130900101402151604051717030400999990399990099999999999999999099991099111999190009020999999 -080801090904100811090900100412061300141503040200141516171800141505181800999909939990019990091999099099919099099929199911999099999999 -050809090904100808110300100612021304141516171300141817171300140119201304099909991299999990019999990090199009999099999199993099999000 -040808010400090810111200131414111500130614111500030502111500161717041500999990903090900999990909099999999099999999999019929199919909 -040108080600091010101104121314140500131314140200151516171804151516190300999990309099990009199900999999909999199099199091099919999929 -080910100600021103121200131314121200130415151504161717171704161601180500199991190099299919999999099990999999901090991999099309999909 -080801040900101011110900101211110900051206021300141215160300141204171804999999030999091999999990999099919909199991990099999012999910 -080309091000080405111204081313141500020413140100161717141800061717141800299099999099909090900999909109999990391999991910909999999999 -080301060400091011121304141505121600021515121604171818191600171818191900299991930099100011990999999190999199900990990999999999999999 -080601090904081010101000111112131400111115160200170418051904171703191900999909039090999999091990099990019999990900199099099999999299 -080909031000080909111204080513020600141516161600151517181800191901041804999299999199991099019909909090199919990999999109990309999990 -040801040600050910111100120913111100140915151500021616171704181816031700099999030099999909199991099090999199991999091999009999999299 -020808080300091010110400090905111200131314111200131315161200060104041200199291999990999999990999999190999900999909999900903009999999 -080808010400020909101100120905131300121206131300141516161600031504170400999991913099910919090999999999999990991990990999929009999909 -030808090400100808111100121314151500160214151504161714181804050614011800990092999999999919009919999919999190909999991119009939990999 -030805091004111112021304141415161600171415161600171815192004170601202000290009199099119099910999999099999909999991999019090309999999 -030108080900101108080900120413140904120215150900121615171700120605041700999992399999199910199999000991999119999990999099990099999909 -080801090900060810090900111213050400141413151500041413021600031717170400999999939990009999199900099099909990990999999910999910929999 -030809091000060804091000110812131004110212140100111516171700110418170500299999999990990999009999090919999009399191999119999999990009 -080109090600081009090200081011041200081313041200141313151600050415150300999099399990191999091999099990999990990999199990909992990999 -050808090400010808091000111112091300110406091400021503161704181816161700099999999093990991099999009900909999991999099299011999990999 -080809011000080409111000121209111000121206131400150405160200040317161600909999993999000909999999999999199990190999190909909991992199 -040108080800090910101100090910100400041204021300141215061300051215031600999990309999190999990999999900199099199990990099909991999929 -080802010900080810090900030411121300041414121500161414051700181806171704919999913999999929119999109900909099999999090909909099999990 -080609031000080909101000081104020500081212121200131415161700130104041700099299999990999999919990909909199099999109990900993009999999 -060108091004111111110500121313141400121513161604120217181604121919200300990000309099999919009999999999099199909199999119090919999929 -080106090300080810090400111202131300111415131300110416161704110516181800999299309999099919910911199999999090999009099999099990909999 -080104040900081010101000111213131300051415030600141415161600040217161600999099309090999901099999999019909909999992999999901999991199 -080906031004081111121000080411121300081415120200161718181904160118180500009209999999999999991999999900919011199190990990093990999999 -080801090900101011090904101012041300141402151600171717181904030518180600999990939999199099990991999901009990099919099990029999990909 -080808090300101011090600101012130200011415151604171715181804170504181800999299909999999999010999919900919319109090999999090099999999 -040808010900100808090900050611111100041213131400040315021400161715151400099999993990909900919999999999919009199991999299909919900999 -080808030900051010111100121004061104131314140200151514141604151501171800999299099199999909909999990000919909999099199999099311999919 -080809090904081011120100131011140400131011150400161711181800060502180300909909909999013999909999909999999090099099990999900192999199 -080801090900101011090900121013141500120405161500041717021500031717040600999990939999919999019900909990199099999991990919999990929099 -020808080300090910111100050912130400041415161600011717161604181818180600199291999999909999099900909919099000999199993999090999999909 -080309091000080802091004111213141000111213151604171213180100050413190600299999999999119099919999999999109099009991990003909909990909 -080309101100080812101100130206100500141415041600141417171600040117170400929999919999100991999910909199999990999909999090903999999909 -050108080800091011121300091414060400091414021500091617171500040317181804999990309990000991990999999999099991099991999199902990999990 -080309091000110509091000120204061000121314151000131314161600040414010400299991999990990919909919999910999919099990999919909930990999 -080809041000080611101004121202130300121214151500041616171700051801171700990999909999999000012999199991999910999199990909990399909999 -080806090500080810090400011111090200121311091400151616041700181818031704909099999999119991990939919999919009990099199990909999999920 -080910040500080911111200080913021404080913151500011617181500061616040300900999999099099999990999100999199019999109993909999902909999 -080902101004080911121300080914151604081714031600011818061600051818191604910909919999900999190999190919299099999199993999999909909090 -050802040900101011110900030611110900121213141400120415141400041616010400019099119999999929999999909909199900999009999999909030999999 -080902100300081111121200081104041200131405151504161417151500060118181800911999191299999999099909999919099099900909999009903909999999 -050801091004110809091200130214141504061614141700161604181800031919191900999000939090099909910991990019909999999999099909929990999999 -040108080500090908080400101111110400101212131300021206131300141516030400999090399999090910999999909999999090991999999099919990911299 -080103090900080810110900121314110200120404111500041616061500051616171500992999399999199909191990119900909999990999999990999999909009 -080309101000110609121000130209121400041509121400161517181804051504011800299991999999999910990919999919999000099999990119009039999999 -040808010904101008110904101212120900031302141400151516171800151505061900099909993999001099909999999999919911992199099900999090999909 -080910010500020411121204131411121200151411161600171418191900030618191904119991913099019019999999999199999990991990990099920999999990 -060308091004111213130200141513130500141616171804141616171900202020011904921100999190091999999909999909109990909999099990999039999990 -080409010400081009111200131309111100051409061500040204151500161616160300999999093099910900999999999909009019999199999099901999999929 -080809101104081202060300131313130100141515151504041617171800161619190500991109919299199901909999939099099999900990999090999900999999 -040808080300090906101100050910101100011213021100041214041100151617171700999990990299909999999901999919199309199909999990909099900999 -040809041000060802051000040311121200131313121200041414151500161414011500019099919990999992100999199090999999999991999909909939909999 -080809010400101009111200101309041200140605021200141516161200140304160400909999993099001999909990999000999999199991999199992090999999 -080409101100080812130300141512020600141612171704141618191900140105191904900199991299999990919990909999199911909999990009993099999990 -050808010400090808101004111213141400151216141400151217020600031818180400999990993090909099019900999099999991999919099919999919929909 -080801050600080809101100120413141100121204151100161615150200040317171700999999930099011909909990099990099999990999199999909991992999 -060808090904020803090900101011120400101314051500161317181500161301041500999900929991999919900999099990999109099999990100999309999999 -030809101000111106020500121113131404121504161604121718161600120119191900211999991999099999910991990910909999909199990009993909999999 -080909101000080909110100081213111100121206041400151616160200040304170500090999999999903990099999999990919999990990199991902909999009 -080809100200111112031304111414151304161414171304161819190100062019190500991199019199029099999999090999099999109991990093999999900909 -080805090400080810111100120210110100121306140400121304151500031304161500990999990099019999999911939909099909099990999099929999999009 -040803091000111213041000111113140200151513141404151516161600060117180500092199099999999990901999999909919911909909999999903099999009 -030809100200111111061200131314151200161617171204161617180100040518180400211199990199999999099990099999099999109991999093900999999909 -060808080300090204101000090511101000121314151504011617150400161618181800099299199991999999099999099100999109909199993009999090999999 -050809090600100209090400111112130300140412041500141617171500140117171500009099999991190919919999929109999999999900991099993999999909 -030808090900050208090904101111121200101111041200101314151600101706010400299999999990199091909999999999999999999190090110990930990999 -040809100400111209090100110213131300141414150300161616161700050406171700090099099991193999999919999910999991290999999990900099999999 -080808080400090210031100091210131300091404130400151515160100051716160600999999192099999991990991199999999099099001999903990999909909 -080501091004110409091000121313131300021414151500161617151500031604180600099000939999099909199909999991999199991909999909999009929909 -080409100300111112021300111114151300011614151704161614151800050414061800091290919999910999919991199919999399009999099999900999999099 -040809100500111209130100140609131304141509161604141703180200171719191900099099090990003909999990990999919909909099199991999219999999 -060808090400010808101104121213101100120414151100031602151700181616150500099099990993900090199999999991999900999919099999929190919999 -050801090904080810111200131414021500131406161700131819191704130419190300099909930999011990991909919999199909199090999999090992999999 -080808091000031109091004120213141000121213141000151617140400050104180600999992199999999091909919909999999900999109090999903009999909 -040801090900101111090900121311141400121305021500120406161500120317181504099999039990919909991990999999199990099991990909999919992190 -080809010400080809091000051111120200041111131400151516161400040616031400999999993099999990190909119999919099199091999999909929990999 -080805090400080804090900031010110400120411110100121314151500160206151500909999999099909990909999909290999999399010999199911099919999 -080809090500101109091204101113141504101102160600171118191904032018011900909999999099999099900999100991199999090911990099099939921999 -080801090500041011121200131313121204141415160300141415041700061802171700999099030990009999199999990901099999999990299999990199909199 -030808090500100808111100101212121104100613131400021516171800151501040400999092990999999999099999990999009999091090999100919300999999 -050408010900021010110900121013141400120415161600120604161600031717171700909990903991999919110999199990099099999909999999920909999999 -040809090500031004091100121213141100021313151500161617151500161604010600099099099992909991909999999199009191999909999099999930990999 -080109090400080809091000111213131300021406151500041414151500031616050400999999399099199999190911999199099190999999990999991900929999 -060809031004111209091000110213051000111415161004171819202004170119202000099909092999199991999991999991099910000109090999093999999999 -080805010600090910111204131010141404131302141400151616171800031616190400999999003099091099991999090909999991999919091990929909999909 -080808091000111112061304111415131304161617180100030502191904202020191900990099999099909090099990190901199999399910999099029199999999 -040805091000111102090300121212120400131304140600131516171700151501171700909190099299119991999999909919999909099190999109999399999999 -080905030400081004111100061212111100131312140200131315151600040104161600909999092090999900099999999999919911199909999999903009999999 -030408091004111208091000131314141000130614140500021516171704181901171700999902099999000910999999999999999099091990999109011399919999 -080105090900081010020904081011120300081314141500161314141504061317181504999999301999999099912901199909999909990999999999009099999000 -050803090904100806090900040811120200131415161700131414181700130104181800992900999990999909091990919990199099999901999910993099999999 -060108090500101010101100120413130200121414131500120403161500041716161500990090309999991909091990999990919999999999990921999999900999 -080801050900081010100900111112040900111104131300141516160200060317160400999999930990991999009990999990919999999999190091909199992909 -080104090900081004090900111112131304111112051300141414140600021516170300990999399990999991090990090999999999091999099999919999911129 -080805091004080806091000110412090200131414151600131417171800130117031904909909999999999909090990119091919090999990199999993991999920 -080804010900080810100900111110100904110412131400051512021600031517180600909999993999091990999999990900919999190991099999999910921199 -080109101004080809101004110509121300141509060200161617181804161617190300999909399999119009919999919009019099990909199999099919999929 -080910030500021112121200131314151500131614140400171717181804060104181800112991999099099910999999999919099999999109099909003999999099 -050809090900101011121200131006121204131414021504011614170300041819191900009999909999909999999900990909119999909191293919990099909999 -080910100300080211041200081111131200081414141200011504160400051515170600919299199999199999909999909919099099999199993090999909909009 -050808080300040204091000111109091000111112121200040613140100151614140400099299199990099991999999909990999919999919999913900999900909 -080309090900081010060400081010041100051202111100131415161600171701041600999999209999909999990909999991099001999999190019909309999999 -040805091004080803091000111112091000021314141000151614141704060118171700909900999999999909299991099199999119099999990199003099999099 -080801090400080810091104121213091400121206150200161717151800160417050300999999939099099099190990119990919999190999990991999902990999 -080309090904101112121300060204121304141415160500141417181800191919011800299901999091999991999900900919009919999910999919999039999999 -060104080400091011111100091212131300091212141300091502141400041505031600990090390990999991099999999999099999999919999019909091999929 -080808010400090909091004111112131400111506161700051504171700031818180200999999903099991099901990099909019990999999990909999991929919 -080809090300100409090500111202131400151212131400161718131404061701041400999290999999999900190909199999999099990999990010009399999909 -050308080800090610040200090911111200041311111200041415151500041414010400929990990199099999091990999999999099199091990099999930909999 -030405080900101011020900100612131400041512161404171512181400171712011400999092000999119999919990999999199091909999999010999939990999 -080804090900101112030900101113140200101115141604101117141600051801060400999990902999999999091999919990999099909909999010990300909999 -040108080400090908081000060911120400131313140500021515160300171717161600999090399999090909090999099919099999091999991912909999999999 -060108050900101108080900121313130904141515161600170218181604190418180300990990399991090919999909990199099199990199999199009999909929 -080405030600080910111204080909131400151502131400151516130100171816130400099999902099919099190999999091999999099919999993909999900109 -080309101004081112131304140205131300141516170600141817170100141920202004929909910990199091999999999910099990099199999193990909909990 -080909090400080804100100031112130600041412131500161602131500160517131500099099990999993999019929009919999999090199999119999099990999 -050808010900060808100900040411101200021314101200151504101200151503041200099999993990910999190990999091999119991999999909999999992909 -080304091004081109091000081212021004081313141000151313141600170601180500999909209999199999919999910990999099999999190911909309909909 -080909100300080909110400081202051304081414151300161617180600160119191904999299991999919999190911090999999199099190999009993090999990 -040808090400041010090100111010091200111314061200051515021200031515041200090099999990903999999999919999099009999909990911999909929999 -030805090900100811040900060811121300140215131300161616171700180401171704909992999991999999900900909919999190991909999909909399909990 -040805091004080803110200121313141400151516141400151516170100061816171704990100991199929909991999999090999990999991999993990999900990 -040809090300100209111100101212130600101414131500011414130400041605130400009299999999199991909999999991909099099999093909990999900909 -080609031000080809091004111112021300141512160400171812191904050112191900909299999999999009091999919909199091090099999199003999999099 -080803040400090810111200090902041300051414141500161616161500061717011500929999990099109999190991999919009999990919999990909039999999 -080209101004111212060300011312141504160517181504161919201500161919202000111901999291909991999939000909099990909909999990999999909999 -080309091000080409041000081112020400081313140600151616161600050117171700929099999999999990100990199999199999090901990999903099999999 -040808080900011006020900111112130900041414131300151514160300151505170400099999191993900999919990999990999990990099299909999009999909 -080809100500080411120100031314141500160214141504161606171700041818171700909099900999093999019991909219999999909190999909990999909999 -080803090900100404090900021112121200131414150600051415150100041617171700929991999990999919090911999099199990090999999993999909900999 -080804050400080809091000111109031000041102121000011314141000151514140600999999900099999990929999999991999001999991993190999990990999 -080904051000110312121300141414120200061515161704011515181700191919181804009090999099299909990999919990919091109999993909999099999990 -030804090400101104121300111112121300040205141400151516160100151516160600909092090999990919099999999910099999990190999993999999991909 -030809090400100809051100101202131400101204151400100415151400160601041400299999999099990991090991199990199099999999999090909399909909 -080910111100080512110100131412120400131516021700131816191704130616031704009999909999013999999900999999109900999091999991090999999920 -060108030900101008080900111112020904111314141500161314140400051317180400999290399999099991999999110911999919099999090999909999990009 -040801050904080810110900121213140900151202140904150316141700151819061700099909990999100991999990099099999909909919099999992199991909 -080309101000080809111100040209120400131409150400131617170600130117170500290999999999999991909991009099999009099910999190993999999909 -030805040900100811061204021311111200141315161204171718191200171701191900299099909091999019909999999190999999001000999109999399999999 -020808090600100508030400101111111100121313141400151316141400040104171700190091999999929990990999999109999190999999990099903090999999 -080909040400080903101000081111101000121111050200131414141400040106040400090999999099929999999999999099019999990909190999903000999999 -080808090400040609091000041112121200131402151500051616171700031616011700999990909099099999900900999999909001990919199999999939929999 -080509090400080809090100101112131304041414141500161718021500030618181500909099999999093999109900990091999999099991991119920999999999 -060809100400050804111100120813111400150802161400151717160400150117160300000099909999999909999990099099999111099999991990993999999929 -080904031000080911061200080911131300050914040200151516161704151501161800909299999199999999901909099999919000999099199099099391999919 -060808090900100808090100110412130400110414131300151515020500031617171700099999999990903909919990109991999099999919999919999910921999 -080909101000050911101000021213040600141513161600141513161600140301040400099990909999909999099911999199009090999999999999999300929999 -080404060300090909101000050402111200131414141200131315041200040115151200099990900299999999019999109001999199999990999099903999999999 -080409100300110209091204111314151200111616161600111718191904050118180600091290999999199091099919009999999999999000991999003999999909 -040108080800091011120500131314121500131302121500061617121804031604181800999990390990110999999990109991999999999919990190099099929999 -080802040600090410111100031212131400051212151604171715151600171718011600910991919099999920190999909999099099909919999990999039990999 -050108091000110808121000131415151004161615150600021603171704181819171704999090390991999910909990990199999999991990099999019299991990 -050806010400090909101100021212121300141415150400141416171704180316171700009999093099910919900999999190909999999900999999019999929999 -080403090904081011020900081211130500141211040600151611171700181818011700992909099999091999910999199099999909990990090019999039999999 -040408090300100808110400100512110200101314141500161614141700161601061700999290091999990999099909919990919009199999999090999309999999 -080809100400011112021300141512161304141712161600140518180300140418180600911099191993990990919900990909999999999009299999999999909909 -040104080804090910080300090911111100061202131300141515161700141515180500999900309999009999992999999911999090999119990990999900999099 -040801090900101011090900101011120200061313121400151305121400041604031400099999039999019999991999919090909999999999990909900929990999 -080808010900101011090900051202131400121215041400030615161400041715041400999999903999009909991991119990999999992990999990990909900999 -080801090900101011090900101212121304020604141504161616171700031805171700999999039999109999090999990199009090901999099999991999920999 -030404080800090906080800090902101000110412101300111114151300160401150500990992099999999999090991999991999991999091999010909399909909 -080909040300080909101004081112120500131412020400011516171700061816171700990999999299999090919999909009199099099091993199990999909199 -080809011004021109121004131415161000170516161000181919200600031919202004999909093991099011919991109109999999991909099909929999999990 -080509100400081111100100081111120600130214141504130314140400000000000000909099909990913999999999009910999199009999092999999999999999 -080808080300090910020600111112131300111112140400051512161600041701041600999299919999910990919990999999199999090991999019990309909999 -030808040900100808090900100406110400100405120100021314141500161614141500999092999999909999909909009999099990391091991190999999990999 -060809100500010909101004111212121200130214141500161717171500180419031504099099099993909099199909999010909999990199999999909199909290 -080901100500080909101104121213101100121202041100061415161100031715180400999999939090999091999990009999999919099019990990999909921909 -080910061104021203111104131313131400151516051400151517171400040117181800100901199999299019909999999199999900999999999090903909999999 -080809010600020809101100120409101100130409101400151617170500031617170400919991993099910919999990999199999909091909099099929999999909 -080309090400080504091000081112121000021312141500061616161600171717010400299099999999999990009999999109909199090100999999999030999999 -040108090904101008080500101011111100121202130300121214151504161718061500990900399999090999099999999199999919299911999919009999900099 -040809090900100811120600100813021400101313151600101717041600050117040300099999909999900999099990919999119991999910990999903992999099 -080809100600081111030400020412121300141414141500011617171500051817171504900099999991929919990999999100909999999919993190999999900990 -080808030900051011090900041211061304141515160200171515181800170104181800999299909990999990991999900000919091199999990909993099999999 -040108060400090908101000090902101000110512131400151512121400040416031400999990390099099999999991099091099099090999999999909029990999 -080809100400060909100100041112101300141412101300140212041300051516170300900099999990993999999909109909999919999199999990991999901129 -080808010900061010110900021012130900140512041500161612171800160312041804999999903990910999099919099199009909991999099990999909929990 -060104030800091011120800090905131400151602171704151818191900151818191904999990302991099999910999909190199111909990990999999999999990 -040801090900051010091100121010131100121402151100121416061700031616040400099999039990910999919909999999199091999919099909999990929099 -050808080800091011110100061012121300041002131300141515041600171515040300999990909990193909999990999999999911990909199909909992909099 -080801090900080810051100121212131100141502130400041506131600031504130400999999939099099999109999109099999911990909099990999990929099 -080109101100080909021100121213131100121213041104141516170300060518181804991999391990991990099999999999999999900900299009900099999990 -040808060900101108120900041113120100031102121400151516121400150404051400090999099990910909199999939991999999092919999199990009999999 -030806010500090810111200131302141204131315041200161617181800161919181804999992903099991910099991110990999990999909099999990099999990 -040401040800090909090800051010100800111112130800141402151500140304150600999990030999999901999999999919999910099910999199999090929999 -080109090900080810111204131410111500130204111600051717111800061717030400999999399099199099990901099919909990099199090999999990909299 -080409100400080411110500081211111300011212040600141415150300140216161600090099909999990990999909909990009399999199999999999092911999 -080801040600090810111204130514021500131414161500130317181500130417181500999990930099011000991999119999099999999200999999999999990999 -040108090900101011120600101314021500161614041500161617171500050417170300990990309999000991999999119919099919999999999990900992999999 -050808030900101102090900120613041400151616171404151618181400150118180400992990199999109909199999999001099999909990990090993990999999 -060308040400020808090900101112120400101113131400101113130400051101150400929990990091999919909910909999999919099999099999999309909909 -040404080800090910080800090910031100121213051100141515151100040106160200990990099999999999990999929900999909999090990999903911999019 -080808010400090910111100120913111104121402061500121617171500031817050400999999903099119999999901990991909919099199999990991990929099 -040608030400020909091000110412131300141412131300141415150500040115161600902990919091999910900999999199999909999999099099903909999999 -050108080804091011110600121211111300121404021500041403161500171418161600999900309990199990990999909909109909999991999999909299909199 -050801090600100808090400111213091400041313091500161604021500031717171500999090939990910999999900009099909999999091999909999919929999 -080808090500101010110100121212121304140615131304141416021704031819202000999099090999993990919999990999199900909999199011099190921999 -030809101000111209101004021309141404061315161400171318192004171818010500299999199991999019909919990990999090999990090110099930999999 -080901101000080911101004040912051300140915061600171715031804171702181800999999939990009099190999909091909099099999999092099199999199 -050808090900010808091000111212021004131214151000041616161700041803061700091999999993999990919909900099199991990919099999990209909999 -050408080904101108080900121212130900011413130300151416020600041717171700999900099990999909909999019999929399999991990910901199999999 -080906100500080402111200081313111400081315150300161617181800160104181804009099990999011999191999999999929909990109999909993099999990 -050803090400100808091100121213140200121213131504011617181500191919061504992990999099901909991999919999199919909199993000990909999990 -080904011000111106101000111212121200131313140200151515051600040403171700009990993999999999019909999991999991199099199999900901999299 -040809090900100211030400101204131400101213131400101516161400051701160600099999012999199991990999999990999919099019990999990399909909 -080801090600051011111200131311110400131314150300041614021704161614171700999099030990990990990990999990199999990091299999099919999999 -080109101000081109101004121209130600121205141500040216161600041718180300999999399999909001999990099990009999090199999199990992900999 -080801090500060810091100121314091500121617091500180217191504181803041504999099939999000909190901999919999909999199991990099909992990 -040808010900100808090900101011121300050614121300151516121300031702040400099999993999909999919990009999999900990999999919921100991999 -080809010400080809091004111212121300111103061404151515021600171718190500999999993099099099910999919909919999009929199991990119999109 -080609101000080809110300051209020400041209131400151216161400041201161700909999991299099999919909909999199911990999990199999390909909 -080901041000080911111200130911051200130404021200130614141200130315160400999099939090991999999900909999999090199991990999999910992199 -080809100400111209130100141209151500140205151504141617061800140317170400999099090990113909909999999919999909909199099190999990992999 -080903010500080910101100081210101300060214040400151514141600151717170400929999993090990991990999999911009019999999999990990900999999 -080509010400080409091000081111111200020413131200141413061200031504041200909999993099099999910919909190999099991999999990991099929909 -080309041000081109091200050204131200141414151500161717151500041717010600929099999090199991999909099919009999990919999919909930999999 -080809090904080310050600021112131404111115161600171718161604171701191900999909209999999919000919990990009999999109999109099309999999 -060508090900101111121300011111141304151616161600170418191904171702190300900990909990990999909939990919099099990019999999099192999199 -080309090900080610100200081112101300051414141400041516161700041816011704929999999199999990991900099999019099999091990990999939900990 -060808090900011008090904051104020400121314151600120317181600121717181600099999199993919090919909009999199911099209999990999999909999 -080901101000060909101004111112131404021515131400161705131400031804191400099990939999909099109999990901999199091999991909991909929099 -080803090904081010090900021111111200130614151600171818181804191904010500929909999999999919090999999190909999091000991999090030999999 -080901051000080909101004081112131404061502131600041718131600191903131600999999930990999099190991000919909019999919990199991999992999 -040108080804091010111100121010111100131306141500020403160500171717161600999900390999999909999919099199909990091990090999919299999999 -060808090900020808100900111105030400121313131300141415160400140117170400990990999991919919929999999190909999991099999000993099999909 -080910101100080310101100021213051104141506161100171718161600041818010400199999299999999919099990090109999199999109099119999930909999 -080806090300080809091000041102121000131415151604171815151600050119191604909999999299099999099991119019999019909999990199903099999900 -060804010400040909090900101010111100120413111100140313151500141402150500099999003099999909199999999091999090999999992909999190991999 -080309090400081009091100120205130400121214131300041515151500161604010600929999999099190901999999009919999910999919999999900030999999 -080809030500101112121300101114041300101102151300101116161700040616010400992999019099999999199999999991099910999999090190909930990999 -080801090400100611121200100213121200101415150400100515150400031616161600999090930999099999199919099911999919099999999099929090999999 -080905100400080311121304021111141300151614141300171717181804061901181800009099990999209009999919999199999109999199099909090399909999 -020808080800091004031100090912111100011306040400141515161600140504161600199991992999099990999990099919999309999090090909990099999999 -040108090900101112090900101302141404101315141604171818050300061818191900990990309991099999999911990991999991109090290999909999999099 -080503090900101111060900121213130200040413131400151516161600151501170400092990990999999909091990999999919999190019999099999309999909 -040601080800091011080800121013130500121004141500021603151500041717171700999990039999199909000919999990099999091999991999901299999999 -040808090900100811030900101211130200101211141504101216171800050116060400999990992999999990991999919999199909009991090119903900999999 -050308040904101010111100120613021400151604171400161617171400181818011400929000919099999999190909119099999990190999999099999039999999 -080809040300050810111200131314141400131304021500161717181500060118181504990999909299991900019999999999199990999091990990903199999990 -080909090900081002040300081011120100081011121200130411060500041414150400999999919299109999999901139999999999990099099909909099999009 -080909100300080909061104081213041400151515151400161604170200160118180500990999990299999099091909099900999999999191199091993900999999 -080309041000080509111200081309110600021409110100151516160400150416171700299099999099990990999999909109999190399191999190999909990999 -080609090904101112130300141415021604051717161600041717181800191901181800099900909990012999199999110009999991999999990909990399999999 -080909040300080410101000081102040400121111131300041414131300151401060500099999990299999990109909999991909099999199990909999300909999 -080102091000081112041300081111060300081414141400151505041600041517171600991199310190999999192999099909999999990990099099999999900999 -080909090904081011120100131406151504021616151504171819200500181803202000999909990990113991909910990199999099901909991900999999992999 -080808010500020909090900101011120400131314151504130304151500161717170600999991193099999919909999099190009999909209999999909990909999 -080609101000080209110100041209111300041209111400031215111600041515040500990999099990193991999909109999909099999909092999999900909999 -060108080905101108080900121314150904161313171804191920021804191920210300999000399990199990199909190099199999900991999910099999999129 -080103040500080809091000111213140400110413021500111613061500111616171500999999320099990991919901909909199991099990999999999999999009 -080910100300061110101200131314151504161717020400161717180500160119191904099990099299099999091990990990199099099991999999993110999990 -080809031000080809091004061112021000051313141500161717181500041717011504992999999999999090919900909990199991090919990919999939909990 -030808080900101011020900101012121300041412121500051616161704181806010400299999991999919999190990999999909009999991099990000030999999 -080808080400090909091004110212130100110514151604111414151700031818180600999999990099990099119911939900099999009999099999929900999999 -040806010900101010100900021112120400131414150500131416160400130316160400009999093999990991900919999109099999099909999990999999929909 -030804050900100811020900100412130900100614150900101614171700161601041700299999900999119999919990099999199999999091099019909309999999 -080809031004110909101000121212021300041414150400161414151700060105151800999200999999999909091999119991999999990999090909903090999909 -080904100300081105121200081314060200081315161600171318161604170119191904009299991990099999991999099990919099990909999119093099999990 -040804040900051010111200011010111300141415131300161615021700161615060300009099099090900999999939999901999999999991199019999902999999 -050808080300091011111204131011111200131415021204011617181800061920181804999990099299999009999991999919199009109100993999999099900990 -060804030900101011110900101212110900041313130200141515151500040116040500099299009999999990999999999990019999190199990999903090999099 -040806090900101105090900101213130100101415131604100215170400181815170300009999099999909990909901939919999999009199099199909999999129 -030804050400080809090900021010061100121314141500161717141500041717011500209999990099999919990919999919009099990199999910909939999999 -030809100400110812131304021415131304161417170600161617170100181818190500200099999991909019099999990190999999099099999193999099999009 -080808010900101010100900050611110900031212111300141512161704041802041700999999903999999909919999999909909991092999991900091199901099 -080401040400080910101000110912121300110905120200111404151500110406150300999999030090099999091909999999919909999099199099990999999029 -050809030400101109121200101009021204131414151500161414151500040117170600099999092099999990999999010099199991990999990999903090999999 -040801090900041010091100061010121100041302121100131314141100050414140300099999039990999999909909109909999991990919999999909999990929 -080109090900081010050600081111121304080211141404151516170300151518190400999999300991999990990999000999999190909199999112999099999009 -080803050900080810020900111111111204041313141400151515140100061617180400929999990999111999991999900999919990990999999903999909900009 -080902101100081212131404081212130300151516171704151516180600040116190500911199199199909099992999999019099999909990099099903909999909 -080910011100081210131100081414141404081502160400151517181800050604180300099999093999019999190999990919909911999901999999900092999999 -060808010400090908101000090911121200131414141400150405160200040316160400099999993099909999019990999999199099990009199991909999992909 -030804090900101010090900021111111204131414151200040614160100171717170500209999199999999919990999990199099199090990999913990909999909 -080909030400080909051000080211121300141412121300141415151500060116040400992999999099999991900901909991999919999909999999903090999099 -080808010400040910101100021210101300140415151300140515151600140306041600999999903090090999999911909190999099999999990990999009929999 -080809020400101011121200041013061200011414050300151414161600150404161600991099011999099999199909099991929399999990990909990999999099 -080809090904080810111100021210111100131212061404150516171800190301170400999909990999999990999919999190909999001919099000919399929909 -040809031000041109041000121113141000121106140200121115151600120115150500099299099990909999099999099999919999099909190191993999999909 -080803090600080809091000021112131404151512161704151512181900052020011904929999999099999919900911900999099999009990099019900939999990 -080808080900040305020900101111121300141515161300041516161300041706011300999999291999900909919999919090999090999999990991990939900999 -080801090900080810111104121213111104120402061400151617181400051903181400999999930999019099999990190991009909990919999190901999992999 -080801090900081011091200131313131204061402151204161617051204161618190300999999039999109991999999990919099019009010999999099199999129 -040803040900100811041200020811131400151515151400011616171700051606171700999090929099999909900911999199099999099910993999999999900999 -080806040900030802100900111213131400040515151400041615151400171717011400999999900999109921190919999001999999999999990990990039999999 -080909010400080910101100080510101200081313130200061404151500041603171700999999903090999999990909909991999999190099199099990991909299 -040801030904100811120900100813120904100814140200151514141600061718190500099209939990099999199999090991919999199099999990999900900099 -080901101004080911100500081212121200131314151600031314041700060214041800099909939999090999109999999991099999092990099999991990901909 -080803060400080409091000021111121000131111121000041414121500051614010400929999990099990910999999999199999199999919090910999930900999 -060108040900101111090900041111040200121213131300140503151500141617151500990990309990919909901999999909919999990991999929990999990099 -040308050600091008111100120208111100131313140100041515141400041516160400929990990090099999999911999199099991399999990909999909909909 -050801091004111212090400061212131400151513131400161617021400031604181400099009039090909909999999199909999999099991999119999999929009 -030809091000060809101000110402121300141414041500041616161600171717010500299999999999199909109990909091909999090199099999990930999999 -080809050600080804041000111112131400111112150300161712151800160102181804900999999099090909990999009999999919990199299909993199999190 -080809011004080411111000121314151500021414151504161617181900161603050600909909903999099999100911999199999999901999099109999200999999 -080910100300080910101100050902061100121314141100151617181804040401181800099299999999999999199999909001999009099991990019000399999999 -050801090900101010100904111213140600111515161604110215161604111718180300099999030999999099109900909991099999909199999999091999991929 -040809101000110909101000110404051200021313131300140315160100171715150600009999999999909999990999909000909199991991999903912999999909 -030806040900080810020900041111121300040511141300151515151300040116161600999092909999110999919909999999199999990001999990903099999999 -020808080300091010101000090411121300141516120400141416120400060116120500199291999999999999099999909100909099999999999000903999999909 -080309100400111212131300141215131300021616161604051717171804061919011800290091909999999919999990099199099199900991999990099039909999 -080504010600090910101000090911121300141402131300141415041600030415151600099990903099999999901990099999999911999900099999920999999999 -080809100500080211111100031212121200061314141400151313161600040417010400990099109999999921909999999999199099999991990909909030990999 -080809101104011213130200121213131400151515151604171705181904202020060300991109019193199999991999999099919999900900199999090902999999 -080801091000080809091004051111111200041314151200031604171200061818021200999999939999090099190909999999199000999991992909991919909199 -030808060900100811110900041202040900121213130900050413130100141516161600990992999991199999199901999999099919099999999093909099900999 -030808080800091011111104091212041300091405061500021617171800161601170400999992099999999090900999999909909999091009099190919390999999 -040108080400091010100500111206131300111414130400111414031500110402161500999090390990999901000999999919909999999999999992990199999119 -040108080300091010111100091010110600091212021300091415151600050415150400999990309299999999999909999919109991099099099099900990999999 -060108091000111111090400121313020400041314151500161614031500161614051700991090319099999900919999909099199990999999999092999990999909 -080910061104031210131100140213131100141415161704181818181700051920011704199902190999900991999991999991999901009991999999999039900990 -080906100300080211100400121304101400121515151500121605171804120117171800909299099999119901990919909990999999999000991990093999999999 -080804090300080804091000041112120200011112121300061414151500051614041500990299999999991900091999999999919319199099090999990909909999 -080808090900020410100100110410101200131305141400151515141400030604041600999991910990993919999990909199909990991999999999920090999909 -040808090500020808100300111213131300111214040400151214161600060104161600990090999991912919999990999999999999991990091009903099999999 -040108080800090909101000041112101000131302140400131516170500061503171700999990309999919909999990999900199991099910999190909999992999 -040105080804091011121300141515161600141515160200171706181804171703191800999900300990111990991909999999919999990999199099099999999219 -050401060400080808091000041112091300031412091300150212091300151516161300999990030099990909199991009919999999992199999999991099999999 -040808080800090904100100091112130400111114140200151616161600150503170600099999090999903999919990109991999999190999199999990910999299 -080808090400051010090100041010091104121212091300060314131300151617170200999090909999903999999999910090919999999999999299909191900919 -040406080804090902080500090910111200131414140300151616161600150117171700990900099999019999110999919091929999990199999999993099999999 -080409010600081009091100121005041100121313141100121313021100031504160400999999093099991909999999999900099099099999999911991900929099 -080808090900051011120300011111121300041415121300060416021300171616041300999999900990099999992939999991999009999910999911900999909099 -080501090904081010091100081010121200080402131200141515131600030604171800999909039990900999990999999991999099099919091999920990999009 -060808090300050808091004111213091404111516161700181516160200181801190400099999999290999099091900000999919999999999190091999309999909 -040408010900101108090900041212131300141502131300140416160500140616160300999990093990009999919999099099999001999919099099999999990929 -030808091000110508091000121302091004061415040400011515161700181818181700299999999990909909199901900919999019999990093990999009999999 -040108080500090908101004110212101000131313140300151616171804191919190600999990399099999019099991199119199999290999990990009900999999 -080409090300080209091000111213051000111114041000151515151600060104171700999299099999190901999999099910999900991999999990903090999999 -040809010400101011121300031014141300151614141300151602171300051606170400009999903099900999919990999299999999999919991190999099909909 -080801090600080810100400051112131300141502161300171718161904171703161904999099930999099999010990999009199091999919999199099999992900 -080801090400080810110300121310111404121515161400121517021400120604180500999099930999099999992900190990199999999901999991990009999909 -080109101000080809111100050409111100021209131300141404150600031404160400990999399999109900999999999999099119991990999900999909929009 -050401080400091011111200101011111204131302141200131516171700031818180600999090030990099999999999900991999909099910999199991999929909 -080801090900101011090900041211111304141516171304051818021300031818061900999999039999099999909900900991999001900991999919999990929909 -060105080800091010080800091010110400090212121200091314141500040404031500999990309991999999909999009990999199999199099199900029999999 -080809101004060909101000011111120400131313021400151516171804151505031900900909999990999990909939909919999999199191199119099091999929 -030809101000110812101004110806131400150216141400150417180100150518180400909992909999909099999999099109099119999910999093999199990909 -060808010900021011110900121011111304141015161300171818041304031818051300999990093991999919990991900199099990991900999999029999999909 -080809090600080810110400011210020500121210131400151515151400040404160300909099990999190991999939109999199999199099999999900902999099 -060809090400011009111100051213131300141414151500031602151504171616180400099999099093099991990901999991099999999919999199029909919909 -020808080300090510111104121213061404121215161400011718191400202019191404199291999990909019099999990990099990999109993990990099990990 -040608090904101011090900031011111200130214151604131718191600130501191600909900909999999929990999909919099190909909991100990399999999 -040808030400090808101100120205101100131313141100151617141400040117170600992990999099999901999909909910999999099919990109903999999909 -040808080800090909090100041011121200130214151500130604161700130316160500999990990999993901909999099910999190999000099999999990929999 -080801090900080810090904111212131400021516131400061517181400031504051404999999939999109010909999909199999190990909999990999009929990 -030808080905101011110904101011110912130214151516131718191520211717040106999902990999999099999999990919090919999919909911009003009999 -080105090904080810110904121314021500121614171700121814192004121814060300990909390999919091119901919909919999999099199990099902999999 -080805091000110309091000120413061004140213151000161617171800161617010400990990999992990919999909990199099199099100999990999930991999 -080805040900030802100900111212121200111313130400111414151600061714010400999992900999190999190999999999199099099991999900999930900999 -080609101104080212031100081313141404151313161604151718161600151901200500991909012990199991990999990999099999909919999009990309909909 -080803090900100511090900020612131304140415131300141616170100041618181800929991999999099919009990990190999990999090991913909099999999 -030808090600101112091304141112091500160212171504041818191500051818011500999992909099999019990919999019099991900111999990999939909999 -080801090400080810111100121310111104121302140600041315160500171717180300999099930999019999999900990999199991099919999910909019999929 -080309101104080412121100081305021100141404151600141417181800061717011800921909991990999999919909009909199999199909199009999939909999 -080808030900100411090900100611020400101212121200101314051500040116171500999299009999999999919999999900109999999919990199903009999009 -080609090300080209100400111112130400111114131300151515150500040116161600999299099990190991909999099990909919999919999999903090999999 -050804091000080806110200041212031300141212151300161617151500161617010400990190991199999990021999999099999990190999999009999930999999 -080501090900101011090400101011121200021311141504161611171704031819061700099990939999109999990999999199909190009199099999091099929099 -080809090900080610031100021010041100120404131100121414141400041501160500909999099999929909999919909199999990999090091999990309909909 -080903100500080910101100080902121200130914061204151616161600041717010400992999999099999999190999999091999019900190099999900930999999 -050809010400101011111100101012131404061516131400031702181800171704181800909990003099999999910999190991999099999019099199929099999999 -080808030904020510110900121210101300121214131300011516171804061919190400992901999999900910999999999990999999999100993000090990909999 -050804010600080809090900041011111200131304111200131314021200031515041600009999993099099990991909909909999909999999999911999190929909 -040809090300061009091104011202111100131414151604131717181600131717051600019999199290999091199939199909999090009990990999999909999999 -080809041000080809111000120409130600121404131300120215161700031515010500909999990999990999909999009909999199999100099919921930999999 -080806010500080804091004111111111200131314031504161718190200161717191900909999993099901090991999909990919909909992190909999091999999 -080909101004080511101000081211131404151511161404151517021800060103192000099909999999099999909909990909099910909919099911903991999219 -080605090904080810101000011111111104121314140200151614171804191919200300999909000999099999099939990901999099190999190991090919999929 -080809011004111112101000111112131400061512161404171802191400170305201404909909903999019999909999909909999090909910991199999909929090 -080910031104080812121100050212121304141415151504141416171800061920011800912909199999999991990999900010999999909909099119999039900999 -080809101004080811111100121314140100051514140400160217171704161603180600900909990999999999909901939019999999099109991999099909992909 -080401040900081011110900080211110900121313051400121313041500031616061700999099039999999990999901909919909190999999099909920990999909 -060809101000110309121200110409121200111314141500021616161604171804010500009999990992999999999999999900909909091909999999011030919999 -030804091000110804101000110802041200051314141400151516161700151516010600990992990999909999990911999991009099999099199991999930990999 -060803090900101112020904051112040400131112141500131116141700130116161800092999099990911009999999099999909910999999090099993990999909 -080409010500080810111200131306141400021516161600171704181800171703181804909999903099110991090999999919909199991909099999999999992990 -030804090900060810090900040810101100050204121100131412121100151516011100299999909990999999990909999919099999090109990999991139991999 -080809100300080809101104050409120200131414141400151616171800061601041800999299999999091099991990119091999099999919090909909309999999 -080809090900100811110300100212130400101404151500101616151500040516010600999999909990992999199991009919999909999199990919909930990999 -080109101004081112121300081412120600051516041700040216171700181818180300990909309991990999990910999010999990999199990909991999999929 -080501091000080811091000121314141000020414141004151617171800061903171804999999039999199991909910909199999099901909091999991999902990 -080909090900080802100400111112131300030412120400141415161700141405010600999999099999190991109999999209099999099901999090999030999999 -080109090900081011121200131313131400041516060200151504171700050403171700999999309999109909199999919909019009999909199999900999999299 -080309090900080410100200081105120400011112121300141106150400041115151600929999999190991999919900999999909319099909990999909990990909 -080808090600100411090900100212121300140512121300151616161300030401041300999999909099909990990911999199999909991991999990920309999999 -040108030900101008110900101012020500131212141400151616141400061604041700999290399999091999919991199099009999990909999999909990990909 -080808030900051006110900041010120900131414120200151416121704150401121800999299099990900999999909999909919090990999199919090391999919 -080809101000011109041000111109120400131409020500150403161600061717161600990999099993199999900999199099199909990091099999909299999199 -080909091004080311101000121311141400040211140100051516170400181818180600999009999992999919990919999919999090399191990110999909999909 -050809101000010804021000110804120600110804131300111415130300111415160400011999991993099999910909099999199909999099999092999999999009 -080909090300080210111100121212111100041313140500151313141400041606010400999299199999119909999999099999199999090999990909990030909999 -040808030900100811060900120211131400041511131404011611131700181818130500992990999999909901990901999999999010009199093999999090999999 -080910041104081212131100081406151104080216161100171718191900170305011900900909099999909999909909990900099919199199199099999039929999 -080809091004080811041000011211111000131406151000160517170200040318181800999009999999990990999931909900199099990091999991909991992999 -040803091000111109091000121304140200051516141400011717181804061717181800099999029999991909991909999900919009999091993919099999909999 -080909100500080909110400081213021400121215151404040315161700181818010600999099990990990990909991119999999999909290199991909030999999 -040108080800091011121200131411121200151516021704150418061700051818031700999990309990119990999909999090199999109900999099909999999929 -080808090400031002110400121313110500121313141500121617180600161601181804999092190999190999199909009999999999099190099109999399999990 -040108091000111208131000111108131400060208131400041515161700041515030500990090399999999991999991909999999010999199990900999990909299 -080801090904080810110904121213110600121213110500141516021700031818181904999909939999990090199990109999999999099991991110929990999900 -080901100500041111111204131314151200131302161200060417161600031717181800099090030999990090919999199991099999990019999999999990929999 -040808090300100808091100100412091304101414141300101516170200050116160600999990999299999999091990990990099999999911190191903999999909 -050808010400090808101100060412121200131313131400151516021700031818171704099999993090900909919999999909919999199991999110929999999090 -080801050904080810110900121212121300141515061604141502171800141919032004999909930999100991990999999919909999009919990911999991909920 -080809060400030809041000110212131400111112130400151512131600151504010500990999999099009920990991909919999999099999999010999030999999 -080401090900081011090900080212131400151505131600151506171704031818170400999999039999019999910901199910909999999999099099020999999909 -060108090904101112090904131312141500131612041500021612171800191919030500990900309991099019999999009909999999991990999900919990999299 -040808030904100808110904101012110900131314150200161617181900161601060500999200999999999099099990999909019911199199999100999300999999 -030808090500100808021104101212041100131212141100151515161704181819010600299099990999911099999999999099099099999900199901099030990999 -060104080800090909090400101111120500101311140200101315031604101315171800999990300999990901999999199999109909199909199999099921999919 -080909101004080611101004081213140100151617170400150502170300151818181800999909909999009099099900139901999099099999990919999192999999 -080804010600080809091004111112121300051412151500031414151500161718020400999999903099999009910990909099199999999909999999929919911109 -080305090900100411090900121314141500021316161500061716181504191919011504299991909999099919090990999199999119999999990010099039999990 -080809011004051112131000141415131004141606131000161617171704031819200200909909903990001990999999090900999999999999199999099991921119 -060208080800050910100400111110100100031212131300141212041300041515040400019999119990990991999999939290099999999999990909909090999099 -040108080800090910110500090910111100041213020400141413150600140313161700999990309999199999990999199909199091099990999099999900992909 -080409090600081009091100081012131300051402131304151617181904031717011900909999999099990999990900199901999999900011990990099939929999 -080809051004060311121304141415151604141415151600021718190100171720202000909009909099990002009999900999999999991990991913999199991999 -020808090300101008111104121212111100131415040500161715181804060115181800191291990999999019999999999199999199990190099009003999999999 -080809090400101009091100101012131300031404130100150205161600151706160400999099099999990999990991199919999990392190999099991999919009 -050401080400091011111204131311141400131515141400031616160200171717170600999090030990991090991990999999999990999999192991999900999999 -060105080800091011080804121313131400121502041404121617171400121617170300999990309991009010990999999999999119909910999099999999999929 -080803091000080805101000111112120200131314150400161317170600040117171804992199999999909990991999919909199991099919990199903990999900 -040809011000051109121000111109041300060209141500161617171700160318181804099999093990010999990999909099909919099190999999999909929990 -080109101104080909121104131415151100161415021100161404171800051406031900990909390990990090199909999099999991999901999991999991900929 -080109051000080809111004121311111000121415161600120604161604021718190300999999390999990091099910999900999990999099999909019999911129 -080109091000080809090600111111110500121314021504161313171804191919031804999099399099099991999999999901909091000991999991009999999920 -080809090300100506111200101313040200101314141500161614141700161601041804999290991990991999091999909999919009199099099999999390999900 -040804010600020809101100120813131100140813151100141616161700030405171700999990903091900919919991999199099999999990099999920999999099 -080309090400080809090200101106041200101113141200101105151200101104010400929999999099991909991999909990999900999990990901999930990999 -080809010400100809111100101012111100021314151600061317151804051303150400999999993099009999999991199199099119090919099999099290909999 -080809040400030909101100040212101300141406101300141415101300050115160400900999999092990999199901999919999990999999999000903909999909 -080909100300080211040500080412131304081415131300011415151600171717170600991299199991909999090990990990999199999990993090990990999999 -030808080600040910111100121210110400130210140500151616171700041601171700299099199990999991999999909919099199991900091909999399909999 -060808090400100808111100100212111100101305141400101304141500041603011500090099999990909999999991199919199990999999999090901939992999 -040806090300100804090500101102091200101314151200101313161600040104161600909290999990900999999911199999999900099999991909903099999999 -080509061000111209101000131209031404151209141404151617181804150119200200090990999999909909999999920099999909909099190199093191999119 -040808040300090808101100121202131100141414051100151616171704060116171700999990990290909909999999119091999999991990991909003999999999 -060108080900101010050904111212120904131314150900131316160400021718190300999990309999909019099999900199099990999909099999919999911129 -080801040500080809101100121212101100130214100600131414100400040304151600999999930099109919999999909019999919099999999999902000999909 -040808091000040808110400051213130200121213141500161616141500040106031500099099990090999990909909919999919990999019999999903099999929 -040104080400090910081100120913080400120613140200121513161600121505160300999990309099090909999991099999909091199999190999999099999929 -020808080800091010110100121314111100150414161604031714161600181804050600199991091999993910999999099109099999902999999099990000999999 -060808080804030902101000111213141400041513161600051713160100041818181800099909099999199921190919999999909099999099990913990909909999 -050108091000111111110400121213141400121513021600151513171700040613030400990090309099999999199990199909199999199999199999909920990999 -040308080800090910110200090904111100051212131300140615150100161715150400929990999199009999991999999990199990990991999993900999900909 -080803091004080811121000051111130200041415151600171815151600170104061600992909991999991900991999009999919009199999990199993099999909 -040108080500090908081000090906111200130214151200130414141200161616030400999990399099099999990999909190099110999099999999909920999999 -060809101100010812121300140815161300140804021300140517181804140317181804000099999093199999199999199999199009999991999019099999992990 -080803091000080804090500041102091200131111121200131414141400061501040400992099999099099900999991199999999999999199090999990300909999 -060808090900101011120900101002121304141516121704031518121904202020010500999990909999919999190991990199909900902909099990099030999999 -080909090900080403040200101112121200041113140500040414140100151515150600999999929190990909991900999099109990999099999993909099999909 -080801090500021011121204131414121500161414171704181819171704031806202000999091130999199019090999099199909999901909999999029009999999 -080109051000080809111000121309141004151616041700181616191904180602190300999999390999090901999999090019009999990999099999099192909199 -080801060400090810101100091210101304050214151304031617151300181917151300999999930090090999999991900910099099909109999999921999919999 -080806010400050809101100121212131400150316161704181802171704181819191900999999903090099999010999009999199299001919999199099099999999 -040808080800010909100200061109101200131415101200161415101200170404050300099999911993991999991900999900999099990999999999909002909999 -050108090600100808110400121213111404151213111400021603111400171718041400999090390999990901999990090999999199991999991990991299991099 -080808090600100411091200101309090300101415161600101402171700040504171700999999909099000999999990999901929099999901999919900099999999 -040608010900101008080900111002120900130514120900151514121600040314120400999990093999091909999999119001999999990999999990909990992999 -040808080300090210101000111212060400131212041400151516161400150116170500999990099291199919999999099199909999991090999090993909999909 -040809010600051009111100120209111300140415151300141616151300031616041300009999993099199901999919109100999999999999999909929909999999 -080609031004081109091000081213051004141415160200141717181800041901181800999209099999999990099999990000019999999000199919990399909999 -080809100300080809111204051309140200151316160400151716160400150601181800999299991999991090991909919990199909099999990090990309999999 -080109050400080809101000111111121300141415150200141415151604041703180600999999990099119990919999919099909999199999099999090910909299 -080501091004081111120600081111121200081314151600171314021804171304190300999009030090999999999999099991999999190991199019099902999099 -080808080900011011120900041013131300141015061600141402161600040405031700999999990993009999090909999999099919999919999019900091999929 -080910010600041111121200040511121200131314020400151516170300151516171700009990903099999999999999199001999901099991999999999992990099 -080309011004110609121000130509121000021409151500041616151500171717181904299901993999090919999990199199099119999909990999999990999000 -080309011004110609121000130509121000021409151500041616151500171717181904099900999999090909999990099099099009999909990999999990999000 -080902101000080909111100081213040300051414150100161414171700040406171700991999911999999999192909999901099091399999990909900099999999 -080801040600080910111200090913111200141502111600141504111700141503040500999999030099100999999991999091999919099999099099999900992999 -040108090600100808040500101111111100121313141400151313160400021717170300990090399999999991900919999109909999991999999900919999919929 -080409010400080809091000051111111100120213131400120613130300041516171700909999993099990990919909999919999019199999299999900099990099 -080802091000080806031100041213130400141414141504161617171500160117170500911199999199992991090909999910999999009190999999993999999909 -060308090900020808090900100504110400121313111400151516111700151501041700929990999991999919909909099199909999991099099100999309999999 -080603091000081111121304081111120200081415121604171818191604170118200500992199099199999099991909919909999991900019999900093909999909 -060808080804010909101000050909110200121213141404151617140300041818181800099909099093999999999909119909919909909009990992909099999999 -060808080904031004110900121010110904131415150900160215150100161718190500099909990999900929999999990190099199999199999993991109901909 -040803090900080804101100021204131100121214141100151614141100150604010500929990990999909919909999909190999999999199990190990030999999 -040108090900101010061100121212131300140402131300140515151600041715150300990990309999990919990999999091999900999919999091999992900999 -060808010300050408091004111213141500161213021700161213181800161213181804099999993299919000191900919999109991999999090999999999999990 -080910031100080910121300080904021400151515151400011605060400171717171804999299999199091999919990999009199999099190993999990090999900 -080808090500041004091100031010120200130614141400151516041700151501171700999099099990990999090929119999919099990919099009999399999999 -080801050900101011120904131014140904131514141604130217181600131906200300999999030999109099099909900919909999909199999119990919990929 -050809101000011112101000131312041400061312151404161602171800161619031804000999999993109990900999999099999990909910999190999999991290 -080901101000020911101000120904130500141415151600140415061600031717171704199991939999109919909999099199009999099990999099929990999990 -040108080300090909091000111112051300111414021300151516061300150417041300999990390299999990191999099991999991199000999999999099990099 -080109100400080909111100121305061100120214150400120414160300121717171700990099390990999991999910999999099119099090999912999999909999 -040403080900101005110904101012130200141414150600161617171800161601171800992990091999991099091990919990109991999919999090999399999999 -030801060500090810101000090811111200130211111400041516041700151504171700299999930099999999910999999019909019990000099999999099999999 -040806010400090909091000111112121200021314141500161617170400031617170500009999093099999919900999999199909009991909099999999999929909 -080808030400020906101100120909131400120415151500161617170500161601170400992991999099909919900999909990909909991909999190999399999909 -080104090900080810111200130211111200131405041200131515151500030604161700999999300999110999999911999909999909099999099999920990999009 -080104091000081112091000131415151004131615151000130502171700130618031704999999309999109900199909900909999999999019999919999099990920 -080801050900101011090904101012131400151602131400171818131400061803041904999999030999019099919999109901999099990919999999909990992900 -030809100600040209101100121309100500121415101604171718191604171818011600219999999090190991990999999919999090909109999110099939999999 -080808080600040502090300101111041200101013141200011313151200041616161600999099911999092909199999999991099909999990993909990990909999 -080109101100081213051404081516161404171716161804171706021800031920201800990099300090199099199990990909999999909991999090999919921999 -080801090900051011090904041011110600121013141400041002150300161616171800999999039990199099900999999099999000990999999119990912999919 -040108090400101010111100040512111100131313020600141515161600140304161600990090309999909909199990999991999991090991999919992099999999 -030808080500040904021000041112061000131313131000141415161600141515010400299999991090901990999990999090099999999090199909999930999999 -060404010500080909090900041010111200131310111200131314021200031514041200999990003090999909019999919909999999999999999911999909921999 -080509090900081002110300081212131400151504040600151516161700040116171700099999909999119991912999919019009999999909999099903999999099 -040808090400030808100200111111121300140512121504141616151500141616010600099099990992911999991999999990919999009099999909999930909999 -040105080800090910080600090911111100121314150400160217171704161618180300999990309099009999999999999199099100090199999199099092999999 -030808090900101111090904101211050400101212131400021516171804191919010600999992909999909099999999999990009999091909099110011930999999 -080405030900081010040900111010020900121213130400121213141500040116160600999299009999909909999999119091909919999999999900903090999999 -040809090300050809101000110802101000120813141400121215161600040601170400099999999299099909999999199091999919999190999109900309999909 -050401080800091011080800091212021300091415131304090416171700181806170300999990039990109991999999199909199909909001999999909092999999 -030808090200040510101100121210101100120413141100041313140100041504140600291199999199999900999990919990199909999999990993990999900909 -030809040500100809061100100809121304140209121300041516121300151517011300990992999099999999900990990199999199990109999910999139991999 -080808010900101112130900101014130900030615050900160417181804161602181804999999093999009990999999109991999909992910999009099199991990 -040406080300090910081100090910081100121210041300011410150200051617171700999990009299909999999999999099919999999090193109990191909999 -040806090500011011120400131414120200131514121600131517121600131517031804099099000993110999099909919909919999999999999099999991999920 -080805090900080810031100121310140200121506160400121515160400120104160400909999992199999990991901119919999909099999999900993099999909 -080804090900080810100100041110100400041213020600051413151500161613031500909999990999093909999990909901999091099091990999999999990929 -080808080400060409101000011109021000051112131300041112141300151104160300999090909999919990919931999999199009999999999909909902909099 -040503080800090909100800011104100200121113131400121113130600041115160400992990099999919991991930919999909009999999099999909999990009 -080806091000110802120300111313131400111516171404181819202004180105202004999199901299019999199999999919999090009100999099093099999990 -080804090900081010041100041010051200131402151500130416151500031616010600999999909090909999990909999909009111999999999009929930999999 -080509091000081102121004081314151000081616060300011616041700041818171700099999909999111091999990099919029099999999993909990999909099 -040809090500100809040300110812131400060812151404161612151400160112170200099099999990099909902999099099999999909099999199993901999119 -030408090600101011111200131011111204130214141400131515161700051515010400900092990999999999999999990919009199999999091910909930999999 -050809010600101011121300141002150400141616150400141617151800140317151804009999903099110909909991909991999999999919099990999999992990 -030808080500060409021000110909121300111114141300041514141300161616011304299999991099999900910909919999999999999099990091999039999990 -080409091004111109091000111105121300011415020400061515160300171717161800099900999999099999900990909909909391999191990999990992999919 -080801091004110812121004111312121404111302151600111317180500031919200600999009930999199091990909990999009919999910099999999109929909 -050808010900101008090900111213131300110404021400111504061400111604031400099999993999019990199909999909199990199990990099990999990929 -080809040300100211111100120406131300121414131300121514161600120117040500909999900291199919999999999900999990999099991909993090999099 -040809090900060210101100121212120300040513131400151613131404151501171800099999009999191901992999999901999999990999990099099300999909 -040808030900041005060900111010120900111314150200111316160100111316160400099299099999099909909909999999019991199919990093999999999909 -030408080400091005081100091002121200091304121200131314150400060116161600909092999999090999990911199999999909999991999110903909999999 -030808040500040408040900101102120900101111130900141414140900040601151500290999999099999900109901999999099990999919999999900300999999 -080808080500090210110100090912131400150312131400150412131400160404130600999090191999193999109999999099999929099999990999909999909009 -080109090600081009111104081213111104081214151500161605150300040217181900999999399099009091999900990990999990999199999999991092901119 -080109090500080809090600100411110400100412110300130214141400151616160400999099399999090910999999909999999990991009291199909999909909 -080909030400021006111104121213110400121214141400011515151500051616161600192991999091099091999999099990909999999109993999990999909999 -050308060900101008110900100408110900021213110904141414110100041516171700999990290999999999999999999100999909001909999913999009900999 -050804010900101111090900121111130600141502161600141717171604141818040300909990093999919909999909009019999911999099999999090902999999 -080909090900031002060400051011121200131111121200140415151600141401041700199992019099999999109999999099999091990091999990999390999909 -080509090904081010100100111213131400041513021400161706181400040318181400999909009990993990919909919009999999199091990999909099992999 -080808090904031002090904061112130400141415160500141417160100181818191900999909119992919099019900909999199990099909999093999909999099 -030808080600090410041100090902121300141414151504161617151500160501181800299999919099009999190990109999199999909909999019990309999999 -080809090900080810110100121213111104121415041600050217171604061817170300999999909999013999199991990910909990999199990199099999900929 -030808060400090408021000091111121000051311121000141315121000041301120400299999990099919990919909999999999999090909990019909399999909 -080909011004080909111000121314111004031506111600041705111600171702181600999909993999900909999900090990999299999199990990999019991199 -050108040900100808090900111111110200121204131300140603131300140415161700990990399999909909199999919909919990990999990929999990990009 -040801050400080809101000111212121000111314141400110415160200110315040600999990930099099999199909909901999999999099199911999900992999 -050808080800010910111104121310111400121210060200151510161604171804190300099999099993119090991999999909919990999099199999009919900929 -030809100600111209101300020509131300141515161600171515161600170404010400299999199091999919909999999100099191999999990999990030999999 -060809100400111212130300141212150400141405150200161617171800160117171804900090099990992999919909909999999999190909199191993999999990 -030808080900101010100900041102040400121212120500061314141500131314010400299099199999999999190901999919099999090991999090999930999999 -040604080800091011121200090913121200141414150100020404151500161616030500999990000999009999999990099990999991391009999999919990999299 -050108090900101112090600100413141400101513131600100217171604041817170300990990309990190999199999099909999919099199999199099999900929 -060402080800090910111100040912130300041414130100151414130400151504130500901990911999999999192909999901999091399999999990990999990909 -080809031000040409091100121213021100121213141100011516160400051716160600909299999199999900099999919999199909999901993190990999909909 -080809090300080809061000011112121004131313121004141516170200051818041900999999999299009990999930990919999999900199199111900990999909 -080309091004111111040500120213131300141506161600171718181600170118180400299001909099999991909910999190999199999199999090993999999909 -080903101100080912121300080912120200051415161604011414161604061718191904992199999199099999991909999999019091909919993999099099900090 -040809091004010809091000110812121000111113140200051516171700061804170300099909999993191999099999999900919999190001999999990099909929 -050809100300110409101200111313141500111313020400161717181804060117181800009999999290909999901999919999199191091990991999003999999999 -080909040600080810111204051314140100151314141600021703181804191919181800999999900099090009009999939999999119091999099299011999999999 -020808080300090909091000111111061000011213041400051516141404171515180400199291999999999919999999099910909390999009999909009909909909 -020808080300090910100400090910101100121314151104161718191904060118180500199291999999990999999990999199999100909190090099003990999999 -080909091000081111121300080611021304081414150300011414160400051718181804999099999099991999919990190991929090999990993990990099909990 -060808090300100211111104121314150400161616151504171718180500170118181900991290199991099019999900009199999999909199999099993990999909 -080909100300080209110400081213131300121214061500161616160400050401171700999299991990119991990999999990909999999100099999900309999999 -080809031000020811111004121313051000141304151000161717171700181801040600992999919991199019999999999199099999991000091999909300999999 -080309090900080810110400061212021304051212141300151614141304171801191900929999991999090999019909910999999999990909999091000390909999 -080409101000080811100300120613021400120415151400161616161400040117051400909999909299999909019990199991999999990019999990903099999099 -080804010500091011121200020613121200141515161700141515041700140318181804999990903091119919099990999190909990999990999999999099929990 -080808080600091010040300091010111104091213041100011405021500161617171700999099909999999999902909990990999909999090193901991919991999 -080801090904100611090904121211051300121211131300141502040300141416171800999900939999009009990999099999999919990199999109999192999119 -080904061000080909041000031102121000131313140400151516160400151501160500999099909990999991109929109999199999099001999990999399999909 -050809090900101103060200121213141400041204141404151616170100181818171700909990029190990999991990099999999999900901999903909999999099 -060808090900040810111100121310111100041410150100141404160500021717170300099999990999999900999900999999099011399990999900919999919929 -080909090900080510100100111210100600021313131400150416041700151503171704099999990990993999999911999190909999091900099099999999992990 -080904060400081004111100121213111100121214141400011505021600031717171600909999090099999900099999099999909919999101093999999919929999 -080809041004080809101000110209120600131414140300151617181800050117181804999909990999999909909919909110099999291990991099903999999990 -040108080400090908081000110912130200110512141500111616171504110616031500999990399099191999991900099909019999999990999909099999909929 -040808090300100811091200101011091300141415020500141416160400060116160400999990999299999990991999919900199999099901999190903999999909 -080806090900101002090900101011040400031213141500161617140400160117140500999999009999109999199999099291909919099199999090993999999009 -080803010400090905101100090912101300040214100600151515101600041717161600929999193099999999090999109911999919990999099909909909999099 -080501091000111109091000111112021300040414141504161616140600171717170300099990939999991999091990919999199909000909099999999919999929 -060801090904101112090900130412140500131512160400021515171700181818031700099909039991109910900999999999099909091990999999919999999299 -040305080400090910111200090910121200060402131300141415131300140415010400990090290999999999909991999091099901999999999009999930990999 -080802090300080810090900111110121204011310141204151610170600150405181900911999999299099991999999090919999390909090990999999900909009 -080808091004011112120600041112121304141415151300141416171300051802190300999009090093099999999909990910999999099999999919991119901929 -060809041000051109091000011112131000141412040300151412161600170402161600000999999990099999999931009909999999999990290999909199909199 -080808010904061011090900121202131404121215161400031515171404051819202000999909903990009999991990110991099999999990992999099909900099 -050804090900041010110100021006121200130414141200130414141500130316161600099999000990913999909919099109099999999999099099999990929999 -040809100500041112121304060214141300151614141300151717181800031701181800000099909990099090999991999019999199099991999919929399999999 -080906101004081112031000081112120200131114151604131117180500040119191900909909092999999999991999999090919999109901990119903090999999 -040801050900101112120900101112120900041113140600151602171700150304171700099999030999090999999909999991099099099910991199999099929999 -080902010400100511121200031311141500131311151500060411161604171718161600119991013099999929919990109999999999990999099099099999990099 -080809090400101002111100101012121104131412120300151617060500040118181800999099090999119999999999990919929009990190999099903090999999 -080902100600081104100400031205100400131313101400151616171400151616011400011099109999990991999929009999999990090901999999999939999999 -080804090300080810091100121210130200120510140100061515141600041715140400909299999999991990991990119999999901399999990990999990900099 -080309101100080412131100080212051404151512161400151517181800060401181800290099900999999990909911990999999919099990999109900399999999 -040408010500090910111200090910111200131414111500161414060200040317171700909990903099001999999999999099919990990999199999909901992999 -040806090500101011090400121011110100121313140400121502040300121616161600099099009999990999909991939919099099099190999199999192999999 -060108091000111213130200041213131404041215051400161718181400161718180300991190319190199909991999990990999990990009990999999992999999 -080109041000081109101000121309141400121505141400121602170300060417171804990999399990999991909900099919999999999109999199909192990910 -080109090904081011120600081313140500151313141400040416171700181802170300999909309099109999109909909999999099990919999099999192990199 -080504090900081011110900081202111300081414151300031617181300041606011304999999009999099999990911199999199990192909999091999039909990 -080809101104031202101100121204101304051415151600171815150100061919191900919902919999919999990999990900109009099999990093909909999999 -080910101000080811110400011211110600131402151500041616171700031616050400909999099099199991999939909991999000990919999909999990929099 -080309091000080511091004080411121000021311121400151511160100151506170400299999999999099099909990999199909119099990999013999909999009 -040108080800091011111100121313141500121302051500120616171700120404170300999990390991999919099919009991999990999919990919999092909999 -080809090900101112130100101114131304101502161600101706161604041803190500909999909999903999099900990999919911999199999909001909992909 -030804090900080805090900021004111200131010111200131406111500131604010400290999999999909919990919099999999991099099990900990930990999 -080808080600010909100400111105121300111402121500141416120400031716120400999099099993910990919990909999909911999909099999991999929909 -040808030900050808040900101111020900101111061200101313121200100104140400099299999999909909099999119999999999999190990909993009999909 -080808080900101011120900030406120400131415120100130416121700130216160500999999090999900999099999909209999901399019999990999990911999 -060809090900040810111100120810021100040810130500141516131300140117040300099999909990909999999909199099199919999199090099993092999099 -040809010500101009111200100404110400131414110600151502110300151516161600009999993099000999099999909009999991090919999999999192999999 -080909101000030911101000040212120400131313130600011414051500041414151500199992999999009991999991909091999999099919993999999909909099 -040108090900101010111100120506111100121213131400021515041600041515030400990990309999909910999999099999909909991990091999909990999299 -080109101104081209101300081209050400081214020400151503160600151517181800999009399090909999990990999999099911090991999990999219999199 -080809031005080809091000060211121304141516171804191919192004212121012000999909992999199991990991190099109000009991099999099039999999 -080305091000080811091004120213091000121415161004120617181800121717010400299999909999909091999991999991099001009001999999999930999999 -080109090900080810110500121210110200121210061300141510041600041504031700999999309999119999990990919999919990990999199009909091999929 -040808090300100506091100101213090200101404041500101414151500040116161600990990999299991990099990019999919999099909990919903099999999 -040809091000050209091000111106120100110304131400151616171400151616041400099999099990190991919999039999099290099990999909999999909909 -080309090600080809091004040211121304141515160500141717181800140117181800299999999099999091000909900910999090099919999909993999999999 -080506010900081011110900121311110900131304140900041516021700031504171700999999003999091909999900999999099990990999199111999999929099 -080406010900081011120900081311110904141415160900141405021700181803191704999999003999991990909900990909999909199901999991909999999210 -080803090900081004040900011011120200051013131400061513131400161617041400992999999990099999901930099999919019199999990099999009990999 -080904051000080904061000080911111000081211110200131415161604130103161600909099999999990999099990909999999019199199190919093299999999 -080801090900081011090900041010121304141414050200061515161604171515180300999999939990919999919999010090919990999909199999009919909929 -050801090600101111090900101111121300101414040200041516161600151504170300099999039099919999919909919990019999990099199999999019999929 -030805060400090810101100090812111100090813040400021414151500161401151500909992990099999999099999099990999099991900099909919399919999 -060808090900050808040900101011110400011002121300141414041300031504041300090999990999999901199999909991999390099910999999991999920909 -080809011000110809121000020413131000140515131600140417170400140317170600999999993991110910999999909190999909099909099099999999929909 -080808090400101011090904101012121300140212121300140515161700140306010400999099909999099099909999999909999119199099199901999030929999 -080804090904080810090100111213141404151606141400150217171700151818050300909909999999113991099909090019999909999199999199999092999099 -080910110500061210110100131310020400131314151504161617181504161619190300001090099999993990999999109999199990900909999909099902999999 -080808080904011011090900060212131400031512131600171718130400171705191904999909099993119999919901109919909999992109099999999009999990 -050808091004110808090300110412021300111415061300161718181300160118180400099109999299999999019990199991999000990919999190993999999909 -040809101000061109031000041209130200041212130400141414151500050104151500099999092990999990991909019999999090099991999919903099999999 -080409100300110509090600120402131400121215131400161617181404161601181400099290991999090909199999909901999919999199999100099399999999 -080808010400090910101100050410101104120213141100151516171100150318180600999999903099090999999999990009199911990199999009999900929999 -030809101000111209131404111502161404111717181400111719201404051919010600299999190999909091099991190999199099199909999901099930909999 -080104090900081006090900081112120400081312120200141305041500141303161500990999999990099991909991999999909099099900190999999999999219 -040108080900101108120200131306121400151616171704051616171700181818040300999190399190109990091999999909919099900999999999990902999999 -080903101100080504101100021213101100141415100400011616171704061816171700129999999999909910999911909991999990099019993999099999900099 -080301090400100411120600100211131300051411131300151515161600171704161600299091990999900990999919099909999919990900999999990999999099 -020809100300111112121204131314150500131316170600181919191904180120202004111291999999999091009999909990999900099199990999093099999990 -080901101000080911121204130914121204130902151600130617171800040519170300999999930990109099999901990991999991199909190999909092990999 -080109100500080909100200111111111204131313061400151516171800151504040300999999399090991991911999990909919999099099199009999002999999 -080304090900080410090900110212131300141414150500041616151500061616010400299999909999999910090910999919099999090199999919999930909999 -030808080200091011121300041111121300140415120100141416161700050616160400299199999190991900999999099999999900399990999090900990999999 -040809101004110909121300111114121300150216121304170616181300190316010500009909990999909999999991999911999199901990999010919930929999 -040605080800091002080300111213141400111516160400111717161804111717011800999990009290919990199999999901099909099999990900099939999999 -040809011000111213101000111206141400111204141400151516021700031616040500009999903990009999019999999999999909999091999910999900929999 -080808090400101010100400110212130500111212131400111515161700030615010400990099990999990999909911999999909999999910099910929930990999 -030808091000110808090500111202091304111406091300011414151600171704181904299099999099999999199909190909999990999991093919990900999000 -080409100300081112130600081102141404151616141400171718180500170118180400091299919999900999199911990199999199999190999090993999999909 -060808050900011004110900121011110900041013040900141402150400140316161600090999099993090999999901999091999999999910099019999919992999 -080106090500081011121200131414121204021514160400171717181804031919191800999099300990199999199919090199999190099199999909029099999999 -030808090904100511090900101002120400131415151600131315151700060118191704299909919999099999109991999919009199099999999099903099999000 -040104080800091011080800121213140300121513141400061502040500041516161600999990309999009901999999999919929991990919999109999090909999 -080808010500090910111200091010130600141415151504161718021904032020202004999999903099000999910999999099199999909999191111029990999990 -080401090900081010091100121010131100120602141100120515160400120415170300099999939990910999919909999999199901999919999010999919990929 -040808010400090808101100091212121300141415161300031702051300061717041300099999993090900999910999999991099999999010992999999199909099 -040108080400090908080600100911121200101314120300100215161604171717180500999090399999190999199909999991999910999199299119099099999009 -030809040600101111021200101004131400151616051400151616171404181818011400219999910099919990910999019999999090999999999901099039999999 -080304091000080611091000120205091000041313141400151313141400151617010400299999909999909910999919009919099099999999999919999030900999 -080909100400081109120600011113131300141415040400141416020500031717171700099099990999009999990930999919009919999919999910999919929999 -050108080800091010021100091010120300090413120400091415151500041416060400999990391190999999912999199900999999099909990999999090909099 -080806030900080802101104041213141500121213160400171713160500170113181800909299999199911000199999909999009910999199999990993999999099 -040808080800010906051000110912101000110212130400111412151600141417030400099999000999999999999910999999099090999190099990999990991299 -080808090904101010090900111112120100061112130300041415021600051715181904999909909999909999909990939999999091999091290909990911909910 -080804040900101010110900061213020900141413150900141416150500040104150300999990900999909990999999109009199919999909099999903099999929 -080801040500040910111100121213111100141202150600141616151700141603150400999999030090109991999991999991099099999919099990999999992909 -080910061104030402121100130514121100131515120400131515121600130117171600110902919999099999199990909991999099999999099900993909999999 -030809090400080809090600040502101100121314101100041516161100171716011100999092999999199999190999199009999091999019990090999939990999 -060808030900020810090900111111041204131415041200011616161700181818180500992990999991909919099999900199999190999109093990990999999909 -080509031000020909061000111112131000141415151604141417150400040118181800092990999991990919999999009910999909009909099999903099999999 -060504030804091011110800121213110800141313150200141617171800140117170400999200009990999909999999999909019999199091990190993990999999 -030808090500101109091200061302141504161717181504161919201504161919011500990992999091199999190900110999999990909990990901099939999999 -020809010400100409111200100613111200100314111200150405161200151516160400119991993090910999999909099990999299990900990999999999999909 -050809011000110612121000111313121004111402041000151617181804031919181800009999903999090999999909190919999919099919091199029099999999 -080504030904081002090900081106121200081314121200151617181800150117170400099209909999119991999900999919999990990109999099993909999909 -080802010904080810110900030612120900131314150904131614171800191919040500919909913999999929119990999990099999009090099999990000999999 -040808010900101010100900111111110900121302140400060515161600031717171604099999903999991999999999919901099099090010999999999199929990 -050108091000111108091000111112090200131314041500131306161704181818030400999990399999199999190999119099919900999999199091090920999999 -030808080800091004020500091111121300090611131300141515161704141515010400299999091999090999919999999999199090990999190901099930999999 -060404080800091010111100121210031100121213130200141414141500040104160500999990009090999909929999999999919999199019099999903900999099 -040808080800091011111100120304131300121414151500120214151500040406010500999990999090099999009929999999909991999999991199900030999999 -080910111100081010111104121313021404121215161704011818192000061818050300099999099999909099099999910909119991909019193909999902909999 -080809090400080409090100031004111200101013110500061402111500041404111500909099999999093999919929009999909991990119999199999999909009 -060809101104120813101100050814151100040802151500011616171800041616170300990900909990999999099901909991999091999191993991999992909999 -040809030500100909111200100213141400151613141400041613171700061604011700092999099099900991999901999999999099990990999019999939900999 -080806090500080810110100020412111100131412151604131712181900130312181904990099990999113919099990999199909199009190999990992999999990 -030808080804060905021000110912131000041415041000011617181000161617181800299909991999999909009909199901999019999190999099999990999099 -040809010500041010111204131415151200161615151200160217171200061818180300009999903099999009019900909999999919999199999099901999999929 -050108080400090908100400041112131300141402131300140615161600031717161600999090399999190900109999199909999991999019099999999199929999 -060809101004111202131404011516161705181818160300191920202100191920202104919900110990911091091939990909929999999099999090999999999990 -040808010900050808100900021111120900131104141400130415141400130315060400099999993990910999199919909199099990999099999909999900929999 -080809090500101009090100101011121304040214141400031516161604151506171800999090999999993999919991100019909999999199099999029990999009 -040808080800090910100100090911121200131415121204031402161700051406160400099999990999993999109990999991999199902910999190999090909999 -080910011100121310101100051414151500041414151504161606170200160318181804099990093999990900919999099999999099909009199991999919992990 -080105060904081011121300081414151500081614151500171702180300041919181804999009309099190999109909099999999909999019999919909092999990 -080909011000080909101000081112041304051402061300151617181304031616191900099999993999919991990991090991999910990199991009029909999999 -040806090900100804090300100811020400100812131300141512160400050112161600909990999299099999919999109991999910990199090999903999999099 -080909091004080211031004080612130500080414131300151617181800150119181800999009192999199090199999909991999990990019990199993099999099 -030808080500090909101104041202131300141212131500161617171800161601060400999992990099990099109999999091999099099190099199999300999999 -080809100500030809111200041309021204131314141400151516171800151506010400999099990992199999909909100999199909999999199001999930990999 -080910110300050210101200131314141204131315061200161715181800040415011800099290091999199991999999900990999919999090990919900939999999 -040801090400080809091000061111121000021111121000130514120400151503161700099999939099990990109909999999999199991909999099919900992909 -050108090900101108090900041112120200041112061304141103151500161616151500999990399990119999901909999999019999900999190929999999999099 -030105080804091011080800120611111300140215151300161616151300171704180400990902399999199919990999999101999119099999999909990909999009 -080808090300041011120500131302141504061614141500171718181500171701181504999299091990910990199991990919999099999109999199999399999900 -060804090900010808090900101011111200021311051400041315041400031316171400099999909993909999190991999199909190990909999999999009929099 -050806010900101112130900141502160904141716161804141719202004140319202000909990093999110901999901990991999909009919099999099999992999 -080905101000080909031004111111120200131415121600131718120400130106120400990999992999999009091999919990909001999919099199993999999009 -080104090400081010111100081213041100080213050600041413151500161616031500999099300991909999099919099919909990999199990909991999999299 -050108080400091008110200121213141504121213141604061717141800191919140300999090399990911991191991090999919999909909199999909092999999 -080809100600011109101004121309021400121509161704121515051804191919190300911099199993999090919909919909019999909990199999090992999999 -080910100300111104121200111102120400131415151500131414060500130116170400009990999299099999999991109199999999999909091909993099999009 -080901051000080911121300141414121504161604120600161617120300040217171800099099939099199991990999000919909909999999999999901992991919 -080809040500061010111104121010110100121302141500121617170400121618170300909999900090999099999999139919999910099919099999999099900929 -080803050900101010101100061202131304141212131300151616170400151601180400929099199099999999190991990099999099990910099909999309999909 -060809101100051212131100141215150200161615151704161818181700040401031700000999990999990909909909919909919909909919999999900399999929 -080809101100121212101100041314100600150216100100151718191904150305191904900999999999900999999901109919999990399109991909099099929990 -080909010500040909101000111111111000121212131400040215131404061617180300099990993099909999919999999991009999999919990199091999901129 -040809101000010811111000040812020600040812131300141512161300050412160300000999999993999999119901909999199099999999990099900992999099 -040106080800090910080200090911111200131411111204131516031200040517171200999990309999911999191991999009999999909099999092900099999999 -040809101004111202130600111214131500031214131600171214181600050414011600000909909999199999190919999299909999999990990910909939990999 -080305091000111112091000110413141000021513141600171713140100041704140600299991909999909999909909999199909199099199999113909999999009 -040808010400040808091000111106091000120213091000140515161600140304161600099999993090910991099999999919999109991909099099999999929099 -060805020904101111110900121314140904011514140300161617181804161617171800909100091999999901999909990919929309999909999909099999990999 -040808091000110808091200130206091204131415150400131615150100031705181800999090999090999909999910990919099919099999999093920909990999 -080809041000030809091000040211051000121211131000041411131500061611010400999092999999999991099991099099999909999999090910990930900999 -080909011000080609101004081112130500040312141400151612141400151718020400099999993999909090910990999999199990990299990999991919991109 -080809040300050409101000111209100200110609131300111415131300041601171700900999999299999900999990919999919999999009990019990309909999 -060108080800091011110400090911110300120213131300141405151600041404150400999990309091099999999999999019929919990990099099909990990999 -080109041000081111121000081111041000130214051000131515161700130304160600990999309990900999909999999991999110999909099909999090929999 -080909091000081111121300081111120100080602141404041516170400151505180300999099999090910999999999939991999991909001090099999919990929 -080801050900080810110904121210130900141210061504160217171500180417170300999099939999109091909999909099009999900199999199909999909929 -080910100600041110100100121113141400021113151504160313151500161617050400009090999999193999099919099199999990901999999999992990990099 -030808090600100808091104120402091304121415091600121717181900050117181900999992999091999099190999990901909110099999991999903999999009 -080109090400081009091100081212121300141405021500140416161500040317160600999999399090190999190999999090109999999091999999909199992909 -080808090900021011090904121314150600121316170100180517170400031919191904999999909991199019109999109990199909391999999990920909999990 -080801090400080809091000061102121000131114041000031114051000041514161600999999939099091909999991119990099199992999999990990990909999 -080304090600081002091100081212091300040514091500161617171800161617011804290999999091119999990999999990909909090901999090999939999990 -040808010904101108120900131114140900061115161600171818021600031818050400999900993999990909019909999999199000999999991911929900999999 -040809011000041109091004021212131300140315131300161615061700161615051800099999093999099009910919199199999990991290099999999990999909 -080801040900080810090900111210131304021404150600161616171700180503171700999099939999109910909999990109099909091990999999909299909999 -080809100300111213021404061215141404011216171700181805171700181819190400991299019990919009919991190990909399999009999999999990990999 -080808030900101004061100041012051300141212150200141616161600140117170400999299099199090999991909999909019099999990190999993099999909 -030808080200040910111200131313110500141415111600140417111600061717010400299199999190001999999999009999999909999909999000999930909999 -080808090500011011110400101011111200130614021500161414041500160404031500999099090993199999990999909091999091190999999990999099909929 -050809101000110412100100111313131300110614150200111604151704161603151700009999009999913999199909999999919900199909090999099999999299 -080809011000080809111004021213141000150416171704181819191700050319190600999999993999909009919911109199099900901999999990902990999999 -080401090500081010111200081010021300081415161704141415160400181806160300999099030990911999991999919990109909909999099999909999999029 -080209090400081003090400081112131304081415161600171815161600170115060500919099199999929991990999090910999009999199990909993990999099 -080809010500080809101000041111101000120211041300121415150400120306151600999999993099009999999909199999909919099199991099999990929009 -080809010600080809091000111213131400110513130400111502161600110404031600999999993099999900910990909909909999999919990919990099999929 -080801091004081112130600140215151604171815151604191820202000032121212105999009930090019999919911990109999999001909999999929990999990 -040108080300091008021104121004131300141406131300141415051600171717171600999990391290199009011999999099999909999999099009990999999999 -060808030400090808101004111213021000141415161700011418161704191919051700999990992099999009099900919990199999999909993110099099999099 -080909010400080910111100080204111100081213131400061516041400031716160500999999913090919991999990999919009999999109990990991990929999 -050104040800090909091000061111121000130212121000141515041000160317171700999090309099990999109909999919999199991099999909919099929999 -080804010600040909090900101010111200131313111200030402110400141516110500999999003090999999010999999999999990999999099019929199911909 -080106090900081011120904081010120500081313121400021515151600170418030400999999300999009099999919999909909999091999091999909190909299 -080808040900021003060900111012040900041013140900151516161700150501161700999091929999990919999910099099999910099919099099999399909999 -080809100300080809101104120605101104131415021100161414171700181901170400999299999999099009099909990099199911090999999909900399909909 -030408080600091008080400091010111100091204110400021313131300141405010400999092099999999999900999099999999999991000099999911030999999 -080609090900101104120100111113121404151515121400031602121704161618051900099990990999903909999990900990999990999999092919099190991909 -040108080400090908081000111213140500111212021500110416061500110416031500999990399099190900199999109999199999199909999090999999909929 -080809101000060809101000111111110100031204131400041516021400051717170400999999999999099909009999939999199290199199990111990990909999 -030508040900101108080900041202131400150406131400151616171400151616011400999092099991990991990901199909999999199909999901999939909999 -080109090600081009111104080512131300081402131304151617181800031920201804999099399999119090919999199991999119901909099099920999990990 -080806010400080209101004031111101000121212130500041415161600171717161600999999103099909021999999199999099990099990990009999999999099 -080803091000081111121000041111121204131314020500131315161700181801040600992999991990990999999999090099199911099990999190990300999999 -080909010400080809101100121212051300041414141400151504060200040316161600999999993099001999901999999090919999999009199990909991992999 -080808010400020910101100120410101100131415161100131706181800031717051804999991013099990910999999999199099900999009099999929909999990 -060808080400020910100300111205131300041404131300151516161700150116161700999090099991192919999919099919999099999100999090993999999999 -080106040400080809091000111209090200111314051500111616041500171716031500999999300099190909999909919909919900999099999909909999999929 -050806090300100811091204130814091504131616091700131616180200191901202004999990909299999009091990990909919999999990190919990311999990 -020808090300100804111100101213111100141515150400141416161600040106050400191291999999999999099990999109099999999099099099903000999999 -080901101000041112120600131312121400041516051400151517021400031818181404099990030999090999999990909901099099999919999919999919929990 -080909090900031002111100121213111404121204151404161718151400061701150500199992199999199999199999190999199909909099990010909399999909 -040208080500091008080300111212121200131313130400011415160600141404161600919090199999992901999909999919999999099199993000999999990999 -050108080800091011121300141411151300141411160300061704041804171702181800999990309999000901999999099999099999990190299099099999991199 -080909100500080811120600130214121204041515150300161617180100161619191904999099900999990990099901190019929999999991999003999909999990 -080903101000110412101000021313141400151313160600011718161604041718180500129991999990909919099999099199999199999919093109099990909999 -080804090400060210101000111213130300111113140400151515161600050117161600999099000990199991992910999999999990099199999999903099999099 -060805090400100808091100101202091300141504091300030416161300171716011300090999999090909999990991199919999199192909999091999939990999 -080109040500081009041100081009121300140409151500021616151500171717030600990999399091990999990990009199099909991909999999919990999299 -080809101100010812061104131313131100141414151104041602150300171618150500990099909993099091909999999919999999909919999092909199909109 -080801091004080809091000051111111104121314140200040314151600171718190600999909939999090909919999990909919099190999099290999909990009 -060105080800090909101000111112101000040213130400031413151600171717170400999990309099909909199999999091909919999199999900921990999999 -080803040600091011121200090902121200130414151504131316170100181818180500929999190099199999199990999901909999909910999093999119999909 -060104080500090910081100090912081300141404081300141415031300021515040400999090309999990999090990099190999999999999999929919990919099 -080808090904101010111104011213111100141415160200141417181804050619180300999909090999999090999931099901999991199909199999009099990929 -020809090300101111120400131313121200011415161600041717161600041717050600119291999999999919090999999910099390999909990999999900909999 -040809101004080811120100131415121600020415121600171705181600171703061600009909900999903999999911199109999999091999999900999909992999 -040108080900101010101100121202060500131314150400131314150400040314150400999090390999990919900991999901999990099999999990909999992909 -060809100300040211121300141415121300140415151300161616160100051717171704091299019990199991999991909999999909099991999993990999909990 -080401040900081010090900081111120600081102121300051415121304031617181300099999930999909999190999099999999019990919999199091999920009 -080109090400081009110600121213111400121213110200040413031500051613151500999099399990190990199999119999919999990999199999990929900999 -050809040300101112131300101102131300011114061504041116161500171716161500000999909299999999099909199991999399909910990199990999999909 -080106090500081011090900081212120400081304141500161313031700021818181704990099399991909990090999999900099999091999099999919929919990 -080304091011120613131411151513131616021717171716181818192020042105012020290091999099099919990099999190999999991990909910990039909999 -040808040104040808091011121212121314151616161617151802061717051819191903090999999309900009991999910099190999999010999999999199909992 -080609090900081005111100081012110100081013130400020403130400141415161700099999990999999999099999039999199119091999999999910200991909 -080909101104081202130300081214141404151216160500171216181800060119181804999109091299119999999999990090999999990999090099903099999090 -080808080300050209100400041112131300061415131300011415161600041415161600999299190990190999199901999919999090999999993999999999900099 -080904030400080910111100080910111100120910060200051310141504131301161700999999902099999999999999999099919000990999199019099311999919 -040809100300110804121200040504121200131313020600141415151500141401161600900990990290909999999999099009199991999199099199999390999999 -080403090900081011090900060412130200141512160500141512171700041512011700992999099990009900991999119999999901099991990999999939909999 -040408030900101011060900120213130900120414140900121514140100041515160500992990019999109991999991999999199999099099990993909909999009 -080409040300080909041000041112131000051412151000011612150200161612150600090999999290999999009900099999999099999099193991999990991199 -080809101000080809061100120309131404150516161604171818190100022018191904999999999099909909990929000199099999901009999913911999919990 -080808010904051010090900111012131400040212151400161712151400180312061904999909903999909909910909199999099019999199991999919990929900 -080808010904101111090900121305141500121617041804120217170600191919190300999909903990919901909990909919909909009199999990991999999929 -080805090900080810100600041110100100111102120400041314141500161603140400999999900099099999999991939099999911090991999090990990999299 -080809091000080809061004011112041000111113141500161617170300050217170400909999999999909090999930099999909900091999999992991999901909 -060809090500031009091104101012131100141212151100140216161100041718010400099099099999999029909999999199099999999900991990991130901999 -080809100400080811110100060511111204131415151500161616020400031717181800900099990999993999999999910009919009999991999910999109929999 -080109101100081213131104081214131100080414150400021614171800051616030600990099309991099099999990999909909990991990991990909990999299 -040405060400080808090900041011090300121211130400011211130200141515151500999990000099999999099909929909199999999999093991991091909999 -080104090400080810110600121213021400151616171404151616031400151818051400999099300999000991999999119911999099109992999999999999909909 -080109090900080810100400111210100200061314151604131314041700051814031700999999390999999991990901919000919999009990199999999999900929 -080808010904101112120900061312121400131315151604171802150500190320202004999900903999090900999999909991909999909919091199919909929990 -040304080900101011080900121013130900021413130100061415150400051615150400999990209999999999009919909199999199399991990190999999900909 -030809091000111213021000111415161004111404061004171418191900171405011900219999991999009990919999010990999099909990190909999039999999 -080805010400080809090900101011120400101004121300061414121300031516170200999999903099999990910990099999999909990999999991999091921119 -060801090900100808090904101112131400021111130400150305161600171819161604099999939999909099109901909999909199991990999999912099919090 -080903101104120210101100131414140500130615160100131717181804131717181804129901999991990991099909909999199900399900999999099999999990 -060809090400080809090100041011111100101012021300141415051300041617031300999090999999093900199999999999199990190900999999999099900929 -080909100400080909110100081212020600080412131300041415131300141416050300990099999990913991999999109999199099990999999909999002990999 -050803010600091011111100021212131400151212041604151718181904151717191900929990193091999919109919909999009099909099099990099999999999 -080109090300081009020400111112130400140512150400140412161600140612161600999299399990910991919991109099099099099990999099999999909999 -080409050300100409111104121309111100141415061600141415170200181801171700090990999299999000999900999909919999999990199019990391999999 -030808091000040808091000110402090400111213141500111216160100061716160500299099999999999909199990099991909919099990990193999999900909 -080903101000080905061004080911120200041311121200141516171704181901171700992999999999090099991909919909999990990091999019000399909999 -080910111100080210110100080610121200081310121200031415151604041718051604919999199991913990909999999999999909992009999990090099909090 -030805090600100808111204100413131400101513131400021617181800191919011804990992990099909099090999999909999999091011991199999039999990 -080906031000081111101000081111021204131415041204051615171200181819011200009299999999999999919999190091999009909990990910990039990999 -080109101004080909101000081112021300141106051504161117181900161617040300999909399991909999999911119999019009900999199090999902999999 -080404090900080510060900081112121300021112121300141504161300141703011300099999909999909990090999999099999119991991991900991939992999 -080409031000080909101000081112020400051313131300061414141400151616010400999299099999999999019909099909109099999999199999909030909999 -030808080800090210041100091212131104091413131100151516171800061501051904299999910999199991999999990919999019999919099000909390999900 -020809100300111212130600041212131404151515161400011704181400171705181400111291999991999909990999000919099999999100993999999999990999 -080801060900080810110900121213021400121515161404171515161800050404160300999999930999100991999991119909099999900999199999900092999999 -040804090900101112030900101313140200101313150600011616171700051818181804099999002999999990091999119999999090099199993999990909909990 -060808030400090810111100090212051100091312140400091312151500040112160400992990999099909991099919999999099990999990091099903999999009 -080909031000080811061200041304021200051314151500011304151500041616161600999299099199009990999900919999199011999999993099990999909999 -080803091000080811051000041211130200041212141500041616170100061616171700992199999999999900901999099990919091199919990913999999909999 -040508090400100611110300100211040400101213131300141515151500141401161600909090900999992990999911999999009199990190999999999309999999 -030808080900100411020900101012120900050413130904141513131600061718011600299999991999001999999990999990999909900999190091999039900999 -080909010400081002111200081013131300031005141400151006041400151504041600999999903099191999191909999990909299999999990090999990990909 -030808080900101005020900041011110900121212130900011415040600041616161600299999991999909999919991999019999990099199993009990990909999 -040401080804090909101000111112101300111105131300061403150200161718181800999900030999919999991999099990999999999099199929900911900999 -080803090900100205090900111213131304111415161604111715151800111901062004929991999991099991909999990919099990909199999190990390909900 -080809010400101010101100021204131400151212130500041603131700161606131700909999903099990919990910909099909999990029999990999999990999 -080909031000080909111104121205021300121214140400011514160600041515171800999299999199999000919999909990109909999999993109999900909909 -080109091000080809091004111112131004111412020400150512161700060318191900999999399999190090199999190999199099990091099990909919992199 -080609031000080909111000080205111200080413110400141413151600140113170400092999999999999991990910909999999099991990099000993909999909 -080909100400080909110100081213141400150213141400151616161700060504030400999099990999903999919991199019999999999199090999900020999999 -080409090300101109121304141102121304061115161300171118181300191901180500099290999999999009199901990999099919990910999990900390999999 -040804090900011011110900101012131400151515150200051616171700041616060300009999099993190999199999119999919999199901990999999992909099 -030804090600041010021100121205131100121213131104141414151100161601171800209099190990919999019999999999999909909991999919990300999909 -030608090900101010090900111204131400110215151604041717151600181705011600909992909999999991990990909919099099009119999999909039909999 -080106091000081111121200131111120400131415020500130416171704130316171700990099399090919909990999999999199900999091099919099999992999 -080808080400091011121204031302121404061315161400171818190100051818191900999099990991199029199990990991099099099910990993909999999199 -080801090900101112130904101415161700020615161804191915162004191903160500999999039991100099900900999199909909901999099999099990992999 -030808010400090808101104120610101304140215161300171818161300171805161300999992993099990019099990900199199111999999990909999999990999 -030805091000080804041000021111061000041111121000131314141400151516010400209099990999999919099919999099099999099190999199999030990999 -030608090900101108120900021308121404151516171805191920212104191901212104999992099991999991990919990190009990009109999109099399999990 -080304090900080610090900080211121200130514141500131614141700161604010400299999909999999990090911999001909999999999099090999030999999 -020808080300091010111200131011111200140415161704181818180600050119191904199291999999999919999900909199999900001909099999903099999990 -080601090400101010091100121213091400121516021400051517041400041717031400099990939099911999091990999909999991190910999999999999909299 -080401091000081111120200131111141500130506161504131717171500130418180300999199031190919909901999999909099990909999990999990092999999 -080109100600080811120400131314041500041414021500161616051500171717031500990099300999090991909991999999999991190099999990999099999929 -080309101000080604101000111213020400111113041400051515151500161616010400921999999999909900919990199999909909999910099999909030999999 -060808040400010808091000111213130400111202131400111215151400051617150300099999990093900990190909999999999991099919999999999099900929 -040108080800090910101000110912040600110213030400110513131400110415161600999990390999999999090910099999999119999092099999999000990999 -080309101000080809041100051209021100131313131400061516171704041801171700999999299099999991909991119099919999199910990099090399909999 -030808040900101008090900101002110500041204110600131414111500130401111600290999999999999999109991909919999909990199090909990390999909 -040808080300090210100400091111111100120413140100151515161600051706161600999290109999990991999999999090199909390990999909990099909999 -060804030900101111111200131313021200041414150500161617181800161601181804909290099199999900999999919909199091099199999109999399999990 -040805030900101112120900101312120900141414040200151616161600150106041700009299099999099999999909999900919999099099190999993090999909 -030808080800090909021004111213051400061516041704151516181800191919011800299999991999901099001900999009919999009999199909999039999999 -040308080900100508040600111212121300141402131300141415151500040104161600929090999090999909109909999991999910999909999999903009999999 -080803090400080210091100061210131304121214131300151617181800040501181800929999999091990991909990990099999919999910990009900399999999 -080801090904080810091100061213131104021415161100171818161104192003160500999909939999000999199900990991999119091099999999019990912999 -080803090400041011091200061013141200151004021200151016161200151701160500999999029090990999199909199999199909199999999091990390909999 -080805030600090410111200091010021200091313141400091513141400040116170400999990902090991999999999919990199999999999990119903099999009 -040809090500101010090100111112130400041413130400031402151500161406151500009099909999993999019990909999999099099919999109929099919999 -040809091000040804111000040811110100060812121300140212050400151515150300009999999990900999999901939999099999090199090909991999999929 -050808080800091006111200130214141204031514141200011617170400041617181800999990099991909911909999990219999919099919993190999999909099 -060809090900011010050200111010121200041314121200041515151604171717170300009999919193990999991909999090999909999099199999000992999999 -040803091004110809091000020812061000131412151000041612150500161601171800999900929991190919999999999199099110999999990099999300999909 -080909011004050909111000121202131004141415151000141415160600040317161600099900993999919991909991900991999909999990099999909199992999 -080909010400080910101000111111111200061302141200151617181800030405181804099999903099999999991999999909099091199919091199920999999090 -050808090600010808090900101011111204131311110200130314141404041516171800099999999093909991999991910099919999999999199299099990900009 -080804010400080809101100121305141500121302141500121616141500041603061500999999903099110901909990909999999919999919999999909909992999 -030809090200100504111200101313041400041313151400161617171400161617010600219199099199900999991909999999099990990990999091999930999999 -080803090500101112091300101402151304101616171304181816191300181801060400992999099099919990199991900919099090909090999999999300999999 -080808010900051011110900041211110900021314060900151516171800031504171804999999903990990990999991999010999190991999099009999999920990 -040608090900101008090100111208131300110208131300111415161704051818030400909990999999013999999901099919999999999199999000001990999299 -080808080300090910101104121302100400141505160600171718181804170119191900999999909299991090990911199199099109099199999099093909999999 -060808010500090910111204090913140300151516021704151819191700181819190400999990903099910099199990199990129909909991990991999999999909 -080604050300080809101104121213140200121213151500161717151500041701181800999999000299091099019999919999919999999009990919909309999999 -040801090900100811090900101011111200130214150600130514160400130314170400099999939991109999990999999919909100999090999990999999929009 -060808090900100808091104121212021300141415150300141416170400050104171800999990999990991009911999999099129919999909999909903090999909 -080504090300080210091104081210091100081314141100151617171100060117170400999299009999110091999919999999999199999109990099903990999999 -080909010400080909101000041112131300141405041300141415021600031515061700099999993099909999991900099999999999099909199111929990999909 -040804010900101010110900051213130900141413130900151504060200150316161600909990093999991999009900999909999999990909199990999991992999 -040809100500010811041200060813121200140813150200141613171704181818180300090099909993009999999901199999919999199991990099099092999999 -080309090900080510061100080212131100041415131100161615151100160417010400299999909999990990099910999919999099999190999190999030990999 -040809090400080809030600101111111100100212130400101415150100161717170500999090999999999990020999999991999919099190999993901919909909 -080809040500101011121300011014121300151502121304161616121304031706181900909999900099199999199939009991999999909019999999091990929009 -080809010400080809101100121213101400121206101400040305021400041515160400999999993099900990999990019999999990990999999901992910909199 -080104090500081010090600081010091100081213140200151204041600150403161600990099399990910999999999919900919990999900190999999999909299 -080904011000081112121000081314021000081514161600171514061604180514040300909999093990190991999991199999199099990990999999009992909099 -060809011004111109091000121213131004121213131400151617021400030518191404009909993999099999919990900999999999199999991111929909990090 -080806010500080809101100121213101400121213021504161613171804160319201804999999903099001990991990999999919999100991999990099919992190 -080909090400080810111200021313130300141404151500141617151500050601181804999999099099000990999919929199999999999909991109900390999990 -030808080904101106090900121314151500120214150500121614171800040414011800999902990991999991009999999919999199999990091110909939990999 -030808010600050809090900101112131400100212121504101617171804101919190400299999993090999991919999909919109919909999090090099900999999 -080805090900100211090900100412121200101304030600101414041500040116151500909999099991199990190999999999299199999109099909903099999099 -040808010500091011111100090912120400040412120600131302040300131314141400999990903099099999190990999999999909090910999999999192990999 -080809090600081011120100131414151504131414051500131603170200041819191904999099090999903990019909990999099999999099199929990911909990 -030809100400110509120100110409121200110213131400111515131400061604171400909092090999913999999990999991909119999099999999990909909099 -080104090904081011090900120405131400150213131400151616161400151706031400999909309991009910009999909199999199999199999999999929900999 -040608080400090908081000111105101000121102131300121415131300030401160400909990999099099999909999999990099111999999999019920309999909 -080405090300081004111100081202131300141516131700141418181704060118181700990999090299909990991901199919999919999919999190003999999999 -040801050904061011120900041311110900141515160900141515160200140317171700099909030990000999999909999901999991999999990991999991992999 -080809100400080803101100040212101304141412150500161412170100160612171700919999929099990991990991990099009909990990999913999999909999 -080808080500040909060300101009111200131014111200151617021200040118181804999099099990909999992999999990999009190901999199903119999990 -030408010500090208101104121208101300141206101500141416161700181818180400999992093099190011990999199999909990999990099999990090999999 -080809090500080810111100060412121200041314151504011617021500181818180300999099990999099909009999999909099000909991993919991192999999 -080609100400080209100100110409121304140509131300031516171700181818171700999099099991193919919990100199999999992009099999990099999999 -080906010500080909101100121314151504121414151500161702181800190304181804999999903090900990919909190999999999999919091199919999929090 -040104080400090904101100090912121200131314020500061314151500161614031500990990390099090999909991999099109991990990999999990999999299 -080409030500101109121204131114121200151106160200151117181900150117181804099990992099999009099990999099199909199999190111993999999990 -080805090904080810090900110410120100131402151604171414061800171903181800999909909999919909919999939001099019009990099999991999902999 -050809090904100811120300130814121500131316061504171718021504170119201500999900909990909999092909999990999999009009999191093119999199 -060809101100011210101104131313131100140215161700181815041700051819031704009999009993999091999999909199099119099090999999909199999290 -030809090900101111020400101111121200011314050600151616161600151504041700219999991990919999990999099991999310999909090999999090999909 -080808090300100411090900101202130400101414060400101515151500050116160400999990999299099999019911109999999090999999091999903099999909 -040808090900100808020500101112131300100312141300151612141400041706010400090999999999919990110909999999999929999999190099900930990999 -080801090900040810090900061112120500021112121300140415151600171703150400999999939990099999100901999999999199091909090999919990992999 -030808080800090904041000060911111000120211131300141515151500040105160400999992009999990999999999999019909911990991990999903009999909 -080809101000080811100500011213021404151617171404151806171400151819040300909999909999900990999939110911999019909999990999999002990999 -080109101004081112021000081313140600080413151500161717180300051717191904991909311990199990919999909999199999999009290909909909999990 -040108050400090908081000090911111000121202110400121213141400150604160300990990399099090999099999999199999919999919099919909019909929 -080809101000010809101000111209131404151209021400160617181800190405031804999999999993909991999901100099199999990901990999909099909920 -080910110200080312121300080405141500081616141704181816141900181806011904911199299199999999901999999900919099109999999000999039999990 -030809061004110212131004111415151600111415151600111718191604171705011600219909910999109091990909999999999999099190999119099039999999 -040805090900101112030900101112130200100612131300101415161600040117161604009999092999999999991990999999919901999919990199903099999090 -080805030900080810041100121314041100120414140200121516171700120116160600909299999199909990099909909999919909199919990199993909999909 -080804090600080810100200041111041200011111121200131314031500130405161600990099990999991900191999099999999399999002099999990090999999 -080910031100081206051100080213131100041413131500161616161500171704010400012999199999990991099991909909999099999991999990909030999999 -080305090900081010040900080204111200131314121200131315151500041604010600290999999999999990900910999919099911999991999999990030909999 -030808080500091011110400020611111204131415161604171815161600181801191900299099199991999919990999990109009999901099991109999390999999 -080804091000030802041100121314061100121315161100011315161100051315170400990092999099190999199901909999999900099999993999999909909909 -040804090904101010111200131302140300131305151500161717181800060117181800909900090999991990912991199999099909991999091999903999999999 -040408010600091008111200051314151600131302151600171718151604171718180300999990093090001900991999119991999999990919999999099999999929 -030809041004080809041000021109061000121314151000121616171700051616011700290909999999909919999919999910099019999910099919999939909999 -080808090500100409090100041111111100121314151600121206021600031717171704990090999990993909199999999991999001999991999900999919929990 -080109091000080809091000111204131004110414020600111515161700110518031700999099399999199900019999990909199991099910999990999199909299 -060808080800010904100300050911021204130904141500131616171700181816171700099999191993999999012909090999119009199099999999990999999099 -040809090900010810100500041110101200131313140400151516021700150603171700099999909993199999990900909990109999999901999091990999999299 -080304090900101102050904121212131300041414151300161616160100061717171700299991909991190099190999999991999991090991999993999099909999 -080905101004110612101300141516171304181519190200181519192000180103202004009900999999099909009900990999009019199999199999993999999290 -040604010500080808091000111212121300111414131300110415020400110415150300999990003099901999901999999990999099999991099019999999909929 -080501040900080810100900041110100900121212120900131404150200060316161600099999930999099900999999919909999999999099190909909901992999 -080909100300080205110600081212111100131212140400151617181800150104181804991299199999990991099999099099909190991990991099993099999990 -080603090900101011111100101004120200051314121500131316121700040118171704092990999199999999991999999900919999190909999119903099999090 -080501040900101111121200101313120400101302141500100416031500061717171500099090939099919999090909999999199991099919999099909129999999 -080304090400081009090400080211121300141411151500061611151500041616010500999099209991999999090911909999099909990099999919999930909999 -080801060900081010111204131311111400131302150300161718181800040519191904999099939090999099190991909999999919290911990999900990999990 -030804050904101010020900111111110600011212131400151216171700180416171700299909100999910999919999999919909390099909990909909999909999 -040104080800091010080800091010040500091112120200131415061600041403161600999990309990909999900999999919999919199909190009909999999299 -030808080600090905021000090911121300141411151604141417171804191917010400299999991099909999910999919909919990009999199091009930999999 -080804090600080804090900101003111200101004131200141414150200050116171700909099999999099909909999299999199909190999199991903119999199 -080309101000080509111204081309141204021309151200161616171200061819010400299999990999999090909999090199099199999190999910999030900999 -080808010900101011120900101012120904041304141400050206141400151617170300999999093999110999999999990910099099999199999909901999901929 -030804090900101004041100121302141100121215141100161617141100160501140600209999199099090991999991199999999900999999999010990390999999 -040808080600030910100200110510121300141404121300141415161300171704011300099999990092191999991909999099999990199991999009990039999999 -080809100300080809101100011209051304141509021600141718181804140406191900999999999299909990991939990919019019199911990999090009999999 -040809031000040909111000051213110600141402111500141416161500040116160400099999092990990990990900999990999911999909999990903999999909 -040808010900101112120900061312050900031415041600171715021800171715181804999990903990091999999900909999919219099999199011999999999990 -020809090300101009090500111111111200011313141500161616171500041806041504119291999999999991990999909919999390999090999990990909900990 -060803090904101104090400101205131300100214131300101516171700151501171700929900199999099991900999999910999199999900991109999399999999 -080509090900080803040200100611111100121314150400041614171700161601171700099999929199999909901909999099199001090999999009999399999999 -080109060300081011051200081011041200081013021400151516141400151504041700990999309299909999999909099990919911199099999099999090999909 -080109101004081112101004081113130400140215161700141418050300191919190600990909309991999099099990999199909111199909299909909999999909 -080109090200081009091100081205061104081212131104141516170300141515180400999199399190199990099999900999999999009900290099999909999909 -080404010600091010101100121314141100120214141100151515051100161617030400099990903090990901909999999919999999999199999909909190999299 -060808010400091010101000111213020400111214151600171204151600051203151600999990903090999901990991199990199999090909999999909999999299 -080809051000030809111000120409131000140615131004160415171700021815011700999999990999090929999990099199999909001990999919910939911999 -080904101000040911101000021211131400151611131400151511061400040301051400099990909999009999990919099119999919999999999909902399999909 -080109051000081109041004081212121200081313140600151513021604151503171800990999399990999091000999999990109999990991999991099991999219 -080504030900101002111200101013130600141414141504161616171700040118181700099290909199911999199999999901909999909190099999903099999999 -030408080800090909020400100411121200100611121200131313131400041505010400999992090999910999919990999999999990990091999990900030999999 -080808030900100611090900100512131300101402151500101616161500170404010400992999019999999999190999099901999991999099990991909030909999 -040408030900100808040900101111050900121113130200141513131600171717010600999290099999990990999999999090019999190999990090990930999999 -050804010400040809101000110812101000041302141400131315141400161615060300099999903099119909999901999091999901999909999999990992999099 -080808090904021011090100121313131304141516171800192021171804030621211805999909909991193919119999990100909999091009999999020999999990 -040809021000111109121300111104031400011515161400061515161600051718181804011199199199991999920999999910999390999999990999990099909990 -080801090900080810090900041106121200131313021200031415161704181818051704999999939999019999991909099909199990999991992110099099999090 -080809091000080811031004020405121004131314151600061317171600181901171600999999909999129019999999900100099990999909999190900399909999 -080109100400080809111200131309140500131315040600160215151704161818180300990099399999000919990999099999099999999199099191090992909999 -060809101000080802101004011112121300141415120300141416171804191919051804019999919999919091091939999909929990999909999900090909999990 -040805091000111112121000111112121000041302141400131306151600031717010400090099099999999999999999999909009011999909199991920930999999 -080803090900100411090900020412121300141504121300061516171700051501171700929991999999009919990909999199999199099900990109999399909999 -080109090600081011121204131414121204131405150300131616021700131616181904999999309090099091999999190999199909999091290999999911999910 -060801091000111112120200110412131304141516131304051517171800191917170300099199031199099990991999990090999909900999199990999992990999 -030802091004080811121000131411151500161411150100051417181804061920181804911002991999999999919909099099999909390909999909099099900990 -080801090500081010101004111112120400110213131404151613131400061718031400999099930999999009919991999919009999000199999999901999991299 -080808090400041002090900011112030400131314151500131306161600171717051600999090119999909991199939999901209991999999099909909999999099 -080409090900101011021200051311111204011415041200061616170300181616171700099990909999091999919909990901999319099099299999909999909099 -080910111200080909050400011313021400151313061400151617171404151804170300990099909090909990999939119999999090999099999099099992900999 -050808080300091011111200131011111204131014061504131616170200131601181904999990909290999999999999990990919009009909199919999311999910 -080804090900100802090300101112130500101114041500011114041500061116171500909999999299919990199991009999999090999999993999999009900009 -080509101000080811111100011212121304141414140200150616170400041616180300909999900999999990099939910999919999190901090999909919999929 -040308060500090808101100090212131100090412121100141415161100141401171704929990990099999991909991099999999099090991999019999309999990 -030809090900041011111200131302140600131304150500161717181800161717011804299999199090990991110991999990199999999991090909999939999990 -080801040500091011121200091313121200090413140200091515140600041515160300999999030090019990999999999909919999199909099999999919909929 -080809050600080810111100011213140400151502141400161616171700030404171700990999909099099990909931109999999901999919099999920999999099 -080808020400030906101100050912120400011312121400151516171400151504171400991092991999900999910900999999999319099909999090999099999999 -080909090904080810110500011210131400151616171804150216171904152003170600999909990999000990909939909919009999909999091199099990912999 -040401080400091010101000111213130400111202130600111414150500031414161600999090030999999900190909999999999991099910999999999900929999 -030808080804090909101000111102101004121314151604171706180100191919190500999902990999999999199990190990919009100901999993999909999909 -030809090900101004021100121206111100121213140400151313161600050401161600219999991999909990919999099999199909990991099919900399999999 -030508090900101004090904041002111200061314151200161317181200161301181800900992999999099099909901099991999091999991999010999399909999 -080305090900100611091200131411121204021411151600171711181604171704011600290991999990909919999999990199099999091099999110099039999999 -040304080900101011120900130211110900061415150904161615151700161818010500990990290999999919909919909019999919909999099090999030999999 -060808090500100808110100021213141500161213171504161813191504160313202004099099990991913919009909909199999990909990991999092909999990 -080809030600101009041104101009121100130402141500131617181800130501181800992990999099999099909999999091009991199099190019999399909999 -020808080300090410101000091112120500111112121300141516061700040116161804199291999999999990099919999999909909999199090009903990999900 -080809050300081010111100041010111100011213021400151515161404041718160600909999900299999999999909099999199391099119999909099099900909 -080809051004081109091000120213141400151617141400041617181904031617010600990909999990999990090901199019999990990991099999099930929999 -080409100300080211061204081314141500081314141500161617171700160118040500991299019991190099990999999999999099091990999099993090999099 -080106090300081010091100081010121100131305021100131414150400041404161700990999399290990999999999199099199999199909990909909000999909 -080109051000080809111000120409111300140409111300150216111300060416170300999999390999009910990999909199999909991999991199900999999129 -060809100400110412130100111412151504110212161600111717161600050317181800000099909999013999909900990999099919999199999999909909992999 -080809091000051109061000021111121000130414141500161714141500040301041500999999090990099999999919009191999909091999991999902399999909 -080309101104081213101100080214100500151414101600011718191904062018191904929909919999190991999919999199909190099199993999090999900090 -080805091004080811031004121314140200061516170100181916202004181816202000999109902999099090091909919091999901399090990999099999999999 -040808090900100311041200101002131400151616131404171616131400180501061400999990219099999999100990109999999099900999999919909309909999 -080404090300081011111100081010120200081313140600011315150500161616160400999299001999999999991999919990109091999999993090990999999909 -080309090400101109090400120213141400121516161600011517170500041517170600299091999991990991099910099999999199999909993990999999900909 -080804010400090810111100090510111100121210021300121214141500040314040600909999993090009990999999999999109909999991099999909900992999 -080909100400081105120100080213130600141513130400141516171700031504171700091099191999903991999990909919999999099990990909999099929999 -050108080800091011121304090902141400151617141404151817170300150619202004999990399091000099999991099091999099909099999992990099999090 -080901101100031210101100040213140500151516161600151517171800040617171804199992139999990991919901109999099909999990099999909999990990 -030808060900100808040900111204131300141516161304021516160100051717171700990992999999990910990909999190999999001999991993991919909999 -080904011000081112131000141414141000051502161000151517181904031717061904099999003999001999099999999999999011199999099900029909999990 -080809040500080909101100120213030400121415151600171715151804171701061800999999990099900901199919299999909119099999999090099309999999 -080809010400040809101100121313101400041313100500151515161600060402160300909999993099909909990909909999999991090919999999909192990199 -050408080300091008020400091011121300091014151300161414061300040117171300999290099999910999919991109999999090999190990999903099999999 -030808080500090604021000091111111200091313141500091616171804041616011800299999091099991999091999999999019999099099190901009939999999 -050108090400101111120200131111041400131516161400151516041400061717170300991090311990991999901909999909999909999999999999900902999999 -040108090600101008111100101008120500041314021500161616161500041717031500999090390999999999909990999919009011199099999999900999999929 -060804090900030802090400101005111100041212111100131212140100151614140400099999909999119921910999999990999990990991999993909999900909 -080304090900080810090900110212130400140512131500141612130100061717130400299999909999909919909911999909909999099999990013909999999009 -030806010400091010101000090902111200131414111500131414041600041705161600909992093099999999910991999991909091999999099909990099909999 -080901101004080911111000060911111200020913050400141516161600031517180400999909939990190999990909999990009199991909991999999099929009 -050808080900030610110904121213040900121202140900011516141700181819191904099999990999909020099999909990999911999999093110990099999990 -040809101000020803051000111213131300121214061500161617181500161601041504019999929991990919990911999991999990999019999900999309999990 -050809101000010811100600120804021300121214141504161614141700181818040300019999919993919999910990919909919909900999199999909902999999 -080809100500080809100400021106101204131415041600171715181800170301181800999099999999090990999919900110909919991990099909992399999999 -080801090900080810090200060411121304141414051504161718181900161718180300999999939199019999001999990000019999900909199099999992999999 -080603090900081010111204081010130200141516171804191916160500190120202004992999099199909099901999909099919099109091099199993909999990 -040808010500091010101000111112131400111104151504161718021500160618180300999990903099999909919990019990919999909091990919990999999929 -030808090904101008090904111002121300061405121300151516121300151501171804299909999999999099109909199000999999999099999019999300999900 -050806040900100811031200100813131200101415021204101616171700041601171700009099999099929999199999999909199909109909190919909399999999 -060808010400050908101000111112131000111112130400140412130200140315161700099999993090009999919990099999999999090999999091999991992119 -040809031000110809121200110809021300140809151500160517151504161606010400099299999199099999991909119999999091990999999009099930990999 -080808020900061003090900011011110400051011121300041014150400161616171700991999191990999999219939999999009099099909090909990909999999 -030809090900101010101104120602131304141516131300171718180500171701191904299999199099999099190909990091999091999091999099999300999990 -030809100400110809100500020804101204131313131200141415161200061718011200999092999991909999090919900199999999990901999990999039900999 -040808090300100211121200131311121200011311060500141516171704140418171700991290199999199909999999099999909310999909990009099099990999 -080509011000080409091000081111111000061213021000141513131600140304040400099999993999091999909909999999999001199999090199992000999999 -080808080900061010100900111112130100021114151604171818051604031818190400999099909990999999099991139199999900001990991999099999929009 -050809061000031102121304141414151504041616151500171818191900170118191900019099119092990099109999090991999099999190990999993999999999 -050408090300100808111104121213111100011213020600141415160400141415171800909290991990909099999990999999199399099191999119999990999009 -030809061000080809111100021209041100131414151600131414171700130504010400299099999099999919999911999991009091999991099999990030999999 -040108080900101010090900111212121200131415150400130215150600130403160500999990390999909910999999999199909919999199991990999209909909 -080909090900080210030600111112040500111313141400151313041400040116160400999999192099199909199999099991909990990990990999903099999909 -080109100600081112121200081113141400151605140200171616181804190403181804990099309999199999199909199900919099990999199999009999909290 -080903040500080909101100080204121204131414151204131414010600000000000000029999990099909991990999990010999991009993099999999999999999 -080109090900081011040600051012131300141015031300041015161600040215160400999999309090009999999900099999999099990992999919991999901909 -080804090900030802101000040411100500121212131300141414131300150401060400999992900999199999199990199099109999999909999919909300909999 -030809050400060410111104121302141100151515141400011616161600171718181800219999910099009009199991099019999999999919993999990099999999 -080509090600081002111100081204041100131313140300011504161600171717171600999999009099119991999999999010029999999100993999990909999999 -050801090904061011090904121213141500161217181504160219181800162020200300099909039990099099109991999090099990009199999199999199999929 -080808090900011011041200101004131200141402131200141516130600040403130500990999099993009999999999099199999911099909999090900999999209 -040108080600090908080500101011021200101314041200151515151200041616040300999090399999990991119991919909999900990999999999909002999999 -050808080800010910041100121310101100120414041100120214140400120615150300099999909993090991999919909909999999099999091199990199999929 -080909010400080909101000081111121300080402140500151516040600031517171700999999993099909999991999919990109901990910999999999190921999 -040104080600090909100300111104101000111102120500131414041500131616161600999090300999999919992999999990199911990099099999990900999999 -080804030900080805061000111213141500121213130200011617171704181819191904909299999199099909901999099099919999199019993199090099999990 -040809021004111112101000061314030500151515150100161616171704181818181700001109919999999990120909999901999999399990999909099909999999 -080809100300080809101004111209130200141215151600041715150100061805191904999299999999999090919909919090919909190999999093990009909990 -080901100400020909110500121314141504121617141500121818061500031919191904199091930999900910099999900909999909999900999999929099999990 -040809090900020810100100110806121300140815151300141404151300030504161300919990919991993919909999009199999909999999999099920909999099 -050801030900041010040900111212020900110613040900111313141400110404141400099299039990999991909909119900999990999999999909990099999999 -040809031000021112041000131212141000151514141000161616161700050106041700912990199991909919999909999199999999091909999990903009999999 -080306090900081004090900081104121200021314151200131314151600040514010400290999999999099990990999999100999999091999999110900930999999 -080809101100011213141104121213151104060213161100171805161604190320202000900099099993190099909999990099099919999199991909019909929999 -040801091004111112120400131414150500131406160200131717181800131717180300099009030099099909019999909990199999199099199999999999999929 -040808010900101112120900100412120900100413050900031402041500141416160600999990903990090999999990999991099909999919099999929100991999 -080309101000080909110500080612131304021415131304161616171700041819011700299999990999990999009990990190999190909109999919999039900999 -080103091000080811121000131302141004131304141500161617141800051617061904992999391999919919199991090999909909090999999900999990909900 -040608080800091010040400111010020500121212130300011414151500161616160400999990000099999909999999109019199999999191293999990999999909 -040108090900101108090900051208060400121208130400140215161600171715150300999990399990009991900909999999999990091990991199909999999929 -040808090900100808090300111111021200040513131200141415161700141401040600999990999290999990919999919990999999990009199011999300999999 -040108080800090910021104090912130500141415130600141415160300170418181800999990311999190099910990999900999999099991999992909099909999 -080809101004080811061004121212130100141415151504140216170500181819200300900909999999009099099999139091999999909919999100991999991129 -080109090400101009090400101111040400121111021300120514141400040315150600999090399999090991909999999099909991999991090999909910992999 -080802040400080910111200030910111100050910130400011415150600161615150400919999910099999929990999099999909010999190993990990999999909 -080406010400020910111100121210111100131214150400130314151500130414040500099990903091199919999999199090009999999299999999999990909099 -040808010400090808101000090411101000030611050400121311041400121202141400099999993090909990999999199999909900992999999909990199991099 -080903010400080909101100021212120600131415151600051715150400171718181804999999923091990919910919999909099099090099099999999909999990 -080603090900100411090900120511130200121411041500121416161704121401161700092990999990999909919999919909919999999900190091099399999999 -050108080800090909090400100404111100121302111100131314150600031614151700999990390099999919009909999199999119999910999999999990921909 -040808080600090909090200011011111200131010141504051616171800041616170300099099909999991999191931999999019099900090199999999992909999 -060809101000011112101000051302141500041313041500161617171504161617031500019999119993909999109909909991999090999919999099099999999299 -080809011000040809111000121213141000121204051000040406021500031616161500999999993999001909099990909999099909990099199901999919929999 -080809100400080809100400111212100500131212021400041515161600061501031700999099999999990909099999999099009091090191999999999391909929 -030809090400040809100400020811121200131411121200041515160100061515160500299099999999900909909919099199999119999919990913999999909909 -030808080600091010021100091004051100091212131100091413131500041604010400299099991999991999999999999900099990199999090099990930900999 -060809101000051112101000131312121404151516021400151517041400040117031400009999909990009999999999990909099911199900999999903999999929 -080401090500080310111104081202131300080614131500161617151500161618191904099099930992919099991911199909909990999909999999999090990990 -030808090900100808051104020412121100130412121100141516161700181816010600290999990991999019999990999199999999991090091190990930999999 -080809090600080804101000011111101000031212120200131415041600041515050400909999999099099990999939199999919299199900090099909990999099 -080805010400080809090904061010111200130214141500130414141600130317171800999999903099099099919909109919909109999099099999999990929909 -060108080904101108080904121213130900121214030500151502161700041518161900999900399999999001099990909999999919990912099999909190999109 -040808090300010808091000111102090600111112131300141512131600051517040400099999999293991990199999109990099999990099999990909990990099 -080305091000080404091004111213091000021413091000150616171700151518011700290999999999999010099990999199999111099991999009999039990999 -080104090400081010111100081010121200081304020400131314141400150516030600999099300999999999909909199900199999099991999999909190909299 -080809101000080811100100120405131400040215131400041616131400061616031400900999909999993909019999909009999911999199990999999999909299 -040108020400091008110300090908121300141405131300141415151600171717061804991090391999999991912991919090999999999990099999990990999900 -080809030400080809101000061104021000121313140500011313151500161616160400909999992099999990999999019009109091999999993999999009999909 -080805090900080810090100020410111100121314141404151617170600040317171800909999999999113919909909999199099199909109990999902990999909 -080209101100120406131104141515151100031616170100181616170500181919191904111991091999909019919999909299199990399999990990999909999990 -080808090600101109090100100512131300100414131300101515021604031515171704999099099990093999919990099990999909999999199911099909929990 -080909020500031011110600120413131400121213131400151515161400040417011400191092091999999990910999999999999999999091999900909039990999 -080910110300081210111100051210130200141215150400041615150600161601171804009299999999999999991999919090199009090999999099999300999900 -080609100500080809110100041209131300021414131300150314041600171718181804909099990999913990999990999091999190991999099990912990999990 -060809090500010810090400110812131404110215161600111515161604110317171800099099909993190999199999000991909119999999999999099990929909 -040405010800090909080800101011041200101013131400151504020600031616161600999990003999919999190990099991909999999091099099999919929999 -040108090904101108090400121113140200151113061600171713051800171713031800999900399990109909190999119099019999990999199990999999999929 -080808090900040406090100101011120500041011130200141411151500141404160300990999999999903900919990199999909091199999199099999919990929 -080808090500101010020600111112131400011112031500040416171704181616171700999099090999910991919999919999919309299999099009009999909999 -050308090900101008080400100411111200021311111200141515161200171806011204999990290999990999909999999109999119990991999990900939900990 -080808030400091005111200090211111304091415161600171818161600061801191904992999199099909991990919990999009119999919990909909309999990 -080809011000021111121004131111141004131504161000131515171800031919050600909999903991910019909999990900099999999990099999920900999999 -020809010600100811121304100814140500100314141500161718181904202018191904119991913099910099909999999999909299090990090999090999999990 -040308080800090410040500090211111200091314121200091516161700060116161700929990919990909999190911999999999100999199999099903999999909 -080901101004080911101004081212121200131314151600130217060400051818180300999909939999099099190909999991999910099199099009901999999929 -040808040300090910101100090902050400121313131300121414151600120114060400999990090299991999199991099919909199999999991900993990999099 -080109090600081011121304081004121200081404151600171414030500021818181800999999300091090099099999999909909990091999999999919920919999 -080808050900100311110900120406110904130214151600171818190100171818191904999999900992999919999909990190009119099910990993999999999190 -080501090900101010100900111106120400021313141404151313161700151503041800099990939999990919900999099199099199900990999990999290999909 -080804010900101010090900110512131400110415061400110316021400111616040400999999003999909999901990099999099909999909999911992990909099 -040108080800090909090500101111021200041111131200041414061200151514160300999990309999990999199909919099199991999099990999990902999099 -080804090400030805101000111213101000140413151500140213150100161616170600990999990099909920999990999199909099999999991903991919999109 -060802090300100811090900040811120400131311140400151311160500150117171700991990919290999999999990009099999990090990999190993909999999 -080910110500080910100300080912131404081515161700181515021904060120201904999099990999999999902900090999919999190991990999003119999900 -080909010500060909101000040411111200131302111200131314151200030416171700099990993099909990991999919091999999999910999199929909990099 -080808090500011010101104121306111104141302151604171318192000171319190300999099090993999091999900990099099991100919199199999992990999 -080403090900081011090900121311140200011514140600041605171704181818171700992999099999099900991909919909999319999099099999000099999099 -040808080300090204101004061112121300141115131300161117181800051101181800999290199990099091909990999099999090999900990199909399999999 -030804090900080810090900111102050600121212131300041414131300151601170400909992999999909991090991099991999999999199999909900309909909 -040809011000111111101000121313141500060204141500161717141500040317140500009999903999919909109999909019999909999199990999909990992999 -080609010500081011121304081014131300151502161600150304161600041717171700909999903099991099099909099909199911999909992999999909909999 -080909101004080602101104081213131400151617130300151819190500150119192004999909909999911090191901999919929009999109999999993990999900 -040809011000111109121000111109120400041309141400030604141400151515020500009999093999900999999999909999199009999099999909929919999109 -080109090900080810111104121213111104141406151600141404170500021818190300999999309999099019999990090199099909099990099909919999919129 -080905101000081111121000080213121400041504161600061717161600031717010400009999999999909999990901199019109990999199990999999930929999 -080809091000080804101000111213060500111202141500111216161700040104160300909999990999099909900991999991999991199999190099903092999999 -040808090300100808091100121213040200121213131400151515161600050106170400999290999990991909991999909999919999190910999999903009999909 -080304090900101102091200130414121200131515161604131718161600130118050600299991909991109990199999099991909999909109990999993990999099 -040803090900101106091200021305141200131315141200161715141200041701140400029999199991909919909910999999999919999999990000909390999999 -080805030600040910111100041213141100151614140200151717171704150118181800999999002090099999099909999900919999999009190999093099999999 -030804090900100811091200020813041200141413041500061413161600051701161600299999909991900919999999909199909990999999090109990399909999 -050809091000010811111004120813141000120815161600120602161600040317180400009999999993099099999909009990999919999919999019909919992109 -050108080800091011111100101012120400130212121400150416160400150316160600999990399099199909199999909999999119091990099099999999929909 -080109090900081010111200081013061400080215041600041718181604171705031600999999309990900999100999999991909919090199999199099929990999 -080910100300080909110500081202111104131415151500161718181904040118180600999299919999909999190911990199999909991009091999003990999999 -080409040400080809021000051109121000131313031000141415041000040115150600909999990099911990999999919001299999999199999099903900999999 -040108080800091010111100121010131304141506020500041616171700181616031700999990390999999909909909190090109099999091999999909999909929 -080309090400080805101104121213021400121213151600171813190600170113191904929999991099909009910999999999109911090199099999993999999090 -080801091000111112091004111314091000151504040500151502160300061718161600999999039999190091999990099919909909999990999199990192909199 -080106040900080810031104121313131400121504021600151517171700051818181800999099309099192099191909999900119999199999099999999990909999 -080106090900080810090400111111111204131415161704131802050300131819191900990999399999009991990999990919009019009010999999999192999999 -080809101000111202100300111314151504111616161604111718190600050120202004991999019299999990199991090919999099909199999000903909999990 -080910110400031212131300140215040600141616171700141618181704140118180500190092100999999991999991999991009099999990999099093999999909 -060809040300100809111200100804111300101414021300151414161300040501041300900990999299999999991990909909999091199990990999900309999999 -030405080400091010101000090411110400091212131400020613130100151515150400999092000999999999099999999900909990091999999993910919999909 -060809091000011111041000051112121000131412120200151604031700181818171704009099099993909999999991999009999099190099199099909929999990 -040808080800091010111104061202110300011313130500041415151600171717151800999990099990999091192909199919999399999009090999999990999009 -050104080800091011080800091211111300091202140400151216171700150406170300999990309990109999990991999999909911990901999999990092999999 -080105091000080811120600041311140300151311021600151311161600150417170400999099300099119990919999999099129099999991999999999099909909 -040809101000111102101000111112131404031512131604171718180500170118190600000999999999199999190999990299909910009190999990993909999909 -080909010500080909101104031202131400151515160600171718161604041719191900999999993091991021991991119999099990099909999099099999900999 -080103090904081011021204081311140500081511161600171811161900061818041900992909399190911091999991009999999099999099990900909909999999 -080304010600080809091000110209090400111213140400151515141400161616170500299999903099990991999909909911099919099909999999999009999909 -080109090900081010110400081012131300080212141400051512161400041706030400999999309991900999999999099999999199999190990119990020909999 -040808030900101008061100101012021100051314041500161616171500040117171500999290099199909999999999119901999010999199999999903099999909 -040108030900101108060900101104050900101112120200100412130400140415131300999290399990009999099999999999019919199099999900909099990999 -080104090400081010111200131010111400130206110500131515160300131515171704999099300990990999990909099919909909999199999912999999999090 -080809090400080809040300100511041200131111141200011515061200041616160200999099990999999909092999999009099090999099993999991901909919 -080909090400041010111200050210131300031404131500161617171500161601061500099990990099990999909901199919999999092101999999999399999909 -080501090400101011120400101013131300140215150600161717180300161717181804099090930999100999099999999919999019090991999992999999999090 -040809090900100811041200131311141400051311140100061516160300170216160400999990999099090909990999999099999911399199999992901999901909 -080809090400061009091100121302111100120314151600041717150100051717150400999999099099099900909909199991919999199219990993999999909909 -080909091000080811051000011211130400031211140400151511161700151502060400999099090999999990999931909999099990092990999990999190991099 -080309100600080509090400111213021400151515161404171818191400171818011404929099990999999900910990999090199999109909999901999939909990 -080808090300040210090900111112060500111113141500040414141500161616010400991299199999199909199999999991009909999919999090909030999999 -080801090900101112091300141406151300141602151304041617150500031618150400999990939990019990919990909999999991909919090999999199921909 -060108080400091008111104041012111100131415050200161417181800161403181800999090399990119009099999999990019009990999199919999299999999 -080401060900081010100900081112131404081505040200151516161700181816160300999999030990990999199909110909019909999999199991999999990929 -080806091004010811021000121212120300131415161604131417161600041418190500909109991993919991192999999900999099909909999999909009999009 -060808090900100808110300101212111104101212130500011415021604041718181800999990990990992999999999990999199099999091093910091199901999 -040104080800090909101000111111110400050212131300141404131300041415030600990990390999909919999999909910099099999109999999999990901299 -040809090900060802040300100811120400131311141400131315150500040115150400099999910299199909999999009019999900999999999090903999999909 -080808030500020409101100120609131404151616141400011616170400181818171700992991999090990919909990090190999190999999993900999099999999 -080910031100020610111100121314040400051514161600011514161600171717170400112991999990909919999919099919909099999999993099990900999999 -080904011004081111121004081311141500161302171700181306171700031319190500909909093999991099901909099999919111991999999909929909999909 -080901101104120910101104050913141500161616160600171704180200170319191900099900939999090009199999109999109999999091999901999991992999 -030808080500091011111204021311111200141415061200141416171204041801171700999092909991999091999919999190999990999909999100090399909999 -080801090600100809090400101112131400101515151500100516170200040316170400999099939999999990190900009991999999999999199011909990992999 -060809100500110212121200131304040300131314141400151616171700150116041700000099909991199919092999999999099909999199090999993999999099 -050108040900101108121304101414120600101414121504100216171500181818190300999090399099900091999919099999909999009999991119990919999929 -040809090900021010100300110604041200111313141200151314141200040105161200909990099991992910999999909990999199999999990090903999999009 -080109101104081212131304081212131304141516021700140618051900202020031900990009309090999099999999990991999901199000199999909099999929 -080109091000081109090400121314141500120616021500121717041504051717031500999099399090999991099901999900199999199909999990099999909929 -080809100500080809060300111209131404151609131404151718191404150120200200990099999999909909992909990909999999909000990119093911999919 -030108080900101108060900121314150900040214040904161617170500161617181800999092390999199919199919099019099919909909999099999990999099 -060809031000080809111204131309021404131305151400011617180400161619191900999290999199991009919990990999199909099091993110999099999999 -040108080400090908080400100911111100121213140200121213141400061505040300999090399999190909919999999090919999199999999999900902990999 -080901100600081111101204131311100400131302101400151515161600031705180400099999039099910099990990999999999991099919099999920909990909 -080809011004111111111000061213141505161614141704161618021900032020202104909909903999990999019900910999919999909999199111929990999900 -040805090904011010101000111111111200131415160200131706180400131717180300099909000993999999199999919990919009199901099999999999999029 -040808091000111108120600041113120100030513120400141513161600041502161600999090990099909909999990939999999900092991991999909999991199 -080804090900100805110300101213141404101504141400161616021700060118171700990999990999992990019999090909999909990091999999903119999199 -030809100200111112121300041412121300151617171304151818171904150618010500211199999199999990999909919909199909909999990900099930990999 -080801090500100811121300141415151304021615151300171618191904061603190400999099930991100919099999990199999199990990999199009299999909 -080804010400090909101100121213111104120514151500061617151500031818180200999999003099909999919990090990199099999909990099999991929919 -080509100600081112131300081415131304040215150100161617181804160317181800990099009990099999099991090919999999390100999999099999929999 -080910111200080902040300081314061500161717181804161717181804191919010500991199919299009999199909909901909099909999999919099030999999 -060809011004111112101004111113141504161702141800161719142000031705142000009909903999099099019999000099909919999919099919999999929099 -080309091000080409090600080211121200131314121204131514160100050414161600299099999099099999099910999919999919909090999913900999999999 -040809090600021009090100111010121200131313121204140315151600171705041800919090199991993919909999999199999999900290099999909090999909 -080409060500080810101000011111110400121213130400141513161600031702161600090999909099099990999939909919999919999990091999921199991999 -030809090400100809090600021112131404151112141400161712181800050401181800299099999991990919909999090199999909991990991109900399999999 -080910100400040611100100051211131300041211140200151216161700151516160300009090099999913999999900199999919099199991999991999992990999 -080809100400010811041200131411121204151611020500150617181800150317181800990099900993199990999909990009009991999091999919999999992999 -040308090900100504090900101111020400121111131300121414041300120115160600921990999999999990019909109999099999999919990999993009999009 -050108080300090910100400090902061104121314151604171414181800191919191800999290319999999999190999900911909010000990999999909999999999 -080804050300080809101000111213140200111516161704111516181700110401061700999999900299999909019990919909919999109999990009999309909999 -080901041000080911121000081313051000061313021000141415151604140315041700099099939999011999999999999099099990199991099199092990999909 -030808080200090909101000060511101204131415161204171818191904201818011900299199999199999999099999090009199909900901099909009939909999 -080603091000081111041000081213140200151515160500011717181804041717181800092199999999990990991999119001999999099190993909099999909999 -080306090900080804090900100211111100100404121200101313120100100514150400990999299999909919990911999999199999999009999993999009990009 -080901101000080911101004080412131300080514150200161718151500040618180300099999939999019099019990999999919900190909990999900992999999 -060803010904100811120904130814151604130817021805131920181800191921212100999900923990991099191900190999119909109909999099999099999999 -080404010600090910101000090902111200131415111600131417111804130317110500099990903099099999991999119901909099999919099999099990992999 -080909050400080810101100121212100100061314140400151614141704031818180200999999900099090999999999039999199909090099990991099991929919 -040801060900100811121304140815151504050816170200181816171700181819190300999090939090090009109999990090919999199999999099999902999999 -080903101000080411101000021211130500121211061400151516161600151501040400129999999999999910909919099999909910999919099099999300999999 -040808090900010808090900101011120400131313140500151502160300040406161600090999999993999991999999009910099999099199999119900092999999 -080409100400080311020500081213141400121215141400161717171704160601181800901099911999290999919900999990999991990919999999090309999999 -050804040904101112121200131313141400021515141400161617171800031617010600909000099090099999090999999999999191991991999990999930929999 -080905031000081112121004081312021000081414150600161414170400160118181904909299099999999090999990119991999090090990999999993900999900 -080801090904081011120904131415121604130517120200131806191900131803191900999909939990011090091909990990919099999909190999999999999299 -060808080900101105120900131414120904021414151504160317151500181917010400999090999999099900999999900099909199901919999919912930919999 -030404080800091011080100090402121300141412121300141405151500061604151500999992009991193999119909909091999999999999099909990999909099 -080909090900080610110100081010121204131314121200131315021604031718050400099999990999013999999999190990999909999991099919099190921099 -080903100400080910101100121205131100121214021104151515161100060117180400999999929090999909919999999990199909109099999911903099999009 -060805010400090810101100090810101200131415150400130402161600130317161600099999903090090999990999999099109909999019999919999999992199 -040801050900101010100900111213141400021213141400150413161700151503060400099999030999990910009999999199999999991999990900999900992999 -050809010400100811111100041204131300041206131300140315151600141415150200909990903090999900019999999999999090999999199299999991990919 -060401040800090910100800111213100800110413050200111414031500111414161700999990030999091999999990099909919999099999190999999921999019 -060404080900101011080900100311050900121211131400120211151400041617011400990990099999909999999929999199009999999190999910991139901999 -030408091000111111121000041302121000140504151500141616151500041616010600900992990999999999199900109990199999999099990909909930999999 -050808091000110804090400110212090600030412090400131312141400041512011400999090999091099991999991909299999909099990999919990939900999 -030808080900100406020900101011120500041314151600171714161600171714010400299999091999900999919990099999109009199999999009999930999999 -080909100300080911100500121311101404151611020400171718181904170118180600999299999990999990990909900099199111091999999090093990999999 -050108090904101108090904121314150600161602171800191620201804191920200300999900399991009010999990009199999911199999990999099992990999 -040808090200010810101100061210101304141415151600141417180300050417181800091199999193099990991999990000919999999909299999900999999099 -030808050400091004111200091314061500091313161500021717161500181717011504999992090099990990090999909990999999991909999910919939919990 -040808080300090210100400111110100600121304141500131316161500050116041500999290199990990991999999909199099990091990999099903999999099 -040108090600101010110300121211111300121202041300140515151600171715150400990090309999992919999999909991099919990909990990909990999999 -080801090900060810090904111213141500161713021504161705181500160319201504999999939999019009991900009099999909109991999909999919992190 -080401091000081111111000080504121000081302141500161617180600031617181804999099030990999990019999999999109911999109099909999999929990 -080803040900080810110904021210100500121213131400061513131600171717010400929999990999990019909999999199009999999199099190909030999999 -080104091000081111121000081105121000081302121400040615151400041617150300999099300990919999099999999999999901990019999991999092900999 -030809010500100809111100121309111400150209161404170416160400181818180600999992993099099919999991109119999199000999090999909999999909 -040408080300090208050400091011041200091011131200091414141200150401061200999290099999109991990999909999999990999190990990900309999999 -080909100300080909101000081102121300141516161300171717171804060401040500999299999999999990919999199001999099999091099990000300999999 -080909090200080304101104011210101300141415161304171718191300171705061300099199299199901099999931909990999909009090999099999009999999 -080808010400090910101000020911121300141404121500141405161700060316160400999999903099199999090919099190909999999999099090902990999999 -040408080300090608081000090911041000121311021000011411150500041414151600909990999299099999099999999099099099199091993099999990909109 -080804090400080310091100020406091200131313141200011515141400041515050400990099299999900919099909909199099999999919993909999990909099 -080801040400090910111204090910131300140610151500021610151500171717030500999999030099100099909999999199909099991999991999991990999299 -040108050400090808101100041212101300141212101300140215031300040615161300990990399090999901990999009999999199999999991199900929999199 -080601090900080310090900081105121200131114121200151102161700041818041704099999939999919992919909099999999091990910099199909009999990 -040108091004111111111000121213131000141202150500141416170600030418181800990000309999999909199999999999199991099910999190920099999999 -080109091000081112091000130412021000060412140400151516160400150516160300999099319990199900919999999099199909099991999090999999990929 -080809011000080809091000051111061000041112121300141516021300030404171300999999993999091909009999999999919099199991991119920999999009 -080804010500080809090904101112121300101415151604101414060200100317181900999999903099099090901909999909919909909999199999999901992119 -040308080800090610100200091111101200090413131200091413131500161701050400929990999190999999991909909999999909999999199091900300909999 -080406030904081011110900051211020900131415151600011715181600191919191604999209009990999990999999019009199099999090993190990999999990 -080808030900101002090900101011041200131411121200061415160100041405170400999299909999919999199999909909999009990910999913999909909009 -080506090300101010090904111104121300111114021300151516171300150116180400090290999999999009919999999990199999199009999111993909999909 -040408010900100408090900101008111200131313021400031515051600061717171700909990993999909990991990919999109991992990099999999090909999 -080809091000080811061004031211131000121211141504021616171804191616010500999999909999999090909929009999999999001900099919019930919999 -080910100300080211121204081314141200011516141704181819201700181806051704909999099291119099999910999919999309909009999900999909990990 -030808080900040506020900101112120900130412121400131315161600041515010400299999991999991900099990999099919999999009199009999930909999 -030408010500091008081100121314141100120214141104151617061100151518181804999992093099999910919990909999999119909099999099999009990990 -080808010500040909101000021111111100121213131400121213130400060304150400999999903099999909019919999199909999099999099999902009999909 -080801050904101011120900101012120900131313141500161717180400060317020400999909030999010999999999999099199999099991090999902919999109 -050809101000011109121200060209041200131313140300151516161700041516160400010999199993909999909901999919999991299099999990999990900999 -080803090900080804060900101010100200111111040400121314151600120114040500992999999999999909001999919991999990999199090000993990999099 -080604040900081011020900011213130900121213030900041415151500161616170500099999900990911990199939999999999919299099990099999099999009 -040808010400050808090904101112121200131402151500131617181800130603181800099999993090919090199909999099199911999199999109990299999999 -080409061000081109101000111109120100021309141500161305041500031304041500900999999990909999999991139199099199099900991999929999990909 -060108090900101008090900111208131304141202131304141215161700031819040500999990399999999919909910990999999010909919999900999100921999 -080905011004081112131004081106141500031116160400171716161800171702191800099909003999000099019999909999109999992999999999999199991009 -080806050900030802100900041111120900131111141404151516140100171717180400999992900999199999109999909099909099909919999013990909999909 -080403090900081010090900111010120200131305120400131414140400061501160400992999099990999999991909919099909999999001999990990309909909 -080309090500080809090400100611121300021111121404011516120400171718181800999099299999999919090999909109999190009919093199990999990999 -080809010600051009111200131309141404131304140400031502161700181818171700999999093099999900910990090999999990099991992910991199999999 -080306090900080810090900110412131300021414140400051515161600041515010400299999909999999919009999999100099199990919099919999930909999 -060803090904080810100900021110101204131415160100131715181800131905181804029909999999999919990911900901999991399090999999990999900990 -080909010400101010111100050612111300040214141300031514141304161718181300099990993099909909090990999999199019999199999999021999919909 -080309100500080909111200081313021200141313040600151516041700150118181804920099999999919999919999109099999990990919099190993090999990 -080809090300081009091104121302141504051316170400181316171700060119191900999999999299199001191909110999909999990999990099903009999999 -080809090400041010101000111206131400031502161400170518181400171718011404909099990999999909909919009219999911199999999091999939990990 -080304060900101011110900100211111200041314121200151616160400050117171700299991900999990999999919999010999919999910990999903090999999 -080801090900080810100400060510100300111112131400110415131400041617021400999999930999090999999990999090129909999909999099999019900919 -040108050600090909101000111112100400111113131300140215040400140415150300990990309099909919999990999990909999990190099199990999999929 -040808080800091011120100050613120400141413121504141416021700181803171700999990909990003900999999909999999990109999199111991999992999 -080409101004081103050200121314061500161314141500161317181500161304011500991909029199990900991999909099999999099999990001999939990999 -080808010900101011120900101314120904151502161600151504161604031718050600999999903999991999099900990990919911999999999909020990990099 -080901041000080909111204131415161600131404160200131417171700130603051800999099939099910009019900999990999999199999199999999290909909 -040808080300090210111104091213140400091515151500161617180500160106181800999290199999199099109991909919099099999199999000993099999999 -040408080600091002110300011012111100131014141400151616171700040516171700909090909990919999192939999991999019990099999909909999990999 -080808090900011010101000021111121200130511121204140415160600170304181800999999900993999999109919999199999099901990090909919009929999 -020808080800090610030400111010121200131414121204151416171704050118181800199991092999999919990999999109999990901900991999003099999999 -080801090904081011090600021213141400041505141400031616161700181818041700999909139999109919000919999910999099999199992990999099999099 -050108091000111213041000141215151000141204151000021616041700061616031700990090300990099999099919999999999999991909091909909999999299 -080809090300080409091004111212130200111414151600111414171604061801190500909299999999991090991999919909109991999990990999090309909909 -080809090300080209091000111112131300141512131304161718181800050104040600999999999290191991999999099919999199901909991099903000999999 -080808020900030510111100121210111100130614150100130416171704131819171704991192909199099999999999999099199909399900999009099099900990 -080406090900081011090900121211110100021213131400150313131600171704050400990999099990099999909991939199099999091999099999912000999999 -080609100400081111100100121211131300121205131300141503040200041617171700909099909990993999919990099999999990990999190990990291909999 -080901051000020909101004111112131300141515131300161515061704031818041900199991930999909019099999099190999999991990099999020990999909 -080909100600080309101000081102121304080414141400151515161700051818010400999099299999999999109900900901909999999999199901909030999999 -080103090900081006090400081102121300081415131300161615050400161617170400992999399991990999019911199900999990999090099999999999990909 -080809101004110212100100111305141400111313141404031516171704061819171700991909019991193990909990999999999999902099099099099099900999 -080109091004081109121300080414121500081414050600161602170300181818180400999009399090190999190909999999909990999019999992999119999909 -080804090400080809091000040511101000121314150100161317171700161302060300909999999099099900099999099999099011390999999999999192991099 -080808010400091010111200090513131404091515131604091506021700031819191900999999903090901999091990990990919999909999199991999019921999 -020808080300091006111104121313141100151313141404011616170500181818192004199291990999099010999999999199999190909190993999990900999900 -080104090904081011121200081313141400081313041400151502160300150605171800999909300990009991909999999999999990990919999919990912999019 -080804090900080810090500011112131400041512161400171717021400031818061404999999909999909990090931199999199009099991999919929009999990 -030805090600040804101000111202101000131414141400151616161700151501171704290099990999909901999991199099199999990991999999990309999990 -030804040500080809091000021109090600121213141500161717171500161604011500299999900099990991999919909199099919099910999999990039999999 -080809010600080809091000111112121300110514041300151515150200040316171804999999993099090909919999919990099909999999199990909991992110 -030802040900080810101000061111121300141415161304141417171300051804011300919092919099999999919999999090199990909991999090990039909999 -080808080300090210040400091111111100121213141500121213141600060401140500999299199990009991990999999919909990999999099199900390999999 -080808090904101111090900101012130100040214140500151514140400160306171800990909999999999999009990039999199019099199999999919000929909 -080910010600110910121300141510161604170210161604051819202000181819032004009990993099919909900991990019999999900199099199999999999290 -080909011000040909111000121313140400121513161600120602160300120517171704099990993999900999019909909909199999999099999919999192990990 -060501040800091011080800121311141504121311140200121316171804121316190300999990030990019990901909990999919999999999199091099919999929 -080609101005081112131304081415131304011616171800031616192000212121022004909909900999099090999900990990099391099991099999929919999190 -050809100300110204121200111314121200151514141600061717181800041717011804911290199999999991099909999919909999999109090919999939909990 -080801091000080811121304051415151600171415021604171418190300170620191904999099930099109091990901999999999091909991999099999092990990 -080802090904080810110400031213111400121215160500171818181800171706010400910909919999999929190999909991009901999991999999990930990999 -080809100400080309111100020409111100121212041300141415161700061405011700999099290999999919999909099190999999099919099010909039999999 -080909010400080610101100081210101100081212131400030405151600171717020400099999903090990999999999999990109999999001099999929910999199 -080903101000080811101000020412120400131312121404051515151600171717010600929999199999909919099909909199999999000199099990999030999999 -080901101004080911101004120911111304120914150200121614171800120519060300999909939990099099909999910999919009199091999991990092999099 -050408060300091011111200011314111500161314021500161314041500161314171704900990909290199991991939999999199009199990999999999999999090 -040808010900100811110904101211040900131306020900031415161700051818181800099999993990091099999990909900999999199991092119999990909999 -080809090600010809091004111213131404111513160200111504170500181818190300999999999093190090199909910999919909199901099999990919999929 -040809101000111213131000141502161600171706161604171718180300050118191904900990099990999909099911199190999999909999299099903999999090 -080902040300080910101100080910121304081415151600171418180600040118180500910999919299991999909999900919909009990990099999903999999909 -080103090900081011090900101011120200061311141504161604171800161605170400992999399990999999991991119099909900909090099909999990990999 -040804030900100811060900121211130900121211130200141516160400050116160400909290999999909900999999999999919909190991090199903999999909 -030808080800090906020500100911121200101311111404101315161700101804010400299999991999999999010990999999919909909999190001999930900999 -080109090600080810091104121213141100121215021100160504170400160318181800999099399999100009199999199990199999990001999990999919992999 -040508030900101108080904121314020900151314160600171714181804170114181800999290099990990009999990119099999090099999999199093999999099 -040808010900100808090900111104121200021113141504161613171800161603060500999990993999919901009999999199009990901990099999999900992999 -080106090904081011090900081111121304081402151300041416171800051916160300990909399991999999909919000991999091990901999991999992900999 -030804040400090808101000091111101000090212130600051415161600171401161600999992900099909999999919999919099911999991099019909399909999 -040108080400091010111200131010110400131414110500021414111500161616030600999990309090900999990919999909999999091999999990919990999299 -080109090500080809091004111212131400111515151600110417030400021717180600999999399099090019999909009909909999999999090929919999919009 -080309090400080802091000041112041300141414141300051515151300161601061300299999999099190999190991999019099999090919999999990309999999 -080403090900081011020900120511110400120413131400121513131400120406011400992999099999091909919990999999109909999999990090990039999999 -040804030900100808111200100611111300101414050200151515151600040117171700099299909199999999091990999990919999090099199991903909999999 -030809101000110809121000040802120600040813121404151617181400151505011400999992999991090999999901999991909091109999999001990039999999 -080809090900101011040500101212031300141212061300151617021300150104041300999990909099009999999999929099999990990119990911993009999999 -060803090900101010111200021311111200041414051200041414151500161701041500099999020999999919999911999091999990999999099909900309909999 -050408080400090908020300010910111100121310141404060410141400000000000000909090999999919999112931999909999090900099999999999999999999 -080909030400021004111100121010111100121314140100121504141600061717170500192991999099999919099919999991099909399099999090909900999999 -080903101000081111101000081202041300081415161300141417161300040405010600929999199999999999190991999919099911090909999999900030999999 -030809090200101011051200131313141204150416171200151818191204151818010600219199999199099999009999990990099900099999990901099930999999 -080809090900080810111204011314121200151515041600170218031604061918180500999999990999009099099930099919009999991999991929091999901909 -030809101104060909101100121302101100141315151600171318192004051301202004219909999999999909199999999091009999090991090019009399999990 -030608091000110408081000111102041000011213141404151617141400051618181800900092999999099999099991099991999390909119990199909099999999 -080909101004081112101000081302040300141516161604171819190500170119190600999909099999909990099911099191929199909199090099993999999909 -080801050900100811120900101314020904131314150904161714181900160614040300999999930990011990099999910999199999909991990091999902990999 -080309100400080809101104120209101300141509100400011516170500181816160600299999999099999091990919909199999190099909993000990999999909 -040809090500041009090100111213131400150213131400151503061404161617171400099099099999193901909909909919999199999999999290009999999909 -050804090300101104121200101302121200101414141400101516161704060116161700909290091990099999999991199919999199999999991090003999999999 -080910111104080909111104121314140600050414140100031515161600171819021600000909999999999099900900999009999999399991999909929999911119 -080309090900101112040500130214151604131315151600171717181604061901181600299991909091909991099919990990999999999109999900090399909999 -030809101100041209101104051309141100150216161104171716161800191919010600299999199990999091909999099019099099909199099990991130999999 -080808010400091011121304141015151604061015151600031702051800191717181800999999093090000009919999900099999999999910099199929999919999 -030802090500080809091000111212131400061515151404041616161404171819011400919992919099999999010909999099199999909991999990009039900999 -080808080600010910111200131414021200131516041204171718181200170518040300999099101993999999019999919990099099909009999099999992990099 -080209090900081011120300080413120500081413120100061515121600041517161604919999199299199999199990909999999001399999990909999099909090 -080309091000110409091004110212121000131313141000050615160100171717180400299991999999090099999911999999199999090901999903990009999909 -080809100400080811120100051313141500021613141500171706141800031704141804909099900999903999919909199999999119091999999090999999920990 -040801060900100811110900120811040900131313130500040414021500031414041500999990930999990909999900099991999999090991999910990999929909 -080309091000081111111000081204021300081405151500161414151500040117060400929999991999999999910990999909109009999999990919903090999099 -060808040400010909091000111112121300111112120400040214141400051515160300090999099093999991090999909999999999099199990099991999909129 -080909090600081011110100021211110500131204141404151216141400170304181800999099099990993909999911909199099999901909999909919090929999 -040108080900101108020400121205131300121204031400061515161600171717161600999090391090199909019999999999919999290009999909990999999999 -040809090300100211110400100612111300141515151500161616160400050117171700019299199991999990990999099190909199999199999990903909999999 -080109090900081011120400131312120400131302141500060516171704031616171700999999309990090991999991999999109991090019999999099999929099 -040308080400090605080200101111121300101111121400151515121600171701120400929990999099991900091909999999919999999099199911909399999909 -030508080804091011120600131302121204041314150100161617181800191919181800999902009091099991999991090091999999399911999919990999999099 -080909040300080904101100051212101100131212021104141516171700060118171700990999999290999990099999099099999999100091990199903199999199 -080804010900080810090904021111121200131111141504161605171800160306191800999999903999119010990999999199099999001990099909999909929099 -080109090900080802100300111111111200131404151204040516171700061616171700999999311999992919199999999099099090900090099909999999909999 -050108080200091008111204090904111300141516111700141516110300141506180400999190399199109090991999099009919990999999299999999909999009 -080804030900080810110900121212020900051313141404151316171400040116180600999299909999909909909999119991999990900990990099903909999909 -080909101004080909100100111213141400110415031600110602171804111919190500099909999999913990199909099991999909299919199011099090999999 -030809090904101105120400021313131300141414151604171715151800171906011800299909190991900919909919999991909999909919099099990939990999 -080403091000081104021200051314151500131314151500161617171700161604010600992199099190991990019909999999999999999009199099999030999999 -080808040400030902101100120906111100130905140400130915141600131515010400999999900099119929019919999999199099999909099900999930999999 -080808040909040210111212131314111212131516111718031519112005061504012020999999900900199991199999109999999900902999009090999039909999 -080804091000080811101000120213140600120415141604121515140100030517181800990999990999009999909911999901909999009999999913920099999099 -040808090900100811090400121311141404150211141400150616161600170301180500999990999990999909900909990909999111999091999999919309929909 -080910111100081210130100080210141504161610170500161819202004031806202004919999190990913991999999000919009999999990999009029099999990 -040503080800090210080800111212131300111204131400111515151600060117170400992990099991119919999909999999999999099900091999903090999999 -080909090900081011120100131415150600131615021704131819171704131804030500999999990990093999019900909909999991109009999999099020999999 -080409060300080909021000081112131000041414151500161414151500160117040500990999099299919990119909919991999090999999990999993090999099 -080809031000080809041000051112021000131111141400131315141400060116040400999299999999099999009909019999199999999909999119903090999099 -080904010400080910101000060911111200020911110400131314140400031304150500999999903090999999910999999099909119991909999990999909920909 -040808080400040909100600110205031200131414041200151516161200150116161200099099099990919991920910999109999990991999999090993999999999 -060809100200080809111204011313111404151513111604171718110300171719200500091199999199199091991939990999919900909009299999999099999009 -080808090300101011121200131414060200041414151500161616151500170401040500990299991999099999091909909099919999999909999919909300909999 -080309090900080810061100050210121200131415120100161616171700041804171704299999999099999991900999999010999091399110999999990999900990 -030802040900100811090904100412130500101415150100161615150600161617171700910992919991919099919990009999199909399099999990999909999999 -080910061104031210051100130210141400131510141400161515170400181901171704190902199999990991990991999999999991990991099919900399909990 -040108090900100808090904101112050600101302141500101617171700161603181804999990399991909099999911099991909910099109999999999909992990 -080801091004080811091000041213141000151214141000061602051700161618030400999909939999019999919900909990999099990919099109999990991299 -080304040900101112130900050214140900151516160904151716161800061717011800299991900991999991009901999991999909009999099999999039909999 -080808090500041011120600131014150100161602151504161617171804031917171800999099900999900909909991139019999919909919999999099999921909 -040808090600040808091000111212090100111212091300020514141500161616030400099999999090990999099999139999999199091009099999919990999299 -040809101000011112131300141515131300140615021600141717181604140319051604000999099993119999099909999999199099099991999919092099999090 -080803090900101011020900101004121200061314121204151614170500040114181800992990999999901999019999999909999099909091990119903990999099 -080803090904100511111200021311111204141415161200141417181200061717010400929901999099999910999919990919099919999910999910999930909999 -080109090300081009091104081010121100081314021100061516171704041816190500999999399290999099909999099991999091190090999099090909909909 -050401080400091011111200061010021200041314141500040314141500161616161500999090030990091909999999919999199019099299999999909999999909 -080808030400020910111204130914141400131515161600131515171800130501061904992991909099090019909999999990999990999999991900990390999900 -040809101100031209101100121209131100040402141100151515151600050604011600009999999992199999909999999091099991199099199991900039999999 -080105090900081011020904081213141404080615141400161617170300161618191904999999309999911091191901990990999909990999299099999999990090 -080409090300080506101100081212131400151212141404151617040200150117171800099999990299999990001909099999999999909909190190993991999919 -080808010900051011090904121314151604060214171600181814191604200314191900999999903990009099919901100019099999999190999999019999929999 -050108080804090910110400090912130300140215161600141406171600181818170400999900309999990999009999099190929111999900999999909990999999 -080808080600050910111200130914150200131617181904132017171904202001031904999999909099990909009990919990119001909999990999099399999920 -080109101000081109101004080409121300081409151304061617020500161617170300999999399990109099990990199999199099909091990910999999999929 -080409050300081010111100081006120200131414151500131414041500130116170400990999009299999999919999919000919991999999990909993099999009 -080801090900100811091200100213141200041505141200161617141200030406140400999999939990010999919991199919999090999199999909920090999999 -080803090904080810040900111110120200131410150400131410161700130618010500992909999999999909901999919909199001099999999910999030990999 -080906011000051111121004131314141000131314151500160217041500041818180300099990003999910091999999909999099999999109990909901999999929 -080109090300081009021100121010131400151504130400151516170500061818181804999999391299199909911909919099909909999999999000900999999990 -080304090904101010090900110212131300141516061300171816191904170116190500290901999999999919909910099919999190991999991009093990999999 -080903101000080909021100080412130500080614151500161617151504160104181800992999999199991999019909199991909990990019999199093009999999 -080809090300100209090600101011121300141414050400151616171704040116171700999299099991199999990999009190999999999190090909003999999999 -040808040300090810111100091210111100091210020500131214140400061201141500990990999299999990999999999999199911090999990199999390909909 -080809101104080309061200021309141504161309141700161318181900041301180500999009290099999919990919990999909909999990090190909390999999 -040801090900101011090900121213051400121215150400160217171704061818180300099999039999109991090999909990999999090199999099001999999929 -060808010900100808090900111111111200131402151204161417151204031418051204999990993990999999001999999999999111101999999909029099999090 -080804010400080909101000051112101000040212121300141403041300141415060400909999993090919901099999999919909099999190999999999290991099 -080808080900100206030900101105120904101314151604101718181600040118181600999999102999999991999999900910099100909999991090903999999999 -080910011104080910101100080912121300080906141500161718021904030520202004009909993999991999091999999999919990999990191111020099999990 -080309100600111109101200110209131404151609171804151919202104151919012105299991999099999999900919900919099999009100099919099939909990 -060809051004031112121000131114151500161114171504181114171700021914010400000909099999999929090999999199999999901999099119911930919999 -080803090904080804101000110612101000131314020400131516171800050116171700992909991999999909099990999090199909999091099199903990999199 -050104080400090909090400101010111100120213061400121516141400120316160400990090390999990991909999999991909110999099999099999990929999 -040801090900100811090900060812121300030814141300151514050400151502161704999990939990009909199999999991999999092999999999999100991000 -040808090600101008091100101012091304030402141500161617141500161605011500999990999099000999990999190991109909992919999199999939990999 -080801050900080810101000061111041200031313141200150213161200151504170400999099939099099909190999909991999990992190999999991909999009 -080805030904101112131404101515021600101515061700181818191904202001191900999209009199091099019999919999919990990909199919009399999999 -060801090900101011090900121111131304021415151600170515151604181903041600099999039999109919999999090109009999991099999999019999912909 -080809101104080812021100011314141100151515141600061717040300051717181804991909911999091999199931999990919999990900299999999999909090 -080809090400041009090200110304121200111104121200131313131400060405011400909999999099191902991999099999999999990909199991900039999999 -080809100400010811021204131314141200131315031200161617061200160518191904910099919993911090999990999999999909299009999909990099999090 -040809090900011011111100121213130200141413151500141416151700060404030500099999009993199990991999909909919999999909099999900020999999 -040308080800090410110600090904021200131313131200141515151600141404010500929990991999009999910999019099999999199991999990990930990999 -080803060904081004111100021212111100131414141404151617181800151905011800929009999090099919999999999109099199909199990119990939990999 -080809041000030809111000120205131000121406150400121616171700041616011700990992999999909991909999009919099999099100990919909939999999 -080109090600080810111104121202111100121313131400151616171804051616030400999099309999119009999999199991909999999091090999009920999999 -080109090400081010101000081112121300081111061400021516171400050404031400999999309091999999090909999999909990991999991119900029999999 -080801090904040810090400111210131400111510131600110205131700181803130600999909939990909990900909999999909919099109091999919990992999 -080808091004061102120300131314150100131315150500161717181904161717201904999109901290019999199999939991999909099990990990099909999090 -080809100300110212061300111415151304161615151300161717181904051717010400991299019990190991999991990999999909099991999900099930909999 -050108090400101008091104101208090600131202091400151617171800041617170300999990399099110090999999999099909991090019999991909992999999 -030809101000111209101000021314141400041506161604171717161600181801050400299999199991909919099919999019909999909109999909990300999999 -080808090500021003111100121213141404121204141400151616170600150116180400990091199999299919909990090999999909990190999990993999999009 -080808040900051010110900120310131400121515161400120217181404120406011400999999090999999909900929999990099991999191991900090039999999 -080806090900031002090900111111111200040413140100151516141704151516140500990992199999119999991999919999199900390999999990099990990099 -030808090904100208111100101213111104101415161700101815051904060120202000299909999099199991999990090919909100999990091999003990999999 -040105080800090910081104090912131104141516060200171818191900171818190300999990309999909099099991110090919900990099199999999999999929 -080809090904080810101000051112021300141516161704181919162004181901060300999909990999999990099901119919919019900919199999099302999999 -030808090600041011121200041002131200051414131500161414130100161617130400290099919990999999199901999919909099099999999913999999990009 -080806010904081011120900031305141504161718141904161602141900202020201900999909003999009999010929900919909919909919999019999909999999 -080809030400100811051200100213041400101515141400161616160400060117171700992999919099909990190911099999999999991900999990903099999999 -080808010600040910111100090904111100121212131300040314021500161414170500999999903099009909999999999990919990999991999290909910909199 -080909010600100909111200051313141400041502141400161617171800160403171804099990993099901909991999099999999001999919999090990999999290 -080806010900031011110900121311111400121202141400150504161600170404161600909999093999991920991990999999999911990099099909909999909099 -080808090904101105090300121213020400141215151600171815150600170119191904999909099290999909019999999990109019090199099999993099999990 -040804060900100805110900030811110900040212120100131312121400041315150400009099999991099929999999909910999999390199999190909090999999 -080109101104080909101100081213101104141502101100050316171800061616041800999009399990919999999909190901999099990910099999992909909999 -050809011004060411111000121314111000150216161704181819191700180319191700009909003999999909999901109910999199001909999999999999929999 -080809031000041102101000121313131400121515050600121515160400120117170400912999199999109909190999999919909999999990990900993099999909 -080909030400080909041000080211051000081211131000141516161704140116061800992999999099990991999991099999999910090109990990093990999909 -040808091000010808091000111213061000051214021500041216161700041216031700090099999993999990199909999091099991099991090999999999909299 -040801091000080811111004121314111000120402150600161617151800161605150300999090930999199001999991999991999901090999999091999092999999 -060803091000110808021000011213141000151216171700151505171704181818040400992190999990991999019931999991199091999999999099009900999999 -080109101004081112101300081114141500041114140500161702181800160406031800990909309990090999990991999999909099999019990919990099999929 -080809090300080809021000111111121000041312120600041415160100051718181804999299999999010999919999999909999099099019990013990909909990 -080809090904080802100300111110100100121212131400150616040400151517180500999909919299199991999991939990999990099009099999999009990009 -040808080800010910020400090904110300121206111100131414141400151605171700099999191093099999019999999909929999990009999999909909900999 -080910030600081111110200081213131400080413151600041717151504181818010500002999919099991999991990909909919999999999190909099030999999 -080809090900080810060500011111041200041113140200041513031600171717161600999999900999999990090939909999909011199099199999900929999999 -080109101000080811101000120413130300140513131504161602171500041806171500990999309999199900199999999099929909900919999911990099909999 -080509030400080809101100121209021300141516161300061516171300041504011300092999999099090999909990119999999099990990999091999039909999 -080605090904081011090904081213040300011212141500161602141700161618141700999909009999009090999900099999929399199199999919999199991909 -080809091000010809091100121314140400121314150400161302040300050617171700999099999093199990190909999999099999099910990999900192999999 -080109090500080809101100121204101100121204101100130206140400131516170300999099399999000991099999999999999909990190099909991999991129 -080609090300080209101000081104121200131104141200041115141600171101140500999299099999199991990990999099999009999999099100909399909909 -080809100300060205111100121204111100131314141400131315160400040117171700911299199990099991999990999199909999999990099099903009999999 -050308080800090410100200091112101300091415131304061617170100181817170400929990999199999990991990999990099009909001990993990999999909 -040808010500090808101000111112131304111414141300151617170200040317170600999990993090909999019990990999999999999990190091909990992999 -080109101000081109101204131309021400131304151604171818191600051818060300999999399999111000991999919999199909100990990999909902999999 -060108080400090908041000090911111000121212131000040214131300031516170500999090399999909999099990909199999990990199999199999109921909 -080605091000111112121000111112020400011313141400151616171400041616040300090990990999990999910999999901199399999099990909909902999999 -030408040900101111041200101013061200141515161200021515161200171717010500909092909099909999099999909190999991991999991990999030999999 -080109090400080810061100121212021104131414151100161414171804161619050300999099309999909919099999100099199099990991999991099092999099 -080808080900100211041200101011131400151505031404151516161400040116061400999099090099199991990999199199299999909909999099903909999999 -040804090900011010090900061010041100121212131100141415021100040515040300009999099993909999999909099991999999199011999919909992990099 -040808091000010808111204131311110500131402151504161706151500031718181900099099990093919090990999999991999910909199991099929990999909 -080808090900100411090400120513130100121213131400041515021400031515061400999990999999090909009990939999999909199999990911999909929999 -080809031000080809041000110209051000111112121300040612121400151616010400992999999999190991999999909919909919999999099990900030909999 -080306091000081102091000121213041000121214041000051514161700151514010400290999999991109999199999909991999990990099099910999930990999 -080904101000080911100300080911021200131314151604131317151500050618010400990999999299999999919990919090919999909909199009909030990999 -080506010400090909091000111212021300111212131300141415040300000000000000099990903099999999190909119999999999999009299909999999999999 -080906101000080911031000081111121300081414140200040115050400000000000000999999909990999999920999919909919099190309099909999999999999 -080803090600101010100200111111121200040413120100141513130500000000000000999099020999991999991999099999999999390090990090999999999999 -080103090900080802090900101010111100121314040600040515151500000000000000992999399999919991109999999909099009990909099099999999999999 -050809090600041011090100120211130400121411151500031411151500000000000000099099099990013999909911909909999990992999999999999999999999 -030809090900060810100400110210101200111113121200040114150500000000000000299999909990990991999991999991999910990309999900999999999999 -080803060500080204090900101004090900101011110400121313131300120401140400929999990091099991999990999999099999999109090999990300999999 -080903100600080211120400051313140400151313141400151516171704181801171700129099990991900991099909999999909990999019999909009399999999 -080909010400080909101000081112101004131302141500161605170600031604171700999999993099919991999901990991009919999190099909929999990999 -050106080800090910101100120913101400120204151504121616151500121616030400999990309099090999090919999990909199909199999999999990999299 -080805010600080809101104121314151600121317151800030402151804191919191800999999903099900090019900909999909991999019999999029199999999 -080106090904081011050900121212121304140215161300140417181300140319181300999909309990099991900999900199099119999910990999999199992999 -040108091000110808060400121212121304050214131300031516171700181816171700990090390099999909199999990910099099999100999999921999999999 -040809090600100811091200100811131400101502131400101617031400050118041404099999999099990999990999099909999111199999991092903099999090 -060808090400010808101000111212120200111314151500110416151700110504031700099099990993919990991909999990919099999009999990999029909999 -050308080900101011080904121011020900121304140900121315161704121819010600929990999999999099919990019999999999199901999900090030900999 -080809090400061009021100011012121300041012121404151515150300161617180500909999099090991999911939999999919019909909299999990099999009 -080309090600081009090400111112021300111414151604051414150100171717150400999099299999199909910999199991909091000999999993999999999009 -040308080400090408081000111106021000111105121000011313141400041315151500929990999099999900019999999999199999999001093919999999900999 -030806090400101010100500111102041204131314141500011314141500161616171500290099190999990991999991900991909999999999993999991199999009 -060801090900050810110900120804111304021415111300161718181304191903181300099999930999109909099919900199999009991909991999091999992999 -080801090500080810101000040411111100121314150200061604151700161603171700999099930999099900199999999990199009190009199999999999999299 -080109090400081009091100081213131404151212021400161617181400160504030600999999399099990991099990990099999091199099999091999020909999 -050804030900100808060900100411020900101213140900011516141700151504141700999290909999909999099999919900199001999919993199999099999909 -060808091000111202040300131305141400131315141400041617171800161601171804991190919299109901999990999999999900999199990190999399999990 -040809010400041011121200131004121400131002051400130615161600031515161600009999903090119999990990999999999010999919090999999999929999 -080808091000110504120300111113020600141414151500161718191904161601191904999190001299999999919999109091999999999190999109090399999990 -080104091000080811121000131313141004150502161704181819191700180619190300990999390999909919099999900001099991100990999999999992990999 -030808060400090808101000110402101000111213140500151216161600151201040400290999999090999900199999199999199900099991999999999300909999 -030808080800050910100400021111041204131414151600171414151500171701061800299999109999999901990919990199009190099999990999999390999909 -050809101104120206031100121213041100011415151100161615151700041818171700911900192999999991099991999991099319099099999999909099999099 -080909100400080909101100060212121100131412121100150416161600030417010500999099999990999999009901999919999199091991999099929030990999 -080109101104081213131100141413131100151502161600171518161600040406050300990009309990199990999999999091999991990909999999900002999999 -080804030900101102090900121313131300011414150500161717151500061717040400999290909991119919999919999919909390999099990999909990999099 -080910110600081213141404081515141400080416160100031705181804171719021800909099000990909099999999099999099999399091992909099999991119 -050608090300101112131304141414140200011515160400171715161800171719191904909290901999099000991999919919999399999999099000999909999990 -080109061000081109121000130409121000040409120400031402151500141405041500990999399990109909999990909099999999099010999199929999990909 -080109090900081011110400081213141404151505141404151516170600181802190300999999309999099991990990090010999999909999999910991119991929 -060809010400100809111200040811111204130214151200131314161200170314180500999990993090110999999999990010999190999990999999919909929909 -080808090600100411111100101202040300101314051500101414151500040401161600999090990990999999192991099919999990999199990909900390999999 -040608080400090310081100121310041100141310151100021610151500171717010500909090999992990919999999909199999901091999991199999030999999 -080801090600080809091000051111111200131402151504041616151500031716181804999999939099199901990999909901999090900919999999991909929990 -060808010900100808110904120413130900120513140900150216141700151803140400099999993990900000919999999999099909999919091199999990912999 -060308090900100508040900101108021200101314151200101614141200171704011204929990999999999990900990199999199009199999999091990039999990 -050801090600100811121304140804021300141515161304141717181300141719190300999090930990011009999990919909199999909991990999999919999929 -080806030904080810110900120510021300121210131300141510161700140104041800909209999999991909919990999999199991999099990100993090999909 -080509041000110909031000111204131000141414020600151516170100151504171700090990999999992990999900919909199991099199999113999999999099 -080806090900080210090904111210130300011414151500161414171704180419051700909999999991119019919919929919999390999990990999009099909099 -060401080800090909080800101010041100121313140200151617141400040517170300999990039999919999001999999090919999190909999099900992999999 -040105060800090909090800101011120200130411121200141511160300040411161600999990300999991990991990919099999099990999299009900999999999 -080805010900040810100900111111100900041212121200060213041400031515041600999999903990990990999999099099199999999190090199999190929909 -040808080800091002110400120306110400131414110400131514111600151505011600099999909991110919099929909999999999999099090900999039999999 -080504010900081010100900111213141400111502141404111616171800031616060400999999003990991999991909199901999909909919999900999900929999 -050208030400040910101104121213131300121214141400011516171700061515171700019999112099999001990999999990999999999190993009999999909999 -030809100200111112121304111114151500161614051500161614171804040614011800211199999199999099901990999999999909999990199901009939990999 -080804090300081004111200041002131200011014141200151617170600151517170500909299991990999909019999199991999399099119999190999999990909 -030809090400051011091200021011131400150611131400161611131404161601170400299999199090990999909919999199999999091099999109099309999909 -030808060400091011111200131011141400130204141400131515151500130501041600999992090091999999990990099919999199999909991999999390909909 -050108090400101112090900041304141400151313161600150206161600151717170300990990309090099991990900999999999190999909991999991999999929 -080605010400080910101004090911111100041213140200151516171800151503181800999999003099999009991999999009199909199009199900999999999299 -080309091004111213041000140213151000141416161004171818161900061818010500299001999991990991999991199999199909009909990990909930999999 -030504040400080910111200080413131200080213131200141415161600140115061600999992000099009999909999999909999119099991999119993999999099 -080306091004081105121200130214121200131314141500161616161700040118180400290009999091099991999991999999909919999199099990903090999999 -040801090400080809090500101111111100121302140400061516171700031516171700099099939999999909910999999009199091090910999199999999929999 -060108040900101112120900101312121400101303150400101616170500021604171700990990309991090999999909909999009999999920999990919099919999 -080801090900050810100900111210101300141206151300040404021300031616171300999999939990999990990900909090199999990991999909990919929199 -050809090400060210090100111213131400110304131400111515040400111616161600099099019990193991099919999999999290099990990999990990999999 -040501080800091010080800091112121204091314140200041514141600061703161600999990039990919999991990990909919999090099199999990999909299 -030804090900100804110600021213140100151616141400051616171704181818171700290999990991990919009990939109999191999990999999000999999999 -080806010900100811090904101212121204101314020500101514160300171717181904999999903999999090019999990901909091999091999999990912999910 -030808080400090210040600091110121200040510121200131410150100161617151500999092900999199991990919999999999991990091990093999999990099 -080809090900080402100300111212131404151515060500161617180100161618180400999999991299019909199999000091909999999910999913999999990909 -060408040900101008111100101012021100130412120300041414140100041515150500909090999099999999019990199099929099990991999993999909909909 -080909010500080909101100121213131400121204130400150206161600041717170300999999993090910999190991999999909909990190999099901999999929 -080409090300081009090600081102041200081313141200151613140400150117140500999299099999990990199991099919999099099999990190993099999009 -080801060400091010101000050211121304141415161700141515181804031919181800999990030099999909919991100910909999099990999999029099999999 -080808090900101010090904110212131404151616171400180619190100030519190400999999909999999099009911190199199990091991999093929999990909 -080801040600080809101100121213130500141513130400031502160400171717161600999999930099010990910999999099999099099919999900929199999999 -040809030400040809101000110609021000121314141400151516161700150116160500009999992099999909999999119001999099990919999190993990999999 -040805090600100811121204010813121400041516171400181816171400031802171400999090900990999099099931009991099009999999999999929199991999 -050808010600040808091004031102121200131313121404151516171400151518181400099999993090991091191929199990909999909999999009999909999909 -040108040900101112090900131313140200150314140600151616050400151717171700990990309990119909991999919099909929999999999999990900909999 -040508030900101011110900101011020900121213141500120416161600061717010400909990902999999999999999199909109901999919099099909030999999 -080109091004081109091004081212120600081305141500161718021904161618180300999909399990990091099999909919999999190101199119099992999999 -040808030400020809091000111209091000061213141000151516051000150117181804992990999091990919999919999999099000999199999099993009999090 -040104060800091010111100091012131300090214131300091516161704050316161700999090309091909999999990099999999119999919999199002999999909 -080909060400080909101100080402100300081213040500121214141400151501040400990999999099911999192990999991999919990990099199909300999999 -080901100600080911121300140915121300051602121304171819122004031919202004999099930990919999999900009099999911909199991909029909999990 -080903101100080210101104061213051104141516171100141518181900141518010400129999999991999091099909990910099099099900999190999930999999 -080901101104120910101100061313141500021305141600171704141800171703140400099000939999199901999999009990909199991999099099999990992999 -080802090300061011090900121011050400131011141400151511160400151501170400991999019299999909990999999099099000999999099009999309999909 -080909010400080810101100121310101100141415021100050415151100041617030600999999903099091999999900999099999991190999999999990020900999 -030808090600040808100500111202131400151213131400161217171400040118181404299099990999900909199999199099999919990999990090903909999990 -030808090500101111111104121314151500060214150100161614171804161619190400990092990999999019099919999919999091399190999190099900999999 -080404090300080804101000111102100400111112121300141512121600141501060500990299091999999909099991109999999999099199099199999300909999 -060108090904101112090900111113020400041413150300161713151500051718181800990900309990099999990999199919199919990999290999999099900999 -080809090500041009111100041213111100141413150400141413161600060102170300999999099090099990999999099009999910099999999999903112999199 -050108080800090909091004111213101004141402150400141617170600031617171800999990309999999019999911090991999900099919999199999990929909 -040809031000111109101000111109020400051212121300141516131300140404010600099299099999999999919990909990199999990919990019999030909999 -040809011000050811101000021213141400151604171400151603181800151606181804009999903999919909109911999199099190999999099299999999999090 -080910111100080604120100081314140400080514141500041616151500031717170200000999090999903999919990999909909999199999990999999091929919 -060808090400101010110100041213130400141413130500141502040300151516161600999090900999913999199900909999999909099910990999999192999999 -080808080600010909101100120909131300120414150200160314051700161614040400999099099993911999991909999999919901190999099290999990999099 -040801090400101010090900110412131300020512131300141515151500161603170600099099039999909910009999999199999999991099990999919909992909 -050809100300111109101000111102120400131414151500130416151500130417010600009299999999909999919999199901909091999999990909999030990999 -040508080400091008080300111102041200131314141200130114061200000000000000999090099990992909199991099190999999099390999999999999999999 -080809040300081009111104121013021104141015161600050106161604000000000000999999990299999009019909990090199911990309999999099999999999 -080809090300080209041004111111111000061213141000151516171000051801170400999299999999190001999999999919999010099019999990990390909999 -080106090904081011090904121213141500161202170500181819172004181819190300999909309991099019000999099099909911990999999091099992999999 -080808090400101111120100101111130400021405150600161414151704161603151800990099099991913999909999909109099909991999099999099990992909 -020809041000111109031000121204131000121205141400151616141400040116170600110991999999929919999990909999099909999199990909903999999009 -060808010400090910101100090204101100121313131100141515151100030516040400999990903099990999999910999119199999991990999999920090999099 -030809090900051011110600041211111304140215161700141415181804191915011800299999109990999991990900990919909190099999999119090939999999 -060808040400090808101104090212130100091414150500161714181800161703181800990990999099990091109909139919099999099090990999999299999999 -080609101000081102100300081104050400081204041300141212151500140104151500091999919999192999909990999919909009999990090909993999999099 -080801060400080809090900101010100400021112130500141412151500031404160400999999930099999990190999999991099119091990999999999909929009 -080805040900101010111100040612111300141412040200141412151500041601150300999090909099999900099999119999019999999999199099990399909929 -040108080400091008081100091012121200131014021500161006041500051717031500999990399090190999199999999099199990190909999990900999999929 -050804090900030808090900101104121300101114140400101514140100021606171700099999909999909929090999909999099999099099999193911009919999 -080809031004111209091304141414151600011718150200171718151904200618150500999209099190999009091999999990919319999999199911009990909999 -080804010400080809090900101010101100121202131400121515060500030416161600999999903099099999991999919999109911999900099999920099999999 -040809100400010809090500111213130600141413151500141404020400031616161600099099990993090991999901909099199999999991999909999910929999 -080109090600081011111204080411110500081302141400151617171400150417170300999999309091090099990990999999999111990990990999990992999999 -040804010900101005090900101111111100031202131300141414151504061617151500009999093999909990919999999999919911992199999909099099900999 -080109090300080809041000041112051300041112021400061115161600171717161600999999390299999991091901999999019091199999990099999099999099 -040401050600080808080900101011111200021314041200151617171200031616171200999990030099999919090999909199999190999109991099929999999999 -080808090400101111120100101111121200021314141500061617141500031804051504999099900999993999999919199199909199090199999909991099929900 -080809031000080811041000050212131000141415161600171718161604060118180400992999919999999990109991009019999990991909999099003999999909 -080902100300080804101000061112040500131414151600131414151600130104150400911999199299999991099999099010909990099999990999993090999999 -080808090900020603090900101004111100100404120500131314151500131301041500999991029999999919909990999999099990991090099109999309999999 -080808010900041011090904121211131400121211151600171702181604170306190500999999903990019090909999909999009999999910999199099909929009 -080910110300080910121300081414060200081414051504011617181504161619041500999299991999091999091999099999919099909090993111099099999099 -080804090300080810091100120413091100121415151600141415150200040117050600909999999299099999099990999990019919990999199991903090999099 -080809100300081109101000011213050200041415151504041616161600171717170600999299999990099990991931099991919099909009990999990999999909 -080309101000080409041100080209111100051212121200131415161700061515010400290999999999909990999911999991909999990001990990999930909999 -040809041000030409111000121209131300120602131300051414151600041414011600009999990999999920900991999991999901999999190901999939909999 -080808010400090410101100121210101300040206131300141414051500160304151500999990903090990999990991999910999999990190099999919099929999 -080801060000090910110000120902030000120413130000120413130000000000000000939999190999109999199909999901299999999999999099999999999999 -080803040000080909090000100206040000111111110000120113130000000000000000999999920999999901909999999010999999991909993999999999999999 -080809100000111104100000011102100000041206030000000000000000000000000000909999009999999939999991199900299099999999999999999999999999 -060809100400110809100200111109101200131314101500131301040300000000000000099099999999991990991999199901919909999930299999999999999999 -080802040000010809090000101010030000111212040000061212040000000000000000910999919999999931929999999009999990990999999909999999999999 -030801040000040209090000101009040000111111060000000000000000000000000000299999130990999991999991099990999990999999999999999999999999 -080304090600081011091204081013091400021516161400171718161400170504011400299999909099999099090909099190999199999199999110990039999999 -080109040000080909030000101011120000101002120000041306120000000000000000990999399990999991929991999991999991999099990099999999999999 -040408090900100808110400100212110600101313110100031313110400000000000000900990999999990999099911909991999991392999999990999999999999 -080910030000080910100000080602040000081111110000121301040000000000000000999999992999099999199909099991999999990190990399999999999999 -080901040000080910100000080910100000081111020000040312060000000000000000999999930999099999999909999999199991990910999299999999999999 -080106090900081011090900081011020300081211130400041212141500000000000000999999309990199999912999199909099999990990099990999999999999 -080801030000080209100000111109100000120609100000040409040000000000000000939999992991119909999999999099999909990990999099999999999999 -080603040500090909101000021112131404151116141400171718191904171701191900099990920099999919909999090190999990991009999109099399999999 -080809030000080410100000011102060000121212120000131313040000000000000000909999902999999990199990099391999999990990999999999999999999 -080808090900101002111100101006110300121212121300040104040400000000000000990990999999119999999999929910999999090300099999999999999999 -080801090000020810110000121206110000121204110000031313040000000000000000993999991991119919099999999999999990992090999999999999999999 -040508090300101011110600121311110200121414141404011516161600151517180400909290901999090999999909919909919999909991993199999099999009 -080809040500011011121200131014141200131514140600131617171704131802040300900999909093009999099909999919909999999199999999091192991099 -080801090400080409091000021111121300141111051300140415041300140315160600999999939099090909109919909199099999999909990909999999929009 -060108080400091008081104051213141104151513131600151517021600031818181600999090399990199009109990900909999999099991999919999199929999 -080601040900081011121300101011141500030511141500160217141500161604140400999099039099990909900990099999999999992019999199991099999909 -080903101000080206101000081104121300041111131300051415161600171717010400129999999991909991909999999990099099999910990019999030999999 -080905031004081106121000131414151004131415150200131617181904130120202000909909092999991900099909990999919909999099199111093099999999 -040809091000031112091004131314021000151616161600040517170100181817170600099999099999099029009991119999919099990991999093999999990909 -080804010400020809090900100411120600100411131300100311041300141411150500999991903099199910009999999999009099999999992909999990990099 -080504090400081010110600121010131304121415021300121615170300120115181800999099000999900909999999090909999111999991991999993912999999 -080801090500080810100600040410111204131302111400131315161700031515181800999099930999090999999990100099909911999999099900929909999999 -030809090400100809091104100802120400050813141400151516171400181818010600299999999090990099099991109999199991990919999919909030999999 -080910111100031210131304060210131304141510161600140517160100181818190400199992199099999091999901090909999099999019999913999009999909 -080909100400080304020600111213131400051513161400171716161400171704011400991099291999999909010909999909999001099099999999999039999999 -080901101000110909101200131305140400131304151604061717021600031818181600099990939999910909910999099999199990009991990999999019929999 -080901101000110909101200131305140400131304151604061717021600031818181600099990999999900909900999099999099990009990990999999019929999 -030808080900040210090904111212120500131414151500041414151500161601170600299999919999199001909999909019999099999999990909990309999909 -020808090500101106090904121314140100151314141600031317161600181818040400191991999090999010019999939199999999092909999999999090999099 -080809010400051009111200131411111204131516061200130217171200041817170300909999993090999990099999900901999910999199990199990999909929 -040803090900100808091100041213130200011213131400051516161700041516160600992990999190999909091999919999999319099099090099999990909999 -040809090600100809091100120813111100010814020500151514161704151504031700999090999999999909099909099999099391999191099191099999990929 -040809090600100809091100120813111100010814020500151514161704151504031700999090999999999909099909099999099990999191099191099999990929 -080901100600080910101104081212131404081215161400050417021400031817191400999999939090090099199999000991999991990091999999999919921199 -080901100600080910101104081212131404081215161400050417021400031817191400999999999090090099099999000990999990990090999999999919921199 -080804040300080809101000040909101000111213020600141414151500050116161600999999900299999990999999999009199909090901999999903119999999 -080809031004080809061100121314151604121717180200121918180500120120202004999209999199999909001900900999919099199099999190993099999990 -080803010909081011120909021311141415161616141715181804192015181805210406929999993999110911990919990909909999990990099909999900099099 -080809050310080811121210131313121210061415021610011718181920041718212104990999909299999909099999999011199991909199093990099999000099 -080909100500080204031100081204131300081214041300151516161600151506010400991999192099099991990999999990999990990109099199999030999999 -050809061000031111111000121314021000151617171004151617181800041604011800009999900999999929909911199999199009109999199999999939900999 -080801090900101010100400061111121300021111131300141404151600141703050400999999030999999999100909999999099199991900099999999900912999 -080910040300080904111100120913111100121214020500151614140400060117171700900999999299999909099991999911199991099199990999903090999999 -040808080800090910101004090911120300040213130100141414140600151516170500099999099999099099999991129919999099399119999990999099990009 -080304090900101011090900040211111200131414141500161616171700040506011700290991999999999991990999999019009999090991999909900039999999 -080808090600020403101000111212121000131414151500161414150400040105171700999091920990999919909999999190999199999999090909903009999999 -040808010900100808090900101111111100100405121300060314141304151617180200099999993999999999019909999909019990999999999299009911900019 -080804090900081010101000111102121304111415121600171403121800040105120600999999909099999900999991100999909991991929091999903990999099 -060809100400010809101000040809110500121209131400120215150400161616170300099999999093909999999900009919099999099999091099991999999129 -040805090300041011090900121111130200141515130400011515130600161617171700090299099999999900991999919009909091999999993999990090999999 -080809101000080909111104121314060400151502161604151517161600050118190300990999999999909000999900099099909910909919999999903199999129 -080809090400080809090100101011120400100611131300040511021300031414150400999099999999093990919990909909199999990999999091999910929199 -080801090400080809091000110612131400111512050200110412161600110412160300999999939099090999199990119999919000999999190999999999990929 -060808080300090210040400111212051300111214141400111515160400110115171700999290199991009919990919099999909909999190099999993909999999 -050809011000041109121004021309061400151509141400151516161600170318191904099999093990010099990911099199999999999999999099919099929090 -040808030900101011111200101011021300141415151500161616160100040506170400999290909199999999991990119091999999999991999993900909999009 -060108090400101111121200131311021404131315051600171704031600171818181600991090311990999999919990910999919900999009999992990999999999 -080910101004080911120300131415161704131818190200131818202000130105062004999909909999992900019909910990919991199990990999993099999900 -030808040500090808021004111213141504111216171500111218171900110106171900999992990091919099910999190991999019099999999000993099999999 -080803050400080809101100021212121300061415151300161415151300041404011300929999990099909919090919999991999009099999990999909039999999 -080809090900080802101104121213031100121213141104011516141400061718051904999999911999999090129999999999999999909019093109999090900900 -080904030500080804101100120210101100131314151100131316161600040117170600009999992099999909099901999910999990099999999099903090999999 -040808090900011010101000051112130400141111020600151516161700151516030400099999900993999990199909109999199099090991999990999990999299 -040804090900031010090900111010021200110513141200111515151600041701061600090999099992909999999909119999999900999990199991990309909999 -080803010900101111090900021213131400150413131600151517170400060517170400929991993999909919919911909999909999999090099099900999999909 -080803090600080204090400101011091200131313130100141405151500041617151500929099999991999991090999009910999999399990999909990999900099 -080808080400090909100100110212120400131414121500130316170600130405171700999099990999993991119919909190999999099990092909999099909999 -080903101004111204131004021214130600151515151600171718191900171701051900129901999999990019099999999100009999090910999999999309999999 -080808090300060205101000111213131400151516131404011517181404191919191404991299199999099901909919999199999900909999993000099099999990 -040808080800060910101104051210100100131415161600171718021600031818191904099999999090990090999990939099199000999999999011999909929990 -080801091000080811121000131411051000130411041000021516161700180616031704999099930999109919909990999909999990991999991190909999909290 -080910111100051210110100021313131300140615161600141404161600040317170400099990099999003999919919999199909900999909999999902900999999 -050801040600090910101104041213101100141502161100141717181800031717181800099999030099190001999991999991099009999910999999999999929999 -080809100600080811110400120211130400031413131504160517170100161818181800900099999999990911909999999219909919009991999993990909909999 -080901101004050909101000111212130600021212131300140415151600171803041600099900939999999999109919009199999999991090999990919909912999 -080109040400080810111100121212121100031302141504161306171700051818181800990999309099119999919999999991099919002909091999909909999999 -080804010500080809101000041109101000120213061400120415161400120315041400999999903099919990999901999919909190999009999900999999929909 -080901101100080912101104060913100400140902150300140416170500141818181800099999939999190099999900009999999019299011999910999999909999 -040408080800090909091000011111021000041212131000141515161700051515060300999990009999999999119939909999199990990901990991999902909999 -020808010900100808110900100404120900130604140900031516051700151516161700199991993999919990909999009199099990992099099090999999999909 -040805010400090210111100090410111100091212131400031212061500041616151500009999093091199990999999199999009990992990099999990999909999 -030809091000110809091004110802121000131414151504161414171500180605010400299099999999999099999991909091099099909990990919909030909999 -080809040300080810101104120610131300141414020500151515151600171701181904990999909299999009991999999000199991999199099999990300999900 -030808080800050909021004111112061300111414141400150416171700181818011704299999991999901009001990999999919999999991990909909039999990 -020808080400090910031100090912121104011312140400151617171700151506180500199091919999929999999999900919999300099009990999999009999909 -080809090900030810100400060211121200131313120400011404151500051617151500999992909999999991090991099091999999999199093999990099900099 -030808010900100808110900101002120900061314040904151515161604051718191900999992993999901999999991119900999099009909099999099090900999 -040808010900100608110900101204111300101414110500101502111600040304161600099999993999900990099999909909909099999119999910902099999999 -040506080800090909080100100211121200101311121200141411151600031404170400999990009999913919909919099919999999999190099999999900929099 -040804090900100811120100131406121200130515021600131515171700130304171700999990900990003990999900999999919901199999099999992999999099 -080404090500101111091200131111091404151502161600171718161600031718010600090990999099990909999909900990909901999919999199999930929999 -080910111104081210110100080413140200081313051500161703181804061919181800009909099999913990199999119999919990999099190929009999999099 -060808080300091011121304141402151500011416161604171718191904171720190500999990099290911009199999199999199319909099999099099099999009 -040108080400091008081100091213130400091213130300091205141500061202161600999990399090090991999990909999999999999999299991909019991199 -080409101000080811100100121314141404121302061504121316170500121818190300909999909999903909919991990999909019009919099919999019999929 -040809100400010811121300040814120200051414031500161617171500161606171500000099999993111999091909999999919099999092999991999999999099 -080910100400080910101100081206131404151212130100160217130400031818130500999999999090099999000999900999999191391999991190999199929909 -050809061000011109121000111109131404151609020400151717180300151717181904009999990993119999910999900009199999099091999999999992999910 -080105090400081011120400131313140600151616161600151717171704021818180300999099300999090901909999009919999199999999990999019999919929 -080809090300080806101000111202100400111314151604111717180500110117181904909999999299999990099999199901009119009999991999993990999000 -030604080400090904081000020911080500121111131300141414151500160401151500990992099099090999999919009199999999991909099909909399909999 -040801050400090909101000111213101000020614151500161614151700031614041700099999030099909991999910999190099099991999099999999909929999 -040108091000111112051000111313131300141415161600021706161604181818030400990090309999099999009999999190099999991909991999091990999299 -040809091000110209090500121313140400121315140100031515140600161604140400099099099091199919919999009999999990392999999990990099999909 -080104040900081010110900081010121300141414040500151502160300151517170600999999300990900999999999009919009999990919999992999119999909 -080403090900080810060904111111110200051212120100131415151500161616160400992999099999009099091999919991999999390090990999999909999909 -080808080600040910110100021212130500141213131500160417181804160317181800999099990990013999109919909199999999091909099099099999929999 -060108080800091011120500131314041500131616161504171718021504031918181500999990390090009991909991999991999999009091999919099999921999 -080804030900080810040900111010121300111104140200151515150400060105161600909299999999999909901909099990919999199091999999903000999999 -080803091000060811121004041313140200151313041600171717171600181801051600992999991990091099091999119099009099999919999999909309999999 -080803060900080810040900111102120900131313040900141415151600051715010400929099999999199999109999119909999999999900199091999930900999 -080806010900080810110904121010131400040415161400031515171400181818020500909999993999000099919909909009199999999991999909929919999109 -080805090904010810101000111212121304111415021600111715151800111904030600999909909093199999190909990909109991999099099999990920990999 -050308090600100411121304140215121304141416121300171616181800191901181800920090919999999000199911990999999999099190990909909399999999 -050808090900101108090900121313140100120215161704121818181704120306190400999990999990999990009999939990199190009191999999099909929009 -030809051000041112021000131404151004131606151000131616151700181801171700219999910990919990919909090999999099099909999910990399999999 -080803090904080810110600021213130500141215161700141215151800141201041904929909990999900919099999999190909999099990991190999390999900 -080509090300080210111200080413141400151616141400171717181804040106181800099999909291111999099990999199999199999190999909003099999999 -080903100500111212101300021212101400150616161604151717180100040417181800129091999999990919990909999199909999909009991913900999999999 -060801050909101111111109121213141504161217170218160317170418160404191918099999030090999909199999110999919099109999999299999990909090 -080803091010081112091010051313090214151617171717061804191901201818191904999999929990919990999099010099919009999991999999309099909090 -050808080104091010111112131010111114151617171819061617202002212121200304999990990300999009999999991090991999000999919099199099099929 -080804090410030811090410050212091310141415161310171718181319171718011306999902909999999991090909009919999911999991909990099939990990 -080910101111080910101111040905120603131414120415161616121718040104120219099999999999990999009999909009992990990999019910903099199911 -040809091003041109091010121212130602141415161616141415151717051801192004009929999990999990909199909990091991999999999099990300909900 -040808010910110808090904051212121213141516040413140602171704141818181703099909993900909909919999990901909090999919999919090999909992 -080809040106101109091212131313141212151514141605151503170218041919190420900999999300090909909999999999919909999999109991009219099990 -080809040106101109091212131313141212151514141605151503170218041919190420900999999900090909909999999999909909999999009990009009099990 -060804091010111111111010011212131414151602131414171718131919040520210319909090090999999990999939109999999001990919909999900199999129 -040108090910111108090912041108130414151616171705151616041806150219181803999900399909099909909099009919990090999999999909091999991192 -040108090909100808111213141515161718141515060418021919202018041919030518990990390991990019999099009999909990991099991919909920999999 -080109091010081112121010081111120604081314021504161314041718041314190503999099309999999999099009909919999911100990199999109999299009 -080808020906031011111104121213141505121216171801191616202121190420202121991109199192999099991999000990019909939990090999999999990999 -040808080804090909100100111212101304021212141500161617181900031606180500999900990999903999999919100199909999091990099909999090929999 -040808040000020808030000090909060000101111120000101001040000000000000000990990999991929919999999999199099990999090999399999999999999 -080801060400080809090904101112120500101102120400131114151600131117180300999999930099199001090999999999999919999910090990999199999129 -080909100300080211110600121211110400041213131300141516171700050104171700991299199991090919999999999999909909990109990909903099999999 -080309101000081109101000121209021300121214041500160617171804160417010500999999299999199909909999119999919900990909199091099930990999 -040108080300091008111100061002111104121013131400151005131404161718181800999990399290099999999909190991999019090999999099009999900999 -040401080900101011110500101011121204061313131400151503160200151717171800999090030099999999999990090991999099199099199929999911999919 -040108090500101108121300141515021304140616171304141818171700141818190300999090390991009919999919100900199999909909999999999919999929 -080808090300101105090600121102091304141515161704141515181804192001181800999290999999999909090901190919909990009999099999000399909999 -040809090200100309091100101205041300101214151300061215151300041616011300019199299199999999991999999990099090999999990091999039909999 -080909010400100909111200041306121200041302141500161317141500031717140500099990993099901909999999999990199991090919990099999990929999 -060808080800040910041100021203041100131414151100131414161700130501161700099999099999190901299919999199099990099999991909999399909909 -080808010400020609091000110409090400111213141500110316161500171716160500999991913099090919990909999990999190099209999999999990990999 -080906100300080911121300080502141300081515161300171717171804040104181800999299901990919999199990199999199999090901999990003099999999 -080109060400080809101100121309140500121509161604121517161604021817190300999999390099000991999919009909099999909999999999019999911129 -080109061004081109121000081309141000020409151000161605171700161803171704999009399999100999999911099199099099991990999099991999992990 -040809100400111112121204111113131300051414150100161602171700160318170600900090099999999099909999999909099990390991999199999199929109 -040808040600090210111200090413111400091515111400031516111400051616011400999990090091190999199999199900999999992999999900999939909999 -030808091000110212041300041414131300051414151500161616151500061717010400299099910090199901999999999999909991990909999999909030999999 -080903100500081110100400021112131404061112150100161612171804161612191800129099999999999919090919900099099911399990999099099909999909 -040808010904100808090900111112121300111114151604170205151800171903150600999900993990999990910991999990909990909199091099999990912999 -040108080900101008110500101004110400121313131300140604151500021616160300999090399099099999999990999919009199991990990909919999919929 -080909100500081110100300081104041200041102131400151616161600151504010600990099099999999999992909999990019911190199990999999930990999 -080910101100080902100300081213131300041414040400151414160500040116160600999199919299999990199909999901909090999999990990903099999909 -060308090900101011091204131314151200161602171204161819191200040119190500929990919999999009109999999091099910009999991099903990999999 -080802090400080410111200031314141400061315151500161617181804161605011800911999991099090929019990999999199099999991999009099039999999 -080803040904080204101100061213131300141515161700181515161700181801160500929009999091990991009999999019099999990999990900999390999999 -080801090400081010101000111104051200111113021400061515161600171715030400999099030999999990901990999999919991199919990919990920999999 -080909100400040909110100121212110500041314151500131304150200060316161600099090990999903999099999999990109009999909999991909991992999 -030808050400090910061104121302141500161616141400011717171700181818180400290999919099990090190909199099909999999091993999990999999909 -060308090904020808101100120510101304141516171700181819202004181801202000929900999091999919990990900190099199999109999109099399999999 -040809010600101112121200101113131400021113131400150316051400151504041400009999903091199999909999909199999999991900999999992099999909 -080801090900040810090904111112130400111114150200161705061800161703181800999990939999999090109990109999199990190900190999999999999299 -050104080804091011080800121211131300121214020600151616170300041618181800990900399990909991999990999999099911090091999999909912999999 -080901101000040909101000111111110400051213021400151216161400040617031400099990939999919999919999909001999991199999990099909099990929 -050809011000080811101000120613131400120215161400121717171704120318040400009999903999909999910999999909199011999199999999099100992999 -080809010400040809101100051212131400041212151500030602151500161616171700999999993090019999100909909999099099999019999999929109999999 -080305091004081111110200080612121300081415121600171717161604181819010400990009299099991999991990999999919000999900999999099030990999 -080609101004081112101000080212130100141412151500141612151504030405171700909909909999199991909919139199099999999999999099020009999999 -040808030900101111090900101111041200100513040200141414151600060401151500999290909999999999991999909990919999990000199919900391999999 -030809090900040808041000111102121000041113051000061413151000041413010400299999999099999909109999119999999009999990990001999930909999 -040801090900101011121300100214131300151515051600171718031604171706041600099999030999199999009919099919009999999199999129099099999909 -080809050600040809041000041109101000120209131400121515161400120304011400990990999099990990999901999919099199099919999910999039929999 -080501090400080610091100081213140400151616140300151616171700150402171700099099939999900990100900999991999099999999299999999199990199 -040808080800091010111200090902110300131304110600131314151600050115150400999990900999991999992991199190999999099999999090903090999999 -080304060900080410051100081213131100021213131100141415161100141515010400299099909090990999099999999199999909991909999110999930999999 -080403090900080406040900081011120200051013131400041013131400041001151500092999999999999990001900909990919099199999990999999309909999 -080808010600090910101004020911110400121213141400121215141404160317180500999999903099199019999999909190999900999909999999019099929009 -080306091000111212091000130205091000141415091000140415151600170404011600290991999999900919999919999910999919999090999990909039909999 -030809101000110809091004060802120400131313121400151616121700180501120400999992999991990099909901199999909999999909090910909399909909 -040105080400090910081100121302081100120314151500121614151500120414170600999990309099990919099911099991999999999299999199999909990009 -080801090900080810101000021104051200131111030400141415150400141406160400999999939099199919000919999099909992990909999990999909999009 -040809011000040809111000020809111000120804111300141516111300050316060400099999993999110909999919999190999999091999991909902990999099 -050106080300090910111104121202111100041213141500041617171500181817171500999290301999909091999999199091999910099099999999900999990999 -030808090900050810100900041112121200130206041400151515161600170401161600299999999990999991090909999919909109991990099909909399909999 -040501080800090909090800101111060200041112131400041515131400041515031400999990031999999999091909099090919990999099990999999999909929 -080801090900101010040900041111111200131402151500050416151500031616061700999999039999909909190999909999199001990019999999999990929909 -080809100500010802110400121213131304031414141400151515150400061616161700911099991993919999190990990991999299999909999999909900999909 -080808040400010909090900101010111100121213141104121506160500021717180300999999090093999991999999099919999900909990990090919999919129 -040108090900101008090500101008111200130608021400131516161404130416031400999990399999109999900999909099999901199990990999090999999929 -040809100500110812130300110214141404111516170400151516160100061818181800990090909999909990902991990919999090099999999193909099999999 -080910100600031102101204131314151504161614151500161617181904202020010500199992199099119099910990090999999999999991999000090930999999 -080809100400111111110200041213131400040513131500161717171500161601060300990099009999991999191900999999919909990919999999990302999999 -080809101005111209101004131209060300011209141500161617171804161920022104999900999999909009999900999999029399999190199099091991991110 -080909010400080909101100041212051300041414021300151416161300060316161300999999993090901909001999999999999099199901990999909999992999 -080909090400080810110400061202130400011214151500041614151500161614030500999099099999190991109909909991099390999099990999999990999299 -080609011000080811121000131314121004131305121504160317121500160418190200909999903999001999099990990999919990900999999299999191909119 -080903100600080911101004081211110200131313131404011516171804051920202000099099929999999099909909919909919999909099193111090099909999 -080909090904101111060400121111131304141516160200171818191900050118190300099900999099999909909909990099909019199199190999903999999929 -040801090500080810101100041213021100141413041100140313151100061616160400099099930999091990999909119999099909999999999290909900999999 -040108050900100808110900121314140900061315160904171702040300171718181800990990399999900901999901999091999990909010999999999192999999 -080809091000030802101000110412041304111415051300011617061300181818181300999992909999199999190909090991999090999019993199990909999909 -050108080400090908080400090904101000110604021200111314151500041313031500999090399999190999919990999099199999199009190099909999999929 -080808080900041011111100121003130200041014131304061516171800151501051800999099999099999909291909919099999901909919099009909309999999 -080306090900080810090904040211041200131411151500161617171700161618010500299999909999099091990999099019909019999919099999999030990999 -040802091000080811091004031111091004121212091300141516171800061519010500019999919999990029999999990991999991099991090909909030990999 -080309041000081109121000131309021000061304141004151516171800151516010500999999290999190909999999119999999090009099199001999930999999 -030809090000080802040000040410100000040610100000111111010000000000000000299999909999109900199999999999999909990913999999999999999999 -040808080900101003050200101011121304141414141304151516160100151516170600099199929199999999901990090999099999109991999993999909990909 -080402090300081010090900080511110600081211111304011414141400041516171700091999919299999999199909999999909099909019093999990999900099 -080402090300081010090900080511110600081211111304011414141400041516171700091999909299999999199909999999909099909019099999990999900099 -080808080900011011040904121311110600121414021500121414051600041717031800999099090993199099990900999999199990199999199909990991909929 -080801050900041011121200061013141200041003140200041015161600041515161600999090039099099999109909199999999099199929190919999999909999 -030808080900101111051200101111131400100415151404020615151600171819011604999092999099999999900999099999099099111999099999910139911990 -050803060400090808101004091102101000121314151600121717181600121701041600029999990099999099199901099919909910999910990999999309999999 -080909090300080810050600041102121200131313141500011616151500041616170400999299919999999990100909199909199999999901993919999999909009 -080309090400081009090400080211121300140611151500141616151500051716010400299099999991999991900991999909009991999999990909999930900999 -040108090900101008111200101308121200051308141504061316021700181818040300999990390999000991999999999099999999119991191119999002999999 -080803040900080210100900051112130900141112150900041112160400061701161600929999990991999901909999099999999090090990999190990399909999 -080804090300100811091204131302091400151516051400151717181400061717011404999990909299901009999991109919999919999910999919999939909990 -030808080400040906021000090911111000051212111000131314151600131301041700299999991090909999919999999909999999990901099010999390999909 -050808090400010808090900101010110400121202130400061414151500041414160300099099999993909999100999999919099919099910990999999999909129 -040809101004110809100100111213130500110213140400111516171700060318171700990900999990993990919990909999099919099190999199909199992999 -040808010500090808101000040411121000131311120600131304120200040314141400099999993090909909919999099909909909999999999901909991992999 -080808010900101011120904131314140904131314021500161717181900060317052004999999903999009090919999910999919999190991999910902990999900 -060808010900101010100900051112130200041414141400151503161700041516160400099999903999999990190909119999919099999999199921909990990999 -050809010600101009111200040409111200130209111200131303140400151515150400009999993099010909999999999909999119999990099299999909999909 -080309091000081112091004081306021000141505161000141517171800041517010400999999299999119099919900919909999990199991990090999930909999 -080808080500090909090100101004110400120204131300141515160600170315161600999099990999993991009999909919099109991090099999919999929999 -080909090904080810110100121212131304140215060500161717181800190317181804999909009999913999199999090910909190991909999909919999929990 -080401030900081011110900081211111300141404150200161617170500160417170600999299039999099990991909999900119999199090099999999999990909 -040408080900101008080300061111021200051113131200141515161200040415011200999190099299099999019909919999999999990990990901909939990999 -030809100400111104020600041112120400131314141400131315161600050115161600211099991999900999919990999091909919999999999099903999999099 -050308080800090410110200091210111100091310141400151510141600041701060400929990999199999990991999999909919099990999999010990300909999 -080809090400020410110100120413141400121516141400121506171700031505171700919091919990913919099909999990999900999900999999929999990999 -040808090300101104090900101202130400101414141500101617061500050117171500999990099299099990919911109999999099999999991009903999999909 -040808080804091010111200090913021200030614141200151616171200180416010500099909990999900999999991119299099999999099990901909930909999 -080910110500080909040400011212131300031212131300140215151500141617040600090099900999999990990939999999999990992919999199991090919099 -030508090904101108090900101206131404101215131600021217181800041219011800999912099999009999991999990990919990091999191919999139901999 -040308090900101008110500121208041300121202061300141516161300041701161300929990990999909990990999909991999919091999991190990399909999 -040809091000111109091000110412131000141502131304161617170600050117170300009999999999999999909909009090999119901919099999903999999929 -060804010500090808101000031102121300141115120400041115161600041115161600999990909090999999091991119299999190090990999999999999909999 -080808050300040909061000111109041004111112131000011413130200151516171800990999909299909909999999090990999999999009193099991991991119 -030802040500090910101100121210131300141415131300141415040400060115161700919992110099990999999999999901999990999999999109903990999009 -030608080900101108080900041202130400140413131500141616171700140105171700909992999991990991909901199909909999999991090919993999999099 -080803090500080810101100021210101104061314151604171718191604171818011600929099990999990919999911990991999009009910999019099939999999 -080909090903081010111212081313131212061415160217011819161620042119190504999999999029900999999909999999019011119109903999990999009909 -040808080803090902101104090912121213011414150516041714181816171719181806999920919999919099910990991991090399099099999999909099999090 -020808080104090404101011091213131404090313131414151617181919051717061919199991091319909199990019999929999999099909900909900909999999 -080809090904081006041104051012131414011015151403041015151616171717021616909909999090999099009909999990099399199999929199900919999919 -080808040903101004111213101014021313151617171717151618050419150120061919999920990199909999901999119091999099999910009199993099999099 -040809090909010804040210110812121313050412120306141415160417141415181717019999999193999199009100999099920909999900999990999909990909 -030809101111040512021111130404141515161616161717181819191717202020190106211999001999999909019099919009919999099990999999990093099999 -080804090410081111120510061111131410151516131410031502171401181920202020909099990990999909900999999990999990109991999119321990919999 -080802091006080811111103011213141414151513161604151718161605040418181904919009910999999291999930099909990990999909999099000990999990 -080808090110041111091210131311091410131304090215160317181819200405061819999990099399991999999990010999910990990999109219909009909999 -040408050910111208081303141215150216171206151816191920202001191921212121909910990129990909991999919099999099009001999999399099990999 -080909090410080311050610080412131310081415021616011718180416171718181904999099909999209999190990999991090001199991993999999990991900 -080109101111081212051111080413131404080215131616031715061616181915202004990099309991999999109909990999909109199190999999921999909090 -080909051006110309121314151502120414150404161614171717161614041818180104099000299099999099199990199909109990999999999999009003099999 -080801090600080810111200130214141504131616171804131617171904032020200500999099930999010999910911990990909990909999099999020990999999 -080909091000080311121000080402121200131313131400061516171704051804011700999999219999999999190999199009919999190991999009090039909999 -060808090300100811111104120502131304141516131304171818191900170118191900991290919999999009199909190099999001909910990999993999999999 -040308090600100808111100100412021300101412131300101512161700040112160500921990991099999999919909199999999910999199990900903990999999 -080806090900080810101100040310101100121212120200131415151600040115040500999999900999099999999992919099919999190190099999903990999099 -080808010500091011121304091014150400041002161600061718181600171718180300999999093090110099099999009099999911999009990999999992999999 -080909090900081010100100111102120400111113140400150413131600060317051600099999099999993991909991909991099999090999999090909109992999 -060803050400080809101100020412111100131314140400151514140100151516161600929990990099909919099909999190099999091999999193999909999999 -080409090300081010111100081202111100081314150600161714151504050114180400099999909299999999099911199999999909091099991909003999999009 -030408080500091008111100121002111100131415160100131715181804130615041800909092999991099999999901999091099909399091999919090909999999 -080509060300081011121200081013120200081013131400151016171404150418011404900999909299999999099999919999919009190919999919099039990990 -080805090400100811021200101314041200061515151200161617170300160117170400999099900999911990109909999901999999990109299999993999999909 -080809010600080810111100121204111104131302141500161317180500160418180300909999903099909990099999990999109901999919090999999199909929 -060809010500101011111204131414141400041515151600171718180200170318180400009999903099099099910909999099019999999099199991999990992999 -040308090400020808091000110512091000131415091000131416170600130401171700929090999991999919999990909190999199999900999100999399909999 -080405090900080610090400081110020400081210131300141210131300040115150300090999999999900990999900109999199999990999999199903092999999 -080910011104041212121100131314151500130602151504161616160500171718190300009900903999999990190999199999999991909019099999990199999129 -080304090600101111091204130211090100141415151500141416161700051804161700299991909099911119999911939990999999999909999090900999990999 -080909011000081109121004081314151000020514161004171718190600171703202004999999993991119090019999919109999990911990999190999209999990 -080801060900101011110904101011111200021314051200150416171200151503180400999990930999190099990999999199099119990019999909999209999909 -080808090900030602090400051010111100041010120400131414141400131501041600999992919999990990109909999999099090099919999999990390909909 -040809010500101112121200131111141400151502141400041616041700031616061700009999903090199909909999999091999999990910099999999999929099 -030808080900100411090904101202131400101516061400151517181400050417011400299999919999099099190909119900999909999990999091900939999999 -080809100600080809100300111112100400111102131404151617181900151505011904990099999999992909999999109991999910009199099119990039999990 -080409101004111202100300131205141400151216141400151217170400060118181800091900919999192909999900999999999900999999090099903099999999 -050603080900101008080900101002040900111104040900041112131400151501161400992990099999999999199991099919999999999900099109900309999909 -080801060904080810110900051010120904131415160904171415021800171403192000999909930999019999919999990009199009000991999991999991999219 -050808090300101106091204131415160200131717181804131717191800130120191904999290099990901090991990919990199091909999999999993099999090 -080901051000040911111000040911111000121313040200121314061500040403151500099090939999091999999909999990019999999909190909900999999299 -030808080800060409021000111213101000111113141400151515151600050104041700299999991999919900199990099999099909999919999990903090999909 -030408060900100808110900121314141500120216051500121616171500120401041500909992990991990991990999999910999199999990991900990309999999 -080304091000081106121300081114141404021515161600171815161600041818010500290099999099990999009999990109099199990099999919909930999999 -080809020400030909101100041212101100061212101100131313141100040515010400911092991999999999999909999999999090999991999900909030990999 -080809090300100509111100101202110600101314151500161616151500041704010400909299999999999990199991999919009919990919999919990030909999 -040108080900101108080900101004120400131302121200141414141500030616040500999090399999199990019999909999999901999919999990929000990999 -080309020600081011121200081314121204151617170500151617181804150401181800991099211999199999999900990990199999099999990009099399909999 -080901100400080911121304140915131300140215150500141617170300140417170600999099930990109099999919099999999199099109999192990999999909 -030809090900101111060400120413141504121616171700021616171700181818010500909992099999999919000990000990999999991999999919911930999999 -080906101004080211101200031314141504161617051500161818191500041818011500199909109999990921090999990910999919099919999910999939909999 -040801040900100808110900101212120900131313130900140215151604060515150300099099939999900999199909999991999999990199999191009992990999 -080809090600081010110200011012111300141516111304171805031300041919191904999999909090911999091939999900999099900909990992900999999990 -050801090900100811121204130814121200020615161704181819191700182003191704999990930991109019099999999100099999001909999999999999912990 -050801090600101111121300141115151500141616021704141616181704140304181700099099030990911909991999999999199991009990999999092099999999 -080809101000030809111000040209110400121212120400041314141400041505010600999992999999900991999999909010999999099919990099990030909999 -030806090900041010090900111012120400130214051500161616161500171704011500299999109999999909900909999910999109991990999990990039999999 -060809101004110803101004120813021400121213131400051516170100181818190400991900929999999009919990109999999909999991990003999009999909 -040608090300101108021200131108041204141115161200171118161600171818010500991290099999911909999999900099999000199999999909999930909999 -080309090900101102121204130614140400131314151600171818150100041818150500299991900991199099199999999909909999099019990913909999999909 -040808080800040209090100031009091100121314151100121616051700120604171700099999191990993991999999909210099199999900099999999099909999 -080809090300040210110500121010130400121414151500121414151500041604010600919299199999990901909999999919009999999999990919900930990999 -080109101000081111101000121113130200120404051400121516061400120404031400990999309990999999999901919900019999999999990009990099999929 -080309091004111209131004140213131000151515161000171717161800041905010600299911999999099010999919999919099999999199199911900930990999 -080309100600080809050400111109041200131302141500131316171704181801171700920099999999909990990999909901909991199999199019090399999999 -080401090600081009091100081212041100031212131400150205130400151504130400999099039990090999199999099999909999092199099099991999990909 -080806010900080810100900041110101200130214151200130514041600130414030400909999993999190991990909999919099019999990090999999990909299 -060808080400091002111200101013131300030514140100151516171704151504171700999990909090111999991999999299199909399900999099099099999999 -080808010900101011110900100411110900121202130900031415060400000000000000999999903999090999999990999991999900999910092199999999999999 -080809040300010809061000111112021300111104041300141414141300000000000000990999999293099991901991119990099999990999999999999999999999 -080406090900081011090900081012121200081313020300040113141500000000000000999999009999909999909991999919199099990391299991999999999999 -030804040900100802110900101012110900131314110100131306110400000000000000299999900999119999999990909990999900399909999990999999999999 -080909010500080909101000081111101200081104061300141414150200040316150400999999993090909990991999999990019999999099199991909990992199 -030808091000050408021100121213131404121215161600041717181800061701181800299099990099919900910999990991909999990019999909999399909999 -040803040900100808110900121314111500120214141500121617041500120601051500929990990999999901990999099919999199099900991199999399909909 -080109101004080811121300140605021300151504161604151718161600191919190300991909311999190909019909999099199999909909990099909992999999 -080808080300090910101000090605111204131415021204161616171800040119181800999299991999999999919999990000199099000901999999903119999199 -050809101000110809021004111109040300121209131400151617171800040117170600999990991999919090902999999909999990099019090199903990999999 -060809091000011109091000121204130500121204141404151516171400021818180300099099099993099991909999009999099999901900999909919999919929 -040809091000050803040200110806121200040813121200141515161600141515011600099199929199990909991909999990999909990901999909999939909999 -080109101104081212120500081313140300081313141404151602171700151819061704990009309090999991999999999999929999900191999119990999990090 -040804091000080802101000110312120400040612120500131313140100151515161600090099999999199919109929909999999909090901999993999009999999 -080808010500060209101000111109101000111213131400031513161400041704041400999990113099919991999999999999009909992099999909990009909999 -080808090900100404090900111212021300111114051500011606041500171717170300990990999990909909999999119991919910999199993090990992999999 -080109100500081109091200131313041400151515161600020403161604171717170600999099390999090901990999909199999990991099999999019290999999 -080309090900080804100600111212131300111402131300111516171704051804011700999999290999900991909999999919999911999999190009090039909999 -030808080800090910020600111213130500111113131404041515161400041501171400299999991999910990199990999909909999900919999909999309909909 -040809090900040804101000050811110100121311111400040215161600031515160600099999990990999999009900939999999019090199099199999990929999 -030804040400080809101000021106101000121113131400151113131400151505011400299999900099909919999999099199909199999999999190990039999999 -040808010600090808101000111111101200131303051400131315041404161616160200999990993090909999099999919099019999999929999909099191999919 -080905010300080810101100121313061100041415021100161604171700161604171700909999093299099999109909999091999901199090999099999999999099 -080910111100061210130100121210141400150216141400150517171804040317170400000990999999113999909999999919999019999019099999009990992999 -080903061004080211121004131314141000131314141500161717181900200517011904129909990991009091999999999999909919099991990900909939909990 -080109090900081011121304081414150500080414151600021703151600061717150400999999309991000090990999099999999099091999991999909299999909 -080404090900080804101000051103101000121304061400121315150200121301151600990999099099099990999999299009919909099999190099999391999919 -080109090900081011110200080611111200080405041200131415161600040415160300999999319190199999991909999990099099990999190099900992999999 -080509011000080809091000040411121000131313131400040406021400031515151500909999993999099900109999909991909999990091999999999019929999 -080809101105121213131404121213131400151616160300151718021904150106202104900000999099999099999990999909999099999191299909093011999910 -080909090900081010040400111212120200131306141500131316041500050104031500999999909099999900909909919919019999999900999099903099999929 -080305040900080810100900110210100904121313141500061313161500171801191904299099909999999991999919900190999190099990999999900309909990 -060108050300091011121200131014121204151014021604151017171600150417171600990990309299099909999901990099919991109909999999999999909999 -080909090600101112131304011212131304141516160500141717031804141702192000099990999090999190999939190919999099999109099992099191999119 -060801090400101009091100101012131300021405151304161617181804031917181800099999039099199999190999199919099190911990999909091999929999 -080910100200080311041200081111131200081415131200161717171700040604010500919199299199999999909999099999999009190901999999900030999999 -080404010400080910101000080909111100121313051100041414021500031414040600099999903090999999019999999909999099090999199911999900929999 -080104091000081111101000081212130400141212021500140616171700140504031700990999390999999991909909009099999991199909190999999029909999 -050809041000010811121000060812120400131314021500131616171500041616031500090999909993090999999901909901999991199099999991999929909999 -080501091000081112131404081212131400021504131400161606130400161603171700999099030091109099999999999199999190999199099909999909992999 -080801090904100811121304101414121500101414121600061718021900031818050400999909930990010099090999999999909999999091090919999990929099 -080805090904101112090900111113140600151617180200151619202004150103202004999900909999999909009990999909009091199919199199093999999290 -080804010400080209101000061112101000131314151600031314171604181814051600999999003099199901199999199919099990092999999909099909990999 -040108080900101108080900121213130904121205130900140215150400161606170300999990399991990919099990990999999909991999991190990919990929 -030804050900041010090900111102041200111113131400041515161600061515011600209999190999999909190999999991009909199999190909999939909999 -080808090900101104090900061111120300130214151500161714181804040501181800999990999990909999909999129019999199991990991109000399999999 -040108080800090910110500091212020600131212141400151515161400041704160300999990390999000999999919109099199999990991999999900999990929 -040805090900100803110600100811110400100812131400100212120100151515160400090999990999290999999999999999009999099190990993991919999109 -080801090500080809091000111213061400111502141404111504161700111503041700999099939999190901900991999991999919909990099099999909992999 -080809090900060810100300110210051200131415151500161717181800040104181804999999909999992900999901909910909199991999991909903999999090 -080409090904021010100300111212130400111212141400151617181400050601181800099910919991992919999999909999099090991990991199900399999999 -080609010400080809101000111109101000120209131404151516171800040305181800999999093099999909999991199919919199011990099909902099999999 -080809090300040209090400101011111100101212121200131415161700060104051700909299999999190901999999999990999999991090991900903009999999 -080309101000080809101004110409121200131302140500041315160100061718181800929999999999999009909990999091099910090999999113990099909999 -080901100400020909101004111112120400111112121300141515150500030616171700199991939099919119099999909999999999091909099999929099990099 -040808010900100808110900051213141500030602141504161617140400161618181800999990993990901990991909119991999909912919999190999909999999 -080909100300081109121300081102051300041114141304041115161600171801160600999299991999919999199901999999099009009999099199900390909999 -080808030904021004110904121212111100131415161700011819190500181819190600992901099999090019999999999199909190099109993090999999999909 -080910111100080910040300080910121200040913131200011413021500041605170600990999999999909999992900999999999009999991193191990009909909 -040308040900101108120900051113020900041114060900151514161600151504011600920990999990919999919909199991999000999999099019999039999999 -030808080900101104020500061112121300041112121300141115161600140401160400299099991090999909019999999999999099099919990009990390999999 -040406080900101111080900101111081200100213141500100301141400000000000000990990099999999999990999999911009190099939992999999999999999 -040508090300100208090900111206130400111415131600111717131604111701131600999290099990119991999999999910909919999919999900099399909999 -050401080904101111080900121111130900141515160900141717021800141703060400999900039990900999999909199090199999999991099919999900992999 -050808080400060910110100121204131400120215151600171718181604171718031600099099090990903999019999909999109019999199999199099999999299 -080809011000080809091000040411121000131414021000131414061500130416030500909999993999991909099990919999199991999999090909990190999299 -080809100400080811111204021313110500141313151604141718191600140301190600990099909999990090090919999199999990009919991909992399999909 -080809011000111111121004021314151000041305161000031317180400061317181800909999903999910019099919909990099099999990092909999999909999 -050604010400080808080900041011121200130211141200151511141600150311141600999990003099990999919901199919999190991999099999992999999999 -040803090900100811091200130811040200130811141400051515151500041601061700992990999999991909901999999999919009990099199999990390909909 -040809010400101112121300101104121300100204141300151516160600150316160500009999903090199999999999099919099990099190999990999999929909 -030408080900101010060900111102120900110512120900131415151600040115150400999992009999999999109991999999999999991009091090903999999909 -080805091004080803110200041206131400151515131304161617181800161617011800909109991199929900991999099909919990909991999909999939990999 -040804010400090910111100090910121200060210121300031414150500161414171700099999003099119999999999099019909999999190099999929909919999 -080105020900081010110900081010120900081313040300041314040600151516161600999199301990999999919999199990029999990909999909999090990999 -080909090904081005110300080212111300141406110400141516161700040118171700999909099999099990992991119019999999099909991099903099999099 -080109100600081112121200081304140500151302161604171818191900031818191904990099309991099999999999909190099110909919991909929999999990 -040108090500101010111100121212111100131314150400161602171704060318171700990090309999999991999999099901099999090919999919009999992199 -060401050400080808080900101111021200101113130400101413151500041403151500999990030099991909091999919999199999999990099099909299999999 -080109100400080909101100121213130500121213130400030602141500161616170400999999399090990991909991909999999999999010099990929109999909 -080804090900080810110300121210021300041214041500161616160500060117171700909999991299099999919991109999909000999199099999903099999999 -080904011000020911111000120911111000120905131400151616131704031604130600199991903999191919999999999990919999091099199999129990990999 -080808060900100211110900031211110900121213130904041415161700181805010400999991190999999921999991999999199999909991090000990030999999 -050108080800091010110300121314020400151515161600171718161604170418180600999990391291999919919911109990999999999909999009090990999999 -040308091000111208091004130214151000161714181804161914181800160614010500990990299991999119909919999919019999909199990119990930999999 -080809090300081009061100040512041304141412151600171712150200171701151800999999099299009909091990090999919999999099199019999391999919 -050809101000041109101000121209130200011409151604171819191604170619031600090999099990999990999999919909119311919199991099099999990929 -050808010904060808090904101112130400141415151500141616161700031818190200099909993999909009910900099909199999999999199990999991929119 -040108090600101008091104121013091100141415021100141416171700041805031700999990399099110099099909999090199999999901999999990099909929 -080904031000080502111200131313060400141515151500141616041700140116171700009299999199011909199999999991009099999190099999993999999999 -030405040800090910020800091111120800041313120800141313041500141401061600999092009999119999919999999990999091099999099990990390999909 -080405090300081011090900080412060200041313131300141415161600140117171700999299009990099999091999909900919099999199999099993009999999 -050809101104121314141104151614140100151602171704151618181900061618180300900900090990990099999901939999999910909919999991909992999999 -080901101000080911101004080912130600020914151505161617181804192003181804999999939999999099109991009090999199901900999909019999912990 -080910111104080910110100080910120400021310141500161606171804031619190500009909999999913999909999909999099119091990099909099900929999 -080409101004080511101000081212021300141515041300161718181300060118180300909909909999909990099909119991099099990199999099903992999999 -080809030600020810051100120413141500121616171704121616181804120119191900912999999091909919090909009990999990909999991909093099999999 -040809090900011010101000111112120400131412151500050406021500031616160400099999009993999991990991999909199099990091999999999010929999 -080809100600111111121204130314121204131315150200011617181904202020200500990099009999999099099992190999919909999909193111090999999909 -080104090600080810111200131414110400151605110300151616171700150402171700999099300999000901990999999010999999999999299999999199909199 -080306090400080410110500080210121200131310141200131310140100151516170400290099990990990999909911999999099999999999999913990909990009 -080309041000080809061100040209121200131409121200041515151500161616010500299099999099990991990991999099999091990091999999990930999999 -040104080900101010100500111112020600111112130300140412131300141404151500999090300099999991999999109999199919990099299999999990990999 -040108080800091011020400121205131404121215151400161703151400161818061400999990311990190909919990900999199999999029990999990999999909 -030408080400090908101100040905121100130206141100131515151500130401161600909092990999990999999999099019099199099909091999990390999999 -080401040400080909090900101002061100121013141100121515161100120515031100999999030091999919900991999091999991999901999999999929990999 -040604080800091010080804091110021200091113141500161117051800160117170300990990099999999099909991119990919090999990190099993992999999 -040804090300100811091200131311091200131311061200011411150200051616170400999990909299099909999999099999999900999099193991991910909199 -080309101000080909061100080212131404041212051400151616171400041616011400299999999099999999000919900919999099999910990910909939999999 -080904100600030902111204130914151200130516161604171718191900171701191900109092990999199099109999199999109909900919099099999399999999 -030809060500100804111200100804121200100213141400151617170100151517170400900992999099909999909999999900099190999190999193999999990909 -080808010500090410101100091212101300041212141300031502141300161706041300999999903099990990990909199099099999999919999199921009919999 -060809090300100809021100100812131104141415161104141417171800041917010500099299999999919999919900910990999900109991999990990930909999 -040808010900020808090900100411121300100506041300141515151500030416161600999990993991999910110999199999099999991009099999920990999999 -060108040500091008111200131014110200151014111604171714161600171714030400990990399090110999999900919099919999900999999999999920999999 -040808090500100808110100101213141400101502141400100616171704031616041700099099990999913999199901099919999919999010999999099909929999 -060809091004110809101000120813141504160802141500171819141500030519011504999900999999909909909909190991999119091909999099920939999990 -040809101000011109050400121109131400151109160600151717181804021703181800090999099993009999990919009199099999099990999999019299919999 -040809011000111112101000111313131400041502041400161606051400161603171700009999903999099990991999919991099019999109999990999990992999 -050108080800090910110400090912131400060412121400151502041400150316161400999990309999000999909991909009999999999910999199999099929999 -080808010600090910111204090911111300141415021600171818041604190518031600999999903099000099999999919099919991199910991999119999909299 -080909010400080909101100121202041100121213131104061413150300161417180500999999993099910901999991999991099999909999999012909099909009 -020808080300090910100500040910101104121213041100121214151100060116171700199291999999990999999999990010999999999900999009903090999099 -080809101100030802101100120513101404151613101400170618181400190418011404919999919992910999099909990099999009990991990990909939909990 -080809011000080411121004131313041000060502141500161717151500031717181800909999903999091099099999909990919901190919990999999990929999 -080806010900100811110900101011110500121212121304141414150200040316171804999999903999090999999990909999199999109990199909909991992110 -040808090400101006090100101011090400021111091200131414151200041603051200090099999999903999999990109999999199091990991999990209909999 -080901101100120910101100131414151104161414051104160217060400181818180300099990939999099909199999000099999990909199099009991999999929 -080808080904031006110900121213051400021515161404171715181400170419011400999909990992900991990990099199999191000991999999999039990999 -080304040900081011121300080212121300040614141300151514141300151504010500299099909099099990999911999901999999990999999090999030999999 -080806030900101011050900101012020900041313141500161613171500041604011500999299009999909999099999019909199099199999999001909039999999 -080809100300080809111104121309110200141509061604141718191600140104190500999299991999999190999919919199019109909199999111993090999999 -080809090900011011120400131406121200130404021500131616151500041616030500909999099093119990099909999909199990199999990999909920999999 -030809091000111111021004061205131400151515160400171718191900171701191904299099199999919090010909909999199999999901099019999399999990 -080809011004080809111000121209131000121202141004061515040500031615171800999909993999001999999990919999199991909919990909999990921009 -040809101000111111120400060404131300141402131300141415161600030515011600000999900999990909909999099909999991999919199199929939990999 -060804010500091011111200131311111200141304151200140216151200140416170300909990093099990900999991999990999099099199999199990999999129 -040401080800091011110800091011110300091012131400061012020400000000000000999990030990099999999999999991929999199991990910999999999999 -060808080800090402031000091112101000011312141400041512141400000000000000999990912999999990199909999909099319999099990909999999999999 -080801091000080809091000111111121000130204121000061415030400000000000000999999939999099999109999909010999999990199099129999999999999 -080808010400050409101100120909101000121302041400121315160600121317170300999990903099090999999909199919909919099919999900999199999929 -050108060900100808090900111213130200111404151504111616151500111616031704990990399990919900991990999909919909909099999999999991999920 -060804090300101005111100121302111100121314151504121316170100121616180400090999090299909990999991199999999919909910999913999909909909 -040108080800090910100400090910110300120213110600141516171704051515171700999990309999090999999999929199999111990909090909009999999999 -030804091004110806121200130814121200050214150100161717151800041717151800990012999199999919099919199919199019399999990999909999999009 -080904040300080210101000110506121200111313120400111314151500110104151500909999090291199919999909999990999990999909091909993099999999 -080804090900080210090904031010111200131306140100131315161704181818160500909999199999999021990999109999199990399990999000099090999999 -050408080600091008111100121213141400121202151604171818191604031818011600999990099099099909009999099999099911101999999901129939999999 -080804030900080810110900121305111404121515110200011515160400171717170600999299909999909909991900990999919091199999993900999099999909 -040808010500090808101100061210101100021204131100141414151100161703150400999990993090900999999991999099999190091990999999919990912999 -080804030900080810100900111204040900131212140200151515161600050106161600909299999999099909999999909090919991190199999909903099999999 -080904010400080910101000111104121200111105121200030602131400151515041600999999903099099900919999099999999999999901099019929190999909 -080903101104080912130500020914040600151516161600171718191900171701191904929009990099909909099919999190009909999190999199999399999990 -080809010600040809091000040211121000131415161000131404161000131403050400999999993090991990999991119019999090099909999999999900992999 -080803090900101111120900101111120200101313131304141516170500040401180600992999099999999999991999909990919099900919999000900309999909 -080109101104081213130400081413130600081405151500161402170300161418181804990009309090099991999999909990099999990999999119999912999990 -050308080800091010110200121010111300141414141504040616171700041818011700929990999199999909991999999090019999100991999009999039909999 -040108090600101010111204131314021200051515161200171715181200171704180300991090311999990009019999999990199999990991999099999099999929 -050808010904100808090900111112121200041314141500161718180200040318180600999900993999999900991999999909019009999099190991909999992909 -080809090900030402100600041111121200131111141200131515151500051601170400919992919999990990109999999099999999099190990999990309909909 -080903040400080210101000110604120400111313141400111313141400151516010500129999990091199999919999999900109099999999999909999030990999 -080501040400080809101100121314151100121302161700121318181704061318180300999999030099010999019900999999199991099919999999099999909929 -080801091000080809090400111112121300051114151300160217061304161803041300999099939099099999199990909991999090999910991199099999912909 -080901100400080909101100081212100500131312140200131304031500041606171500099999939099900999199999909909999991199909199999990929900919 -080809101000080809110400051209110600011309110300141313110400151502161704990999999999990900999999909909999309299999991999919910991100 -080109090300081009091100121202131100120414141404151516171804151505061900999299399991999919199991009990999909900909999900099090999909 -060801090900101111090904101111120300100513041400101313151400041617021400099999039999999099909909099991029099999999999919999919900019 -080808090400011011111200131311121200131302141500041617141804061603140500999099090993099991909999999999099919099919090199099990902999 -080601090900081011090900121314021504121414161500121718181504041905180300999999039990199991909901110999099999999090999999090992900999 -060809090400101010090100110412131300110214151300111616151700051616030400009099999999913909109999999901999910999199099999999990909299 -080109100400081109101000081212130500140212150600161717171704180319191904990099399999099991999909009999999110091919999999119099929990 -080808080500030910101000110412120400131415121600171415150600021401181804999999990099099920099999999199909919091990099999919309919990 -080809090500080810091100121310141104121310021104151316170300061301181904999099999999009999999999900999099911900991990199999312909910 -080904101104080912121300060903141404150916141400171816190200050116191900990009999090999999900999290099999909990999190199903991999199 -080109101004081111111004081204130500081415131600021715151800191919030600990909309990999091999990999919909900099199991990919990999299 -080309090900081011061200080213121200141415150100041415150500041617181804299999909999109991199919999991099909390999999999999900900090 -030408080904100408080900111212130900141212151500021617171500181601050600909912999999091919919999999199199999991091999199919300919999 -080801090500081011121304141414121304151617060200181819202004181803202000999099930990011099099999990990919000990999199919099299999999 -080809031004040809061000110212131000051414151000161616171700040118171700992909999999999900109901999919099999990910099999903099999099 -040809030400101112131304140212131500161605151500161617171700060118181800912990199090999191999911199199999909999990999099903909999999 -080809090500080803101100041212021304141206131304151617181800151901181800999999921099999990910999190099999009909190999109990399909999 -080809101000010811110600021211110400131314141400131315040500040315150400990999909993190999999911999190909999999909099909902999999909 -030808040900040508020900101011110600041011111200011314141200041514141200299999990999010909919999909999999099099019993199999999900999 -080809090300100509110400100402120600101314121200151515161600040117161600999290999999090999109909199999909011999199999999903099999099 -060808090300100808091104101212091300141212021500161717051800190401181804099999999299999090991909099999919091190190099999909399909990 -080509090900080810111204021314121204151616161600171818181900170301060400999999090999009099099919991110199999991919099999999300929999 -080910100300080910110500081202040400131314151600131317171600060117171604999299999990900990199991999919009990999909999099903999999900 -050804090900101112020900101312120300101414141404151617171700150118060400099999001999999990912999999901999099919919991199993090999099 -080910100400021110100100120413141500161613141500170518141504030618181500119091999999093910019999999199999999191999999009129999990999 -080109090500081009111200081006130200081014141504041614141700041818031700999099399990111999991990919999109999900099099999990929909999 -080509031004080909111204080613021400081516161604171819192000170119192000099209999199909199901919119991999199909119990199993999999909 -040809090900011010060400111010121300111114140500021515151500161616030400009999099993909999990999009919909909999199991999919990999299 -080809090600080310041104021213141104151515161100171718191100171701190500909099999999299009109911990199099999999010999900999390999999 -080306091000080511120400080213141504161717181504161718181500191919011500290099990099099999009919990910099991909999990990999039999999 -040808010900060808100904111112130900141112151500140212041500051617180300099999993999999000019999109999099999999990990199991999901129 -040804090300101111111100101202041300061214141300151214141300161717010500099299001999999999199901099999999999990999999190909030909999 -080809031000080509091000110212121000111304140600111516141700110401140400992999999999999900199991909919999190099999991100990390999999 -080808080900011010050900111112131400110412021500161712061500040412031500999999099993999990100999109999199909199999990090900999999929 -080801090904101011090900101005120200061314121504041603151500171717181900999900939999019999091999919999909001909929990999990990999009 -080803090600100211121304101415151604101415151704181419200500181801202000992999091099119091990999990999909099009909099109990399999999 -050408010900101112130904140615131600141515131604141718131600031702191600909990903990000009999909009999999999909999999199999119929199 -080109090400081009110600080412130400141512160200141512031700051512171700999099399990100999199909109099199099199999199999999929909999 -080802090400101111121204030511131200141516171700141518171700141504010600919091900999919129999990199990199999999909999099999030909999 -040808080300090210041100061210101300140515151600141715151600041717011600999290199990190999990900999999109909999999990090909939999999 -040108080500090908081004090911120200131411151504161411150300161417180600999990399099190099019999919099919909900999999992999999990009 -080910050400031102121200131414121204131515161700131515161600130601181804190992109099199999199999990991909999999999090909990390999990 -040808090300101109090400101102120500101112121300141415160600141401170400999290099999990999199999999991909919090199099109999309999909 -050103080904101010110904121302141500121616171700121618181700041918180600992900391999999091910909199911009999999909999999990990909999 -080501040400080909090900081011120400130214121200131314041500040314061500999999030099999999019900999999909111999990099999902999999099 -040808090500101011121200011013131200040402141400151616141400031616060400990090900999099999999931999999199901990919991999929990999099 -040106050800091011110800121314020800121516171704121518171700121518040300999090309991990919099911199990199909909909999999999902999999 -080801040900081010101000040611111100121313130200140504031500141616161600999099939090999909919990999990919099990099199999999021999999 -040801090900040810100600111110100500021112130400141512161600031712161600099999930999990900999991909990099199091999991909991999929999 -040401080800091010080800111010121304141506051300160217171300161818180300999990039990909999909909900019099999990109999990991999999929 -060809090400101009090100111112130400111114150200161614171704160514170300009099099999993999109990909991999991199999199099099999990929 -030808040900100208060900101111111100100412130100101415150400141405160400299099999999199991900909999991999901399990999090999909999009 -080405091000111213131000011213140600151202141604151717141800031717140400090090990990999999990931199999999091009919099999999990929999 -080809011004040309091000111213131000140213131000151515161700050618191704909909993999990902919919999199999119990990099999909909990090 -040108090600101108091200131108090200131408091504131416171700051404031700999090399999111909991909999999919099909909199999909099999929 -080501040900081010090900041010111100121302111400150306161400041717171700099999930990909909999999199999909111991900992999999909909999 -040809091000011109090600041212131300141412131304151402161700181805031700099099099093199999199909099909999999900919999911909099999929 -040108090900100808090900110406051200131313131200141515030400021616161700999990399991909910909999999190999999091999999929911990919909 -040808010400040908101000110912041000110906021300110514151300110316151300099999993090909999009900999990919999199091999919999199992999 -080809030600021010111204131010140400151616141704181616141700181801190500912991999099990019900919999091999999900999999900999309999909 -020808080300091010101004110412040500131212141400151617171800060117171800199291999990999019909909999199909199999190990099903999999909 -080309090900080406100200081112121300011112120500041415161600171815161604929999999199909990901909919999909319999909999009900999909990 -080809090900011010110400121310141400121315061404121302161700121305031804909999099993900990999909099991999999909910999911999091999920 -060108080800090909090400101011121204131415040200161705181800161603181800999990309999990909919990990900919090990099199099999999999299 -080904060400081004111200081311111400081302151400051316150100031316150400909999090099090990999900999999999919099919990993999999929109 -080109101000081109061004081213140500151216171704151202170300151218192004990999399999099091909901009091999999909919999909999192999110 -080109101000080809111100121309141100121509050400120602040300161616161704990999399999199900909999099909009999999019999999999102999910 -080309091004081102101000081205131304081415130100161717181900161717040600929909991999119991999909990910999911399090990990999990999099 -080809090300100209110600100404121200101313140400101313151600050115150400999299099991190999909999999900099990999999091990903099999909 -080109040500081010101100081213111100080214141400041516170300151506170400990999309091999990999990099999999109990199999112999099999909 -040408080600091005080100091011121300091415041300141416021300031717171300909090999999903999919900109991099099999919999919999919929999 -080801090900080810090900111111121200060413141200051502161700041504031700999999939999019999919999099099199901999919990011999999900929 -050108080900101008081100101212121100061302041100141315031100160415150400999090399099099999999919999019099919999919990999909929909909 -040608010900101011110900121011110900120204130900121415151600041717030500909990903999190999999909999910099999999190999990901990999299 -080909030600021011111100041004120400131314141400131315150500040115150400192991999091999999900999099019099909999909099999903999999909 -050308091004111108091000111208021000061314151600171718191904171720011904929900999999999999909909109909199000199999199909099039990990 -080401060900081011110900081012130900041402130900151504130400031504130500999099039990090999919999199091999919999109999990999999929009 -080808091000011112021004111113141000151605171004151806190300151818202004991999191993091099099999099919099909919190291099999909999990 -080503090600081004091100081213090200141413131500141416171704181801170400992999099099991990091990999099919999999990199019090399999909 -080909090900080804100400041112100500131414141400151516020600040116160300999999009999990990999990009009999099999191099919903999999929 -080803040900080810051100020610101200131314141500041616161600171717010400929099999099999919900990999190909919999919090999999030999999 -020809011000111212131000110514151004110314161004171714181900170414061900119991913999919999099990000999999299009990099099990909999999 -080806030400080809101100040212101100131414041100130414151100131616010500999999902099999900099991199919999990999999990910999030909999 -030809041004111209101004021314151600171714181600171714181600051901061600299909190991999019009919999919099990099999999199990399909909 -080801090900080810091100121310141404121510141400120405060200120316171804999999939999090999990900190999999909999090199999999091992110 -080509031000080909061104081213021400081516171400181816191404180116191404099299999199999099001991119919099099999190999099093999999990 -050108080800090909101000111213101004111415061604110217180400111919180300999990309999909919099990990909909900909999091119999999909929 -060808090900011010021100121010131404151617171804041617170300051619191900090999099993991999911909190009919999900999299099999099909999 -080903101004110212101000131312141404051312141404150616161700181920011700129911999991999991919991990999999991900991999990900039900999 -080809090300100409090600101102121304101415121604171718191900170501191900909299999990999999190991990919909919900910099009990399999999 -080808090900100311110900021212040400131212141500161717171704050118180600990991209999999919999919999999009099990910099999003099999909 -080809101004080809110300061213141504051617181500011918181504202020200200999909990999099990902909091900999109999199993999091091999919 -080808080500060909090200011004041100041213041400151513031400151516161400999990099099991991991930909909919009099999999992999999990909 -050809101004111112101000061312140100150216141700181616141700190304141704009909909999009999999909039909999191091199999999919999929090 -080809011000080811121000131313141000020515151000161706181804031704181804909999903999900999919999199199999099091909091999099999929090 -060809090900100204031100120413131100141515161100171515161100170104160500919990192991099919999999999100999190090999999999993099999909 -080609031000110409041000120409021000121313141500121313161600120501161600099290999999009909999990019999199999199999190919999399909999 -050408030900101108060900121108020900131308141400131315141600040104041600999290099999999909909909919909199911999999099099903099999909 -040804010900101010100900021111120900131111120900140415160600140305161600909990093999990999199919099199999999991990090909999099929999 -050604080800090210111100031204111100121213140100151513160400151717171700999990009090119991099999999299199990399990999090999909999999 -080808080400040910110100121314141400121302051504120616171700031816161700999099990990113991909999999999009019909919099999990999921999 -080605010400080910111204081314151200081302151200161317181204161619180300999999003090010090199999199999999991999919999919099099990929 -080809031000020504061000111212121300141515160400011515171704181818171700912991999999999910000999909109999190999990093999090999999999 -080809100400080811120100051314141500060214141504161617171700160318180400900099990999913990199909999999999019009109999999999090929999 -080808090400030402101000111212131000110413130600111414151600041414010500999092910999999990109999999991999909099991990900999930909999 -080109101000081109100500121109131400041109060200151504161600150403161600999999399999999909900901119099919990999099199099999999909299 -050108091000111112091000131114151600130404041600130217171600130617170300990090309999999919099990009990099999999099991199999999909929 -080808010500091011121204130614121200130415161600171815021600171715040300999999903090019009199990999991999909999991999019990902999999 -040801091000111209091004130214141000051506161600041717181800031717181800099099039990999000919991999010099999999199990909999999929999 -040108091000111108090600111108090400120208131300141404131500161617030500990090399099099999999999909199999190999199999900991990991299 -040801050900080810100900110410100900111213060900141202150300141204161700999090939999090909999990999991099919990999999119999012999919 -080808010500020910111200130909141404130615141404131615171800031616190400999991913099910919099999090900999999909999990990929900999099 -080804091000031104091000111112091000131302090500131314141400040415010600909999099999909929999991909991999910999999099199909030990999 -080609101004081112131300081114131300151515150100161616171804030502192004909909909099999999099909099909099999399991999991129191990110 -080802091000080411110600031212120400131314151604131314170100051814171700910099919099999920919999999999109999009991999903990999900999 -040501080400091010111100091210111100091213130200141406041500141403161700999090030990919999999990999999199999190909199990999991999219 -080805010400080809091000041109091200131314151500161702181800061717031804999999903099090999990990999001909999990919099199909999999290 -080609091000111212041000041313131000031415151600171715151804171702010500099090999990990909099999999909909999092099999990099130991999 -050808010400090909101000041104101000121113130400141513020600031616161600999990903099909999999999999090109909990999990910990919929999 -040108060400090808101000091104101000111112131300020403131300141415040500990990399099909991099909999999999900991999990999919200991999 -050806010900101011090904101212130400141212151600141717171804031919190200909990093999009099010999999999199099199990199999099991929919 -080808010400091011111204090911111304140215131300141606051700140318181900999999093099090099999990900991999119999900091999992990999909 -080809031000110809061000110212131004141515151004161604170100161618190500992999999999190991999991100099199999900991999093999909990009 -080909090900080310021104081010121304081415121600041718180100171705190600999999291999901099991999990999919009190001999993999009999909 -080404090300080209090400081005111100011213111100121206141400041516161600999299009991190999999910999919999300999990999099999909900999 -060808010500090910111204090913141400151617141400151618180200150318041904999990903099999099010990099990999009999999199991999990992900 -080801091004081111091000121111091004130206051400031516171700181920201704999909939991990919999999090199999109099199099009921099919990 -060108091000110808091000111212121204111314140500041514140300040216171800999990399990909991990999990919909909990199999999991992901119 -080904010500080909101004081111101000121103131400121516021704121518190600999999903090909099999999099999919099199021099999099110999199 -080409090900081002110300121213130100121204140500041504161600151506161600909999911999192901999991939999099990099090990909999999999099 -080808010900051010090900041010041100031212131400151212021600061717181804999999903990909999901909999999919299199991090919909990999090 -020808080300091005111100091012111100041013141400151013130400040116170600199291909999999999999919099990999099999990990090903099999009 -030809090200101010111100011204111100061314051504161617151504161818181800219199999199919991999930999909909000909009999999099099999999 -050809010400100909111104101213111100101202141400151216171404180616190300009999993090919091999991999991909999990919999919009919909929 -080809090600080809091004041112131004031415151000161715181900051702011900999099999999999090909900090999099299099191990990909139991999 -080801090904101011090500101012131400151502160400171718181800171704060300999909039999199999900991009901999991999091099999999902990999 -040809090400040809041000050811121000010811130200061411151500041411150300099999990090999999099909919999119311999099190999999999909929 -050809101000061109100300121314021504121616041500121616171700120104181700099999099299099900919991100919999099999990999909993909999099 -080804010900080810100904111210100904111213141500061617021500031819051500999999903999999090999999900999199000199999990011999199921909 -080809090900051010101000011112130200141515131304061515160300041718160400999990009999999991991930919990999099900999299999990099909009 -050408030400020909061000111212121300141414131300151616171700041601171700992990019091909910990999999199999999999190990909909399999999 -060809101000111109100100121209131400121202131404151617131400030404130500009999099999913999909991909999999919909919991199920999999009 -080804090900080810110900011213140300151513141600151502171700060405170400999999900999109991199939999999929900999919199919900999999009 -080806090400080809090400101112131300111102140300011515160500041717171700909099999999990909909901999991129991999199993900990999909999 -040108090600101111120400101111120200101313121404101515121600051515031700990090309990999999990999119999919099909999190999909991999929 -040808030900100808050900110212131400151512041400151516161400060116170400992990999999999901900919909199999909999990999090903999999009 -080609090900081003111200081314021204081516171204181819202004180119052000999999021990999990919990990990199911009199999009093909999999 -080808090904011011090904121314051500160614171700180214171704191919190300999919119993919091000919999199909099991999991999091999999929 -030808090400100808091100101202131400151204160400151217170500150117170600299999999099999999100999109099199099099901999190993999999909 -080809090600040209091000111112131400110515131604031718131600171704011600909999999090199991190999999991909991912099999001999039999999 -020809100300111212041304141212131300141516171700141516171700050104180600111291990999999019999909999999909909999999991909903909999009 -040308080500091008080400011011020400121011131300140411151500140616151500929090999990990999919939199999009019990999990909999999990099 -040805091004111212121000111313021000141313151604011718181900171718060300090909090999999999099999199099109099119199193999999902990999 -020808080300091011051204131415151204131316171200011806191904181820191900199291999999009010999990990909999900099199993099099999990099 -080803090400080810091100021010091200131305141500131316140400060401171700929999999099999919990999099109909909099999999100900309999999 -080109090500081009111100121202111100121213140400151613170300040618181804999999399090119909999999199991909991990091999992900099999990 -080808080300040509101000111202101000131415151600131717181804131704010600999299919999999900199900199909919099999990199909099930990999 -080905100400020903100400111111100600121313101400121313151604120117181800190091999999290919999999999199909999999990091900093099999099 -030808010900100805110904021212111300141212111500161718191904060418191900299999993991900019999919109099909999990099099099000999999999 -040808091000030811121000131404051500131416161500130206161500131704011500090999990999900929090999909999999919999199991090990939990999 -050308080400090909090600041011121200101002121200011314141400151515150400929090919999999999190909999991999909999910993999991199999909 -040809090400021009090100111212131400111103061400151515161400040517161600919090199991993919099999009999099929990999999999909090990999 -080808010900101011120900101013060900141415020904041617181904051717031900999999903999919999109990999901999991009901990091099999909929 -080803050400080409101000021109100400121209131300141414131300041501040600929999990099999910999990999199009910999919999999990300909999 -080809100206010809091112051313130312141415151516141417181819200404181804911119999193999190999999992000999999909909909999009099009999 -080309041010080609111210080209041314151616041717181619191717202019190105929999990999990990990091909019900999990990999191909993090999 -080909101011040409101011121213141511121202141611171806192020030521210120099990999999999090099999919990919911999199101900920903999999 -040602080808091010051103121010131404121215151616011715150404041718181818991990019929990909990999009919990999199199993190999999000999 -050809090110060209091010111213141515111216171515111803191919110420200421009999999390191991900909099990999990999190999299999909090990 -080603090909101011120513101004140213151617171813151517171919202021011904099990929909919999910999019909919909919999919091999039090999 -080909091010040506111212031302141512041313161616171718181920171718180104099090999099900990999929119991910099999999199990099993090999 -040809090910110412120210111113031410151515141410161718181818041905060104009909999999091999191990299999999990910999910999990003009999 -080801090909081011110412131006141516171002181816041019181816032021210516999999030909199099999900900099099910990919999999999190921999 -080910101111120410061111051314141501161314141517041318021904031818202020009090999990999909900999903999999009900999109919999911929999 -040808010504020809090909101004061112101013141415160313141417181818041717099999913001999919009099990999900999991999902909999009999999 -040808080105091010021111121010131415040313131416060417181419202020201419999991990311919999919109911029999999909990909099909009999999 -080809090909080805101003111112101004011106021314151616161617041818190417909999999999099209999990999990911399199191910999100999999009 -080910011111041010121111130206121214131515161714181515190414030520202014009990993999909999999019991910199991091999099909929909990999 -080803090410061111091213141111091215141416090417051802192020212121210120999909029909990909999099990991990999999019009091919113999999 -060804040904101112120909101313131301100514141516100317141816191919200216099909000990999990900999993999919909999999199290199199999111 -080901041010041111121313141511061313141504161602141504160317140504181818099990030099911999999911099990991999909999919909999992119099 -080910110112051314111112030602041515161616171504041818181919202020201919001990019399999090191999999291099999099990009999909909999999 -080808080909101004110909101012111306051402151313161717151819201701040304999090990999099999999091999911999991190199919991909302019999 -080803090904080810110905061210110213041212111414151604111414041717170104992909999999099999991009910990999990990999990901900903099999 -080808080909011011040909121213141504121216161706180216171719182020200305999999110993999991191999110999999909901990991999091999099929 -080404030905080810111112131410111106131515150204131616161617130104181819999909002099999090999009999990919999199199900999993009099990 -080904101011080909101011080612131311081414151601171804191905032002191921999909909999999999099990990990909090939900191999921999191191 -080609101003080802111111051213141515161718181504161918182020160121042020991929019999999990109991099019999099009199999090993099999099 -040108080808090910110212131313131412151516171412151518041903200621051919999990390999911191199999909190999990999900029999909099909099 -040808060104090910101010090904111212130402141212150516141417151518190317990990009309999999091999919099199901990919909099999199999129 -080808080909101010100909011111040404121211131404121204061516021717170305999199199999999991900039999919999990009990099999019099019929 -080109091011080809090512131414141504020616171818190420171818191903172121999009399909199999190019909100199999191909999099999999992909 -050108090900101008111200101008041204131415151200160217151204180619190300990990399999000999999999090199999009991999991199009199909929 -030808010600090909101000111202131000041214150500161617181804161604181800299999913099999909199999119090009909999900999099099099999999 -030809100400080809110600020512131300141415150100141415151604171717170400299099990999099919900990999190099919399999999990099900999999 -030808060900101008040900041112120900050212120900041313141400041513010400990992999999909991099909999919999019199909190999990930909999 -080403090900081010110400020410121200131405121200061414150100161616160400099999920991909919990999999109999190999990990913999909999909 -080808090300051010020400111111111200130614151604131718181900130118181904991299919999919909910999999991909990009019990190993999999990 -030809090904051011111200021010111200131414151200161414171800160604010400299909199099999909999919999199099199090999099910990030999999 -060804090300101104121200131105120200131114141400131516171704130118181700909290091999099909999999919990919919999100990999093099999999 -080803090400080809091000110504120200111306121400111515161600110115170400999999929099991909991999099909919009099999190919993909999909 -080909090900080210110100121314151600121314161604121317181904120305060400999999911990193901909999099999099999909990099909092000999999 -040106080300090910081100090912081100041312021100051415161600041414161600999290309999909999999991999909199091099009990909999999909999 -080804040300080809101100121304100200141315151600141415151600051701061600999999900299091909999999919090919099999999999091990399909909 -030805090904100806110900020804120100131414151500131414151500161616041700990912999991091999919919939190199191999999999999909990999909 -080906101104121213101100051414100100031414101500160217040400161618181800009900999999000909999999939999999991092919099109991099999999 -080804091000030809091000110212121000131313140100051516160400061716160400999992909999099991999910909199999991390990999090990999909909 -080801090500101109090400101111120400100206131400101516171400181818031404999090939991190999909999909999099109099199999119909929999990 -080809090900080410020500111110121300141110151604041710150300181801150600909999909999010999919999919099919909000999299099990399999909 -040408010400090508101000090908101000111202041300111414151300031414061300909990993090999999999991199019009919999919999990999909929999 -040108090904100808090900111111111200130214151200130503150600041617151800990900399990999991999999909199999111999099999929999990900009 -060809051004111109121004111113141004031515160100171515161600181902202000009909990999999099009990000990999990392999999999919991911199 -080808091000011112051000131313141400151504141404040216161700031816160600990999090993199999190999099919999909900199099199999990921999 -060809041000010811111000120811050300121213141500161602141700161604140400000999999993190999999909099991929999990919199911999999990909 -080809090900030802100500111213131300040414140100151514141600150404061600999992911999199999910900999009199999399999999090990009999999 -030806050900080810020900111104121300041114141504161614141700161601181800209999990999119999010999999999109909900999099090999309999999 -040809100600051109090100041213130400141413131500141416021500031616171700099099090990093999199900909999999909099991999919999990929999 -080304090900101104121300101012121300021414061300151616171300051616010400290991990999099990999999999190999199099919990910909930999999 -080801090900101112131304141414131300151516051700151518180200040318040600999990939090019099099999999900919990999999199991909900992999 -080109061000080909111200131313140300150216161604171718181904171705180400999099399090990991909999099199929119909099999090099990990999 -080109090600080810111104121310111104121410150200161617181904161620050300999999390099119099999909990909919909199091999091099092999099 -050308040900100808110900100211111200101313140400101515151500040106040400929990990999990991999991909991099999099919990999903000999999 -080609051004081102121000081113141000081113150300011617181900041616191904900909909999911999109909999999029999999010993190999999909990 -050809030400100809111200130809041204141409150200161417151500060118181800999990992099991909999909990099019999199909990119903099999999 -030808090400101010020600111111111200011314151204160517171800161617170400291099991999900999919999909991999310909090099999999990990999 -060809101100050804041100120813131300121414040300121415041600120102161600000099999990999999009990999909999990999919290909993199999199 -080809010400041010111100041205111100121204021300041414150300061414151500909999903090909990999900999999919999199001990999999992909999 -080909011004080909111000121212131000140315061004041616170200051616181800999909993990991999009999099099999920900919199911999990909999 -030804091000041112121000021111051000131415161600171715161600170615010400290099190990999999999919909199909119999999999019999930990999 -030808040900100808110900120413130900120214131504051614170100061814171700999992990999900919999990999991909119009091990993990999909999 -080809090900080810110300120410110400121302140600121516161700120116040500999999909999992909999999109901999110099999991090993990999099 -080801090904080810090900061112121200041314051500160217031800161617191804999909939999109991999909999910909900990199099199990929999190 -080910021104030412131304141515130100141615170500141618181800141919190600111112999199099099099999039909099099099909999999999909999909 -080803091000110812091000131405090200151616041700151616171700150401060400999999929990919909990900919009919999999990999919999300909999 -080803091004080611091000021211091000131414091500040414161700181818010500929909999999999910999919009919999099090990099019999030999999 -040808080900101111120400030602130400141414131300011515161600051515160400999090990091999929109990999991909991999991993919999990909999 -080808030900021011110900121314040904121313150904161718180600050118181900992991999991990991999999090990999990000199990099903990999909 -060808080400091010111104121210111100040213140100031515161600171505161600999990909090999099999991999911099091399199999909929999910999 -040808030400050908101000110612021300111414141400111516161700040116161700099999992090099999091999919900199999999919990199903999999909 -050801091004040811121000130811121200021411151500161616161500031718060400099009930999199909999909099919099199991999999999991990920099 -080309090900081010110400081210021304061212141300151617181804050119181800929999991099999999919909190991999990090919990199003099999099 -080902101000081112131004081415040300061415161600171418161600050118180400091999019999109091902990999999999099999999990099903909999909 -080910031100021212131100141212131104061515131100161515131700040118051704112991999999999919999919990919999999090999990900903099999090 -080809040300080809091000111104041000111213021000041414140600051501161600900999999299999909999990999999099011199199990990990309909999 -080910110400080910111100080210030500121314150600161616161700040401171700099999999099109991990999299919999100091999999999900309999999 -080804090900031002110900121213110400040414110600151515110100051616161600909992199999190990190999999991999909090919999913909909999999 -040808010600090908101000090904051100121212021300140415161600171717031600099999993099009999091999999999019991190919090999999199999299 -030804090500100811091200130814121200150414161600021714161604171718010600999992909099900919999990999199099999991099991919099130991999 -080809030400101011111100121006021300121204041300141414151300051617011300992990919099999999919999019909999999099009999901999039900999 -080509090300080409020400081011111100011010121300061415161300041717171700909299999999919990910909999991999390999990990000999909909999 -080909100300041111101204051111101200011314101200151516170200041816160600099990099299999199999919999910999390999199199111990990909999 -080305090900081010090900080211121200040413140400151516170100151506171700290999999999909999909911999991099991090091999003999099999999 -080809090300080809061004051102121004131313131400151616171400040118191400999299999999999090109901900919909999990919999990903009999099 -080808090900011010090904111010060400120513021400151516171700150316170400990999099993999099999909099001909991090991999999999999992109 -080809101004080809101000041112131400031516170500180217171900181806011904999909999999099999090900009999099919092119999990991039999990 -080809090900080810111104061213110100141415160200141415171704050415170300999999990999099009099990139901999991199999199999000999999929 -030809090400100809090400100802111100101212111100131415150500160401150600209099999999990999999991999991999999990190990190909399909909 -080801040900100811090900100412121200100206131400101515041400160517031400999999930991109990990999999999009109999190999999909199909299 -080808030900101111040900101012020900131212050400141515151500040104060400999290999999999990909999119099999999990190090999903000999999 -080808010900020510110900121313140904151516170900150304181800061919191804999991913999911910009999991199099990999209099999999999909900 -080808030500020406090900100411040900101212121200131314140400130114140400992991099099999919009999999900909199999199099099993999999909 -080104090900081010090904081112051300081111131300141502161700180319061704999999309990909091099999099999999999999910091109919099929090 -050808090904060810090900111203130200141515151500161718191904161601191904099909999999919900219999919009919099999999199019090399999990 -050809100300110204120400111113141500041313141500161616161500060117171700011299190991090999999999999019999990999199999990903099999999 -040809011004111109121004131109141500131609021700130518181700130618031700099909093999901099991990919999199009199909990999999999909929 -080601090900081011090900120213131400121513161604121717161600030418050400999999039990919909910911999999909099909099999999920090999099 -080801090600040810111100121310111100141510050200141510031600141504171604999099930999019900999909999099919900999999199999999929990910 -030808080200090909091000041111121300141504131304050616171700181818011700299199999199999999901999099009099090900991999009999039999999 -040809031000020808051000110604121000131313131000141515151600040117171600912990999991990919999999099109099999090199999990903099999999 -040809101000110212100100111112131400150312130400161612130600171704130500011999109991993999909999909199909299999999999090909099999909 -080109060300080809101004111213101004111413020400111513161600111718190500990999399299099111999999990919199911099090999999990999990009 -080808010600050909090900101011111100041212131400041203150200161715151804999999903099999900991999999999019090999999199929909991900910 -080809090900080810101000040211111200041314150300041616150100061616170500909999999999999990099901919919929019999919990913999909909909 -040108090900101108020900120405131400151616131704150616130300151818181800991990391990199909019909919099919099909999299099999999909999 -030808090600050208100400111112101000111112041300041414141400151504010400299099990999199901990999999999909919099919090999990030999999 -080109100500080809100400041109101200061309141400021504161600171717031600999099399999099991990909909919099990990100991999919999999299 -050408080300090208040600101010111200131313041200141516161200140401161200999290099990199991900999909919999990999919990099990399999909 -080806090900080810091104121310021104141510161104170318190100171718200500999999909999909009999901110919999099100291999903999909999909 -040108080900101108120200131314121504131614121500171614031800051614060400999190399199199900991990990999999990990999190992999990909099 -080801091004111111110500121314151600121313060400171718031904171702191900999009030099999999109999909991009099999919999092099199999199 -080903101000080906101004020911120500131411151600171711161600171804010400929999999999909119910919999199199199999191999119999930900999 -080802090900080810031104061213141400151604141404151718181800150119190500991999919199992190199911099919999009909199999099993090999999 -080808080300090210110500090412041300091412131300151516060400150117171700999299199991000999909909999999999900991099999009993090999999 -080409090900081010110400011010041200041314141400131306150200050315151600099999990990909999900939999919909019999999199099909991992919 -080909090900080204030600101112131300141212131304151616171700040518011700999999102099999901999999999019999090909919990919909039990999 -080808010400090910111100090912131100140206150500141617041800140317171804999990993099919999199991099919009009999190999199999999992900 -080504010900101010100900111212131300111204131300140215161600060417160300099990903999999909910999199999999990999199990199900199999129 -080808080600030909101104121212021100131414041100151414161100051717010400999099990992990099199999119099099999990999999901909030999999 -060108090904101112120400131412121500161717181500020503181500191919181504990900309991090910999999909109099999991999990999919299999990 -080909011000080211121000081312121004080514061004031516171800151519041800999999903991191999199909990900999999012909999000999099999099 -080309091000080409110500080212121200080413130600141515161600041515011600299099999090909999909911999999109999999091990909909939999999 -080309101004080411100200081211131400081211151400161217181800060519011804921909999199099999991900099999099999999900190999909039990990 -060809100300050809101104120802131400151616161600171818191900040118191904099999999299999109001919119191999199991999991909903999999990 -080309091000111209091004060213141500041313160500171717181804191919011800299991999991099091990909909919099990090919999919099039999999 -080109090904081010100500111213130300140213131500041616171800061616170400999909309091999919999919929019999919090099099909999990909999 -080806030900101111120900101111020900100513140904151516171704041518011700999990902999919999999999199999199900100999199919199139911999 -080806030900101111120900101111020900100513140904151516171704041518011700999990902999919999999999199999199900100999199909099039900999 -030802090400080810100400061111111100121212131300141415161700141405010400919092910999999909910999999999199999999001999900999030999999 -080909010600080909101000080511101004121213141500030416171800191616021804099999993099999999099990090999199900099091099999929919919190 -060108090900101108051200131308141400131308021500160404041500161604031500990990399090190990990999999999999991190000999999999999990929 -080809090600030809101100040212131100141412151100141416151100051704010400999992990099999991909991999099099999999919999010990030909999 -080809010400080809101104121313141100041306151100161616171100030502181800909999993099999099019909009090199999999991999999929119990199 -080805091000080811091000040412091000061212131000031402150100161604171700990999999999099900099999199999199099099911999193921909999099 -060808030904101005110900101012130904141414150900011617021804191920202000099909092999999999019990090999199999999091093910091199991999 -040208090904101008080300101006110500121212111300011415161700181818180400911900199299999999999990999919909999999100093900990990999999 -040809010500100809091100121313130400140215161600031706161604171718181800999990993099990900910999999099199011999199999909129990999999 -040804040900101111120900101111130900031413130200011515151500161606040500099999000999909999999909099999909219199999193999990000999999 -080109090600081010111204081013140300081515021604171718192000171705202004999999309099900099199909199909129999909001199991999099999990 -040405030800090910040800090911120800131312120200141414141500160601171700999290009999990999099990999099919909990999199999909311909999 -080109100600080909110400081213131300080514141500021617141500040318181504999099390991909999090909999900999999991999991190909199992990 -080801040600080809101104041209101000131309140200131305151500161603171500999999930099099090990909099909999991199999199099909999999219 -080309101000080604111000081212110500020412110100131313111400041504161400290999909999990990999999909199999901391919999990990909909099 -080502091000080811041000121211040300121213141400151516141400150104060400091199919999909990992991999999099990999109999099993000999999 -080808030900101111111100051213021404041215141400061216171700041816011700999290909199999909919999010990999009999909190999999939900999 -050108090900101108090900121308040300121415161600171402161604171718060400990990399999999901999900099919929919999919999919090990990099 -080409090300080209040600101112131300101212131300101414141400100104150500999299099990199991900919999999999999999090991999993909999009 -080401090900081010101000081112130400141502161600141704161600171703060500999999039099999999199900199999109011999199999099999900992999 -080906101000111112101000111113130100051415151504041617170300040218181800009990999999009999909999939991999009909919990199991992901999 -080808090904011011090900121010131300121414131304120215051604120617180300991919919993199999990919999999999999909099091190090199999129 -030809101004111209091304021414140500011515161700181819192004181819190600299909199091990019099919999991009399099909099999099990990999 -080904031000081104101000121204021300121214061300151514161300051514011300909299099999909900919999019999999909999990999001909939999999 -080209101100081204130300141413130500011415150600161604171700161604171700111199999299099910999990909999999309999090099099999999990999 -080809030400080809101104050210100600121314151500161717170100041818181800912999999099990091999900999919909010990919999993909909999999 -080808030400050609090900011011111200131314140200131315141600041715150400999990002099999999991939999910919919199999099909990990909999 -080803090900080610090904111213140200111214141500161217180500041201191904992999999999099009091999999990919999190919090009909309999990 -080409090500081003091100081212121300021406151304161717181800041717011800999999099090990999209919999199999190011199199919909939999999 -080809011000051112131000141516130600140217130400141717181804140304181800909999903990900990999991109919999190099990999999099099929999 -080901101000080909101004080411110500080212131400151617141400150304180600999999939999919099919999909901099119091999991099992009999909 -080808030900100611120900131411020900041515151500161717181804041705011800999990992999919900999900199999109099999999190909009039999999 -080909101000111209130100141212151504161702151504181719191904051706200300090990999999913909119999990019999919911919999999119019999929 -060808091000111208091004131314151000161602171004161618192004031818010500999990999990909090099999199901199999009911999191129930999999 -040808090900010808090400101112121200051113130200061113131400041103151400099999999093909990199909999099199999199999190999999999909219 -080809031004110909121000110212121000111304061000111314151600050117180400992900999999999991999910999999999999999900091000903099999009 -080104090900080810090900111112020500111112131404150612131400161704130300999999309999919991119991909999199999111099999999909999900929 -040104080800091010080800111012120600131402151500051416151500041416160300999990309999909909909919999199009119990919999999999999909929 -080805090600080809091004110212121200131414141400151616171804031616011804990999999099999090900919999119909999991991199909129939999990 -080801090900080810091100051210041100121210130400060214140400031514140400999999939099109901909999999999999990099199990190999999921909 -080102091000081112121300061412040300151516161604151517170500041818181800991199319190999991992991999009099999909909999090999099909999 -080808080900101011040900100312051300141515151504160217181900061717011904999999099999909999090929099190909999911911991190909939999990 -080909010400081011111200081011111300141415041600141405060200040317171700999999903090091999991999999990919909099909199990909991992999 -080409090300100611110400121302051400151316161704151316161800151301181800099290991999999900190909099991909999909999090090999399999999 -080809010400050909101100121213141500121216161500061716021504031818180400999990093099900999919990019999999999199091990999099910929999 -080409090600081009091100120213140100120515161704121818161700031818041700909999999090090999119911939900999990009909999999929999999909 -080809100400080811120100061311141400151511020400161611170300041605171700909099900999913909999990999909099991099991999099999992900999 -080106090900081010101100081213111104080413131400021516171400050418031400999999300991999990009999990909909999991999991119909029990999 -050809091000011109121000130614121000131302151604171717171600040403181600019999190993990990199999999991999999009010999999900919999299 -080903101104080905111100080912130200080914130400011516061704181819171700992909991999999999091990919999999001999919093199090909990099 -080909100400051109120100131114150600131114021604131714181800131704031800099090990999913999199900109999199999109099199999999029999999 -080910031100020506121100131414121100131404151500131616151500040116170400112991999990999919099999009999999990999099991909903909999909 -080809011004080809091000111112121200111106131404151617130200040318190500909909993999991990991999999999919999909909190091909010992199 -030808060904100808111204131302110500141415110100141416111700181818181904999012999191991099190990999991999909399919999910999990999900 -040808090300100808091100041213141100121215021600061717181804051701181800999990999290909909099990199991119999199919990909099399909999 -030809040600100409111100101002111100011213141400121215160400171717170500210999999099999990199999999901099390999919999190999009999909 -060208080800090910110300090910041200131404121200151414160400050117171700019999199299909999909990999919999099990900999909903090999999 -080809090904100305110600100412131400101515161400021715181400041717011400999900990992999999000999999900099991991991991190909939999999 -040502080400090910111200130910100300131414141400151617170400150117170600991090011999991999992999999901999099999109990990993999999909 -080801091000110812131000111415151004111615151700021818051904061818031904999099930991109990999999990909999909091990091999009999999290 -060805090400080810090100110410091200110213121200111415151600040315150400009099999999013909999999909901999919999199999190909990992999 -060809090400011010101000111213131300111214141504161202140300041217180500009999099093999991099909999999999999100919299199909099999009 -080909100500081111120300081111131404151604131400011717181404061717190200999099090999909999992999990009999009999090993909099991909119 -060104080800091011080800121311141400131311141404020515151600171717030400999990309999009901909909999999999999901009099999919990999299 -080808010600040909091000111112121300110402140500041515161600031715161600999999903090991999991990919991009909999910990999991999929999 -080809011004080809111000021209131300140315040400161717171700161618050600999909993999110991999919099199999990991209091999999990990099 -030808080800090410101100120613051100140213131100151616161100041717010400999992099099999919099990909199999119199999990991909030999999 -080409100600080809101000111213130100051213130400041214151600171202150300909099999999009999909900939099999999099919999991909192909199 -020809100300110806121200111113120500141414141504161718191904160120191904111291999999999999099990099919909999909199090099093099999090 -040809050600011010101000111213140400110213151600031713181600171718181604090999009093999999100901999919099999099199999999929099999990 -080403091004081105021000081212131300081212141400011516171404181818190600992109099999091990919999199999099099999199993009099009999909 -080808080904051011110400011211131300141516040200141406171700181803171700999009909090999990999931199900919990999009199999990999999299 -050808010900100808090904110612131300110214141404111516171700110318041700999990993990909099019990999999199019909199099199999199992909 -040308080800091010110200061005120400131313141400151516141400151516010400929990999190901909919999099999109999999909999009999930999999 -080309061000080909111000080212131004141512161700051812171700041812010400299999990999999990909919900919099090990199999119999930909999 -080401040904081011121200081013121200081014140600020514141500161717031500999009039091109999999990999990909999991999990990919999919299 -080309090500080409090400081011121200020413120600141415161600171717011600299099999999099999090990999100999999991900099119999039999999 -080808090904101111120100131111140600150205161600151717181904151717030400999909900990913909909999909010099999999199099919099920999999 -080901051000080911121300080912121400150916160200150604171704150403181700999099939090090999199999919999019099999099199909099999909219 -080909031000111104041000111112121004011314140200051514141600171806161600099290999999990999099990991909919319199099999990900999900999 -040808090400100808110100101212120500100213131400031516161700151506160400099099990990993999019999999919009999099190099999929990990999 -040805010400090909091000111112131300111412131300041414020600031515160400099999003099991909991990999999999999990991999990999019929109 -080809031000051109061000041209021000041309140400151514140100151516160400909299999990999990909909119909999001099999999993999909990909 -050403060800091010111100090904111100120213131300121415151600120104150400999090029099999991999999099919099019999991999190993090999999 -080809051004080809091100121204130100021415161700181815191704181803061700909009999099990999909999039909199111091999999990099909992999 -080309091000110612091000130212141004151512141404161617181904161620010500299991999999099919909911900999999901909991099909099030990999 -080409090900080210030500081106121300141415121300141416160400040116160400999999012991199999990910909919999990999909999090903999999909 -030809041000060809091000110802121200111113121200041415161600051701161604299999990990999999090991199999999909999001990919990399909990 -080808010500090910111104090912121200061302140400151516170400151518180300999999903099009099991999999901999090099019999900999199999929 -030809100400110812130100111414151504110214150500161717181804061717181800909092900999913999109999990999999119090900999999009999999999 -080808090300100211111100101204130600101414151600101414151600040104040500999290991999199991999910909999099990099999991999903000999999 -080809011004080811101000121314150400161314170600160414020500031818181800909909903999909909919990109099999991099991999990990919929999 -030802091000080811091000060411091000121311141000051516160100041515170400919992919999990999999990999099999091090091999993999909909009 -050408080800091011120300131314151504131616151500011717020400061717181800999990090990009999092990990990999999999901093999999919909199 -080804090900080802090300101011121200100513041400151515161400060117041400999999909999919909112999999991999999090019999900903099999099 -080109100400081111040500081213130200081212131400151516041700151506031700990099300990999999190909919999919999990909199909999999990929 -050809100300110212121204111113131304061415150400161715181800161901181800091299019999199091999999991119109999999199999109990399909999 -080910100400080903111200080906041300080914150200161414151504160117180500909999999099921999991990909999919099999099190919093099999009 -050804030900061002090900041111111100121212130400141515161600141401161600099299009990919990199909999991909991990991999919999399999999 -040808010500040808090900100411120900131415121200130616161600031717170200099999993099909909919990099090999009999999190999999991929919 -080910101000030909110500120213140400121513161604171713161604170118190600199992909999990991909999999919009919900999999109093099999009 -060801090900041011090500121211131400151611021404150411171400150317171400099999039090019999919990919009999999109091999999999999992999 -080803090900081010101100021213141100041513161104171706181100171704010500929999990999999919909919999919099911900091999900999930990999 -080105090900080810090904111112120600131415151600020403151700181818180400999999309999009091999990999109909909991999090990919290999999 -080808090900101010100100041112121300111106121400151617021400030518041404999999900999993999199900909990909999999991991119929099990090 -040308090400101011110200121212111300141414131300151515151600040601050400921090991999991909991999999099999999999901099999900300999999 -080104090900081010101100121213060200121214041500161617051500161604031500990999390990991909901990999990919999099009999909999099999929 -040808050900010808090904101111111100100612130400101415021600101703161600090999999993909091999909999990109909999991999119991909992999 -080409050300081009111100121009131104121009021400121516170400120116160600999999090299999909999999190999119909199910990190993999999909 -060805090900031002110900121212110400131313131400151515161600041704011600099999009999010929199999999999109999099991999909990039909999 -040809101000111111111000011213141400151502161604171717171600060518040300900990099999999990999930099919999991909119999999909092990099 -080809031000080809111004121309041400121313060200121516161704120118190500999999992999991009991999909990919990999909190191093099999009 -080109090600081009090400081112131304141112130200151116171804051116190300999099399990199991190999991999999191190909199991009919999929 -080806010500080809101100121314151600041314141604031302171604181818171600999999903099000999919900119099999999909919999990129199999999 -050801060900101011110900101011020900121213130300041414131500041414160400099999030999091999999999919999199909999909290991999999909009 -080909090300080204100500111212131404111215161400111718181400040118061400999299199991090919909999990990099990999099991090903999999099 -030808080800090904101100090902121300141405151304061416171704181801171700999992999099909999900991199999199990909991090019090399999999 -080809100500081109120100131409151500061416151504171702180300171704191904999099990990013999909909999091999909909019999919999012999990 -080801090900080810090904111210100400131214150200131214051604061203171800999999939999009009999990999099109990199990199999099991909219 -080109101004080811121300140604151304161702051300161718181300161718180300990909309999000910099999900199099119999919999999999999999929 -080504030900101010060900111212020900111104131400151516161700150116160400099290909999999990909999119919999909099190099099993990999999 -040809090600080810100100110210120400111313131300041415030400161616160500019099991999993901909999909919999999999019090929990999999909 -040408090300101111091200101302051200100604041200101414151500040114151500900990999299911999199911909999999999999000991909903999999999 -080910100400080910100600010911121300140915151604051715021600031717180400099099999999990999099931009991909099900991999999999919929109 -060804090900030810111104050812021300141515161304171715181300171719011300099999900992909099909991199099199090109999999991999039990999 -080808080904101003111100101012021300141405131304141415161700041818010600999009999099299999990991199900199999909999199901909030999999 -080406030400080409101100081212021300081214141400151516160500150117171700099999902099901990991999919999199009999919999190993099999999 -080809011004081112131000141516161000171816161904200602211904200321211905909909903999000990919909999099999909000019999919099999992990 -040809010400100811111200130411111200130214041200151506051200150316161600909990903099990909999999999901999010999109999990999990929999 -040808040300090808101100120602051300141515131304141515160100141717171700999990990299911909109999999001999999909990990993999119999999 -060108040900101108121300100412121404101502161400101515171400051803171400999090399090110999999909900991999910999990999999901999992999 -080808080309100211041209101305141212101516141704101818141919061801201919999299919999109991999090909919999919009919990909909309999909 -030804090405101111091212101102131212101415131304060416161601041718181818299099109909990999999991199999909000900999199999390990900999 -080109090909080810111204041313140405061313151616171702181818041919191903999999300909090901990999099999090099099010999999999199909992 -040408080109100511120909130314151504131616171717131616021818130619201818909990990399009909901992999991910099999999199911999999990009 -080109091000080809110200121314111504061605111504171717111504181818180300999199399199199990091909090000999999909099999999090992999999 -030805060904101112121300101412121500101617171500021618191504202020011504909002099099999990990990909999099999991999999010019139999990 -030808040400040208040900101112130900101112120400101114151500060501151500290999999090190991999999909999099019999919099909900399999999 -080910011100080510111100061210131300141402151300141404150400031604150400009999993999099999991900099999999911199909099999991999929009 -080809021004080811051200011314141500161616160300171818191904202018061904911109999199009991991930999909929999990990990999090999999090 -040108080500091011121200091111121204090213131400091515151600041718030600999990390091999999999919090919909909999199099999991990901299 -080909090900051010100200040311111200130614151500161617151504161717010400099990999099991992991999909099919909990909999009099930999999 -060408090500101011090100101011111200130204141400131503141400151516170400909090909999993999919991909919909009999199999999999209991909 -080509100300111112131404151502131400061516131400171818131900041818011904091290919999999090199999909991999919990199990910999939909990 -080509090600100309091100101012130200141415131604011417131604181818181604099990999099291999991990919990999991119919993199090999999990 -080509090900101111111100100402040300101213141400061516160100151516160400099990990999999999192990999991099009999910990093999999999909 -050108090900101008040900101008111100041208130300061414131500041402161700990990399999199999909999099909999099999919290909999191909119 -080209090900081011110300121304141400151604141404151717171700150106180500919999119999992901099999999019999999909100990999993009999909 -050809101000011109041200131314040400130214151500161614151500160314170600090999099093109990190999099999999910999199999999999999929009 -080801090900101011090500101212121300141414141504160204030600041718181800999990939999199991900999909919999999000109099999901929991999 -080808030400020904051004110912121300060914131300150916171700150118171700992991999099099019900910999999999090999909990099993099999099 -080806090900080810101000040211121300041415131304161715150100030518181800909999990999999990909901909911999099909190991993920099999999 -080609090904101112131300101114021504101114141600171118031900040118180500099900909999909999909901110999919999990999199092903999999909 -080802091000080809091000031111111000121213140100061515161704041515040500919999919999999929199999909909199990390909999900099900909999 -080803090900081006050900021111121304141111150100140416161600171717170400929999999999090910990999000199999191399909999099999090999999 -060805091000010811121000131314151004130416161700021818161700041818031700090999990993009991099999000990909909991999991999909999999299 -050808090904100806110400121212121304141402131300150316170100181919191900999900990990990990009999990991199999990911999993902199909999 -080910100500041111110100121313141404121313141500120616021704031818181800099090090999993999019999990999919099999999199011099199929999 -030804090900100811120900050811130400140211131500161611131700041606011700999992909991990999909999999019909199991999099110999039909999 -030808060400090808021000091111111100040512130100141516161600151504171700290999999090911999991999999999199900390990999099909990999099 -080910110400120210131400030610151400161717151400161717151404160401150500199091190999199929909990999991999999999999990900099399909909 -080910011100080412131104081414131100151604131100031718180200171718060500909999003999909099999999099099999090199099192191999900999999 -080909100300080211101000081211051304011414151500161414151500170604180400999999099291119999999919901919919391999999990999909009909909 -080809100300040811101200061313051204141313021200141516171704141801171700990999909290099990999909090999999991199190999199090399909999 -080809101000030511101200130414151200161606171700161618171704021818010400909999909999099929009999099109009990999999999919119930919999 -080803090906080210090911121212131414041515131414011504130405161616161718929999999901009991999099999191999999099999993099990900099900 -040108091006111112120413141112120213151617051813151920200313151921212121990000309099199919999999911000999990919099299099999999990999 -080809011011040809121011131409151011161709151018191902062018051921030418999909993999910900999999099009990099999019099190999990901299 -040808080804090909060410031112120213141412121515141416161616170418180105999990909909999090909021919999910919999999919999919093009999 -080909101010080909060311081213021111081414151617181414041605040119202121990999999999909299099990919909199091000999909909903099999009 -040801091010111112131002111114131516171818131916172020060316172005042116099199031999019199199199991991919199999909299909999099999900 -080109100600081109121204081309121204141313151504160217181500191903200500990099390990099091999999990999999190901999991119990910999299 -080609101004081109101000120209131404121509141400121516170100030418190500909909999990999990909911090999999091999991999903929009990909 -080906100400081111101204081313101200081302140300151617171800040117170500909099099990999099999999909991099990990119290991903990999999 -040501040800091010060800041010110800121202131400151515161600031717161600999090039990909909999999199909109991099910999999999199929999 -050803090900100811110900040811110200010812131404041516061400171718181800992990999990999999991909999999019311119109991909990099999999 -080808090900011011090500121213141400121215151404040215150400031616170600990999909993090991999990099999999999900199099199999109929909 -080809101000111213100100020514151604171414151600171819151600170306041604900999999991113910909999090199999999099909991999992099999900 -080804030900051002090900111112061300141415151300141615151300040104041300999299009990919990199999999901099909999999999190903009999999 -040808090900101010090904041112031300111114061300011515161300051515170200999990909999909099099909929990999999999000993999999901909119 -030802090900100811090904050812061300140815161704141819191700141819011704919992919991999099190909099991909991909991990990999939990990 -080409061004080209101000111209131300111409131300111503160400110105171700999009099999109901999999099919999199999920091999993909999099 -080305090900081010090904081010111204021314151200161717181204161706011200290999999999999099909999991109099119990910999911099039999999 -040808010400090908101100091212041100061313041100051313021100031415150400999990993099010999109999999991999090999999990919999910921999 -080801040904080810110900121314151600121317180200121317180400120605180300999909930999019909910990019990919999199999099999999999909029 -080809010400061010101100121213141404121204141400151515021600030517161600909999903099991909991990090990999999999999199911929999990099 -080304090900081006090900080211121300140504121500161617121800161617011804290999999990099999990911109009999990090999099909999939999990 -040801040600090810101100121210130400121204130200141405151600141403151500999990930090990990999990199990909999199099199099999991999299 -080909100300080409041100081202111100131313140500151516170600151501181804991299990999999990199909199099199999090901999910999309999990 -080401040600090910111100041212111100131312140200151504140400151505140300099990930099919990099909999999919909199009099999999999990929 -040808091000010808110500121314021504161614171700161818061704191919190300091099991093999990019909910099919999999999990990090992999999 -080809090400081009090100111012121300041412121300030604151300161616020500909099099999993909919999909009999999999091999999929019999109 -080109090900080810021104121303111100121415161604121717171804121920060500999999311999199110919999999902199991909099999990099990900099 -080409100300080511111200080611111200081314021200151515161600041701161604900299991999099999999990999999199009199909199919990399909990 -040808090900100804090300100511111200101313131200011415021200061604041200999990999990909990902999999999099099999119993911990909900999 -080808010904100211110904120413140900150313130900161717061800051719191900999909113991999019099990009199999299990999090990999099909999 -050808010904101008090900101011111104120413141400120615141400031617180200999900093999909999991999990099919900999999999009999991921119 -080604030900081011040900081011050900041211130200141411151600141401151700999299009990990999999990999999019099999090199019999391999919 -080801090600080810111104120513141504120216041700181816191900180316191900999099930999109019009990900999909110999099099999999999992999 -040801090900101011090600121013141404121516161600121502170300121505181904099999039999100999909901990901999999999919999919999912990910 -050808080800040409100300111112101000041113130200141513131600061501041600099999909999092909099999999990919999990099190091999309909999 -030608080900101008080900041002111100120513110400141516161600171717010400999992099999990999119991999099999909990901090099999030999999 -080909050300101010101100041213131100011413131104151414160200171804160600090990999299999990999909999909999399009999190911909990900999 -080309100400080611111200130211111200141516161200171818161904051818011904290099909999999910999919999010999919090999999900009939999990 -050608040904101108120900131415161700031415161704181415161700191402011700999900090999909900900909999999999991912999999991919139911999 -080808090900040410110900121212120100030613130400141515151500141402050400999999909999000909099999939909199999092919999999999190991099 -080909101000040309101000041102120600041111131400151515161400171717010500099990299999999999109909909991099099999190999910999030999999 -040808010900100808110904101213060900141414020900151616171700050416031800099999993999901099099900909999999990190991999909900991999929 -080804090600101011120500101013121200011413021504161613171700161604031700999090900999999999090999999909099391109199199199999929990999 -060208090900101008090500101112130400030404140100151516161700151516161700019999199999910999919990009209199990399990999990999999990999 -040808080800010905040400101011121200101313121200040214140600151514140300099999090993999991090999099990999199990199999190990999999929 -080109100600080809041100121309141400121313141400121502041600051517030400990999390099999901990990099999999999999910099199999990901299 -030808080900051004020900041011110900120411131300141414141300041504010600299999991990999999019900999999909091990991999999990930900999 -040809101000011111121200131111141200131516141704130306020500131818180400090999009993919999919909999909909909909901099999992919999909 -080801050400080809101100041209021304121209141500161617171500160617170300999999930099911990991900910999199999199099999099990992999999 -040108080904101108090900101112020600101113141500101116171804191905170300999910391991199999919990909990199999199909199990090092999999 -080808090904051003090900101004111200021314111204151617181200150619011200990900999999299999990999999190999199909100990110999039990999 -030808080400090504101000111213140100111115141404021616161600171717170600999992900099999910909990939990999990911991991999999090999999 -080808090400011010101100121205131100121214020600151616170300041604171700999099900993999991999990909999099911090901999999909092999999 -040108080600091011081204131415151200131616151200051718021204191919190300999990399090009001999991909909999999999091990919099199999929 -080808010600091010101104091213041400151202161600171218181604051218190300999999093090990091990991909991999099990910999999009999999129 -080309090500080810111200060213140400151513041600151513161600040117171700929999919099190991909901099999909990999999999199903090999999 -080809091000080804101000011111111100061202130500141415130400041416170300909999909999999990909939999909109091999919999090999199909129 -080809090600011010101000111112131404111115160200171705180400171703181804999999009093999990919999010990919999190901099999999999999290 -060801090500101010091104121313091104021313141500161617181900161603180400099999039099999099199919000199099999091909099909999990992999 -080808080900040306020904101111121300141411041500051616171700181616011700999999291999900009919909919999919999999000199909909939909999 -080909010600080909101104121314150500021616161600170318192004171718182004099999993099910099109911909199999199990910999290099999999990 -060809090904031011111201131411111516131402041517131819191520181819051504099909090999091329999999900991090119999909909099999999099909 -040108080900101008080900101011110904120213111400151617171704150518030600999990399999099999099999990919909019090019999999090190999299 -080109050400080909101100081213141100041516141100151517021104031818180600990999399090900990199999099001999999999919999919099910929999 -040108080900101108080900121212130904141504161600061718021600171718050300999990399990099991999999911119199990990191999119999902999999 -080809101004111212100100111212130500141515161704061515021704031819201700900909999999913999999999009091999090000999999919099919921199 -080803090400080210090600111111111200011313121200141515160500041515170400929099999991100999199999999991999399999090990900909999999009 -020808090300100811111100121213141404121205041400011515150600041616161600191291909999999919999990090999999909999190993999990990909999 -080809101104080802050300011213131300061414141400151616171700041616041700991109910299999990199939999911999099999090990999909999999099 -080808010900061011120900131304050900131302140900041515161704031816161700999990903999001990999999909990999991199919090990091999929999 -040104060800090909090800101111110200101213041400100515151400101604031400999990300999991900991999999909919900999999990991999929900999 -060501080804090910080800090911121300141504161304171515021800191903181800999900039999019999919999009090199099900991999991909999999299 -040104080800090909080800051011121300101014150200161414151700180603151704990990399999909901999991119990919999190999099999909999909290 -080309100600111212121304140215161304171815151304171919202000051919012000290091909999999119909919990919099919109991990909909939999999 -080909011004050909101004111213141404111212141400110306151600111718190200099900993999909099019900990999999999999999199909992901991119 -080404090400101111090300101111091200131306041200131314021200040114140500090090999999999999992909099900999999999990999191903919999909 -030408090400100208090900111208131300141414131300040615161700051515011700909992999099199911990919199999999990990901099099999939909999 -050108080804091010110400061010121300030402121300141516121300171717171300999900309990910909919999909999999901992919991199999909999999 -080801090904080810090904111212131400021513131600171506181904051503202000999909939999109019099999009199909199990999099900009990992999 -030604080500090909021000111212131000041212141000151515141000161604010400990992090099919909919999919099999990999099999991990030999999 -060809101004110809101004110809121300011414021500041614170300051818181800990900999990999099999990919909119399999091290919999909909999 -050808010400030808090900100411091200101311041200100211141200040411061200099999993099909929990999199909999900999999991190900999999909 -030809091004041109021000121314151000121314151500121316170500061301180400219909999990019999919999999999909000999991999910999309909909 -040809090400100809090400041111121200130205120100131314151500040306151500999090999990099909900999199919999199399900999909902999999099 -080808090900101003090200111213051404111313151604111717181900041717010600999999099199929990991999990909019099909900199901999930909999 -080402090904081011121200081313120300080514140400151514140600150116171800991909011999099999192999999991999999090099999199993090999009 -080104091000081111090200081111061200131404151500161414151500050417170300999199309199919999991909099000919999990999999999909902990999 -080801040600080909090900101004021100121013141100121505161600120403161600999999030099999999991999019999199000999991990099999999909299 -040104080400090909091000111112121000110502121000041314061000031315151500990090390999999990919999999991999909090919999109999099929999 -040508090900101011110900101011110100021212130400141512161700141503060400900990990999999999999991939199099199090990990990999200999999 -040808010600040808090900041011121200131314021500131305161500040316161500099999993090919990109909999901909991999901999999909999992999 -040105080800090910110800090911111200131402151600131417061804031919191904999990309999099999990990999199009119999910099999099190929990 -040809051000010809101000040809111100041213110300141415021600061717171700090999999993199999909909199999999009999901299099999011909999 -040808090400020808090300101011120400101013140500151515141600060117161600999090999991912919999999009990999999999109099909903099999099 -050401080800090909100800040611111200131311111200140304021200141516171200999990030999909900199999909999999909990901999999992919991199 -080809090900011011120400101011131400050211151400161617181400160306041404999999090993100999909999909099099919999190999909999099929900 -040809090900011010040600111213131400111113131400021516041400050316041400099999009093999991009919909999999999991990991199909999992099 -020809010600101111111104101213131400100313131400151616171804151516050400119991913099999099090919999929999999990990999900099990999099 -080901050400021010101000111213131400111204131400111515161400031515060400199991130099999910099999909990999999999999999900929900999999 -020808080800091010030600091104041200131314151600131414171700050104171700199991992990999999990990999109009999999990091909903099999999 -080109100600081109121300081109141304080214141304151515150300160417180500990099399999900999999910990999999119909919999992909099909009 -030804040900101111120900061111131300140205131300141415161600041717011600909992090991999999900999999019999990999190999919991139909999 -080808030904101010101100121213021400051313151604171819191600040119190600999209099199999990991990919999199991900199990090903990999999 -040108090400101008091100101012021100051313141100151313140400060403140400991090399999190999919999999000199999999999090999900999999209 -080808010600020910101100121314101500161714051800161714191904030414191904999991913099090910999990919109919990999999199999129999990990 -080404060900080410110900081212120100021314151500161617031500161617170500099999900999000999099919939199099119990919999929999999999909 -080909010400080909101100080512131300080214151500161617041500160317061804999999993090900999019990999999199911999109999909999990929900 -080404090900081010020900081111120300131111121200141414140400050106151600999999001999909999912999199099999999990199999999903000999909 -060408010900101011110900101012130904141516020900140416171800140317170500909990903999090999919999190901999091999091099999999990992999 -050806010900021011120900131414120400131414120400131516170400031515171700009999093991910911199999909999999999099909999900929099999999 -080106090400080810101004111213021400111215151604171215151800171219050300999099300999099091999901919991119999919999191999999092999099 -080509090400101109090600011212121200131313040200141516171704141816170300099090999990990990099939999990919999099909199099090999909929 -080903041000081106051000021213141004121215161000171715161800171715010400929099199991999919009999090190999911999099099990999930999999 -080809101104080804101100120413100100141516171700140506171700031818180200900909999999990909099990039099199900999099999909999991929919 -080109091000081112051000081212041000080213131400031513131600151506040400999099309991009999999999099999999109099199099999929900990999 -080404010900101011090900101012131300141512131300140612040200050316161600099990903999999999019990099909999099999990199099909991992999 -080409090300100509091104121313141104151313141100151617170200150117180600099990999299999100099919090099999999999119199991993999999009 -080902101004060911051000040912130300141515161600171515181800170401181800091900919999909999192999099001099999990990990999990399999999 -030809100400111112131300111112131404050212151400011615151404061718191900290099109999999999999999090919999011999999993190090099909099 -080809090400101009091100101012131100041402151100051617171700031604010600909099999999099999099999199991199019999191090999999030929999 -030806090500080810091100021204131100041212131100141414131100041516010400299999909099909919009919999999999999090919999919999030900999 -080903041000080206041000111112131000141112051000141412151600171712010400129099999991099991909999099999999999999190099110909930999999 -080808090900020403090900101111120400131314140400011315150400061615150500990991929990999919999999909109099999099909993090990999909909 -080808090900100211090400030412120600041314121500161614171500161614010500999991199999190929109990999999909000099991999999999930990999 -080809090400080809060400100311111100120405130400120214140100151514140400999099999999099999000929999190099099099990991193990999999909 -060308080804091011120200131314121200051315151604171818191600201818011604929900999190091999099999099999199909900991999900909939909990 -040805010900101112130900140215150900141615170904181617170600031619191904099999003991110919909919999919999999009999091999929099999990 -080304090900081010110600081010021204130514151500161714181500040114181800999999200999999999900999190099109901990999990109903999999999 -040308090900101111111100041206020400131214141400151617170100151517170500990990209990999999910999099099199099999019999093999999990909 -040808090900100808110900121314110100120414111500161614050600031602170400999990999990990999099990939909999991090999099999929109991009 -040808080800091011111100090912130500141402150400141415151600040103061600999990099999999990909991009911999991999999099990903209999999 -030809090500101010090400021111111200131314041500131314161600041706011600209099199999999919990909999199909999999990099119990939900999 -060401080900101010101100121213131100041402051100151516171100031504171700999090030099999991099999999919999910990919999109999099929999 -080609100500080209090400111204130300111212140100111515151500041616161600990099099999190901019999929999999991399990990999999099909999 -080109101000080811120400131411120200130511121500130611041500130404031500990999309999110900999999919909919999999999990909999099909929 -060801090904101010090900051112131404151512161400151512020400031718191900099909039999909900190999190909199999999991099999999919921199 -080909031000080902111004080612111100081314151600171718181804171701040500992999999999199099190990999991909001999991099099099300999999 -040601080800091010100400111212131400041212131500160205131500161603130400999990030999999909100909909999999099099199991909999999992909 -080804010600080909101100121313131404151515051600041717021800031717181800999999903099901909901909990990919999099999190911999999929999 -080903040500080806101000021112101000041111131400151516171400151501170400129999990099999919099919999990099990990919999000999399999909 -040402080900101112030900101012120900011314140500151514141600151506041600901190919999192991999999999919999399099099999090999909990999 -040105080800090909091000111204061300111212140200151516171700041503171700999990300999991909991900909999919999190991999919909299999999 -080309090400081011121300081004021400081515061400161615171404160518011400929999991099009999910999019999999099099999999001099039990999 -050108080400090909041000111112121000021112121000131304141500131603060400999090309999909919999990909999999199991990999090991900992999 -020808080800090310100100111210100500130414140400131315151600170615041600199991991999993912999919909090999099099999999090909999909099 -050804090300101006111100101012120200131312121400151316161600040401171700009299091999099999991990999999919909999909190999900390999999 -080808090904040410090100021112131400150612051400161712181800160312181800999900009999913999109911909199999900991999091999992999999999 -030809090904101011021200131305041200061414151200161614171200161618010400219909991999001990909999999990999090999990999991999030990999 -080808090600101010110300121314111500121202161704011819161604052020202004990090999999999990992991099911919991119199993099099099909990 -080801090900101011090500101012130600140402131304151616160400171717180300999999039999100999999991009001999999900919099999909919999929 -080801040900050810100900061110101200131314151200131304021600040403161600999090939999090999999990999001999991999901099991900999999299 -030808090200051010111204131010111200141515111200041617171200061817010400291199999199999009999999099099999090999990990091990930909999 -050103080800090909080800100411120200101311141404131315141400061617180400992990399999999909191909119999909999900999999909999009900909 -080809010400080209101100121309101100141509101100030416061704051816161700909999993099190991999919199199999909992009099909099999900999 -080809011004080809101004111109121304141415021605141417181900202020030600909909993999909099991999910909109900909991099919999190999299 -080909011004080909111000121212121300021415161700181804061900031805191904999909993990900999919999909190009199999100099999999999929090 -080909101000080411120500080213131404081513131604151517181900031717010600999999900999999990000901990919909999909901099990929930999999 -060108040900101008090900101008111100120413110300121415021600120504171600999990390999109999999999999091999091999991299009990919999019 -080801090904100811090900101005121300041402121300151516121300030417180600999909939999019990010999999999999001999919999199929099990009 -080809100300111112041300111412151300011616021304061616171704051819171700900999090299999990999991199919199399119999991999099099900099 -050108080900101111120904131111140900131315020904161718191900160304190600999990309990919009919999909999199991900910999199992999999009 -040106080800091011120800091313121200090314020500091514161600040404161600990990390990119999999999099999199929099991999019900999999099 -040105080800090909080800041010101000111112130200040414151500061414150300990990399999909901999999999900919999190001999999999999909929 -030809100200111104121300111114141304150614140100151616170400151605171700211199999199991999019990990999999909399990990900999099999999 -040808090900101108121200100313021200101415151500161616161704061801040500099999990999199992199999119999919009999991099999090300909999 -030809101000110412101000110402131400111515061400111516161400171701051404219999919999099999109909909991999099099999999190990309999990 -080808020600030904101004010909101004111112131400151516171800151519190500991992991099999199099939190909099990099909099090999900999999 -080803060400080209101104121313141404121215141400051617170100181919191900929999990091100099199999990991999991999091999993900909909999 -080809090600011009091104101012120200041312121400041516171400181805031400999999099093191099091999999009919999999090990909990099999929 -080603090900101011020904101011121204011311141400041516141400171816190500092990999999991099919999191909999310999099999099900909909909 -080603090900101011020904101011121204011311141400041516141400171816190500092990999999991099919999091909999300999099999099900909909909 -080603090900101011020904101011121204011311141400041516141400171816190500092990999999991099919999191909999310999099999099900909909909 -030808050900100808111200101002111300040604131300141414140400151501161700999092999099900999999991199999199990990091999999909300999909 -080901101000111212121204041314140600131302140500151516171700151518040300099990030999999001990990999999999919099019999919999092999099 -080808091000011112130600141515161604141515171704141818021704141818050300999099090093909991099909090999999999909911999919099902999999 -080809090904100211051200041311111404131315161400030617181400191919011400999909099090190901990999990999199990092901999999990039999999 -040804060900030808100900110404100900111213141400110205140100151515150400009099999999909929999999999900009109999199999993991019999909 -080403090900081011020904081213051400151513131600041717181600061717011600992999099999911090190909909909999909999919990910999939909999 -080804090900080810100300110210121200111104041300141414141500050106041600990999990999999909992991199919909999091909999990903090999909 -030809100500110612021300111112141504161712141504161812141900160120191904211999991099010999999999990909999099909099099109993099999090 -080909100500080811121204130311121200131411150600160211171800161604010400990999990099099099999929999999099191999191099190990030999999 -080809031000080811121004040213141504161617141500161618191500050119190600992999919999100091999901990991999999999910999100903990999999 -040806090300101011091200101002121200041314141400151316160100171304160500909290099999919999199991999919099999990990999193909999909009 -080401050900081011040900081012130900021414141400150604160400151503161600099099939991109999999990009109999999991090099909999999992999 -040803090400050809091000110802121000110413121400111515161700111515010600029099999990999999909991999991909901199909190991999930999999 -050308091000111111120200041313121204141504161600171717160100061818181800921190909199999999991999990009199999990009999903909099999999 -080905100300080211101200080413101200081313141400151617141404040117061800909299099991119999999909999999909199990199999009003990999909 -040108090900101010111104121205110200121213141504161313061700181818031900990990309999919009091999999999019999900990190999909991999929 -080305090900100411110900120611111304021414141300041515160100171515181800290991999999099919990999900109099199999991999993909909909099 -030608080900101011040900101012120900050212131400041515141400041515010400999992009999999999009999909919199019999991990909999930909999 -080808010600020909101104121313141500161613171700181919171704031919040500999991913099911019091999919199199999991909999999129990999099 -080104040500080909090900081010110200041010111200131314061500131616031700999999300090999999991909909999919099999090199099999091999929 -050808090900061011120100131415151604040215151600171718181600170319181604099999090990113991099909900019999999999199999199999199992990 -080809101100080309041200021304121200141415150500141415150100061616160400909099290099999919999919099919099919099999999993999099909909 -080803050900080810110900021204110900121213141500061616141700041601140400999099929999199919999999999190009999990109099900999390909999 -080808020500030910101100040912101300060914141300040914151500041601151500991992991099990999999900999990199099099999990909990399909999 -080808090300100609091100120502130400120404131400121515130400121501161600999990999290991909199990199999909990099099999919999300909999 -080901101004111213101000021414151504161714181804191703181800062020200500199911139999119919909919990009099999900929999999900999999909 -080808090900100611110900121314021500161614171704161614171800050104040300999999909990990909990909199909109919909999199999903002999999 -040808090400100803090100100211110600101211110500041314141400131315040400099099929999993991919991909999999009999990090099999090999099 -080106090900081010090900081005111100121304020400141515160300141515171804999999309999919999919900999009199909090091999999999912999910 -030809101000111213021000111414151604050614171604181818171600041901171600290999109999119999919909990999199999900009999910990399909999 -050408080900101108080900120206131400151616161404150417181400031717011400999990099990999990900919999110099999009991999909920939999999 -080809090600040809090100101112130400140412020400140512151600140315151600909090999999993990919909109099999901099991999090999999992999 -080808010900051011090904121311141400040215141400161615170600160315180400999999003990919090999909099091999919999199999900999909929909 -080309091004081109091000120213141000121513160500151513171804061913010400299909999999099910999911009999999999099990999910090930900999 -040801040500090909101100121313101000121414151500121414021600120603171804099999030099999909190999199990199999999991999991990991999210 -080504090300080209091000081112131300141515161600141515161600140604010400999999009299191991999901999991099099999999999919999030909999 -080803091000080809091000111112131000011212020500061415150400041615150400999999929999999990919990909999199399099191990190999999900909 -080809101000080809101104011209021300141409151304160517151304181903200600999999999999111191910939999909199999900999999919000209909909 -040308050900101112130904141111020904151616171700151616171800151906011800929990910999909009199909110099919990999999999990990939990999 -080401091000111111121300141515121300021505120400161606120400161603171700099090930099909919099999999199999990091999999900999909992999 -080901100600080911120400081314121500021616121700181616121704191903051704999099930991119999090990909109999999191999999999119909992990 -040809030400020809061000110812121200131414150400131414161600050104161600992990999091190919990999999199099990099999991909903099999999 -080808090400101105090300121304091400121202091400151516160600040116160400999090099999099909992990999909999911191999999090903999999909 -080901031000041111041000061111121000051313120200141414141500041616160400099290039999909999999909199909919099199909999990900990999999 -080309101000080609101100120209131100041414131100151614131100051704010400929999999999999900909901999919999999990099990910990030909999 -080109100400080811111204130611111200131402151200131416151500040517180300990099309999190009999990999999199091999919999999900199999129 -080909010400080609101104081212131404151515131600031702131800191717130500099999993099910090100999990991909999999919099999929190919999 -080105090400081011111200131311111400131315150600160415171704021818180300990099390999990901990990999999909909991990999099019999919929 -040108080800091010111200091010051200090613141400090402140300041515161700999990309099909999909909999901999999999919999009909192999119 -080809100400110305021200111304141400111313141400151516161600041517010600911999291099909999910999099999999099999909199999909030990999 -080809011000080611121004031314151004041316021700181305171700181319191900909999003999991099099929000999919011199999990099999990999999 -080910111200030602111204041314151204161616151500171718181900171718010500119992919999990090199900900991999991999991099999999930990999 -080804091004050811111000120211111000131314150600131617180100031619191904990009999999090909999901999911999990099919990913929909999990 -060108080400091008110300091012130400141012151600141412021704181818180500999090399990092999919991999999109999099991099019099090999999 -040308060900100508110900120213140904121516170900121616171700181818010400929990990999999900109901090919999999099199999919990930999999 -080808090300041006090400111112091304011114020500151514141600151517181600999299099999990900099999011999109391999199999199999999990009 -080808080500060909101000010909100400111213141404111516021704111819190300999099099990999999999939009919999019909911199019090992990999 -080808080904101010100904111112130100111112121404151516170500031502180600999909990999990099909990139999999999009919099909929109991909 -080809030400080809061000041109051200041102121200011113141400041115151500992999999099009999990909999991099090999919993909999199901999 -040108080909101010100909111212041313140215031613171818191919051818200406999990309999990919909019999019909992990119099999909909099909 -080309090904080410110612080213141512051613130412171818181812171719012020299909909999009999900919909919099019099919999999999030090999 -080801090404081010101011061213141414151213131616041202171616041805171903999099030909999901909090999999999099090999999119990999900912 -080304090400101112091300100206091300141414091500161718181504050118181500299991909099099990999919909910999999991990991090003999999999 -080801090600041010100400111112121200041113130300141413131500140502161700999090030999999990190999999991999999990099299999990191999119 -080909011000080509111000041212111004131412111000031502111600041718061600099999993999999990099999011199999199992199999110999009900999 -040809010400100809111100100809110600100212121300101414041500160314040500099999993099999999990999199901999119099099099909919990929099 -080109091000081109090600081212131304081402131300040415151600171715050300999099399091999999099919990901999990990019999991999992990099 -080809101100060809091200131305141400031502161600171718161604171704010400999090990099099990990999999990909911992109999999099030999999 -040408080800091011120300091012121304091014151600091717020500060117181800999990009999099999992999990990919999199001990990903919999199 -080901101004080911101000120913141500060905161500170218041500170418180300999909939990109999990900099090099999999190990199990999999929 -080809011000081111111004021213131404150513131600171703061800171719191904909999903999990091900919990109909999991999099290999990999990 -050809090600080809090100041002111104121013141100031015141600041718141600099099999999093909109991990999999100992999999099999099900909 -080808090300100209091100101005041100041213141100060413141100151613010400999299909999199991099999909919999019999099999910909930900999 -040801091004111213131400110413131400111515150500021616171700060318171700099009030091199990999999999999999099991999091999909199992099 -080104090500080803100400111112120600111104121300141414021300150416161600990099390999990991209999999999909909999191999919909090909999 -080808080300060209101000011111121000131111141500131616161504051704181504999299199990199999109939099999099099099990999999090909909090 -080104090600080810100400110410121200111314121200111302150300160517171700990099390999199900990999099991999999999919999092909119909999 -080910110300080410120400081302121404051515120100161717121800061717181800901299099999999999190901900919999991390999990909909909999999 -080801090500080810101004041112131300141212130200141516171800141503061904999099930999099090919909099999919999999099190911999290999900 -050804060400090910101100010910101100121314150300121316170400121302171700009999090099099999999939909919999991299919990999999190991099 -050604010400080909091000111112120200130412121400131303151400161616161400999990003099990900199999919009919999999999999921909999999999 -040608040900100808040900030511110900121311110100121304141400120215141400999090099990999999009999909209999999399991999909990999911199 -080809051000010809091004111112041004111113021400151617181400060319181400999099999993190099199999900991909901999091990919909199992999 -040108090500101010100400111112121304111114141400150216171700180616160300990090309999999919990990900999999999999109990109909999909929 -080604010900081010100900111213130900140213130500041515161700041515031700999999003999990900199909999099999919090190999990999999909299 -040809090300100209090500101006111100041213131300141215150400161201150400919290199999999991990999999910099999990909099199909399909909 -080803040400080910111100020405111100121314150100121306151500041316161600999999920091199919999909099199099111399999999909999990909999 -080909100600081112100100131305100400130214100400151614171700040314171700090099999999113991999990909919999919090999999199902999999099 -060808080500030910110200121213131400121215131600171718191604041718011604099999990092111999991999919999999900099991999009099939909990 -040305040800091011120800130204120800141515120800141617170100141616170600999090209991099919999919999910999991099991999993999999909009 -080809030500080809091004040211061000121212131000011414151000041614171700992999999099199091999901999991099999099910993909990999909099 -040809040300010809021000110809101000061209131400151516171400151516051404099999990293919999919901999009909990999090999099999909999990 -080910031100080912121100080212120500131415041604061717171700181818010400992999919999990990999901999919909090900109099999999030999999 -080801090600100811120500101313141504101602171500181919171500041903171504999099930990100991909999900919999911990099999999909999999290 -040808090900010808090900101105121300101111020400101415160300141406161704099999999993919990919900909999109999999901999099999992999010 -050601080400091011120400131311121400021311151400161711151400031717150400999090030990000999999991909999099199991999991999999990929999 -080806090300100804091100101202091100101314140400100414141500160501171700909299999990999999099991109919999019999999090990909309909999 -080801091000060811091004121311091000141511090200161704181904160503191900999999939999911000999900999099919909990090199909090999999299 -080209090904081010110300081011111204131314151604171718190500171701200600919909199290999999999999900919909990009100099199999309999909 -040808090900101008090904011011021200131415161204131417031200061418190500999990999999919199119931999909199091009919999929999099909009 -040808010400091011111200131311111200050214141200031514161204171717180600999990903090090999999991999910999099999199999990021909999909 -050104080804091010101100090912021300141515161600171515061804191919190300999900309099999991990999109911199099990999199909009992999999 -080801040600080909101100050909121300141402121500141616120400031616120400999999030099909999900999999091909909099919099999999999929909 -080909101000080804101000011111120400021313131300141504161600051703160600999999099999999990009939009991999199991900991999991999902909 -080909100400050909111200061314150400131302150300161617171704160118181800090090990999990999090990999099999910991919299999093099999999 -080809030400100409111100101009021100061209131300011404150500161616160400909999992099099999999999119909999019999190993900990909999909 -040808010900060808100900111111050900121212020900030413131400041516171400099999993999901909099999999999099991192990099099999909900099 -080910011100040410121100131310121100130510121100141414021500031616060400009990993999991990999990099999999999999099199911999100929999 -080809100300050209101004111212121200131414040400151414161700060118171700991299099999199001999999999091999999990990090909903099999099 -080801090900051010101000041111111100040212041300060414151300161414031300999999039090999999919909999919009019999019999919909929909999 -080808030904101011040900101012120900131314120200151316170100050416180600999200909999909999999999999099919901199919990913909909990909 -050108080800091010101000111212131400041504130400160206131700161603131700999990309991999919909919909919909009999199991099999999992909 -030809091000080809091000021112131404061513131400161718191404040501191400299999999999990919099910990919999099999109990100000399999999 -030808091000041111021000051111121000131415160400130415150100061717171700291999991990910999909999999001099099099099999993999909909999 -080906051000080803111000011213131004141513131000141516170400041502181800909999090999999990209939990919999999099910990990909199991099 -040108060500090908101104090910100400120213141500121603171700121818181800999990390099090099999990999919909000099199999999991209999999 -080401090900081010111100081010121100050413060200041415161600171717160300099999939099919999909909999000019999999909190099999099999929 -080809040600030802101104121213131300121214151600171815151600170504011600910999919092910099919999999999109909999909990099990039999999 -080809010600080809101104121209101300141509100400031502161700051504181700909999993099919090990999909999909199992910999190999909909099 -040804010600091010111100051010111100021213041400151513041400031516161600099999003090919909999999999910009199991999999909999099929999 -030608090904101011121300021014141300151514141304151516171304051801191900909902900999999999009919999199999999009900999199090309909999 -040809100400011112131300141115151304141105020600141617171800140317171800090099009993099999999991900999109090999991999190992999999999 -080909011000080909111000061212131000021212041400150404161700151503160500999999993990909999919909109999909190991099099900999990992999 -040105080400090909100400111112130300140212120600141516171700141515171700990090390999900919999999129919999019099990999909999099999999 -080809030400080810101000041105021200061304141400151616140100151617171700992999919099999900919999019909919099999009999903999099909999 -040801090500100809091100101212121200130214151600041717041600061717031600099999939099190991999919999199999110090919999909999999909299 -030806090900080810090900041102040400121314151500121316151500120501171700999992909999909991099901099991909919999999990109999309909999 -040809101000060402100300111212121200131414150500131414161600171701041600009999909299919900199999999019999990099999990909990399999909 -060808090300101108020400121314140500121314141504161317171700161618010400991290099990910999919999999999909009909991099999999030990999 -080910101004080903111200050913021400060915151504161617171800160117170400999909999090921999991901119999999009909199099990993990999999 -040104080400091010101100090902111100121213140600121213150300160517171700999090300999999991999999199911109919999991999992909099909999 -080906100400081110100300081204131300081415131300141415021600040115051600009099999999099990992990999909999019999991999910903909999999 -040408090900101008020900101008111200051314031500161314140400161301170600999990090999919999919990919091919909299999090999999309999909 -080910011104081212131100081204141400151617141400050217170600041818180300009909903999909999910999099999999091990099999190991999909929 -040809010600051011121304141516161304141716161300171718181300031919190200009999903090999090019990910999999909990999999990999991929919 -080804091000081111120300131311020400141415151504141416171700050106171700909199091299999999919999909900199999909919999109903099999999 -080809031000080909041000111204021000131204141500131216161600061205010400999299999999999900909909019999199099199909199099999030909999 -040108090500101008111100101012121104130412120200131314031500061617181500999090390999119999999990990009919999999999199099999029900919 -040808060400030808090200101010111200050413110400141415111600141415011600099999990092911999991999019999999909990909099900999939990999 -080809100400031109100400120209101300121209101404151616161700050601181800999092199999999991990919999999909990901990091990900309999999 -040809101000051109100600121109130100121109131400031102130400151515160400009999999990010999919999939999999099099919099999929109999909 -030808090900101108120400101102121300061114120400011515120400041515160500299999990999990999199909909991909001999999993910999999909009 -050808080800090909100100041104101000111102121300040414121300031516120600099999990999903909099999999999919901190019999999999199921909 -060108091000111111110500121212130400141402151504160417171500181818170300990090309099999999199999109909199991900019999999909999999929 -060803050900080810110900021010120900041313130900141515160400040117171700029999990999999919909919009991999999990919990909903900999999 -080903040400100511111200021313141200151313141204161717180100061717181800129991990099999910099999009199999999901909991913999999909999 -030604080800091011120800131011140100130211151500161617151504161604180500990992090991909999999999939919199090999199999119099909999009 -080809090900100811040400101012021300061414151300161414151700040501150300909999999999099999000999109901199099999999990991900392999999 -080504090300100404090600111112090200111113141400151516161700151501171700090290999999999900090999919990919909999001999999999309999999 -050809090300100811121304141111121300151604121304011717120200061717181900999990909299999000999999999009999009919099193999999901909119 -080910100400080906110500080904111200130902141400151617141400040117170300009099999999099999990990999999009119991919991919903992999999 -080910101000080911110100080411121300040212121300031415051300161704061300909999990990993999919990909099999919999109999909921999910909 -080504010600080910111200021314111100151616170400151616171704150318181800999999003099919900190911999199009990999999999999099990929999 -040106080804091010080400111012121200110502131400110315131400111617131800999900309099999909909901999909199991999919999999992190991909 -080809050300101112131300141115130200141115151604141718181904060118180400990990909299099909999999919999919919109199990090003990999999 -020808010600090808101000090404101000090411121300031415051300041415151300199991993099919990099999999999009900992900999099999999909999 -080808080400020910110100121213131404121513131404050306161700181819191900999099119991913919909999900999999199909290999990909090990999 -040808030900100808090900100211120500101311141400011515141600041515040600092999999999909991909919909999999100999199993990999990909099 -080909061000080909111100080412130100141415160500140217181804031917181804999099999099909999099990139091099919099190999199099999921990 -080809011000041109091004120313131000120613131400120215161700120518181804999999093990099099919929999999909909099910991190990990999990 -040105080600090910101000090411110200041213141500161613141400161613030400990990390099199999091909999990919909190099999999999920999999 -080106090400081011121200131411111500131617021500130518181504130318041500999099300999009901990909999919999911999991990999099999992099 -050108080400091008080600111213141404151513141400160217171700161603180400999090399991090910999990090199999999999109991999999909990909 -080909030400080909101100080212101304141516051700181616191704060119191700999999992090999999990991111019999190991999991999003099999909 -040108080900101108080904101111120400101313131300101402150300051406161700999090399999999099099909009919999999999919999019999912909019 -050608080400090208030400091011111200091313141400091313141400151516010400909090992999199991990999909919099999999999990919999030990999 -080809090600010809090400101011121200101002121300041414151600051703150400999099999993999991090990099999999919090919099919990990909299 -080808090900041003090900110212131400111512130500161612171804161606010400999999129999999901990999909919999099999190099110099930990999 -050809090400080809090400100211061200101314141200151314161200041303010400099099999999099999090901999911099999990991999990909930992999 -040801090900101011090900100411121200021306121200041415160500031715161600099999039999109999999990099199999109990199099009991999929999 -080509101004081109121004131409150100141402161600060417161600181818190300909909999999010000919999939091099999990919999999990199999129 -040105080804090910080800090911120600131411151600040311021600171718181600999900309999009999999991909999099000090999999919992919991999 -080910100600031102040500041213131400121213131504161717180100161717181800199092109999109999190999999099909909000919999913999999999999 -080808080400090510110100090212121300141512121300141416061304031704181800999099900999093999919901909919999999999199999090091090929999 -050808010400090808101100091213131304141212151604171718060200170319191900099999993090909990910999990099199999100909199909999991992999 -080803090900040810090900110610040200110510121300141415150400141401151600992999999990099999991990909999919909190901999099999390999909 -080809100400080305101100021213131100141213131100141215161700061201040400990099209999990919999919999999999099099900999190999300909999 -080909090900081011051200081313031200081304141504011616021700061818180400999999099999009990999909999999209999119009193991991919909909 -060108080804091010101000111112131304141502131304161617171800031917170500999900309990999999190991990919999019900919099999999990921999 -080910031100081213131104080206131105141516171800191920181804191901212104912999199999999091999900911919199111991999999109099309999990 -080801091004080211091000031212091000131304091000131314141400061516051704999909139999910921999999199900999999999999099999999090900900 -080109050400080810111200131414041500131616021500131716041500131706031500990999309099900901099999999919099991199090999999999099999929 -080909010500080909101100081212131404041212151604171702181600170306191900999999993099999999010909900999199990000991999119999909929099 -030806090900100808020400110512130400110412131400111512131600111501131700990992990991910999919990999999909991999099099099999390909909 -080504030900081011060900121311040900131311140200041515161600171501161600999299009990909909999999999099019909999900199919909399909999 -080305091000111213061404150213161600151717041804151719191800150119191800290091999091999091900910999999909990909999991090993999999999 -040108080800090909040400051010111100121213111100121202140300061515161700999990309099909901999999099991999909999919999919909912999019 -080104090900081011090400121314141400151515040200161606031700161605171700999999309990100990199909999099019999999009199999999929990999 -080808010400050909101000110912101000040212131400031515040600161517171700999990903099919999999909099019009999999190099999929099919999 -030809101100121309141104021516161100151505161700061818191704201818011704290999190991999119909999919199999999099101999919009939909990 -080309091004081111091000080612021000081314150500161718191904160120191904929909999999999999019990109991999010099199990099093099999090 -080801090900061011090900121313131404151617171804150517170200150319202004999999039990919990091909990099019099909099199999999991992190 -030808091000111112091000111102131004140604151004141617180100141616190500299099919999999999199999110099999999109001990903999909999009 -080801090600080810090500111112091304021415091300141416171704030418171700999099939999000999199991900191999199999919999999129199990199 -040801090500101011111104101012130600041402151500161417171800161617170300099099030999199099099999009019999911999909199999990992999999 -080808080500030909090200041010111200131014111504160617181800161601181804999999990092991999991999999099919009900000199919999399999990 -080809090904010810110500121310141404151617141400181802191904181806032000999919919993900991909901990019999919990919999919099091999929 -040108090900100808090400100411110600100412131300140405131300021515150300990990399991990990099999909990999090991909990999919999919929 -030809101004110809101200110809131400150216170100061818171704041818190500999902999999990999990999009100999119390919999919099909909909 -040809100600011109121200131109121200131402041500131617171504051817170300010099199993999999999999099991009909999019990999090999909929 -080808080900040610100200111112031300141212151500141604151500141705010400999190991199999990921999999909919090999009999999990930990999 -080910011100040912121100061313121104021313051100141415161700031404181800009990903999990999199909990999999190991909099990999009929999 -060809101000010808101000021112130400141212151600140405171600140318181604000999999993999999199911099199009999099990990909999999929900 -050806010400090910111100090912121304141414121300041515151500031617180200009999093099009999919999990990999999190999199999999991921119 -040808010500090810101100120610100400121313131400031502161400151517041400999990903090990900990999999999199999099991999919929199991909 -080905100300080911101204081314150200081616171800191916201804191901061804909299999999091099091900919909199999999091999910099309999990 -040808080800091005110100090212121200131314140400131515151500030616041700099999101990993991999990999919909909999099999999929090990909 -040408080800091011110300090211111200131313130600141515161700141501050400999990009990999999992991919019909999991999991900999300999999 -080409090900081010041100051010041100121314021500011616041500061616031500999999009990909999999999999090009091199019993990999999909929 -080804090904041011090300121314141500161616141500011717021500061717180500999909009999009909902900999999999990199991993999999919909109 -040106080900101011110400100511111200131302141200131515161600031515170400999090300099099999999999999109099919099910999999999999929009 -040808080800090909090300050210111100011213111100041213130600041214150400999990990999992901999991999991999399999990990190999999900009 -040108080900101108081200101314141200100506151500101617021500161603040400999090399090199990199999999909199990999991999119999900992999 -080109090600081009111204131411111504131416161704131402050300131418192000999999399090999091090990990990909099009999999109999192999119 -080808010600090910111200090913131300140402150400141616171704031816051700999999903099091999091999999099109991999010999999099999921099 -080804010900060810110900121212111300050214111300031514141300161704041300999999903990910990190999999019999990999199999999921909910999 -080808080904101112120900011112121300141115151600060417020500031717180400999900999990999999990930909999909019990091099919999909929909 -080902100600110412100400031314140500131315151504161617181800161601181800119091919999900920199999999991909999900919099099999399999999 -050808090300100204110100121313110400121413111500121414061600121717170400991290199990903901999999199909909999099999099909999990909999 -060308050400090909090200101010111100041212121100131314151600041304011600929990910099991999091999999999999099099909199091909039999999 -060104080900101112121300101415121300101402161604101417170500041417170300999090300090199999199991999999999910909919999990909999999929 -080909031000080909041000041112051000041113130200011113131400061115041400999299999990909999099909999990019099199999993190999099909099 -080910100600080410100100081111121200041313131200141402051500141416030400009099999999093999199999099991999099999919099190999990991299 -040804090900101112121300100212121304101415151300101616151700031606010500099999009099999990999991900919199199999999099909929930990999 -080501090900080810090904111213130600021214151500161204151504171803191900999999039999199091909910909199099909991909999999019909912999 -040808080800010910111100061210041100131314151600131305041600021717170300099999090993999991999900099910999990099990999099919999919929 -080809090900030804101000050211041000041213141500161617140100161617140600999992999099999991009901999991909091099099999903999999990909 -040804090600100811111200131314031200131314141200151515021200040116170500999090900990999909099999929999999909999099999991903119999109 -080809010400080809091000110412121300060412121300051414020400031514161600909999993099990909190990999099999909999991990910999909921999 -080409090900081002110300080612051304081414151300161414171804160119191900999999011990992999199909990991099990990990090990093909999999 -080504010900101011120900061011120900130211120900140404151600140315151700099990903999999909999990109999999119991009099999999990929909 -080809101000080803051100121212041300021404151604141417170100181817170600900999999999290919990999909199909199009900999193990999999909 -050104040600080909090900101112131400101512021600101512170300101818171704999990300090999900199999919909119991999990299999999999909990 -040106080800090909020800101112130300141415150400141415161600051717170400999990301999999991912901199099099999099990999999900999999909 -040408090300101008110600101208110200131414151500131414151500050116170400909290991999999999990909019909919999999999990919903099999009 -050804091000110803120200040813141404151513131400151516161600171701061800990190991190929999991999990009999999999909199099990390999909 -080801060900041010101000111111021200130414151504131617151500051817170300999099039090999999991999019099199900909909999099990992909999 -040408080500090608081000090911031200011111131300041404021500161616161500909990999099099999090999999909209399999199199091901919999999 -040108091000111111091000121313090400051302061400151516141404151517180300990090309999999919990919999991999090999019999909099199999129 -080808090904041010090100111010121200021305141200151606171700041603171700990909999990913999909919999199099190990190999099909999992999 -080909101004110902100300111212121300141505061300141617181304140119201304099900999299919990199999999919999909099199990090093009999090 -030808090900040808020400101111111100061212121200131314151600051414010400299999990999919909910909999999199099999919099019999930909999 -080808080300060209100400111104041200111113121200141313151600140401051600999299199990009991000999999999999990999199990900990399999909 -080804090904100511030900121314150200121616151700121616151800120106191904999900902999999900091909099999919999999999190911993090999990 -080401090400080810111200131314110400151305111600151717021600031717061600999099030999910990090990999099999990099991999919999909929999 -060808030400090810041100090210121200091314121200151515151600050117170400092999999099909991990910999999999000991999999990903090999999 -040801090900100811090900100812131300101402061304100515161700180403161700999990939999109999999900099919099919909019099919909999909299 -060809051004111109121000131114021004131516171704131819171700130120200300099909090999909999909909190991109919909199990099993092999999 -080803091004080511121004021311141404151611141400171811190100171818200600929009990999909010999919990919999010990999999913999009999909 -060108090900101108090400121308141400151508040500151504161600021717170300999990399991999919900900099199999990999999099999919009919929 -060808030900100808110900100205110904101213141500101616171504040116181500992990999999990991999999990910099010999919999909003909999909 -060808080804091010031100121302111104131314150500161718191900040118191900099909099990992909999999190091999919091990991009903999999999 -080808090900021011090300120506131300121414131304121516161704120116160400999990999991112910999999099999999099909999091090093999999909 -080804091000080805110300121313020400121304141500121617141500120117140600909199991299999909019999109999999999999109990000993999999909 -040808080900100603110900101004020900121212121300050414150100161614140400999990021999999999919990919909919999199991999993900909990909 -040809031000080809041000110209051000121213141500121213161700040601161600092999999999990909999911999199009999999990099100900399999999 -080209011004081111101004081111121204031313121400151313161700061818190500119909913999999099919999191299999990099990090999909900999099 -080809010400080809101104121309141404051509141400161503170200161817170600999999993099991009991909090909999009999999199991999290900999 -040803090500100806111104100802111100101213141500161617181900161717011904029099990999909099999991999991909919090190099119999939999990 -060305040400080809090900080210101100041210101100041314141100131315010400999990200099999999099919999919999019999991990990999030990999 -080309100400081112041300080214061300081414151300161717151804050117151800990099209991990999099911909999999999999919090900003999999999 -050808010900100808110904121212131404040215161600171818181600171719030600999990993999919009100999900991999010999199999999990190999299 -080906011000080909101000111112120500111112121300031402041500161704181804999999903999909900910999999999999999099919099109921090919990 -080808090900031011090500121314151504121216151504060217181900202020011904999999909992999991000999090919999990909109999910901139999990 -080801090904101011090904101012130400141212131300141502160300061705181900999909039999199099909991099999909099999919999019990012909919 -060108080400091008111100121314151600121205021604171819191604170319191600999090399990119900919990909990199999900991999199092999999999 -040806010500090910101000090911121300040211141500161614141500041617031500009999093099099999190999909099009919999199999999909999991299 -080906100500080904100100080911111100040912121304141512121300031617180200990099999990093999919990999999199999100999990099999991921119 -030804090400100811120400130814051500130214141500011617171500161617170600990092990999909919090999099909999119999991993190999999999909 -080808010900101011120900100213141404151504161600151517161600030405180600999999903999110999099919090919099999999909999909920900999099 -050809100400111110100100111112120600131313120200141415151504141403160400000099099999993999199999909909999999199099199999099910999299 -080808010400040906101000110909101000020512120400131312121400031304151500999990093099909999999919199109099999991999099990999009929999 -040408080800090210111104031210111100121213140100151515150500061616171800909990990990199091999999999291099991399990999999999000909909 -050106080900101010100400111212131304141212151500141404151500021617170300999090300099999910909999990199099999999999999099919999911929 -050803040900080810040900021106120900131112120900141414141500041617011500999090929999190919999999099199999909991990099990999039900999 -050806030900101112130900101014020900151616160900151704181904150118181904009999092999019999199999199909199999099190990099093999999900 -080305040900080610111200081313111200021313041200141415151600140115170400299099909099099999099999099199999199999910099190993909999909 -040308080600091010080400111010021200131313141200151516161600150105170400999090299999990909909999109099199991999919999199993009999909 -080309050400080609101100081213021100080413141500161713181504161613011500929999990099019999919900999999109991999099999010099939990999 -030804010500090210111100091213131100090413131400041516061400171716161400909992093099199991119919999999909909999900990099990999999999 -040808090400010808101100121213050600140215151600141715151600141717031604090099999993900991090999099199999109099199999999999999999290 -030808080400090210111204090913110600011415111600171718111604171718180500999992990099190091199999909991999310099009999999099990999999 -080910101100080812030600021314141400151516160400151716160400050118181804909099099099129919999919999910909999999999991090903099999990 -080609031000080809101000110409020400110504121200111314121200110115161600909299999999999909919909099999109099999909990119993099999099 -080805030900100811120904100211130900101414150900011414161700181804060400999999902990999199919911119999099199999990993990990000999999 -080910111100030602120400041313121400151515121400050416121400171717011400119992910999919990990909099999999990999099999900909039999999 -080808010500020910101100120610101300141504161704141515181700031919191904999999113091999919990990909190009999909990999909929909999990 -080309090900080405100200081112041300141516161300140616161304171718011300929999991999901990991900099000999999999099999991099039990999 -080804090300101011090904101004120200131313131400151515161700051818010600999990909299099099019999919909919999199919099919909030999999 -080910031100080410121300081410020500151516161704151516161700060104181800099299099199991999919909909900199919909999999990903009999999 -080305091000081112091004081111021000081313141000151617140400061801141904999999209999090099999999119999999099190999990019990390909900 -080801090904080810091104121310111100121405060200121516031704121818192000999909939999009009999990199900019999999099199099099021999919 -040106080500091010111104121010111300121414141300120215151304121617180300999090300999999009990919099999999199999199999099091999991129 -040803090900101010090900111202130500110413131400151516161600150417010600029999199999999991900991999991999999190099199099999030990999 -080504091004081102090300081112130400081114141500161617181800161601180600099109909299919999199999199999109099090991999019999399999909 -080909090900081010050300081112131304081402041300011516171804151516190600999999099999909990992999190901999090999019993990099900991099 -080109090904081011041200081314151200080216061200031718191904171718051900999909309999099991909910099990999190999109099909029909999999 -040805010400090810101100090410100300121314141500120414141500120604021500999990903090090999999999999909129009999999999099999019909919 -080905101000040902100300111212130400111212130100111414131504111406161700090990999299019999199999909999999999399919999910099990909009 -080809050300080610111200041313111204141313021200151616161600171717010400900999009299999999099999990099099991190199990999999030999999 -030808080800090910021100121213140400121516160400011516160600051517171804999992990999110999910999199991999099099999993199999090909900 -080909101104081212130300081206020500141414141500161617171704160118190400999109091290999999919999999900109999999199099099093099999009 -080801090900080810111100120205111100041306141500161614141500031604171504999999930999109919999919099019099990999199999990929999999000 -080804030900081010111200131404020400131515151500131616171700130105170600999299909199991900910999099909199999999190990999993990999099 -080409010600081010101000081104121200041305021400151516161400150316161400909999903099999990991900999909109090999091999999999999992999 -080808080900101112040900061112021300041412131300011515041600041515050300999090909999909909999990199999199019999199193909999992909099 -040808030900020808100900111205100900130414101504161614101500161601061700992990999991990919999900999199999990901099999190999390999909 -040808060300090909091000051112131400011113131500161617170200160417170400999990900299999999091909999990919319999091199991999990990999 -040106080800091010080400090410111100091213040300040214141400051515151500999990309990909999990909099991999910990199299199990999909999 -080910031104021205131100141414131500061616131504171616181800041901181800112901999999090910999999999991999999900990090909990399909999 -030805090900100808090900101112131400100404061404021515161600171515011600990992999999999999090990009909999999011909199919919939919999 -080609090300080209091000110412121000111112131004141515151500050116170400999299099991199919999909999999999909009190990999903099999009 -080809090900011004111100121313111100121313040600021415161700051414030400909999090993099991999919999999909990991909991900909990999299 -050108080900101010080900111112131400111115060400040216161604171717170300999090399999909999109991909990009999990109999999091999999929 -080909090300080410111104081202110500131212141500161617181900161606011904999299919990999099199991999099009099099010999910999039999990 -080901101000080909101004081111121200051113121200141502161700060418031704999999939990909099199999199999999091999019990911909099990920 -080109100500080809101000111109121204111102121204061314150400161616170300999099399999199990909999190999999991909919090019999019999929 -080901101004080911101000080912121200130902140400051516171804031519190600999909939999999999109991999099999010090910999190099090929999 -040809011000051111101000121111041300120404141300121515160200120316160600009999903990909999901909999999999090999990190991999990992999 -050809091000110809091000110812131300010814061300030402041504161616171800999990999999999999090901099991999390999919099999020100999909 -040809011000041111121000131111141000130415141000131515160200050317160600009999903990901999999909099900999999999999199991909990992199 -030805091000040811091004121302091000121415091600121718061600120119191904299999909999199009199909109909909991999019999109993099999990 -040108080400091008111200131004110600131014151600130217171600130517170300999990399091000919099999999999909900099999991199999999909929 -080809090900101010100100061111121200041113141200150204051600041717170300909999990999993909919999199999099090999109090990901999999929 -080808010904101111120900021104121200131415161600131718161600130305040600999909093991910919999999099199099900999099999099999000929999 -050808080300090210041100090912041100131212141100151515150400060116171700999290199991909999099999099199999990091099999990903099999099 -080910031100080910121100080204041104081314051500011617171800161617170600999999992999119991999910900999909100999199093090999990999999 -080909010600100909111200101313141204100513021200151617181204161617030400099990993099901999999999910999199901990919999919009920999999 -080808080200040309090900101111121300041114120400151506120100151516160500999199299199999909991909919090909990999999999903999909990909 -080806090400080810090900040211121300141411121504141611121700031611010500999099909999999990090901999919909999909999099010929930999999 -080605010300080910101100081210101300141215151604141715150200141704180400999999003290099999991990999099119999909999199091999909999009 -080509100600080810100100111112131400111115021404161617171400161604031404909099909999993990199990199999199991000919999999999929990990 -030808040900101008020900101011110904051211111300141215160400141201170600299999990999919999919990900999999009099919099909999309909909 -080309090904101111120500130211120100141415121604061515121600171819201604299911991999990919999911939991999991009099999999909909900090 -080909031000111202131400061516161704181516191704181520211704181501212105099290099199011909199999990999999910009990990199099399999990 -080802090904081010090900031111111100121314150100061617150500161604151804911909999999909929919999999909199090390909999099999990999000 -080401040900080810110900121314110900121504060200121616171700051616170300999099039999019999099900919999919009999990199909909999999929 -080909041000030402101000111213141500111216161500111216161500061205010400190992919999019999919990999990199099099999999999999030909999 -040808080800090910100400011111111100051213031400121215151600060415021700999990099099999990099939999991999909290919199999900991999119 -030808080200090904101100060912101100131314100100131315160400170415150500299199999199999999099999919000999990399990999000909999909909 -080808010900021011110900120511110400131313131404150306041600151517181600999991193999190910999999909199999999001909092999999909990099 -040809090400051009090100111112121300111102141300150316161600151504170600099099099990993990199991999999999911990991099299999009999909 -080808090900031011090900061011111200021005130400141415150100041615170400999999909992999999990999909099099190091990999193990909909909 -080808010900101010100900051112040900130212120904141503160400141517180600999999903999990991099999099019999099900190999990999209991909 -050809100300060211111100121213141400121204041400151516161600150117170400011299199999099901999999099990099999991999099099993900999999 -080309091000081111121004081311021400081313150400011616161600051718060400999999290999990099909999109999109099999091993999990990900099 -030808090600040810091104121302141100151617141104181819141100180119140500299999999099190009199911999199999100909199999090993990999999 -060408090900101010090900011112040500131412151500161402150300041717171700900990909999999991100939999909999099990919999909909192999999 -080804091000080311041000020411051000121313131400121215161600040601161600909099290999999919999999999100009999999990099109900399999999 -080808090904061011090900031111121300051404151304021615150100171819191900990909999990999990909929999919099990111199991993919199911999 -040108091000111111051000121213131004141215020400161617181800161606031800990090309999999991909990990099999911090991999099999099999929 -060809091004041109091000121212120500021313140400150313160100171718181800099009099990999990099999909990999191091991999993912909999999 -050809040300101109121200101113121200141113020400151113161600060117160400000999099299999999999999999099199999990991090199903199999109 -080309091000080402091004081112061000051314151000041614171800161614011800929999999999919090199909999901099009099999090010999939999999 -080910111104080412120400081313141500011313160200171818160500061818160300000909999999990990099909119999919399199099090999909999999929 -060108090500101010111100041213111100041413151500031602151500041616171700990990300099999909199990999909099099999919992999999109909999 -080309090900080802060400101011051200131311141500131311160100040411171700299999909999109999190999909909909999099990999013900909999999 -030608080900101104120900101113130904100214130100101516170500181818180400999992090990909999909999900999999191399110999190999099999909 -060401080800091011121300141414151600021717150500181717191904181803191904999990039091100919900999999199909999991990990999099999992990 -080909010500100909111200041313110600021313110400141515111600141403041600099990993099900909990999199999999199991909099990999909992999 -080801090904080810111105121212111104061314150200161616161700181803192004999909930999919090999999090909199009199909199999990991999210 -080909010400101109121300061104141400150502141400151616041700031616171700099990993099001909091999999999999901999919091990929999999999 -060809090904011010101000111213140500111504160200041515171700181818170300009919919993999990199909109990199099190999199999990999999929 -040108090900101010090904111111060400121213140500120215151600171715150300990990309999999019990999999910099990099199999191990992999999 -040608030904020808050900101112041300101114151300101617181300100118181300902900999991909919990999099990999900099099991009993999999999 -040809101100010909101100121314151500121605151504121717021804121717060300090999099993999991990990999910999999909191190919099992999099 -080805010904081011110900121311111400120615021600171715181904171715032004909909093999990990999900919999919900199991999091099991999920 -080109090400081010091100081213141500160213051700160413180600160313181804999999399090990999100991099919909199099099099909999999929990 -080808090400051010110100030412120600130212141400131315141400161616170400999099900990903999919999999209009919999199999909999009999909 -040401080800091011111200130214121200151505161600151504161600031717170600999990039099999900919911199199099990999999999909929900999999 -080808050400030902101100090912131404151512161400151712181400061712010400999992190099190999109999090999999909099990999919909930990999 -080809090400011011111104061012121300141012121504161017031800021917170500909999099093099099999990909099909199901999099929919990911999 -040809090300100809090600101102121300101111121200101415150500041601170400999290999990999999190999999991909999999190090199990309909909 -080910110500040212121300141404120300141406151500011617171700161618181804000090990999191991992990999999999909999190993099999099999990 -080809090500010809091000041111041000121111131400150406141400021617170300999999999093090991909999999099999190091009999999919999911929 -030809041000110412021000111113131000141413130100141506161600040517171700219099019999911999999990919909999999399000999999900990999999 -080803090400080810111100121314150600120204161704121816161700181805011700999099920999999990109991999919009199909909991190999939990999 -080901041000080909111000121213131404121213131500060216051700031616041800999999930990999991900990900999909999999190090199999990929909 -050104040600080808090900101011090900121213130300120213131400041515041600999990300099999919999990099199999999299199999190900990999909 -080809090600011009110400121213141500121216021504171718181504171705031500909099099993990991909991199999199991911919999991099929990999 -080803010400080204091000111212090600131212091400131516091400131504040500929999993091900991999909109099999999099909990999999000999999 -080808010400090910101100121313131400061515021600031515171704041805171700999999903099091999901909999099919991199999092999090999909099 -050801090904030810090900110812130400111212141400110215161700061819171704099909939999009929199999009999999990999199991900900099990990 -080609101104080802050300121314151500161616151504171718181800171919010400091109919299999909109909999901999990909919999099999030999999 -030809101004111213021404111212141400110615160100171717181804051920181800219909910999911099999909099909199990399900999999099099900999 -040108090900101112090900131415150600041415161604171405160300170218181800990990309990099991099909909099999990909999990999991092991999 -060809030500100808111204130214151500161614151504171714181900171714011904992990919099990001909901999999999999900999099010999939999990 -040808080904011011090900121211130500120211141400151617141400060318180400099919099993199990919999109999999910990199999199909190992999 -080909100300080209101004081105121300011415161704181818180600191919202004999999999291119199009919909919009390909909099999999009999990 -080909100300080209100304081109101200011113101204141413141200151513141604999999999290119099009919909909009990909909099999999009999990 -080809100308080209051008080211051201011113121213131313120614141414151504999999999290019099009909909909009990909909099999999009999990 -080909101000080809101010080809101000010811101010121211111000131311111111999999999290019099009909909909009990909909099999999009999990 -080909100300080209101004081105121300010114151604171717170600181818191904999999999290019199009919909939009990909909099999999009999990 -080909100300080209101004081105121300011415161704181818180600191919202004999999999290019199009919909919009390909909099999999009999990 -080801060904081010101100121313130400141516050300040216171700181818181700999009039099990901990999999019999999990190299119990999999999 -040401080800091011111200091011110400091005131300090414060200040314141500999990039090090999990999999990199999999999190990909991992919 -040401080800091011111200091011110400091005131300090414060200040314141500999990099090090999990999999990099999999999090990909991992919 -040408090900101108081200101108080400101105131300100414060200040314141500999990099090090999990999999990099999999999090990909990992919 -040401080800091001011100091001010400091005121200090413060200040313131400999990099090090999990999999990099999999999090990909990992919 -040401080800091011111200091011110400091005131300090414060200040314141500999990039090090999990999999990199999999999190990909991992919 -080804090300100511090400121202091300121214140100061514141600151504171600999290909999909900990999109991999999399099990099999909990909 -030808080800091005021100090412131400091212061400151516161400041504010400299999091990991999091999009909999999999090999991999030909999 -040802090300051011111100041012120100131012121400151004161400150616161400019299111990999999999991939099999099090900999999999999990999 -080806030900080805101100121204041100131414150200161414151500040117171700909299999199900990909999999900919099190999999919903099999999 -050601080800091011111104121213140400121202151500161617170400161617180300999990030990999090190991099999099919990919999990999999999129 -050108080400090908080600101111121204101111131200100214131300150416170300999090399999099991990919990999099990999999991199909199909129 -050809060400011009041100121209131300141409131300021503161600041717171600000999999093090991990999099919999999991990991999991299909999 -080801090900080810101000111104120400111105130300141414021500161606171804999999939099099990910999099999199999999901299909909911999010 -040801090900101112090500101314151500161616151504060217170400181817170300099999039090909990199991099919999999909199090199999999990929 -050404080800091010021100121010131300140306131300141515151600141704011600999990009090910909919999999029999999999901999990990939990999 -030809100600111205021304111214151600111714141600111718191604202020011604211999991099909099910909199909999909999991999900099039999990 -030808050900101008020900111012130904111415160904171717170100181906202004299999990999911999999990010999199009909901999993909909900990 -080808090900030402091000111112131000141115151004161718181904050118180600999992019999999999109991999999099099000109099099003990999999 -040408080500090908081000091112131300141115130100031102161700041106161700909990999099099999900999199991999199392919999100999999900999 -040106050400080808080900101010040900111102040900110312131400041513131400999990300099990919909999999919999919099919999990902199991999 -040408090900101108121200011308121200061402150500141404161600031717161600999990090990999990999931199999199011099990999099991999929999 -030809101000110409101000121202130600141204130400141516171700140501171700909992099999909919909991109990999999999991090019990399999999 -080808010900051010090904041010111200131415061200130215151200041617180300999990903999919099909999909010999999099199990999991999901129 -050108090900101108120900131414121504131414120600161702181800190304181804999990399990090991999909000999909999999910991199919099929990 -080306091000081112121300081412021304041515161300171818161300051818010400990099299099199999919900910999999999990909990901999930909999 -030806090500040808091000111202091000041313090100041313141400151504141400290099999999990909199900999991999099399991999919900099999999 -080809010400080809101100121309141104121314141100150206051100041617180300999999993099010909909991990999999999999109990990901999991129 -080809101004081112100100131415031600061415171604181815191604181802200500909909909999013900199999999099299999909991999090099119999109 -080309041000081112101000050212121300061415161300011717161304041717161800290999909991909991999901999991999009999919993999099990909009 -080805040400080809090900041011111200130211110100131306141400150304161600999999900099099999990901909919999999339190999909919909929099 -080805040400080809090900041011111200130211110100131306141400150304161600999999900099099999990901909919999999399190999909919909929099 -080909091000080811021004031205130400141515161700141515181804140619011800999999099999111120919990999999109999199999190909099039990999 -030808080500040906021000090911110400041212121200131313041400041501141400299999991090990999019999999901909999990910099999990399909999 -040801090904100811091200130814141200150816171200041616021200031818050600999900939999010909919909999099199999990991999919999100929999 -080808090400041010110100051212111300140212111300150616111300170316160400990090990999903999999999109019999199991099999999919900929999 -080808080600090210110100091212131400091515161700031518191704041818051704999099911991193999909999009999909990092990999909099999909900 -080909090900080510031100121210100200121213141500161713131500040406011504999999992199099909991999919991999909090990999099900039999990 -080309090900080810101104041213021404051513161700181813191900061801191900999999299099199099910900990999109099199099199019999399909999 -080808010600050910111100121304111100121414141400151616170200040304171700999999903090009990099909999999919999990999199911902999999099 -030804090900100811090900101002120500011313121400151313121604151504170600990992999999909990099991199999909391999999099990090909990909 -030809010600100409111200101002131200041415041200161615171200161617170500219999993099991990199990119900099099999099999990999990999999 -030808080500091011121304041402120400061414120100151617181800161617181800999992990091190099199901909999999991390900990999999999990999 -080103091000081111021000081111121204131415041204131617180600131616190500992199399999911999999909090909999000909099099909999009999909 -080808080900101002040600111112121200011113040300141513130500041616161700999099110099999991199999999999929300999099990999900990999909 -040809090400080809090600101011110100121011110500020404131400151515031400099099999999090999909991939999999199091090999900919999999299 -080809090904030810111104120213111100121415151504051616171800191616010600999912919999999091199991199999199099909091099909909930909999 -080809090904030810111104120213111100121415151504051616171800191616010600999912919999999091199991199999199099909091099909909900909999 -080809090904030810111104120213111100121415151504051616171800191616010600999902909999999091099991199999199099909091099909909930909999 -040308090900100411110200100412110500101314151500041313151500161616010600921990999199091999990990999990199090990999999909999030999999 -040808080300090210111100120613041100141413151500141413161600040113170500999290109991909910999999099199999900999999999909903999999009 -080901101000080911101004040912130600140915020400161616171800050317171800099999939999019099919999109091999991090991999900909999992999 -050108080800091011120600091013130200091014131500041016151504171718031904999990309990110999919999919990919999999909990999099091990920 -040108080800090909101000060211101000031213141400151216171700040405171700999990309999919999999901199910999990992990991099900099999999 -080801060900101111120904131111140904021515151500161718191905031720211904999099039991900019909999990199099999991999991099099009929090 -080801040904080810100900111210130900040614141500031605141500171718021500999009939999999990999900009091999909099909992999991919991199 -080509101000080409101000111209130100140215161600140417160300140617170400909999999999019909919901939019999911999009299999999999909909 -080809101000080809100400011111121200051314121200040215151500061617040300909999999999900990999939099991999019999199990199990992900099 -060508080300090908081000090911101000041211021300011411151604171711150400909990999299999999909990999999199099199099193111099990990999 -080801090900080810101000111204131300021414151300041416150600031705150400999999930999199910909990999199099199999999090099991099929909 -080803090400080809090400021010111200131410151504161417151500050601181800929099999999999919090909909199099999901999991109900309999999 -080801060900101112090904131414151500161414151500160205041704181818180300999999030990009009199999099099999999999109099990091999999929 -040801090900100811121304140815161604051717161600061702181800191919031800999990939090100099999901090091999999999919990919990999999929 -080804010500060909101000040909111004121314141500121314140200120316171800999999003090909999999909090909019999999999190999999991992119 -040809061000010809111000121209051004131402151000131616171800131616040300010999999993900999999990990991099001999091999991999902999999 -080804010900080810110900051210110900131314040900130415040200060316161600999999903999099999999990019000999990999909199090909991992999 -040808010900100811120900100213130900141413130600141404151600030517170400099999913999919991909909909919999999099990999900920900999999 -080209101004111112101000130314150100131414160500131718191904062018191904119901919999919992919999039999099999099900990099090999909990 -080801090500081011121300141011131304141511160200141718160400140603160400999099030999019999919909990999919909199099099919990299999909 -060108080900101111120900101111121304100205121400101515121600041517030400999990309990900999990999990919909909999199099999999990901299 -040405030800090910060800090911020800121314141500161617141500040117171500999290009999999999009999119091999019999199999090903999999999 -030808040900040410021100121204111100131314151500131314151500040114060500299099919099019909919999999090199991999999999199903990999099 -040809091000060209031000111111121000131314140100151614141700051616040400019999199990929991999999009991999909399999990990909090999099 -030808050900100808020900061104040904111112130900141515161700141515011700999992990991911909009999990999999900199901990990999939999999 -080909030600020510111104121314111104151617171700181819192004180119192000192991999099909010099900990199999199999109999099093999999909 -030108080500091010101004111213140400110215161600111515171600181818060400999992390099999011990991099991099119999990999999999000999999 -080808010900101010100900111213131400050415041400031602061400161604171400999999903999990999190900999091999909099919999190929999999009 -060808010900040808100900041105100900121204100900121213130200040314151500099999993990901990999909099999999990999999199091909190992999 -080109101100080812101100131312121404131315041404160217181400050603191400990999309999099991990999900990999990901999991119900919999299 -080801090900080810111200061010130400051402131500041617131500031717041500999999939099000909990999099919999019099019990999999999929909 -040805090600100808090300111104091200011314091200151514161200151504170200909090999990999990992999999900999399999190999119999911999019 -080808080808080808080808080808080800080808080800080808080800080808080800199901190999999000099999999109909999099990091909992999999999 -080808080808080808080808080808080800080808080800080808080800080808080800199901190999999000099999999109909999099990091909992999999999 -080901101004111212121204021314140600150414141600151718190500150318191900199901130999999010099999999109909999099990091909992999999999 -080808080904011011040900121212131300141405061300141415160400021717180300999009099993009991999999099919999999999900099099919909919129 -080809040300101009051100101012041100131313131100011404150200061414160400990999099299909999099999999090099999999191193091999999909009 -080901101000080911101004120911030400130902141500160617171504180517171500999999939990909009990991999099299919990911990999009999909909 -080910030300080902030404110602121300140615151300160515151304161613131300999999139990909019990991999199199919990911990999009999909909 -080901101000080911101004120911030400130902141500160617171504180517171500999999939990909009990991999099299919990911990999009999909909 -050601080800090909090400041010021100121010131400121215031400160415041400999990030999999901990999109999199099199999999092909999909099 -040106050400080910101100121210101100121213021400151617041400151616031400999990300099199909999990999991909991190900999099999999999929 -080808060900100211111100031212130400041212141400150504140100151516160400999091199099999921909999999999009091999099999903999909990909 -080809101000050609090400011112121300111112120200141414141504041603171800909990990999990990099931919999919999999099199999090991909219 -040808020400091008111100090312111100090512131300141512161600040601161600091999990099199992999999999999199991990099990009900399999999 -040808020400091008111100090312111100090512131300141512161600040601161600091999990099199992999999999999199991990099990009900099999999 -040808020400091008111100090312111100090512131300141512161600040601161600091999991099199992999999999999199991990099990009900399999999 -080109100400081109121204081309121200141404151500140216051500061717180300990099399999999091999910099199099909999199999009901999999129 -080909051000080903111000080612131400151515160200011717161600041717040400999999990990999999200990119099919999199909993919999900909999 -040501080804091011080800121213141400121215141600170618021604171703191900999900039990019999919990099990999999990901999091099991999299 -080304090900080804090900051010101100121202131300040414151300161616010600990999299999999991090909999991909901999009999991909030999999 -080803050900080810110900120413130200121413041500061416171700041401171700999099929999911909991909909999919099099999190019999399909999 -030809090400080809091000061102121000041313121000011313141500041616160500999092999999999991909901199999999099999991093910990999909909 -060808090904030808100400111212131404111212150500111617181800021619011800099909990999999929000999900999009990999990999919919139911999 -040801090904041010101000111112130600111114151500161616021500031717170500099909030990999999199999909991099901999901999999999919929909 -040501080800020909080800100909110400101212131400101515041600030615161600999990039991909919909999909990099999099099099990920999999999 -030802090900080805090900041010110400121013111400150413111400160613010400911992909999999999910909099999999090990999999090909930909999 -080903061000080909021004081111121300051415161300041717181300041717011300929999990990919099010999919999999000099999990901999939909999 -050308080804091011110200121010131300141515131300041515161700061804011700929900999199999909901999099099999090999991090999990939900999 -080109090900081010111100081010110400050206121204031314121204151617181800999999309990909999999999909010099999909199999099021099919099 -080808090300101111090500101011090200041212131400151212161704060104181800990299999999999999990990919990919991190990990990003090999999 -080903051000080411111004021213111000141515151500141616171800041616010600129999990999999010999990999190009999999990991910999930909999 -060108080800091011121200131414120300041414151604171702151600170405181600999990309999009901999909999099929999909019999911990909999099 -080804010900101011120900101313120900051313120900030402140600151515160400999999003999009999999999909999999090999991999010929109999909 -080509031000110609091004111213041000111415160200011414171700181804171700099290999999999090099990999909019090999909193919990099999999 -080601090900081010101000080504111200081314021500131316171500040318171504099999930990999990901999099999919900199991999919909199992990 -080309090400080809090200101006041100101213131100041413131100151504010500929999999099991909991999999990099099999099999091900030999999 -080808090900011004090900111204020400131415161600131415151600041406050300991999199993099990919900909099199099999999999099909002999999 -080109101000080909041000111213131300140515021600171818061604041818031600990999399990909901999991999009109991990910999999009999999299 -080809090400080809090100061011120400021013141400151516161400151703040500999099999999193901999990909990099190991909999999999900912999 -080601040900101011120900101013130904141413150200141604151700051803151700099990930999011999999990990909919999199009099999990999909299 -080301090600081010090500081010110400021212041300141212151300041616160400299099939999900999999999009191999199990990999900909900999999 -040808080800040910100100060410100500110212131400031516131400151517171400099999009990993999999990909091999010999199999090929099999999 -080905101000041111100100021213130400141513131600140417171600140317170600090990099999913999199911999199909099099090999999999999929909 -050308090900100611091200131314021204131315151204161717171700180401191900929990919990999909109999190999199999109099190999909390909999 -080808090300101011121200131002121204131414150400130616151700130501180400991299919999999999199900190999199999999909099010999309909909 -080808040900060410090900040210110100121210111100121213140400030413150500999090009999919999919901939919999999999990999990920909999009 -080808010904101011090900101006121304041414141500031602171800161619190500999909903999009999919999000099109999999991092919999190991999 -050104080400091011111100091012021300091012121400091504061400041515040300990090390990099999999999119999919919999009999990999992909099 -030808040500090908021004090911121304141414151500161718181900060118181900299999990099910099919999100901909999999199990099903999999909 -030408060900101008041100101002121100041312121100141315151100041301160500999092099099999999009991199999999999090919990099999309909909 -030809101100120613021104121214151104161617170100161618170500191919202004211999991999099099019990100091999999399909999999999090999090 -030809090900040810040400111102121200111106120400131313131400050115151600219999919999909909190991099990999999991999099999903090999909 -080808090300100411090400101111090200041213141500011617170500161617170600999299909999990990999909919009919911199199993090999999999909 -080901061004080909111000080212131000141516171700040318171704051818191900999909930991909999909911909091999910990299999909099909909999 -060108080904101108080900101213140400101212151600101704051600021818180300999900399991090990099999009999099999099999990090919999919929 -060808091000111209090300111204021300111214141304111215141300040116170500999190909299999999919999999990199999009999990119903099999009 -080909060300081009111200081005131400011015021600171015181600040418181604999999990290909999901990919999199391999999990199909099990900 -040208030400090910111200090913131300061415161600011415161600051404171700019999112099919999990999999010999999999999993009999909900999 -080801090904080810090900111213040300141513131600171502161600051506181804999909939999109901909991999099929099990919999919909090999990 -080109101000081111040200081111041200081314151600041317151600061305150300991999310190999999991999099909919900999909990999999092909999 -060308080400091010111100051210111100041202131400151515151600171717010400999990209090999909999999999991099901190999199991999030999999 -040108080900101111080900120411021300141404151300141406151300051604150300999090319990999909919990919099099909999999999099900992990999 -080910040300080910111200080902131304081414131300151514161704051501061800999999990299911999199991090919999099990990999990009390999909 -080109040400081011121300101006131300140515021600141718181604140318181600990999309090119999019999999099109900999991999199092999999999 -080609031000081109091000121213021004121213141004011516171804151519200500992999099999999900919999990999199991909019093100099099999009 -040106080500091011111104121213040200121415161600141415161600171717031800999090300990199090091999909900919999999999999999909991999929 -040806030900101111110900121314020904151314161600011714161800171714050400909290099999999900999999910099199011999199993990999990999099 -080401090900081011090900041213131400151202160600041217161600051217170300999999039990109991099999909099909010990919999999999999909929 -060104040400080808080900101112120900101302121400101504041400151503051400999990300099990900919999999991909919999100999999999999992909 -080901101100081210101104130614151104131304160200171718181800171705190300099999039999090000019999990990199999199099199999999919999029 -080409090900081004111100080212111100031305141500131316161500061716010400999999099091099991999991199209199990999991999990999930900999 -030408080600090910081100090910121204131410150500021615151700181818010400909992999099990999909999990199099911091199991990999030999999 -040805090900100211110900101204110300131214140400131214141500130104061600009999099991190999999910929999999099099999999090993090999909 -080801090400100411121200131111121200131402151504130516161600130617180300999090030999909909999909999919909919909919990999999199909129 -050108091000111212091004131212141400131516161404130602160300130417181900990990309990990099999909099901999999909019999999999192909119 -080804090900080802090300051010101000111213140400151515160600171701161604909999999299919990199999999009109091999910999990990399999990 -040809091000031111111000050406021000121314151500161617151500161617010400099099099992999999919999019009919909990909999909999930990999 -060803091004111209091000111113130200041413131500161717171700050118180400099909029999991990991999999909919999190019990999903900999999 -040809040300101010101100061204111100051314021500011314151500041316161600000999909299999900999990999909199090999991993999999919901999 -080803090600101004090400101011090200121311141500011311161600051311161604992090999999990999099999919099919099199991993119999999909990 -080109090600081009091100121304041100141315050200141316171804141303171700999099399990191900009999999099919900999999199911099299999999 -080804090900080810100100050411101200021313131200141415161200031404170600990999990999093909199990909991999199991909999990999009929909 -080809090900080802100300051112101004131111140400151516171800060119191904909999999999019999192999990091999990990190099090903099999990 -080808030400020910111100120413111104121414061500051414161500171801161500992999199091009919999990990990999190999999999909900399909909 -080809040400030909041000040211111200131311140100131315140600161616140500990992199099909991990909909919999999399909999110999999999009 -080803090900080810090900021110120400131314151504011316161604061718190500929999999999999919909911009991999919909990993999090099900009 -020808080900100411110900100412110100100304131400101516161700051516160600199991019999990999999990039999099290099999099090909999999909 -040801090400101011121300101011141300151515051300060216161304171818180300099099030999900999909990999991099999999919999199001999909929 -040108090600101010041100041212111100131212140500130402150300131616151500990990300099999901999999099999099099099019999999999192999199 -030808080600091010110500091010120400091314141500021314140100041616161604999092909999990999909999999990009999091999991993901919999990 -020808010900101111110900121314050904121315160900031317181804041906181800199991913999990910099999900990999990992900999999090099909999 -080910101000080904111100040912111100010912060200131312041400150503161700909999999990099999999901199999919399099099199909909991909219 -080808010500020910111200061313141400031513041400161617171804161617171804999991913091910901999999099919999290999009999990099999999990 -080904100300080911121200080902040600081313141400011313141500161617040500999299901999919999199911099999909199999999993900990990990099 -080803090900041011090900121010040200120613131300121415040500120116161600999999029999919909991909909990919999999019099109993099999999 -030809100400040809100600111202101300140515151300161615151300161601170400299099999999999901090991999091099999990099999090999309999909 -030804090400080804091000021112091000041313140400151513140100151506140500290099999999999919099919009919099099099999999013999999999009 -040508090600101108120300100212120400101314141500161614141700161618011704999090090999992990099991999919909919990999099990999039990990 -030808091000051111021004121311141004151515150100161617181804161606181800291999991999991009999990910009199999399090999099099099999999 -040809091000080809091000110812131000141504160200141504171700140503170600999990399999099909999991119090919999199991990909990990999299 -030408090900100208040900101011110600041211110500011213041400041215151500990992099999199991100999999999999019999909093909999090909999 -080803010500090210101100121310101400041315041400061315041400041315161600929991993091190990999909909090099999999999990999999909909099 -080509101000111103100200111104121304141515121600141515121704181801120600091990929999991999991999090909919999999999190911090399999909 -080109101105081213021104141414151104161717151104181717190300202106191900991909311990191009999999900090999999900990299999909999900999 -080808010904101011110900121011130900040214130600151614131700180305131904999909093999099999909909909091999919999199091999919990929000 -080910111100080912121200080913141404150916021405011718191904062021031904990999909999099999999991090091999091909191993099099099900920 -080804090900061011090900041211130100141511161600171511160200050318181804909999099990909990999990139099999901990999990991909991992990 -050808010900040808090900101010101100021213141100151516060400031716161804099999993999919909190999999910999190991900999999991990929900 -080604040900080510031100081202131300141515151504161617171700161601181800099099909099092999091991199019999099909019999999999390999999 -060408030900101108080900121304021400121516161400171516161400051504011400992990099990999990910990919909999999990999990091909039999999 -040804010904101112130900101112050900101112020900101414151500061614031500099909003999001999999909099999999999199991990999990999909929 -080809101004080802110300041213110500141515041600141515061600140117181600991909919299099999199900009991999090999999999990993099999009 -040809101000060804110400120802130300121413130500121515161600120104161600000999990990090999999991929911999199099999991909993999999099 -080105090400081011091200081314090200081313061504161617181804161617031800990099399999111999991900099999919999000999199099099999999929 -040308080804090910110200090910111200131310141400051516141400171801060400929900999199990999991999999099919999999009999019900300909999 -040803090400100806090900110802121300140815121300161515121300050401171700929990999099999909090991199099999099999999990910900309999999 -080808010900101011120900101013140904060213040900031513161700181513051704999999093999010999109999990099099919999199099990929909919990 -060809091000111213101004141516160400041516160100171702180300171705181800009999909990099009009990909099999999399919999019999992999099 -060404010400080909090900100511121200101302041200141414151500031616151500999990003090999999991999199901999110991999099999920999999999 -040501040800091011111200131314111200021314061200151504161200151503171700999090039099099909199991909199999999091999999900999990992999 -030508040900101111090900061202131304141515151500161717181800040117181800900992909991999991909991190099199099999199990999903999999099 -080809090300080805090600101102121200131313041400011516171404151504181400999299999999090909919911199199999999999190993009099009999909 -080903101104051213131100061413130200151515151604171718181800171701191904092900091999099999990909919909919999109991999099999390999990 -080808090500101004090100101111090600041111091200041314151200031602151200990099099999993999099999009099999999099991990199991199929199 -050806010400091010101000111212121200131414021500130404161500130316160400099999003090999909991999999009919999199991990909999990992999 -080509030600101111111104101212021304101214151300101617171800191917010400092990919099999099919999910999999009199901999090990930999999 -080809090600040409090100051010101100121212041100131314021100031516041100909090999999093999919999919090099999990999999911999199921909 -080801090900101010090900040411120400131314140200131315061600051703161600999999039999999990109999009091999999199900199099990999909299 -050403080800091010060800021112131300141512131300161512171700041504011700999990029991999919900911999999999099990999099019909039999999 -060809100500080809110100120409111100041309141400150216171700181803171704990090999999013900999999999099099919999109991909919999992990 -080909090300080210110400081213141400081516141404171718181804171705010600999299199999900991099999999910999099909109099199099030999999 -080910031104081212121100080205131104081415160400171718191900061818011900912909199990999991999990900919099919099910999019999939909999 -040803060904100808110900121202110900131415110904161616171700180501171700929900990999999909199999909091999910900199999909909399909999 -050808010400091011121200021313121204141313151500141616171800140316060400999990903090099999099919190199909999999900099999999900929999 -040809090600101011090100041211110400051202131400151216131400041203131400909090019999993909999999909991999910090999990199909299999999 -080902010600101111121304031411121500141416121700051816121704191919191704119991913099990029999990109990909999999999990999090909999990 -080809040400060810101100121202040300121213141400011513051400041616161600900999999099991900192990099991999990999999993999991109909999 -080106090900081010090900111010120400131402121200150516031700150416160400999999309999999909909919009199999119990019099999999920909999 -080906031004081112121300081412121500161717180200161718181904160120051904909209099199999990991909999090919999199999090199093099999090 -080808090900030602090900101011120400041013141400151516170100051818181804999992919999099999109990009991999991990991999003999909909990 -080109100500080809101104121314141500120216141504121718191500120604031500999999399099100009190991999919999919909019999919990029999999 -080309090900101104121300040214121300150614121604171714121800171705011800299991990991909991999991999099909991900099099090999039999999 -080806090900040810030900111210130200141210131500161217130500160104130400909999992999999900991999999099919009199999990110993099999909 -040104080800090909080200061011051200101013131400151513131600171717040300999990309199919909091990099999919999999099199990999002999999 -050106040804090910101100090912100400131412150200131617181800131603181800999000309099190999999990909009199999199099199919999299999999 -040809091000111109021000031213141000121206051500041616171500041616011500009999999999119929919990019999919999099909990901999939909999 -040408080300091008081100121202041100121313131300141515150500140116170600999290099999999900199991099909909999991999991990993099999009 -080903011004111212131000021212131004141516131004171818190500061818191900129901993999999919999919100990999009900900999990909999999999 -080405090904101112090100130414151600170214151600171818151600061818031600099900909990003909919990109099999919999199999999909999999299 -030408010900100408110900101208110900130208140900051516041700151516160600909992993999990990999919199919999019090900099099999990999999 -060805091000110809091000010812120400041312121400031502161400171515041400990990999990990999090931999999999009099991999919929199919909 -080808010400020409101100120909131400120413131400121516171400031506051400999991913099010919909999909999999909999999990900929099999909 -040803090400050809091000060802041000110812131000141412151500041612011500092999999090999999199991099099999019099990999019990939909999 -080909011000080909101000110212120400131412120400151406161600051403170400999999993991919919909919909019999999090900999999909909992909 -040808080804091010110100091010120600091314151604171803050200171819191900099909990990903999919999909999199900100099199990999291999999 -050104080904101112120900131415120900131602171804131619170600131619190300999000300991099919999911999991999090009919099999999999999929 -080309090600081010101000080411040500021111121300041414151500041601151500299999909099999999099990099199909191990991099919990399909999 -030809041000041111121000130602051000131314141500161614141700161601181804219999910999909909199990099991909999999099099090999309999990 -030808080500060404020900101112120900131412120100130415161600171717161600299099991999991900099990919009999099399909999009909999999999 -050603080800090910101100090912120200041312140400151516170400151501171700992990099199999999901999919909999090099010999090999399999999 -080809090300101104121200131414121200151514021604151517171700061801040500999990990299099900999999999099199909109909199999990300909999 -080809011000080809111000030504111000121314111500161702111800061704181804909999993999909999999999009209999900091999091119909099999990 -080409090400080509090100081010111100121314111100150616160200040316171700099099999999093999919909099990999009990999199091909990992999 -080809100400030811051200130214061200130415151200131615171700041601171700990092900999999991099919099990999909999999091109909399999999 -080801090900080810101000041112131400151515020400161606170300051604171700999999939099099990991909019990109999999091999909909992999099 -040809100500111209130200111409131504161609171500161618181504061901180300099099090990991990991999990909199909999991999099090392909999 -060808010400090810111100091212111100091204040500090213130400031414141400099999903099909999999999199990009999999199990199999190929999 -080604050900101011120904101002130900140315160100171715181904171718181900099990900999999099009991009191999299399991999910099999990999 -080404090600101002091100100312091300041414141400151516161600151717010500099990909099199999190929999991009099999091999999999030999999 -080809090600080809091000111112121204111102131400051515161704031504181800909999993099991999991990990999109991999919090990099009929999 -080910030400021112121200131111140500151515151604171718161604060119191900112991999099999919909999999109009999909109999909003099999999 -080109041000080909111100081213111100080413051400020415151600171717030600999099399091909990099999999909009999991999090999919090999299 -080304090600101011090900100212120500131412120400131516160100171716160400299991909099999999000911999909999999099019990993999999990909 -030804090900100811090904101202130600101213131400101215161604051701161600299999909999199099109991999999909999999990090109090399909999 -050801090400101111091200101111131300041402131300141415161700031515040600099999039090909999990999099919999019999910999990999900929999 -040809090900100802060300041112051300141512121300161617181300161601181304999990919290009999199991909019999999090190999199999399999990 -080104090400080810101000111112121200111106130400140215131300161617050300999099300999999919099990999990999999090199999119909092999099 -080809031000060909101004110212121200131314150500131314160400040114171800992999099990999091909919999190999999099990999009903990999009 -080809041000061111101000011111120400130314141500130416161700130216160500990999009990909999999939009991999299099919099099999990911999 -080808010600090910101100091210101300141215021604140517181804140319181804999999903099099999990990919099919991109019099999099199992990 -040503080804091011120800131311120200131314121500161718181500060118180400992900099990999990991999999990919991199019990199903999999909 -060108050900101011110900101002120900131314121200131315040300041615150400990990309999999999099991999091909991999909299909990999909909 -050809101000110806100100041212131304141414131300151502161700151518030400900990999990903999919999990090999991999910999190999990991299 -080209090900080404060300101112121200011313131300041415150400161415150500119999099299999919009910999919999399999909999090909999909909 -080904010600080804101100121314101100121304101100041515021100031515051600909999093099991990099900099999999909990999999911999990929909 -080809100500060409090100111212131300111412131300111402040300041415161700909099990999993900919909199909999999999919999999999102909119 -040809100500111111100100121213101400121502101404161517181400030617170400001099919999993990199999909991999919909990991999920909999909 -080809101000010909101000041112041304141515160600141502160500140317161800909999999993909991990991900091999999099919990919999990992109 -080109100400081112050600131114151600171115150300170218191904171818191904990099300991999919090990909199999999299910991199099999999990 -080910101100080910121300040914140500150216140100151706181804150319181804999099990090999999900900999991999919399190991999099099929090 -040308090900101111111100121206020400131414140500131515151500130104040400990990209999999909919999009909199999999919090999993000999999 -080305091000081112121004080412131000021415161600171718191904171706011900990099299991999099999990909190099119999910999019099039999999 -080910111100081203111100081213130600020413130500141515161700141504010400000999999999299999999919909199999099091990991910999930990999 -040108090900101108120900131408121200130508061500130204031500131616170400999990399990009991990919999909909990999999991099991920999199 -040806010500040909090900101111111200131313021400151516161704150316161700099999003099999909901909999999919991199190099999092999999999 -050801090900101011120900131304121404131315120200061604031700181818171700099999039999010990999999910990919990999099199099900929999999 -050809011000111213141000111506041000111504021004161617171800161617031800009999903990001999009909999999999990109991999091999999999929 -080409091000080806091000021112131300141504131300141616161600140305010400999999099999999990000919099119999990999190999999999030929999 -040106080800091011080804090911121200131311021400131311151600041717030500999990309999109090999999099909999991199999199991900920999999 -080501090904081011091200080413141200081502141200151516141700031818061904099909939990099999109990109999999991999919999090999190929900 -040806040400010909101100120909130500121414130300121404021500161616151500099999000093910999919909909990999999999991299909909919999999 -030809100600110212101004111314151604171714151804171714151900202001150500219999919099199091990999990019909919909999099900909390999999 -030808050600090408021000090411111100121314140400151514140100041616161600299999990090911999991999999009199009099999999093999099909999 -080903100400080909101100021212100600011313101400041313151400041604051400999099929991990919990919999991999390999999990900990909900999 -080804050300080209101100121204060400121313131300141515150400140116161600909999090299111991999990999999009999991099991999993090999999 -080806010904101010100900111111120400040512121300141415161700141402180300999909003999990999919999099099909909099919999091999112999199 -040809051000031102121000011313141004151313141400041616061700181818171700019999110992919999919939100999999099990909999999999009999099 -080909040500080904101100121203101100131214101100020614101100151617010400990999999099909900999992999999999199091999999019919130911999 -060408020900101111040900011111030900121213140900121205141500041616151500991190010990999999999939929909999900999999999090900999999999 -080809090904080810111200051302060300141315151500161718191900160104191904999909909999911990192991099099999199991900991099993999999090 -080808090900101004090904031011111200131411110100151606171800050219191804999999099999909099990999909209999909391901991990991919901990 -080901051000080911111200080911131404080904150600161717021800161703041800999099939090090999919999900999109909990991999910999909992999 -040808060300090810101000110402120500131414121500131414161600130104161600099999990290999909199909199099909999099991990919993099999999 -080808090904101103090900100512131404101212130200151617131800040601131800999900999990929990991999990999919999990099190019900399999919 -040108080500090909101000111212130200061212130400141415130300141416170400999090309999919990991909919099909999999009999992999099999009 -080801060904080810090900111213131300111404021500110516171800110316170400999909930999019990919909999900919999199091099919999990992999 -080509030600101009111200101009041304141415150200140415161700181818011700099990992099991999991999990090019999199999999010909039999999 -080809090904080810110400120213140100151616171804151616170500031919170600999909900999090999099919139111999990009999099999929999999009 -030809090400101109090600101004121304140215151300141617181300051717011300299099199999990991909990990919099099999109999910991939909999 -080904101000111111101000041212121200131402150400131406151500051403010400009990999999999909090999999991199019999999099909909930992999 -080406010400091010101000090911111200021304141400051304141400041303151500099990903099999999910991999199909190999999990909999909902999 -080409090600081009090100111111121204131305121200131415021600041715180300999099099990093999019999990909999990999099199911990999909129 -080809090600101109090300121212121300011414051500161604021704161818180400999090999990099999902999999909019399999199199091091910999999 -040104080800091011080800091012131300091004051300140215151600170603151600999990309991099999009999099990099999991999091199909999909299 -080805010400090909091000020611121300140311041500141411161600171717160400999999003099990910090999909199009999999299099999999090999999 -080809090300081011090400121002050400131314141500131316171700040601171700999299999999910909199991099019909999999990099109900399999999 -050803090900011011040900121211110200121206131400151504161400151517171404092999099993999991901991919999009909990990999099999909999990 -080910110300080212120400080412120500131313130600141415151600140117171704911299199999190999999990909091999999999109099999993090999990 -080304091004081112131000081212141000021515141004161615170100161605180600990909290991909999999999999190999999001990999113999909999009 -030808050900100808111200131304111200131304141204021515161700181815010600999092999099909919999999009999999990901990099910919930991999 -040804090910030811121213060804121213140802151613141417151818051920150118099909909902909999999909999990099919109919199919900093990999 -040308060900101112121300051114021304151114141300161617180400161601181800929090919090999999919999910099999099199091999010999399999999 -080804090900081011120900131314021500061614051504171714181500171703010400990999099999009999900990119009999999909090999991999230999999 -060108091004111102040300121213141500161213051500171713181500171704181500991100319299909919199991009099999999990990999909999999999099 -040408010400091008111100121008111100130406021400131515161600130315051600999990093090909999999900999090919099199991999919992999999099 -040808080300091005041100101002121100131415151500131316171700060104171700999990099299999909009999119091999119999999999009903099999999 -020808080300090909090400101111121304141111151604141417151800060117150500199291999999999919990999000199999990009009099999903990999999 -080801090900080810110900060512131404031516161400171718021404171719191404999999939999000900199999100999199299999191999119099999999900 -080809101100120809101104121309021100121409151504011617051504061819200300999999999999909090999990109999199099909019993199090902900099 -060108090900101011110900121311110200140415161704180415051700181815031700990990309999199999999900919099019090909990990999999999990929 -080808090900031002110900040412111300141212151500161616151500050404010600999999119992919999990999999009109099999909999909900030999999 -030809090200101109091200040405131300141515131300141617171700161606010400219199999190099909091999999909999999999909190099999030999999 -080309101004110509101000120409130400021415160600141415170100181818171700299901999990999919909999909100099999091990999113999099999999 -080808040300060209101004041111111100121314141500011614141500161605171800990990099299119091999999999019999019999999993199999900999009 -080808010600091011121200020411121300141415041600141415171700180305171704999999903091119910990999999199909909099999099999919999929090 -040304080800090906080800091004051100021010121300141515121300041515011300990990299999909999900990999199909191990909999990909939999999 -080309101100081202131100141212051104151516171104151518191904200618011900921999991999919909199909090901999991009901999999009939909999 -080309100400081109121300140209151300061616151304051717151300181717010400299099990991999991909909999010999991909909999990909930909999 -080809011000080511111000121213111404121215161400040406021400031717171700909999903999990990990990190991999991990001999999999919929999 -040809010600080809101104121209131400121209041500160217151500160517180300909990993099910099909991909999009999999199990199999999990129 -080106090900080810090904110404120500110213131300111415161600111417031600999999309999009010999999909990099119999910999999999199909299 -060408080800090909090400051011110100031212131404151212161400171802161600999990009999990999099909939909199990902991999990919999911199 -050804090900030804101100120813140400021513140100151513140600161613140400009999990992990999000919999199999119399999999910909999999909 -080603090904081011091204080213141404151513140100051617171704000000000000999909029999190091990901990999999901399990990099099999999999 -080806010500080809101100121313131400120402141400121516160400171704160300999999903099001909901999999999999901999919099099990099999929 -080809101104080805100300121212021300041414141300151516171800151501040600990109909299999909919999199919999099099190999190999300999999 -080808040600010909090900101112130400101111021400101516171700051515030400990999099093999991099909009999999991199909199099999920909999 -050808010400090808101000090911101200040411061200130211141200131503040400099999993099909990990999199999099909990999991190999900912999 -040108080400090908101100121314151604120515150200120317171700181818180600999090399999111999901900090909919999999999199299999090999999 -080809090400081009090100041011120400040204121200131314051500131314030600909099999999193909009999999919909009999199099190999990999299 -080808020400030909101000111104101000061112130500141515151500141416010400991992991099999990999999999990199009099901999999999030990999 -080803050900080810100904021111120900131411151600041417161600041401061800929099999999999019099999909199099190999909990109999390909909 -080808090300100211120500101313141400101315161704101818160400061801160400991299199999000991999999999999099910009919090999999399909909 -080809090300080809090400101102121204111113040500141516170600140118181800999299999999999909190991090099909910999919990100993099999999 -050108080600091008081100090912111100131404041500130216161500130416160300999090399991099999009999999910009999999199990199999999909929 -080903100500110212101300061412101504161718181500191718181504191701041500129991999091990991999991990091099009999999990990099399999909 -040608030900101111110900120205131300141515131304161616161700181818010400992990019999999901990999999010999990900919999990999030999999 -050803091000111213021004111313141004110415160600171818191900170118191900092199099999991090919909990999199991990019090909993999999999 -080801040900061011110900121211110900121213040200141516031700140518171704999990030999099990999999919990919999099909190099999029990990 -060809031000020808101000111212051304141515151500161718181904040118181900092999919991999919990999990109009999991099991099003999999909 -040808090900011011090900121314141400121204040200151516161600150603170500099999909993109990199909999990919999099099199999990910999299 -040308080904101108080900121113020900140613151600171813151500170413010500929900999999999909919990919099919999190099990009999930990999 -080609030500081011111200080404021300081414041300151514161300151501171700992999019090990999919999019909099999990999999011999309999999 -080909100300080909110400081202111300061212111404051515151504161701181800991299999999999999190909909991999099009199099999000390909999 -040804090900101011090904011211130600141411150200141405161700181816160300909990099999909090999939909919099911199999199091909999999929 -040809091000051109121004041313141400021313141400151516171800031506011800099999099990990090009999999099999191991901999990999039929999 -080909090300080410020500081111121300011111131304141516040600141417171800999299919999910990919909199999999390909009999909990990990909 -080909090900080810100400040210101100121213130100051213130400141503160600099999999999199991990909909911999999399999999990901909902909 -080809041000080811111000060411120100051314121200030415151500161616020400909999900999990909909999939909999000999999199099929910999199 -080802090300080810090900111112121204011314150400051316151500041306171800901999919299999999199991990919909309999909990909999990909009 -040808091000110804091000121313021000141415161000141417161804050106160300990990999999099900999999109019199909999909999991003092999999 -040108080800090909091000061112130500040214131304151516161600150317181800999990309099999909190991999919999000909199999099999099929099 -080801040500080909090900041011120400131306121400131315021400031617171400999999030099999999910909099900999999099991999009999919921999 -040308090900101102121200101106121204131114150400161616161700050118171700921990991999119999999999990090999990090109999999903099999099 -030808090500100808091104021213130400141513131600151517171600041801170600999992999091900091990919999199999909991999999190990399909909 -050808030900060810110900120213040900121214140900041515151500161616010400099999992999919900199991099919999909999199099999909030999999 -080801060900080810111200131410151504161710150300161710021804041705191800999099939099010990919909990009999999999991299999009019999919 -080808080105090204101111121314151511120404151516031717181819061717182020999999191301901910990999099900990999992999009909999999009999 -080106040400080909091000111213131000021413131000151516160400031716160500999999300091990919909919999919999199991999999090991999929909 -040108080400090908081000090911121300141406020500151516171700150416031700999090399999090999990991199909109990999091999099990999999929 -050808010400090908101000090911111100120213141500121617061804121717030400099999993099919999199991999010909990999190099999091990999299 -080910110300080212121304081412121304151516171304181819202105180119190600911299199999999091999990990019999990001909999000093990999999 -080910110600120511111300120411141300120415141304121616161300031717170200009990903099091999909909999990999909909999999990999990929919 -080910010600110512121300110412141300110415141304111616161300031717170200009990903099091999909909999990999909909999999990999991929919 -080806090400080803101100121213141500021313161504011718191500171705191504990999990099299919900999999199099190909919993100999999990990 -040809090900011011051200131415150600131415150200131616031704131804171700009999099093009991990901999999999999199999190999099929900999 -080909011000080909111004080512131300030414131300151617180600151502191904099999993999910099199909099991999999992010999090999199991090 -080809090500030810090200111111111204131313041400151616161704181801190600999099999992111999991999990990919999999900190991009309999909 -030809091000080804091000021111121004131415120100161617120600161605120400299999999999990919099999000199999111399999999000999099999909 -080909011004080909101000081104120500080204131400151515161600171718030600999909993999919991900999099919099999090109099999990190999299 -080809100300011111021200131111121204061414141400151516161600040517180400991999011293999999919909990090999999999090999999909900990099 -040808010900050808090900030410110600120210111304141516111300171717111300099999993990919999100999999209999919001199991909999099999999 -060809011000110212131000110414151504111616151700031616171704181818051900009999903991199999110990190990999999992999999909099090999909 -030806091000110804091000121204091000121313141000021313151600041717010500990992999999099910999999999990099999091990991910909030999999 -080609101000081112101004131104140100130415161600130317021600131717051800900999999990009009009999939999199900999999999911992990999909 -080901100600080909111100080212041300081412151504141412051600031712180400999099930991909999900910999919909999909999099990991999929009 -050401080900101011120900101011121204130611040200131314151600171717180300999090030999919999999990990999919999099009199091999919999029 -080809090900010810111104121313051104141313150400141617180600021919190300999999909993009091999919090199999999099090999000919999919929 -060308050900101011110900041012020900041312040900141412151500141404010400929090919999999909919999199909999909090099099919999030999999 -030809101004061109101004121302141404151617141400151618191900151601200500290909199999999001990901190999999001999919999909999309999909 -080808080300040509101100121302041100121314041500011314141500061316041500999290919999909990109999999991909099999990993990999109901999 -080403091004080211101000081205130600081414141500011616171500041616171700992909091999119991999999909910099099099919993999999999909099 -080910110300080212121304080412140500151616140400151617171800150117170600911299199991990099900999999100999999099999991090993990999999 -080304050904080410111200131414150100021414151500161616160600171718181800299009909090990919009999139199999199999990999999990900999999 -050808080900041010090900011010040300111112041300141115161300060415021300099099099990999999999939099919929919990910999909900999999119 -040809100400080809090400050211120100131314151600171714031600171714061600099099990999990990119901939919999910099099999929999999999099 -040408020900100808110900100612120900131312120300130404140100151515150500999190091999999999019990999099929909999901999993990909999909 -050808080904101102120900111113030900141414060900041515161600171804011600999900911990999999129999999901999999999910099919900039909999 -080309090400101109090400040212121300141412121300151515161600060104160500299091999991999991090999909019999999991900999999903099999909 -080801090500041010090900111010121200020604121200130314141500161704151500999099039990909999909919999109999999991900999990912999910999 -080909100600080911100100081111101200131415101604130405170200130318181904990099999990993999999999019999919000909090199909999991992910 -080809090300100409090400101002111100051213110600141515151500040104161600999290099999999999190999999901909091999091990999903009999999 -080909031004080909101000080611020400121311141500161617051504160118191500999209999990999999919909909099199011999199999009093099999009 -050408080900101103080900011206020900131314150904131316160400171718181800999990029990990990919939099919199911909999099099909099999999 -080409100600080311121204081314121200080215161600171715181804051915011800909099900992999099099990999909099199999190999919091939901999 -080806091000111112021000111103041000041314141500160514140100161717170400990999090999111999999992909999919009199099999993999909909909 -040801090500101011111200101011111200131404151500161717150200060318181804099099030999090999999999999909199009990999199909909991992990 -040809101000041112031300061114131300041114051500161114170200160114171700000999909990092999999909999999919099999990190191993999999199 -050808030609020808041009111213101009111415160417111818191920110118212121092909999991909919999990090909999900909090901999993909099999 -050804090400040810090900111110121200031310121200140410151600141402010600009999999090909990999999999909999901992091999990999130991999 -060108080900101010090900111213130300111213021404111215161700051204180400999990309999909900199999999999929991909901199991999009909909 -080109090900080810111104121305111100121414040600121502160300041716161800999999309999009091999900999919909999999190999119990992909919 -040809011000040609091000111111111000120513131300041414021500031604151500009999993999991900999999919099199099990991099919991999929099 -040508080800091003110200121313141404151616141400171717181800040601181800999990029190991909919999990090999999990901999919900399999999 -030808090900101008090900041102121204061314121200151616161604171717010500299999099999999999190901990919999911990991999999009030999999 -080909090600080510101000081102040300081112121300141412121500140104041600999999909090999999192991099999999199091999099099993090999909 -080809031004020909061000110504121000111113141000151516041700151501181800992900999991999919909999999900099990099109099109999390999999 -080409010600100909111100021213111100141516051704141516181800140316180400099990993090919999199911999190009909909999099999999990929999 -080909050300080909101100081202100600121213141504161617181904161601191904990999999299991999099909199991909910009190999199099309999990 -040108090900101108090900101108121200101314051200150616171700040402170300999990399990109999909999999901999999090019999999909192990199 -040408090300101112090900131304140200131306141500011616141500051616171700900290999999099900091999999999919999999009993911999999909099 -030808040900101108020900101104120900051113130900141115131600040415010600299099999999911999999909009999999999990999190001900930999999 -080806091004030802111204131305141400041515141600171515181600191919011600990002999099110099919999999900999999990991990900999039999999 -060808090500100808091104121213090100031213131404150216171400181916041400999990999090900099999999939999199909002991999119911999919909 -080109100600081111110400121213021404121215161600170515161604181919190300990099309991999919990991100990199999990999990999009992909999 -030808090900101008110400101002041200131304051400131515151500060116161600299999990999909999100991999919909909999990091999903099999999 -080902011000060911121000030911121000131314121004131516171700050418041700019990913999999999999929199990999909009909999009900099999099 -080806010904080810110900121313140900121303150200120516151700041819171704999909903999019999199909119999919999199029099919999999900090 -050401040800090910080800090910041100040610120200131310121400131515120300999990030999919999901990999999919909190999999091999092999999 -040809090600041002090300111213141400111115151600011715151604181818180500099099019990992990199909999991099909999999993190090999999909 -030808080900040610020900111213140400151213160500151217181804151201181800299999991999910900199999909099099999999910090009099399999999 -080809090904080810110100051206111300141415110400141515021604171703181900999909909999003999099909909909909901999999999911009991999219 -030809101000041104021200131111141400130515141400131616171804061616011800211999901990991999991999999990999999999001990900009939999999 -080309090400081010111104081010111100021213051400121215161700041801061700299999909099999099999999999190909919991910099900990309909999 -040108080500091010101100091212130600091212141404090215161704181818180300999990309091990990909999909999099999909999991111009992999999 -060808080800090310021104091213141104091212141400151617180100041919190500999990291999919099199999990991909999990910990013999909909909 -040106080800091011120400131313020500141415150400161615151700161603171700999990300991000919999999109909199999999099099990999299999999 -040809101000051109100200061212031300041212141300041514141300161617011300099999099190909990921909999999999099999099990091999039990999 -080909090200080310101100080410101204081305141500161717171704161818010600999199299199999999991990990999019099190001999999099030999999 -080409090500080809100100110206100400121203131400121215041400161616161400909099991999193991999910909199099929099999999009909999999999 -060808090300101108090900101112130200101114140400101516171704040105171700099299999999999999091999919990199999999019090109003099999999 -080801090904080810111204131313131400151616160200151718192004060503191900999909930999011099091999999009919999999099199911000299999999 -060801091004111112130500111404151604171402151600170318151600191919151600099009030099019999919999000099999901999919999999992199999999 -050106080800091011081200131414021204131414151204131617151800130417170300999990309991990919009919190999199999909099999091990992999999 -030809041000080809101000021112121200041304141400151515141400051617010600299099999999909919909919999919099999990109999919999030900999 -030808080900101104051200131302141404131515150600161717171700161601180400999092999091999991000991190999199999990991099999999309999909 -080809101000020803100500111204131400151515161404011718181404061919191400919991929999999919900990999109099999909190993090099099909999 -080409090300100509091100101202061100101213131400101215161600041201041600099290999999999990199991099999909909099999090199999309909999 -080809101004061111101004121313141400051313141500160317181900161602010400900909999999909009909909999099999991099911092999999130991999 -060808090300100808090500111202091300111414151604171718181800171704010400999290999999999900990901199919909999009910999099999030999999 -040808080300090210100400090911100400121314141500120514141600171717010600999290199999990991999991999901009099999999099990990030999999 -040808030900101008111204101013020500141413151600011713181600171706191604999290999199991099019999909099199999999091993119999909990900 -080109101104081212040600081213141400081516170400031502171700181818180500990009309090909999999990099919909900999999999199929199999909 -050108090400100808090200111213091400111504091400061516161400041716160300999990399090991991991901199990999099990990999999999992900999 -080809090300080810041100061202111100051313131300141516171704041816011700999299919999999990109909999901909999990099190909090939909999 -080808080300040209090600101109051204131414141500131616170100131819171704999299199999999901990909990910009999099991999903999999900090 -080801090500101010110400121313141404021313141500161718181500031918061504999099030999909991990919090199999999091999991990991999929090 -080509101000111109100100111209131300061409131300151502161604151504031704099990999999013990999999099909999099999919999019099991990920 -040801040500060909090900101011121300101011110200141515161600041503161600099999030099999900019999919999919999990099199999909999999299 -080909010500080210101100081210100400080313131404151513161400150617180400999999093099190991999919909999099299009990999099999900990099 -080105090900080810090900041112120200131312121404041516171400181806031400999999309999119909091990999909919999900909999091990029999999 -020808010500090808101100091212121304141515161300031517041300041817170600199991993099910990999999900190999990992990999099990999909909 -080909101000030902110500121213111400151204111604151718111604150119061600199992990999199999190991999999909999009109990009093099999099 -080806090400080810111100121314141104011314151500031302161700181818040500999099900999099909909901990999999390999919999900929100999999 -030809090900041010021100121213131400121213131400041516161600051704010600219999991990991999001999999999999909990099199999990030909999 -040808030900040808050900100211110900101004121200011313131300041415160600092999999999909901099919909999999909999190993999990999900009 -080809100500111212120100041313141404041516161400170216160600181818180300900099990990993909109999990991999919990199099999901999999929 -080809100500111212120100041313141404041516161400170216160600181818180300900099990990993909109999990991999919990199099999901999999929 -060809101004111112100100111113140500021516160300171716181804171719191904009909909999113999099999009199999119299999999009099999990990 -040808010300090909091004111102121300111114151300160605171700181919191704999990093299999091991991119990999990990090999909909999909990 -080808080400090605101004091111100100021111121200131415121200031615150400999999900099999090999999139099099199991909991999991999929909 -080803050900080404101000021112101000131312140600131512140100041616140400929099999099909910999911099999999999099999990013999999909009 -080503090900081011090900061012130200141012150400141412161604170401161600999999029990919999991909919999109001999990999999009399909999 -080605090400081010021100081010121100080313131104141515161700141515010400990999090090991999919999199929999999109991099909999930909999 -080809031004080809091000111213021400151613171804192013181805060121212104999209999999990909991909919909199091900099999109003099999990 -050801090600040808091000111112131404111115150200161617180400161603181800099999939090990990109999110999919999199010099999999299999999 -060809050400010810111200040810101200131314141400131315020400040415150300000999909093900999999909999919999919999991999910900999999929 -080808091000011111121000131111121000040514020400151414161600060317161604990099909993919999999909999099199901099990990999909199992990 -030808010904100808110900121202130900121214150904050416171700181818170600999902993991991999199999119999099900909900999999900090999999 -050408010900101011090900101011111200131402151500161417171700041403040600909990903999999999901990999999919011990999099999909900992999 -080809090400080803090600101010021100041212131300141212151600141701050400999099929999999909910999109919999999990990999900990300909999 -030802091000080806091000041104091000121305091000121414141500161704011500911992909999999999999909009909999990999091990990909939900999 -080808010400040910111100090912111100040212050600031312140400131315151600999999903090909999999991199919909099999190999909929090999909 -080801030900080810111200131314111200061314110200041514161704041816160500999299939199099909199999199099919999199099090909099990900999 -080809101104081213061104141516021700181818181700011920201704051920200300990009909990009009999991119019999999999199993999099992900999 -030804090500100808090400061102090100121314090400151314161600151514161600990092999991990991999991939091999099099991999019990999999999 -080109090900081010040200081011111200130411111400151604031700151616050600999999319199909999091909999099919909990909190992999990999099 -040801090900100811090900120811110400130614150500021616171700181818031704999990939990109999999919909190999090091999990909919999999290 -080409030600080409101000081109041000081102121300141414140400050115151500092999999099099999999999909991909991090091999990903909999999 -030808080400090909021000041112131000141415151000161616161000050104170600299999991099909999919900099999199999999091999990903009999909 -080808080900101104120900130214121500031414121600171717171804050619011804999999990991909911990999999219909991099991999990009039990990 -080909090900040404100100111110100600121313131300120514151600031717170200099990000999993999999990999999109099999990199009999991929919 -080910030600080911120200080913041400051515041400161517181404161717011400992999919099911999991909099900999099999900999901099939909999 -080802090900101111030900101111120600131412120400151616161600050104040400991999019999992999999999909091999919990199090999903000999999 -080109091004081109090600081212131404151212131400020416161400171816030500999009399091099990999999900199999990991999990999919990911299 -060809100400010808111100121205111100121202041300041415151300031415041300090099909993909991099999999999909919090919999199999909929999 -080109041000081111041000121111131400120215151500120616160300121704160500990999309990999999900919009999999119999009299999999999900909 -040401060800091011120800091313140500091313141400021516161600041515030400999990030991100990990999099999999999991909991999909990999299 -080905100300080909111200081313140200041313140600151515160400040116161700909299991999991990991909119999909099999199999999903090999909 -030809091000111109091004111213131300140205151500161616151500170404010600909992099999990099999910999919999199991909999919909030909999 -050808010400060908101000041112121300141412121500140216160400171717170300099999993090009999919900909999909919999109099999991999999929 -080808010500040910111100041210100200131313141400040615140300041616161600999999003090919990999909919990919999990909999092999099909999 -040408080300090210111100090912111100131313060400141515151500040501161600999290019999199991999999099910909999990910999999900309999999 -050803090400080810091100021213061104141516171104181816191100181801191900929090999999909919099900900199999110009999999009999399999999 -050304040800091011110800091212020800131312040800131314141400041506010400999090209999199999199999119099999999999990199099990030909999 -080509101004081109031000081209060200131209141500131617181800190401181804999909092999099999991999909099919990999090190019909399909990 -080803090900081010051100121010130200041414141400151617171700041601060400992999999199999909901909919990199999990919990099909300999999 -080909011000080909101000081111111204081302140500151316170400040616180300999999993990919991990999990991009909990910999990900999999129 -080801090904100811090904121311141404151611171400150218171900152006050300999909939990109001909999990019999999999199999111990902990999 -080808010900041011120900101006040900050213130900141513131600141515030400999990903999110999909999999910999019999099099999999920909999 -080804091000080804111000051212021300031204061300141414141300151504010400990999990999990990009909119999999299099909999991909030999999 -080509100400081111101000080312020400081313131404151516171700151501170600909099909999999992109999199999109999000190999199999399999909 -080403090900081011090900120611040200121311141500041311161600051301041600992999099999099909991990909999919099199991990019999399909909 -080109090400081009110400081012021300081415151300051615151300161606040300999099391990190999019999919990999909990099999999999902990999 -060508090904101108090900120408130100121214131300151617021804031919191800999900099990099990909999939990999900999999191111029999999909 -080805010900080810110900021213140900150416140900150617181904150318181904909999993999010999109911999100999999999900099099099999929990 -040801090600100808091100101212091304101212091400040215150500161617180300999990939099900999190909990999909999990190099999991999991129 -040808080300090210101000111213130500041413130600151516171804150116181800999290199991099919999910909019999999099199999009093909999999 -080601090400101009091100121013141400121516141404121516050200120317181904099990939099090909199999199999999990909999199009999991992110 -080910110500060910031200131310041200131314141200151616140200040116040400090090999999992990999999909990999999999019190991903990999099 -080609090500080309021004080411121304081415131300161718181900160118181900099999991099299099910999190901999000999919990199993999999909 -080910111104080312021100131314140600131314141504161718192004161717010500919909210999919909919999999999909999009019990010099930999999 -080808090900030402101000111112101000111305140400041313151600171717010600999992910999099999199999199990199099099991999900909030999999 -080805030900060802100900111213131400041213130400151216171700041216011700999290909999011999199900909099909999999901990999909939999999 -080909101000080909061104081203131400080415130500021617130100181817170400999999999090909099990912909999999900091999991193999919990909 -080109091000081109091004120413141000120215050600161617180300161619191904999999399991099010099999009999009119990919999912999099999990 -060809101004111209031000111209050200111314151600041718191904171701191900099909092999999999991999909900919009190001999919099399999999 -040508090300101011091200101013140200151616170600151604171704150118181800909290909999991999091999019909109991999999990099093909999999 -080808030400020904101000090911101000041212131300011214150500061616161600992991999091909999999990099919099099999999993000990999909999 -030809090904061005111104121002111300120414151300121617181300121901181800299909199099999009099991199999199909099901999019990399909999 -080809090600080309021004050404111000121314111000151614110100171818181800909099991999291099999999099009999999190099999903900909909999 -040801090900100808090904101112121200131415060500161602170300161618181804999990939990919090919999999901009099990919999919999912999990 -080803090900080610090900110510100200110404041200111314151200040114041200992999099999999909991909909999919999999000990111903999999099 -050308080400090909081000111212021300111212141500161717171700160404010600929990999099999999010999199999909999090910990999990030999999 -080804040300080804091000111112131400111515051400161515170200160117170600909999990299900909991999099990099099999999190991993190999999 -080804030900100511041200101314021500101314141600101317161600041317010600999290909199009999091990119999999999999991990909909930999999 -030604080804091011081200091313141200091313141200020515160100171819161604999902009999099999009999999999999999091900999903910999911190 -060108030904101008110904101012020400131415160500131414171800131919191900999200399999991099019991909901199091999999099900999099999999 -080404010900101010100900111106121300111114141300051504021300031616161300099990903999990909919999019999099999999099990901999919929999 -080802090400080810091104030510091200131415121200130616170100131818181804911999909099999029990999999909199900999901999093999909909990 -080808090300041010110600120510130200141415151504141416041700181801171700999299901999990909919999919000919909909910099999990399999999 -080803040600080204090900101004090900111012120500131414141400041515010400929999990091099991999999999990009999990109990999999030909999 -080501040904080810100900111112100900111102041300061414151500031617151500999009039999099990999999109991909999999910090999999199921999 -060108080900101108080900121314150904160514150900160217170400161804170300999090399991999910099990090109999999999999091199990999990929 -030808080904101105061204101013131400150213131600151718161600040119191900999002999090099099900999909919999019999991999119903099999999 -080904031000081104101000081112020500131313131400151516061400150117041400009299999990999999019990999909109999099190999099993099999099 -080910100300080910101104120902131400121515041400061615171400041805011400099999999299991099199991009919999099099999990019990939900999 -060809010500101109121200101314121200101302151504101316171704041819170300099999093090009999999991199999999910909919999919099999900029 -060801090400101109091204131414141500130516170200181816191904181816190300099999039090091000991999999900919999190991999999099999999929 -060508080300091008111200131402111500161417111500011417181504041404181800999990099299191901199999199099999099999999993000099999900999 -080409011000080409091000081112121300080414021300151614041300060314051300909999993999991990901990999909999991190999990190902999999909 -080808090900101104060500101213141404101502141400161617171800161601040300990999099999999990000990990909999111991999199199999302999999 -040308090900101112090200131313061404151516041700151516171700181816010500921990999990091999091999090990919999999990999009990930999999 -080804010500080809101000111213131304141516021700180619191700181819031704909999993099099999091900990099109901990019999999999999999290 -060108080400091008080400091004111100090312051100021314141400131315040400999090399991090999909990999999999929991910991199999990990099 -080904100400081110101200080513040300141413021500141413161500040113160600909999099090990999099999099009929911999991999991903990999999 -050803090900101010110904021213111104041415151500161617181800161601061900029999199999999019990911090901999099999019999909999390999909 -040104040400080909090900081010101100081212050200131212141400131306140300999990300090999990991999999909919990999999190999999999999029 -030809090900080804100400021112121200061314150100161617171804160517171800299999990999990919009911999991999001399990999090090999999999 -030808060900041008040900051102120900131111121400151516121700151516010400290999999990909990199991909099999999090919099019999930999999 -080805040904061010101000111202131300141515130400031515161700181801161600999009009099999909099911199199999991992990099990990399999999 -040108050400091010111200041010111100131415020600131416171700130316171700990990309090919999990909999990199009099991999919999999992999 -080409031000080411041000081111021000081212131300141212150500060401150400909299909999990990999999119919999990990999990900900399999909 -080406010400080909101000080911051200130214121200131516171700130304171700999999003099919999990909099010999919999919099199992099999999 -080109101004080809101000110609121204131409120500150216170400151816190300999909399999099910909999090199999199090199999990991909991129 -080809090600080509091000110402040300121213140400121215141600171701141600999099999990991909102999999001999919099999999100990399999999 -080105090200080809091000111213041000140615031000161615170400161615170400999199309199199990009909999090999909290999999900999999999909 -060808010500090808101100091213140400091515141400091504021604031717171600099999993099910999190900199990999999999991999900099919929999 -080904010500081011111200081002131300041014131300151515151600040604031600099999003099199999990991099991999099999919099999900029999999 -080306010500080809101104121313131304021414141500161617181904161620201900999999203099900019919999990199109199999990099009099099999999 -030608080400091008081104101012131100040214150100161617181800161617170500909992999099999019099999109011199919399909999009999999999909 -080309101104081213050200061213131400151216141404171218191900202001191904921109999190990999991909999999099009900909199919909399999990 -080909011000020909111000120513061000140415161004141715041800031715181800199991993999910910009999999190999090909990099099929999999999 -030809040400051011021200061313131300141415161700181815161704181815011700210999919090011999991909999999109900999099999999099939999999 -030408090400100808091100101004091100040212130500141415130600141401131600999992099099909999999999909910099911090999999019999390999909 -050801060400090810101100090812101100130812041100140212151100041616170300999990930099990999199901999999999099990190999909901999999129 -080910101100080210031100080412060400131414141400151516161600150105170400919099199991929999999909099190909999991009999999993009999909 -080809101004080809091100051212031300011414150600161614170400161602181904990909999999990900090999999909209399999191999999999910991100 -080309090900080504100200081112131300141415131300161715151804161604010600929999999199900990991900999990999909999991999090090030999999 -040803090900080810090900011010060200111111111200131415161200040405161200092999999999099999991939999919019999190900999099900099999999 -080904101100080909021100081212050300131212140100040615151600171717150400999199901990919999192999999999099091390090999990999090999999 -040808030900040808050900101010061100121212120200041313141500161301140400099299999990909990991999909099919999199199999900909390909999 -040802090300101111091200131111141400151515051404011617180600161619191904911990199299991909999909099919099999909199993000999999990990 -040108090904101108080400121202131300121214131300151614170300150614180500990900399991990919099991199999999990999999290009990909999909 -080809090400080809090100051010111100021012041100130314141500161718061504999099999999093909109999999999999100991909099999912999910090 -040808010900101008110904101012110900060213110900031415161600141405170400999990093999910099199999999091999919999190999909929009999909 -080803090500101106121300101104140200101104141400151116171700150401171700992099091999901999991999099999919090999991990019990399999999 -050809101004111102121200111113121200040614150300161617150100161818180400009909000999919999199999999091929909999919999913990099999909 -050104080400090909091000111212041000110612041000130214141000041515140300999090300999990991909919999999999099991990991199900999999929 -060803040500091011111200021013141404151617141400181817191904181817011900929990190090990999099919990190999110999099999919099939999999 -080808040300050910101104120910100200131306141500131316170400181801171700999999900299991009999909919909919909199991999019990390999999 -060108090904101111090904121111131300141502161300141517161800031504160500990900309990999099999909199099199911999909099999999090929999 -080409091000081104091000121314151000120402161600121717161600031706010500999999099990909909909900909990909901999919999999999030929999 -040809101000011109100400121309141404121313021500121616161700120306180500090999099993999991990990990999099091099991099999992900999099 -080309100600081111110200081212041304080512141504161617180100161617191900921999991090991999901999990999919999109001999003999909999999 -080909090900081003041100080212121100131405121504161616161700061801041700999999129999999991909991999099909099009001999990990309909999 -040108090904101112131300141512131300161515170600161605020400031818181800990900309999009901999909999099999991099991999900999919929999 -080609010400080809091000111112121200111102131400041516131400041703130500909999993099991990991990999991909991999909990099990999909209 -040108090600100808091100121314090200121215031600171717171604040518181800999990399090911990991990999990919909999992999991000099999999 -080909040400060909101000111111121000030502120400131414150100131414160400099990990099999999009999999291909999999010999993999919909109 -060102080900101011051204101013130300041413151504161616151700181818191900991190310199999099192991999909999090909099999990990990999999 -040801090900101111111100101213130500101414020400151414160300040406161600099999030990999991990991999909199999099991990999900092999999 -050608080300090408081000110402121200131313131400151616171404151616011400909990999290991909199999999001009999999199990919099939999999 -040108080800091011040400051212121200131313021400151617141400151717030600999990309990009991990999999019999991190099999999990920999999 -080801090900101011061204101314121204151617030500181802191904181820191900999999030099099099199991090919999019990912099999099199999199 -080109101000081112101004131414141400131302151504161717171704050618190300990999309991099010999999999999099919909919990999009019990929 -080909011000080909111000081213141500050204061600171818191904170318191904099999993999900999919991109910909099099199091999099999929990 -040801090400080810111100051212111100131414150200161414150400171706150300999090930999019999099999999009919999190999990990990999990929 -080901040400021010101000111106121200111104121200050313141500041313141500199991130099999919909999099999999990990290099909999999909999 -080104040500080809090900101111120200131111120400141516120300061516160400999999300099199990991909919099909999990099999092909999999909 -080909100300080211040600080511121200081311121200041411150400141401151500991299199999199999900990999999999000999090990990999399999999 -050804090600010810111100121213110200121415151600171415151600041404031600090099990993119990999990919900919999990999999999909999990929 -040808080800090610100400111212101300011212051300041415151300031616170200999990990999990900999909099999999390999199990191999991929119 -080809010500080809091000111111041200131414151604131404021700031818180600909999993099991999001999999909919099109991999990999010929999 -040806010400090910101000111112131400111102131500161617130400160517170300099999003099099999091990919999909991999919099099999999909929 -080501040400080809090900101011111200101013021400040613151500041613031500999999030099099990919999919999919990190091999999999999900929 -080304090900080610090900080210111100121313111100141513161700040105160400299999909999009999999910999919999190991990991990903090999999 -080901101000080911101004080911110500121313140400151302160300170604181800999999939999109099999909909919999099090990999119909912909099 -080802091004080811111004121211050300121314151600061718191600202020011604991109919999999090992999099901999999099010990919990039999990 -080901100400040910101104120913141400120915161400120205160600121717170300099990939099190099099909999990099990999109999990991999999929 -080103090900081004111100121013111100121013021400121513061600120417040500992999391990099999999901999999109991999990099099990090999099 -080905101004081112101000080213141404151516171800151519202004031919010600909909099999099999009991990011099999099919099919029930999999 -080808010900051011090900121313131300121406020400120415161600120415031600999999903990099999091999999900109099999091999909999999909929 -040105080600091011121304101011121400151516161400151516031400021718191404990990390090990099999990099919999909099999999999919929911190 -080109090400081010090400111010040600110512130200111415161700111403171700999099399990900999909909999991909901199990199009999999999299 -080309090900080406100200111213140400111212151604111718181600110518011600929999999190991909019999009999199090009991999099990939999999 -040106080804091011080800121314151600170205151600171819151600181819031604999900309990109999199901009019999909999199999199999999999290 -050608090400101011121300101011141300151511161604151511021600040117170300900090990999999999909999909099909919909991999919903902999999 -060808090400100808021100011212130500141215161704141815150300141819191904991090991990990991910939999990199099109099299999999099999990 -080809101100030802101104120613101104141413101500141405160100171717180400919999919992999099199909190099909999099991999093990909999009 -040808010400090910101000090906111100121314111100121516170200120305171704099999093099099999991999099999999000999999199111992099999990 -080409100300111112121200111102131300011414151600171414151600050406041600091290919999999999199999099901999390099999990999900009999999 -040104060300080809101000081102101000121204040500121313131300041414151500999990300299999999099911199090999999999090099999900909999999 -040608010900101008090900021008111100121314111100031314150500041614171804909990993999119919909999999199999190999990992999999900900900 -030808080800090909101000021106121000131412120400131515151500051601040400299999199999909919999990999109999999099090991999990300909999 -030408080400091008081100090605121300091414141500021616171704181816011700999992099090999999900999099909009999991909099919019939991999 -080909010600080909101000040204111200131311111400051304151500031604151500099999993099919991009909909919909999999999090909991999920999 -060104080800090910080800090911111104121314141500120214050400121617170300999990309999009999099999990190999199099190099999991999991929 -080409031000080509101000081109041200080609130200141415161700140115181704909999992999999990991990999999019999190001999119993909999900 -080905100400080911111204040911110100020913131400150313131400151516170600990999990090990099999991939090999199091999999999992099999009 -080808080400030502091000111111111000011213130400121214040400061514141600999992919099919990919999909919999309099990999099990990909909 -080909101000080809101000011111111100051213140200041513140400061603170400999999999999909990099939999900919099199999090099990919909209 -080910100400080911111200080911110500131314140300131304021500040106161700999999909099990999999909909909099919999991299099903911999019 -080809100300080211120400131313141404061505141400161617171804161617011800991299019999190991909999990919999999990100999190099939999999 -080809100500111109120100111102131300140315131304061515161704181818190400991099091999993999109991999190999299900990999990099900999099 -080904100300081104120600081314120200081315151500161317171804051301171800909299091999999990090990919999919099990919099099009399999999 -080104090904081010101000080611051200080413141500021617181800161617031800999909309091999999000990999990909909091990991199999999999299 -040808030900101112040900101013020900061413130400151515150100051617171700099299099999909990099999119909909099999091999993999909900999 -040804030500091010111100091010121300141404040200011415151500161616160600099999002099999999919909919909019999999909193199990990999999 -040508030600091008080200111111111200131314121204151516171804151519011800992990099099991900991999999990999900909991999900099039990999 -080106040900081011111100121010130200120414130400121516130300121616130500999099309090199999991909919990999999099009990992999999999909 -080904011000080911121000080913140500061313021500161617171804161617031904999999903999910999199900009999999991190909199099099991999920 -030408040600090208101000111108101000121308041400121516161400051701161400990992099099109911999999999999999000999919999099990399909909 -030809100600050211100400121313101400151513161604171718161600171718010400219099919999199901990999909099909999909019999019999930999999 -080808010400060909090900021011111200130411111200140515161700140316160400999999903090999999910911999109999999991900099099999990929999 -040809090900031011110500121010111300120614151304161717181304021717011300009999990999990929999999999990099909901900999910019939919999 -040108080900101008080400101011121200131406021500051416161500041417031500999090399099199999019999999900199099090991999999999199909299 -040809090300101109121200100413140200101515151600101717181600060117051604099999099299099999019990919990919999999099990911903999999900 -080808080400090206031000091105041000091213141500161613131504161601171800999999192099099991999999999910009099999190999199099300999909 -080409100500081112021300081414061300011415151304161718150300161919191904990099009990911990199999909990999399909099290099999099999990 -080809100500081111100100121111101300121415161304141417021304031819061304909099909999903999999999999990199009109999999911099109921990 -040308080400090410080200111104121200131313121200061414151600051414011600929090999999001909091999999099999999999901090909999939909999 -060809010500101011111100101012121304141412121300151617021804031919191904009999903099999999919990900999999909999991991110029990999990 -080808010500090910111200090910041300140610151504161702150300171718180400999999003099910999990999909099999909900919299919909909999909 -050108080800091010110300091010041200091302141200151516161700041516060400999990390991909999992999999999099111190990099999999990909099 -080409090500101103090400121106131300141102131300151516171704181818011700099090999999299909900999999090999011999999199009009939999999 -040809050300101011041200101011061200041313131400151515150200040116161600000999099299909999999999999900019099999099199999903191999999 -080808080904041005110300121006021300121415161704121818191700121801191900999109901299999909919909919990919009109901999919999399999999 -080903100600080909110400121202131400151516051404151516161400041718011400929099990999909909190990119999999999009999999091999039900999 -040504010600080808090900101011120900031013131400150413131400151602041400999990003099909909919999199991999999092999999999990199911099 -080909031000080409111104081212111100061314140200011514140400051617181800099299999199099099099999999990919019199199993990999099900099 -080808090400101102091200131414090100031415150600161615151704161604051700991999919091190919999999939299099909099999999090099009999999 -040809101000051103101004120213131300121415161600171718161604191919010600019999129990999091909990999919999019999919999019099030999999 -040808090400100611121300101011031300041411051300011414041300151515160200999090900999090999999990929999999000999999993909999191999119 -030608090904101111091200131111051200140215161204171816161200171901202004909902909999909919999999099111999199909919999090990309909990 -050808010400090909101000111206101000111314150400111304021600110403161600999990903099909909999900999909199990099901999991990999999299 -020808080300091010110400121010111304141405111500161417181804160106191800199291999999999919990919990919909999990900099009093909999099 -030401080800091011080500091213141400150216141400151716181804150406181800999992039099909990199999199109999111999099099999090999999099 -030809090600100411020500101213141500101617141500101819191504181819011504219099991990910999199909999901999901099991999099099939999990 -040808030900100808110900120513110900121414110904151617021800040117170600999990992999999909099999009909999999900091990190903910999999 -080803090600100811090400020511091200131314091500131314161704181814010400929099999991099919990990999199909999099990999110090930999999 -080801090900081010090900041111110400121202131400121215040500061615170300999999939990909991999999999019009919099910099999990999909129 -080503090900080810091100121202131104011415151104161715151804192020200600992999099999009999919999190901999399009199990190009990909999 -030804091000060809091000020811120500131111141400151616141400041616010400290999999999990909909919999199009990991999991919999930909999 -080901101000080909101000111204131400110602151400110416171400031616050400999999939999919900919909009999199901999919999090999900929999 -080903041000111212131004021412131000151616061000151616171700051801170400129091999999909019999919999910999999099999090909990390909999 -080909090904081011120100131314151604130617170200181817191904181805200300099909099999013999199990110990919909990999199999099919990929 -080109090900080810111200131306050400131302140400151516170400151516170300999999390099009991900999999990999910090919999910999999999929 -080808080600010905101000111111100300121212130400140402151500141404160400999999009093999991999999929991199999090911999019999009999909 -080802060400080910101000011111040300121111131300121415151600051715150400910999919091999991992939099999999990999909990090999990900999 -080808080500020403091000111112121300041412131304151617181800060117181800999991029099990919909999999919999000909100990999903999999999 -080309101004111209131300140209041300140509151504161617151500161618010600299901999091999991999991099999909901900909999999999030990999 -080906010400080910111100120910111100050902131400151516131700031504130400999999903090919999999901999099009919999919099199929990990999 -080803090600080810111200021310111204041310111200141516111700141804010500929099990999999919999919990099999911099999990000990930990999 -040401080500091010101000111104121200111113021400031515151400161616060400999090030999999909091999999999199911092990999999999000999999 -080808010909101112130409101114141515100414140215161718191920060403191905999999903990900999919090919999999999919099190009000999099299 -080809101112081313021403011313151605041717151606181917152020212104152020991919911120991999999939090999999090009999090099909099999999 -040108080906101111120913141111151616141717021616140517181904140420191903999900309990990099909009199909199999999991900999999919990092 -040108080300090908101004090902111104121213110500121214151600171717180600999290399999999099109999990911999910999999099000990909999909 -080808010904101011110904121011110904120613140900151613170200050318192000999909903999990099999990990990199909990991990091909991992119 -080909101000060909041000110212130100110514151500111616161504030417181800090990999999999991109919139990099909999990999999029090990999 -060108090904101112091304141415151600141415171600021818051600192020031604990900309090099091990990999999999990991990990999919999919290 -040808030600090810101100121313101404121502161404121718161400120105161400999990992090999990990999990990199111909999991090993099999999 -050108080400090908100200110912131400111512041400111512061600110412040300999990399099191909111999199909999990999999199909999992909099 -020808080300091006111100090412111104091312121400151515151400050116170400199291909990999990999999090999999199099109999999903099999009 -060808010900100811090904121311140400121302151600121317181604121305190300999990993990019099909901909999099919099919999919099019999929 -080309101000080509101004110409121204021309141200151316171800191919010600299999999990909019999909990199999109099990990110909930999999 -080309101000080909101004080504111100021213041400061515161400171515011400299999999999909099990999999100909190999109999910909939909999 -030504080900101011080900101011080900040211121300141411150100060415150400999992009999999999999999909919909999090190999193909199990909 -080109061000081109101000081209131304081202141400151617141400040504180300999099399991999999909919090990999919999019990919900019999929 -080901031010081111111010081212121202080413041415061613131717051804191917099299039999999999919199991900909999000999909099990009909999 -080909030604080509100211081212131314081204131315161718192015162121210115992999999009911990991009090999999990909991990001999903999999 -030809091010111111041010040602121313141415161604041417161601041818181805299999109999999990109099199090109909909999990909399990909990 -080309091004111102091212130414151212131414150416131717151819130405150106299901999099199999109999999909990091909999909901099993009099 -040809090909100811020603120811131305141411130415141416171819040120171818999990991929910909999909999099990910999999009099003099999009 -040809101111031210101113041214021513161616161717041819191717052019190106000999999992990999990901190999109999999919990091999993000999 -040809061010110809121010050809131314150802161617181919161604030119202020999990990990909999999099999090090111901999999919923909099999 -080801040309041010021109121313131309141515150609160405171818161604191818999929030990991191919909999009909999990990999909990909990909 -060809090510110809090310110812131410151504141410011516021718041920202004009909999999999999992900099999099999999901003919091199001999 -020809100111120404131411121505161611121706161611031717181904202020181919111991091399901099990909099909999990992999009990999099999999 -030604080109101112080809101302141509100516161515171816161920172121212104999992009390099099991911199999199999190099909099099990999990 -040108080809101111121209131114121209151617021818191616201818190405062103999900390999909909999991999091999001199990990999999001909992 -040504010808090909091004021112101013141512041616170412061616170312181818999990003009999991909910990199090099991099999990999999929099 -080808090904030402090901041011121313141414141516051718040616171718181916999902919999019399990900009999909999000990999099999990999900 -050408090910111208021303121208131314151608170418061619172020041601172020909910991920919999999990090909990099900919999909999399909909 -040809100111080806101211131414151211161404171211181818191902040403191905000999999399900109909999099099099990990999919999100999099299 -080909031005040909101004111111021213141415151515141416171717041819190106092900999999919099919999011999991999999909919099990903009999 -080801090910080811111210130614111210150214141210161718191204050420032121999909930999190910099999999199999199990199909119909020990999 -080809090304080210101112131410100406151617171717181819202021180119202005999299919900190091990019999199999009991909909909993999099999 -060105080804091011111111121213020414121213151504161713151503181819191904999900300990999991119091909999190999990999990999290999990990 -040108080804090909091011121213141015020616170518191916162020191903212020999990309909990999199091099100090999091999909999999909992909 -050808090104060808090910041112121314041112121414041516020403171717181818090999999300999999991009919999999009099991090909990019299999 -080809090404080809091011121304060314121505161414171818181819170120202002999999999009090009999990999909029909990090910999993199199991 -080805090110080811121210060411121213041411151313030402161718191919171704990999990399099009999990090999199009999091009919929199099999 -040104080504090909101112041314141414151316161616151302171818060317171804999090300909990001909990999999999009999999099119909999092999 -080801090902081011090912131314140612041516141712181816190503181816202104999919039919019990090999999990999009099990029099999909999900 -080803090104101011121314040612121515160517021515161618181818191919190420992990991309009190999199999099199909199909909099999909099990 -080409090909101112060404111112131313141415160217141415150417180105040317099990909999999909900099099900999999119991099199903009999992 -080809011004080809091011120213040611141415161711141415051711030415041804919909993999990091090919099190999990909990999999920990999090 -040804091003110809091004060812121004050812120213141516171713040116161813999920909990999009099999999999910009999099190119903999999900 -040809091010110309091212130402041212141414140615161616161715051801171715919090299999990909199909099091999999909199999999990309909990 -080910011111081212121113081414150413161414151513171802060413051819202103009999903999990099100999999099999999990919990909999190909112 -080805010909080810110912040610111304141510111616170210181804031919191804999999903909010909999090909999909199991199909109929999999900 -030809061010110409121212110509130404110209041415011617171804161617171818900992099099999999909999099909900110909919093999999999091909 -050808040906101112131414101012151403161712151818011912021818202020200404999900090099009999999999999099902090999099993091991910099999 -050801090900030810090900110812130600110804131300110214151500041604151500099999939999909929199991099990909999999199991009990999900999 -080809011000040909101000111105121304111102141500161617040600161618180300999999093990909990919999010999919991190910099999999199999929 -080406090900081011110900080212030400081313140400151513141600151505010400990999099990990999120991999919999099999999099010999030999999 -080808090904021010090100111010121304140515161300170318181304171706192000991909919991993919909999900199099900991990992999099990999009 -080910111100121310110100061414151604021414171804192005171804191903171800099990099999113901909999900999909199001099999099099999992999 -050809040600100811121200131313121204021414150100161617181800031604181800990990909099099909099999190991199199391990999909999099929999 -050408010900101108080900121314140900151616021704181616191700181806031704999990093990090990199909999009199999100999999991999029999990 -080909090900080502100300111213131304111415161600111718191900040106191904999999911999992900199999990901999910999109990909903999999090 -040809090900101002060300111112131300041415131300161617170500160117170400099999019299909990199999999901999010999199099099993999999909 -060801040400040808091000111112131000021414131000151514131600151503130500099999930090900991909990999190999999991999999990999990992999 -080909090300080210110600080510121200131313131200141516171704180404011700999299199999190999909990999091099999999991990009009039909999 -080809101000110309101200020609131200141513131200011616161604051718040400999991299999990919999999099109999119099919993999090090909099 -030804010900100811110900100811110900040212050900041314141500131314140600209999993999990999999909999011099919999009999990909990999999 -030808010900100808090900111212121204130214141505131614141704181806192004999992993999909919919999990199109119909099099999090990999000 -080109090400080809090400041004111200131313131400051515021400031616160600999099399999099991990999909010099999090991999909999910929999 -080808020400030404090400101011090900101011110500121212131400151506010400991092091999900999999990999999199999999901099990909030999999 -080910031104021212121104131415161600131515161604061718191900052001191900112901999999999010990999999909999190909019090999990399909999 -080604090400080210101100081210131100081414151100031616151100041616010500999099000999199991919919999999199999992909999900999930909999 -060108090900101010090900041111120200131111041400151617171400151805031404990990309999999999199999119099019099990099999991990929990990 -080503090900081004090900081010110200121313040600141313151600140117170400092999999999909999991909119919909090990999999900993090999999 -030808091004050808091000110602091200130414141400151516171800151504011800299909999999999909190990909091099999990099199001999039999999 -080809101004110809101004110209121200111314140300151614170100041806190500990909999999999090999991199919929019990099999913900909990909 -080910100600030910101100120213111100120404140400120415151500121616010500199992999099990991999901199999199090999991099999990030999999 -080901101000080911101000080904121200130902041404151616050600151617180300099999939999109999090999999099909910900919099909999199999129 -060809011000111109121004021309041000140409151000141616170500140316181800009999993999110010909999999109999999099900099999999909929999 -080409011000081112121000081314120600150214160400151514171704180305171700909999903990190991099999909919999990099199999909019099929999 -080809031000040909041000051112021000131414141400131516160400060116161700909299999990999990909999119001999099999199999099903990999909 -080305090900081011120900081314121504021617121500181919121504060120201504999999209991999999090990990109999119990919999990003009999990 -040601080904101111120500101113131400151513131600151503040200171718181800999000030090919999919999919999919909999999199990990291999999 -080309090600080809090200101011121300101014150100050414151604171717150400929999999099991990991990119991999991390999999990090090999999 -040808080800090903101004090911111100121212130200011415160400051715180600999990990999999099290999999909919999199901093119990909909909 -040808010400090808101000041112101000030502131300141415161600061715151600999990993090909909999990099909919991992910999199990999909999 -030809040600100808111100101202131400101504130500101616171700040116171700200999999099999999190911909999999909099090991909903999999999 -040808090900100808040904050211111200031311111200141415160100140617181800090999999990909009099991999919999999092101999993990099999099 -080801060400091011121200131414141200041505021600171718181600171718031604999990030099109901999999999000199999199090999999999999999920 -080309091000080802051000041112041000131415041000131416161700130116160600299999909999190999199991909019999900999999090090993999999909 -080801090900080810111100121212021104041314151500161304151500060517180300999999939099019999099999910000199999999909990999909919990029 -080808010400091011121200091314120600090415161600031702181800051717181804999999903090019999199990999901009999999919092999999199909990 -080404030900021010100900111213130900141413151500141405161600040106161600099990902991999919999900999199909990999900999999903999999099 -080909101104080909031104081202131100061415160100171815191905202121191904991909992999999099199901909919099011399090990999009999909990 -080809050400010809091000111212121000111302041000111415161000110603160400999999990093199999199909909919999910999019999919990990999299 -080109101004080811101000121213140200151515161700061804191700051818031704990909309999099991999991119909019999999090990909999999909920 -030808080600090910021100051212131304141212131300151617181800040117171804299999991099910990199999990099999099999199090099903909999990 -040808080900060510110900120213131400121515141404121515030400120116171800099099990999099909009911999999199999909992991999993090999009 -080104090900080810090900111010060500111202131300141515160400041515170300999999309999109909999999999919009911990991999900909919999929 -050808080300090610041100090912041100131314041100131315160200171701161600999990009299909999099990099990999999999900199019990391999999 -080901050400080909101100080612101100041314101500031602101500161604041500999999930090919999999909009990999009999999999110929099999909 -080805090910060811090904121314140315120416161715121819192015120119192102999909909900009999099900999999929999999009190199193999199911 -080909101006080909111111080412131304081415130316011405041616041417180219999999990900999999990999099900990009999909293999999909101111 -040104080800091011080800121011110400121202050400131415151600061415150300999990309991999919909990909999999910990919090990909999999929 -040108090400101108121300141408121300140404151500021616151500061616030500990090399990999991999990009990099999991099991999909990999299 -080104090900081010090900080511111100121202131300121206041300030414151600990999399990999999109909999999199911999900999999929990990009 -050808090900010808090900101112061300101111141300100415021304031617041300099999999993909991090909099999999991999991999019099109921999 -080104091000080804091000111213091400110506090400110215031600111717161600990999399999099910990990009909909999999909991099991929999199 -080409011000111209131004141415161000141417170600181817171900031802051904099990993990000009919999199991999999099999999990929199991090 -080809091004011112091000131314060300131315021604171718191900170520191904999009009993099991099999099999929911909001199999999099990990 -040808090900101112090900131212140300011515151604061718181600051918021604999990099999999900909909999909029399909199990199990999909110 -080909100400081110101200081314021204081305061200151316161700040116160300999099099990999999099991110990099099990999199099903992999999 -060804010900041011110900101011110900121204131400150204131600151503130500099999003990199999999999909910099999099199091099999990992999 -080808090400101010110600011213111100141415050200161604171700161603171704990099909999990990999931199900919990999009199999999999999290 -040805040900040806101000110812121300110212141300031515161300041515011300009099999090999999009919999919099999992190999910999939909999 -060808080800010910020500110912130400140912151500160904150300161718181804099999119093919999919909909099199909990999299099990999990990 -080809100400050909111204130402060300131314150100161617171700161618181800999099090990911099102990999991999999399011999999999909990999 -080809060400080509101100121209100100121213131300141515020400040415160300900999999099990990999990139991999999990991999910909999990129 -040108090900100808090900111111121200061313050200141313151600040403171700990990399990999991999999199990919090999999190991900919999299 -080109090500080809101104121313130400120204141400121516171700060318171700999999399099900019909919909919099909999190999199909199992999 -080910110400080612120100080512121300041414140400151602171700151616031700000099909999093999999909909991909999990910990199999999999299 -080910110300060212051300041412121300151416161604151417170400151401171800011290190999999991999901999991909099909919999999999390999909 -050403080800091010100800111111110200121313061400121513161700121501040400992990099999999900991999999990919099999990190911999300999999 -080409031004111109051200111109021300141515161300171515061300170104181800099200999199099999901999919099199991990990990999993090999999 -080904011000041111111004121212050600131302141400151316141400151517180300099990003999990099109999999919909910990919999999999199999129 -060809011000111111101000121213141500121216021504171718192004171705032004009999903999909999019990919999999990109001999991099099999920 -080806030900040802101100121213141400121213140400151613171700050113171704999299909199911900199999999999999999999090090199903999999090 -050809101000110809121204130814151200131616021700131616041804130106031900999990990999909009099999199901199999199990190999093091999929 -080910101000030602111204131313141200051516161200171816161204171818010400119992919999019099919999999000199999099099990999099930999999 -020809100300110612121304141512131304161717181804161920181805160121212100111291999999999010999919090910999099909199999009093909999999 -030809101100121206021100131314141100131315161600040517161600041717010400211999991999991909099999999999019900990009999999999930909999 -080804050900080803101100120206101100131414141100151616170100041604171700909099999099299919999919099019099999090991999903909999990999 -040208080900061004080300051011111100121013141500121004141600120104161600019199199290099999999990999090999990099999090099993999999099 -080903050400080210111100121212111100060413141500161617181504161717011500129999990091199999199999999001099999099910999919090939999999 -080910011100040412131100141512161600141412171604050212170600181818180300009990903999919990900990999999099909909999099199901999999929 -040809010500080809101000040611101000040402121300141415161600031415161600999990993099009909099990999999109991990019099199999999929999 -080409030500080809091000111111021000061212121000131414151000040104040400992999099099999909919999199919999099999190990990903000999999 -060108090904101010100300111205131400151502131304161617180400161619191900990900309999999991992919919190999911909090999090999099999999 -040408090300101108090900041112121200041105020600011314151500041313151500909990999290909999919900999999199099999901093999999099909199 -080806010500080910101100021210101304141415131300141415161704180315160400999999903090090999999911900199999990999990999990019990929999 -080808080900101112090900030402131300040414140100150614140500161617171700999999099991199929190990999991099909390999999090909909990999 -080909100600030909101100120213111100120413140400121516161700040116160500199992999099999991909919999999099099999900091090903999999909 -080909100500080909110100080411111200021314151200160315151204161706041200999099990990993990099999909999199111991999999999092099919909 -080809010600080809101104121309141500120216160500121716181804121719031804909999993099900090919909909999109919999190999999099999991290 -040604080900101011111200131014141400131302151500161616151500031705010400990090099099990999990990999999909901999919999999991930920999 -050808080800090210111100091212110300091313060400141315151500040104160400099999099991119999999909929999999190999999090099903009999909 -080808080900041002110300121011111304141015161300061716161300051818010400999199919299999909199999990091999001999999990090990930909999 -080809090300080810051100121010061300041404151600011415150200041417171700909999990299999909991909099909919009999999193199999191909999 -040401080800091011080800121212040600051302141400151516141400171716160300999990039999109901900999999991999000999919999099990999999929 -050108040400091008111100121212111100130214140400151616171700060316171700999990390091009919999999999019909909990199999909909999992999 -080501090900081011090900101012121304141502121600041717171600031819061604999999039990109999990991990901909099990919999999999109921990 -080804040300080805090900061010090900111213021400011213141400041215160400909999990299099990999999999009199099999991993909999919901109 -060803040900101112050900021212130904141415160900141417161600181817010400029099199991999919909909990199099911999999099909999930990999 -080910101100081212021100031212131100041414151100051414151500041606010400009999909999919999919929919999999090999999190999990030909999 -040108050400090910111100090912110300131313131400061502161600151504161600990990309099999999099990999919029999990019199919999099999999 -030804090900101112060900101312121400100204051400101516161404171818011400290999199999999991900999909919999199999900991190009939909999 -080903101000041111111000041213060200040514151500161614151500160117171700092990099999999990991900099990919999990099999119993099999999 -040108090900101108090500100412121300101412120400021515151500161606030400999990399991009999090999909909999099091999991999909920990999 -080905031004081111111204131314021500131614171700181814171900181801060400909209099199991009919999919999919099999099099019999300999999 -040804090300100211090500121313141504121606171700121616171700120118181800009299099991119919900999900900999999999999991909993099999999 -050808080804030902101000061112101000131314150400131617181800161601191904099909119992999999199991999019099990099109999109999309999990 -080909101000081109060500080312131400021515151404161717181400041717011404990999999991999992000999009199099999901990991919909939999990 -080903101000080406101000021111041200041111051200041314151200131301151500129999999990909919990919909999999099099019990900999399999999 -040808090300100808090400101102091200131414141400131516171804130105170600999290999999999991190909199919909099999199999000093090999999 -040808010600090810101000091112121300141412051500141403160200040417171700999990993090099990991999909909919999099999199929900911999999 -040801040900100811110900050811110400121202131300121214041300030414150600999090939990990999999999909009199911999900999999929999990009 -040108080600091010101000090911121300041402121300151515151300030516040400999990309090999999199999109909999091999919999999929090990099 -080910100600030402111100050412111100131313131400151516171400041616011400119992919099099999199999999001099999099091999099999939909999 -080808040900030602101100041212100400041212100500131415151600131315011600999092919099910990999909909999999099099001990990999939999999 -080803090400080810111200131302121204131305141504161717171500160601181900992999991099919990199999190990199999909091990999990300999909 -030108080400091008081104091213111104141513161700021805061700191919191700999092399999099091999990090119999990091100991999990999999999 -080909100500080909100400081112131300141402061304011415160400171717180300999099999990909999990901099911099999909919993910990919999929 -060404080400090909100100111212101000111202131400111515051600031515171700990090090999903909999999099999919991199910099999999990929999 -080809040500010809101100121213141504121216151504171702060300171718191900999999990093090991909991990991099990900919999909999192999199 -040808090900041010090900011010110200121212041300140515151300161706031300099999099990909999999939119909019999990999990991909929900999 -040809101000050411100100121213131300120214041500161617171500161606031500009999009999903909919999999991909010999199999199999929990999 -060808090900101111090904011103040200041213141400151515151400161617180500999990099990919099991939909902919991990099999999909099999009 -040808010900040808100900111112040900051312141400131312140200060315161700099999993999901900099999909009919999999999199999909991992119 -080809010500081010101004111212131300110612131304111415021600031718191604909999903099999009109999999999999999909019099919990919921190 -080901060400041010111100041010111100121202131400151617171400031616051400099990030099919999999909999999109911991090999999929909999999 -080809090500030809090400060210111100121314111104151614170400150114171800999092999999999991090990999019999010909999990109993990999909 -080809101004011109101004051209021300141215151604141715151800141920060300990909099993099091999999919099119019909999199099990992990099 -080909010400101111111100051212121304141402131304140615161600031718161600099990093099999909991999910991999909909919090999999199921999 -050808090400011010111200131010111204131415110400130206031600131718161600090099099993900999999919990999999190099109999999991929991199 -040809091004111109091004111212021300141212051500141617031800140117170600009909999999090099099999119999919090999199199092993999999909 -060809101000030809101000111209130500041409150400040215150100161616171700090999999999099929999919009919999099099109990993991199999099 -080904010600080910101100121313101400151313041400051602041400161617031400909999993090090909199999909099999999090919999109999999991299 -080309090500081009091100121204021100061213141400151617141404151518010400999099299999199909919999919990919090999099999009099030990999 -020808080300090410101000091112131300140404131300141515151500040116050600199291099999999999099909099109999999999900991999903090999099 -030404080800091011081200090911131200040214151200161616151200050601150400990992099999999990909999999010099911099999999919900390999999 -030808060900101008020900041004111100121304111100121314150100121304160500299999990999010909919999099999999999999901999003999909909009 -080809100600080311111100121313140200041313141504161717181800040501181800909099900999299999991909999099919999109901990919900399999999 -030808080800040910021100041212121200130506141400130415161700131515011700299999991990091999091999999099919099999901999000999939909999 -030808080200040909090900061011110400121005131404151516171700151518011700299199999190999999919990999099109999000901999909999039990999 -040808080300060204090400101010090900111112121300111412121300050115161700099299199990099991990999099919999999999999991099903090999009 -080106090904080810090900111213140500111215151604111215031700021819201704990909399999009910099999009990999999009999099999919929911190 -080801090400080810111100120610100500121302140400121516141400120403171700999099930999009909999999909909199911099199999199990209999999 -080809091000111209031004111202041004111314151000161718191900060501191900909999992999999099199991990919099090999109090109900399999999 -020809010400100811121200100813131200100513130400031414151600171714060400119991913099919999909999999909999999092900999990990900999999 -080806010900080810110900121213111400021215111400161705041400171703041404999999903999110991090999999190999999991909991990999999992900 -080801090900080810090500041111120600131414121504030414121500161718021500999999939999910990019999909099999090009999999099929919911199 -080909060400080804101100011212101300141212100200150504101600151503171700999999090099909990990939109999999099190999190909999991999299 -080403090500080210091100081212111100041212131300041415131300041615010600992999099099119991999909999099909991999999990909990930900999 -080304090900080410090900081112121200021314140500151616170100061616171704299999909999999990009999999109009909991990991913909999999990 -080803090900050810101000110404120200131415151600011715151600171706041600992999999199099909991999009009919009999999993191999999990909 -030805090900101104090900101213140100101516171700021516171700040618181804909992099999099990909991139910099999991999991999900099999990 -050809100300110209090600111212131300141415131300141416171804040116160400911290199991990999999999999109999900999909999900003990999999 -080808080400090310101100021213141504161213171804191213181800191901060500999991209099999919990999000199099999901990991199999300999999 -040808010900040808100900110212120900111314140900111315161700031304050600099999993990901999999901919919999999099999099900999000929999 -040108080800090909061000041112120400021112121300141415151600141403150500999990309099999909100991999999999199091999099990999999992909 -050804090900101112090904131212140300151516021700011818171700061818191904909990099999999000909909999909029991999011993999999999909090 -060508090904100808111104121314110400021515150300161617180100161619191900999900099090999009999900009909999199291999999113999099999999 -080806090400100211091200031111091200011304090500141515161600041515041600990091199999199929999999909919999399099000990909909999999909 -040809100400050809030600111109121300110209121400151516121404151501171800000099999999929909990999909999999119991999999109099300999909 -030808091000111112041300061114141500160214140500011717181804191919181804990092999099909999090999909019999019099991993919090999999990 -080806010900080810100900051110120904131313020900141504161600141704031800999999903999991990999900910909199999999091990099990991990929 -050404030800091010080800090411020400091212121200130414140100151514140600999290009999999999019999999900109099999919990993909999990909 -080808090300101009091100100502121100131404121100151617121100040601181804999299909999099999199999199909999009990999990010900390999990 -080801090900081011090900041211131300061211130200141215031604050417181600999999939990099999909900199999919099999999190099009029990919 -050108080800090910101004091112131300140206131300151616041700151618030400999990309999199099199991099010999999990190099999999190999299 -040805010900101111090904121111131400120215041600121717061600121717031600909990093999919009990909909919009919999919999990999999999299 -080808010900041010090904111010121200131402121200130615161600030417180500999999903999909009919909999999999119999011999919929009990909 -080109101004080909101004081112060300081314151600171302151800171304150500990909399990999091999999099910929909990999199111999099999909 -080109101104081213130500081213130400081214151600021703150400061717181800990009309091999999999990909999999900091999091999909299999099 -080409010600080410111100081210111100081310141400150216171400040516170300909999903099099999999900199999909919990199999199909999990129 -080609090300080209041000081112121000081304120500011415151500041617171700999299099991109999999900909999999109999199093099990099909999 -080809090300060209090400101011111200131011141500131616161704131801040500999299099990199991990999999999909919099910099999090300909999 -030802050600080809091000041109091000121314151500121614151704121814010400919992910099999999999909909909199909999999099009090930909999 -080808080300090506101004110412101000131412021500011612171500161617170400999990999290999009099909999099199009199999993111999999999909 -030809101000050211101000121212040600131414141400011515161600041504171700219999919990109991999999099199909199999199993909999909900999 -080106091000081111110200120513131404151613131700181616031904202020191904999199301190999909091990990099919099990999199992009999999990 -080409090300081009091104080512131104081415061100161417170200161401171800999999099299099099099990090990099009999909190999999391999919 -040806090300040810090900110812130200110813130400141415161700141415010500099299909990999999091990919999999999990019099010999930999999 -040408010400090909091000050611121300141415151300141415151300031616160200909990903099991999001990999099099999999999999999990991929919 -080809020500030410111200130614141400131515151500161617181800161604011804911992991099090999019999999909199999990991999009999039999990 -050808080804090909090400011010111100121010111304121414150200120316170600099909099999999990990939199999919099909909199991999910992199 -080808040900011010110900041010120900021306040900141516160500141403171700999999900993900999999909099910099199991099999090999909992999 -040801090400101111091200101111061200100513141400151516021404151517180300099999039090900999999999099991999091990991999919099199999129 -030809090904101111120600131114150500161414151704021818181800191919010400909902099999990919009999999199909999001900999999919130999999 -080804010500090909091000111212131400020412151500161717151500161603060400999999003099990919990999009109909999991909999999999900992999 -080409090400080810101004011112130600141414141500160217151500051818180300099099909999099090999930009919999999991999991909991099909929 -080909010500080909101104080204121300141406151304160317181300191917171300999999993091910099009919909919099990901990992909909999999999 -080109091004080809091000111112131004140613131004021516171800191919030500999909399999099919099999990190999909001999091119909920999999 -080109050400081011121200081111120200131415151600131717061804131717031904990999309090999991999999119000919999999090199999099991999920 -080803010500080804090900101102121300101414151500101614151700100404061700929999993099999991091901119999099990999999099099990009999999 -040308080900101008080900041006020900051112131400151512121600171717010400929990999999999999919909099909109091999099099090999030999999 -080809010400080809091000110412121200111313041400111515021600031515060500909999993099990999919909999990919099999990199911999900929999 -040808030900100802060900101112130900051114140400151114140400161101171700992990999999109999199901909999099999090999999190909309909999 -080809090900080803040200101111061200131313141504161617141800161604010500999999929199990909991999909090919990109999999000999030999999 -080801090500100811120400101313141500161616161500021706041504181818031500999099930990109991900999909919999999991990991099091999999299 -040608030900101008080900101005021100041212131100041212131100141501041100999290099999991999919990919909999099999999999911900399909909 -040804030900041010100900111104120900111113120200141313151500060501151500009299099999999900999999999990919999990090199919900399999999 -040608090904101108090900011208050400131208141400131202140300131215161700909900999990909990909930999999909999999999990919999112991919 -080409090300080409091000081102121000130614140500131514141600130104171700099299999999099999199911909199099099099999991090993090999999 -080909090300080210111100120413111104141515151500141416171804051901170600999299199990199999199909990091099999999919999000090390909999 -080805010400080809090900101011121300101011141500040411020600031616171700999999903099099990919999019999919999190091999990999919929199 -030808040900060408020900101111121200041111121300141415161700141405011700299999990999911900991909999999909999990901099009999039999999 -080309101104081212120200131314151504131616151500171616180100060519180400921109999190999999901990090999999999999991990903909999990009 -080909010600100311111100101002121300041414151300161414051304041718181300099990993092999999991991119009999990999990990999000999990999 -080906010500101111111204041314141500131314141500041602170300181818171700099990003099990000199999909999999999999019990919990992999999 -080309100500081109091204081314141200021514161200171718181204171706010400990099299999990091999919999199999190999190999190099030999999 -080801060900101011121200101002131200141516131304171516041800041516030500999090939099199999999991099001909999900999099990909990999299 -080106090904080810090900110510121200110210131200141510160400170318191904999909309999009919990909999999999190999190991990919099929090 -060401050800091011120800091312121400091516141404090204171700181818180300999090039999190991099909909910999999909109099999991999999929 -080808030400020605091000111213090400121214091500161614091500041601171500992991999090990919099911999991909999999999999009999309909909 -040801060900101011120900131111050900021404151500041616151500031617171700099099039999000999909919999199909199990109999999999999920999 -080809100500111109020400111109121200131309031200141516171804040106181800909099990999910999919999999099999919299199990009003009999999 -050108080400090910081100090910121300140210120600151515161600170318041604999990399099199999900999009999909119991990999999919099929090 -040804010500091011121300091414141400091502161600091517171800031506181804009999093099001999991909999991909919999909099999999999929090 -080103091004081112131300141212150200141616171804141616190600052020202004992109399190999901991999119999909090909990099999909909999990 -040809101000010811041000041213141400151516161400151502060300051717171700090999909993099991909900099919999909999990999199999192909999 -080209090900101112120100131112121400030515161604041515171704061819171700199991190999993919999991909200909999909999090999099999900099 -080801090900080810110500120210131300041415131300061616171700041603170400999999930999109919900919999919999019999919990909999299909909 -080609031000111209101000131205020400131214141500131614141704130118041700099290999990099999919990999999109099099999090199093099999099 -080910031104021212121104131414061100131516171100011819190500181819190400112901999999999010999999099990999100099109093999999999999909 -040801060904100811090900121212120500131314151600131303170200181819171704999000939990019999919999999990109909199999199999990291999190 -080808090400030602100400111212101000111212131400151516161600041504010500999092910999999990190909999999909991999991099099999030909999 -050406010800090909090800041002111204131314141500161614140300161617171700999990003999990991999901110909019999990999299999999909999999 -080109101004081112101000080413061400081513130500160217181800160417180300990909309991099990090999099999909199990199999119990999999929 -050809100600111111110100121204131300141414131300150204041600151503171700000099990999993991009999999919999999999190091099999990992999 -080909030400081002061100080512111100081314140400041314141500041316011500992999199099199999109999099901999099999999090990999039900999 -030808080600091011021204090513131404151513131400151617181400161601190400299999991090090099019999900909999909999919999009999309999909 -080909011000040409111000121213141504121202141500161617141500030518061500099990993999001999991990910990999991999919999199929099990099 -040108040600091010101100121212111100041313131300050214140400151504140300990990309091999919999999099019999999999199090199990999990929 -080910010600080410101100080412131300141415151300160415150200050317171700009999093099990999919990099099099999990999199099909991992999 -080808030600020409101000111109101000111209131300141212150400040105161700992991999099909910999990999999999190999999990909903900999009 -080808030400090410100200090911121200061313121200051313140100041504140400992999919099091999991990999990999099999991990903990999909009 -080509091000081109031000021213131000141515041000161515171700040406011700909999999990129991999919999190999199099999090919900039999999 -080909031000080911121000080211131400080413131400151617181400050106041404999999992999919990990911999999999999991009991000903009999990 -080109101000081112131404081513131400161617021400161618191904062005031904990999309990090091999991999909199909999901999999090099909920 -080808080200010910101100090912061100131412121504160417050300181818180400999199109193999999999999909009919909900009299909909999999909 -030808090400100808091100101204091100100213131400051515161700061515010400999092999999999990999999909900909199999109090910999930909999 -080809100300111109121204041109120600131409021500131616161604130117180500999290991999999099999991999019109991099199990999093099999009 -080903061004111213131400021213131500051616160400171718191904171718011900129001999099999919990911909099199999999001099999099939999999 -080808050904101011111200101013131200141402131200141415161704030618010400999009909099999999099990909991999919999901999990029030990999 -060801050904100811110900120811110900020813140900150413041600151503161600099909930991199919999999909199099909991090099999999999992999 -050108080900101008080900101011120900061314120400030402151600171717150400999090399999199999109999999901999099999019099900929190999999 -040108080400091010080400111110121200111113121200140215161700060515160300999090309991999919990999999999999900990199999111900992999999 -040808010400040808090900100205090900101111121200130311140400131304150600099999993099919901099919999909909999991999092909999909999009 -040809090900011010040400111110121300111102120500141415151500141406040300099999000093999991999999009999909919990919999999999902990999 -080309101004080509101100080409021100081213141100151516170400150118170600929909999990909999999999199909199091099019099199993099999009 -050808080600090904101100010912121100041312120300141414021500041617151500099099000999990999999931999999999099999091299909999019900999 -030804090400101004111200020413131200141515051200141515161600140601161600290099190999990919099999999100999190999999099909999399909999 -050809041000111112121000110204130100031415161604171706161600171718181800000999909999990991009999939219199911909099999909999990999999 -080903101100121313101100021313041100141415161704141415181800050415010600129991999999990919999999999109009990009999999119900930999999 -080803040600080809091000041104101000120213131300141414140400151501160500929999990099099991999999099019099199991990099999909309999909 -080808090904061003090900111012021300140515151300161715181800040401181800991909929990999999919900919090999999990099199019900399999999 -080503090400080209091000081111121200041111130400141406150400140116161600992999099090199991990999099999909990990190999090993909999999 -080809100400111111120100131312121400031504061400041616021400051616041400990090900999993990999999919990999299999190990911999999909909 -080901100400060909101104121314100500121502161600121718191904121703191900099090939999990091990900099919999910999019999919099999999299 -080804040300060809021000111209101000041309141400151509051600151501171700999999900299019909919909999009999990999099099090999390999999 -080901060400080909101100121314101100120405101100121516021100031515170400999999930090910999999900099909999990999991999919999109929909 -060809010400080809091000111212041000110504131000111403150200111616161600999990993099091909099999909999999990099099199929990911999999 -050304040800091011060800121313040800021414151500161414150100161717171700999090209991909919099999999109009199999999999913990999909999 -050308080800091011111204131311111404131302141400150616171700181804011700999990299099990001999999990991199919990901999099909039999999 -080801040900081010101104021212131400150616131400170518131400190318131404999099139099990019909909909190999099991909999099919999929990 -080409011000111209101004131313141504161616160200171717181900050618180300099990993990009090991999910999199999190999199991909999990929 -040808010500090808101100121306141400121515021600121517171604120317170400999990993099901900091909999909109999999991999999099999992909 -030809061000110809091200110502131404111515151500111617170400040117181800299099999099199999190990100999199999999109990990903999999099 -050808030904100808090900111112021304111414150600161414041700160118181900999200999999999909091999110991999090099999990990993090999909 -080409101000110409101000121309141400051302151404161317061800160117170300099990999999999900909901999991999991100900190999993992999999 -050804090600031011090400121311111400121315151400121316151400021718011404009099099999099929900999909999999909999999999910919139911990 -060503080900101108080900121313140900011313021504161617171700041604181800999990029999999900919909999999109399909191099199909009999999 -080808090900041011091200131414151200161602171204161605171700061803010400999999099999009909909909199991199919909909099999901930992999 -080809090904080810100600011112101304141415050200141416171800191904170300909909999999999990990931110990019909999999199091990099999929 -080809011004080809101000110306121304141502161300051517181300191518181304999909993999009999901929090199999111199909999909909999909990 -080808080900031004090900111212131404110515160600110217181800110417011800999999099999909920909999000999009991999011991199990939999999 -050106080300091010111200091313141200091513021200151516171704040418171700990990390290999991909999199999199099199900999999009099990999 -080808010600040909090900030504041000111111021200131404121200131315151600999999903090999999001999999209919991199099990909999990999909 -080909090400031002111100121013111400151613141404050413170100061818181800199992919099999999199909999009099909900990999013999099909999 -080109031004081112061000081113021000081414151000161417180400050417181800992909319990999999109999109919199991990999099099900999999099 -080109101000080811101004121304020400141315160500171318160600171718160300991999319999199090910900999099199909090909999990999999999929 -080109101004080809101000111209131304140409150200161617180600051617190300999909399999909991999901190099919909190991099909999919909929 -080306090900080410090900080510111100021213111104121214150100161617180400290999999990999999909990999190999199909900999113999009990909 -080904101000031102101200131314061504131614041500051614171500181814011500109992199999190999190990900999999909999990999910909939990999 -080809101000111112100300040504021300141414041300151616171300061616011300990999009299099999919999919000999999090099999901909939999999 -060108090900101108121300101408041500100508021600171718181604171718031904990990399990100990990999909909999991190990999999099991999920 -080806090300080810110400041210130200141210151500161217051500160117170400909299991999999990910999919099919091999919990109993990999999 -080805010400090910111200090913110400041313111400151617021400031717061400999999003099000999090999999999999999190099990911999909929999 -040808040900101010090900031112041300141414021300151617171300060501171300999990900999909999990929099910999991199999990091900399999999 -080106090900081011090500081211131300081211130300041211141400041502160400999999309990100999909909999999999999990999299999990119909109 -040108050600090908101100120408130200121408131300121414150300121616170400999990390099111900991999919999999909999991999992999009999909 -030809101004060511021200131411111200151616171204151616180100151920181804211909991999991900999909909909999990109991999993999099900990 -080809050300080810041100011210111100131414020400131414150400161616170600900999999299909990999930999919199091099999999900909909999909 -080109090904080810101100120410041100131415021100160517171100160317170600999909309099199909909909999091999091990091999999999999992909 -040809011000111112101000111112130500030612141400151616161404171702180400009999003999919999999999009999099909992919999999019109991909 -080309100600081104120400081113021400081515141404011515161600171705161600921099991999909999910909199991099099909999093999990999990999 -040508080300090910111100090902110400061213131400151613131700041601171700999290019999999999190991999919099999090199090199909399999999 -060808010400050808091000111212131000141212131000151516160200150417030400099999993099901909909909099099999999990999199991999190990299 -080406030900080810090904040510021100121314141100151614141100151718011100999299009999099099919999999000199099999099999990990039900999 -080904010500101011111100101012120400130212140600131504141600131515030400009990993099999999919990909999999910099199990900999990999299 -080809100600110809120300130214151604131717180500131717191904130120201904999099990990009909992911110999999999099990991909093099999990 -080803091004111213021400111516170500111515171804110419171800061919011800992109099199011999199909109999999990909999999000999939909999 -040108080804091011110600121211131300121214151500030502151504161718191900999900390999190900909999999991999990999919999099029190911999 -060403080800091011111200091011110200091314151500161616151500170401040500992990099199999999991999919901999009999919999909909300909999 -040809011004060909101004111102121300111114151600031714151800191919150500099909093990909099991991119990009999992999099099990990999999 -040808090400011009091100121212120400130204141400131515151400130504030600099999009093990991999999909199099109999199999999990020999999 -040803090400101010111204020511111200131415061200131617181800161601181800929090190999999019999999999100999999999000091109999399999999 -080808090904101006090904101011120100031314151504160217151800192017051800990909099999909099909999139991099919902109999990911909919999 -040809090900040808040400031010100100110612131300111114141500050214140400099999909090999990909999939299199900999991999990991990901999 -040808010900100808090900101112131400100215131404100516131700040318061700099999993990919991090999099919999919909919990990909199992099 -060809091004111209091000031202131304141516131700181919201704051919011700009909999991999929900991990991909019990199999910009939999999 -080809090900051010110100121010131300021406131300151616171700040403041700909999990999913909909909999919999190991999091999900209999999 -080808080300010910051104061212121100131415021600131718190400131818191904999999099293009091999909999919919011199099099909990999999990 -080910100400110610100100040212131300141412131300151412161604031717051600009090999999093909919991999919999991991999999909029009999999 -080909031000020511111004121311141000151516171700151518180400040118180600192991999990999019999900909199099900999999999090903999999909 -080809030400080810111204061010130500141502131600171818131600170118191604902999919099990099909999909091999091999099990919993909999900 -080109041000081109121304111109141500160209171700160605171700160304181800999099399090109099900999909999999110999099999909999909929099 -040808030900101108120904131306040900131314150200051414161600171701161600999990992999091000999990999999019999999090190919990399999999 -080804010500080809101100121313141100121313151100060216040400171716160300999999903099009909919999109999999999099190090199990999999929 -080809090400101009091100121302060500120414141500121614041500120117031500909999999099990990099911099901909999099990991999993199999299 -080909021000080909051000011104121000111113130300061413130400041415160400991199990990999991999939099999029999990099999090999999900009 -080910111204080910130300140915021600171715181804191715181804200515010600909109991299999909919900919999919999909999990009009930909999 -080309040400080809101100120209131400121515130400120616171700120501171700299999990099990991909909909910909991999991990919999399909999 -080109090900081010051100081012021100081212041300141515151600060417040300999999309999909999999909119919019999990099199999909092990099 -080806091000080802090300041112130400141515131600141517170500140117170400909199999299919990199999999001909990099909990990993999999909 -060801090904100811090900120813141500120213161604171704161800171719030500999900939990919999910900199999909919909199099099999990991299 -080909090400080210101100030512101100041314141100041514140100061616161600199999199099199920199999999991999099099099990993990909909999 -080808040900061010090900011104040500121313131300120214150400120414140300990999909990909990900930999919999199999990091199990999999929 -080104090900081011020900081111120300131415151600131415151700061405040400999999301990999991912999199090999099099999099999909900990999 -080405090300101011121200101002041200131313141400151617170600150117170400090290991999919999199991099199999999999100990990993999999909 -040808080800030506040900101112130900101114130900100214131500101617010400099999999099999920009990999999999999099099991910991130991999 -080809101104080809120600131309140400130215161600171718160300050119191904999009990099909990999999009910999919991919999912903909999990 -080801091004080811091000061212131000141212151000021605041704181818031700999909939999100991999909099999099199991900091999091999999299 -080309090904081011060200081213131300081405151604171815151900202001191904929909999199009990991990999999199090009099090099909399999990 -040809091000011111111004121314050200151506161600151504161600171717031800099999009993991090991900909090919999999999999909990991999929 -080809100400110304021200111314121200111314051500161314151500041306010400911099291999901999999999999999919099090999999009909930990999 -080801090400080810091104121213111100021415161600141405161600031704180600999999939099000099199991999190999190999909999999991909920909 -080909011004060909111000121213140400151515161600170304161600171702180500099900993999990999019999009909199990999999992909999910991199 -080909010500081009111200080613131304080214151500161718151504190318202004999999993090019999190990990991099919999199991909019909929990 -080601091000081109091000081212020400051212131400151613131400040403041400999099039990199991990999199999199099999099990990900209999999 -080808010904101011120900131414150904161402171704181919172000061919050300999909003999901999999909110091999991900909999991909992999099 -080809090900041010111200011010110500041314111504160217111500061818180300909999099990990999990939999919999019909919990100901999999929 -080808030400091010111100091010021100091213061400151515151400040104160500999999902099999999999999119901999099999910999990903009999909 -050308090900101108041204131408021200151406041200161617181200161601181800999990299099190009999999119099999099999000999011999399999999 -080809041000080309111000021209111004050609111000131314151600130401171600999999290999999919999911990009999999999910099009990309999909 -080909100400080909110300121212111104131314051500161317021500060118191504999099990999999900992999990990919990999909990191903119999190 -080801090904080810090900061110121304041412120500151515021600031718191600999909939999019999910900990909909099999901999990999919921199 -080801040500080809091000111109041000111102121004131406121200151617170300999999930099199991999999999999099911009009990999909992900999 -030408090500101108091200100608131300100214131300150416160100151716160400999992099090999999900990199991999119999991999093999999900909 -060808090300100808090900101102121300101415041300101615150500040117171704099999999299999990919911109999999000999999991999903090999990 -040608090900100311090900101012121200040213141400041515161600051515010400909990909992999999009999999910099099999109990919999930909999 -060108080900101108090904121113140400121113151600121713021804121713050300999990399999199009109999099999909099199091199919099992999099 -050108080600090908101000091111041200131111021200141515161200040304041200999990399099009991999999909999999091090991999919902099999909 -050108080300091008081100061202131100121214131500160417131500161604041500999290399990999991109909999991909919090909990999999099999909 -080809091004051112121004130312121000131314150200011617171800061917170400909909990990099099999992999999109909199909193191990999909909 -030809061004111112101004131302140500131315151500161616160100171717170400219909910999999009109999109999199909999919999993999909999909 -080309091000080809091000111111020500121212131300011415130400061604170400929999999999090999919999999990109999999909093119990909900909 -080803091000080804021000041112120500131412121500131414160600130104161600992199999999901990919990999099909919099999990900993099999999 -080904100300080911100600120911100200130911141404131516141400040117180500909299999999999909990909919999919011909199999099903099999009 -040809091000021111101000121111130100121415161604120317170500041817170600009999099991909919999999139990099199909209999990999999900909 -080109090904080810110600121314150200121314161704051314181700041314031700999909309999900901099991119999919999109991990999999929909999 -020809100300111112120600111112131404011516161704181816161704051920202000111291999999999999990990900910099399009099999999090099909999 -080809090904030810101000110212131300061415131300161718191900040518011904999902909999999991099909999010999999999109090119900939999990 -080803091004111206041300121214140200041514141600151517181800050117181800992100999190090999991999999009919999199919999199903999999099 -050801090900100811090900020811111200130414141504131614061700130318191704999990939991909919990991999190909999909099099099999009929090 -080801090900081011090900041212131400021212051504161606171504031817171500999999039999909990109909909999009199901999999099091999920999 -080806030900080804040900101112020900041313130400141415161600050115151600909299999999990990099909119001999999099919999199903909999999 -080909090900081011110600121212021304030414151300041616161300051718011300999999990990999990900999190209199991999919990990999039900999 -080809090500031009090100110212121200111113140400041515140400041615140600919099199999993921909999999910099999099909990990999999900909 -030408090900100511121300101415041300100215041300161615171700160615011700900992909999000999099991099919999199999990999019999939990999 -080808030900021011060900121011130900140411040900141411151600041701150500992991999999999919909990909199999999999090099100990390909999 -050809061004020809111004120809130100141415151600140315171700041819171700999900990991990019909991139199099999099999092999999099900999 -060408080200090308081000090911041000120513141500121616171700121616011704909190999199299999999990999990019990999009190909999939999990 -040804090900080810090900110410031200111314051200151515151200060116170200990990999999909909999999929900999900990909999999903191999119 -080809101000080809111000121203110100120213110500041415161704061818180400999999999999900990999992939999999119099911990010099900909999 -020809100300111206050400111212041300141415151504011416171700181818171700111291900999999999990919099919909999909909993099990999999099 -030808050904040808020900101112120900011111131400151516131700151504130600290909999999919909919909999991909390099099999090999090999999 -080808030900021011110900121204131404121516171400181818181400060401051400999999092991199919990999090999099110999919999990900309999999 -080809090904060810110500011211110400131314151600131317170400021818180300999909909090099990999930909910099999099909099999919999919929 -080909090900081011120300080213140400151516160600151504170100051818171704099999999999112991999909009910999919099991999903900999999990 -080808030904021010090900111010120100130414150600160414170500161818181800992901999991999999909909139000099999090999990990999909909999 -030805040900100811090900020411120400131411121500161611121500160601041500299999900991909919999990909199999199999199999100990309999999 -080808060300091010111200041002131400011505130400161717171704161618181800999999900290990909191999119919999309999099099999090099999999 -040809090600010809091000110804020400110512120400111314121500041314140300099099999993190999010909999999199909099909990991909992999999 -030808050400091011111204131402151604131717181800131717181800191919010600999992900091199099190991900919099991999999990999990930999999 -050108080904101011090900101012060300131314151604131302151500171819191904999900390999009999999991099901929999909919199919909999900990 -040809090600100809090100041112131300021412131300151512161704031816160500999090999990093999919900999999999111991999099909091990929999 -080809101104080809101104061209131104141502160500171818190100032020202000999009999999999090909909990900099119091910999993929119999999 -080809031000040511111004120211111000061314141400151516160100151517180400909999902999099009999901999919909099999109999193999099999009 -080808060500090310111200021314140400131314141500041617171504181801171500999991290099900919099999909199999999099109990199090399999999 -080109101000080809100200111209131400111509061604111517041800041517050300991999399999191990901909999999019909909909199909999992909099 -080109101000080909101004081112130400050614131500161602170400160318181800999999399990909091999991099091909999099010099199999909929999 -040809011000110909101000060504121200131314121200131304021500031616161500009999993990909900091999999999999900999991999900999919929999 -080909050300081009111104081202110600131415161704131819202004131801202000990999999290099099999901199919909019009010999909099399999999 -050809101100011213041104141415161100141415170200061815171900181803191904000099009993909091999991199999199999199999190099999999999290 -030502080400090909101104041213141100061514141100161617170100161818181800901092911999990099919900099909999099999991999093999099999999 -030804090900100811020900040412121300141412121300141406150100051616161600990992999991119999910990999099999909099991999993909009999999 -080109090300081009091100081002121300081014141404150604041600151517170500999999399299099999991909119991999919900900090999999990990999 -080909011000080909111000120513061004121415021000161616170300041817171904099999993999991999009999990900999000199091999999990992909910 -080503090904081011091204101011040200131415161600011718161600061919191900092909999999991009991999909090919009999909993119990999909999 -080109041000080809111004121311110200121406151500121603151500120504171800990999399999190009199990919909919909999099999929990990999009 -080808091010041109091010041203130514151515021614170418181818171719200106999999009990999990219009999999109999119909919099999903090099 -080909051010080309041010081112131415081617181415191902201415212106040115999099999999999992009099009919999991100119999190990003999999 -080809090900080410110100120413110600120414111500031602171700161605171700909999090999903909099990999990909909999991099119929099999999 -080909010400080909101104081212130200141212151500141416171804061916030500099999993099910099199999119999919999999091099909090920909999 -040508010904101008110900101008121200130208141200151515161700060318180400909900993999010999990999999999999110991990999990902090999999 -080901101004080911101204080906131404080913131500031602171700181819052000999909939999100099990900900999909999999199099199929190991909 -080106090900081010090400111010120400111313140200111313151500110504150300999999309990990999909999009919999091199999199999999099909929 -080808030900021010110904121313040900141306150900011605170400181818171700999999092991919019999999999199099109099190093099990999999099 -060801090904101112090900101212130500100214131500161614130400160304131700099909039991109999999999099990909199099199999999999990929009 -060804090300100211090900101012121204131415151600171815151604050119191600909290099999119991999999990190909109999199990999003099999999 -080910011100060512111104131313131404150416171400150317171400151819190200009990903999099099091999900990999909099999999999992991901919 -060804010400090909101104121313141400051313021400151516171800151516031800909990093099900099919909099099999999199091999091999999999929 -080808080900021011120904131414030904150516040900171616181900060118181900999990999991119010929999990199999999991090091900903999999999 -080904101004021111100300121314140500121514141600121717170600120104181800009900999991912919999990999909909099099999991990993009999999 -060408010400090910111100090912111100131313051404031502161400171717161600909990903099019999199999999991009999909919999190921999999999 -080809011000080909111000041204111000040205110600131313131400041516031400999999993990910991999900999919909090999199999990991999901299 -080304091000111104121000111313141000021515151500161616161700060401051700290991990999099999909909909199909199999991999990900309999999 -080901100500081112101000131414141404131516040200131716181804061916180300099099039999909990199909990900919999999090199999090999909929 -080501091004081111091000081111090400081213091400060215161400031718161604099909939999990999999909999910909990099199990109999199921990 -080808080600010909101000111112100400111113131304141415020500031617180400999099099993909990190999999991999999909091999910999109921909 -080509031000081112041004080213131000061414151500161414151700040118171700992999019999109091999901999991909999990999990909903099999099 -080809090300080809090400100602110400101213141500051216171500181201171504999299999999990909199999109909199091999919999009909399909900 -080910101004080903060200110912121300110912140500151516171800151501041904999909929190990999991999919999999099099010999000999390999900 -080904051000080904101000080906110400080212111300141415111300140301110400909099999999909999909999009909999111991999999910992390999999 -080803090900080804020904101112130600101415160400141417170100051818181800992999999999901090919999109901999001099991999993999099909999 -040809101104011212121300141415161600140217171704181819190300180519190600090009009093999999190991999919999919900919999992999999990909 -040801060904101112130900051414130900041514130200161617171800161603181800099009039990010900999999999909999099199909199099999999999299 -080909031000080906111000081204020400081313131400151515151600051701041600999299999999091990919909099999109099099199099999990309909999 -030108080904101111090900101111121200101314140500021514141604041718190600999902309999909999999999099910999999991199091990090999900009 -080809010400041010111100061010111200041302141200151616051200031717171700909999903090919999999909909919999010999910991999929990999999 -030608090900100208040500101008111100041212111100131212140100151604171700990992099999199991900999199999999999990991999903900009909999 -060809011004110809091004121313140200121313151600120517181904121717032000099909993990090009199999119999919990999990199009099991999929 -080309090900081004041100080206121300051414121300151614120100151504120400299999999099099990900910909919999999990999990013999099999909 -080109090400081009091100121314050200121515161600121504161600171704030600999099399990191990091909999990019999999999999099990920990999 -080801050904080810100900111110101200031102131404151516171800041519190600999909930999099999990990909991909999002910099199909900999999 -080801090400101011091200100204090500131415090600041416171700031416171700999099039999100999990919099919999090990900099999999999929999 -040108080904101108080900121306050400121415021600121715181800121717031800999900399990090901999990999919009911099091999999999999999929 -040108080400091008110400121212111100131302040500131314140600030415151500999090399991099919990999099991909910999909999990920099999999 -080909090300080210040400081111121300051415161600171718161604170118180600999299199991009999990919009919999000999199999099093990999999 -080805091000080802110300121213060400121213141504011613171804161613181800909199991299919990199999099999909909009990993109099909999999 -080504010900081011090900031212131300141515021300061515160400171717170400999999003990099999091999099299199191999999990900990999999909 -050809101000061112121200131313130100041404151500160217181800161603181804000999909990099999909999939900199099999991991119999999992990 -080309091004080609091000110212131304041415131300161617181800161905011800299909999999999910090910990019999900999199999119990939990999 -060208030900101112130900141115150900161117170904161805171904160104191900919990112999919909999990999099999909009199090099093999999099 -060108080800091010111100121010110200131414041500161616171704051819031704999990390990919999991909999009019999990999199999099099900920 -080808080400091010111200031302110400041415111600171715161600171701050600999999909091990920199999199909909099999991999019999300999999 -080809090500011009091100121213061400121213041500161613021504031718191504999099099993090991990991099999909990990999999919099919921190 -080808010600090910111200090904131404051515021600031515171800191919171804999999093099001999091999910099109991999990092999999099999990 -060108080800090909050200101011041204101013131400151617171800041617170300999990319199909990091999900990919999990009199999909992999999 -080808060300050910111200131310141500161310171504161618180200040118180400999999900290099999901999999999099990909009199191903999999909 -080409011000081109101000121212121300141404021504141416171700051806031700909999993990909990991999999900019999109991999099990099909929 -080803091000081111091004021112091000131414040400151414161700150601180500929999999999990019999990099109999190999999090900990309999909 -080803040900080610111200021310111104041314151500161314151500171814010500929099999099099919990911190999199990990999999999909930900999 -080804010900080810110900041210110900131410111504031602111500051717180600909999993999990990999990099099999199002199999119999900909099 -040808091000111213091000111213091000141213090200151216051704060103181904099999909999999999999999999099909911190999190009003991999210 -030808080200091010041100091005121300090612121300141414141300040415011300299199900199999999991999099999999909990990999991909039990999 -080809090900081011120300130214141400131306150400161718181904050118181904909999999999112901999990999919999999091900991099003999999900 -080501090900100411121204131415121204021615171700180315191700181815190600099990930999009009199901990919909199991990999999992990999999 -030808090900101008021104101012121304051412151600171818192004171818010600299999990999911099991999990909919099199001990900099930999999 -080801090904101011121304101415161704181415050200191415202000061415200300999909039099090099109909110099919999090999199999909999999929 -080808060400010910101100051210101304141402151600171415151600031818180400999999090093190990990909990991009919999999991999929090999999 -080803050900080804100900020404060900111111120900131415121200131401040400929999990999900919999909999190099999099919999009999300909999 -080803040904080204100900111112130900111114150900061616171700051616011700929909990991999991009999099990999911990901099999999939909999 -080609031004081111121000081111131000141516160200141417171804050117190400909909902999999999919909919909919909999099199191003999999009 -040801090400040808100600111110101200111105021200031314141200041515151500099099930999910900999999919999999990199991992199999990909999 -040308040900101108080900051212021300061212141400151516141400041616010400920990999990099999910909019999919099999009999999909930999999 -030408080900101111020900120406130900141414150900051616171700041601171700999992090991919999919909999090199999999901090919999399909999 -080809011004041109121000021309051000140409151500161616151500170318180600909909993999110901999919099109909999991999999999919909929909 -030808090900100808110400120411111300140515151300020615161304171818011300990992999999909919990990999199099099991999999010019139919999 -080809090500031009111100040204111100121213140400011516160400151516160600999992199099099991999909999910099910099919993190999999999909 -080509100400081111110100061213141400150213141400151617181804150304181800990099009990993901009999999919999199999099099099099099929999 -080909010500080409101000081106101000111102121200131414141500030404040400999999993099009999999909099999199911991990099999920000999999 -020808080804091010110100120410111100121314041500030616051700181818181700199901919999913919999990999990009909992009099909999099999999 -060504080800090903080800090210101000041112130100141512160400141417171700990990099999299999990919999919099999390191990119999900999999 -080109090400081010110500081010110200081206111300141516161300040416031700999099390990910999999999919909919990990090999999900991999929 -050809090400011009090400111213141500111613130600111616171704021818180300099099099993099991000919909909999999099999999909019999919929 -030802090500080810091104060410091200131310041400011510161700151518181800919992919099999009990999909909909999999090093100999909999999 -080801091000080811091000061213041000041413151500141413021500051604040300999999939999000909109990999909999099999991999919990002909999 -080901101004080909111100081205111104081212130200141516171800140603192004999909939090919999999999090999019990999990190009990991999210 -040108080600091008081100090404051100091212121100091313030400021313141500999090399991090999009999999909999099999999999929919990919009 -040104080400090909091000041106121200111113140200051513161600151503161600999090300999991900991990999999919991190090999999999299999999 -080806010500030910101104121310101404151502161600151504161700181818181700909999093099991020991999990109919911999909999990999909999999 -040801090900100808090900110412130400021412120600051415151500031616160400999990939991909919900990099199999199090999999099991990929999 -080109101000081111041000121111130600121414150200121414051604171703181904990999309990999909909999009991999991199999199990090991999210 -080401090900080810110900120513141404120615151500121617170200120317171804999999039999010999019990990999199909999999190099999991992910 -080803060904080810101000111112120200111113141504161718141400161601040500999009929099999990991999909999919900109999999019990300999999 -080808010400090610101100090910101200040213131304031415161600141417180500999999003099999999990990909999199019909100999999929099999009 -080808030900021005110900120611110900131414041500131414151500041601170400992991999990099919999999999100909990999999991909990309909909 -080804090900100802090900100511031200101313040600101313141400040115150400990999999990919999191990929991999990999999090909903090999999 -080504010600091010111200131314141500021314141600171718031604171719191604099990903099910901990999909999999199091999999129099099999990 -080601040900081010090900041010110400121212131300141502131300041616030500999999030990909999999909009919099999990919999199901990999299 -080808030900100611110900121213040900121213130200011414040400041414150500999290909990999909999999099999919999199019093999999909909009 -080409010600080809101100031209131100141509021100141505161100041504160400909999993099091999999929919919199011999999999900999990900999 -080903101004080911101000081202131400061215161704181215151904051201201900929909999999199999109901909099909999009990990199009309999909 -020808010400090808101100121213141104121515160500031517160400181818160600199991993099919919909999000990009999992909999990999099999909 -060808080900011010110400121213050300141313151504160402151500171818181800099099099093909991909999999019929999900019999919909999909999 -080906011004080909111004121313141000121313051004151602170300181818192000999909903990919099199909009999999990909019990919909912999919 -030809091000110812021000041313041000061313141000041515141400161715010500999992990991111999999909999999099090999999199909909930900999 -080809090400011010091100121010131400120204041500121617171700061616030500999999009093990999999919009999009109999199099999999990909299 -040408090900101008090400101011111100121213060300121213021400040105151600990990099999999999090999999090999919999990299919903911999019 -060808090500100308111100101002111100041213140400041213140100151216140400090099999992999999099991999991099099099999999993909199900109 -080809030400080809091000060204111000121305141000121515151000120401161600999999992099199991999909009919999190999990991990990309999999 -040808080800010909090500101112121200101004131400150213130400150604160300099999099993990991099919999999909909990199099199999019909929 -080309091000080809091004110212121004131414141400130515161700041819010600299999999999999019099919990910909099999019999910999030900999 -060801090900100811090904120813141404121515160200121715180500041717190300999990939990019099019999990990919099199991090999909919999929 -050108080800090910041100090902121104131314121500131306120300161617180400999990309999009999999991100099999909199909299999909999990009 -080910011100081210101104081313141504031302061604171819202005212121202000099999093999190091900999990991009999902919091199009999999999 -040801090900101011090400041213131400151513131400020405061400161616031400099999039999109991090909909919999999991000999999919999999299 -050408030904100808110900121314020900061516160900151517171700181818010400902900999999919909919900009099199909999919999999999030999999 -080109090400080809091000111213101000141215020500161217171704040318180600999099399999199909199999999091099991990991090999009190992999 -080109090500080809091000111111061200021313131304141415041600141403041700999999399099190999190999099199909999901909099909999990992909 -080806010904080810110900121314140900050414151504161602170300161618191900909909993999000900919999999009909999909919999919999012990999 -080209101100080512101100081212100100030406131300041414131300041404150400119099919999099999999999139209099990999999990909999009909909 -080804010400080509091000111209091000130614021000031414151000161616150400909999993099091909999900999099999091199999992990999990999099 -080808010400091011111200021304141400151606141400150517171800150317171804999999903091199910000999999109999990999090099999999999929990 -080909040300080909101000111102060400111112121200041314150100161616160500990999999299919909199991099999909919999991990003999909999909 -080403090400080610111100081210050200081210131400151510160400041501161600092099991999999990991999909999919099190991099019999399909999 -080910010600081112131400081212151500161605171704161604171804031919190200909999003090900999919999999909199909909999999901099991929919 -080808080900101003090900101004021100121314151104161717171804060119190500999999099999929999991999919090199011909199090999003090999999 -080403040900081010040900081002040900061112050900131314141400130401151500999099029990990999999991909991999910990199099199990390999999 -040803050900100811120900021311110904141414150100161617181900161606191904929990990991999919909911900991999991399090999900999099999990 -080409101000080809031100121209041100121206021100131415150400040115150500099999999099992990999990099999999990190991990190903999999909 -050408090900100308090904101002111200131314141500130614140100161616170400909990999992999099090991119999919999199999999093909009999909 -080501091000080809091000111213140600150216141704181916141704040316141700099999939999090999190911099199999119909999990090009999992999 -080102090300081011090900121111051304141516171300181519191304060419191300991999319299999901999909090900999090090909999999000999999999 -080109101000080909101000080511061200131313141400150216141400040416040300990999399991999999999990909190909999990199999119900992999099 -080909101000030902111204130511111400130404151500161717151500181717010600199992999099119099990990999999109999990009999909909930909999 -040808010400090908101000090211050400121213141500121213161500030413061500999990193099919991099999099910909990999990999990920999999099 -080609090300081011121200131302120500131314151604171814191900040114191904909299919990999990199991099999909999001990991009903999999990 -050106040400080808091000111213130200141213131500141203161600041717161600999990300099911909091909999099919999999999199929909999999099 -050808030900101010111204041314021500161617151504161618181900060118181900999290909199991099019900109991999919909999999090903999999999 -030808090400040808101000041102101000121314140100151304140600151505161600299099990990999999199991099019999019399999990900999909990999 -080806010400080909101000110909101000041202131300121214031500041617051500999999903099919909999909999919999011999909199992990099909099 -080309090400080810111200131306021404131516171700181816171704181801190500999999290099119999910999000999199009999999999019099309999909 -060808090904020810090904111212120500110413140100111515161700031518181900999900999991199019100999999990199999399000999990929990999909 -080803091004110812021300111412150500111412061600011417161600041418191904992109999199991990910999199999999019099999993009999999900090 -080808080500060909100100040909110400121313141404151503140200161616171800999090900999993999919999909090199099909099199999999291999119 -040809091000110209031000110612121000111314151500011313151500051604040400099999092991199999999999999900909109999999993909990900900999 -050809101004011112131400151512131404151512130400160217171800190617170300000909090993090991999999990999999999091999991191909992909999 -080401090400081009091100081206021100131314150500131304151500041616160300999999039099991990999909019909109900999909999999999902909999 -080910060400110210101200031313121200141415150500161615151700161604010400199991190099999921909999199999199909099099999990999030999999 -080909101100030902101104061213141100040515161700181819191700181819011704199992919999990099199900199999109900990991999990999939990990 -040308080600091008081100121010041300141402151300141416171704181818010500929990999099990909199909909991999901199909199999099030999999 -080809090400080810101000050411121200061313131300141516171704031802011700999999909099099909099990999990099999990911991999021139991999 -040308050900100808111200101313021200141313041200141516161200140404010600999090299099919999919909919999999090999009999991990030999999 -080801091000080811120500041311111404151516170200151816170600041816170300999099930099099999909900910900919999199999999090909999999929 -080901040400081011121300081011110600051002141400151616141400031617170400099999030099100999990999999099099919999919991999929900999999 -040105080800091010080200041011041200131314151600131306151600171717150300990990399190919999991900909900919990999999999909909992999999 -080306090400081009090400111010121200021305121200041414140100151617171700299099909999999919900999099199999199999100999993900909909999 -080805091000080404091000111204091000061302091000141304151500141303011500990999999990909909999909999900999011199999199909999939902999 -040108060400090808101000111213101000111213140200111215031604110517181600999990390090919900099999999999199999199909199999099029990919 -040108050900101108120900131108140900041108140400151516171700031502061700999990390990909999999909909099999919999910099909929199991099 -040808080600091010110100041010121304141515161300170215161600051818180300999090900990993999919999900099199091990199999999901999999929 -050809091000030806091004110812131400110413131500111616171800021616010400099999999999090029990990999990909909999990099910919930919999 -080909030500080909101104081213021404151515161604171819192000170119190600999999992099991090991991110019999999900100099999993990999999 -040508080800090909090100101111120600101111131400041502161704181818031700999990090999993909109999999999009999099919990911090099999929 -080109090900080810101104121210101300120214151300061614041304171819030500999999390999090091990999999999099190999190999999001990901299 -080604010904080310090900081102121200080513141204151516171800191919191800099909903992909999919911999991199901909900099099999909999999 -050308080800091010100200111112121304111114121504161717181904161701200600999990209999991909991999990999919990900009199911099309999909 -080604030900081011120900081312120900041414050200151516161700150116160400999999002999009999999909919909919099099099199191993999999909 -080309100500110409120600130209141400041509141400161515171700161818011704290091999999900910999919999019999990999990990919999039999990 -020809100300111212061300141215151304161715151304161818192004160118190500111291990999999919999999900109999009909999991900093990999999 -080809090400010809091000111205020400111306141504111313141600111717140300999999999093190990019909909909199990109999199999999092999999 -040108090900101108090904121314151500161714051500061714181800041702180300999990399990199000190999099009099999990999999999999192909199 -050108080900101011040900101212020904131415160904171718061900171703191900999990309999009999999919190099199091009010099999999299999999 -050406080800090909091000110212101000031313131300141414151500040104151500999990000999999911999991999291099999999919999909903099999999 -080401060900081010110900081010121200021313131200141415051600031404041700099999930999900999999919999190099999991900099999999090929909 -030808080800091010111204130514151200160214141704181819191904181801200600999992990999909019909999909109909119909991099099099309999909 -080803091011080806090512021313090404141313090415161718191919160118182020929009999909999019099019909999999199901990901009993999999909 -030808080200091006111104091012131104091414150100161414171700050418171700299199999199909099919990990990199090399990990999909999990099 -080910030500080910041100121210041100131202141100151617171100060117170400992999999090990909999999099991999091990091999190903990999999 -080906101004031102101000121313141500121617171504121616171800121905010400199902109999199999109999999991099999009999990900999930900999 -040308080800091010060200111010121200041313130400140415150100161615150500929990999199999909901909099099109999999991990993909999990909 -080809100300080209041104041209131300141212131300151616161700061801051700991299099999190091990999999099999999990910990990990309909999 -080809090900030810110400120210131404151510160500151718180100061718180400999999990999099929900991900119009999999910999093909999999909 -080809090500031010090600111212130400141212130100150416131700021616130400999099099999900929099999909199999991391019999990919990919999 -040809090909010810101104121210100213121214141415161617051819161717062003009999999093199090999999911990991999990900019999999990299909 -030808080805090904101101090904101206040213131415161617171718160419191919999902999099900399991990990919919019109999009099999999090999 -060808090304041008021112051013131114041013151514161617151514161601181904091299999900919999919009999999909000999019999999099309999900 -080808080104090910111213040910101414151616041414171703180206171705192020999999990309990199999190909090099999990099199929099911990919 -080409090909081011120305131414021515131604171515131818181904130401061919999999009999009909902099199919199909199199990990090309999999 -040808050104090808101112131302141414131315150416030417150616181818181919999990990309900109999191199999000999992909999090999909099999 -080409091010080809091001041111111104120502131415161617181818161617190306999999099999090399991999999099100991900019999009999999099129 -080209090104101009091111060305121314151617181814151717181814151904042014119991999309991902990099009999909090999099999999990990990909 -080809040503080809101011121309101014121509160206120417171718120419190118999999990029099999999109991909919901109019999999099093990999 -040508090110111202090910131204141410030415141410161617170618161619201818901990919390199099090919999299999900999990009999999909990099 -080909040105080910101112080410101112131302141112151304061112030416171818099999900309990090999999999999999911191909999999929909090009 -030808080209041005111109041012111113141015161601171704161618061719201818299199999190999999099099090099199000939909999999099909900099 -080306090400081011121304080205131300141516171704141818191900141818011900299099900999099090909910999919099019909919099919999939999999 -080809100500110809100300121209131400121202150600161616171704040418011700999099999990912909999999909991009919999190999919009039990999 -080509100300081111111104121302061404151617171400181817171400180104191900900299991999999009199901090919999199991999999090993090999999 -050108090400101108120600131308141400130215141404161615171700160315180400999090390991099919900999099919999919909090999999999909992909 -030608090900101008090500101002111200041313131304141415161600041401161600999992099999009999990991199099109999909991999019909399999999 -030804090900050808101004111202101000131212140100151516170600151504181800299999900999999009199991999099099991390909999000999909990999 -080801090400080810100400110210121300111404121500161414121500061703051500999099930999190919999919009910909999999999990999901999992909 -080109090200081009091100080512121304081415061604171718180300171919180400999199399190199990091999990999019009900909299999990999999909 -080801091000111209091000111313021000110413141400151617141400040405060300999990939990199991999999109999199999990009999099900002999999 -080808090300061011121300101011140400041511020500161617181804160117181800999299901999990909910991999919199091099109999909093999999999 -060408090400101010100300111212041300110412141300151616021300150116051300990090009999999990992999909999999991990011990991993909999999 -080808080400090304101100090906051200130214151200131616161204171717011200999999900092990999990990909919999911199999999991009039999999 -080808090400011004090200111112091300051106141400151504141400150416160300991099199993901990991999099990919099999099999099990902999999 -040803090900080810091100020412041100131414141100041515151500061616010500029999999999909919009999999100999199999919090999990930909999 -030809101004111112021304051114131300061516161604171718190100171720202000211909991999919009199999199909199099909091999003999099999999 -030809101004111112020600131414141404151516170400151516160100181818190500219909910999910909919909990991999999099990999993990009999909 -080809010400100209091100101213041400151516031400150517061400181818181404919990193099990991090999099919999912999909999099909909999990 -080806040500030809101100120209091104121313141100121313151100161617010400999992900099999991909991990999199999999991990900999030990999 -040809100400111111110100121213131404021513051600171718181600171703061600000099909999993999199991900199909199099109999999999909992999 -080808010900100506110900121314150900161614020904161617170400040318181800999990993999901900909900099909999999109991099999909919992999 -040108090900100808111100120404060400131313131400150205141400161616160300990990399991909910099999999199009999991990991099991999999929 -040809090300010809091000040811051000120813021000141515151600140604171600099999999293199999199909099991999091190099099999990909999099 -060808090900010808091004041112101004131414141500161718051500021919190300099999999993999091909900090919909199991999990009919999919929 -060502080800090410040800111212130300111214140400111515151500110116160400901990919990999909102999099999999909099199990999993099999909 -080808090900030602101104051212111100131312141500131316171500180404011500999992910999099099109909999999099901999991999900909039909999 -080309090400081010101000080211120500080411121200011311141400041516170600299099990999999990999911999999909990999099993109990099909009 -030508080900101112020900061314140900151314160904171718160400171701160400909992990991119999919999999099999099009019999000999399999909 -060802090400101010110500031211111300141414141500161717151504161717010400091099011999999991990929999999109999999991990909099930999999 -080909091004081103121200131111121200041415150200161717171700050104180600999009999090929999999909999009919999199019990999903909999009 -040108080500091011081204131011031200061411151200161717021200041717181800999990399090909099999900999019299999199199990911909909999999 -040308060900101010100900040204110900121313141400121215141400040116160500929990910999999991999990909019099190999999999099903090999999 -040808080800010909090900101011121200130504141200150206140400041616160300099999909993999991099999099199099090991999091999991099909929 -080409010400080909101100080412101300080514131300150306020400151616161600999999093090900990999999019990999909990991999990992019999999 -040208090900101008090100101011110400031212131400041212061500041616160500919990199999993999119999999290009999099999090990990990909999 -080901101000080909101004080411121300141415160200171715181904171703050600099999939999919099991990009999919901190990099999099200999999 -080809090400080809101004031102121304111114151300160514171300061819011300999099999999099021909991990991099991190999990991999039900999 -080808090300101112130600101005140200041515151604171718161604171701191900999299901999099990910999019009919999909099999019099309999999 -080909101000081102101004081112131400151106160300171818191904050118190400999999909999119099991900099999029090990199999909003999999909 -080503090600081010111100081010120200131415160400171718191904170118191904092999991099999999991909919099199000099991999119093999999990 -080809030500080810101000110612020400131212140400151616171700150116171704992999919099999909910990999099199091999199090909993999999990 -040108091000110808090400121314140400121304140200121315151600121303050600999090399090909909199990909999999909199999199991999200999999 -050801090400101009091100101012121100130212121400130415041600130306161600099099039999090999919999999999909119999009099909999999929099 -080609031000110512101000111314151504161702151500161818181804161919010400092990919990999999109909990901999919999199090999090930999999 -060808080800010905100300111213101404151502161700181519171704182020202004099999099993099991992919110191999910090999999099099099999990 -060108080500090908081000090904111000041211110400131214141400041502160300999090399999099999099999909919909009999999990999901119991929 -040801090900101111090900101004121300021414051300061404151300031617171700099999039999909991009999909199999190990999999900991909929999 -080609101100121209090400011314150400131316161700030516161704181818021700090090999099099990999931909991099999099999999099029919999199 -020808080300090909090400101112121300101005141300011514141300041604061300199291999999990919999900999999999999999109993090990999900909 -030808080800091004021100041212051100061212131100041414131500161404011500299999991990901900999999999999099099999909199901909039909999 -080909091000080411111000080212131000080412130500140612151600030412010400999099999990999999909911909999999909991990099010929930990999 -080409090300100209111104101212121100101314141500161616160500060117180400099290999991199099999999999909909109099199099999903099999009 -040808080800010905021000111213141000151216141400061716160300041818181804099999101993990990919900999090999999990099299999990999909990 -080808040900051011041200130211141400151511161604151517181600031717010600999099099099090909990901999919099999909910999919929930999999 -080809010600101009111200101013141400051516141704181802191704181820031704999990993099009999010999999990909009909991999119099999991290 -080801090900080810101100051210101100130614140400131502141600130304170400999999930999090909999990999909199999999919091190999900929099 -080306090500081010091100081210091300021214150400041616171700041616011700290999999099999999990999009190999190099190990919999939909999 -040108090900100808111100040212111100131314151600131314150500030614150400990990399990919909999991199919009909999999099999929999990909 -030802060900080810050900110410040900111110120900040413141500161616011500910992919999990990999999999999099901990991099000999039999999 -080808010900100411110900051212110904131212141400041502160300151506171800999990903990990999999909190999999090990919999019999012999919 -080808080904101002110900041213110400141415110300141416110500060116161700999009909999919990190991999019999909299909999999903990999909 -040808080904011011110900121314110900121414060900120215160400051715180300099909099993090991999901999999999999099199999190990909909129 -040808090400050808100100111213131304140215161600031715061800171715181800090099999999913901099999990019099009999190099999929999999999 -040106080800091011110800121011110500121013131400121002040300041516160400999990300990999999999900909999999999199919299199990009909909 -050401080800091011081200131414151204131602171200131618180600130418180300999990039990019999919909990990199901099919999990990999999929 -080803090900080810040900111212120200111113131300141516171804060105041800992999999999009909991999999999019999999010090199003009999999 -080309101000110609101004120409131300021414141400151605170100041616181800299991999990999019990990999190909199990991999993909009999099 -080805090900080804101000011112131000141415151504140416170600021818180300909999990999999990009939099910999909909900999090919999919929 -040809090400010809091000110806121000131402121500131316120400050416160300099099999993090999999919999190999110099919099999900999999929 -060108090900101108090900121213141504121213021504160513171804191919032000999990399990099991900991090999999991900991990991009991999929 -030508080400090908061000090902111200131314110400151414110100040416161600999992099099909999090991909991909909999999990993900119999999 -050801090400100809090400100811041200100813021200101404151500061414031600099099939999199999990900099999999911099991990099909991999929 -080804091000111104041000111112121000130214140100150614161600170305161600990099099999099999909991909911999199391990999099919099929999 -080808080500010910110600090912130200141415041604141417181804191917031800999099909993119999010999919990919900909909199999099999990929 -080804090300080810101000111102121300011114131304151516171804151506170500990299991999999990199999199999199311909009999900099990990999 -080801060500090909091000110312131000141502161000171504181000171504181804999999030099990999919929199191099119999900990999999999999090 -030408040900100408040900101008111100060212111100041313141400051313011400909092999999099999900999099919999011999099190999999939909999 -080801090400080810090900041112121300141402121300151516061300031704051300999099939999109991999901999991999919099109999990991099929909 -080805090400080810090100041112091300111114021500161614170400160314170600999099909999003999099900919999919991199090099999999999992909 -040808040300090808101000111111100200120504131400121516161400060401161400990990999290909999999999919099919999199001990099900399999999 -040809031000080809101000050209111100121212131400151515150400060104161700992990999999999990990901999919909990091999999999903000999909 -040608090300101011020400101012131400151512131400151516131404171701051400991290019999910999919990909999999999999909999019090309999999 -080809090400100311121300101004140200151616171704151616171700150501180600999990990099219999910999919900919099909999999919990309999909 -080809021004081112121000011113121004141115160300141117161800140619050400911109190999999999999930990990929090999999999090999000990999 -030804010900100811110900100811110400120213140600051516171704181818171700299999903999990999999999909011099019099000990999099099999999 -080808010500060409091000111209091304141516021300031616171704181818171700999999903099991900991900990999999111192990999999099099999999 -080406030900080510100900081110100900081213130200141215161700040116160400099999902999999990999909919999919999990909190111903999999909 -050808080300091011061200131402151500161617151500011617041804191919181804099999099290909909091911199199999999999999093009090999999990 -080804090900080802100300041112120600041112131300011114151500041105150400909999991299119991999909909999999090999909993009999099909909 -080309041000081109051000111104121000020613141000151516171700151504011700299099999999099919009999909199999990091009999119999039999999 -080609090500101111120100131111141400131515021400131515161700040304160400099090990990993999919999999990999091199990099999902990999099 -040104080800090910080800091111110500120213131400121215161400040317061400999990309999099999909919909019999919099919999909909109992999 -040808080600010909090900101010041100120413111100021413130300041415160500099999099093999991909999999199999090991999991192909999990009 -040105080800091011080804121213141500121204061500161617171500021818180300990990399991009019909999009990099999991999999999919099919929 -040806010400090810101100090810101100050212131100141415161100140315040400009999993090090999999999999991999010999190999099999900929999 -080910111104020512130100141516131300141516170400141516181800031506181804111901091999903919099999999999099909099999999909929099999990 -080804030900081010100900110512021300061415161300171718161304171704011300999299909990991909919990019090999909999099999901099039999999 -040401060800091010101000111112131300111114151500160504150200160317171700999090039099999909109999999991999901990099199909999991992999 -080809100400011106121300051415151304161615151300161702040300171718181800900099990993090991909901990909999999999919990909999192999999 -040608080400091008081100090912130300011414130400151414131600051717021600999990099090990999099999029909999399099999990990909119999199 -050601080804090909101000111213101004111414020400111415161700111515031800999900039099909909199991990919999991099901999991999991999929 -080409011000080811121004131411151600130211151700131805151700130304150600909999903999119091900999909919909199999909991999992999999009 -040801040600050808090900101112090900101112130200041112141400151112160300099999930090919999999900099999919999199991999999909919909929 -040106050800090909100800111112130800111113130800140204151500041616160300999990300999909991999990909990999999990190999099901999999929 -080901100600080911101200050913101200040913101200140215150400161703150400099999939099109999999909099999999099099199991090919999912909 -030808090200101011111200041011111304141414151604050617181800191919011800291199999199999999991999990009019999909900199009909039999999 -040801090900051011090900121313141400121306141400120415150200161617030400099999039999019909919909099990999999999099199991999190990299 -060804090400021010090900111213130100111413130400111415161600031405161600909990099091999911909991939909999999999909099909929999990999 -080109090400080809091000111112120500110406021300141415151600141404031700999999399099190990190999999900199999190990199999999091999929 -080909011000080909101004080211120500131314121200151614170400030614180400999999993990919091909999009910999999999190991990929909990909 -050108080800091010111100121314111104151516020400151506170300041818171700999990309999999901999900090919999911099901999999900992999999 -080909101100080909120600050413140100030415141600171818141604171702141600090099990099999909909990939990999900092999999909099999991199 -080809101100080409021100121309040300121209141400151515141400040105160600999199991999919900992990999999099910999199999999903009999909 -080809090400011009090400101011051200131402151200131617061200130417170300919099199993990999109999999901999091199009999909990992999999 -080306090500081002091100081212121304041415161600011715151600181818180400299999909091199999100999900901999090999999993199990990999999 -030808090400101008091100101002091104061213091400151613171400040113180500299099999999990999199991990019999919099990990109903999999009 -080805040600080809091000041109091000031213140400150413161600151502011600999999900099099999999909909900999901092091999999999139991999 -080104030904081010111200081313020600141313151600141415150400171717170500999209309190991991919999909999199091099999099999999909999909 -080104040900081011111200131411151500130503151500130216160400171716160600999099309090090991909919999909999999999929091999991999991909 -080909090904051010110100021010121300141504131300160604171700160318181700099900990999913999909919999109099990991090999909999909929999 -080809010600040909101104121212051300141415151500141616021700041616180300909999993090901099001999999999919999999999190911909999999129 -080109090900081011111200080411111204081302140600151617171704151819050300999999309991090990999999990999999110090019999999090992990099 -080309101104080812120200061313131400041515151500051617171700161618010400921109999199990990991909999999019099999991990999999030990999 -080909011000050909101000111213141404041513140400031502161600061517161600099990993999909999919900990099999999099901992919999199901999 -080801090900080810110400121212110400060205111300031404111500161417151500999999930999010999999999109919999090099199099999929099919099 -080909011000080909111004051211111000061314151504161702181800190304181800999999993990900090999909999901999090909919091199919099929999 -050808091000110808091000120213131004031413131500061617171800041917011804099099999991999911999991990299909909099091990990990939909990 -080601050900101010100900111112130400111104130400141502131600041515031600099990930999990999919990009990999999090999999110909999999299 -080809101000080411031004051211130200141211130600151216131700151201130400909999902999999090991909919999999091090919999090999390999999 -080809091000031111041200131111021200040614041200151614141200171717010500999099099099990929999919119909099999990999990091999030999999 -040805030900101011111200101011131400151515130200161717181800060104181804009299099199999999991990999909919999999900190919903099999990 -050808080400090210111100121303111100121404041500011416171700061416161700999990119090999991299919999999909109999990093909999999900999 -080910111104081210100100131415160500130217181804130619181804130320202000099909090999193991099999009919099109909909999099099909929999 -080801090900080810090400041111110400121302060400051314141500041303141500999999939999190991909999909019999010990919099990999999909299 -060804010400091010111200091013131300020503141400151516141400151717170400099999003091910999099999999199099999991029999199999990909999 -080808050900011011120900131014020900041014140900151616041704151518060300999999900993099999909909919099199919999909199909099092990099 -030808090600050408090400101102091200131114091500161114171700181801171704299099999999099909190991999099909999090990990109909399999990 -080806040900080810100900041112120100111112120200041305141500131304160300909999990999090990909909939999999999199009190991999919999029 -030806090400040809091000021112121200131314140100131315161600050417161600299999909099999901090919999190999919399900999999909099990999 -080809090400080609091004111213141400151515140100030516161604171718021900999999999099999000900900999990999990399991999099029991991119 -040408090900101010110900120211110100131414151600131414041600030504061600900990909999909999999919939119199991099999999990920099999909 -050108090900101108090904121208130200121208141400151516141704181804030600990990399990199099999990119999919999999909099099090020999999 -080910011104080312131100080502141504081616171800061616191800202019191804019909213999990999119990900991109991999999990990999999990990 -080309100400080611121300081111021300081415161604171717051600040118181800921099991990999999919999909909199091909019999909903099999999 -080405090300101011111104101202131404151216171400181819191400181801190600090990990299999099919991190099999990090109999199999399999909 -030809011004111112101000041102131300141505131304141516171800141506191800219909913999999999191900199999999990909990999000999909909099 -080309040400101011121200100204121200131414140500131515151500161606010400290991909099099999999910999919099999999919090999990030999999 -050803091000040209091000111106041000111112131400151617171400150117170400092999099990190991999990999999099990099109990099993999999909 -050809101004011111061000121111130200121414031500161714181500041919191504090909009993999999909909119999919999999992990901900999999900 -040809090500011010101000111212040300111312141500111302141400041304061600009999099093999991909909999999929099199919999919999990900909 -080805010600080809090900101112131300101415040400101602171704161618031700999999903099099990199999099901909099999910999109099999991299 -080909091000081104121004081314021004081414051500161718031900160118180600999999990999099090909909110999919090990199199092993990999999 -030808040900060808020900100411111100100412051300141414140400040115151500299999990999919909910990999991909909990910999990903099999999 -080409100400081111100300081111101200081302141204011516160500171716180600909099909999992999999999199991999090009019993990991909991909 -080910011104080612131100141516161104170216161104171803192000171818190500909909003999990909019909990909999019909199099990999290999999 -040809090900101011031200021111041200131314041200151316171700060501171700099999099099929990999919099199999990999909090109900399999999 -080801091000080809090600110412040300111212131400051516171400181818021404999099939099099990199999999999029090999919990019999919999010 -040108090600101108121204111108131400151508160200151504170500181803171700990090399999999009909991119909919999199991099099990999999299 -040308050900100808110900120211110900131313141400151515151600060401040400929090999999999901999991999099109999999901999990900300999999 -040603080400090909101000041112130200140513131500141616171700141601171700992990091099999990991990099099919099999990190919999399999999 -080808010500091011121300141411040400141411151500030602151500161617170400999990903090910990999999099999909990999919999099929190991999 -080909090900080504100300110212131300141516171704141818171700141806010400099999909999992900919991199019999019909919999919999030999999 -080808090900011011090900121202131404151216030600151717050400041818181800990999119993999999199991000999909012999909999999990900909999 -080803090900080510101100021210101300141215161604171204161600171204010600929999999099999910990919909999909011900999999099999930990999 -030808060900100408020904101112131404011515151600171718181900171718180500290999999999919090910901100919909399999099099099999990999999 -080808030904021010090900111010121304141515161304171718191305170120210600992909199991999919909999990199099999901090999000093099999009 -030804050904101010110900121302140900121313150400011616161600171717170600299909100999909999199991909999099099999910093999999099999909 -080808090900030410050900111111111204131302141400151617171800060117170400999999909999999920000999990991909910991909991990903990999999 -040801060904101010100900111213021400150413161600151713161600150518180300099909030999991990991909019009199999999999999099990919999929 -060108080400091008080400111212040400110213131300110414151500110514031500999090399991090919999909099999909119999910990999999999909299 -040108080500090908040400090910101000111212021300141415161300140406031300999090399999199999100999999091999991190999999900999099909929 -040501040800090910061100090910121304141410151500141410021600031717171600999090039099009999990999000099999999999990999910999919929999 -050801090400080810091100121213131304121214151500021616161504171819030600999990939099199991900990990990999990991909999999019990911299 -040804090400030810100200110405121300111114141300151514141300150401061300090999990092191999991999099909099909999999999091990309999999 -080903100500080611110400021213110400141414150100161616151500041717171700129099990999090919999911909991099991399999999909909909999999 -080803090400100411111200021311061204141414141200151616171200051601181800929091990999999910999990990109099999099199990909909309999999 -080910030400080905111100080212131300141212131300041515151500061604010400912999999099999991090991999099999091999991990999990930900999 -080401090904081011090500121211131400121211061500040211151500161616160300999909039999009909990999009999999999099099990109991999999929 -040808080800090909101104011206021100131415041100160515151100161617170300999990099999919091919930919909099009990099999999999092999999 -080808090104100311091213140611091504140211091605171718181919172021181919990999999302911019990090999999909119909990099999999999900099 -080809090909050410111213141010111206030402151204161717181219041717011919909990099909999099999919900291999901109999990901009939999999 -080809090110080809111110121313111110120204140410031505140416171804140619999999999399099009099999199919099990909199909909021999019090 -080804090106101010101111041212041111131412151516171705150218040319191919990999090309990909099999099909901099990909919999109991992999 -080808080904101111110912100502131414100415161614171718161619170304200106999090999909999099909090199991199909909919999199092903099099 -080304040910080802110910121311110914151617170614040517171814191919190104299999900999199099199009999009199909090999999991090903099999 -080809100605010811101212130414151212131602171818131619191818031619040420910099919903990990199999099991090919999990990999999999029090 -080808080910011111120210041111131310141516171318192016210603052016212104999009099993911999991999999009999000910990029099909999999990 -080309090909080804101111041213021111011214141504051614140617181819202020929999991999099990919909199991909399099199909190900999090099 -080910101003080902060511080912131314081516131317181920211717180104212104999929919999909099199091999919990900990109990900993099999990 -030808080204040909101106120909131415161604131315171718181915051718180115299109999199900909991009999909919990999999199990009993990999 -040808080304090909021011121304101014121313051515121616171515120418190106999290919909919999919009099999910999099909999990999003090099 -080808050909031011120909130614151516130414041516170218181916042018180116999999000999909920909099099999999909991990091191099993900999 -080910111111041212131301051212131314151602171414041818170406031918172020000990999099919399999999999091099009090919009999991999929909 -040809090403040808101011121313101014151613170218191920202018191905010618099999990029999909099199991099919000919990999099199030999999 -080905100304081112121213141402151513141404151513161717181813040117040619909299091900999909199991999999999999991900991909003999099090 -040408090910111111090910040506120410131303141510131316171515021818011919909990909999909909909999009909099929009990999919919139019999 -030809090405100409111112130402111104131414141506131617171518130117171518219099999900999009199999990901099199909999991099093999999909 -080808080104091010101011120413131111141502160605041515171818191903041818999990990309999909910909999991000019990990999990990299999909 -080604010504090909091002041104121013041412121013151515151613171718161603099990903009999199019109919909999909990990099999999099290999 -040809101105121313101414031302101414151515161717181816161904181801202106000009999991999929999991099991909991099099999990099309999900 -080808080910110212041010131414061515161617171515031818171920041818010405999009999991109919190999909191999999992909099990099930009999 -080509030410080609111210080409021310080409141415161616141715040118191717099999992090991999991990119999990999900019999990903009999099 -040408010909101111111109120313131402151513161616040405171718191919171706909990903199999909999192911099099909990009009999999999099099 -080910101010110904040506121313141504011313161717181818161717040219191903009990999909999909000909000999999390099919999999901999991992 -080805090410031102091010121204091314121515091306041515161317181919190104999092109999119999999099910900999990909999999990009903009999 -030809090909101011110512101004111312060214041512161717171718161619190104299999190099999999999999009919909919000919099999099903090999 -080809090104080809101111040212101305141415101617141418101920031818062121999999990309091999990901190919909990909909909999029990999909 -040804090904101011090903051012131414150416131414171717130218060119191818099909009999909999909290999090999909990909199909903191999919 -040108040209101111111112101313130514100415151603101717161604061717181919990910309110999999099199999900902999999909999999009909999009 -060808091010110809091010041213131313141415161717141402181901040320182105990990999990990999990900999999909901199919199919309990992190 -060804090110111111111010120313131314121516170214041818192020051818042020090999090399991919919099999929919911199990990900999909909999 -080209091010080809091101121314141414031515161604171806161619041818040520119099999999991319099909999209099999909009990999009909099990 -080809041010030809111004120209130514120409151616121718181616061901202020999992990999990991909010999909000990999999991190990390909999 -040805030910061112131010141112021504141116161617141118041917140120191917009299099199991909919991190999909909999999990009993099999090 -080803090410080804091112021314091115061313161115171819161615201821010515929909999909999019099919090999099991990999099909909039900990 -050808080804090310101002091104120413111106141415161717141418161717040104099999999009299199099199909099091990999099919909199903009999 -080909040310081112131010080414140215161714141515160405041801161919191906999929090999000999991999991009999909099999199990390090909990 -040608030905101008080904101011120913141511160213171718191913041701191904909200999999999099909999999099019000999099199019009399999990 -040809101111010812100213050814100615160804171718192020171703192021212121091199919193199199090109999990091099990999920999999099999999 -030802091011040808091011121306091011141504091601171518181616192018182105291999919999999009999900919099919909930999999099909990000909 -080805090106100404091111100312091111101314140215160417141818161619201818990990999300900999999992999991991009119999999909990009990909 -080808020409031004110409050612131409151616171409181816191901181820202020991909191992909999910990099099199999100999199009399990999999 -080910101010081104121206081314141414151516021717151518191717050118200403909999099990999999009009999901199919199999999009903909299909 -080809090909010810111112040513110212141414141516041718180319062018182121999999909903119990091999999090919999910990919099290999909909 -080909051010080809111213140215160413170415181813170315181813170419040106999999990099099099009911999199009901999999992999099093090099 -060809100211051212041311011214151511161717031818191717041818191904202020091109010190999999091939999990290099990999999909999090999999 -080909090906080810111101121302111114041516171714181516041714041516030514999909019199999309199909990001999999999990990999009999999290 -030808090105100808090911040602121213141515151213161717171704041819202020999992999301999199199199191009999999090999000999999990900099 -080808010909101112121213101114141502100514140616101718180419042018180321999999903110099999909199909999901909999990910990990999109992 -080903101010110412121206021314151617181814041617181814192020052114012020129991990999999910909090099199999990999999009110999939900999 -040108090210111108120610111108120313140405121515161718121515040418181919991110390999190999999199992099999090990999990090900999099999 -080808080904101010110901120404111313120402111413121516111414031704180605999009909999991300099999909999999901999919909199991900029099 -080909051003080611121314080411021414081511161604011711161818041919191818090929099199991999919999109909999019999199903990990909909999 -080808090909101002110612101011110413031414141415161705181901042021211919999999909009199999199099990299190999909999190900300999990909 -080804010909100811111111100512130403100614130215161717131515041717181904999999903909099990199999109990992999190009190999999999909000 -060108090904101111090412101111131415100216161603101718181905202020201919990990309909999099999019000999999119929099999090990999099999 -080801091010080809091010111112131415161602171415160418060415031920052115999999939999090999910999190901999900999910999099999190921900 -080809041003080811041213051414150602041414151616171818151619202020011919990929909199009199099109909999991999990909990901999030999999 -080808080104090902101112130914151616131714051616130318041920130618180420999999990309019909111099919999099919999209909990099990909999 -050808080109100411121209131313121415041616161617061818021919031818040419999990090399909009091099999099910999999991900919999990929099 -080803090404081006090902111213131314111505161714111818192014111818190104992999999000999190099100999909009990999090099999199993099999 -080808080903101112130909041414151602040514151718191920211718191901061718999999990920009909901999991999991990090099999011199309999999 -080501091010080811121010130214141414131516161718130404031719132021061719999099030999019999919901999919990919909092909999999099900099 -080309101111080909101111081213131414021213131514051216171819062021040104290999999999990999990999999199999199099999000111090093009099 -080808090104031002111213101014121204151516161616171717170518061920202021990999990309199029109099199999909909999990009999990999009990 -080409101104081212101304081206101314151516171314150218191314032018050114909009909999909999999009009999999911199199999109099903921999 -080209060110111109121010110309051314150409041314151617171714151804040414119991990399911992900099999999999909099999999099090009909990 -080808090906030402090410051112120413041114151616171118181616171118180104999902919999999090109009990991990091199999990090999993099999 -040308091002110408121313141408121213151516171819151506202020212121210105921110999919999900999999999909901900099909019999999903099999 -080804090610080805090410111112131410111115020403161617041818160119191919909909999999999990000990911999192911091999999009993099099999 -080309041010110612130510140215131616171718181818171719192020042119190120290991909999999910090011999991009999999991999991990993900999 -040805091004111112121301021412121315161617181815031617181815061917200415009009090999091399999911990199099990999999992999999909900909 -050809031004111209091314111516020614111516170414111517170414040104181818999290099100991999919999190999999919099999990090903009099999 -080809091011030809091213060214141404151516171717181616190404050120202020999902999009090991999001999991999999999090990900903099099999 -080808080909041011110909121011050413040414151617030602151616181818180104999999909999099909999009999090000900199999909019929193099999 -080808080910111111041210030602131310041415151310161615151701161818192005999009999099990929199990199999999099909099199090390909999900 -080808010904101112121212101304141515100304141516101702140616041717050418999909903090099990919099099999990999999209999910999199009090 -040608080910111112051303111112140204151512161616011517171804041917171818999910009129909999991999910099199909999991903199990999909909 -040108090410111112021010111314151605041314151603171314151818190414061818991090311999191999091090099099999999929999990990909909909999 -060108091004111108080404111213051414151202161414151217170403150417171818990000399099099999999011999091099991199999929090999999909909 -040108080808091010111112131010111404131504160217051804160417061818160317999990309999919009991009999909019909910099099099999999909992 -080808091004040511091213141111150213011617171818192017171818212121210603999909909099900000999909919990119319999099990999909990299999 -030802090104101011121313100411141313061511161604151505161617041818180417919992110309991999919990199999090909990999999099009900999999 -040809090104031002091112131014151512160417151512161817191912160506191904009999999309199029101919199999999900999990990099990999099099 -080801090906101010090905111213131313041415021616041718180416191919192003999909039999999001909991999001999991199090990999999090299909 -060504080903101112080909130414081502161614141504161617171717181818011904999920009999009909999190901099999999999990109099999030999990 -030408080808090909021010051112121212041314151516041718151516041818060116909992999909919999910909999909919000909099990909999903909999 -080806090410011111111110121314151610121204021717181803190417181820202005909099090993999999010900990990109999999091999990999219099999 -040801091010080811121010131415151504131405160603131417181919130417021904999090930999019900919099999990199999099991929909990919999910 -080509061010080811041010121204130214151216161603151718192020150121192020900999909999009909991199919990192099999919990190993099999099 -080808090903101102090904041212131406151212161616171819200521170119192121990929999990919000199999900999099090990109999900993999999909 -080901101010111212121313141404151313161417151506050418021919032021211919099990030999990909019999999999990009990901099099999919921999 -080910101010041111111101121314141516041702141816171706191920032105191920009990990999999390991909910099909911999909099999091999929099 -080804090504030802101011061213101014150413160414151717161814041717160114990992990009199099199000999999999091099999990991099993909099 -080808080906101011121301100514121515040216161515031716181804191704181820999009099099911399190990999991999019999190999999929099019990 -080904061003110905101004121213141504121213140216171713141818170119201818009920990999999009091999999999910999190999909119993099999009 -030408091010111111091010021213091406151516171418151519191818052001190421900092999999999991999919099190990990099909999190990399009990 -080609041003081109101012081314140512151614140212171819202012040119202004099099999929099990909909999909909099110991990119903999099999 -040808090310111208021310111414151510041405151510060404161717181818180104991290999990011999991999099990999099999990109909900903099999 -080909090903080602041004081112041013141415151016141417181001041917181805999929919999090999199009909901990999909919999011399999900990 -040809031010111109041210111109131402151516131404151516161417050401040618009299999999990099999190091999999990999999909091000309099990 -080910100311080910100511081213140211040615151616171819201616212121210104999929999999099999900900001999019909990999990090999003099999 -080808080403091005111212091313021414091313060414151516171819150120212121999090999920091999919999199999909990990199909090093009999099 -080805090904080810100911121314141414150216171801150416192020150306212020990999999909999909900000999991919119039090099999999909929099 -050809090110111212121310111414151610111414170210111804192020040619190320099999090390990199099999900999099999919090199909900999999992 -080808040404090510111213090910031413041510141413011616021713061616181804999999900009000999999999929909999099999001993910099999909090 -040308080406090402081011091212121111091313131401091516161616041705181804929990999009919990190999919999919999039099090999990909000999 -060508080909101108080903121314150204121314161616121714181819120414010420999990099929999900901999910999199091999999990019090939099990 -080910101010081111121203081311121414041304021504011306161718041319191905909999099999999990999209919999199009009991993099099910001999 -080808010910041112130910141414140410020515151510161718061920032118182020999999003990990099010999999199099909991999091990091999929909 -080809020404030804101111121212120611131304141415131316141417181818180105911992991009909999919999990099190999999909909999099003099999 -030809040410110209061210111109121210041314151610171718191919171705012020210999999099199991909999999919099911900091099909999039099999 -040108090210111213061410110415151410111615151703111805192020181821212121991100319190199990009999999999919909929090999090999999990999 -080309090906080410040211081210131111080414151515160417171717161618050104929999999109990990991900099999091909999909919999990093090099 -050809090909101111120413101111140313011514140413161617170218161619202106009999099999900999999909992909999319099919919091199999990000 -040809091003110602121010131415161604171818161619171818200419170501202019009929909990911909199909199909990099999991099919999399909990 -080901041006110909121013020405041404151616141404151616171717150318181818199901930999909010090099999199099990999999901909992099999999 -080802090404100804091111030512091111040612131401151512161717041518181717911991909009999929999990019999019909930990099999999909900999 -040401080909101111081209131111140405131516141717131802191917130406191903999090039990900999900009999919999919099919990919990999999092 -040108091003111102121205111313121214151313161614151717171714061819202104991120319999999099199919099099999990909909999999990999900000 -080409091003081112091306081414141315161617180219161618182020042101052020999929099199099999009099999099010900919999919991990309909999 -040108080808091011111104121212051313141402040613041415041616031717181616999990309991099019990999909091909990990919909999999109929909 -080910031104080412131106050214131115161616131104011718131919171720201919002909919990990099199901990919990999999919993109999999990909 -080910101111120410101111121213140215011613170515181813060315041919191904099990099999990999909999911909199311099999999009290999909990 -050809101004041111101001121111131313120406141515161702180415160319191919000909999999909309919909999909109990999991991110999099929999 -020808080409101111030509120413141509161717181819201717181819060121212121199901992990999919990999000100999999991999991909903099099999 -040408091010111112090210011112091303051404151515041617171818061917171818900990999199999999991231119909099099999900090999990999900999 -050801040909100811060909101004121314150216161616151718181904150318181904099099939991109999999099900910099009999199009199999999992990 -030808080404091010021112061013131114040413131514161616161514040517180114299999991000999909019099909999999909190999999990009903990099 -080808090902040410090311041210100513061415161613171819161613172020200113999910909919092999999100990990999090999099999099199003909999 -080109090909081011120413081415161613080604161718021920041718050320201718999999309991000990999990099990990099991999991190909999992900 -080808080106040910111212130902141212131515051617131515161617040318041904999990911309091999199909909991000999999999999999909190092909 -080809090105081010101011040212121306031412151515161616171718041920171704909999990309999009910991990919909999992199909999099099900990 -080109101003081111051212131111141212131514140216131718040619132020202004990999309920999999909909999919919919109099009009990999099999 -050208080803090906101004091112101004011113140415161117171515041118191919919920199999999099099910090999999390099909990999909000990999 -040809011010040809111006120809111113140409020405151504161616151517171803009999993990910099999909990099900901990991999099999919999912 -060808090903100808090411101213021411151616161611151718191904150120051921099929999990999990910991190919999999909199990009993099099090 -080509031010081111041010121211131402121215161417181815191404180615011420909299909999999909909199099999091900919999999001990939099990 -050608040304091008111112131008110214151508161714151518181714040418040114909990990209999909999000911999999990099999999090109903990999 -030809090909100811111204050811110413060204141414151617171819151520170119999992999091990999999009999919000999990109099191099993990099 -050108091004111111111212131302141512161617171804161619172020062121032020990000309999999919900991909901999999009999999090909029999999 -060804020909040810110409010812131303141412131305141512161717041818041717099199901990099999910231199909999999909999999000900909999999 -080605091010081104121310081114121501081116121515171102181818170419202103090099999999999099090999913990999901990919900999999199909112 -080808080904041011121201131306141204131315141616050402141616171718181803999009999090009399919999099999900909990909999919990199990992 -040608080808091011121304141511120316171711021616011718181818191919050420909990909990991990992009999099199909099991993999991109099990 -080808080905101002041101101012131314031512131614061718181914202020200404999109919199190399090999990209909999999090090999999900099999 -060808080809101104121209050402121209041313141509161303141718161619190104999900099990909900999999199991919999900999109290999903090999 -080109091010081111121010081113131313081415160417180419022017181805060321999099309990919999919999999909109909990901999091199909190992 -080808080509031010041111121210131111141502131606141718131901202020132104999909909902999999909999999901900999999019099999300191999110 -020809100305111112121313111412121515041616170415011616061819202021212121111291999909999999999019999910099099099999903999090000999999 -080809101104121202040313121214140413051515141613011515041613041718181806991190910209199999999999909910999099999999993909090090909990 -040808010309100808110409061213141409121213141402151604051718191919191704099929993990909900010999999999991999910990900099009999999990 -080809091005080809111101061204111314151515160414171717020414031818190414909909990099999390090909990999109990999901999999099919929190 -080808080109101104121209041314121509161614021717161818181717060304041905999999990390909100999990091999919999199091999999902000999990 -080809090510031104090412131114141415131116171818130204191818132019190106999909099909999929000099999999900900099909991991991993091999 -080409101010110909121313141516161313011506021717041518181717051920180403099990990999999900909900999999990309199991990199999099200909 -080209100111081213131111081213131404031504041404061616051417181616041717111999091399991999999099909209999999009009999909909990909909 -060402080808091010111103121010111113011415150413161717151813190517202004901990919929909909999909999910999399099099990990009909909990 -080904010404081010111212021010131412151616161717181803061717192020202005909999093000919999909919900109909999991999999299909909009999 -080809090104040809091010040611041010121212130205041415131617141403131818909990999309990999099990909090919999100099099919099299099999 -080404090904101011111111121002131313141515060503161515171818040104171818099990900909999999099911199199992990991999091909903099999909 -080909091004080506111112081314111115161617181801030402181804191919192020999099099009999999099000190901919999939019999999029190999999 -060808091011020808120311131415151616130415151704131818181920130104191905990000999991912919999900909999999999909099091999093909099099 -040809090905011011121212131311111414131302151514041616161604031718192006099999009903999991909099999990999910999919900999991099929000 -080109101106081212131404081212131414080515130404161604021703181819191919990009309990919099999999909990990909990901099991999991290999 -080808080309101011041209101013121209141415061602141417181619200501181804999920999999099999009999099909991909919900999911009399009999 -040809011010050211121010131304121414130415121414030416161706181818161704019999113990910991999099099999999900992990009099999999999090 -040808080909100511040909121211060313121214141415011617040218161619191919999090999999990900999099992990091999999099013190199191999999 -030808050904100808020909111212131314111512161718111519191919110406012004999902990991919999919099999909910090099999109999999030909990 -060808090105040808101111121314151116121304150416120417170216121817030416090999990300990999099990901990909099999999990991199999909290 -080808040409030402101109121212121309140604151509141416151501171717181805999992910099919990910999919990919099909999999009399990999090 -040804090909101104020603101212131314101212151314101605171814040117171919009999091920990999019999199999999999099190090099003990999999 -040809090909101011110205120311111304121414061516121414171717041819012020009999099099991099991992999999910999099999100909999039000999 -060408090300100211120500131414121500041414161500171718161500171818011504991290019999190901999909099999999091999099999900999939999990 -080808080400010910111104021212120600131414151500161414151704180319051700999999900093199099199919999190909999991999999900019099929099 -080804010500080809090900040610111200131010021200031414150400041414161600909999993099099990919999919099999091199919992900999999909099 -040808080300091011021200011013141400051013131400041515160400061515160400999990990290919999111939999999999019999099090909999999909909 -080109091000081109091004121314061004121414040200121505161700151503181900999999399990191000909990990999919990999999190900999991999219 -030408060900101111120900101111120904100213120500101415121600171718011604909992900999990999999999990990999199099109999910991139991990 -080109061000081111101000081213131300140404020400151616170300051616171700990999309999999991909901999000109999990991990999909992999999 -080409090400101103091200101113021200100613141400151613141400040113170500099090929999999999919990909999199099990999990119903999999009 -030508090400101010111200131302111400131515111400041516061400171701041400900992990099990999199999999991999090099999990109990399999909 -080808010600040910111200050913111400030402151400161617181404161618181400999999903090901999991900999990999991192010999199099999999999 -080809061000020809041100120313131300121415150500121415150400120116170400999091999099909912090999999999009199999999999090993099999009 -080903101000110506101000021213141504121213151500011613171704181818171704129991999999909910909999990199099910999990993199099099999990 -080804090500080804101100121313031100120614141100151514041100150116170200990099990999900909999999929990999909990999999199993101999119 -060808040400010809101000111111110200121212131400150516041400151504031400090999999093119990991999999099019999990000999999999099999929 -040108060400090808101100121204131300121214140500151502160300151504161600990990399099900901909990999999909919999019999919999992990999 -030809101000111212021300111212141304150516141304171816141300041916010600211999991999901999999909990999999099900999990001990930909999 -080910010400081110121300081415151604171715151604171718021600050619190300009999993099001990991999990909999999109991999919900199999929 -030808080900101005020904111006120900131415121200161718191904160104191900299999991999900099919909999090999011999199990009093099999999 -040806090300101111090500041211090200131214041500131616171700131601171700099299009990999909990999919990919909999900199919999399909999 -080909011004080909111004081206131004121214151600170218191900031818200500999909993990909099919999000999109991991119099199929909999909 -080809011000080809101000110409121200110413020400111415161600060317051600999999993999009900991999999999199991099010999099909199992909 -080808080600010910101100121310100200141515161704051818161700041818031704999099099993191990991909999090019999900909999999999999909920 -040808080300090210101000091111111100091213051400091313151404060401161700999990099299199991999999999919999099999190999909000300999909 -050804010900101011110900101213140900040215141600171704141600170306141600099999003999199991909990909910909099999109999999999999929099 -060308080900101004110200101005121204131313121204141516170100141819191900929190999199901999919999990900999990909991990903990099990999 -080509031000081109101000121209021300121204141300151516171804151501060400992999099999999900990999119999099990999099199011099300999999 -080406040900081010111100081010031200131302121200011415050400041616161600999099009099909999999909929909999991999019993999991100909999 -080808030904020510090900111111110600121313141500161313171700040118191904992901909990909919999999999199909990091999991909903099999090 -020808080300091006111100121204111100011205131300041414151500041414160400199291999990099919999999099999099399999000990909999909909909 -050108090300101112131300101402130400101414151500101617170400041617170600991290319990999991190999099991999999999900999990999999900909 -080109100400081109120500131415151600131406150300131417021800131404181804999099390990909991090990909999999099999909299119999919990990 -060108040500090910111200090904111300141516111300141502110300141517171804990990309099090999999990909919999000999999999199999192999910 -080910111100120310111100021310141404151616171704181616051704060119192000199991299999999919909911090991099099900999999990003990999909 -080808010500091010111200091004041200090413131200041415061200031615150200999990993099901999909900999999999099099999990090999991921919 -080809090400080806091004051112131400151502160100151718191900031718191904999999999099099090900991109019199919399910999199999999929990 -080304090600080802091000111111091000121314090400120414141500120404010500299099909999190999199999999991999000999099099990999030909999 -050804040900100811110900120311020900131313130900141415151600140404010600999990900990999909919992919099999999999909199091999030909999 -060801090900100811090904050812131400020815131604171815131600031804131600999990939990109099009909909990909199901999991999999999929099 -040809100400111112120100111113120600141513161700140516160200140318181804000099990999993999099990999909109099199099199999999991992990 -060808030900020804100900111110100904051213130900141413131500141401160400992990999991999919099999990910999919990099099990999309999909 -060108080900101111050900101111040900041213021400151516041400151504031400999090309999990999999909999001099991199009999909999099999929 -040803090900100808090900111212040200111313141500161313170100050604171700992990999999909909991999999909019091199999990913900099999999 -040808090900101002090600111012131404111516160500110316161700181818010400999990909999199999100999100919199999099299999990909030999999 -040308091000111112091000111113051004141502161600140417161600181818010600929990919999990999199999990901009901999999999009909030999999 -060305080800091010081100120410021100121313131100121415151100161704010400999990209999999909909909199999199999999919999090900030909999 -080804060300040809101000111111120200051313131300041415161600171701161600909999990299099909019999919090919999999019990909990399999999 -050809090400031010091100121212021300041414151500161414151500160417010600009099999999900929990999199999109999990999990909999030990999 -060108090400101010111104041213111100141415160200141415160500171717180300990090309999919000099999999900919999199999099999909919999929 -050108080804091011120600131314150400131315151600170218181604171718180300999900309991090919909990009999999999090199999199099999999929 -040808090900020808090100101112131300140412131300151616171700031605060400091999999991993910999990099109999999991999099909929000999999 -080803091004061112091000021212131004141516171005181819202100181801202004999909029990099999909919990199099190009109099199999390999990 -050808010900041008110900120306130900121402130900041516131700151504131700099999093990900999019929999999999119990919099019999999999099 -040809100400111112101000011113131300041415150500060216161600171717170300090999009099099999999930999919999019099919990199991999999929 -080809010400080410101100121210041100060213141100031513141100161713140500909999903099090999909991999919999009099199999999921999919909 -080910031104080912051104080213141104081515141100161718141900060120202000992909919999990090199991990919999999990919090100903909999999 -080805030900080802100900111212060400111113131300140415161600170401161600999299909999111991990999999991099909990019999909909399909999 -040108090500101008080400101011121300141415151500031402041600171717061600999090390999199999190999009901999999999919099909929199999099 -080808010600090909091000021112131300141512041304140516171700140304171700999999903099990991090919999109099999909099099909999099929999 -050809100400111210100100061313141400150213141404151617171700151818030400000099999990093909919999199999999919909109990999991990999299 -080801040400080809090900101010111100050612021100031212131400151504040400999999930099099999919999099009999991199999092990990900990999 -050102080400091011121304091011140300091015141400161006171700181818041700991990311090991099992991099990999999999900990999909909999999 -040808080500090910111200040913130100141413131500061416161704031818180200999990990099090909009999939999999909199990190999099991929919 -080909101100080904021204081314140300081514141600011717181600051717061604999199991199999090012999999909999019999190993990999999909090 -040108080600091011121200131311121200141511021600141711041604141805031600999990309090199990999999199099199909199090999999090999990929 -080603090900080510090400111104120400111113021400011516171700151516171700099999929099019909919999999990109909099091993919999999991999 -080809010500080810111204131306141404031315151600170215151604181920201600909999903099900099919999990990199909992999999190011909919999 -080809030400020406051000111212131400111212131400151516131400041501041400912991999099990910090919999999999999099019999909999309909999 -080404090900101111090904120513131300120314140100121514141600120206171700090990999999999009090990999999099299399999999190991990910999 -040809100300041111100400121211100200121313131400151515151600050117170600009299909990999999990999919990919999990909199991903909999909 -080105090600080810090904111213131404111513131404111602170300181818192000999999309099009001090999990919999999909199999119909912999919 -060809101000011112130300051414151604171414161600171718021904202020201904009999900993099991902909090999999099999911999910009999999990 -060401080800090910080800090911111100121213140200151313031600150504171804999990039999999999109990999090199999190999199999999021909910 -030809050400100611111204101002121200011313131300141516171700181804171700210999919099999090199990199999199399999009990909909999990999 -040801090900101011121200100611121200130411141400150211030400051617171700099999030999099999999990099099099099999999990199901920991999 -080801040900080810110900121212110900130602140904151616170400180503171700999999930999010999999999199091999901900901099999909999909299 -080910010400081111121300081111141500160217141504180617140400180317140500009999903099910999999999099910999199001099999990999999929909 -050808090900101008090900101011120100030413141504161616021500171717040600099999999999909999909990039999199900102999999911909900999999 -060808091004050802110300011212121200131414141504131617171800041917171800099109911290919991999939999909999099009909099099990999909999 -060808080300090910101100040902051204131415161204171718191200171718011200999990099299991999199991090019999011909991999000999939999999 -030802090900080810090900111110050600121213141500121213161704041813010400919992919999909999999990999991009999099999099010090930909999 -080906031004081112121000080412121004081313140200151316051700150118191700909209099990999999999909990990919991190999990099993009999009 -060801090900100808090904111213051404041516021400031717181800191919181800999990939999919009091900090999999001199910992999999099999999 -080102090900080810050900111213130300141215160600041217171800041217171804991999310999999991192901999090999990090909999990999999909990 -080409090300080509090400081002060400041011121200131014140100131314140400909299999999090999199901099999909099999900999193999999990909 -080305091000081112041004081212131400151602171700151616171700150418010600990099299999199099900999909091099019999999999919999030990999 -080804090300080210101100121313111100061313141500161616171500050118041504999299901990199991999909999099009999999910999909903099999090 -080803050600080910111200021310111404151617111400181819191404181801190400929999190099990991990919090199999190999109999199099399999909 -030805090900060808090900101002041100101012131100041412130100041512130400290999999999999909190991999999099911099999990093999999900909 -040108090900101011060904121213141500121213160200171713051804171703181800990990309999009091999991119999919990990990199999099999999299 -080905031000080806111000121204131000121214140200151616161600151701040400009299999999909909909990909999919919199199999999990300909999 -080809090500060810111204021314111500161714111804191914202000190301202004999999909099099009090919999119909910001999999909999399929990 -040108090900101108121200111108060200131308041400131303141400041505160400990990399990119999991999909099919990999999999929990909900909 -080901100400080909100500081112101304141415101300141406021304031617181800999099939999910999099900900990999909999991999909099919921199 -040408080300091008080500111102121200111113131400151616131400040616010400999290099999990900919991199999999919099999990909900930999999 -080904041000080811031004021213141000051515151500161617170100161617170600909099099999129019999911909991099099999991999093999999999909 -080406090900101112030900131112140200131512160400131515170500130118181804099990902999999909991990919999109091999919999900993099999990 -040804090400031010101000110612121300141402121300141515151500161616010500090999090099999929990990999191999919999991099999990930999999 -080804050900030802041000110612121300141412121500141616171700181801171704999092909099190999190909999099909909999991099919990399999990 -080808090500040210090600111204090100111313091400031513161400151504171400999099119990910991099919939999999990992990999090999909999099 -080401060900081011111200081311110400051302141500161717181500031717181504999099039099190991999909909999099919090910991999929999999990 -020808080300090909100600111104120400011313140400151313161600151517051600199291990999990991099999909919099390099999990909999099999099 -080801050400060910101104121210131100121214151100031602171100161618180400999999030099990000919999999999199909999901999119929090999999 -050308091000111104120200111112121300141415161704141415161804191901160600921190999199099999991990999999019999909999199011090390999999 -080809041000080309041000020411051000121212121000061314150100041614151500990999299999909919099990999190099999099091990093990999909999 -080901100600111213130500041213130400031214141400150216171700181816161704099090030999990909999991909990999999992199999009911999999990 -080904031000080902101000111213061404041215161400171218181400050118181400999299909999919900199909990991099910990999990099903999999909 -080808090900050402090600101010111200031313140400151616141400041616010400999990909999019999110999909299109999999909990909909930999999 -040108091004111212131000141212061000141502161000141516160500041503171700990900300991990919999999909999999111999999099999909209999999 -080306091000081111121004080213141000151616141000171616180400040105181800290999990999999090909911909991999090990990099999903099999999 -080909090300061011111100041002121300140415051300141616171300041616011300099290991999999999199990119090999909999990990901999939909999 -080801091000080809091000111112061000131414141400040415020400031617170500999999939999099909199999999091009999990019999910999919921909 -080808010900100511090900101212131300101212141504100604021600031717180400999999903999909990919999099999199099109009199991999919929109 -030808080904101011090900101011121304140215131304140516170100141819200600999902099999999999909990990919099919909010999993999119900109 -040103080900101104020900101112130900051114131300151114161600170414061600992190399990901999919991199999999909990999990909909999909099 -040308080800090904100200041111121200051314121200151516171700151501061700929990999199909900901999099999999001999910999099999399999909 -080409090300080209101000111111101000121314140100041514140600051504160400999299099999199901999999999991099009390999999090999009909909 -030806091004110812131000020814150400161614171700161618171700041818010500999002900991909999909919909199099911999999999909909930999999 -080909010500080904101100081212131400081515021604031517171700041818180600999999993099900990919909019999919991109990992999999900909999 -080809090600031009090500110212131404111115161600171819161604171701202004999092199999999991090991000991999919999199990109099309999990 -060809101000011112131304141515150200160417171800191917171800191905031804090999009993099091909909919090919909990999999999999099999920 -030408090900100511121200100413121200101413151500021616150100041616170600909992900999009999999999999909909999991009991913999999909009 -040108080500090908080600100911121304101415161600171702180300171719191904999090399999099999900900900910999990999199999119999912999990 -060808010400091010111100041210111100130214141500131314141500160305170400999990903090919901999999999919009199999999999999919009929909 -080809011004080809101000041109121300141414021300061516171804151519030500999909993999099999901900099999999991199010999990009190999299 -060403080800090910040800111010120200131314151600131314151700040114150500992990099999909909991999119019009999999999099099903990999999 -030808060400090808101100091212101300090412140500021515160100041515160400990992999099999999090999009999999990091009991913909999999909 -040808090500010808101004061104100200121213141500121213141600171713031800090099999993919090991909099909019909999999199999990991999929 -080808030900021011120904131406051504161417151500181819202004181801202000992999919991100019999999990190099119990910999909099399999999 -040809030600101009091100101012021100131212141104151617140400050118181800092999099099999999919999109099999090900199999099903090999999 -060808030500040808091000040211111100041212130400141213130100151516161600092999999090990991909901999991999999090919990993990099999999 -080801050904080810110904121212120904031302141500161617141800061919191900999909930999099099109999900919909910992919099199999990909999 -040805030900100811111100121313020600141313151600011718041600171718181604999290909199099909919999909099199091099100993999999999999990 -040804030900101112121200101314020600101414151500161616161500051717010400909290099199999990919990999999109999990909999991900930999999 -050804090904060810090300111212021300111212141504111617181900111717011900009909999299099909019999919999919990109991990000999939999999 -080808040500030910101100090910100400061202131300041414150100041414161600990999909092990999999999909019099919999910990993999919909199 -040808010900101008110904101012110904131415160900170218161600030619190500099999993999999099099990000999199191991119999199920090999999 -080109101100080809100200121213101404151613101704051813192004181813060300999199399199119990991990990099919909900099199909099902999999 -050801090400101112121200040402131300141415131300031415161600171715061600099099030990099900991999199991999919992990999999999999990099 -080809031004110812131004110214131300111516041700111518181900060118180500992909919999999090190911099999909909999900091999903990999999 -040808080800091011110100050411121200131306121200041414151600031402150400099999990990093900919999999990999999990091099999999190929199 -080806040300090805101000111111101000120404131300121415160200120116160400909999990290099909999999999009919999999909190191993190999999 -040808030904100808060900111213131400011513130200161517171700161505180400999200999999909909091909999909919319999919199999999909900909 -050806010400040910111200020913111200141313111200140404151200140315150400099999003090110999999919099199999999999000999999999999929909 -080903100400080911110400020911110400121212131300141516131300060501171700929099990999990909999919999190909999999919990009900309999999 -040803090900100808021100121314141100041514141100061515161100171701050400992990999199991909019900999999999099999919990909990300999999 -030809101004110909021000110512120600131314151604131317181800041901181800299909190999919999919999999009109991909919099009990399909999 -080804090500030810091100121310091100021414091100151414040400060116171700999999909092999991999919909190999190999999990909903090999099 -080905010400080910111104080910111100081213141500121216170200040317170600999999903099099099999999099999199090199909199091909990992999 -080304010400080409101000111209101000021309141400151506161400151717170500299999903099999910999999999109199111999090999099999909999909 -040104080808091010061112131010141412151617171712181919052012021903202004999990309091990919990999099109999909901999999909019299019999 -030809040500060410111100121202111100131314141500161614141500041601171500219999010099999909199999199909199909999999999099909309999909 -060104080804091011080800121213131300141205151500141404151500021616160300999900309999009901099999999190099999999999999099919999919929 -050108080800091011110400121013110400141515151500021617170300041617170600999990390091999919099999999190909999991099991192909999999909 -080808090900101011120100101013141400061505021400041516171700041504031700990999909999003999919999099900999099199991990909999099909929 -050803040600090810101100040812100200131313041400151516171400151501171700999990920090999999990900919990919990990909999911999399999999 -050808030900101011120900101011020900041314151600171718181804171704010600999990902999991999999999919000199909199909199099099030999999 -080305090900081010090900081104121300021415150400141415150100041616170600299999909999999990990999009109099999091999999193909009999909 -080803091000080811111100120405130200141506161704181519191704180119191700992199999199099999991909009099919990900990990191093999999999 -080901101100040909121300141515060200141515051604171703181604171719191600099190931199919999001909999999919999009099999921099999990999 -080106030900081011120900081312120500081402151604171818191900171818041904999999302991090999999919909911999910000999090999999999999900 -050808010600040808090900101011091200101013041200141414040200040315161600099999993090909990999999019990099999999909199909909991992199 -080304040900080810110900060212041300141415151300161415151300051717011300299999900999909991090901099991999909990999999990909039999999 -080603090900081011090900081211040200081314141400151616170400050116171804992999099999999990991999909900919919990199990999903990999000 -050608010400090908101000090908111100120413111100121202140300041516171700999990093099019999999999099901999999999919999019999012900999 -080805090900041010111100011010111100121304021400120615160400120317171700909990090999919999999939999909199009099991099009999919992999 -030804091004111213141000111502141604111515140500111717141800061901181800290909190999199999190999900991999999999199090900990399909999 -040304080800091011110800090511111200021304141200041515151500161616010600990990299991999999990990909199999190990190099999999030999999 -050809040300101109121304101414151300061414151300161617150200161601150400099999090299009090999909999999999091999919199091999399999909 -080304090600081010091100080510091100021213141400151516141400150404010400290999999099999999999999009100999909991909999119990030999999 -080809090904011010101000041112041300141412050200141516171700061803171700999909009993999990901900999909919990999099199919990299909999 -080409090300100211061200130405121200141515161600011515171700181818181704099290919991109919099909999199099190999999993909990999999990 -030809090900080810041100061010041204130214141500161714141500051818011500999992999099909991990909990919009099990199999190909039999999 -040809090300100809111200010806130200141415151500141404161700040516161700909990999290991999919930919919919919999909099990900999999999 -080808010900020610090900111112130500111412151500040316151504041718181800999991913999019919909999009999099199990299999909099099900999 -080804090300080804090600101104090200121113141500161113141400051101171700909299999999099909990990919099919001190999999999909390999999 -040108080800090910061100090904111100121202130400141415161600141405160300999990309999009999999999999190099910099919999019999092999999 -080809101104010812021100131415161604131706161604131718190300131718200500911909901993999990010909990990999099909991999992999909999009 -080808010600090909101104040212121300141512121304161705181800031717181800999999903099990091110999999019999199901009099999929999999999 -060808030900100808050900100411020900101212131400151212161700150104041700099299999990990999999999119901999990090990090999993009999999 -040804030904101111060900101111021200101314151500161714181800050114181800009209099999999999901999919909199911990199990999903999999099 -080809090900010810060400111112131300111114050200041514161600041703161600999999909093099991909991199999919999099099190909990999909299 -080808030500020906041000090911111200131311111400131516161600041501041700992991999099999919000999999919909919999919099099909390999909 -080804010900081011120900060413130900141402131500141404041500031616051500909999993990001999999999919001909919999900999999920999999099 -040108080500091008080400091011111100121013141400151602141400061616030400999090399999090999099999999099099019999919990199909990999299 -080808091000041109091000051213061000140213151004031613171800161604011800990999999990099999099991099019999091909191099990929039999999 -050809090600100809090400111213130200141213131500161617171804160117031904999090999999990900099999919099919919990199199099093991999920 -080910011100041210131100061210131400151210161604170218161604051818190300009990993999110999990909999999909099900199999999001999999129 -080809100500080811111204131314141204131516141200170218181804192003010600900099999999990009999999990999999011099191991999019930912999 -050803091000080811111104120413130200141515151504161717181800061701181800992190999199999009991909909099919099900919999909909399999999 -040108090400101011111100101005060400121213131300120314140400021514161600990090309999099999909999999190909909999999999290919909911999 -080802091000081111091004031213091000061415161000171717180100041905181804911999999999999029099990909900199090999991999903990099909990 -040809091000110809090400121313141400120215140100120515160600120315170400999090999099999900099999999909999119399991990910999909929909 -080503091004081112091000081212090200080413141500161617170600160117171804992909099990999999990999919990919091190919999199993990999900 -080903101004080906021004081111120500081111131404151617181800150119201800992909999999991090019999999999109991000199990099993099999009 -040805090300061011091200131314091204151514091200151516160200170401161800099999009290099999099990990999999990999909199099909391909919 -050808090400040608090100101011091200101002121200131415161600041717170300099099999999913900199991999999999910990019999919900992999999 -030408080900100208080900101011040900121213140900040515161600061715011600909992999999199991199999099991999901090991999009999939900999 -040809091000110803091000110812021000041313040600141313151600141404010500999990929999999999919900109091999999999990090910999030999999 -080801090904080810091100051213131404021213041500161217181500191903061500999909939999100991990900990999909199091909999909919909992999 -080905011004081112131000081415151600080615151600171818021600031818041604909909093990001999901990999909999999999999991911929999999900 -080309101000080609101000080211111100080412121200131414151600050417010400299999999999999990090911999991999909999901990990909030990999 -080801090600080810091100051213091104121213091100041413021504031617181500999099939999019900999990900999999999999091990990099919921199 -080809030500041009111100041209041100131314140200131314151500060104151500999999092090999990999999999000019999999999199119903099999999 -060808080800040910100100041110101204051313141200150213161600151503161600099999909990093999999900900991099099999190991999999999992999 -040808010900100808090900110504121204131402121200131306151500031617171700099999993990909909991909090999999911999109099999991909929999 -080806010500080809091000111209090400111204021300111214141500161614031704999999903099090909999999909999199099199900199999909991999920 -080509100300080809101100121309101404011309021504161317171704161318190600999999099299999909991909900999919391109919999199099999900009 -050808010400091010101000041112131300030612131300141412151500141402160400999990093090999900190999999909999999992990999999999109991909 -080905011000080911111004080911111000120904131000060414141400031516170200999999903990099099999999919999099090990999199099999991921119 -050808080400040909101000010909060200041111121200041113140300151515150400099099099990919999991939909909919099999901990992999099999909 -080910101000080906110300081213141504011212161704181816161904181805200200999999990990999990002999990990019399909019199999099911990919 -080909091000080411061000120211131000140411151004141611171700030105181700999999909990999909909911099109999999009990999109923909999099 -040809011000041109091004121314141000151314140200161305031700061818171700009999993990099099919900909099999999190909199999900929999999 -040804010500090910111100121210130400121410151500060410021500161616160300099999003099019990999999909999099909990091999919999902999999 -080808080904041010090900050210110100121314141400151304061600031717171800999909909990909991999999139019099099999909091999929900999909 -080109090400081009091100081212130400141402131300141415151500060504160300999099399991090999900919999091999999999919999999900019999929 -080803090500080204091000061112131300141415131300041416161600171717010400929999999091999991000909999910999919999919090999999030999999 -060808091000111102040300111112121200011314141400151516170500150416160400991190910299199999999999999910999309999909999000990999999909 -040104080800091011080800091206050400091313140300091504141600151502161600999990309990009991900990999919999999299109999999999919991199 -080808090900030410090900110410101200111305140600150216161600151517010400999999909999099929990999909909099199999100099999991130991999 -050809031000111109091004121106021000121314151004161617181900161601180400092999099999999099919999019909999909100901999010999390999999 -080104090400081009091100081213021100141515161104141515171100060518170300999099309999099991999909109011199999909991999999909099990929 -050308091000111204130200111214131500011214131600171706181800171704181804921190999190909999991999999999919311199090999909999999999090 -040508030900101008110900101012040900041314140200151614171700061601171700999990092999991999099999999000019909999999190019909399999999 -040809100300111112130600111113130200141515161704141515161804191901160500009299901999990999099999919909919999909999190911090399999909 -040808080800091011120100091314121204091515161600040215060500171717170300099999009990903999999991190919099999999199090909991999999929 -030808090600101008091100101002121300141504120400141617121804141601120500999992099099909999990991109999999009999999090010099399999909 -080803091000080804101000111213130200061214150500161214171804040114181800992999991999999990091901919099999990099999990009003909999999 -080910061100030402111100121212131300141415151504141416171700040105171700119092919999999990190999999991099999909919999109903099999999 -080809100400080809090100021112131400151612131404170518131404190318061400999099990999193991909919099199999909001009999999019999929909 -080804090600051010090100041011090400121311091400031502141400161616160400990099099990903999999909109999999199092119999199990999999909 -080306090904101104091200131114141204021514141200161717181200161701190500290901999999999919009909990199999119990991999910999309999909 -040401080600090910101000090911121200131415041200131515160200130317160500999090030999099999991990999900099099999999199991999990992199 -080801050600080910101100041210101100131313021100141415041100141415030400999999930090091990999909999999999991199010999999999990999299 -080309090900100611121200130211111204141516171704141819171700141804010500299991999099999910999919900910999911909999990009999030999999 -080809040400031002111100121013111100060414140400151514140100051516161600910992919099999999199900999091099909099999999093999909909999 -040803090400040808091000111202091000051212091000131314140400060114140400029099999999999909199909199999999999090901999190903999999909 -080804090900081011110900061211110200131414141500161616041700040105031700909999999990990990999991919019919999990190199999903099999929 -080906100300080805100400111212100400041212021300141415151300141401151300009299999999990909099909909999199991090199999199999399999999 -060108080400091008110500091213130300091214041500091202151500041216161600999090399990090991909991999991929999999910999919909909999999 -080109090600080810101000111204130400111414140400111505161600111702160300999999309099099991009909909919999999099199999999991092991199 -040808030900100508110900120211110904131313131400061516171700181818010400999990992990999909099901990919909999099919990019999030999999 -080409101100080812101100131415101104141402100500161617031804060119191900909999909999099909999991900091999990999119099999003120999999 -080109090600080809091004111213140200111105151600171818191604171818031604999999399099099001990991119999919909190091999999099929999990 -040801091004110809091000060812131000141516131000141702181800140405031800999000939990199999999901099991999009999919999019990099999929 -050808060904021008110904121314150100161304151500171318181800031919191900099909990991990011009991139190999999991990999999920999999999 -080105091004080811120400131314141400131315150400161602060300161617171700999009300099109909199999999991999999099019999909999192999999 -080809091000080809091000111202131400111204051504111617170300110104170600999999999999090909999991119999019199909909291099993099999909 -050808090900010808090400101011120400101011120400131402151500041606031500099999999993900991909991909999999999990919090919990099909929 \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index edf6a00..67ce55a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,458 +1,121 @@ -mod dungeon; -mod net; -mod server; -mod utils; - -use crate::dungeon::door::DoorType; -use crate::dungeon::dungeon::Dungeon; -use crate::dungeon::dungeon_state::DungeonState; -use crate::dungeon::room::room_data::RoomData; -use crate::net::internal_packets::{MainThreadMessage, NetworkThreadMessage}; -use crate::net::packets::packet_buffer::PacketBuffer; -use crate::net::protocol::play::clientbound; -use crate::net::protocol::play::clientbound::AddEffect; -use crate::net::protocol::play::serverbound::EntityInteractionType; -use crate::net::run_network::run_network_thread; -use crate::net::var_int::VarInt; -use crate::server::block::block_position::BlockPos; -use crate::server::block::blocks::Blocks; -use crate::server::block::rotatable::Rotatable; -use crate::server::chunk::chunk::Chunk; -use crate::server::chunk::chunk_grid::ChunkDiff; -use crate::server::entity::entity::{Entity, EntityImpl}; -use crate::server::entity::entity_metadata::{EntityMetadata, EntityVariant}; -use crate::server::player::container_ui::UI; -use crate::server::player::player::Player; -use crate::server::player::scoreboard::ScoreboardLines; -use crate::server::server::Server; -use crate::server::utils::chat_component::chat_component_text::ChatComponentTextBuilder; -use crate::server::utils::color::MCColors; -use crate::server::utils::dvec3::DVec3; -use crate::server::world::VIEW_DISTANCE; -use crate::utils::hasher::deterministic_hasher::DeterministicHashMap; -use crate::utils::seeded_rng::SeededRng; -use anyhow::{bail, Result}; -use chrono::Local; -use include_dir::include_dir; -use indoc::formatdoc; -use rand::seq::IndexedRandom; -use std::collections::HashMap; -use std::env; -use std::ops::Add; -use std::time::{Duration, SystemTime, UNIX_EPOCH}; +#![allow(clippy::collapsible_if, clippy::too_many_arguments, clippy::new_without_default)] + +use crate::assets::{get_assets, load_assets}; +use crate::dungeon::dungeon::{Dungeon, DungeonState}; +use crate::dungeon::entities::npc::InteractableNPC; +use crate::dungeon::menus::MortMenu; +use crate::dungeon::seeded_rng::{seeded_rng, SeededRng}; +use anyhow::bail; +use glam::ivec3; +use rand::prelude::IndexedRandom; +use server::block::rotatable::Rotatable; +use server::entity::entity_appearance::PlayerAppearance; +use server::inventory::menu::OpenContainer; +use server::network::internal_packets::NetworkThreadMessage; +use server::network::network::start_network; +use server::types::chat_component::{ChatComponent, MCColors}; +use server::types::status::Status; +use server::world::world::World; +use std::time::Duration; use tokio::sync::mpsc::error::TryRecvError; -use tokio::sync::mpsc::unbounded_channel; - -#[tokio::main] -async fn main() -> Result<()> { - let (network_tx, network_rx) = unbounded_channel::(); - let (main_tx, mut main_rx) = unbounded_channel::(); - - let args: Vec = env::args().collect(); - - let rooms_dir = include_dir!("src/room_data/"); - - // roomdata first digit (the key) is just a list of numbers 0..etc. this could just be a vec with roomid lookups. - let room_data_storage: DeterministicHashMap = rooms_dir - .entries() - .iter() - .map(|file| { - let file = file.as_file().unwrap(); - - let contents = file.contents_utf8().unwrap(); - let name = file.path().file_name().unwrap().to_str().unwrap(); - let room_data = RoomData::from_raw_json(contents); - - let name_parts: Vec<&str> = name.split(",").collect(); - let room_id = name_parts.first().unwrap().parse::().unwrap(); - - (room_id, room_data) - }) - .collect(); - - // Might be a good idea to make a new format for storing doors so that indexes etc don't need to be hard coded. - // But this works for now... - let door_data: Vec> = include_str!("door_data/doors.txt") - .split("\n") - .map(|line| { - let mut blocks: Vec = Vec::new(); - - for i in (0..line.len() - 1).step_by(4) { - let substr = line.get(i..i + 4).unwrap(); - let state = u16::from_str_radix(substr, 16).unwrap(); - - blocks.push(Blocks::from(state)); - } - - blocks - }) - .collect(); - - let door_type_blocks: HashMap>> = HashMap::from_iter( - vec![ - (DoorType::BLOOD, vec![door_data[0].clone()]), - (DoorType::ENTRANCE, vec![door_data[1].clone()]), - ( - DoorType::NORMAL, - vec![ - door_data[1].clone(), - door_data[2].clone(), - door_data[3].clone(), - door_data[4].clone(), - door_data[5].clone(), - door_data[6].clone(), - door_data[7].clone(), - ], - ), - ] - .into_iter(), - ); - - let dungeon_strings = include_str!("dungeon_storage/dungeons.txt") - .split("\n") - .collect::>(); - - // Check if a custom dungeon str has been given via cli args +use tokio::sync::mpsc::UnboundedSender as Sender; - // let dungeon_str = "080809010400100211121300101415161304171418161300191403161304191905160600919999113099910991099909090099999919990929999999099999999009"; - - let dungeon_str = match args.len() { - 0..=1 => { - let mut rng = rand::rng(); - dungeon_strings.choose(&mut rng).unwrap() - } - _ => args.get(1).unwrap().as_str(), - }; - println!("Dungeon String: {}", dungeon_str); - - let rng_seed: u64 = rand::random(); // using a second seed for rng enables the same layout to have randomized rooms. Maybe should be included in the dungeon seed string? - // let rng_seed: u64 = 12946977352813673410; +mod assets; +mod dungeon; - println!("Rng Seed: {}", rng_seed); +pub fn initialize_world(tx: Sender) -> anyhow::Result> { + let rng_seed: u64 = rand::random(); SeededRng::set_seed(rng_seed); - let dungeon = Dungeon::from_str(dungeon_str, &room_data_storage)?; - let mut server = Server::initialize_with_dungeon(network_tx, dungeon); - server.world.server = &mut server; - server.dungeon.server = &mut server; + let dungeon_layouts = &get_assets().dungeon_seeds; + let layout = dungeon_layouts.choose(&mut seeded_rng()).unwrap(); - let mut tick_interval = tokio::time::interval(Duration::from_millis(50)); - tokio::spawn(run_network_thread( - network_rx, - server.network_tx.clone(), - main_tx, - )); + let room_data_storage = &get_assets().room_data; + let door_type_blocks = &get_assets().door_data; - let dungeon = &server.dungeon; + let dungeon = Dungeon::from_string(layout, room_data_storage)?; + // if you do anything with entities or anything that has a pointer to world. + // once world moves out of this functions scope + // it will move in the stack causing those pointers to be invalid, + // this can be fixed by using Box if it is required + let mut world = World::new(tx, dungeon); - for room in &dungeon.rooms { - room.load_into_world(&mut server.world); + for room in world.extension.rooms.iter() { + room.borrow().load_into_world(&mut world.chunk_grid); } - for door in &dungeon.doors { - door.load_into_world(&mut server.world, &door_type_blocks); + for door in world.extension.doors.iter() { + door.borrow().load_into_world(&mut world.chunk_grid, door_type_blocks) } - { - let entrance = dungeon.entrance_room(); - - server.world.set_spawn_point( - entrance.get_world_block_pos(&BlockPos { - x: 15, - y: 72, - z: 18, - }) - .as_dvec3() - .add_x(0.5) - .add_z(0.5), - 180.0.rotate(entrance.rotation), - 0.0, - ); - - // test - pub struct MortImpl; + Ok(world) +} - impl EntityImpl for MortImpl { - fn tick(&mut self, _: &mut Entity, _: &mut PacketBuffer) { - // rotate - } - fn interact(&mut self, _: &mut Entity, player: &mut Player, action: &EntityInteractionType) { - if action == &EntityInteractionType::InteractAt { +pub fn spawn_mort(world: &mut World) { + let entrance = world.extension.entrance_room(); + let entrance = entrance.borrow(); + let mut position = entrance.get_world_block_position(ivec3(15, 69, 4)).as_dvec3(); + + position.x += 0.5; + position.z += 0.5; + + let yaw = 0.0.rotate(entrance.rotation); + + world.spawn_entity( + position, + yaw, + 0.0, + PlayerAppearance::new( + Default::default(), + "ewogICJ0aW1lc3RhbXAiIDogMTYxODc4MTA4Mzk0NywKICAicHJvZmlsZUlkIiA6ICJhNzdkNmQ2YmFjOWE0NzY3YTFhNzU1NjYxOTllYmY5MiIsCiAgInByb2ZpbGVOYW1lIiA6ICIwOEJFRDUiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOWI1Njg5NWI5NjU5ODk2YWQ2NDdmNTg1OTkyMzhhZjUzMmQ0NmRiOWMxYjAzODliOGJiZWI3MDk5OWRhYjMzZCIsCiAgICAgICJtZXRhZGF0YSIgOiB7CiAgICAgICAgIm1vZGVsIiA6ICJzbGltIgogICAgICB9CiAgICB9CiAgfQp9", + "aNIhT2Tj20v1lONBOK3fIwBqJwWnjErq20h663Gb+PVmR9Iweh1h2ZEJ2pwDDnM4Af1XFDA5hS1Z9yOc8EdVTKyyi1yj9EIvMwQz/Q4N2sBsjWGZtCe8/Zy+X82iv0APB4cumE2gkgDbPjxCFNbpVKmV3U1WzwY/GKOMHofhWS1ULedQ1TszuMmDuHPLEzWaXigZ+xt5zChXvE8QoLTfBvgb8wtqVpyxAKf/o8xQduKiNE7t+de1CwOhLqbVTGh7DU0vLC5stDuqN+nC9dS7c2CG0ori6gFoGMvP4oIss6zm1nb0laMrZidJTgmuXk2Pv4NGDBXdYcAzhfWcSWGsBVMWrJfccgFheG+YcGYaYj6V2nBp0YTqqhN4wDt3ltyTNEMOr/JKyBTLzq/F7IL6rrdyMw+MbAgCa1FhfXxtzdQE2KsL55pbr2DZ8J4DYf+/OC1pWCJ4vvA/A1qGHyi3Zwtj9lCl1Jq5Qm2P9BgWxpk0ikJefRPMg4qWOEcYnjqwXuEp+IgTJi1xr+j/+g28aS1TsF8ijaJjSbEN4urrf3RYL+PZBcggzX9VaPB0NPdioOXznIotY+S6ZW7FnSh6UnrGAKadQBVLey5zmVWMfXlBUq9JMh0csuNd4dDQCLNK8oGORhMgksOMHhVaBie4otUgJ7ThR/WPjOAKiG2TNU0=", + ), + InteractableNPC { + default_yaw: yaw, + default_pitch: 0.0, + interact_callback: |player| { + if let DungeonState::Started { .. } = player.world().state { return; } - player.open_ui(UI::MortReadyUpMenu); - } + player.open_container(OpenContainer::Menu(Box::new(MortMenu {}))) + }, } + ); +} - let id = server.world.spawn_entity( - entrance.get_world_block_pos(&BlockPos { x: 15, y: 69, z: 4 }) - .as_dvec3() - .add(DVec3::new(0.5, 0.0, 0.5)), - EntityMetadata::new(EntityVariant::Zombie { is_child: false, is_villager: false }), - MortImpl, - )?; - let (entity, _)= &mut server.world.entities.get_mut(&id).unwrap(); - entity.yaw = 0.0.rotate(entrance.rotation); - } - - // let zombie_spawn_pos = DVec3 { - // x: 25.0, - // y: 69.0, - // z: 25.0, - // }; - - // let zombie = Entity::create_at(EntityType::Zombie, zombie_spawn_pos, server.world.new_entity_id()); - // let path = Pathfinder::find_path(&zombie, &BlockPos { x: 10, y: 69, z: 10 }, &server.world)?; +#[tokio::main] +async fn main() -> anyhow::Result<()> { + // todo: either a config file with repo/path or command line args. + load_assets( + "assets", + "https://github.com/Big-Dungeons/ClearData/archive/refs/heads/main.zip", + ).await?; + // ^^^ for rooms/doors this is really pointless, because there is no reason to customize them, especially once finalised + // I can understand it for favicon tho - // server.world.entities.insert(zombie.entity_id, zombie); + let text = ChatComponent::new("RustClear").color(MCColors::Gold) + .append(ChatComponent::new(" version ").color(MCColors::Gray)) + .append(ChatComponent::new(env!("CARGO_PKG_VERSION")).color(MCColors::Green)); - let cata_line = ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("Dungeon: ") - .color(MCColors::Aqua) - .bold() - .build(), - ) - .append( - ChatComponentTextBuilder::new("Catacombs") - .color(MCColors::Gray) - .build(), - ) - .build(); + let status = Status::new(0, 1, text, get_assets().icon_data); + let (tx, mut rx) = start_network("127.0.0.1:4972", status); - server.world.player_info.set_line(0, cata_line); + let mut world = initialize_world(tx)?; + spawn_mort(&mut world); + let mut tick_interval = tokio::time::interval(Duration::from_millis(50)); loop { tick_interval.tick().await; // let start = std::time::Instant::now(); loop { - match main_rx.try_recv() { - Ok(message) => server.process_event(message).unwrap_or_else(|err| eprintln!("Error processing event: {err}")), + match rx.try_recv() { + Ok(message) => world.process_event(message), Err(TryRecvError::Empty) => break, Err(TryRecvError::Disconnected) => bail!("Network thread dropped its reciever."), } } - - server.dungeon.tick(); - server.world.tick()?; - - // for entity_id in server.world.entities.keys().cloned().collect::>() { - // if let Some(mut entity) = server.world.entities.remove(&entity_id) { - // entity.ticks_existed += 1; - // // this may at some point be abused to prevent getting an entities own self if it iterates over world entities so be careful if you change this - // let returned = entity.update(&mut server.world, &server.network_tx); - // server.world.entities.insert(entity_id, returned); - // } - // } - let mut i: usize = 0; - while i < server.tasks.len() { - if server.tasks[i].run_in == 0 { - let task = server.tasks.remove(i); - (task.callback)(&mut server); - // index isnt incremented since this entry was removed, shifting the next entry into its place. - } else { - server.tasks[i].run_in -= 1; - i += 1; - } - } - - let tab_list_packet = server.world.player_info.get_packet(); - - // this needs to be changed to work with loaded chunks, tracking last sent data per player (maybe), etc. - // also needs to actually be in a vanilla adjacent way. - for player in server.world.players.values_mut() { - player.ticks_existed += 1; - player.write_packet(&clientbound::ConfirmTransaction { - window_id: 0, - action_number: -1, - accepted: false, - }); - - let chunk_x = (player.position.x.floor() as i32) >> 4; - let chunk_z = (player.position.z.floor() as i32) >> 4; - let last_chunk_x = (player.last_position.x.floor() as i32) >> 4; - let last_chunk_z = (player.last_position.z.floor() as i32) >> 4; - - let delta = (chunk_x - last_chunk_x, chunk_z - last_chunk_z); - - if delta.0 != 0 || delta.1 != 0 { - server.world.chunk_grid.for_each_diff( - (chunk_x, chunk_z), - (last_chunk_x, last_chunk_z), - VIEW_DISTANCE as i32, - |x, z, diff| match diff { - ChunkDiff::New => { - if let Some(chunk) = player.world_mut().chunk_grid.get_chunk_mut(x, z) { - player.write_packet(&chunk.get_chunk_data(x, z, true)); - for entity_id in chunk.entities.iter_mut() { - let (entity, entity_impl) = - &mut server.world.entities.get_mut(&entity_id).unwrap(); - let buffer = &mut chunk.packet_buffer; - entity.write_spawn_packet(buffer); - entity_impl.spawn(entity, buffer); - } - } else { - let chunk_data = Chunk::new().get_chunk_data(x, z, true); - player.write_packet(&chunk_data) - }; - } - ChunkDiff::Old => { - let chunk_data = Chunk::new().get_chunk_data(x, z, true); - player.write_packet(&chunk_data) - } - }, - ); - } - - { - let view_distance = VIEW_DISTANCE as i32; - let min_x = chunk_x - view_distance; - let min_z = chunk_z - view_distance; - let max_x = chunk_x + view_distance; - let max_z = chunk_z + view_distance; - - for x in min_x..=max_x { - for z in min_z..=max_z { - if let Some(chunk) = player.world_mut().chunk_grid.get_chunk(x, z) { - player.packet_buffer.copy_from(&chunk.packet_buffer); - } - } - } - } - - let mut sidebar_lines = ScoreboardLines(Vec::new()); - - // maybe match time with hypixel, - let now = Local::now(); - let date = now.format("%m/%d/%y").to_string(); - let time = now.format("%-I:%M%P").to_string(); - - let current_skyblock_month = { - const SKYBLOCK_EPOCH_START_MILLIS: u64 = 1_559_829_300_000; - const SKYBLOCK_YEAR_MILLIS: u64 = 124 * 60 * 60 * 1000; - const SKYBLOCK_MONTH_MILLIS: u64 = SKYBLOCK_YEAR_MILLIS / 12; - const SKYBLOCK_DAY_MILLIS: u64 = SKYBLOCK_MONTH_MILLIS / 31; - - const SKYBLOCK_MONTHS: [&str; 12] = [ - "Early Spring", "Spring", "Late Spring", - "Early Summer", "Summer", "Late Summer", - "Early Autumn", "Autumn", "Late Autumn", - "Early Winter", "Winter", "Late Winter", - ]; - - let now = SystemTime::now().duration_since(UNIX_EPOCH)?.as_millis() as u64; - let elapsed = now.saturating_sub(SKYBLOCK_EPOCH_START_MILLIS); - let day = (elapsed % SKYBLOCK_YEAR_MILLIS) / SKYBLOCK_DAY_MILLIS; - let month = (day / 31) as usize; - let day_of_month = (day % 31) + 1; - - let suffix = match day_of_month % 100 { - 11..=13 => "th", - _ => match day_of_month % 10 { - 1 => "st", - 2 => "nd", - 3 => "rd", - _ => "th", - }, - }; - format!("{} {}{}", SKYBLOCK_MONTHS[month], day_of_month, suffix) - }; - - let room_id = if let Some((index, _)) = server.dungeon.get_player_room(player) { - &server.dungeon.rooms[index].room_data.id - } else { - "" - }; - - sidebar_lines.push(formatdoc! {r#" - §e§lSKYBLOCK - §7{date} §8local {room_id} - - {current_skyblock_month} - §7{time} - §7⏣ §cThe Catacombs §7(F7) - - "#}); - - match server.dungeon.state { - DungeonState::NotReady => { - for p in player.server_mut().world.players.values() { - sidebar_lines.push(format!("§c[M] §7{}", p.profile.username)) - } - sidebar_lines.new_line(); - } - DungeonState::Starting { tick_countdown } => { - for p in player.server_mut().world.players.values() { - sidebar_lines.push(format!("§a[M] §7{}", p.profile.username)) - } - sidebar_lines.new_line(); - sidebar_lines.push(format!("Starting in: §a0§a:0{}", (tick_countdown / 20) + 1)); - sidebar_lines.new_line(); - } - DungeonState::Started { current_ticks } => { - // this is scuffed but it works - let seconds = current_ticks / 20; - let time = if seconds >= 60 { - let minutes = seconds / 60; - let seconds = seconds % 60; - format!( - "{}{}m{}{}s", - if minutes < 10 { "0" } else { "" }, - minutes, - if seconds < 10 { "0" } else { "" }, - seconds - ) - } else { - let seconds = seconds % 60; - format!("{}{}s", if seconds < 10 { "0" } else { "" }, seconds) - }; - // TODO: display correct keys, and cleared percentage - // clear percentage is based on amount of tiles that are cleared. - sidebar_lines.push(formatdoc! {r#" - Keys: §c■ §c✖ §8§8■ §a0x - Time elapsed: §a§a{time} - Cleared: §c{clear_percent}% §8§8({score}) - - §3§lSolo - - "#, - clear_percent = "0", - score = "0", - }); - } - DungeonState::Finished => {} - } - - if let Some(tab_list) = &tab_list_packet { - player.write_packet(tab_list); - } - - sidebar_lines.push_str("§emc.hypixel.net"); - player.sidebar.write_update(sidebar_lines, &mut player.packet_buffer); - - if player.ticks_existed % 60 == 0 { - player.write_packet(&AddEffect { - entity_id: VarInt(player.entity_id), - effect_id: 3, - amplifier: 2, - duration: VarInt(200), - hide_particles: true, - }); - player.write_packet(&AddEffect { - entity_id: VarInt(player.entity_id), - effect_id: 16, - amplifier: 0, - duration: VarInt(400), - hide_particles: true, - }); - } - player.last_position = player.position; - player.flush_packets(); - } - for chunk in &mut server.world.chunk_grid.chunks { - chunk.packet_buffer = PacketBuffer::new(); - } - // println!("time elapsed {:?}", start.elapsed()); + world.tick(); + // println!("elapsed {:?}", start.elapsed()) } } diff --git a/src/net/client.rs b/src/net/client.rs deleted file mode 100644 index f6dbbe4..0000000 --- a/src/net/client.rs +++ /dev/null @@ -1,150 +0,0 @@ -use crate::net::connection_state::ConnectionState; -use crate::net::connection_state::ConnectionState::*; -use crate::net::internal_packets::{ClientHandlerMessage, MainThreadMessage, NetworkThreadMessage}; -use crate::net::packets::packet::{ProcessContext, ProcessPacket}; -use crate::net::packets::packet_deserialize::PacketDeserializable; -use crate::net::protocol::handshake::serverbound::HandshakePacket; -use crate::net::protocol::login::serverbound::Login; -use crate::net::protocol::play::serverbound::Play; -use crate::net::protocol::status::serverbound::Status; -use crate::net::var_int::peek_var_int; -use crate::server::player::player::ClientId; -use bytes::{Buf, BytesMut}; -use tokio::io::{AsyncReadExt, AsyncWriteExt}; -use tokio::net::TcpStream; -use tokio::sync::mpsc::{UnboundedReceiver, UnboundedSender}; - -#[derive(Debug, Clone)] -pub struct Client { - pub client_id: ClientId, - pub connection_state: ConnectionState, -} - -impl Client { - pub const fn new(client_id: ClientId) -> Self { - Self { - client_id, - connection_state: Handshaking, - } - } -} - -// main thread tx errors can be ignored since the network/client threads will close eachother properly regardless of client status, -// which will in turn close the client handlers. - -pub async fn handle_client( - client_id: ClientId, - mut socket: TcpStream, - mut rx: UnboundedReceiver, - main_tx: UnboundedSender, - network_tx: UnboundedSender, -) { - let mut client = Client::new(client_id); - let mut bytes = BytesMut::new(); - - loop { - tokio::select! { - result = socket.read_buf(&mut bytes) => { - match result { - Ok(0) => { - // Channel closed normally - break - }, - - Ok(_) => { - read_packets(&mut bytes, &mut client, &network_tx, &main_tx).await - } - Err(e) => { - eprintln!("Client {client_id} read error: {e}"); - break; - } - } - } - - Some(message) = rx.recv() => { - match message { - ClientHandlerMessage::Send(data) => { - if let Err(e) = socket.write_all(&data).await { - eprintln!("write error: {e}"); - break - } - } - - ClientHandlerMessage::CloseHandler => { - break - } - } - } - } - } - - let _ = network_tx.send(NetworkThreadMessage::ConnectionClosed { client_id }); - println!("handle client for {client_id} closed."); -} - -async fn read_packets( - buffer: &mut BytesMut, - client: &mut Client, - network_thread_tx: &UnboundedSender, - main_thread_tx: &UnboundedSender -) { - while let Some(mut buffer) = read_whole_packet(buffer).await { - let context = ProcessContext { network_thread_tx, main_thread_tx, }; - match client.connection_state { - Handshaking => parse_from_packets::(&mut buffer, client, context).await, - Status => parse_from_packets::(&mut buffer, client, context).await, - Login => parse_from_packets::(&mut buffer, client, context).await, - Play => { - match Play::read(&mut buffer) { - Ok(packet) => { - if let Err(err) = packet.process(client, context).await { - eprintln!("error processing {err}"); - continue - } - let _ = main_thread_tx.send( - MainThreadMessage::PacketReceived { - client_id: client.client_id, - packet - } - ); - } - Err(err) => { - eprintln!("Failed to parse packet from {err}") - } - } - } - } - } -} - -async fn read_whole_packet(buf: &mut BytesMut) -> Option { - if buf.is_empty() { - return None; - } - let (packet_len, varint_len) = peek_var_int(buf)?; - - let packet_len = packet_len as usize; - if buf.len() < packet_len + varint_len { - return None; - } - - buf.advance(varint_len); - Some(buf.split_to(packet_len)) -} - -async fn parse_from_packets<'a, P: PacketDeserializable + ProcessPacket>( - buffer: &mut BytesMut, - client: &mut Client, - process_context: ProcessContext<'a> -) { - match P::read(buffer) { - Ok(packet) => { - if let Err(e) = packet.process(client, process_context).await { - eprintln!("error processing {e}"); - } - } - Err(e) => { - eprintln!("Failed to parse packet from {e}") - } - } -} \ No newline at end of file diff --git a/src/net/packets/packet.rs b/src/net/packets/packet.rs deleted file mode 100644 index e5ae3d3..0000000 --- a/src/net/packets/packet.rs +++ /dev/null @@ -1,94 +0,0 @@ -use crate::net::client::Client; -use crate::net::internal_packets::{MainThreadMessage, NetworkThreadMessage}; -use crate::server::player::player::Player; -use tokio::sync::mpsc::UnboundedSender; - -/// used for client bound packets, to identify them -pub trait IdentifiedPacket { - const PACKET_ID: i32; -} - -/// Implements IdentifiedPacket for all entries with the corresponding packet id. -#[macro_export] -macro_rules! register_packets { - ($($packet:ty = $id:expr);* $(;)?) => { - $( - impl IdentifiedPacket for $packet { - const PACKET_ID: i32 = $id; - } - )* - }; -} - -pub struct ProcessContext<'a> { - pub network_thread_tx: &'a UnboundedSender, - pub main_thread_tx: &'a UnboundedSender, -} - -pub trait ProcessPacket { - async fn process<'a>(&self, _: &mut Client, _: ProcessContext<'a>) -> anyhow::Result<()> { - Ok(()) - } - - /// processes (play) packet sent by the player. - /// - /// this must be run on the main thread. - fn process_with_player(&self, player: &mut Player) { - } -} - -// since this doesn't need to be imported often (unlike client bound packets) -// it can use an enum just fine, (no annoying importing) -#[macro_export] -macro_rules! register_serverbound_packets { - ( - $enum_name:ident; - $( $packet_type:ident = $id:literal );* $(;)? - ) => { - pub enum $enum_name { - $( $packet_type($packet_type), )* - } - - impl crate::net::packets::packet_deserialize::PacketDeserializable for $enum_name { - fn read(buffer: &mut bytes::BytesMut) -> anyhow::Result { - if let Some(packet_id) = crate::net::var_int::read_var_int(buffer) { - // println!("packet id {}", packet_id); - match packet_id { - $( - $id => Ok($enum_name::$packet_type( - <$packet_type as crate::net::packets::packet_deserialize::PacketDeserializable>::read(buffer)? - )), - )* - _ => anyhow::bail!(": invalid packet 0x{:02x}", packet_id), - } - } else { - anyhow::bail!("failed to read var_int") - } - } - } - - impl crate::net::packets::packet::ProcessPacket for $enum_name { - async fn process<'a>(&self, client: &mut Client, ctx: crate::net::packets::packet::ProcessContext<'a>) -> anyhow::Result<()> { - use crate::net::packets::packet::ProcessPacket; - match self { - $( - $enum_name::$packet_type(inner) => { - <_ as ProcessPacket>::process(inner, client, ctx).await - } - )* - } - } - - fn process_with_player(&self, player: &mut crate::server::player::player::Player) { - match self { - $( - $enum_name::$packet_type(inner) => { - <_ as ProcessPacket>::process_with_player(inner, player) - } - )* - } - } - } - }; -} - diff --git a/src/net/packets/packet_buffer.rs b/src/net/packets/packet_buffer.rs deleted file mode 100644 index 2b31834..0000000 --- a/src/net/packets/packet_buffer.rs +++ /dev/null @@ -1,42 +0,0 @@ -use crate::net::internal_packets::NetworkThreadMessage; -use crate::net::packets::packet::IdentifiedPacket; -use crate::net::packets::packet_serialize::PacketSerializable; -use crate::net::var_int::{write_var_int, VarInt}; -use crate::server::player::player::ClientId; -use bytes::BytesMut; - -#[derive(Debug)] -pub struct PacketBuffer { - pub buffer: BytesMut, -} - -impl PacketBuffer { - - pub fn new() -> Self { - Self { - buffer: BytesMut::new() - } - } - - pub fn write_packet

(&mut self, packet: &P) { - let id = VarInt(P::PACKET_ID); - write_var_int(&mut self.buffer, (id.write_size() + packet.write_size()) as i32); - id.write(&mut self.buffer); - packet.write(&mut self.buffer); - - } - - pub fn copy_from(&mut self, buf: &PacketBuffer) { - self.buffer.extend_from_slice(&buf.buffer) - } - - /// gets a message for network thread to send the packets inside the buffer to the client. - pub fn get_packet_message(&mut self, client_id: &ClientId) -> NetworkThreadMessage { - let msg = NetworkThreadMessage::SendPackets { - client_id: *client_id, - buffer: self.buffer.clone().freeze(), - }; - self.buffer.clear(); - msg - } -} \ No newline at end of file diff --git a/src/net/packets/packet_deserialize.rs b/src/net/packets/packet_deserialize.rs deleted file mode 100644 index db6862a..0000000 --- a/src/net/packets/packet_deserialize.rs +++ /dev/null @@ -1,97 +0,0 @@ -use crate::net::var_int::{read_var_int, VarInt}; -use crate::server::utils::sized_string::SizedString; -use anyhow::{bail, Context}; -use bytes::{Buf, BytesMut}; - -pub trait PacketDeserializable : Sized { - fn read(buffer: &mut BytesMut) -> anyhow::Result; -} - -impl PacketDeserializable for VarInt { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - match read_var_int(buffer) { - Some(int) => Ok(VarInt(int)), - None => bail!("Failed to read VarInt"), - } - } -} - -impl PacketDeserializable for bool { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - Ok(buffer.get_u8() != 0) - } -} - -impl PacketDeserializable for u8 { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - Ok(buffer.get_u8()) - } -} - -impl PacketDeserializable for i8 { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - Ok(buffer.get_i8()) - } -} - -impl PacketDeserializable for u16 { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - Ok(buffer.get_u16()) - } -} - -impl PacketDeserializable for i16 { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - Ok(buffer.get_i16()) - } -} - -impl PacketDeserializable for u32 { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - Ok(buffer.get_u32()) - } -} - -impl PacketDeserializable for i32 { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - Ok(buffer.get_i32()) - } -} - -impl PacketDeserializable for u64 { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - Ok(buffer.get_u64()) - } -} - -impl PacketDeserializable for i64 { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - Ok(buffer.get_i64()) - } -} - -impl PacketDeserializable for f32 { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - Ok(buffer.get_f32()) - } -} - -impl PacketDeserializable for f64 { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - Ok(buffer.get_f64()) - } -} - -impl PacketDeserializable for SizedString { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - let len = read_var_int(buffer).context("Failed to read string length")? as usize; - if len > S * 4 { - bail!("String too long. {:?} / {}", len, S * 4); - } - let string = String::from_utf8(buffer.split_to(len).to_vec())?; - if string.len() > S { - bail!("String too long. {:?} > {}", len, S); - } - Ok(string.into()) - } -} \ No newline at end of file diff --git a/src/net/protocol/handshake/serverbound.rs b/src/net/protocol/handshake/serverbound.rs deleted file mode 100644 index 65a0b67..0000000 --- a/src/net/protocol/handshake/serverbound.rs +++ /dev/null @@ -1,28 +0,0 @@ -use crate::net::client::Client; -use crate::net::connection_state::ConnectionState; -use crate::net::packets::packet::{ProcessContext, ProcessPacket}; -use crate::net::var_int::VarInt; -use crate::register_serverbound_packets; -use crate::server::utils::sized_string::SizedString; -use blocks::packet_deserializable; - -register_serverbound_packets! { - HandshakePacket; - Handshake = 0x00; -} - -packet_deserializable! { - pub struct Handshake { - pub protocol_version: VarInt, - pub server_address: SizedString<255>, - pub server_port: u16, - pub next_state: VarInt, - } -} - -impl ProcessPacket for Handshake { - async fn process<'a>(&self, client: &mut Client, context: ProcessContext<'a>) -> anyhow::Result<()> { - client.connection_state = ConnectionState::from_id(self.next_state.0)?; - Ok(()) - } -} \ No newline at end of file diff --git a/src/net/protocol/login/serverbound.rs b/src/net/protocol/login/serverbound.rs deleted file mode 100644 index dd7a800..0000000 --- a/src/net/protocol/login/serverbound.rs +++ /dev/null @@ -1,49 +0,0 @@ -use crate::net::client::Client; -use crate::net::connection_state::ConnectionState; -use crate::net::internal_packets::MainThreadMessage; -use crate::net::packets::packet::{ProcessContext, ProcessPacket}; -use crate::net::packets::packet_buffer::PacketBuffer; -use crate::net::protocol::login::clientbound::LoginSuccess; -use crate::register_serverbound_packets; -use crate::server::player::player::GameProfile; -use crate::server::utils::sized_string::SizedString; -use blocks::packet_deserializable; -use std::collections::HashMap; -use uuid::Uuid; - -register_serverbound_packets! { - Login; - LoginStart = 0x00; - // EncryptionResponse = 0x01, -} - -packet_deserializable! { - pub struct LoginStart { - pub username: SizedString<16> - } -} - -impl ProcessPacket for LoginStart { - async fn process<'a>(&self, client: &mut Client, context: ProcessContext<'a>) -> anyhow::Result<()> { - println!("player {} attempted to join", self.username.as_str()); - let mut packet_buffer = PacketBuffer::new(); - - let game_profile = GameProfile { - uuid: Uuid::parse_str("d74cb748-b23b-4a99-b41e-b85f73d41999")?, - username: self.username.to_string(), - properties: HashMap::new(), - }; - - packet_buffer.write_packet(&LoginSuccess { - uuid: game_profile.uuid.to_string(), - name: game_profile.username.to_string(), - }); - context.network_thread_tx.send(packet_buffer.get_packet_message(&client.client_id))?; - context.main_thread_tx.send(MainThreadMessage::NewPlayer { - client_id: client.client_id, - profile: game_profile - })?; - client.connection_state = ConnectionState::Play; - Ok(()) - } -} \ No newline at end of file diff --git a/src/net/protocol/status/clientbound.rs b/src/net/protocol/status/clientbound.rs deleted file mode 100644 index 239b7d4..0000000 --- a/src/net/protocol/status/clientbound.rs +++ /dev/null @@ -1,49 +0,0 @@ -use std::sync::LazyLock; - -use crate::net::packets::packet::IdentifiedPacket; -use crate::net::packets::packet_serialize::PacketSerializable; -use crate::register_packets; -use base64::engine::general_purpose; -use base64::Engine; -use blocks::packet_serializable; -use bytes::BytesMut; - -register_packets! { - StatusResponse<'_> = 0x00; - StatusPong = 0x01; -} - -packet_serializable! { - pub struct StatusResponse<'a> { - pub status: &'a str, - } -} - -impl Default for StatusResponse<'_> { - fn default() -> Self { - Self { - status: &STATUS_RESPONSE_JSON - } - } -} - -packet_serializable! { - pub struct StatusPong { - pub client_time: i64, - } -} - -// not real sure where to put this, but here should be fine for now. -const FAVICON_BYTES: &[u8] = include_bytes!("../../../assets/favicon.png"); - -pub static STATUS_RESPONSE_JSON: LazyLock = LazyLock::new(|| { - let encoded_image = general_purpose::STANDARD.encode(FAVICON_BYTES); - let version = env!("CARGO_PKG_VERSION"); - - format!(r#"{{ - "version": {{ "name": "1.8.9", "protocol": 47 }}, - "players": {{ "max": 1, "online": 0 }}, - "description": {{ "text": "RustClear", "color": "gold", "extra": [{{ "text": " version ", "color": "gray" }}, {{ "text": "{version}", "color": "green" }}] }}, - "favicon": "data:image/png;base64,{encoded_image}" - }}"#) -}); \ No newline at end of file diff --git a/src/net/protocol/status/serverbound.rs b/src/net/protocol/status/serverbound.rs deleted file mode 100644 index 8ae3332..0000000 --- a/src/net/protocol/status/serverbound.rs +++ /dev/null @@ -1,43 +0,0 @@ -use crate::net::client::Client; -use crate::net::packets::packet::{ProcessContext, ProcessPacket}; -use crate::net::packets::packet_buffer::PacketBuffer; -use crate::net::protocol::status::clientbound::{StatusPong, StatusResponse}; -use crate::register_serverbound_packets; -use blocks::packet_deserializable; - -register_serverbound_packets! { - Status; - StatusRequest = 0x00; - StatusPing = 0x01; -} - -packet_deserializable! { - pub struct StatusRequest; -} - -impl ProcessPacket for StatusRequest { - async fn process<'a>(&self, client: &mut Client, context: ProcessContext<'a>) -> anyhow::Result<()> { - let mut packet_buffer = PacketBuffer::new(); - packet_buffer.write_packet(&StatusResponse::default()); - context.network_thread_tx.send(packet_buffer.get_packet_message(&client.client_id))?; - Ok(()) - } -} - -packet_deserializable! { - pub struct StatusPing { - pub client_time: i64, - } -} - -impl ProcessPacket for StatusPing { - async fn process<'a>(&self, client: &mut Client, context: ProcessContext<'a>) -> anyhow::Result<()> { - let mut packet_buffer = PacketBuffer::new(); - packet_buffer.write_packet(&StatusPong { - client_time: self.client_time, - }); - context.network_thread_tx.send(packet_buffer.get_packet_message(&client.client_id))?; - Ok(()) - } -} - diff --git a/src/net/run_network.rs b/src/net/run_network.rs deleted file mode 100644 index 63cc098..0000000 --- a/src/net/run_network.rs +++ /dev/null @@ -1,71 +0,0 @@ -use crate::net::client::handle_client; -use core::panic; -use std::collections::HashMap; -use tokio::net::TcpListener; -use tokio::sync::mpsc::{self, UnboundedReceiver, UnboundedSender}; - -use crate::net::internal_packets::{ClientHandlerMessage, MainThreadMessage, NetworkThreadMessage}; -use crate::server::player::player::ClientId; - -type ClientMap = HashMap>; - -pub async fn run_network_thread( - mut network_rx: UnboundedReceiver, - network_tx: UnboundedSender, - main_tx: UnboundedSender, -) { - let listener = TcpListener::bind("127.0.0.1:4972").await.unwrap(); - println!("Network thread listening on 127.0.0.1:4972"); - - let mut clients: ClientMap = HashMap::new(); - let mut client_id_counter: ClientId = 1; - - loop { - tokio::select! { - // a client failing to connect here is recoverable and doesnt really do anything, so we can just ignore it. - Ok((socket, _)) = listener.accept() => { - let client_id: ClientId = client_id_counter; - client_id_counter += 1; - - let (client_tx, client_rx) = mpsc::unbounded_channel::(); - - clients.insert(client_id, client_tx); - tokio::spawn(handle_client(client_id, socket, client_rx, main_tx.clone(), network_tx.clone())); - } - - // this can never be none since this function owns a network_tx. - Some(msg) = network_rx.recv() => { - // we can just discard main thread -> network thread messages with a disconnected client_id - // as the main thread either already has or will be be informed shortly of this issue - match msg { - NetworkThreadMessage::SendPackets { client_id, buffer } => { - if let Some(client_tx) = clients.get(&client_id) { - if let Err(e) = client_tx.send(ClientHandlerMessage::Send(buffer)) { - eprintln!("Client {} handler dropped its reciever: {}", client_id, e); - disconnect_client(client_id, &main_tx, &mut clients); - } - } - } - - NetworkThreadMessage::DisconnectClient { client_id } => { - if let Some(client_tx) = clients.get(&client_id) { - if let Err(e) = client_tx.send(ClientHandlerMessage::CloseHandler) { - eprintln!("Client {} handler dropped its reciever: {}", client_id, e); - disconnect_client(client_id, &main_tx, &mut clients); - } - } - } - - NetworkThreadMessage::ConnectionClosed { client_id } => { - disconnect_client(client_id, &main_tx, &mut clients); - } - } - } - } - } -} - -fn disconnect_client(client_id: ClientId, main_tx: &UnboundedSender, clients: &mut ClientMap) { - main_tx.send(MainThreadMessage::ClientDisconnected { client_id }).expect("Main thread should never drop its network reciever."); - clients.remove(&client_id); -} \ No newline at end of file diff --git a/src/server/block/block_interact_action.rs b/src/server/block/block_interact_action.rs deleted file mode 100644 index e8884ff..0000000 --- a/src/server/block/block_interact_action.rs +++ /dev/null @@ -1,108 +0,0 @@ -use crate::dungeon::dungeon_state::DungeonState; -use crate::dungeon::room::secrets::DungeonSecret; -use crate::net::protocol::play::clientbound::{BlockAction, SoundEffect}; -use crate::server::block::block_position::BlockPos; -use crate::server::block::blocks::Blocks; -use crate::server::entity::entity::NoEntityImpl; -use crate::server::entity::entity_metadata::{EntityMetadata, EntityVariant}; -use crate::server::player::player::Player; -use crate::server::utils::dvec3::DVec3; -use std::cell::RefCell; -use std::rc::Rc; - -pub enum BlockInteractAction { - WitherDoor { - door_index: usize - }, - BloodDoor { - door_index: usize - }, - Chest { - secret: Rc>, - }, - WitherEssence { - secret: Rc> - }, - // mainly for quick debug, - Callback(fn(&Player, &BlockPos)), -} - - -impl BlockInteractAction { - pub fn interact(&self, player: &mut Player, block_pos: &BlockPos) { - match self { - Self::WitherDoor { door_index: id } | - Self::BloodDoor { door_index: id } => { - - let world = &mut player.server_mut().world; - let dungeon = &mut player.server_mut().dungeon; - - if let DungeonState::Started { .. } = dungeon.state { - // todo check if player has a key - let door = &dungeon.doors[*id]; - door.open_door(world); - } - } - - Self::Chest { secret } => { - let mut secret = secret.borrow_mut(); - if !secret.obtained { - // maybe make this a packet where it is sent to all players - player.write_packet(&BlockAction { - block_pos: block_pos.clone(), - event_id: 1, - event_data: 1, - block_id: 54, - }); - player.write_packet(&SoundEffect { - sound: "random.chestopen", - pos_x: block_pos.x as f64, - pos_y: block_pos.y as f64, - pos_z: block_pos.z as f64, - volume: 1.0, - pitch: 0.975, - }); - secret.obtained = true; - } - /* -[19:37:29] sound random.chestopen, 0.5 0.9206349 -94.0 82.0 -51.0 -[19:37:29] sound random.chestopen, 0.5 0.984127 -93.5 82.5 -50.5 - -// if its a blessing, can likely re-use wither essence as these values appear to be the same - -[19:37:29] sound note.harp, 1.0 0.7936508 -94.0 82.0 -51.0 -[19:37:29] sound note.harp, 1.0 0.8888889 -94.0 82.0 -51.0 -[19:37:30] sound note.harp, 1.0 1.0 -94.0 82.0 -51.0 -[19:37:30] sound note.harp, 1.0 1.0952381 -94.0 82.0 -51.0 -[19:37:30] sound note.harp, 1.0 1.1904762 -94.0 82.0 -51.0 - */ - // player.send_msg("hi").unwrap(); - } - - Self::WitherEssence { secret } => { - let mut secret = secret.borrow_mut(); - debug_assert!(!secret.obtained); - - let world = player.world_mut(); - - world.set_block_at(Blocks::Air, block_pos.x, block_pos.y, block_pos.z); - world.interactable_blocks.remove(block_pos); - - world.spawn_entity( - DVec3::from(block_pos).add_x(0.5).add_y(-1.4).add_z(0.5), - EntityMetadata { - variant: EntityVariant::ArmorStand, - is_invisible: true, - }, - NoEntityImpl, - ).unwrap(); - - secret.obtained = true; - } - - Self::Callback(func) => { - func(player, block_pos); - } - } - } -} \ No newline at end of file diff --git a/src/server/block/block_position.rs b/src/server/block/block_position.rs deleted file mode 100644 index 3cf5f41..0000000 --- a/src/server/block/block_position.rs +++ /dev/null @@ -1,141 +0,0 @@ -use crate::net::packets::packet_deserialize::PacketDeserializable; -use crate::net::packets::packet_serialize::PacketSerializable; -use crate::server::utils::direction::Direction; -use crate::server::utils::dvec3::DVec3; -use bytes::{Buf, BytesMut}; - -#[derive(Debug, Clone, PartialEq, Eq, Hash, Copy)] -pub struct BlockPos { - pub x: i32, - pub y: i32, - pub z: i32, -} - -impl From for BlockPos { - fn from(vec: DVec3) -> Self { - Self { - x: vec.x as i32, - y: vec.y as i32, - z: vec.z as i32, - } - } -} - -impl BlockPos { - - pub fn new(x: i32, y: i32, z: i32) -> Self { - Self { x, y, z } - } - - pub const fn is_invalid(&self) -> bool { - self.y.is_negative() - } - - pub const fn distance_squared(&self, other: &BlockPos) -> i32 { - let x = self.x - other.x; - let y = self.y - other.y; - let z = self.z - other.z; - x * x + y * y + z * z - } - - pub fn distance_to(&self, other: &BlockPos) -> f32 { - (self.distance_squared(other) as f32).sqrt() - } - - pub fn replace_y(&self, y: i32) -> Self { - Self { - x: self.x, - y, - z: self.z, - } - } - - pub fn add_x(&self, x: i32) -> Self { - Self { - x: self.x + x, - y: self.y, - z: self.z, - } - } - - pub fn add_y(&self, y: i32) -> Self { - Self { - x: self.x, - y: self.y + y, - z: self.z, - } - } - - pub fn add_z(&self, z: i32) -> Self { - Self { - x: self.x, - y: self.y, - z: self.z + z, - } - } - - pub fn rotate(&self, rotation: Direction) -> Self { - match rotation { - Direction::North => Self { x: self.x, y: self.y, z: self.z }, - Direction::East => Self { x: -self.z, y: self.y, z: self.x }, - Direction::South => Self { x: -self.x, y: self.y, z: -self.z }, - Direction::West => Self { x: self.z, y: self.y, z: -self.x }, - _ => Self { x: self.x, y: self.y, z: self.z }, - } - } - - pub fn add(&self, other: BlockPos) -> Self { - Self { - x: self.x + other.x, - y: self.y + other.y, - z: self.z + other.z - } - } - - pub fn subtract(&self, other: &BlockPos) -> Self { - Self { - x: self.x - other.x, - y: self.y - other.y, - z: self.z - other.z - } - } - - pub fn as_dvec3(&self) -> DVec3 { - DVec3 { - x: self.x as f64, - y: self.y as f64, - z: self.z as f64 - } - } -} - -const XZ_BITS: i32 = 26; -const Y_BITS: i32 = 12; - -const X_SHIFT: i32 = 38; -const Y_SHIFT: i32 = 26; - -const XZ_MASK: i64 = 0x3FFFFFF; -const Y_MASK: i64 = 0xFFF; - - -impl PacketSerializable for BlockPos { - fn write_size(&self) -> usize { - const { size_of::() } - } - fn write(&self, buf: &mut BytesMut) { - let long: i64 = (self.x as i64 & XZ_MASK) << X_SHIFT | (self.y as i64 & Y_MASK) << Y_SHIFT | (self.z as i64 & XZ_MASK); - long.write(buf); - } -} - -impl PacketDeserializable for BlockPos { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - let long = buffer.get_i64(); - Ok(BlockPos { - x: (long << (64 - X_SHIFT - XZ_BITS) >> (64 - XZ_BITS)) as i32, - y: (long << (64 - Y_SHIFT - Y_BITS) >> (64 - Y_BITS)) as i32, - z: (long << (64 - XZ_BITS) >> (64 - XZ_BITS)) as i32, - }) - } -} diff --git a/src/server/block/mod.rs b/src/server/block/mod.rs deleted file mode 100644 index 9581aa7..0000000 --- a/src/server/block/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod block_parameter; -pub mod block_position; -pub mod blocks; -pub mod metadata; -pub mod rotatable; -pub mod block_interact_action; \ No newline at end of file diff --git a/src/server/block/rotatable.rs b/src/server/block/rotatable.rs deleted file mode 100644 index 69a1440..0000000 --- a/src/server/block/rotatable.rs +++ /dev/null @@ -1,31 +0,0 @@ -use crate::server::utils::direction::Direction; - -pub trait Rotatable { - fn rotate(&self, direction: Direction) -> Self; -} - -impl Rotatable for f32 { - fn rotate(&self, dir: Direction) -> f32 { - let offset = match dir { - Direction::North => 0.0, - Direction::East => 90.0, - Direction::South => 180.0, - Direction::West => 270.0, - Direction::Up | Direction::Down => 0.0, - }; - // println!("yaw {self} offset {offset} result {}", (self + offset) % 360.0); - (self + offset) % 360.0 - - // let offset = match dir { - // Direction::North => 0.0, - // Direction::East => 90.0, - // Direction::South => 180.0, - // Direction::West => -90.0, - // Direction::Up | Direction::Down => 0.0, - // }; - // let mut result = self + offset; - // result = ((result + 180.0) % 360.0) - 180.0; - // // println!("yaw {self} offset {offset} result {result}"); - // result - } -} \ No newline at end of file diff --git a/src/server/chunk/chunk.rs b/src/server/chunk/chunk.rs deleted file mode 100644 index 012f023..0000000 --- a/src/server/chunk/chunk.rs +++ /dev/null @@ -1,113 +0,0 @@ -use crate::net::packets::packet_buffer::PacketBuffer; -use crate::net::protocol::play::clientbound::ChunkData; -use crate::server::chunk::chunk_section::ChunkSection; -use crate::server::entity::entity::EntityId; - -/// Represents a minecraft chunk. -/// -/// A chunk is composed of 16 [chunk sections][ChunkSection]. -pub struct Chunk { - pub chunk_sections: [Option; 16], - pub packet_buffer: PacketBuffer, - pub entities: Vec -} - -impl Chunk { - - /// Creates an empty chunk at the X and Z coordinates provided. - /// - /// The chunk is entirely empty, and block data must be added with chunk sections. - pub fn new() -> Chunk { - Self { - chunk_sections: [ - None, None, None, None, None, None, None, None, - None, None, None, None, None, None, None, None, - ], - packet_buffer: PacketBuffer::new(), - entities: Vec::new(), - } - } - - /// Adds a [chunk section][Chunk Section] to the provided index in the chunk. - /// - /// The y position of the chunk is based on the provided index, - /// where index represents chunk sections bottom to top. - pub fn add_section(&mut self, chunk_section: ChunkSection, index: usize) { - self.chunk_sections[index] = Some(chunk_section); - } - - pub fn get_section(&self, index: usize) -> &Option { - self.chunk_sections.get(index).unwrap() - } - - pub fn get_or_put_section(&mut self, index: usize) -> &mut Option { - if self.chunk_sections[index].is_none() { - self.chunk_sections[index] = Some(ChunkSection::new()); - } - &mut self.chunk_sections[index] - } - - pub fn insert_entity(&mut self, entity_id: EntityId) { - self.entities.push(entity_id); - } - - pub fn remove_entity(&mut self, entity_id: &EntityId) { - if let Some(index) = self.entities.iter().position(|id| *id == *entity_id) { - self.entities.remove(index); - } - } - - - pub fn get_chunk_data(&self, x: i32, z: i32, new: bool) -> ChunkData { - let mut bitmask = 0u16; - - for section_index in 0..16 { - if let Some(section) = &self.chunk_sections[section_index] { - if !section.is_empty() { - bitmask |= 1 << section_index; - } - } - } - - let section_count = bitmask.count_ones() as usize; - let data_size: usize = section_count * 12288 + if new { 256 } else { 0 }; - - let mut data = vec![0u8; data_size]; - let mut offset = 0; - - for section in self.chunk_sections.iter().flatten() { - if section.is_empty() { - continue - } - for block in section.data { - data[offset] = (block & 0xFF) as u8; - data[offset + 1] = ((block >> 8) & 0xFF) as u8; - offset += 2; - } - }; - - // currently all blocks have max skylight and regular light, - // however ive come across issues, - // where it seems clients recalculate light (due to it being invalid?) causing massive fps drops - - if section_count != 0 { - for _ in 0..4096 { - data[offset] = 255; - offset += 1; - } - } - if new { - for _ in 0..256 { - data[offset] = 1; - offset += 1; - } - } - ChunkData { - chunk_x: x, - chunk_z: z, - is_new_chunk: new, - bitmask, - data, - } - } -} \ No newline at end of file diff --git a/src/server/chunk/chunk_section.rs b/src/server/chunk/chunk_section.rs deleted file mode 100644 index fd87119..0000000 --- a/src/server/chunk/chunk_section.rs +++ /dev/null @@ -1,51 +0,0 @@ -use crate::server::block::blocks::Blocks; - -/// ChunkSection represents a 16x16x16 cube of blocks. -/// -/// (This is based on ExtendedBlockStorage in 1.8.9, only difference being there is no lighting). -pub struct ChunkSection { - pub data: [u16; 4096], - pub solid_block_amount: u16, -} - -impl ChunkSection { - - /// Creates a new empty ChunkSection. - /// Blocks must be added later. - pub fn new() -> ChunkSection { - Self { - data: [0; 4096], - solid_block_amount: 0, - } - } - - pub fn get_block(&self, index: usize) -> Blocks { - Blocks::from(self.data[index]) - } - - pub fn get_block_at(&self, x: i32, y: i32, z: i32) -> Blocks { - let index = (y << 8) | (z << 4) | x; - Blocks::from(self.data[index as usize]) - } - - - pub fn set_block(&mut self, block: Blocks, index: usize) { - if self.data[index] != 0 { - self.solid_block_amount -= 1; - } - if block != Blocks::Air { - self.solid_block_amount += 1; - } - let block_state_id = block.get_block_state_id(); - self.data[index] = block_state_id; - } - - pub fn set_block_at(&mut self, block: Blocks, x: i32, y: i32, z: i32) { - let index = (y << 8) | (z << 4) | x; - self.set_block(block, index as usize) - } - - pub fn is_empty(&self) -> bool { - self.solid_block_amount == 0 - } -} \ No newline at end of file diff --git a/src/server/chunk/mod.rs b/src/server/chunk/mod.rs deleted file mode 100644 index 2b9fdf7..0000000 --- a/src/server/chunk/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod chunk_section; -pub mod chunk_grid; -pub mod chunk; \ No newline at end of file diff --git a/src/server/commands/argument.rs b/src/server/commands/argument.rs deleted file mode 100644 index 78f81bb..0000000 --- a/src/server/commands/argument.rs +++ /dev/null @@ -1,5 +0,0 @@ -#[derive(Debug)] -pub struct Argument { - pub name: &'static str, - pub completions: Vec, -} \ No newline at end of file diff --git a/src/server/commands/command.rs b/src/server/commands/command.rs deleted file mode 100644 index 8856b70..0000000 --- a/src/server/commands/command.rs +++ /dev/null @@ -1,11 +0,0 @@ -use crate::server::commands::argument::Argument; -use crate::server::commands::outcome::Outcome; -use crate::server::player::player::Player; -use crate::server::world::World; - -pub trait CommandMetadata { - const NAME: &'static str; - - fn run(world: &mut World, player: &mut Player, args: &[&str]) -> anyhow::Result; - fn arguments(world: &mut World, player: &mut Player) -> Vec; -} \ No newline at end of file diff --git a/src/server/commands/impl/locraw.rs b/src/server/commands/impl/locraw.rs deleted file mode 100644 index 40753d8..0000000 --- a/src/server/commands/impl/locraw.rs +++ /dev/null @@ -1,25 +0,0 @@ -use crate::server::commands::argument::Argument; -use crate::server::commands::command::CommandMetadata; -use crate::server::commands::outcome::Outcome; -// use crate::net::packets::client_bound::chat::{Chat, CHAT}; -use crate::server::player::player::Player; -use crate::server::world::World; - -pub struct Locraw; - -impl CommandMetadata for Locraw { - const NAME: &'static str = "locraw"; - - fn run(world: &mut World, player: &mut Player, args: &[&str]) -> anyhow::Result { - // player.send_packet(Chat { - // typ: CHAT, - // component: ChatComponentTextBuilder::new(r#"{"server":"mini237V","gametype":"SKYBLOCK","mode":"dungeon","map":"Dungeon"}"#).build(), - // })?; - - Ok(Outcome::Success) - } - - fn arguments(world: &mut World, player: &mut Player) -> Vec { - Vec::new() - } -} \ No newline at end of file diff --git a/src/server/commands/impl/mod.rs b/src/server/commands/impl/mod.rs deleted file mode 100644 index 21bae8a..0000000 --- a/src/server/commands/impl/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod locraw; -pub mod mort; diff --git a/src/server/commands/impl/mort.rs b/src/server/commands/impl/mort.rs deleted file mode 100644 index b72ea6b..0000000 --- a/src/server/commands/impl/mort.rs +++ /dev/null @@ -1,21 +0,0 @@ -use crate::server::commands::argument::Argument; -use crate::server::commands::command::CommandMetadata; -use crate::server::commands::outcome::Outcome; -use crate::server::player::container_ui::UI; -use crate::server::player::player::Player; -use crate::server::world::World; - -pub struct Mort; - -impl CommandMetadata for Mort { - const NAME: &'static str = "mort"; - - fn run(_: &mut World, player: &mut Player, _: &[&str]) -> anyhow::Result { - player.open_ui(UI::MortReadyUpMenu); - Ok(Outcome::Success) - } - - fn arguments(world: &mut World, player: &mut Player) -> Vec { - Vec::new() - } -} diff --git a/src/server/commands/mod.rs b/src/server/commands/mod.rs deleted file mode 100644 index 8a5da20..0000000 --- a/src/server/commands/mod.rs +++ /dev/null @@ -1,106 +0,0 @@ -use crate::server::commands::argument::Argument; -use crate::server::commands::command::CommandMetadata; -use crate::server::commands::outcome::Outcome; -use crate::server::commands::r#impl::locraw::Locraw; -use crate::server::commands::r#impl::mort::Mort; -use crate::server::player::player::Player; -use crate::server::utils::chat_component::chat_component_text::ChatComponentTextBuilder; -use crate::server::utils::color::MCColors; -use crate::server::world::World; - -pub mod command; -pub mod argument; -mod r#impl; -mod outcome; - -crate::command_registry! { - Mort, - Locraw, -} - -impl Command { - pub fn handle(message: &str, world: &mut World, player: &mut Player) -> anyhow::Result<()> { - let parts: Vec<&str> = message.split_whitespace().collect(); - if parts.is_empty() { - // no command given - return Ok(()); - } - - if let Some(command) = Self::find(parts[0]) { - let args = &parts[1..]; - let command_args = command.args(world, player); - if args.len() > command_args.len() { - let component = ChatComponentTextBuilder::new(format!("Too many arguments! expected: {}, received: {}.", command_args.len(), args.len())).color(MCColors::Red).build(); - // player.send_packet(Chat::new(component, CHAT))?; - return Ok(()); - } - - let missing_args = &command_args[args.len()..]; - - if !missing_args.is_empty() { - let component = - ChatComponentTextBuilder::new("Missing arguments: ") - .color(MCColors::Red) - .append( - ChatComponentTextBuilder::new(missing_args.iter().map(|arg| arg.name).collect::>().join(", ")).color(MCColors::Yellow).build() - ) - .build(); - - // player.send_packet(Chat::new(component, CHAT))?; - return Ok(()); - } - - if let Outcome::Failure(component) = command.run(world, player, args)? { - // player.send_packet(Chat::new(component, CHAT))?; - } - } else { - let unknown_command = - ChatComponentTextBuilder::new(format!("Unknown command. Type \"/help\" for help. ('{}')", parts[0])) - .color(MCColors::Red) - .build(); - // player.send_packet(Chat::new(unknown_command, CHAT))?; - } - - Ok(()) - } -} - -#[macro_export] -macro_rules! command_registry { - {$($name:ident), * $(,)*} => { - pub enum Command { - $($name),* - } - - impl Command { - pub fn list() -> &'static [Command] { - &[$(Command::$name),*] - } - - pub fn find(name: &str) -> Option { - Some(match name { - $($name::NAME => Command::$name,)* - _ => return None, - }) - } - - pub fn name(&self) -> &'static str { - match self { - $(Command::$name => $name::NAME),* - } - } - - pub fn run(&self, world: &mut World, player: &mut Player, args: &[&str]) -> anyhow::Result { - match self { - $(Command::$name => $name::run(world, player, args)),* - } - } - - pub fn args(&self, world: &mut World, player: &mut Player) -> Vec { - match self { - $(Command::$name => $name::arguments(world, player)),* - } - } - } - } -} \ No newline at end of file diff --git a/src/server/commands/outcome.rs b/src/server/commands/outcome.rs deleted file mode 100644 index 2166400..0000000 --- a/src/server/commands/outcome.rs +++ /dev/null @@ -1,7 +0,0 @@ -use crate::server::utils::chat_component::chat_component_text::ChatComponentText; - -/// this should be used when the error is on the user side, such as an invalid argument type -pub enum Outcome { - Success, - Failure(ChatComponentText), -} \ No newline at end of file diff --git a/src/server/entity/entity.rs b/src/server/entity/entity.rs deleted file mode 100644 index f1aea80..0000000 --- a/src/server/entity/entity.rs +++ /dev/null @@ -1,164 +0,0 @@ -use crate::net::packets::packet_buffer::PacketBuffer; -use crate::net::protocol::play::clientbound::{EntityTeleport, SpawnMob, SpawnObject}; -use crate::net::protocol::play::serverbound::EntityInteractionType; -use crate::net::var_int::VarInt; -use crate::server::chunk::chunk::Chunk; -use crate::server::entity::entity_metadata::EntityMetadata; -use crate::server::player::player::Player; -use crate::server::utils::dvec3::DVec3; -use crate::server::world::World; - -pub type EntityId = i32; - -/// provides functionality to an entity -pub trait EntityImpl { - - fn spawn(&mut self, _: &mut Entity, _: &mut PacketBuffer) {} - - fn despawn(&mut self, _: &mut Entity, _: &mut PacketBuffer) {} - - /// runs when an entity is ticked - /// used to add custom functionality to an entity - fn tick(&mut self, entity: &mut Entity, packet_buffer: &mut PacketBuffer); - - fn interact(&mut self, _: &mut Entity, _: &mut Player, _: &EntityInteractionType) {} -} - -/// represents an entity, its position, rotation, and its variant -pub struct Entity { - world: *mut World, - pub id: EntityId, - - pub position: DVec3, - pub velocity: DVec3, - pub yaw: f32, - pub pitch: f32, - pub on_ground: bool, - - pub last_position: DVec3, - pub last_yaw: f32, - pub last_pitch: f32, - - pub ticks_existed: u32, - - pub metadata: EntityMetadata, -} - -impl Entity { - - pub fn new( - world: *mut World, - id: EntityId, - position: DVec3, - metadata: EntityMetadata, - ) -> Self { - Self { - world, - id, - position, - velocity: DVec3::ZERO, - yaw: 0.0, - pitch: 0.0, - on_ground: false, - last_position: DVec3::ZERO, - last_yaw: 0.0, - last_pitch: 0.0, - ticks_existed: 0, - metadata, - } - } - - pub fn world_mut<'a>(&self) -> &'a mut World { - unsafe { self.world.as_mut().unwrap() } - } - - pub fn enter_view() { - - } - - pub fn write_spawn_packet(&self, buffer: &mut PacketBuffer) { - let variant = &self.metadata.variant; - if variant.is_player() { - // needs player list item - // buffer.write_packet(&SpawnPlayer { - // entity_id: VarInt(self.id), - // uuid, - // x: self.position.x, - // y: self.position.y, - // z: self.position.z, - // yaw: self.yaw, - // pitch: self.pitch, - // current_item: 0, - // metadata: self.metadata.clone(), - // }); - } else if variant.is_object() { - buffer.write_packet(&SpawnObject { - entity_id: VarInt(self.id), - entity_variant: variant.get_id(), - x: self.position.x, - y: self.position.y, - z: self.position.z, - yaw: self.yaw, - pitch: self.pitch, - data: 0, - velocity_x: self.velocity.x, - velocity_y: self.velocity.y, - velocity_z: self.velocity.z, - }) - } else { - buffer.write_packet(&SpawnMob { - entity_id: VarInt(self.id), - entity_variant: variant.get_id(), - x: self.position.x, - y: self.position.y, - z: self.position.z, - yaw: self.yaw, - pitch: self.pitch, - head_yaw: self.yaw, - velocity_x: self.velocity.x, - velocity_y: self.velocity.y, - velocity_z: self.velocity.z, - metadata: self.metadata.clone(), - }); - } - } - - pub fn tick( - &mut self, - entity_impl: &mut Box, - packet_buffer: &mut PacketBuffer - ) { - entity_impl.tick(self, packet_buffer); - - if self.position != self.last_position { - packet_buffer.write_packet(&EntityTeleport { - entity_id: self.id, - pos_x: self.position.x, - pos_y: self.position.y, - pos_z: self.position.z, - yaw: self.yaw, - pitch: self.pitch, - on_ground: self.on_ground, - }); - self.last_position = self.position; - } - self.ticks_existed += 1; - } - - pub fn chunk_position(&self) -> (i32, i32) { - ((self.position.x.floor() as i32) >> 4, (self.position.z.floor() as i32) >> 4) - } - - pub fn chunk_mut<'a>(&self) -> Option<&'a mut Chunk> { - let (x, z) = self.chunk_position(); - self.world_mut().chunk_grid.get_chunk_mut(x, z) - } -} - - -/// used for entities with no implementation -pub struct NoEntityImpl; - -impl EntityImpl for NoEntityImpl { - fn tick(&mut self, _: &mut Entity, _: &mut PacketBuffer) {} -} diff --git a/src/server/entity/entity_metadata.rs b/src/server/entity/entity_metadata.rs deleted file mode 100644 index f32fc87..0000000 --- a/src/server/entity/entity_metadata.rs +++ /dev/null @@ -1,126 +0,0 @@ -use crate::net::packets::packet_serialize::PacketSerializable; -use crate::server::items::item_stack::ItemStack; -use bytes::{BufMut, BytesMut}; - -/// Represents an entity type in Minecraft. -#[derive(Debug, Clone)] -pub enum EntityVariant { - Player, - DroppedItem { - item: ItemStack, - }, - ArmorStand, - Zombie { - is_child: bool, - is_villager: bool - }, - Bat { - hanging: bool - }, - FallingBlock, -} - -impl EntityVariant { - - /// Returns the mc entity id of the variant - pub const fn get_id(&self) -> i8 { - match self { - // players need to be spawned with SpawnPlayer packet - EntityVariant::Player => unreachable!(), - EntityVariant::DroppedItem { .. } => 2, - EntityVariant::ArmorStand => 30, - EntityVariant::Zombie { .. } => 54, - EntityVariant::Bat { .. } => 65, - EntityVariant::FallingBlock => 70, - } - } - - pub const fn is_player(&self) -> bool { - match self { - EntityVariant::Player => true, - _ => false, - } - } - - /// Returns if the variant is an object and needs to be spawned - /// using Spawn Object packet instead of Spawn Mob - pub const fn is_object(&self) -> bool { - match self { - EntityVariant::DroppedItem { .. } => true, - EntityVariant::FallingBlock => true, - _ => false, - } - } -} - -#[derive(Debug, Clone)] -pub struct EntityMetadata { - // add more needed stuff here - pub variant: EntityVariant, - pub is_invisible: bool -} - -impl EntityMetadata { - pub fn new(variant: EntityVariant) -> Self { - Self { - variant, - is_invisible: false, - } - } -} - -const BYTE: u8 = 0; -const SHORT: u8 = 1; -const INT: u8 = 2; -const FLOAT: u8 = 3; -const STRING: u8 = 4; -const ITEM_STACK: u8 = 5; - -fn write_data(buf: &mut BytesMut, data_type: u8, id: u8, data: impl PacketSerializable) { - buf.put_u8((data_type << 5 | id & 31) & 255); - data.write(buf); -} - -impl PacketSerializable for EntityMetadata { - fn write_size(&self) -> usize { - const BYTE_SIZE: usize = const { size_of::() }; - let mut size = BYTE_SIZE * 3; - match &self.variant { - EntityVariant::DroppedItem { item } => { - size += item.write_size() + BYTE_SIZE; - } - EntityVariant::Zombie { is_child, is_villager } => { - size += is_child.write_size() + is_villager.write_size() + BYTE_SIZE + BYTE_SIZE; - } - EntityVariant::Bat { hanging } => { - size += hanging.write_size() + BYTE_SIZE - } - _ => {} - } - size - } - fn write(&self, buf: &mut BytesMut) { - let mut flags: u8 = 0; - - if self.is_invisible { - flags |= 0b00100000 - } - - write_data(buf, BYTE, 0, flags); - - match &self.variant { - EntityVariant::DroppedItem { item } => { - write_data(buf, ITEM_STACK, 10, Some(item.clone())) - } - EntityVariant::Zombie { is_child, is_villager } => { - write_data(buf, BYTE, 12, *is_child); - write_data(buf, BYTE, 13, *is_villager); - } - EntityVariant::Bat { hanging } => { - write_data(buf, BYTE, 16, *hanging); - } - _ => {} - } - buf.put_u8(127) - } -} \ No newline at end of file diff --git a/src/server/entity/mod.rs b/src/server/entity/mod.rs deleted file mode 100644 index 831c196..0000000 --- a/src/server/entity/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod entity; -pub mod entity_metadata; \ No newline at end of file diff --git a/src/server/items/ether_transmission.rs b/src/server/items/ether_transmission.rs deleted file mode 100644 index 1abcd70..0000000 --- a/src/server/items/ether_transmission.rs +++ /dev/null @@ -1,47 +0,0 @@ -use crate::net::internal_packets::NetworkThreadMessage; -use crate::net::protocol::play::clientbound::PositionLook; -use crate::server::player::player::Player; -use crate::server::utils::dvec3::DVec3; -use std::f64::consts::PI; -use tokio::sync::mpsc::UnboundedSender; - -pub fn handle_teleport( - player: &mut Player, - network_tx: &UnboundedSender, -) -> anyhow::Result<()> { - let mut start_pos = player.position.clone(); - start_pos.y += 1.54; // assume always sneaking - - let end_pos = { - let yaw = player.yaw as f64; - let pitch = player.pitch as f64; - let rad_yaw = -yaw.to_radians() - PI; - let rad_pitch = -pitch.to_radians(); - - let f2 = -rad_pitch.cos(); - let mut pos = DVec3 { - x: rad_yaw.sin() * f2, - y: rad_pitch.sin(), - z: rad_yaw.cos() * f2, - }.normalize(); - - pos.x *= 10.0; - pos.y *= 10.0; - pos.z *= 10.0; - - pos + start_pos - }; - - player.write_packet(&PositionLook { - x: end_pos.x + 0.5, - y: end_pos.y + 1.05, - z: end_pos.z + 0.5, - yaw: 0.0, - pitch: 0.0, - // flags make x y z absolute, and yaw/pitch relative, - // since yaw and pitch is 0, it doesn't rotate the player - flags: 24, - }); - - Ok(()) -} diff --git a/src/server/items/etherwarp.rs b/src/server/items/etherwarp.rs deleted file mode 100644 index 8f812b1..0000000 --- a/src/server/items/etherwarp.rs +++ /dev/null @@ -1,144 +0,0 @@ -use crate::net::protocol::play::clientbound::{Particles, PositionLook, SoundEffect}; -use crate::server::player::player::Player; -use crate::server::utils::dvec3::DVec3; -use crate::server::world::World; -use crate::utils::bitset::BitSet; -use std::f64::consts::PI; - -const VALID_ETHER_WARP_BLOCK_IDS: BitSet<3> = BitSet::new( - &[ - 0, 6, 9, 11, 30, 31, 32, 36, 37, 38, 39, 40, 50, 51, 55, 59, 65, 66, 69, 76, 77, 78, - 93, 94, 104, 105, 106, 111, 115, 131, 132, 140, 141, 142, 143, 144, 149, 150, 157, 171, 175 - ] -); - -enum EtherResult { - Valid(i32, i32, i32), - Failed, -} - -pub fn handle_ether_warp( - player: &mut Player, - world: &World, -) -> anyhow::Result<()> { - let mut start_pos = player.position.clone(); - start_pos.y += 1.54; // assume always sneaking - - let end_pos = { - let yaw = player.yaw as f64; - let pitch = player.pitch as f64; - let rad_yaw = -yaw.to_radians() - PI; - let rad_pitch = -pitch.to_radians(); - - let f2 = -rad_pitch.cos(); - - let mut pos = DVec3 { - x: rad_yaw.sin() * f2, - y: rad_pitch.sin(), - z: rad_yaw.cos() * f2, - }.normalize(); - - pos.x *= 61.0; - pos.y *= 61.0; - pos.z *= 61.0; - - pos + start_pos - }; - - if let EtherResult::Valid(x, y, z) = traverse_voxels(world, start_pos, end_pos) { - player.write_packet(&Particles { - particle_id: 17, - long_distance: true, - x: player.position.x as f32, - y: player.position.y as f32, - z: player.position.z as f32, - offset_x: 0.25, - offset_y: 1.0, - offset_z: 0.25, - speed: 0.0, - count: 25, - }); - player.write_packet(&PositionLook { - x: x as f64 + 0.5, - y: y as f64 + 1.05, - z: z as f64 + 0.5, - yaw: 0.0, - pitch: 0.0, - // these flags make xyz absolute meaning they set directly - // while keeping yaw and pitch relative (meaning it is added to players yaw) - // since yaw and pitch provided is 0, it doesn't rotate the player causing head snapping - flags: 24, - }); - player.write_packet(&SoundEffect { - sound: "mob.enderdragon.hit", - volume: 1.0, - pitch: 0.53968257, - pos_x: x as f64 + 0.5, - pos_y: y as f64 + 1.05, - pos_z: z as f64 + 0.5, - }); - } - Ok(()) -} - -fn traverse_voxels(world: &World, start: DVec3, end: DVec3) -> EtherResult { - let (x0, y0, z0) = (start.x, start.y, start.z); - let (x1, y1, z1) = (end.x, end.y, end.z); - - let (mut x, mut y, mut z) = (start.x.floor() as i32, start.y.floor() as i32, start.z.floor() as i32); - let (end_x, end_y, end_z) = (end.x.floor() as i32, end.y.floor() as i32, end.z.floor() as i32); - - let dir_x = x1 - x0; - let dir_y = y1 - y0; - let dir_z = z1 - z0; - - let step_x = dir_x.signum() as i32; - let step_y = dir_y.signum() as i32; - let step_z = dir_z.signum() as i32; - - let inv_dir_x = if dir_x != 0.0 { 1.0 / dir_x } else { f64::MAX }; - let inv_dir_y = if dir_y != 0.0 { 1.0 / dir_y } else { f64::MAX }; - let inv_dir_z = if dir_z != 0.0 { 1.0 / dir_z } else { f64::MAX }; - - let t_delta_x = (inv_dir_x * step_x as f64).abs(); - let t_delta_y = (inv_dir_y * step_y as f64).abs(); - let t_delta_z = (inv_dir_z * step_z as f64).abs(); - - // t_max initialization follows the "next voxel boundary" logic - let mut t_max_x = ((x as f64 + if step_x > 0 { 1.0 } else { 0.0 } - x0) * inv_dir_x).abs(); - let mut t_max_y = ((y as f64 + if step_y > 0 { 1.0 } else { 0.0 } - y0) * inv_dir_y).abs(); - let mut t_max_z = ((z as f64 + if step_z > 0 { 1.0 } else { 0.0 } - z0) * inv_dir_z).abs(); - - for _ in 0..1000 { - // Check block at current voxel coordinates - let current_block = world.get_block_at(x, y, z); - - if !VALID_ETHER_WARP_BLOCK_IDS.contains((current_block.get_block_state_id() >> 4) as usize) { - let block_up1 = world.get_block_at(x, y + 1, z).get_block_state_id() >> 4; - let block_up2 = world.get_block_at(x, y + 2, z).get_block_state_id() >> 4; - - return if VALID_ETHER_WARP_BLOCK_IDS.contains(block_up1 as usize) && VALID_ETHER_WARP_BLOCK_IDS.contains(block_up2 as usize) { - EtherResult::Valid(x, y, z) - } else { - EtherResult::Failed - } - } - - if x == end_x && y == end_y && z == end_z { - return EtherResult::Failed; - } - - if t_max_x <= t_max_y && t_max_x <= t_max_z { - t_max_x += t_delta_x; - x += step_x; - } else if t_max_y <= t_max_z { - t_max_y += t_delta_y; - y += step_y; - } else { - t_max_z += t_delta_z; - z += step_z; - } - } - - EtherResult::Failed -} \ No newline at end of file diff --git a/src/server/items/item_stack.rs b/src/server/items/item_stack.rs deleted file mode 100644 index f08f32c..0000000 --- a/src/server/items/item_stack.rs +++ /dev/null @@ -1,68 +0,0 @@ -use crate::net::packets::packet_deserialize::PacketDeserializable; -use crate::net::packets::packet_serialize::PacketSerializable; -use crate::server::utils::nbt::deserialize::deserialize_nbt; -use crate::server::utils::nbt::nbt::NBT; -use crate::server::utils::nbt::serialize::{nbt_write_size, serialize_nbt}; -use bytes::{Buf, BytesMut}; - -#[derive(Debug, Clone, PartialEq)] -pub struct ItemStack { - pub item: i16, - pub stack_size: i8, - pub metadata: i16, - pub tag_compound: Option, -} - -impl PacketSerializable for ItemStack { - fn write_size(&self) -> usize { - self.item.write_size() + - self.stack_size.write_size() + - self.metadata.write_size() + - match &self.tag_compound { - None => const { size_of::() }, - Some(nbt) => nbt_write_size(nbt), - } - } - fn write(&self, buf: &mut BytesMut) { - self.item.write(buf); - self.stack_size.write(buf); - self.metadata.write(buf); - - match &self.tag_compound { - None => 0u8.write(buf), - Some(nbt) => buf.extend(serialize_nbt(nbt)), - } - } -} - -impl PacketSerializable for Option { - fn write_size(&self) -> usize { - match self { - Some(item_stack) => item_stack.write_size(), - None => const { size_of::() } - } - } - fn write(&self, buf: &mut BytesMut) { - if let Some(item_stack) = self { - item_stack.write(buf) - } else { - (-1i16).write(buf) - } - } -} - -impl PacketDeserializable for Option { - fn read(buffer: &mut BytesMut) -> anyhow::Result { - let id = buffer.get_i16(); - if id >= 0 { - let item_stack = ItemStack { - item: id, - stack_size: buffer.get_i8(), - metadata: buffer.get_i16(), - tag_compound: deserialize_nbt(buffer), - }; - return Ok(Some(item_stack)); - } - Ok(None) - } -} \ No newline at end of file diff --git a/src/server/items/mod.rs b/src/server/items/mod.rs deleted file mode 100644 index 40bb6ec..0000000 --- a/src/server/items/mod.rs +++ /dev/null @@ -1,138 +0,0 @@ -use crate::server::items::ether_transmission::handle_teleport; -use crate::server::items::etherwarp::handle_ether_warp; -use crate::server::items::item_stack::ItemStack; -use crate::server::player::player::Player; -use crate::server::utils::nbt::nbt::{NBTNode, NBT}; -use crate::server::utils::nbt::serialize::TAG_COMPOUND_ID; -use indoc::indoc; -use std::collections::HashMap; - -mod etherwarp; -pub mod item_stack; -mod ether_transmission; - -/// List of items available to be used -#[derive(Copy, Debug, Clone, PartialEq)] -pub enum Item { - SkyblockMenu, - MagicalMap, - AspectOfTheVoid, - DiamondPickaxe, - SpiritSceptre, -} - -impl Item { - - pub fn on_right_click(&self, player: &mut Player) -> anyhow::Result<()> { - match self { - Item::AspectOfTheVoid => { - let server = &player.server_mut(); - let world = &server.world; - - if player.is_sneaking { - handle_ether_warp(player, world)?; - } else { - handle_teleport(player, &server.network_tx)?; - } - } - Item::SpiritSceptre => { - // spawn bats, they copy yaw and pitch of player, idk the speed or whatever but - // when they hit a solid block they blow up in like 10 block radius (or square) or something - } - _ => {} - } - Ok(()) - } - - /// creates a vanilla item stack, including all nbt data. - /// - /// this is only used for packets, we do not need to store this on the server. - pub fn get_item_stack(&self) -> ItemStack { - let mut stack = match self { - Item::SkyblockMenu => ItemStack { - item: 399, - stack_size: 1, - metadata: 0, - tag_compound: Some(NBT::with_nodes(vec![ - NBT::compound("display", vec![ - NBT::string("Name", "§aSkyBlock Menu §7(Click)"), - NBT::list_from_string("Lore", indoc! {r#" - §7View all of your SkyBlock progress, - §7including your Skills, Collections, - §7Recipes, and more! - - §eClick to Open! - "#}) - ]), - ])), - }, - Item::MagicalMap => ItemStack { - item: 358, - stack_size: 1, - metadata: 1, - tag_compound: None, - }, - Item::AspectOfTheVoid => ItemStack { - item: 277, - stack_size: 1, - metadata: 0, - tag_compound: Some(NBT::with_nodes(vec![ - NBT::compound("display", vec![ - NBT::string("Name", "§6Aspect of the Void"), - NBT::list_from_string("Lore", indoc! {r#" - - §6Ability: Ether Transmission §e§lSNEAK RIGHT CLICK - §7Teleport to your targeted block up - §7to §a61 blocks §7away - §8Soulflow Cost: §30 - §8Mana Cost: §30 - - §6§l§kU§r§6§l LEGENDARY SWORD §kU - "#}) - ]), - NBT::compound("ExtraAttributes", vec![ - NBT::string("id", "ASPECT_OF_THE_VOID"), - ]), - ])), - }, - Item::DiamondPickaxe => ItemStack { - item: 278, - stack_size: 1, - metadata: 0, - tag_compound: Some(NBT::with_nodes(vec![ - NBT::list("ench", TAG_COMPOUND_ID, vec![ - NBTNode::Compound({ - let mut map = HashMap::new(); - map.insert("lvl".into(), NBTNode::Short(10)); - map.insert("id".into(), NBTNode::Short(32)); - map - }) - ]), - NBT::compound("display", vec![ - NBT::list_from_string("Lore", indoc! {r#" - §8Breaking Power 4 - - §9Efficiency X - §7Increases how quickly your tool - §7breaks blocks. - - §9§l§kE§r§9§l RARE PICKAXE §kE - "#}), - NBT::string("Name", "§9Diamond Pickaxe"), - ]), - ])), - }, - Item::SpiritSceptre => ItemStack { - item: 0, - stack_size: 0, - metadata: 0, - tag_compound: None, - }, - }; - if let Some(ref mut tag) = stack.tag_compound { - tag.nodes.insert("Unbreakable".into(), NBTNode::Byte(1)); - tag.nodes.insert("HideFlags".into(), NBTNode::Int(127)); - } - stack - } -} diff --git a/src/server/mod.rs b/src/server/mod.rs deleted file mode 100644 index 31da783..0000000 --- a/src/server/mod.rs +++ /dev/null @@ -1,9 +0,0 @@ -pub mod chunk; -pub mod utils; -pub mod block; -pub mod items; -pub mod world; -pub mod server; -pub mod player; -pub mod entity; -pub mod commands; diff --git a/src/server/old_entity/ai/ai_tasks.rs b/src/server/old_entity/ai/ai_tasks.rs deleted file mode 100644 index 220ed56..0000000 --- a/src/server/old_entity/ai/ai_tasks.rs +++ /dev/null @@ -1,109 +0,0 @@ -use crate::server::old_entity::ai::{TaskData, TaskType}; -use crate::server::old_entity::entity::Entity; -use crate::server::world::World; -use anyhow::Context; -use indexmap::IndexSet; -use std::collections::{HashMap, HashSet}; -use std::hash::Hash; - -/// Representation of minecraft's [EntityAiTasks](https://github.com/Marcelektro/MCP-919/blob/main/src/minecraft/net/minecraft/entity/ai/EntityAITasks.java). -/// -/// basic task data is stored in the tasks indexset [TaskEntry], such as priority. -/// executing, and data use the [TaskType] as the key, however this is not strictly enforced by [TaskEntry]. -/// vanilla does NOT use them as keys like this and can have multiple of the same type. if we ever end up needing that, -/// we would need to switch to a task id system or something of the sort. -/// -/// insertion matter matters for task execution i think, but the other sets dont need it. -#[derive(Clone, Debug)] -pub struct AiTasks { - tasks: IndexSet, // executing and data tasktypes could be changed to pointers with explicit lifetimes since they could all be the same value as the taskentry type but idk if i want to bother with that rn. - executing: HashSet, - data: HashMap, - - tick_count: i32, - tick_rate: i32, -} - -impl AiTasks { - pub fn new(/*tick_rate: i32*/) -> Self { - Self { - tasks: IndexSet::new(), - executing: HashSet::new(), - data: HashMap::new(), - - tick_count: 0, - tick_rate: 3, - } - } - - pub fn create_from_entries(task_entries: &[TaskEntry]) -> Self { - let mut tasks = Self::new(); - for TaskEntry { priority, task_type } in task_entries { - tasks.add_task(*priority, *task_type); - } - tasks - } - - pub fn add_task(&mut self, priority: u8, task_type: TaskType) { - self.tasks.insert(TaskEntry::new(priority, task_type)); - self.data.insert(task_type, TaskData::default(task_type)); - } - - pub fn update(&mut self, executing: &mut Entity, world: &mut World) -> anyhow::Result<()> { - self.tick_count += 1; - if self.tick_count % self.tick_rate == 0 { - for task in self.tasks.iter() { - let data = self.data.get_mut(&task.task_type).with_context(|| format!("Task data for {task:?} not found."))?; - if self.executing.contains(&task.task_type) { - if Self::can_use(&self.tasks, &self.executing, task, data) && data.keep_executing(executing, world) { - continue; - } - data.reset(); - self.executing.remove(&task.task_type); - } else { - if !Self::can_use(&self.tasks, &self.executing, task, data) || !data.should_run(executing, world) { - continue; - } - data.start_executing(executing, world); - self.executing.insert(task.task_type); - } - } - } else { - self.executing.retain(|task| { - let data = self.data.get_mut(task).expect("Task data for executing task not found. This should be impossible!"); // this consumes our return so either we print this or just panic. This should be impossible to fail though - if data.should_continue(executing, world) { return true; } - data.reset(); - false - }); - } - - for task_type in self.executing.iter() { - let data = self.data.get_mut(task_type).with_context(|| format!("Task data for executing task: {task_type:?} not found."))?; - data.update(executing, world); - } - - Ok(()) - } - - // this cant use &self because self.data is borrowed mutably when this is called. - fn can_use(tasks: &IndexSet, executing_tasks: &HashSet, task: &TaskEntry, data: &mut TaskData) -> bool { - return true; - todo!(); - for task_entry in tasks { - if task_entry == task || !(task_entry.priority >= task.priority) {} - } - return true; - } -} - -#[derive(Clone, Debug, PartialEq, Eq, Hash)] -pub struct TaskEntry { - priority: u8, - task_type: TaskType, -} - -impl TaskEntry { - pub const fn new(priority: u8, task_type: TaskType) -> Self { - Self { priority, task_type } - } -} \ No newline at end of file diff --git a/src/server/old_entity/ai/mod.rs b/src/server/old_entity/ai/mod.rs deleted file mode 100644 index e318367..0000000 --- a/src/server/old_entity/ai/mod.rs +++ /dev/null @@ -1,61 +0,0 @@ -use crate::server::old_entity::entity_type::EntityType; - -pub mod task_data; -pub mod ai_tasks; -pub mod pathfinding; - -crate::ai_tasks! { - WatchClosest: 2 => { - closest: Option, - max_distance: f32, - look_time: i32, - chance: f32, - watched_entity_type: EntityType - } -} - -impl TaskType { - pub const fn is_compatible(&self, other: &Self) -> bool { - (self.id() & other.id()) == 0 - } -} - -/// macro to make defining ai tasks simpler. -/// -/// structure: -/// ``` -///name: bitmask => { -/// value: type, -/// otherval: type, -/// } -/// ``` -/// -/// data stuff must be defined in the [TaskData] impl in task_data.rs file. -#[macro_export] -macro_rules! ai_tasks { - ($($name:ident: $id:expr => { $($value:ident: $typ:tt$(<$($inner:ty),*>)?),*}),* $(,)?) => { - #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)] - pub enum TaskType { - $($name),* - } - - impl TaskType { - pub const fn id(&self) -> u8 { - match self { - $(Self::$name => $id),* - } - } - } - - #[derive(Debug, Clone, Copy, PartialEq)] - pub enum TaskData { - $( - $name { - $( - $value: $typ$(<$($inner),*>)? - ),* - } - ),* - } - } -} \ No newline at end of file diff --git a/src/server/old_entity/ai/pathfinding/check_collision.rs b/src/server/old_entity/ai/pathfinding/check_collision.rs deleted file mode 100644 index cc20e7d..0000000 --- a/src/server/old_entity/ai/pathfinding/check_collision.rs +++ /dev/null @@ -1,10 +0,0 @@ -#[derive(Debug, Clone, PartialEq, Eq)] -pub enum CollisionType { - Clear, - Solid, - Water, - Lava, - Fence, - Trapdoor, - Open, -} \ No newline at end of file diff --git a/src/server/old_entity/ai/pathfinding/entity_context.rs b/src/server/old_entity/ai/pathfinding/entity_context.rs deleted file mode 100644 index f8d9043..0000000 --- a/src/server/old_entity/ai/pathfinding/entity_context.rs +++ /dev/null @@ -1,15 +0,0 @@ -use crate::server::old_entity::entity::Entity; - -pub struct EntityContext { - pub width: f32, - pub height: f32, -} - -impl EntityContext { - pub fn from_entity(entity: &Entity) -> Self { - Self { - width: entity.width, - height: entity.height, - } - } -} \ No newline at end of file diff --git a/src/server/old_entity/ai/pathfinding/mod.rs b/src/server/old_entity/ai/pathfinding/mod.rs deleted file mode 100644 index 50e4eeb..0000000 --- a/src/server/old_entity/ai/pathfinding/mod.rs +++ /dev/null @@ -1,82 +0,0 @@ -use crate::server::block::block_pos::BlockPos; -use crate::server::block::blocks::Blocks; -use crate::server::old_entity::ai::pathfinding::check_collision::CollisionType; -use crate::server::old_entity::ai::pathfinding::entity_context::EntityContext; -use crate::server::world::World; - -pub mod node; -pub mod pathfinder; -pub mod check_collision; -mod entity_context; - -fn get_neighbors(pos: &BlockPos, entity: &EntityContext, world: &World) -> Vec { - let mut neighbors = Vec::new(); - let directions = [ - (1, 0), (0, -1), - (0, 1), (-1, 0), - ]; - - for (dx, dz) in directions { - let pos = BlockPos { - x: pos.x + dx, - y: pos.y, - z: pos.z + dz, - }; - - if let Some(safe_point) = get_safe_point(pos, entity, world) { - neighbors.push(safe_point); - } - } - - neighbors -} - -pub fn is_valid(pos: &BlockPos, entity: &EntityContext, world: &World) -> bool { - let width = entity.width.ceil() as i32; - let height = entity.height.ceil() as i32; - - for x in pos.x..pos.x + width { - for y in pos.y..pos.y + height { - for z in pos.z..pos.z + width { - let block = world.get_block_at(x, y, z); - let path_type = if block == Blocks::Air { CollisionType::Clear } else { CollisionType::Solid }; - if path_type != CollisionType::Clear { // todo rest of this - return false; - } - } - } - } - true -} - -pub fn is_valid_position(pos: &BlockPos, entity: &EntityContext, world: &World) -> bool { - let below = pos.add_y(-1); - let block = world.get_block_at(below.x, below.y, below.z); - let collision = if block == Blocks::Air { CollisionType::Clear } else { CollisionType::Solid }; - let valid = is_valid(pos, entity, world); - collision == CollisionType::Solid && valid -} - -pub fn get_safe_point(pos: BlockPos, entity: &EntityContext, world: &World) -> Option { - for dy in 0..=3 { // todo: max fall height. - let candidate = pos.add_y(-dy); - if is_valid_position(&candidate, entity, world) { - return Some(candidate); - } - } - - for dy in 1..=1 { //todo: step height - let candidate = pos.add_y(dy); - if is_valid_position(&candidate, entity, world) { - return Some(candidate); - } - } - - None -} - -pub const fn heuristic(a: &BlockPos, b: &BlockPos) -> i32 { - a.distance_squared(b) - - // (a.x - b.x).abs() + (a.y - b.y).abs() + (a.z - b.z).abs() -} \ No newline at end of file diff --git a/src/server/old_entity/ai/pathfinding/node.rs b/src/server/old_entity/ai/pathfinding/node.rs deleted file mode 100644 index f65c1ef..0000000 --- a/src/server/old_entity/ai/pathfinding/node.rs +++ /dev/null @@ -1,33 +0,0 @@ -use crate::server::block::block_pos::BlockPos; -use std::cmp::Ordering; - -pub struct NodeEntry { - pub pos: BlockPos, - pub total_cost: f32, -} - -pub struct NodeData { - pub visited: bool, - pub tentative_cost: f32, - pub parent: Option, -} - -impl Ord for NodeEntry { - fn cmp(&self, other: &Self) -> Ordering { - other.total_cost.partial_cmp(&self.total_cost).unwrap() - } -} - -impl PartialOrd for NodeEntry { - fn partial_cmp(&self, other: &Self) -> Option { - Some(self.cmp(other)) - } -} - -impl PartialEq for NodeEntry { - fn eq(&self, other: &Self) -> bool { - self.pos == other.pos - } -} - -impl Eq for NodeEntry {} \ No newline at end of file diff --git a/src/server/old_entity/ai/pathfinding/pathfinder.rs b/src/server/old_entity/ai/pathfinding/pathfinder.rs deleted file mode 100644 index 2f393cc..0000000 --- a/src/server/old_entity/ai/pathfinding/pathfinder.rs +++ /dev/null @@ -1,75 +0,0 @@ -use crate::server::block::block_pos::BlockPos; -use crate::server::old_entity::ai::pathfinding::entity_context::EntityContext; -use crate::server::old_entity::ai::pathfinding::node::{NodeData, NodeEntry}; -use crate::server::old_entity::ai::pathfinding::{get_neighbors, heuristic}; -use crate::server::old_entity::entity::Entity; -use crate::server::world::World; -use anyhow::Context; -use std::collections::{BinaryHeap, HashMap}; - -/// Pathfinding reimplementation of minecraft's pathfinding. -/// various things are not ironed out and need accounting for, such as the various types of blocks and potentially their weights. -/// some entity data will need to passed through in some sort of entity context struct, such as aabb (or width/height), step height, max fall height, etc. -pub struct Pathfinder; - -impl Pathfinder { - pub fn new() -> Self { - Self - } - - pub fn find_path(entity: &Entity, goal: &BlockPos, world: &World) -> anyhow::Result> { - let mut open = BinaryHeap::new(); - let mut data = HashMap::new(); - - let start = BlockPos::from(entity.pos); - data.insert(start, NodeData { visited: false, tentative_cost: 0.0, parent: None }); - - open.push(NodeEntry { - pos: start, - total_cost: heuristic(&start, goal) as f32, - }); - - while let Some(NodeEntry { pos: current, .. }) = open.pop() { - if current == *goal { - let mut path = vec![current]; - let mut cur = current; - - while let Some(parent) = data.get(&cur).and_then(|nd| nd.parent) { - path.push(parent); - cur = parent; - } - - path.reverse(); - return Ok(path); - } - - let node_data = data.entry(current).or_insert(NodeData { visited: false, tentative_cost: 0.0, parent: None }); - if node_data.visited { - continue; - } - node_data.visited = true; - - let context = EntityContext::from_entity(entity); - for neighbor_pos in get_neighbors(¤t, &context, world) { - let tentative = data.get(¤t).context("failed to get data...")?.tentative_cost + 1.0; // adjust depending on cost? - - if data.get(&neighbor_pos).is_none_or(|existing| { tentative < existing.tentative_cost }) { - data.insert(neighbor_pos, NodeData { - visited: false, - tentative_cost: tentative, - parent: Some(current), - }); - - open.push(NodeEntry { - pos: neighbor_pos, - total_cost: tentative + heuristic(&neighbor_pos, goal) as f32, - }); - } - } - } - - // replace with an empty vec when this actually needs to be used probably. - Ok(vec![]) - // Err(anyhow::anyhow!("failed to find path...")) - } -} \ No newline at end of file diff --git a/src/server/old_entity/ai/task_data.rs b/src/server/old_entity/ai/task_data.rs deleted file mode 100644 index 4262f81..0000000 --- a/src/server/old_entity/ai/task_data.rs +++ /dev/null @@ -1,106 +0,0 @@ -use crate::server::old_entity::ai::{TaskData, TaskType}; -use crate::server::old_entity::entity::Entity; -use crate::server::old_entity::entity_type::EntityType; -use crate::server::utils::dvec3::DVec3; -use crate::server::world::World; -use rand::random_range; - -impl TaskData { - pub fn default(task_type: TaskType) -> Self { - match task_type { - TaskType::WatchClosest => Self::WatchClosest { - closest: None, - max_distance: 100.0, - look_time: 0, - chance: 0.5, - watched_entity_type: EntityType::Player, - } - } - } - - pub fn should_run(&mut self, executing: &mut Entity, world: &mut World) -> bool { - match self { - Self::WatchClosest { - closest, - max_distance, - look_time: _, - chance, - watched_entity_type, - } => { - if random_range(0.0..1.0) >= *chance { - return false; - }; - - if let Some(target) = executing.ai_target { - *closest = Some(target); - } - - *closest = if *watched_entity_type == EntityType::Player { - world.get_closest_player(&executing.pos, *max_distance).map(|e| e.entity_id) - } else { None /* todo: get closest entity within aabb using entity's bounding box epanded by max dist*/ }; - - closest.is_some() - } - } - } - - pub fn keep_executing(&mut self, executing: &mut Entity, world: &mut World) -> bool { - match self { - Self::WatchClosest { - closest: _, - max_distance, - look_time, - .. - } => { - if let Some(target) = executing.ai_target.and_then(|target_id| { world.entities.get(&target_id) }) { - if !target.is_alive() { - return false; - } - - if executing.pos.distance_squared(&target.pos) > f64::from(*max_distance * *max_distance) { - return false; - } - } - - look_time > &mut 0 - } - } - } - - pub fn start_executing(&mut self, executing: &mut Entity, world: &mut World) { - match self { - Self::WatchClosest { closest: _, max_distance: _, look_time, .. } => { *look_time = 40 + random_range(0..40) } - } - } - - pub fn update(&mut self, executing: &mut Entity, world: &mut World) { - match self { - Self::WatchClosest { - closest, - max_distance: _, - look_time, - chance: _, - watched_entity_type: _, - } => { - if let Some(target) = closest.and_then(|target_id| { world.entities.get(&target_id) }) { - executing.look_helper.set_pos(target.pos + DVec3::from_y(1.64), 10.0, 10.0) - } - *look_time -= 1; - } - } - } - - pub fn should_continue(&mut self, executing: &mut Entity, world: &mut World) -> bool { - match self { - Self::WatchClosest { .. } => { self.keep_executing(executing, world) } - } - } - - pub fn reset(&mut self) { - match self { - Self::WatchClosest { - closest, .. - } => { *closest = None } - } - } -} \ No newline at end of file diff --git a/src/server/old_entity/attributes.rs b/src/server/old_entity/attributes.rs deleted file mode 100644 index 5a4f3ee..0000000 --- a/src/server/old_entity/attributes.rs +++ /dev/null @@ -1,121 +0,0 @@ -use crate::net::packets::packet_write::PacketWrite; -use crate::net::var_int::VarInt; -use std::collections::HashMap; -use uuid::Uuid; - -/// Type representing minecrafts entity attribute system. -/// -/// unfinished until we know what more needs to be done with it. I assume this is how hypixel handles most of its garbage -pub type Attributes = HashMap; - -impl AttributesImpl for Attributes { - fn add(&mut self, attribute_type: AttributeTypes, base_value: f64) { - self.insert(attribute_type, Attribute::new(base_value)); - } - - fn add_modifier(&mut self, attribute_type: AttributeTypes, value: f64, operation: Operation) { - if let Some(attribute) = self.get_mut(&attribute_type) { - attribute.modifiers.push(Modifier::new(value, operation)); - } - } -} - -pub trait AttributesImpl { - fn add(&mut self, attribute_type: AttributeTypes, base_value: f64); - - fn add_modifier(&mut self, attribute_type: AttributeTypes, value: f64, operation: Operation); -} - -impl PacketWrite for Attributes { - fn write(&self, buf: &mut Vec) { - (self.len() as i32).write(buf); - - for (attribute_type, attribute) in self { - attribute_type.id().write(buf); - attribute.base_value.write(buf); - VarInt(attribute.modifiers.len() as i32).write(buf); - for modifier in &attribute.modifiers { - modifier.uuid.write(buf); - modifier.value.write(buf); - modifier.operation.id().write(buf); - } - } - } -} - -crate::id_enum! { - pub enum AttributeTypes: &'static str { - MaxHealth ("generic.maxHealth"), - FollowRange ("generic.followRange"), - KnockbackResistance ("generic.knockbackResistance"), - MovementSpeed ("generic.movementSpeed"), - AttackDamage ("generic.attackDamage"), - JumpStrength ("horse.jumpStrength"), - SpawnReinforcements ("zombie.spawnReinforcements"), - } -} - -crate::id_enum! { - pub enum Operation: u8 { - Add (0), - MultiplyBase (1), - MultiplyTotal (2), - } -} - -#[derive(Debug, Clone)] -pub struct Modifier { - pub uuid: Uuid, - pub value: f64, - pub operation: Operation, -} - -impl Modifier { - fn new(value: f64, operation: Operation) -> Self { - Self { - uuid: Uuid::new_v4(), - value, - operation, - } - } - - const fn from_uuid(uuid: Uuid, value: f64, operation: Operation) -> Self { - Self { - uuid, - value, - operation, - } - } -} - -#[derive(Debug, Clone)] -pub struct Attribute { - pub base_value: f64, - pub modifiers: Vec, -} - -impl Attribute { - pub fn new(base_value: f64) -> Self { - Self { - base_value, - modifiers: Vec::new(), - } - } - - pub fn calc_final(&self) -> f64 { - let base = self.base_value; - let mut add_sum = 0.0; - let mut mul_base = 0.0; - let mut mul_total = 0.0; - - for modifier in &self.modifiers { - match modifier.operation { - Operation::Add => add_sum += modifier.value, - Operation::MultiplyBase => mul_base += modifier.value, - Operation::MultiplyTotal => mul_total += modifier.value, - } - } - - ((base + add_sum) * (1.0 + mul_base)) * (1.0 + mul_total) - } -} \ No newline at end of file diff --git a/src/server/old_entity/entity.rs b/src/server/old_entity/entity.rs deleted file mode 100644 index 8e3e8bd..0000000 --- a/src/server/old_entity/entity.rs +++ /dev/null @@ -1,240 +0,0 @@ -use crate::net::internal_packets::NetworkThreadMessage; -use crate::net::packets::client_bound::entity::entity_head_look::EntityHeadLook; -use crate::net::packets::client_bound::entity::entity_look::EntityLook; -use crate::net::packets::client_bound::entity::entity_look_move::EntityLookMove; -use crate::net::packets::client_bound::entity::entity_rel_move::EntityRelMove; -use crate::net::packets::client_bound::entity::entity_teleport::EntityTeleport; -use crate::net::packets::client_bound::spawn_mob::SpawnMob; -use crate::net::packets::packet::SendPacket; -use crate::net::packets::packet_registry::ClientBoundPacket; -use crate::server::block::block_pos::BlockPos; -use crate::server::old_entity::ai::ai_tasks::AiTasks; -use crate::server::old_entity::attributes::{Attribute, AttributeTypes, Attributes}; -use crate::server::old_entity::entity_move_data::EntityMoveData; -use crate::server::old_entity::entity_type::{EntityType, NON_LIVING}; -use crate::server::old_entity::look_helper::{wrap_to_180, LookHelper}; -use crate::server::old_entity::metadata::{BaseMetadata, Metadata}; -use crate::server::old_entity::move_helper::MoveHelper; -use crate::server::player::player::{ClientId, Player}; -use crate::server::utils::aabb::AABB; -use crate::server::utils::dvec3::DVec3; -use crate::server::world::World; -use std::cmp::{max, min}; -use std::collections::HashSet; -use std::mem::take; -use tokio::sync::mpsc::UnboundedSender; - -/// type alias for entity ids. -/// -/// alias for i32 since minecraft's ints are signed. -/// if we were to use u32 and went above the positive limit for i32's it would send negative id packets which may lead to undefined behavior -pub type EntityId = i32; - -#[derive(Debug, Clone)] -pub struct Entity { - pub entity_id: EntityId, - pub entity_type: EntityType, - // pub entity_type_data: EntityTypeData, - pub pos: DVec3, - pub on_ground: bool, - pub motion: DVec3, - pub prev_pos: DVec3, - pub last_sent_pos: DVec3, - pub last_sent_yaw: f32, - pub last_sent_pitch: f32, - pub yaw: f32, - pub pitch: f32, - pub head_yaw: f32, - - pub entity_move_data: EntityMoveData, - - pub aabb: AABB, - pub height: f32, - pub width: f32, - pub ticks_existed: u32, - pub health: f32, - - pub metadata: Metadata, - - pub attributes: Attributes, - - pub ai_tasks: Option, - pub ai_target: Option, - pub path: Option>, - - pub look_helper: LookHelper, - pub move_helper: MoveHelper, - - pub observing_players: HashSet -} - -impl Entity { - pub fn create_at(entity_type: EntityType, pos: DVec3, id: EntityId) -> Entity { - let width = entity_type.get_width(); - let height = entity_type.get_height(); - Entity { - entity_id: id, - entity_type, - pos, - on_ground: true, - motion: DVec3::ZERO, - prev_pos: pos, - last_sent_pos: pos, - last_sent_yaw: 0.0, - last_sent_pitch: 0.0, - yaw: 0.0, - pitch: 0.0, - head_yaw: 0.0, - - entity_move_data: EntityMoveData::new(), - - aabb: AABB::from_height_width(width as f64, height as f64), - health: 20.0, // todo: replace by using max health attribute, add requirement for attributes. could also make max health a normal param instead since its required but well see how i want to implement that in the attribute packet. - height, - width, - ticks_existed: 0, - - metadata: Metadata { - base: BaseMetadata { - name: entity_type.to_string(), - }, - entity: entity_type.metadata(), - }, - - attributes: Attributes::from([ - (AttributeTypes::MovementSpeed, Attribute::new(10.0)) - ]), - - ai_tasks: entity_type.get_tasks(), - ai_target: None, - path: None, - - look_helper: LookHelper::from_pos(pos, 10.0, 10.0), - move_helper: MoveHelper::from_pos(pos), - - observing_players: HashSet::new() - } - } - - pub fn positioned_aabb(&self) -> AABB { - AABB::new( - self.pos + self.aabb.min, - self.pos + self.aabb.max - ) - } - - pub fn update_position(&mut self, x: f64, y: f64, z: f64) { - self.prev_pos = self.pos; - self.pos.x = x; - self.pos.y = y; - self.pos.z = z; - } - - pub fn is_alive(&self) -> bool { - !self.health.is_nan() && self.health > 0.0 - } - - pub fn update(mut self, world: &mut World, network_tx: &UnboundedSender) -> Self { - // i dont know where in vanilla this happens but its necessary for vanilla to handle the packet properly and it isnt in the packet handling section. - // living update mods yaw/pitch stuff if it got an update but that doesnt happen via at least the watchclosest ai and it wouldnt even work for this. - self.head_yaw = wrap_to_180(self.head_yaw); - if !NON_LIVING.contains(&self.entity_type) { - self.update_state(world); - } - - // this has not been checked to see if its in the right order, its just here because it needs to be here for now. - // world should probably have its own network tx clone so we dont need to pass it through here maybe? not sure. - if let Some(packet) = self.get_pos_packet() { - for player in self.observing_players.iter() { - packet.clone().send_packet(*player, network_tx).unwrap_or_else(|err| println!("error updating entity position for client {player}: {err:?}")); - EntityHeadLook::from_entity(&self).send_packet(*player, network_tx).unwrap_or_else(|err| println!("error updating entity head yaw for client {player}: {err:?}")); - } - } - - self.last_sent_pos = self.pos; - self.last_sent_yaw = self.yaw; - self.last_sent_pitch = self.pitch; - - self - } - - pub fn get_attribute(&self, attribute: AttributeTypes) -> Option { - self.attributes.get(&attribute).map(|attr| attr.calc_final()) - } - - pub fn move_speed(&self) -> f64 { - self.get_attribute(AttributeTypes::MovementSpeed).unwrap_or(1.0) - } - - pub fn load_for_player(&mut self, player: &Player, network_tx: &UnboundedSender) -> anyhow::Result<()> { - if self.entity_id == player.entity_id { return Ok(()); } - self.observing_players.insert(player.client_id); - - // this should be replaced via a spawn entity function that gets the correct type of spawn entity packet, whether it be spawnmob, spawnplayer, spawnobject, etc. - SpawnMob::from_entity(self)?.send_packet(player.client_id, network_tx) - } - - pub fn update_state(&mut self, world: &mut World) { - // check despawn - // sensing cache clear - - // target ai update - - if let Some(mut tasks) = take(&mut self.ai_tasks) { - tasks.update(self, world).unwrap_or_else(|err| println!("error updating entity ai tasks: {:?}", err)); - self.ai_tasks = Some(tasks); - } - // path navigation update - - // generic task update? - - MoveHelper::update(self); - LookHelper::on_update_look(self); - // jump helper update - } - - pub fn get_pos_packet(&self) -> Option { - let rotated = self.last_sent_pitch != self.pitch || self.last_sent_yaw != self.yaw; - // we may need resync logic if an entity moves more than like 8 blocks in a tick but that seems unlikely - Some(if self.ticks_existed % 200 == 0 { - ClientBoundPacket::from(EntityTeleport::from_entity(self)) - } else if self.pos != self.last_sent_pos { - if rotated { - ClientBoundPacket::from(EntityLookMove::from_entity(self)) - } else { - ClientBoundPacket::from(EntityRelMove::from_entity(self)) - } - } else if rotated { - ClientBoundPacket::from(EntityLook::from_entity(self)) - } else { return None }) - } - - pub fn is_in_aabb_i32( - &self, - min_x: i32, min_y: i32, min_z: i32, - max_x: i32, max_y: i32, max_z: i32, - ) -> bool { - // pmo - let (min_x, min_y, min_z) = (min_x as f64, min_y as f64, min_z as f64); - let (max_x, max_y, max_z) = (max_x as f64, max_y as f64, max_z as f64); - let (x, y, z) = (self.pos.x, self.pos.y, self.pos.z); - x >= min_x && x < max_x && - y >= min_y && y < max_y && - z >= min_z && z < max_z - } - - pub fn is_in_box_i32( - &self, - x: i32, y: i32, z: i32, - width: i32, height: i32, length: i32, - ) -> bool { - // im too lazy to make this not repeat bunch of stuff - let min_x = min(x, x + width); - let min_y = min(y, y + height); - let min_z = min(z, z + length); - let max_x = max(x, x + width); - let max_y = max(y, y + height); - let max_z = max(z, z + length); - self.is_in_aabb_i32(min_x, min_y, min_z, max_x, max_y, max_z) - } -} \ No newline at end of file diff --git a/src/server/old_entity/entity_move_data.rs b/src/server/old_entity/entity_move_data.rs deleted file mode 100644 index d4b4b3f..0000000 --- a/src/server/old_entity/entity_move_data.rs +++ /dev/null @@ -1,24 +0,0 @@ -use crate::server::utils::dvec3::DVec3; - -#[derive(Clone, Debug)] -pub struct EntityMoveData { - pub new_pos: DVec3, - pub new_yaw: f32, - pub new_pitch: f32, - - pub move_forward: f32, - pub move_strafe: f32, -} - -impl EntityMoveData { - pub fn new() -> Self { - Self { - new_pos: DVec3::new(0.0, 0.0, 0.0), - new_yaw: 0.0, - new_pitch: 0.0, - - move_forward: 0.0, - move_strafe: 0.0, - } - } -} \ No newline at end of file diff --git a/src/server/old_entity/entity_movement.rs b/src/server/old_entity/entity_movement.rs deleted file mode 100644 index f63154c..0000000 --- a/src/server/old_entity/entity_movement.rs +++ /dev/null @@ -1,20 +0,0 @@ -use crate::server::old_entity::entity::Entity; - -/// impl for the movement of entities to keep entity file clean. -impl Entity { - pub fn set_move(&mut self, speed: f32) { - self.entity_move_data.move_forward = speed - } - - // pub fn move_entity(&mut self, mut new_pos: Vec3f) { - // let mut flag: bool; - // let mut temp_pos = self.pos; - // // if in web - // - // flag = false //self.on_ground // sneaking check - // - // if flag { - // - // } - // } -} \ No newline at end of file diff --git a/src/server/old_entity/entity_type.rs b/src/server/old_entity/entity_type.rs deleted file mode 100644 index 3a892a7..0000000 --- a/src/server/old_entity/entity_type.rs +++ /dev/null @@ -1,83 +0,0 @@ -use std::fmt::Formatter; - -/// if this becomes big, we should use a hashset. -pub const NON_LIVING: [EntityType; 1] = [ - EntityType::Player, -]; - -crate::entity_type_registry! { - Zombie: zombie, - Player: player, -} - -/// macro to register entity types. this should handle all the unique entity type functions and whatnot. -/// only has 2 right now, and nothing which may need parameters, but it should be supported. -/// you can have optional ones but clarifying that theyre optional in the macro itself is weird, -/// so atm they should be implemented but returning none. -/// -/// structure: -/// ``` -/// Name: implpath -/// ``` -#[macro_export] -macro_rules! entity_type_registry { - {$($name:ident: $path:ident),* $(,)?} => { - #[derive(Clone, Debug, PartialEq, Eq, Copy)] - pub enum EntityType { - $( - $name, - )* - } - - impl EntityType { - pub const fn get_id(&self) -> i8 { - match self { - $( - Self::$name => crate::server::old_entity::r#impl::$path::ID - ),* - } - } - - pub fn get_tasks(&self) -> Option { - match self { - $( - Self::$name => crate::server::old_entity::r#impl::$path::ai_tasks() - ),* - } - } - - pub fn metadata(&self) -> crate::server::old_entity::metadata::EntityMetadata { - match self { - $( - Self::$name => crate::server::old_entity::r#impl::$path::metadata() - ),* - } - } - - pub const fn get_width(&self) -> f32 { - match self { - $( - Self::$name => crate::server::old_entity::r#impl::$path::WIDTH - ),* - } - } - pub const fn get_height(&self) -> f32 { - match self { - $( - Self::$name => crate::server::old_entity::r#impl::$path::HEIGHT - ),* - } - } - } - - impl std::fmt::Display for EntityType { - fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { - match self { - $( - Self::$name => write!(f, stringify!($name)), - )* - } - } - } - }; -} \ No newline at end of file diff --git a/src/server/old_entity/impl/mod.rs b/src/server/old_entity/impl/mod.rs deleted file mode 100644 index a5ee96c..0000000 --- a/src/server/old_entity/impl/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod zombie; -pub mod player; \ No newline at end of file diff --git a/src/server/old_entity/impl/player.rs b/src/server/old_entity/impl/player.rs deleted file mode 100644 index 709637a..0000000 --- a/src/server/old_entity/impl/player.rs +++ /dev/null @@ -1,14 +0,0 @@ -use crate::server::old_entity::ai::ai_tasks::AiTasks; -use crate::server::old_entity::metadata::EntityMetadata; - -pub const ID: i8 = -1; // todo: not have this for players. they send a uuid instead. -pub const WIDTH: f32 = 0.6; -pub const HEIGHT: f32 = 1.8; - -pub const fn ai_tasks() -> Option { - None -} - -pub const fn metadata() -> EntityMetadata { - EntityMetadata::Player -} \ No newline at end of file diff --git a/src/server/old_entity/impl/zombie.rs b/src/server/old_entity/impl/zombie.rs deleted file mode 100644 index 053ee96..0000000 --- a/src/server/old_entity/impl/zombie.rs +++ /dev/null @@ -1,19 +0,0 @@ -use crate::server::old_entity::ai::ai_tasks::{AiTasks, TaskEntry}; -use crate::server::old_entity::ai::TaskType::WatchClosest; -use crate::server::old_entity::metadata::EntityMetadata; - -pub const ID: i8 = 54; -pub const WIDTH: f32 = 0.6; -pub const HEIGHT: f32 = 1.95; - -pub fn ai_tasks() -> Option { - Some(AiTasks::create_from_entries(&[TaskEntry::new(0, WatchClosest)])) // todo: more of the actual ai stuff -} - -pub const fn metadata() -> EntityMetadata { - EntityMetadata::Zombie { - is_child: true, - is_villager: false, - is_converting: false, - } -} \ No newline at end of file diff --git a/src/server/old_entity/look_helper.rs b/src/server/old_entity/look_helper.rs deleted file mode 100644 index dc0c6cf..0000000 --- a/src/server/old_entity/look_helper.rs +++ /dev/null @@ -1,65 +0,0 @@ -use crate::server::old_entity::entity::Entity; -use crate::server::utils::dvec3::DVec3; - -/// this is weird and probably bad, but ill worry about moving and fixing it later -#[derive(Clone, Debug)] -pub struct LookHelper { - pos: DVec3, - delta_yaw: f32, - delta_pitch: f32, - rotating: bool, -} - -impl LookHelper { - pub fn from_pos(pos: DVec3, delta_yaw: f32, delta_pitch: f32) -> Self { - Self { - pos, - delta_yaw, - delta_pitch, - rotating: true, - } - } - - pub fn set_pos(&mut self, pos: DVec3, delta_yaw: f32, delta_pitch: f32) { - self.pos = pos; - self.delta_yaw = delta_yaw; - self.delta_pitch = delta_pitch; - self.rotating = true; - } - - pub fn on_update_look(entity: &mut Entity) { - // cant use self here because of borrow checker, but eventually this whole logic can probably be in the entity struct impl anyways. - let helper = &mut entity.look_helper; - // entity.pitch = 0.0; // this is necessary for some reason - if helper.rotating { - helper.rotating = false; - let offset_x = helper.pos.x - entity.pos.x; - let offset_y = helper.pos.y - entity.pos.y + 1.62; // todo: replace with entity.eye_height - let offset_z = helper.pos.z - entity.pos.z; - let offset_xz = offset_x.hypot(offset_z); - let yaw = (offset_z as f32).atan2(offset_x as f32).to_degrees() - 90.0; - let pitch = -(offset_y as f32).atan2(offset_xz as f32).to_degrees(); - entity.pitch = Self::update_rotation(entity.pitch, pitch, helper.delta_pitch); - entity.head_yaw = Self::update_rotation(entity.head_yaw, yaw, helper.delta_yaw); - } else { - // todo entity.render_yaw_offset - } - // todo check if no path then clamp i think? its weird. - } - - pub fn update_rotation(current: f32, target: f32, delta: f32) -> f32 { - current + wrap_to_180(target - current).clamp(-delta, delta) - } -} - -pub fn wrap_to_180(angle: f32) -> f32 { - // im betting this can be made simpler but im just tryna copy vanilla for the time being. - let mut angle = angle % 360.0; - if angle >= 180.0 { - angle -= 360.0; - } - if angle <= -180.0 { - angle += 360.0; - } - angle -} \ No newline at end of file diff --git a/src/server/old_entity/metadata.rs b/src/server/old_entity/metadata.rs deleted file mode 100644 index 2a40fbb..0000000 --- a/src/server/old_entity/metadata.rs +++ /dev/null @@ -1,93 +0,0 @@ -use crate::net::packets::packet_write::PacketWrite; - -/// representation of Minecraft's [Data Watcher](https://github.com/Marcelektro/MCP-919/blob/main/src/minecraft/net/minecraft/entity/DataWatcher.java) structure. -/// Renamed to Metadata because thats pretty much exactly what it is and its more clear. -/// -/// has 2 parts base metadata and entity metadata. base metadata is for all shared metadata values. -/// entity metadata is for metadata unique to an entity, such as is_child for zombies. -#[derive(Clone, Debug)] -pub struct Metadata { - pub base: BaseMetadata, - pub entity: EntityMetadata, -} - -crate::metadata! { - Player, - Zombie { - is_child: bool = 12, - is_villager: bool = 13, - is_converting: bool = 14 - } -} - -impl PacketWrite for Metadata { - fn write(&self, buf: &mut Vec) { - self.base.write_to_buffer(buf); - self.entity.write_to_buffer(buf); - buf.push(127) - } -} - -#[derive(Clone, Debug)] -pub struct BaseMetadata { - // all metadata is optional but this being like this makes it not optional. Maybe use Option if it becomes an issue? - // could be turned into a macro to include the basemetadata write_to_buffer impl... - pub name: String, -} - -impl BaseMetadata { - // this needs to be updated for every entry added to base metadata. - pub fn write_to_buffer(&self, buf: &mut Vec) { - buf.push(((4 << 5 | 2 & 31) & 255) as u8); - self.name.write(buf) - } -} - -#[macro_export] -macro_rules! metadata { - ($($name:ident $({$($field:ident: $ty:tt = $id:expr), *$(,)?})?),* $(,)?) => { - #[derive(Debug, Clone)] - pub enum EntityMetadata { - $( - $name $({ - $($field: $ty),* - })? - ),* - } - - impl EntityMetadata { - pub fn write_to_buffer(&self, buf: &mut Vec) { - match self { - $( - Self::$name $({$($field),* })? => { - $( - $( - buf.push(((crate::type_to_id!($ty) << 5 | $id & 31) & 255) as u8); - crate::net::packets::packet_write::PacketWrite::write($field, buf); - )* - )? - } - ),* - } - } - } - }; -} - -/// macro handling meta data types. -/// This is missing a few types still. -#[macro_export] -macro_rules! type_to_id { - (bool) => { u8::from(0) }; // this needs the from stuff otherwise it cries - (i16) => { u8::from(1) }; - (i32) => { u8::from(2) }; - (f32) => { u8::from(3) }; - (String) => { u8::from(4) }; - (ItemStack) => { u8::from(5) }; - // currently missing blockpos and rotation (both are vec3fs internally though so maybe just put that here?) - - // Catch-all for unsupported types - ($other:ty) => { - compile_error!(concat!("Unsupported type: ", stringify!($other))) - }; -} \ No newline at end of file diff --git a/src/server/old_entity/mod.rs b/src/server/old_entity/mod.rs deleted file mode 100644 index db103ca..0000000 --- a/src/server/old_entity/mod.rs +++ /dev/null @@ -1,13 +0,0 @@ -pub mod player_entity; -pub mod entity_type; -pub mod entity; -pub mod zombie; -pub mod attributes; -pub mod ai; -pub mod r#impl; -mod look_helper; -pub mod metadata; -mod move_helper; -mod navigator; -mod entity_move_data; -mod entity_movement; \ No newline at end of file diff --git a/src/server/old_entity/move_helper.rs b/src/server/old_entity/move_helper.rs deleted file mode 100644 index ab1bc2f..0000000 --- a/src/server/old_entity/move_helper.rs +++ /dev/null @@ -1,63 +0,0 @@ -use crate::server::old_entity::entity::Entity; -use crate::server::old_entity::look_helper::wrap_to_180; -use crate::server::utils::dvec3::DVec3; - -#[derive(Clone, Debug)] -pub struct MoveHelper { - pub pos: DVec3, - pub speed: f64, - update: bool, -} - -impl MoveHelper { - pub fn from_pos(pos: DVec3) -> Self { - Self { - pos, - speed: 0.0, - update: false, - } - } - - pub fn set_move_to(&mut self, pos: DVec3, speed: f64) { - self.pos = pos; - self.speed = speed; - self.update = true; - } - - pub fn update(entity: &mut Entity) { - // set move forward 0? - if !entity.move_helper.update { - return - }; - entity.move_helper.update = false; - let x = entity.move_helper.pos.x - entity.pos.x; - let z = entity.move_helper.pos.z - entity.pos.z; - let y = entity.move_helper.pos.y - entity.aabb.min.y.round(); - - let g = z.mul_add(z, x.mul_add(x, y * y)); - - if g < 2.500000277905201e-7 { - return // this might need to error out idrk - } - - let yaw = x.atan2(z).to_degrees() as f32 - 90.0; - entity.yaw = limit_angle(entity.yaw, yaw, 30.0); - entity.set_move((entity.move_helper.speed * entity.move_speed()) as f32); - if y > 0.0 && x.mul_add(x, z * z) < 1.0 { - //todo: jump helper jump - } - } -} - - -pub fn limit_angle(angle1: f32, angle2: f32, clamp: f32) -> f32 { - let mut limited: f32; - let wrapped = wrap_to_180(angle2 - angle1).clamp(-clamp, clamp); - limited = angle1 + wrapped; - if limited < 0.0 { - limited += 360.0; - } else if (limited >= 360.0) { - limited -= 360.0; - } - limited -} \ No newline at end of file diff --git a/src/server/old_entity/navigator.rs b/src/server/old_entity/navigator.rs deleted file mode 100644 index d410010..0000000 --- a/src/server/old_entity/navigator.rs +++ /dev/null @@ -1,53 +0,0 @@ -use crate::server::block::block_pos::BlockPos; -use crate::server::old_entity::ai::pathfinding::pathfinder::Pathfinder; -use crate::server::old_entity::entity::Entity; -use crate::server::utils::dvec3::DVec3; -use crate::server::world::World; - -pub struct Navigator { - pub path: Option>, - pub ticks_following: i32, - pub ticks_at_last_pos: i32, - - pub last_pos: Option, - // pub path_finder: PathFinder, -} - -impl Navigator { - pub fn from_entity(entity: &Entity) -> Self { - Self { - path: None, - ticks_following: 0, - ticks_at_last_pos: 0, - - last_pos: None, - // path_finder: PathFinder::from_entity(entity), - } - } - - pub fn get_path_to_pos(&mut self, entity: &Entity, pos: BlockPos, world: &World) -> anyhow::Result> { - //todo: can navigate - //todo: search range + 8?? - - Pathfinder::find_path(entity, &pos, world) - } - - pub fn set_path(&mut self, path: Option>, entity: &Entity) -> bool { - if path.is_none() { - self.path = None; - return false; - } - - if path != self.path { - self.path = path; - } - - if self.path.as_ref().is_none_or(|path| path.is_empty()) { - return false; - } - - self.ticks_at_last_pos = self.ticks_following; - self.last_pos = Some(entity.pos); - true - } -} \ No newline at end of file diff --git a/src/server/old_entity/player_entity.rs b/src/server/old_entity/player_entity.rs deleted file mode 100644 index 0dfcb2d..0000000 --- a/src/server/old_entity/player_entity.rs +++ /dev/null @@ -1,85 +0,0 @@ -// use crate::net::network_message::NetworkMessage; -// use crate::net::packets::client_bound::confirm_transaction::ConfirmTransaction; -// use crate::net::packets::client_bound::disconnect::Disconnect; -// use crate::net::packets::client_bound::keep_alive::KeepAlive; -// use crate::net::packets::packet::SendPacket; -// use crate::server::entity::entity::Entity; -// use crate::server::entity::entity_enum::EntityTrait; -// use crate::server::old_world::World; -// use crate::server::utils::chat_component::chat_component_text::ChatComponentText; -// use crate::server::utils::vec3f::Vec3f; -// use std::time::{Duration, SystemTime, UNIX_EPOCH}; -// -// #[derive(Debug)] -// pub struct PlayerEntity { -// pub client_id: u32, -// pub last_keep_alive: i32, -// pub ping: i32, -// pub entity: Entity, -// } -// -// impl PlayerEntity { -// pub fn spawn_at(pos: Vec3f, id: u32, world: &mut World) -> PlayerEntity { -// let entity_id = world.new_entity_id(); -// world.client_to_entities.insert(id, entity_id); -// PlayerEntity { -// client_id: id, -// last_keep_alive: 0, -// ping: 0, -// entity: Entity::create_at(pos, entity_id), -// } -// } -// -// pub fn disconnect(&mut self, world: &mut World, reason: ChatComponentText) { -// Disconnect { reason }.send_packet(self.client_id, &world.network_tx).unwrap_or_else(|e| eprintln!("Error sending disconnect packet: {e:?}")); -// -// world.network_tx.send(NetworkMessage::DisconnectClient { -// client_id: self.client_id, -// }).unwrap_or_else(|e| eprintln!("Error disconnecting client: {e:?}")); -// } -// } -// -// impl EntityTrait for PlayerEntity { -// fn get_id(&self) -> i8 { -// 0 -// } -// -// fn get_entity(&mut self) -> &mut Entity { -// &mut self.entity -// } -// -// fn tick(mut self, world: &mut World) -> Self { -// if self.client_id != 0 { -// ConfirmTransaction::new().send_packet(self.client_id, &world.network_tx).unwrap_or_else(|e| { -// eprintln!("Failed to send confirm transaction packet at {:?}'s tick: {}", self, e); -// }); -// -// if world.current_server_tick % 50 == 0 { -// let time = SystemTime::now().duration_since(UNIX_EPOCH).unwrap_or_else(|e| { -// eprintln!("Failed to get system time at {:?}'s tick: {}", self, e); -// Duration::new(1, 0) -// }).as_millis() as i32; -// self.last_keep_alive = time; -// KeepAlive::from_time(time).send_packet(self.client_id, &world.network_tx).unwrap_or_else(|e| { -// eprintln!("Failed to send keep alive packet at {self:?}'s tick: {e}") -// }); -// } // this hsould be entirely handled by network thread instead i think maybe. -// -// // if self.entity.ticks_existed >= 100 { -// // self.disconnect(world, "go away nothing shere yet"); -// // } -// // -// -// } -// -// self -// } -// -// fn spawn(&mut self, world: &mut World) { -// //self.spawn_task(world) -// } -// -// fn despawn(&mut self, world: &mut World) { -// //self.clear_task(world).unwrap_or_else(|e| eprintln!("Failed to clear task for {:?}: {}", self, e)) -// } -// } \ No newline at end of file diff --git a/src/server/old_entity/zombie.rs b/src/server/old_entity/zombie.rs deleted file mode 100644 index d3a7b9d..0000000 --- a/src/server/old_entity/zombie.rs +++ /dev/null @@ -1,60 +0,0 @@ -// use crate::server::entity::entity::Entity; -// use crate::server::entity::entity_enum::EntityTrait; -// use crate::server::entity::metadata::{Metadata, MetadataEntry, MetadataImpl}; -// use crate::server::old_world::World; -// use crate::server::utils::vec3f::Vec3f; -// use crate::{meta_data, meta_data_impl}; -// use crate::server::entity::attributes::{Attribute, AttributeTypes, AttributesImpl}; -// -// #[derive(Debug)] -// pub struct Zombie { -// entity: Entity, -// is_child: IsChild, -// is_villager: IsVillager, -// is_converting: IsConverting -// } -// -// meta_data!(IsChild, bool, 12); -// meta_data!(IsVillager, bool, 13); -// meta_data!(IsConverting, bool, 14); -// meta_data_impl!(Zombie, is_child, is_villager, is_converting); -// -// impl Zombie { -// pub fn create_at(pos: Vec3f, entity_id: i32) -> Self { -// let mut entity = Entity::create_at(pos, entity_id); -// // entity.attributes.add(AttributeTypes::FollowRange, 35.0); -// // entity.attributes.add(AttributeTypes::MovementSpeed, 35.0); -// // entity.attributes.add(AttributeTypes::AttackDamage, 35.0); -// // entity.attributes.add(AttributeTypes::SpawnReinforcements, 35.0); -// -// Self { -// entity, -// is_child: IsChild(true), -// is_villager: IsVillager(false), -// is_converting: IsConverting(false) -// } -// } -// } -// -// impl EntityTrait for Zombie { -// fn get_id(&self) -> i8 { -// 54 -// } -// -// fn get_entity(&mut self) -> &mut Entity { -// &mut self.entity -// } -// -// fn tick(mut self, world: &mut World) -> Self { -// // todo -// self -// } -// -// fn spawn(&mut self, world: &mut World) { -// // todo!() -// } -// -// fn despawn(&mut self, world: &mut World) { -// // todo!() -// } -// } \ No newline at end of file diff --git a/src/server/player/container_ui.rs b/src/server/player/container_ui.rs deleted file mode 100644 index 14fe082..0000000 --- a/src/server/player/container_ui.rs +++ /dev/null @@ -1,146 +0,0 @@ -use crate::dungeon::dungeon_state::DungeonState; -use crate::dungeon::dungeon_state::DungeonState::NotReady; -use crate::net::protocol::play::clientbound::CloseWindow; -use crate::net::protocol::play::serverbound::ClickWindow; -use crate::server::items::item_stack::ItemStack; -use crate::server::player::player::{ClientId, Player}; -use crate::server::server::Server; -use crate::server::utils::nbt::nbt::NBT; - -#[derive(Debug)] -pub struct ContainerData { - pub title: String, - pub slot_amount: u8, -} - -#[derive(Debug, Copy, Clone, PartialEq)] -pub enum UI { - None, - // this is here to direct clicks to the actual inventory where all the items are stored, etc. - Inventory, - MortReadyUpMenu -} - -impl UI { - - /// this function returns data for opening a container, - /// should not be used for UI's that don't use a container - pub fn get_container_data(&self) -> Option { - match self { - UI::MortReadyUpMenu => Some(ContainerData { - title: "Ready Up".to_string(), - slot_amount: 54, - }), - _ => None - } - } - - /// returns a list of items to send to client - pub fn get_container_contents(&self, server: &Server, client_id: &ClientId) -> Option>> { - let player = server.world.players.get(client_id)?; - match self { - UI::MortReadyUpMenu => { - let mut content = default_container_content(54); - - let (item_name, color) = if let NotReady = server.dungeon.state { - ("§cNot Ready", 14) - } else { - ("§aReady", 13) - }; - content[4] = Some(ItemStack { - item: 397, - stack_size: 1, - metadata: 3, - tag_compound: Some(NBT::with_nodes(vec![ - NBT::compound("display", vec![ - NBT::string("Name", &format!("§7{}", player.profile.username)), - NBT::list_from_string("Lore", &item_name.to_string()) - ]), - NBT::string("SkullOwner", &player.profile.username), - ])), - }); - content[13] = Some(ItemStack { - item: 95, - stack_size: 1, - metadata: color, - tag_compound: Some(NBT::with_nodes(vec![ - NBT::compound("display", vec![ - NBT::string("Name", item_name) - ]) - ])), - }); - content[49] = Some(ItemStack { - item: 166, - stack_size: 1, - metadata: 0, - tag_compound: Some(NBT::with_nodes(vec![ - NBT::compound("display", vec![ - NBT::string("Name", "§cClose") - ]) - ])), - }); - Some(content) - } - _ => None - } - } - - /// handles the click window packet for all UI - pub fn handle_click_window( - &self, - packet: &ClickWindow, - player: &mut Player, - ) { - match self { - UI::Inventory => { - if packet.slot_id == 44 { - player.sync_inventory(); - return; - } - if player.inventory.click_slot(packet, &mut player.packet_buffer) { - player.sync_inventory(); - } - }, - UI::MortReadyUpMenu => { - match packet.slot_id { - 4 | 13 => { - let dung = &mut player.server_mut().dungeon; - match dung.state { - NotReady => dung.state = DungeonState::Starting { tick_countdown: 100 }, - DungeonState::Starting { .. } => dung.state = NotReady, - _ => {} - } - } - 49 => { - player.current_ui = UI::None; - player.write_packet(&CloseWindow { - window_id: player.window_id, - }); - }, - _ => {} - } - player.sync_inventory(); - } - _ => unreachable!() - } - } -} - -/// returns a vec with size contained only black stained-glass panes with no name. -/// used as a background for a container -fn default_container_content(size: usize) -> Vec> { - let mut vec = Vec::with_capacity(size); - for _ in 0..size { - vec.push(Some(ItemStack { - item: 160, - stack_size: 1, - metadata: 15, - tag_compound: Some(NBT::with_nodes(vec![ - NBT::compound("display", vec![ - NBT::string("Name", "") - ]) - ])), - })) - } - vec -} \ No newline at end of file diff --git a/src/server/player/inventory.rs b/src/server/player/inventory.rs deleted file mode 100644 index a5874ec..0000000 --- a/src/server/player/inventory.rs +++ /dev/null @@ -1,144 +0,0 @@ -use crate::net::packets::packet_buffer::PacketBuffer; -use crate::net::protocol::play::clientbound::SetSlot; -use crate::net::protocol::play::serverbound::{ClickMode, ClickWindow}; -use crate::server::items::item_stack::ItemStack; -use crate::server::items::Item; - -#[derive(Default, Debug, Clone)] -pub enum ItemSlot { - #[default] - Empty, - Filled(Item), -} - -impl ItemSlot { - pub fn get_item_stack(&self) -> Option { - if let ItemSlot::Filled(item) = self { - Some(item.get_item_stack()) - } else { - None - } - } -} - -// this is currently a prototype/example idk -// im not sure how i want to handle items -#[derive(Debug)] -pub struct Inventory { - /// list of all slots - pub items: [ItemSlot; 45], - pub(crate) dragged_item: ItemSlot, -} - -impl Inventory { - - /// creates an empty inventory - pub fn empty() -> Inventory { - const EMPTY: ItemSlot = ItemSlot::Empty; - Inventory { items: [EMPTY; 45], dragged_item: EMPTY } - } - - pub fn set_slot(&mut self, item_slot: ItemSlot, index: usize) { - if index >= 45 { - return; - } - self.items[index] = item_slot - } - - pub fn get_slot_cloned(&self, slot: usize) -> ItemSlot { - self.items.get(slot).cloned().unwrap_or_else(|| ItemSlot::Empty) - } - - pub fn get_hotbar_slot(&self, index: usize) -> Option { - let index = index + 36; - if index >= 36 && index <= 44 { - return self.items.get(index).cloned(); - } - None - } - - pub fn click_slot( - &mut self, - packet: &ClickWindow, - packet_buffer: &mut PacketBuffer - ) -> bool { - match packet.mode { - ClickMode::NormalClick => { - // if we ever have stackable items. this will need fixing - if packet.slot_id < 0 { - packet_buffer.write_packet(&SetSlot { - window_id: -1, - slot: 0, - item_stack: self.dragged_item.get_item_stack(), - }) - } else { - let slot = packet.slot_id as usize; - if is_valid_range(slot) { - let item = self.get_slot_cloned(slot); - self.set_slot(self.dragged_item.clone(), slot); - self.dragged_item = item; - } - } - } - ClickMode::ShiftClick => { - let slot = packet.slot_id as usize; - if is_valid_range(slot) { - let clicked_stack = self.get_slot_cloned(slot); - let range = if slot >= 36 { 9..36 } else { 36..45 }; - - for index in range { - let item = self.get_slot_cloned(index); - if let ItemSlot::Empty = &item { - self.set_slot(clicked_stack, index); - self.set_slot(item, slot); - break; - } - } - } - } - ClickMode::NumberKey => { - let slot = packet.slot_id as usize; - let button = packet.used_button as usize; - - if is_valid_range(slot) && button <= 9 { - - // this is what hypixel does, that allows ghost pickaxes - let to_slot = 36 + button; - let item = self.get_slot_cloned(slot); - - if to_slot == slot { - packet_buffer.write_packet(&SetSlot { - window_id: 0, - slot: slot as i16, - item_stack: item.get_item_stack(), - }) - } else { - let item_to = self.get_slot_cloned(to_slot); - self.set_slot(item, to_slot); - self.set_slot(item_to, slot); - } - } - } - ClickMode::MiddleClick => { - - } - ClickMode::Drop => { - let slot = packet.slot_id as usize; - if is_valid_range(slot) { - packet_buffer.write_packet(&SetSlot { - window_id: 0, - slot: packet.slot_id, - item_stack: self.get_slot_cloned(slot).get_item_stack(), - }) - } - } - ClickMode::Drag => {} - ClickMode::DoubleClick => {} - } - false - } -} - -fn is_valid_range(index: usize) -> bool { - index >= 9 && index <= 43 -} diff --git a/src/server/player/mod.rs b/src/server/player/mod.rs deleted file mode 100644 index 072f481..0000000 --- a/src/server/player/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod inventory; -pub mod container_ui; -pub mod scoreboard; -pub mod player; -pub mod attribute; -pub mod packet_handling; \ No newline at end of file diff --git a/src/server/player/packet_handling.rs b/src/server/player/packet_handling.rs deleted file mode 100644 index 8a56d75..0000000 --- a/src/server/player/packet_handling.rs +++ /dev/null @@ -1,252 +0,0 @@ -use crate::net::packets::packet::ProcessPacket; -use crate::net::protocol::play::clientbound::{BlockChange, TabCompleteReply}; -use crate::net::protocol::play::serverbound::*; -use crate::server::commands::Command; -use crate::server::items::Item; -use crate::server::player::container_ui::UI; -use crate::server::player::inventory::ItemSlot; -use crate::server::player::player::Player; -use std::time::{SystemTime, UNIX_EPOCH}; - -impl ProcessPacket for KeepAlive { - fn process_with_player(&self, player: &mut Player) { - if player.last_keep_alive == self.id { - if let Ok(since) = SystemTime::now().duration_since(UNIX_EPOCH) { - let since = since.as_millis() as i32 - player.last_keep_alive; - player.ping = (player.ping * 3 + since) / 4; - println!("Ping: {}", player.ping); - } - } - } -} - -impl ProcessPacket for ChatMessage { - fn process_with_player(&self, player: &mut Player) { - if self.message.starts_with("/") { - let command = self.message.strip_prefix("/").unwrap(); - if let Err(e) = Command::handle(command, player.world_mut(), player) { - eprintln!("cmd failed {e}") - }; - } - } -} - -impl ProcessPacket for UseEntity { - fn process_with_player(&self, player: &mut Player) { - if let Some((entity, entity_impl)) = player.world_mut().entities.get_mut(&self.entity_id.0) { - entity_impl.interact(entity, player, &self.action) - } - } -} - -// I don't know if any implementation will be needed, -// but just in case imma keep it here -impl ProcessPacket for PlayerUpdate {} - -// anti cheat stuff vvv important to do for all 3 - -impl ProcessPacket for PlayerPosition { - fn process_with_player(&self, player: &mut Player) { - player.set_position(self.x, self.y, self.z) - } -} - -impl ProcessPacket for PlayerLook { - fn process_with_player(&self, player: &mut Player) { - player.yaw = self.yaw; - player.pitch = self.pitch; - } -} - -impl ProcessPacket for PlayerPositionLook { - fn process_with_player(&self, player: &mut Player) { - player.set_position(self.x, self.y, self.z); - player.yaw = self.yaw; - player.pitch = self.pitch; - } -} - -impl ProcessPacket for PlayerDigging { - fn process_with_player(&self, player: &mut Player) { - let world = player.world_mut(); - match self.action { - PlayerDiggingAction::StartDestroyBlock => { - // todo: - // when block toughness is added, - // replace check with if vanilla toughness would match - if let Some(ItemSlot::Filled(Item::DiamondPickaxe)) = player.inventory.get_hotbar_slot(player.held_slot as usize) { - let block = world.get_block_at(self.position.x, self.position.y, self.position.z); - player.write_packet(&BlockChange { - block_pos: self.position, - block_state: block.get_block_state_id(), - }) - } - } - PlayerDiggingAction::FinishDestroyBlock => { - let block = world.get_block_at(self.position.x, self.position.y, self.position.z); - player.write_packet(&BlockChange { - block_pos: self.position, - block_state: block.get_block_state_id(), - }) - } - _ => {} - } - } -} - -impl ProcessPacket for PlayerBlockPlacement { - fn process_with_player(&self, player: &mut Player) { - // todo: - // - improve accuracy - // - prevent clicking from a distance - let world = player.world_mut(); - if !self.position.is_invalid() { - // im considering instead of this, - // just pass this to the dungeon, which checks doors and such - - let mut pos = self.position.clone(); - match self.placed_direction { - 0 => pos.y -= 1, - 1 => pos.y += 1, - 2 => pos.z -= 1, - 3 => pos.z += 1, - 4 => pos.x -= 1, - _ => pos.x += 1, - } - - let block = world.get_block_at(pos.x, pos.y, pos.z); - player.write_packet(&BlockChange { - block_pos: pos, - block_state: block.get_block_state_id() - }); - - if let Some(interact_block) = world.interactable_blocks.get(&self.position) { - interact_block.interact(player, &self.position); - } - } else { - player.handle_right_click(); - } - // player.sync_inventory(); - } -} - -impl ProcessPacket for HeldItemChange { - fn process_with_player(&self, player: &mut Player) { - // warn player if invalid packets - let item_slot = self.slot_id.clamp(0, 8) as u8; - player.held_slot = item_slot; - } -} - -// will be useful if we want to add stuff like mage beam -impl ProcessPacket for ArmSwing {} - -impl ProcessPacket for PlayerAction { - fn process_with_player(&self, player: &mut Player) { - match self.action { - PlayerActionType::StartSneaking => player.is_sneaking = true, - PlayerActionType::StopSneaking => player.is_sneaking = false, - _ => {} - } - } -} - -impl ProcessPacket for CloseWindow { - fn process_with_player(&self, player: &mut Player) { - player.open_ui(UI::None) - } -} - -impl ProcessPacket for ClickWindow { - fn process_with_player(&self, player: &mut Player) { - if player.current_ui == UI::None - || (player.window_id != self.window_id && player.current_ui != UI::Inventory) - { - player.sync_inventory(); - return; - } - player.current_ui.clone().handle_click_window(self, player); - } -} - -impl ProcessPacket for ConfirmTransaction { - // wd sync stuff -} - -impl ProcessPacket for TabComplete { - fn process_with_player(&self, player: &mut Player) { - if !self.message.starts_with("/") { - return; - } - let parts: Vec<&str> = self.message.split_whitespace().collect(); - let command_name = parts[0].strip_prefix("/").unwrap(); - - if command_name.is_empty() { - player.write_packet(&TabCompleteReply { - matches: Command::list().iter().map(|cmd| format!("/{}", cmd.name())).collect(), - }); - return - } - - if let Some(command) = Command::find(command_name) { - let args = &parts[1..]; - - let next_arg = self.message.ends_with(' '); - - if args.is_empty() && !next_arg { - // user input a valid command but has not hit space, so we shouldn't provide any completions. - // there might be a better way to do this somewhere else but idk atm. - return; - } - - let current_arg = if next_arg { - args.len() - } else { - args.len().saturating_sub(1) - }; - - let command_args = command.args(player.world_mut(), player); - - if current_arg >= command_args.len() { - // user has input too many arguments; so we just return here. - return; - } - - let completions = { - let arg = &command_args.get(current_arg); - if arg.is_none() { return; } - &arg.unwrap().completions - }; - - let matches: Vec = if next_arg || args.is_empty() { - completions.to_vec() - } else { - completions.iter().filter(|cmp| cmp.starts_with(args.last().unwrap_or(&""))).cloned().collect() - }; - - player.write_packet(&TabCompleteReply { - matches - }); - } else { - let commands = Command::list().iter().filter(|cmd| cmd.name().starts_with(command_name)).map(|cmd| format!("/{}", cmd.name())).collect(); - player.write_packet(&TabCompleteReply { - matches: commands - }); - } - } -} - -impl ProcessPacket for ClientSettings { - // render distance stuff -} - -impl ProcessPacket for ClientStatus { - fn process_with_player(&self, player: &mut Player) { - match self { - ClientStatus::OpenInventory => { - player.open_ui(UI::Inventory) - } - _ => {} - } - } -} \ No newline at end of file diff --git a/src/server/player/player.rs b/src/server/player/player.rs deleted file mode 100644 index 8ecc2c7..0000000 --- a/src/server/player/player.rs +++ /dev/null @@ -1,232 +0,0 @@ -use crate::net::internal_packets::NetworkThreadMessage; -use crate::net::packets::packet::IdentifiedPacket; -use crate::net::packets::packet_buffer::PacketBuffer; -use crate::net::packets::packet_serialize::PacketSerializable; -use crate::net::protocol::play::clientbound::{Chat, OpenWindow, SetSlot, WindowItems}; -use crate::server::entity::entity::EntityId; -use crate::server::player::container_ui::UI; -use crate::server::player::inventory::{Inventory, ItemSlot}; -use crate::server::player::scoreboard::Scoreboard; -use crate::server::server::Server; -use crate::server::utils::aabb::AABB; -use crate::server::utils::chat_component::chat_component_text::ChatComponentTextBuilder; -use crate::server::utils::dvec3::DVec3; -use crate::server::world::World; -use std::collections::HashMap; -use tokio::sync::mpsc::UnboundedSender; -use uuid::Uuid; - -/// type alias to represent a client's user id. -/// -/// alias for a u32 -pub type ClientId = u32; - -// add uuid -#[derive(Debug, Clone)] -pub struct GameProfileProperty { - pub value: String, - pub signature: Option -} - -#[derive(Debug, Clone)] -pub struct GameProfile { - pub uuid: Uuid, - pub username: String, - pub properties: HashMap -} - -#[derive(Debug)] -pub struct Player { - pub server: *mut Server, - pub packet_buffer: PacketBuffer, - pub network_tx: UnboundedSender, - - pub profile: GameProfile, - pub client_id: ClientId, - pub entity_id: EntityId, - - pub position: DVec3, - pub yaw: f32, - pub pitch: f32, - pub on_ground: bool, - - pub last_position: DVec3, - pub last_yaw: f32, - pub last_pitch: f32, - - pub ticks_existed: u32, - pub last_keep_alive: i32, - pub ping: i32, - - pub is_sneaking: bool, - - pub inventory: Inventory, - pub held_slot: u8, - - pub window_id: i8, - pub current_ui: UI, - // pub current_ui: UI, - - pub sidebar: Scoreboard, -} - -impl Player { - - pub fn new( - server: &mut Server, - client_id: ClientId, - profile: GameProfile, - position: DVec3, - yaw: f32, - pitch: f32, - ) -> Self { - Self { - server, - packet_buffer: PacketBuffer::new(), - network_tx: server.network_tx.clone(), - profile, - client_id, - entity_id: server.world.new_entity_id(), - - position, - on_ground: false, - yaw, - pitch, - last_position: DVec3::ZERO, - last_yaw: 0.0, - last_pitch: 0.0, - - ticks_existed: 0, - last_keep_alive: -1, - ping: -1, - is_sneaking: false, - - inventory: Inventory::empty(), - held_slot: 0, - - window_id: 1, - current_ui: UI::None, - - sidebar: Scoreboard::new(), - - // observed_entities: HashSet::new(), - } - } - - /// gets a reference to the server - pub fn server_mut<'a>(&self) -> &'a mut Server { - unsafe { self.server.as_mut().expect("Server is null") } - } - - /// gets a reference to the world - pub fn world_mut<'a>(&self) -> &'a mut World { - &mut self.server_mut().world - } - - pub fn write_packet

(&mut self, packet: &P) { - self.packet_buffer.write_packet(packet); - } - - pub fn flush_packets(&mut self) { - if !self.packet_buffer.buffer.is_empty() { - let _ = self.network_tx.send(self.packet_buffer.get_packet_message(&self.client_id)); - } - } - - // todo: tick function here?, - // pub fn tick(&mut self) -> anyhow::Result<()> { - // self.ticks_existed += 1; - // self.send_packet(ConfirmTransaction::new())?; - // Ok(()) - // } - - /// updates player position - pub fn set_position(&mut self, x: f64, y: f64, z: f64) { - // self.last_position = self.position; - self.position = DVec3::new(x, y, z); - } - - pub fn collision_aabb(&self) -> AABB { - let w = 0.3; - let h = 1.8; - AABB::new( - DVec3::new(self.position.x - w, self.position.y, self.position.z - w), - DVec3::new(self.position.x + w, self.position.y + h, self.position.z + w), - ) - } - - pub fn handle_left_click(&mut self) { - - } - - pub fn handle_right_click(&mut self) { - if let Some(ItemSlot::Filled(item)) = self.inventory.get_hotbar_slot(self.held_slot as usize) { - item.on_right_click(self).unwrap() - } - } - - pub fn open_ui(&mut self, ui: UI) { - self.current_ui = ui; - // kind of temporary solution, - // instead of just putting the item in an available slot if it is dragged - if ui == UI::Inventory { - if let ItemSlot::Filled(item) = self.inventory.dragged_item { - self.write_packet(&SetSlot { - window_id: -1, - slot: 0, - item_stack: Some(item.get_item_stack()), - }) - } - } - if let Some(container_data) = ui.get_container_data() { - self.window_id += 1; - self.write_packet(&OpenWindow { - window_id: self.window_id, - inventory_type: "minecraft:container".into(), - window_title: ChatComponentTextBuilder::new(container_data.title).build(), - slot_count: container_data.slot_amount, - }); - self.sync_inventory(); - } - } - - pub fn sync_inventory(&mut self) { - let mut inv_items = Vec::new(); - - for item in &self.inventory.items { - inv_items.push(item.get_item_stack()) - } - - if let Some(items) = self.current_ui.get_container_contents(self.server_mut(), &self.client_id) { - self.write_packet(&WindowItems { - window_id: self.window_id, - items, - }); - } - - self.write_packet(&WindowItems { - window_id: 0, - items: inv_items, - }); - if let UI::Inventory = self.current_ui { - self.write_packet(&SetSlot { - window_id: -1, - slot: 0, - item_stack: self.inventory.dragged_item.get_item_stack(), - }) - } else { - self.write_packet(&SetSlot { - window_id: -1, - slot: 0, - item_stack: None, - }) - } - } - - pub fn send_message(&mut self, msg: &str) { - self.write_packet(&Chat { - component: ChatComponentTextBuilder::new(msg).build(), - chat_type: 0 - }) - } -} \ No newline at end of file diff --git a/src/server/player/scoreboard.rs b/src/server/player/scoreboard.rs deleted file mode 100644 index bb04ccd..0000000 --- a/src/server/player/scoreboard.rs +++ /dev/null @@ -1,242 +0,0 @@ -use crate::net::packets::packet_buffer::PacketBuffer; -use crate::net::protocol::play::clientbound::{DisplayScoreboard, ScoreboardObjective, Teams, UpdateScore}; -use crate::net::var_int::VarInt; -use crate::server::utils::sized_string::SizedString; - -const OBJECTIVE_NAME: &str = "SBScoreboard"; - -// for team packet: -pub const CREATE_TEAM: i8 = 0; -pub const REMOVE_TEAM: i8 = 1; -pub const UPDATE_TEAM: i8 = 2; -pub const ADD_PLAYER: i8 = 3; - -pub const REMOVE_PLAYER: i8 = 4; - -// for scoreboard objective packet -pub const ADD_OBJECTIVE: i8 = 0; -pub const UPDATE_NAME: i8 = 2; - -/// wrapper for Vec>, -/// which includes functions to push strings (and strs), splitting their lines and converting to sized strings -#[derive(Debug)] -pub struct ScoreboardLines(pub Vec>); - -impl ScoreboardLines { - #[inline(always)] - pub fn push(&mut self, string: String) { - self.0.extend(string.lines().map(|str| str.into())); - } - #[inline(always)] - pub fn push_str(&mut self, string: &str) { - self.0.extend(string.lines().map(|str| str.into())); - } - #[inline(always)] - pub fn new_line(&mut self) { - self.0.push("".into()); - } -} - -/// Scoreboard -/// -/// Contains a list of strings, which are sent to the client to display on their scoreboard. -/// This is designed so that the scoreboard can be updated in one go per tick, using [Scoreboard::update]. -#[derive(Debug)] -pub struct Scoreboard { - lines: ScoreboardLines, -} - -impl Scoreboard { - - pub fn new() -> Scoreboard { - Scoreboard { - lines: ScoreboardLines(Vec::new()), - } - } - - /// must be sent to client when it is initialized - /// if not sent scoreboard will not display on the client. - pub fn write_init_packets(&self, packet_buffer: &mut PacketBuffer) { - packet_buffer.write_packet(&ScoreboardObjective { - objective_name: OBJECTIVE_NAME.into(), - objective_value: OBJECTIVE_NAME.into(), - render_type: "integer", - mode: 0, - }); - packet_buffer.write_packet(&DisplayScoreboard { - position: 1, - score_name: OBJECTIVE_NAME.into(), - }); - } - - /// this function updates the scoreboard with a new list - /// and sends packets according to what has changed - /// - /// the first index always represents the header - pub fn write_update(&mut self, lines: ScoreboardLines, packet_buffer: &mut PacketBuffer) { - - let (old_len, new_len) = (self.lines.0.len(), lines.0.len()); - let is_size_different = new_len != old_len; - - if is_size_different && old_len != 0 { - for (i, _) in self.lines.0.iter().enumerate() { - // skip header - if i == 0 { - continue; - } - - let name = format!("{}", i); - let team = format!("team_{}", old_len - i); - - packet_buffer.write_packet(&UpdateScore { - name: hide_name(&name), - objective: OBJECTIVE_NAME.into(), - value: VarInt(0), - action: VarInt(1), - }); - packet_buffer.write_packet(&Teams { - name: team.into(), - display_name: "".into(), - prefix: "".into(), - suffix: "".into(), - name_tag_visibility: "always".into(), - color: -1, - players: vec![], - action: REMOVE_TEAM, - friendly_flags: 0, - }); - } - } - - for i in 0..new_len { - let new_str = &lines.0[i]; - // might be out of index from size changing, cant use [] to access - let old_str = &self.lines.0.get(i); - - if old_str.is_some_and(|str| str == new_str) && !is_size_different { - continue; - } - // index 0 is always header - if i == 0 { - packet_buffer.write_packet(&ScoreboardObjective { - objective_name: OBJECTIVE_NAME.into(), - objective_value: new_str.clone(), - render_type: "integer", - mode: UPDATE_NAME, - }); - } else { - let line_index = new_len - i; - let name = format!("{}", i); - let team = format!("team_{}", line_index); - - let (first_half, second_half) = split_string(new_str); - - if is_size_different { - packet_buffer.write_packet(&Teams { - name: team.clone().into(), - display_name: team.clone().into(), - prefix: "".into(), - suffix: "".into(), - name_tag_visibility: "always".into(), - color: 15, - players: vec![], - action: CREATE_TEAM, - friendly_flags: 3, - }); - packet_buffer.write_packet(&UpdateScore { - name: hide_name(&name), - objective: OBJECTIVE_NAME.into(), - value: VarInt(line_index as i32), - action: VarInt(0), - }); - } - - packet_buffer.write_packet(&Teams { - name: team.clone().into(), - display_name: team.clone().into(), - prefix: first_half, - suffix: second_half, - name_tag_visibility: "always".into(), - color: 15, - players: vec![], - action: UPDATE_TEAM, - friendly_flags: 3, - }); - - if is_size_different { - packet_buffer.write_packet(&Teams { - name: team.clone().into(), - display_name: team.into(), - prefix: "".into(), - suffix: "".into(), - name_tag_visibility: "always".into(), - color: -1, - players: vec![hide_name(&name)], - action: ADD_PLAYER, - friendly_flags: 0, - }); - } - } - } - self.lines = lines; - } - -} - -fn hide_name(key: &str) -> SizedString<40> { - let mut result = String::new(); - for char in key.chars() { - result.push('§'); - result.push(char); - } - result.push_str("§r"); - result.into() -} - -fn split_string(string: &SizedString<32>) -> (SizedString<16>, SizedString<16>) { - let mut first_half = String::with_capacity(16); - let mut second_half = String::with_capacity(16); - let mut last_char = None; - let mut last_color_code = None; - for (i, c) in string.chars().enumerate() { - if i < 16 { - if last_char == Some('§') { - last_color_code = Some(c); - } - last_char = Some(c); - first_half.push(c); - } else { - if let Some(last_code) = last_color_code { - second_half.push('§'); - second_half.push(last_code); - last_color_code = None; - } - second_half.push(c); - } - } - - (first_half.into(), second_half.into()) -} - -// fn first_half(string: &SizedString<32>) -> SizedString<16> { -// string.chars().take(16).collect::().into() -// } -// -// pub fn second_half(string: &SizedString<32>) -> SizedString<16> { -// // this kind of hurts me but im too lazy to try to optimize this -// let mut result = string.chars().skip(16).collect::(); -// if let Some(c) = get_last_color_code(&first_half(string)) { -// result = format!("§{}{}", c, result) -// } -// result.into() -// } - -// fn get_last_color_code(string: &SizedString<16>) -> Option { -// let mut chars = string.chars().rev().peekable(); -// while let Some(c) = chars.next() { -// if c != '§' && chars.peek() == Some(&'§') { -// return Some(c) -// } -// } -// None -// } \ No newline at end of file diff --git a/src/server/server.rs b/src/server/server.rs deleted file mode 100644 index cc8d3cc..0000000 --- a/src/server/server.rs +++ /dev/null @@ -1,197 +0,0 @@ -use crate::dungeon::dungeon::Dungeon; -use crate::net::internal_packets::{MainThreadMessage, NetworkThreadMessage}; -use crate::net::packets::packet::ProcessPacket; -use crate::net::protocol::play::clientbound::{AddEffect, EntityProperties, JoinGame, PlayerAbilities, PlayerListHeaderFooter, PositionLook}; -use crate::net::var_int::VarInt; -use crate::server::items::Item; -use crate::server::player::attribute::{Attribute, AttributeMap, AttributeModifier}; -use crate::server::player::inventory::ItemSlot; -use crate::server::player::player::Player; -use crate::server::utils::player_list::footer::footer; -use crate::server::utils::player_list::header::header; -use crate::server::utils::tasks::Task; -use crate::server::world; -use crate::server::world::World; -use anyhow::{Context, Result}; -use tokio::sync::mpsc::UnboundedSender; -use uuid::Uuid; - -pub struct Server { - pub network_tx: UnboundedSender, - /// the main world for this impl. - /// in minecraft a server can have more than 1 world. - /// however we don't really need that, so for now only 1 main world will be supported - pub world: World, - pub dungeon: Dungeon, - - pub tasks: Vec, - // im not sure about having players in server directly. -} -impl Server { - pub fn initialize_with_dungeon( - network_tx: UnboundedSender, - dungeon: Dungeon, - ) -> Server { - Server { - network_tx, - world: World::new(), - dungeon, - tasks: Vec::new(), - } - } - - pub fn schedule(&mut self, run_in: u32, task: impl FnOnce(&mut Self) + 'static) { - self.tasks.push(Task::new(run_in, task)); - } - - pub fn process_event(&mut self, event: MainThreadMessage) -> Result<()> { - match event { - MainThreadMessage::NewPlayer { client_id, profile } => { - println!("added player with id {client_id}"); - - let spawn_pos = self.world.spawn_point; - - let mut player = Player::new( - self, - client_id, - profile, - spawn_pos, - self.world.spawn_yaw, - self.world.spawn_pitch, - ); - println!("player entity id: {}", player.entity_id); - - player.write_packet(&JoinGame { - entity_id: player.entity_id, - gamemode: 0, - dimension: 0, - difficulty: 0, - max_players: 0, - level_type: "", - reduced_debug_info: false, - }); - player.write_packet(&PositionLook { - x: player.position.x, - y: player.position.y, - z: player.position.z, - yaw: player.yaw, - pitch: player.pitch, - flags: 0, - }); - - let chunk_x = (player.position.x.floor() as i32) >> 4; - let chunk_z = (player.position.z.floor() as i32) >> 4; - - let view_distance = world::VIEW_DISTANCE as i32 + 1; - - self.world.chunk_grid.for_each_in_view( - chunk_x, - chunk_z, - view_distance, - |chunk, x, z| { - player.write_packet(&chunk.get_chunk_data(x, z, true)); - - for entity_id in chunk.entities.iter_mut() { - let (entity, entity_impl) = &mut self.world.entities.get_mut(&entity_id).unwrap(); - entity.write_spawn_packet(&mut player.packet_buffer); - entity_impl.spawn(entity, &mut player.packet_buffer); - } - } - ); - - - player.sidebar.write_init_packets(&mut player.packet_buffer); - - // player.write_packet(&self.world.player_info.new_packet()); - - player.write_packet(&PlayerListHeaderFooter { - header: header(), - footer: footer(), - }); - player.write_packet(&AddEffect { - entity_id: VarInt(player.entity_id), - effect_id: 3, - amplifier: 2, - duration: VarInt(200), - hide_particles: true, - }); - player.write_packet(&AddEffect { - entity_id: VarInt(player.entity_id), - effect_id: 16, - amplifier: 0, - duration: VarInt(400), - hide_particles: true, - }); - - // let mut map = DungeonMap::new(); - // - // for i in 1..36 { - // for j in 0..4 { - // map.fill_px(i * 3, j * 3, 3, 3, ((i * 4) + j) as u8) - // } - // } - // - // player.write_packet(&Maps { - // id: 1, - // scale: 0, - // columns: 128, - // rows: 128, - // x: 0, - // z: 0, - // map_data: map.map_data.to_vec(), - // }); - - player.inventory.set_slot(ItemSlot::Filled(Item::AspectOfTheVoid), 36); - player.inventory.set_slot(ItemSlot::Filled(Item::DiamondPickaxe), 37); - player.inventory.set_slot(ItemSlot::Filled(Item::MagicalMap), 44); - - player.sync_inventory(); - - let playerspeed: f32 = 500.0 * 0.001; - - let mut attributes = AttributeMap::new(); - attributes.insert(Attribute::MovementSpeed, playerspeed as f64); - attributes.add_modify(Attribute::MovementSpeed, AttributeModifier { - id: Uuid::parse_str("662a6b8d-da3e-4c1c-8813-96ea6097278d")?, - amount: 0.3, // this is always 0.3 for hypixels speed stuff - operation: 2, - }); - - player.write_packet(&EntityProperties { - entity_id: VarInt(player.entity_id), - properties: attributes, // this gets sent every time you sprint for some reason - }); - - player.write_packet(&PlayerAbilities { - invulnerable: false, - flying: false, - allow_flying: false, - creative_mode: false, - fly_speed: 0.0, - walk_speed: playerspeed, - }); - - // let mut buf = Vec::new(); - // "hypixel".write(&mut buf); - - // player.write_packet(&CustomPayload { - // channel: "MC|Brand".into(), - // data: &buf, - // }); - - player.flush_packets(); - - self.world.players.insert(client_id, player); - }, - MainThreadMessage::ClientDisconnected { client_id } => { - self.world.players.remove(&client_id); - println!("Client {} disconnected", client_id); - }, - MainThreadMessage::PacketReceived { client_id, packet } => { - let player = self.world.players.get_mut(&client_id).context(format!("Player not found for id {client_id}"))?; - packet.process_with_player(player); - }, - } - Ok(()) - } -} \ No newline at end of file diff --git a/src/server/utils/aabb.rs b/src/server/utils/aabb.rs deleted file mode 100644 index 5903f95..0000000 --- a/src/server/utils/aabb.rs +++ /dev/null @@ -1,35 +0,0 @@ -use crate::server::utils::dvec3::DVec3; - -#[derive(Debug, Clone)] -pub struct AABB { - pub min: DVec3, - pub max: DVec3, -} - -impl AABB { - - pub const ZERO: AABB = AABB { - min: DVec3::ZERO, - max: DVec3::ZERO, - }; - - pub fn new(min: DVec3, max: DVec3) -> Self { - Self { - min, - max, - } - } - - pub fn intersects(&self, other: &AABB) -> bool { - self.min.x <= other.max.x && self.max.x >= other.min.x && - self.min.y <= other.max.y && self.max.y >= other.min.y && - self.min.z <= other.max.z && self.max.z >= other.min.z - } - - pub const fn from_height_width(height: f64, width: f64) -> Self { - Self { - min: DVec3 { x: -width / 2.0, y: 0.0, z: -width / 2.0 }, - max: DVec3 { x: width / 2.0, y: height, z: width / 2.0 } - } - } -} \ No newline at end of file diff --git a/src/server/utils/chat_component/chat_component.rs b/src/server/utils/chat_component/chat_component.rs deleted file mode 100644 index f2a6894..0000000 --- a/src/server/utils/chat_component/chat_component.rs +++ /dev/null @@ -1,7 +0,0 @@ -// #[derive(Serialize, Deserialize, Debug, Clone)] -// pub enum ChatComponent { -// Text(ChatComponentText), -// Scoreboard -// } -// - diff --git a/src/server/utils/chat_component/mod.rs b/src/server/utils/chat_component/mod.rs deleted file mode 100644 index 1bea78c..0000000 --- a/src/server/utils/chat_component/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod chat_component; -pub mod chat_component_text; \ No newline at end of file diff --git a/src/server/utils/color.rs b/src/server/utils/color.rs deleted file mode 100644 index bf4267b..0000000 --- a/src/server/utils/color.rs +++ /dev/null @@ -1,23 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Serialize, Deserialize, Debug, Clone)] -#[serde(rename_all = "snake_case")] -pub enum MCColors { - Black, - DarkBlue, - DarkGreen, - DarkCyan, - DarkRed, - DarkPurple, - Gold, - Gray, - DarkGray, - Blue, - Green, - Aqua, - Red, - LightPurple, - Yellow, - White, - Reset, -} \ No newline at end of file diff --git a/src/server/utils/dvec3.rs b/src/server/utils/dvec3.rs deleted file mode 100644 index a89461a..0000000 --- a/src/server/utils/dvec3.rs +++ /dev/null @@ -1,155 +0,0 @@ -use crate::server::block::block_position::BlockPos; -use crate::server::utils::direction::Direction; -use std::ops::{Add, Div, Mul, Sub}; - -/// Double (f64) Vec3 -#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)] -pub struct DVec3 { - pub x: f64, - pub y: f64, - pub z: f64, -} - -impl DVec3 { - - pub const ZERO: DVec3 = DVec3 { - x: 0.0, - y: 0.0, - z: 0.0 - }; - - pub fn new(x: f64, y: f64, z: f64) -> DVec3 { - DVec3 { - x, - y, - z, - } - } - - pub fn from_centered(block_pos: &BlockPos) -> Self { - Self::new(block_pos.x as f64 + 0.5, block_pos.y as f64 + 0.5, block_pos.z as f64 + 0.5) - } - - pub fn from_x(x: f64) -> DVec3 { - DVec3 { - x, - y: 0.0, - z: 0.0, - } - } - - pub fn from_y(y: f64) -> DVec3 { - DVec3 { - x: 0.0, - y, - z: 0.0, - } - } - - pub fn from_z(z: f64) -> DVec3 { - DVec3 { - x: 0.0, - y: 0.0, - z, - } - } - - pub fn add_x(&mut self, amount: f64) -> Self { - self.x += amount; - *self - } - - pub fn add_y(&mut self, amount: f64) -> Self { - self.y += amount; - *self - } - - pub fn add_z(&mut self, amount: f64) -> Self { - self.z += amount; - *self - } - - pub fn normalize(&self) -> DVec3 { - let len = (self.x * self.x + self.y * self.y + self.z * self.z).sqrt(); - if len < 1.0e-4 { - DVec3 { x: 0.0, y: 0.0, z: 0.0 } - } else { - DVec3 { x: self.x / len, y: self.y / len, z: self.z / len } - } - } - - pub fn rotate(&self, rotation: Direction) -> Self { - match rotation { - Direction::North => Self { x: self.x, y: self.y, z: self.z }, - Direction::East => Self { x: -self.z, y: self.y, z: self.x }, - Direction::South => Self { x: -self.x, y: self.y, z: -self.z }, - Direction::West => Self { x: self.z, y: self.y, z: -self.x }, - _ => Self { x: self.x, y: self.y, z: self.z }, - } - } - - pub fn distance_to(&self, other: &DVec3) -> f64 { - self.distance_squared(other).sqrt() - } - - pub fn distance_squared(&self, other: &DVec3) -> f64 { - let x = self.x - other.x; - let y = self.y - other.y; - let z = self.z - other.z; - z.mul_add(z, x.mul_add(x, y * y)) - } -} - -impl Add for DVec3 { - type Output = DVec3; - - fn add(self, rhs: Self) -> Self { - Self { - x: self.x + rhs.x, - y: self.y + rhs.y, - z: self.z + rhs.z, - } - } -} - -impl Sub for DVec3 { - type Output = DVec3; - - fn sub(self, rhs: Self) -> Self { - Self { - x: self.x - rhs.x, - y: self.y - rhs.y, - z: self.z - rhs.z, - } - } -} - -impl Div for DVec3 { - type Output = DVec3; - - fn div(self, rhs: Self) -> Self { - Self { - x: self.x / rhs.x, - y: self.y / rhs.y, - z: self.z / rhs.z, - } - } -} - -impl Mul for DVec3 { - type Output = DVec3; - - fn mul(self, rhs: Self) -> Self { - Self { - x: self.x * rhs.x, - y: self.y * rhs.y, - z: self.z * rhs.z, - } - } -} - -impl From<&BlockPos> for DVec3 { - fn from(pos: &BlockPos) -> Self { - Self::new(pos.x as f64, pos.y as f64, pos.z as f64) - } -} \ No newline at end of file diff --git a/src/server/utils/fvec3.rs b/src/server/utils/fvec3.rs deleted file mode 100644 index 6d9147e..0000000 --- a/src/server/utils/fvec3.rs +++ /dev/null @@ -1,31 +0,0 @@ -use crate::server::utils::dvec3::DVec3; - -#[derive(Debug, Copy, Clone, PartialEq, PartialOrd)] -pub struct FVec3 { - pub x: f32, - pub y: f32, - pub z: f32, -} - -impl FVec3 { - - pub const ZERO: FVec3 = FVec3 { - x: 0.0, - y: 0.0, - z: 0.0 - }; - - pub fn new(x: f32, y: f32, z: f32) -> Self { - Self { x, y, z } - } -} - -impl From for FVec3 { - fn from(value: DVec3) -> Self { - Self { - x: value.x as f32, - y: value.y as f32, - z: value.z as f32, - } - } -} \ No newline at end of file diff --git a/src/server/utils/mod.rs b/src/server/utils/mod.rs deleted file mode 100644 index 34160a4..0000000 --- a/src/server/utils/mod.rs +++ /dev/null @@ -1,12 +0,0 @@ -pub mod dvec3; -pub mod aabb; -pub mod nbt; -pub mod chat_component; -pub mod color; -pub mod direction; -pub mod particles; -pub mod player_list; -pub mod sounds; -pub mod sized_string; -pub mod fvec3; -pub mod tasks; \ No newline at end of file diff --git a/src/server/utils/nbt/deserialize.rs b/src/server/utils/nbt/deserialize.rs deleted file mode 100644 index 8366382..0000000 --- a/src/server/utils/nbt/deserialize.rs +++ /dev/null @@ -1,110 +0,0 @@ -use crate::server::utils::nbt::nbt::{NBTNode, NBT}; -use crate::server::utils::nbt::serialize::*; -use bytes::{Buf, BytesMut}; -use std::collections::HashMap; - -// should use anyhow, client can maliciously send invalid nbt data -// does assume its all correct. -pub fn deserialize_nbt(buffer: &mut BytesMut) -> Option { - let tag = buffer.get_u8(); - // might issue if it isn't - if tag != TAG_COMPOUND_ID { - return None; - } - - let name = read_string(buffer); - let node = read_entry(buffer, tag); - - if let NBTNode::Compound(nodes) = node { - return Some(NBT { - root_name: name, - nodes, - }) - } - None -} - -fn read_entry(buffer: &mut BytesMut, tag: u8) -> NBTNode { - match tag { - TAG_BYTE_ID => { - let value = buffer.get_i8(); - NBTNode::Byte(value) - } - TAG_SHORT_ID => { - let value = buffer.get_i16(); - NBTNode::Short(value) - } - TAG_INT_ID => { - let value = buffer.get_i32(); - NBTNode::Int(value) - } - TAG_LONG_ID => { - let value = buffer.get_i64(); - NBTNode::Long(value) - } - TAG_FLOAT_ID => { - let value = buffer.get_f32(); - NBTNode::Float(value) - } - TAG_DOUBLE_ID => { - let value = buffer.get_f64(); - NBTNode::Double(value) - } - - TAG_BYTE_ARRAY_ID => { - let array_len = buffer.get_i32() as usize; - let vec = buffer.split_to(array_len).to_vec(); - NBTNode::ByteArray(vec) - } - TAG_STRING_ID => { - let value = read_string(buffer); - NBTNode::String(value) - } - TAG_LIST_ID => { - let type_id = buffer.get_u8(); - let list_len = buffer.get_i32(); - let mut nodes: Vec = Vec::new(); - for _ in 0..list_len { - let node = read_entry(buffer, type_id); - nodes.push(node) - } - NBTNode::List { type_id, children: nodes } - } - TAG_COMPOUND_ID => { - let mut nodes: HashMap = HashMap::new(); - loop { - let tag = buffer.get_u8(); - if tag == TAG_END_ID { - break; - } else { - let name = read_string(buffer); - let node = read_entry(buffer, tag); - nodes.insert(name, node); - } - } - NBTNode::Compound(nodes) - } - TAG_INT_ARRAY_ID => { - let array_len = buffer.get_i32() as usize; - let mut vec: Vec = Vec::with_capacity(array_len); - for _ in 0..array_len { - vec.push(buffer.get_i32()) - } - NBTNode::IntArray(vec) - } - TAG_LONG_ARRAY_ID => { - let array_len = buffer.get_i32() as usize; - let mut vec: Vec = Vec::with_capacity(array_len); - for _ in 0..array_len { - vec.push(buffer.get_i64()) - } - NBTNode::LongArray(vec) - } - _ => unreachable!() - } -} - -fn read_string(buffer: &mut BytesMut) -> String { - let size = buffer.get_u16(); - String::from_utf8(buffer.split_to(size as usize).to_vec()).unwrap() -} \ No newline at end of file diff --git a/src/server/utils/nbt/mod.rs b/src/server/utils/nbt/mod.rs deleted file mode 100644 index 606fec5..0000000 --- a/src/server/utils/nbt/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod serialize; -pub mod deserialize; -pub mod nbt; \ No newline at end of file diff --git a/src/server/utils/nbt/nbt.rs b/src/server/utils/nbt/nbt.rs deleted file mode 100644 index 31d7afb..0000000 --- a/src/server/utils/nbt/nbt.rs +++ /dev/null @@ -1,91 +0,0 @@ -use crate::server::utils::nbt::serialize::TAG_STRING_ID; -use std::collections::HashMap; - -/// NBT -/// -/// This struct represents the root NBT Tag Compound. -#[derive(Debug, Clone, PartialEq)] -pub struct NBT { - pub root_name: String, - pub nodes: HashMap, -} - -impl NBT { - - /// Creates a new [NBT] struct with the provided nodes. - /// It does not have a root name - pub fn with_nodes(nodes: Vec<(String, NBTNode)>) -> NBT { - let mut map = HashMap::new(); - for (name, node) in nodes { - map.insert(name, node); - } - NBT { - root_name: "".to_string(), - nodes: map, - } - } - - /// creates a string nbt node - /// used for [NBTNode::Compound] and [NBT] - pub fn string(name: &str, value: &str) -> (String, NBTNode) { - (name.to_string(), NBTNode::String(value.to_string())) - } - - /// creates a compound node - /// used for [NBTNode::Compound] and [NBT] - pub fn compound(name: &str, nodes: Vec<(String, NBTNode)>) -> (String, NBTNode) { - let mut compound_map = HashMap::new(); - for (name, node) in nodes { - compound_map.insert(name, node); - } - (name.to_string(), NBTNode::Compound(compound_map)) - } - - /// creates a list node - /// used for [NBTNode::Compound] and [NBT] - pub fn list(name: &str, type_id: u8, list: Vec) -> (String, NBTNode) { - (name.to_string(), NBTNode::List { type_id, children: list }) - } - - pub fn byte(name: &str, value: i8) -> (String, NBTNode) { - (name.to_string(), NBTNode::Byte(value)) - } - - pub fn short(name: &str, value: i16) -> (String, NBTNode) { - (name.to_string(), NBTNode::Short(value)) - } - - pub fn int(name: &str, value: i32) -> (String, NBTNode) { - (name.to_string(), NBTNode::Int(value)) - } - - pub fn long(name: &str, value: i64) -> (String, NBTNode) { - (name.to_string(), NBTNode::Long(value)) - } - - /// takes a string, - /// splits it into lines and creates a list nbt node representing strings. - pub fn list_from_string(name: &str, string: &str) -> (String, NBTNode) { - let list = string - .lines() - .map(|line| NBTNode::String(line.to_string())) - .collect(); - (name.to_string(), NBTNode::List { type_id: TAG_STRING_ID, children: list }) - } -} - -#[derive(Debug, Clone, PartialEq)] -pub enum NBTNode { - Byte(i8), - Short(i16), - Int(i32), - Long(i64), - Float(f32), - Double(f64), - ByteArray(Vec), - String(String), - List { type_id: u8, children: Vec }, - Compound(HashMap), - IntArray(Vec), - LongArray(Vec), -} \ No newline at end of file diff --git a/src/server/utils/nbt/serialize.rs b/src/server/utils/nbt/serialize.rs deleted file mode 100644 index 69f212b..0000000 --- a/src/server/utils/nbt/serialize.rs +++ /dev/null @@ -1,211 +0,0 @@ -use crate::server::utils::nbt::nbt::{NBTNode, NBT}; - -pub const TAG_END_ID: u8 = 0; -pub const TAG_BYTE_ID: u8 = 1; -pub const TAG_SHORT_ID: u8 = 2; -pub const TAG_INT_ID: u8 = 3; -pub const TAG_LONG_ID: u8 = 4; -pub const TAG_FLOAT_ID: u8 = 5; -pub const TAG_DOUBLE_ID: u8 = 6; -pub const TAG_BYTE_ARRAY_ID: u8 = 7; -pub const TAG_STRING_ID: u8 = 8; -pub const TAG_LIST_ID: u8 = 9; -pub const TAG_COMPOUND_ID: u8 = 10; -pub const TAG_INT_ARRAY_ID: u8 = 11; -pub const TAG_LONG_ARRAY_ID: u8 = 12; - -pub fn serialize_nbt(nbt: &NBT) -> Vec { - let mut vec = Vec::new(); - vec.push(TAG_COMPOUND_ID); - write_string(&mut vec, &nbt.root_name); - for (str, node) in &nbt.nodes { - write_entry(str, node, &mut vec); - } - vec.push(TAG_END_ID); - vec -} - -// currently list is not done because im lazy -// it is quite simple tho - -pub fn write_entry(name: &str, node: &NBTNode, vec: &mut Vec) { - match node { - NBTNode::Byte(value) => { - vec.push(TAG_BYTE_ID); - write_string(vec, name); - vec.push(*value as u8) - } - NBTNode::Short(value) => { - vec.push(TAG_SHORT_ID); - write_string(vec, name); - vec.extend_from_slice(&value.to_be_bytes()) - } - NBTNode::Int(value) => { - vec.push(TAG_INT_ID); - write_string(vec, name); - vec.extend_from_slice(&value.to_be_bytes()) - } - NBTNode::Long(value) => { - vec.push(TAG_LONG_ID); - write_string(vec, name); - vec.extend_from_slice(&value.to_be_bytes()) - } - NBTNode::Float(value) => { - vec.push(TAG_FLOAT_ID); - write_string(vec, name); - vec.extend_from_slice(&value.to_be_bytes()) - } - NBTNode::Double(value) => { - vec.push(TAG_DOUBLE_ID); - write_string(vec, name); - vec.extend_from_slice(&value.to_be_bytes()) - } - NBTNode::ByteArray(value) => { - vec.push(TAG_BYTE_ARRAY_ID); - write_string(vec, name); - vec.extend_from_slice(&(value.len() as i32).to_be_bytes()); - vec.extend_from_slice(value); - } - NBTNode::String(value) => { - vec.push(TAG_STRING_ID); - write_string(vec, name); - write_string(vec, value); - } - NBTNode::List { type_id, children } => { - vec.push(TAG_LIST_ID); - write_string(vec, name); - vec.push(*type_id); - vec.extend_from_slice(&(children.len() as i32).to_be_bytes()); - for child in children { - write_unnamed_entry(child, vec); - } - } - NBTNode::Compound(nodes) => { - vec.push(TAG_COMPOUND_ID); - write_string(vec, name); - for (str, node) in nodes { - write_entry(str, node, vec); - } - vec.push(TAG_END_ID); - } - NBTNode::IntArray(values) => { - vec.push(TAG_INT_ARRAY_ID); - write_string(vec, name); - vec.extend_from_slice(&(values.len() as i32).to_be_bytes()); - for value in values { - vec.extend_from_slice(&value.to_be_bytes()); - } - } - NBTNode::LongArray(values) => { - vec.push(TAG_LONG_ARRAY_ID); - write_string(vec, name); - vec.extend_from_slice(&(values.len() as i32).to_be_bytes()); - for value in values { - vec.extend_from_slice(&value.to_be_bytes()); - } - } - } -} - -fn write_unnamed_entry(node: &NBTNode, vec: &mut Vec) { - match node { - NBTNode::Byte(value) => { - vec.push(*value as u8); - } - NBTNode::Short(value) => { - vec.extend_from_slice(&value.to_be_bytes()); - } - NBTNode::Int(value) => { - vec.extend_from_slice(&value.to_be_bytes()); - } - NBTNode::Long(value) => { - vec.extend_from_slice(&value.to_be_bytes()); - } - NBTNode::Float(value) => { - vec.extend_from_slice(&value.to_be_bytes()); - } - NBTNode::Double(value) => { - vec.extend_from_slice(&value.to_be_bytes()); - } - NBTNode::ByteArray(value) => { - vec.extend_from_slice(&(value.len() as i32).to_be_bytes()); - vec.extend_from_slice(value); - } - NBTNode::String(value) => { - write_string(vec, value); - } - NBTNode::List { type_id, children, .. } => { - vec.push(*type_id); - vec.extend_from_slice(&(children.len() as i32).to_be_bytes()); - for child in children { - write_unnamed_entry(child, vec); - } - } - NBTNode::Compound(nodes) => { - for (str, node) in nodes { - write_entry(str, node, vec); - } - vec.push(TAG_END_ID); - } - NBTNode::IntArray(values) => { - vec.extend_from_slice(&(values.len() as i32).to_be_bytes()); - for v in values { - vec.extend_from_slice(&v.to_be_bytes()); - } - } - NBTNode::LongArray(values) => { - vec.extend_from_slice(&(values.len() as i32).to_be_bytes()); - for v in values { - vec.extend_from_slice(&v.to_be_bytes()); - } - } - } -} - -fn write_string(vec: &mut Vec, name: &str) { - vec.extend_from_slice(&(name.len() as u16).to_be_bytes()); - vec.extend_from_slice(name.as_bytes()); -} - -fn string_size(s: &str) -> usize { - 2 + s.as_bytes().len() -} - -pub fn nbt_write_size(nbt: &NBT) -> usize { - let mut size = 1; - size += string_size(&nbt.root_name); - for (name, node) in &nbt.nodes { - size += 1 + string_size(name) + entry_size(node); - } - size += 1; - size -} -fn entry_size(node: &NBTNode) -> usize { - match node { - NBTNode::Byte(_) => 1, - NBTNode::Short(_) => 2, - NBTNode::Int(_) => 4, - NBTNode::Long(_) => 8, - NBTNode::Float(_) => 4, - NBTNode::Double(_) => 8, - NBTNode::ByteArray(bytes) => 4 + bytes.len(), - NBTNode::String(s) => string_size(s), - NBTNode::List { type_id: _, children } => { - let mut size = 1 + 4; - for child in children { - size += entry_size(child); - } - size - } - NBTNode::Compound(nodes) => { - let mut size = 0; - for (name, node) in nodes { - size += 1 + string_size(name) + entry_size(node); - } - size += 1; - size - } - NBTNode::IntArray(values) => 4 + (values.len() * 4), - NBTNode::LongArray(values) => 4 + (values.len() * 8), - } -} \ No newline at end of file diff --git a/src/server/utils/particles.rs b/src/server/utils/particles.rs deleted file mode 100644 index 4c2912b..0000000 --- a/src/server/utils/particles.rs +++ /dev/null @@ -1,107 +0,0 @@ -crate::particle_enum! { - ExplosionNormal("explode", 0, true), - ExplosionLarge("largeexplode", 1, true), - ExplosionHuge("hugeexplosion", 2, true), - FireworksSpark("fireworksSpark", 3, false), - WaterBubble("bubble", 4, false), - WaterSplash("splash", 5, false), - WaterWake("wake", 6, false), - Suspended("suspended", 7, false), - SuspendedDepth("depthsuspend", 8, false), - Crit("crit", 9, false), - CritMagic("magicCrit", 10, false), - SmokeNormal("smoke", 11, false), - SmokeLarge("largesmoke", 12, false), - Spell("spell", 13, false), - SpellInstant("instantSpell", 14, false), - SpellMob("mobSpell", 15, false), - SpellMobAmbient("mobSpellAmbient", 16, false), - SpellWitch("witchMagic", 17, false), - DripWater("dripWater", 18, false), - DripLava("dripLava", 19, false), - VillagerAngry("angryVillager", 20, false), - VillagerHappy("happyVillager", 21, false), - TownAura("townaura", 22, false), - Note("note", 23, false), - Portal("portal", 24, false), - EnchantmentTable("enchantmenttable", 25, false), - Flame("flame", 26, false), - Lava("lava", 27, false), - Footstep("footstep", 28, false), - Cloud("cloud", 29, false), - Redstone("reddust", 30, false), - Snowball("snowballpoof", 31, false), - SnowShovel("snowshovel", 32, false), - Slime("slime", 33, false), - Heart("heart", 34, false), - Barrier("barrier", 35, false), - ItemCrack("iconcrack_", 36, false, 2), - BlockCrack("blockcrack_", 37, false, 1), - BlockDust("blockdust_", 38, false, 1), - WaterDrop("droplet", 39, false), - ItemTake("take", 40, false), - MobAppearance("mobappearance", 41, true) -} - -// impl PacketWrite for ParticleTypes { -// fn write(&self, buf: &mut Vec) { -// self.get_id().write(buf); -// } -// } - -#[macro_export] -macro_rules! particle_enum { - {$($name:ident($name_str:expr, $id:expr, $ignore_range:expr$(, $arg_count:expr)?)),* $(,)?} => { - #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] - pub enum ParticleTypes { - $( - $name - ),* - } - - impl ParticleTypes { - pub const fn from_id(id: i32) -> Option { - match id { - $($id => Some(ParticleTypes::$name),)* - _ => None - } - } - - pub const fn get_id(&self) -> i32 { - match self { - $(ParticleTypes::$name => $id,)* - } - } - - pub const fn get_name(&self) -> &'static str { - match self { - $(ParticleTypes::$name => $name_str,)* - } - } - - pub const fn get_arg_count(&self) -> Option { - match self { - $( - ParticleTypes::$name => crate::argcounted!($name$(, $arg_count)*) - ),* - } - } - - pub const fn is_ignore_range(&self) -> bool { - match self { - $(ParticleTypes::$name => $ignore_range),* - } - } - } - } -} - -#[macro_export] -macro_rules! argcounted { - ($name:ident, $argcount:expr) => { - Some($argcount) - }; - ($name:ident) => { - None - }; -} \ No newline at end of file diff --git a/src/server/utils/player_list/footer.rs b/src/server/utils/player_list/footer.rs deleted file mode 100644 index 27b0fcf..0000000 --- a/src/server/utils/player_list/footer.rs +++ /dev/null @@ -1,147 +0,0 @@ -use crate::server::utils::chat_component::chat_component_text::{ChatComponentText, ChatComponentTextBuilder, HoverAction}; -use crate::server::utils::color::MCColors; - -pub fn footer() -> ChatComponentText { - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("\n").build() - ) - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("Active Effects") - .color(MCColors::Green) - .bold() - .build() - ) - .build() - ) - .append( - ChatComponentTextBuilder::new("\n").build() - ) - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("").color(MCColors::Gray).build() - ) - .append( - ChatComponentTextBuilder::new("You have ").color(MCColors::Gray).build() - ) - .append( - ChatComponentTextBuilder::new("2 ").color(MCColors::Yellow).build() - ) - .append( - ChatComponentTextBuilder::new("active effects. Use \"").color(MCColors::Gray).build() - ) - .append( - ChatComponentTextBuilder::new("/effects").color(MCColors::Gold).build() - ) - .append( - ChatComponentTextBuilder::new("\" to see them.").color(MCColors::Gray).build() - ) - .build() - ) - .append( - ChatComponentTextBuilder::new("\n").build() - ) - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("Haste III").color(MCColors::Yellow).build() - ) - .append( - ChatComponentTextBuilder::new("").build() - ) - .append( - ChatComponentTextBuilder::new("").build() - ) - .build() - ) - .append( - ChatComponentTextBuilder::new("\n").build() - ) - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("§s").build() // !? what is hypixel doing bro - ) - .build() - ) - .build() - ) - .append( - ChatComponentTextBuilder::new("\n").build() - ) - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("Cookie Buff") - .color(MCColors::LightPurple) - .bold() - .build() - ) - .build() - ) - .append( - ChatComponentTextBuilder::new("\n").build() - ) - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("").color(MCColors::Gray).build() - ) - .append( - ChatComponentTextBuilder::new("Not Active! Obtain booster cookies from the community").color(MCColors::Gray).build() - ) - .build() - ) - .append( - ChatComponentTextBuilder::new("\n").build() - ) - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("shop in the hub.").color(MCColors::Gray).build() - ) - .build() - ) - .append( - ChatComponentTextBuilder::new("\n").build() - ) - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("§s").build() - ) - .build() - ) - .build() - ) - .append( - ChatComponentTextBuilder::new("\n").build() - ) - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("Ranks, Boosters, & MORE! ") - .append( - ChatComponentTextBuilder::new("STORE.HYPIXEL.NET") - .color(MCColors::Red) - .bold() - .on_hover( - HoverAction::ShowText, - ChatComponentTextBuilder::new("§c§lDo not trust unknown links!").build(), - ) - .build() - ) - .color(MCColors::Green) - .build() - ) - .build() - ) - .build() -} \ No newline at end of file diff --git a/src/server/utils/player_list/header.rs b/src/server/utils/player_list/header.rs deleted file mode 100644 index 3415b2f..0000000 --- a/src/server/utils/player_list/header.rs +++ /dev/null @@ -1,32 +0,0 @@ -use crate::server::utils::chat_component::chat_component_text::{ChatComponentText, ChatComponentTextBuilder, HoverAction}; -use crate::server::utils::color::MCColors; - -pub fn header() -> ChatComponentText { - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("You are playing on ") - .color(MCColors::Aqua) - .append( - ChatComponentTextBuilder::new("MC.HYPIXEL.NET") - .color(MCColors::Yellow) - .bold() - .on_hover( - HoverAction::ShowText, - ChatComponentTextBuilder::new("§c§lDo not trust unknown links!").build(), - ) - .build() - ) - .build() - ) - .append( - ChatComponentTextBuilder::new("\n").build() - ) - .append( - ChatComponentTextBuilder::new("") - .append( - ChatComponentTextBuilder::new("§s").build() - ) - .build() - ) - .build() -} \ No newline at end of file diff --git a/src/server/utils/player_list/mod.rs b/src/server/utils/player_list/mod.rs deleted file mode 100644 index 2a4f48e..0000000 --- a/src/server/utils/player_list/mod.rs +++ /dev/null @@ -1,82 +0,0 @@ -pub mod player_profile; -pub mod header; -pub mod footer; - -use crate::net::protocol::play::clientbound::PlayerListItem; -use crate::net::var_int::VarInt; -use crate::server::player::player::{GameProfile, GameProfileProperty}; -use crate::server::utils::chat_component::chat_component_text::ChatComponentText; -use crate::server::utils::player_list::player_profile::PlayerData; -use std::array; -use std::collections::{HashMap, HashSet}; -use uuid::Uuid; - -pub struct PlayerList { - lines: [PlayerData; 80], - updated: HashSet, -} - -impl PlayerList { - pub fn new() -> Self { - Self { - lines: generate_default_lines(), // we might want to update this for the skull textures next to names when they matter - updated: HashSet::new(), - } - } - - pub fn set_line(&mut self, index: usize, text: ChatComponentText) { - assert!(index < self.lines.len(), "Attempted to set player list line {} but there are only {} lines", index, self.lines.len()); - let line = &mut self.lines[index]; - line.display_name = Some(text); - - self.updated.insert(index); - } - - pub fn get_packet(&mut self) -> Option { - if self.updated.is_empty() { - return None; - } - - let lines = self.updated.drain().map(|index| { - &self.lines[index] - }).collect::>(); - - Some(PlayerListItem { - action: VarInt(3), - players: lines, - }) - } - - pub fn new_packet(&self) -> PlayerListItem { - PlayerListItem { - action: VarInt(0), - players: self.lines.iter().collect(), // previously this used an rc to save on clones when the packet was sent, however with writing packets using a borrowed reference, this is unnecessary. - } - } -} - -// this is what hypixel does to force alphabetical order. We should be able to change this however we want as long as it maintains order. -fn generate_default_lines() -> [PlayerData; N] { - array::from_fn(|i| { - let left = index_to_letter(i / 26); - let right = index_to_letter(i % 26); - // havent tested it - PlayerData::new(GameProfile { - uuid: Uuid::new_v4(), - username: format!("!{}-{}", left, right), - properties: HashMap::from( - [( - "textures".to_owned(), - GameProfileProperty { - value: player_profile::GRAY.to_owned(), - signature: player_profile::GRAY_SIG.to_owned().into(), - } - )] - ), - }) - }) -} - -const fn index_to_letter(n: usize) -> char { - (b'a' + (n % 26) as u8) as char -} \ No newline at end of file diff --git a/src/server/utils/player_list/player_profile.rs b/src/server/utils/player_list/player_profile.rs deleted file mode 100644 index 6e22fe2..0000000 --- a/src/server/utils/player_list/player_profile.rs +++ /dev/null @@ -1,58 +0,0 @@ -use crate::id_enum; -use crate::server::player::player::{GameProfile, GameProfileProperty}; -use crate::server::utils::chat_component::chat_component_text::{ChatComponentText, ChatComponentTextBuilder}; -use std::collections::HashMap; -use uuid::Uuid; - -#[derive(Debug, Clone)] -pub struct PlayerData { - pub ping: i32, - pub game_mode: GameType, - pub profile: GameProfile, - pub display_name: Option, -} - -pub const GRAY: &str = "eyJ0aW1lc3RhbXAiOjE0NjU2NTg1NjkzNDQsInByb2ZpbGVJZCI6ImIwZDRiMjhiYzFkNzQ4ODlhZjBlODY2MWNlZTk2YWFiIiwicHJvZmlsZU5hbWUiOiJJbnZlbnRpdmVHYW1lcyIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTdmNWZkMjNhYWZiYjlhYjRmZDE0ZmQwODIzYWVhM2E5ZmJkZmU2ZmIyZGUwZjdlZjMzZDBmNGI0YWI3YSJ9fX0="; -pub const GRAY_SIG: &str = "Ntyez/Ut7Ht7cmrgPK3dJ/MvIEyQt3jy2c6ACx9sfxB4AKNzyE6fsjffRWwXuObEiPGwYm6iIl2eWuMSvlWljXBg5XJL/ql2Xse1yXImfGfUmedltUhoQuAxCPjogubcapAdGsIr4W5tVrYoTnMgjz7zyc0gHafCClEQBm8A+C5FIfFsAkWUdmzqrEPjbzlqt6qUl0m1sAdskgR0DgCg2pZk5djL+CzPiUgZv1rqXO4Mg5zXr5DSpeEgk5AMInEuxCRemL096cp0fKwf99FEUOiJ2Rq6J9azZVnyjoQy5sZv1RD3+24ib9uwZoJFWakjtTJnWEcUrFsFrr3p5q1Q1prCvbOKS+xD7pMWUbCVz4WuS14e0PtjF5IpDFCehwveREofru7uxAeD4lP13XTdAuWvBvPox1gKvnax8OsnQO64F4nadGm3WmWas6JYzGgOkIRwiKGTxJDIQcAmRXgn8qDx8if5EVnI3/RLIayo06FPXQGmU1p6CCoAy7prGkVeHZsoKuvRGVj3PN70aoJialHzKKpW1OYgSKQXuTOaaWjQN3xbXVrOKaEEAxglWR7drfVPM1szBpcwnYL7hIKejTiHbfZj6mPwFDf0iy1YVcY0iDeCJogf50Z5dWJrwNw6IsQCLuig7BTWAcP7iCCl73UuJRrYndeN7tUIQbtRqfM="; - -impl PlayerData { - pub fn new(profile: GameProfile) -> Self { - Self { - ping: 1, - game_mode: GameType::Creative, - profile, - display_name: Some(ChatComponentTextBuilder::new("").build()), - } - } - - pub fn with_text(text: ChatComponentText) -> Self { - Self { - ping: 1, - game_mode: GameType::Creative, - profile: GameProfile { - uuid: Uuid::new_v4(), - username: "default".into(), - properties: HashMap::from( - [( - "textures".to_owned(), - GameProfileProperty { - value: GRAY.to_owned(), - signature: GRAY_SIG.to_owned().into(), - } - )] - ), - }, - display_name: Some(text), - } - } -} - -id_enum! { - pub enum GameType: i32 { - NotSet(-1), - Survival(0), - Creative(1), - Adventure(2), - Spectator(3) - } -} \ No newline at end of file diff --git a/src/server/utils/sized_string.rs b/src/server/utils/sized_string.rs deleted file mode 100644 index 3bb3f3d..0000000 --- a/src/server/utils/sized_string.rs +++ /dev/null @@ -1,69 +0,0 @@ -use crate::net::packets::packet_serialize::PacketSerializable; -use bytes::BytesMut; -use std::ops::Deref; - -/// [String] with a character size limit of N. -/// All characters after that size will be truncated on creation. -/// -/// This implements deref, which means any str operation will work on it. -/// if you need the owned string, use .into_owned() or .to_owned() -#[derive(Clone, Debug, Eq, Hash, PartialEq)] -pub struct SizedString(String); -// if string is made public, you could change it and the size limit can't be enforced. - -impl SizedString { - pub fn truncated_owned(mut text: String) -> Self { - if let Some((byte_position, _)) = text.char_indices().nth(N) { - text.truncate(byte_position); - } - Self(text) - } - - pub fn truncated(text: &str) -> Self { - Self(text.chars().take(N).collect::()) - } - - pub fn into_owned(self) -> String { - self.0 - } - - pub fn as_str(&self) -> &str { - &self.0 - } -} - -impl Deref for SizedString { - type Target = str; - - fn deref(&self) -> &Self::Target { - self.as_str() - } -} - -impl From<&str> for SizedString { - fn from(text: &str) -> Self { - Self::truncated(text) - } -} - -impl From for SizedString { - fn from(text: String) -> Self { - Self::truncated_owned(text) - } -} - -impl PacketSerializable for SizedString { - fn write_size(&self) -> usize { - self.0.write_size() - } - fn write(&self, buf: &mut BytesMut) { - self.0.write(buf); - } -} - - -impl From> for String { - fn from(text: SizedString) -> Self { - text.into_owned() - } -} \ No newline at end of file diff --git a/src/server/utils/sounds.rs b/src/server/utils/sounds.rs deleted file mode 100644 index 2c5c280..0000000 --- a/src/server/utils/sounds.rs +++ /dev/null @@ -1,33 +0,0 @@ -use crate::id_enum; - -#[macro_export] -macro_rules! id_enum { - (pub enum $enumName:ident: $idType:ty {$($name:ident ($id:expr)),* $(,)?}) => { - #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] - pub enum $enumName { - $( - $name, - )* - } - - impl $enumName { - pub const fn id(&self) -> $idType { - match self { - $( - $enumName::$name => $id, - )* - } - } - } - } -} - -id_enum! { - pub enum Sounds: &'static str { - EnderDragonHit("mob.enderdragon.hit"), - Harp("note.harp"), - Orb("random.orb"), - Pop("random.pop"), - ChestOpen("random.chestopen"), - } -} \ No newline at end of file diff --git a/src/server/utils/tasks.rs b/src/server/utils/tasks.rs deleted file mode 100644 index 71b0c66..0000000 --- a/src/server/utils/tasks.rs +++ /dev/null @@ -1,15 +0,0 @@ -use crate::server::server::Server; - -pub struct Task { - pub run_in: u32, - pub callback: Box, -} - -impl Task { - pub fn new(run_in: u32, task: impl FnOnce(&mut Server) + 'static) -> Self { - Self { - run_in, - callback: Box::new(task) - } - } -} \ No newline at end of file diff --git a/src/server/world.rs b/src/server/world.rs deleted file mode 100644 index 6a7f91c..0000000 --- a/src/server/world.rs +++ /dev/null @@ -1,180 +0,0 @@ -use crate::net::packets::packet_buffer::PacketBuffer; -use crate::net::protocol::play::clientbound::DestroyEntites; -use crate::net::var_int::VarInt; -use crate::server::block::block_interact_action::BlockInteractAction; -use crate::server::block::block_position::BlockPos; -use crate::server::block::blocks::Blocks; -use crate::server::chunk::chunk_grid::ChunkGrid; -use crate::server::entity::entity::{Entity, EntityId, EntityImpl}; -use crate::server::entity::entity_metadata::EntityMetadata; -use crate::server::player::player::{ClientId, Player}; -use crate::server::server::Server; -use crate::server::utils::dvec3::DVec3; -use crate::server::utils::player_list::PlayerList; -use std::collections::HashMap; -use std::mem::take; - -pub const VIEW_DISTANCE: u8 = 6; - -pub struct World { - /// Don't use directly!!, use .server_mut() instead - /// This is unsafe, - /// but since server should be alive for the entire program this is fine (I hope) - pub server: *mut Server, - - pub chunk_grid: ChunkGrid, - pub interactable_blocks: HashMap, - - pub player_info: PlayerList, // might need to be per player, not sure. - - // entity ids are always positive so they could theoretically be unsigned but minecraft uses signed ints in vanilla and casting might cause weird behavior, also assumes we ever reach the end of i32 though so it might be fine - pub next_entity_id: i32, - pub players: HashMap, - pub entities: HashMap)>, - - pub entities_for_removal: Vec, - - // pub commands: Vec - - // pub player_info: PlayerList, - pub spawn_point: DVec3, - pub spawn_yaw: f32, - pub spawn_pitch: f32, -} - -impl World { - - pub fn new() -> World { - World { - server: std::ptr::null_mut(), - - chunk_grid: ChunkGrid::new(16, 13, 13), - interactable_blocks: HashMap::new(), - - player_info: PlayerList::new(), - - next_entity_id: 1, // might have to start at 1 - players: HashMap::new(), - entities: HashMap::new(), - entities_for_removal: Vec::new(), - - spawn_point: DVec3::ZERO, - spawn_yaw: 0.0, - spawn_pitch: 0.0, - } - } - - pub fn server_mut<'a>(&self) -> &'a mut Server { - unsafe { self.server.as_mut().expect("server is null") } - } - - pub fn new_entity_id(&mut self) -> EntityId { - let id = self.next_entity_id; - self.next_entity_id += 1; - id - } - - pub fn spawn_entity(&mut self,position: DVec3, metadata: EntityMetadata, mut entity_impl: E,) -> anyhow::Result { - let world_ptr: *mut World = self; - let mut entity = Entity::new( - world_ptr, - self.new_entity_id(), - position, - metadata, - ); - - let chunk_x = (entity.position.x.floor() as i32) >> 4; - let chunk_z = (entity.position.z.floor() as i32) >> 4; - - if let Some(chunk) = self.chunk_grid.get_chunk_mut(chunk_x, chunk_z) { - chunk.insert_entity(entity.id); - entity.write_spawn_packet(&mut chunk.packet_buffer); - entity_impl.spawn(&mut entity, &mut chunk.packet_buffer); - } - - let id = entity.id; - self.entities.insert(id, (entity, Box::new(entity_impl))); - Ok(id) - } - - /// adds the entity id to - pub fn despawn_entity(&mut self, entity_id: EntityId) { - self.entities_for_removal.push(entity_id) - } - - pub fn tick(&mut self) -> anyhow::Result<()> { - if !self.entities_for_removal.is_empty() { - for entity_id in take(&mut self.entities_for_removal) { - if let Some((mut entity, mut entity_impl)) = self.entities.remove(&entity_id) { - if let Some(chunk) = entity.chunk_mut() { - chunk.packet_buffer.write_packet(&DestroyEntites { - entities: vec![VarInt(entity.id)], - }); - entity_impl.despawn(&mut entity, &mut chunk.packet_buffer); - chunk.remove_entity(&entity_id); - } - } - } - } - - for (entity, entity_impl) in self.entities.values_mut() { - let packet_buffer = if let Some(chunk) = entity.chunk_mut() { - &mut chunk.packet_buffer - } else { - // throwaway packet buffer, doesn't feel like a good idea - // however there is a chance that an entity might end up outside chunk grid - // and end up stuck if we tick only inside a valid chunk - &mut PacketBuffer::new() - }; - entity.tick(entity_impl, packet_buffer); - } - Ok(()) - } - - pub fn set_block_at(&mut self, block: Blocks, x: i32, y: i32, z: i32) { - self.chunk_grid.set_block_at(block, x, y, z); - } - - pub fn get_block_at(&self, x: i32, y: i32, z: i32) -> Blocks { - self.chunk_grid.get_block_at(x, y, z) - } - - pub fn set_spawn_point(&mut self, position: DVec3, yaw: f32, pitch: f32) { - self.spawn_point = position; - self.spawn_yaw = yaw; - self.spawn_pitch = pitch; - } - - pub fn fill_blocks(&mut self, block: Blocks, start: BlockPos, end: BlockPos) { - iterate_blocks(start, end, |x, y, z| { - self.set_block_at(block, x, y, z) - }) - } -} - -/// iterates over the blocks in area between start and end -/// and runs a function -#[inline(always)] -pub fn iterate_blocks( - start: BlockPos, - end: BlockPos, - mut callback: F, -) where - F : FnMut(i32, i32, i32) -{ - let x0 = start.x.min(end.x); - let y0 = start.y.min(end.y); - let z0 = start.z.min(end.z); - - let x1 = start.x.max(end.x); - let y1 = start.y.max(end.y); - let z1 = start.z.max(end.z); - - for x in x0..=x1 { - for z in z0..=z1 { - for y in y0..=y1 { - callback(x, y, z); - } - } - } -} \ No newline at end of file diff --git a/src/utils/mod.rs b/src/utils/mod.rs deleted file mode 100644 index 1c4c8ea..0000000 --- a/src/utils/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod bitset; -pub mod seeded_rng; -pub mod hasher;