[
  {
    "path": ".gitignore",
    "content": "target/\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2024 shuttle\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# Shuttlings\n\nThis is [Shuttle](https://www.shuttle.dev/)'s collection of code challenges for learning backend development with Rust. The name is derived from [rustlings](https://github.com/rust-lang/rustlings), which is also a great resource for learning Rust basics.\n\nLooking to chat with other Shuttlings? Join the [Discord server](https://discord.gg/shuttle) to meet others, provide feedback and discuss the challenges.\n\n## Why did we create this repo?\n\nAfter the success of our [Christmas Code Hunt](https://shuttle.dev/cch) in December 2023, we realized the positive impact that practical coding challenges could have on learning Rust. This repo was created to continue that momentum, offering a collection of real-world problems for developers to solve and learn from all year round. It serves as a permanent, go-to resource for honing web backend skills through hands-on practice with Rust.\n\nWe've seen the challenges used in numerous cases, such as educating team members at companies or educating students at a university. Now, we are making them available to everyone and continue to refine and expand this collection to offer challenges that cater to all skill levels, supporting the growth of Rust developers on their learning journey.\n\n## Editions\n\n- [Shuttle's Christmas Code Hunt 2023](cch23/README.md)\n- [Shuttle's Christmas Code Hunt 2024](cch24/README.md)\n"
  },
  {
    "path": "_shuttlings/.gitignore",
    "content": "Cargo.lock\n"
  },
  {
    "path": "_shuttlings/Cargo.toml",
    "content": "[package]\nname = \"shuttlings\"\ndescription = \"Types for Shuttlings libraries\"\nrepository = \"https://github.com/shuttle-hq/shuttlings\"\nversion = \"0.1.0\"\nedition = \"2021\"\nlicense = \"MIT\"\npublish = true\n\n[dependencies]\n"
  },
  {
    "path": "_shuttlings/src/lib.rs",
    "content": "#[derive(Debug)]\npub enum SubmissionState {\n    Waiting,\n    Running,\n    Done,\n    Error,\n}\nimpl std::fmt::Display for SubmissionState {\n    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {\n        write!(f, \"{self:?}\")\n    }\n}\n\n#[derive(Debug)]\npub enum SubmissionUpdate {\n    /// State update\n    State(SubmissionState),\n    /// bool is true if this task was the last core task, int is amount of bonus points\n    TaskCompleted(bool, i32),\n    /// Append line to log\n    LogLine(String),\n    /// Save changes to db\n    Save,\n}\nimpl From<SubmissionState> for SubmissionUpdate {\n    fn from(value: SubmissionState) -> Self {\n        Self::State(value)\n    }\n}\nimpl From<(bool, i32)> for SubmissionUpdate {\n    fn from((b, i): (bool, i32)) -> Self {\n        Self::TaskCompleted(b, i)\n    }\n}\nimpl From<String> for SubmissionUpdate {\n    fn from(value: String) -> Self {\n        Self::LogLine(value)\n    }\n}\n"
  },
  {
    "path": "cch23/README.md",
    "content": "# Shuttle's Christmas Code Hunt 2023\n\nThe Shuttle Christmas Code Hunt is a set of Rust challenges that were released throughout December 2023.\n\n## Prerequistites\n\nIf you haven't yet, [install Rust](https://rustup.rs/) and [install Shuttle CLI](https://docs.shuttle.dev/getting-started/installation).\n\nYou can check the versions with `cargo -V` and `shuttle -V`.\n\n## How to get started\n\nOpen [Challenge -1](challenges/-1.md) for a guide to get started with using Shuttle, and follow along the journey to build a web server for solving all of Santa's problems!\n\nYou can also read the challenges on the [Shuttle Console](https://console.shuttle.dev/).\n\n## How to validate my solutions\n\nLocally, you can use the [validator](validator/README.md).\n\nYou can also deploy your solution to Shuttle and validate it there. Go to the challenge pages on [Shuttle Console](https://console.shuttle.dev/) for instructions.\n"
  },
  {
    "path": "cch23/challenges/-1.md",
    "content": "# 🎄 Day -1: Get your winter boots on!\n\nWelcome to Shuttle's Christmas Code Hunt 2023!\n\nThis challenge is a warmup challenge made to familiarize you with deploying your CCH23 project on Shuttle,\nand it does not count towards your score.\n\n---\n\n## 🔔 Challenge layout\n\nEvery challenge is split into one or more *Core Tasks* (marked with ⭐) and one or more *Bonus Tasks* (marked with 🎁).\n\nTo **complete** a challenge, you only need to pass the tests for the *Core Tasks* ⭐.\n\n*Bonus Tasks* 🎁 are harder to complete but give even more points. Their tests contain more edge cases and curveballs.\n\nYou can complete the *Core Tasks* ⭐ first (submit at the bottom of the page), and then work on *Bonus Tasks* 🎁.\n\n---\n\n## ⭐ Task 1: Everything is OK\n\nDeploy a minimal working web app to your CCH23 Shuttle project.\n\nThe root endpoint `/` should respond with a `200 OK` status code to GET requests.\nResponding with a \"Hello, world!\" string, like the starter templates do, is enough to accomplish this.\n\n### 🔔 Tips\n\nNavigate to your CCH23 project folder. It should have code for a \"Hello, world!\" app.\n\nIn your project directory, you can use `shuttle run` to test your Shuttle app locally (see below).\n\n**More reading:**\n\n- [Shuttle docs: Quick start](https://docs.shuttle.rs/getting-started/quick-start)\n- [Shuttle docs: Local run](https://docs.shuttle.rs/getting-started/local-run)\n- [Shuttle docs: Axum](https://docs.shuttle.rs/examples/axum)\n- [Shuttle docs: Actix Web](https://docs.shuttle.rs/examples/actix)\n- [Shuttle docs: Rocket](https://docs.shuttle.rs/examples/rocket)\n- [Shuttle docs: Tower, Warp, Salvo, Poem, Thruster, Tide](https://docs.shuttle.rs/examples/other)\n- [MDN web docs: 200 OK](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200)\n\n### 💠 Example Input\n\nMany tasks throughout CCH23 can easily be tested with a `curl` command.\nYou can use it when testing locally, and then verify that the deployed app works.\n\n```bash\n# On a local run with `shuttle run`\ncurl -I -X GET http://localhost:8000/\n```\n\n### 💠 Example Output\n\n```text\nHTTP/1.1 200 OK\n...\n```\n\nWith that done, you can now get your first passing task!\n\nYou can at this point scroll to the bottom of this page to submit and see if your Hello World app is working,\nor keep going with the bonus task.\n\n---\n\n## 🎁 Task 2: Fake error (0 bonus points)\n\nFor this bonus task, add an endpoint on `/-1/error` that responds with the status code `500 Internal Server Error` to GET requests.\nThe response body content does not matter.\n\n### 🔔 Tips\n\n- [Axum Responses](https://docs.rs/axum/latest/axum/response/index.html)\n- [Actix Web Responses](https://actix.rs/docs/response)\n- [Rocket Responses](https://rocket.rs/v0.5/guide/responses/)\n- [MDN web docs: 500 Internal Server Error](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/500)\n\n### 💠 Example Input\n\n```bash\ncurl -I -X GET http://localhost:8000/-1/error\n```\n\n### 💠 Example Output\n\n```text\nHTTP/1.1 500 Internal Server Error\n...\n```\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/challenges/1.md",
    "content": "# 🎄 Day 1: Packet \"exclusive-cube\" not found\n\n*In the frosty expanses of the North Pole, Santa's advanced packet management system has encountered a glitch. This system, known for its robustness and magical speed, is responsible for sorting and dispatching all the Christmas gifts. However, a sudden aurora borealis storm has scattered bits of data across the snowy landscape, leaving Santa in dire need of a digital handyman to restore order.*\n\n## ⭐ Task 1: Cube the bits\n\nSanta needs your programming expertise to recalibrate the packet IDs in his packet management system.\n\nImplement a GET endpoint `/1/<num1>/<num2>` that takes 2 integers in the path, `num1` and `num2`, and returns the result of `(num1 XOR num2) POW 3`, where *XOR* is the exclusive OR operation, and *POW* is exponentiation.\n\n### 🔔 Tips\n\nCheck your web framework's docs for clues how to match the URI path pattern:\n\n- [Axum Routing](https://docs.rs/axum/latest/axum/#routing)\n- [Axum Extractors](https://docs.rs/axum/latest/axum/extract/index.html)\n- [Actix Web Extractors](https://actix.rs/docs/extractors)\n- [Rocket Dynamic Paths](https://rocket.rs/v0.5/guide/requests/#dynamic-paths)\n\n### 💠 Example\n\n```bash\ncurl http://localhost:8000/1/4/8\n\n1728\n```\n\n---\n\n## 🎁 Task 2: The sled ID system (100 bonus points)\n\nAfter the packet IDs are calibrated and the packets are packed into sleds,\nSanta needs to calibrate the sled ID.\n\nThe formula is very similar: All packet IDs (integers) are *XOR*'ed with each other, and then the result is (again) raised to the power of 3. The catch is that there can be between 1 and 20 packets in a sled!\n\nAdapt the endpoint from Task 1 so that it can also be used to calculate sled IDs.\n\n### 💠 Examples\n\n```bash\ncurl http://localhost:8000/1/10\n\n1000\n```\n\n```bash\ncurl http://localhost:8000/1/4/5/8/10\n\n27\n```\n\n---\n\nAuthors: [jonaro00](https://github.com/jonaro00), [orhun](https://github.com/orhun)\n"
  },
  {
    "path": "cch23/challenges/11.md",
    "content": "# 🎄 Day 11: Imagery from the North Pole\n\n*Decked out in his signature red coat, Santa's eyes sparkle brighter than the Northern Star as he navigates through tall shelves packed with newly produced Christmas decorations for the season. Handcrafted glass balls, ornate stars, whimsical snowflakes, festive tinsel - you name it, they have it all.*\n\n## ⭐ Task 1: Served on a silver platter\n\nThe time has come to decorate our surroundings! The elves are getting tired of working with just strings and numbers and bytes, and are in need of some fancy christmas ornaments on the computer screens.\n\n![decoration](../validator/assets/decoration.png)\n\nDownload the image above and serve it as a static file so that a GET request to `/11/assets/decoration.png` responds with the image file and correct headers for MIME type (`Content-Type: image/png`) and response length (`Content-Length: ...`).\n\n### 🔔 Tips\n\nWeb frameworks usually provide an easy way to serve files and automatically setting the type and length headers based on the file served.\n\n- [Shuttle examples: Axum static files](https://github.com/shuttle-hq/shuttle-examples/tree/main/axum/static-files)\n- [Shuttle examples: Actix Web static files](https://github.com/shuttle-hq/shuttle-examples/tree/main/actix-web/static-files)\n- [Shuttle examples: Rocket static files](https://github.com/shuttle-hq/shuttle-examples/tree/main/rocket/static-files)\n- [MDN Wed docs: Content-Type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type)\n- [MDN Wed docs: MIME types](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types)\n\n### 💠 Example Input\n\n```bash\ncurl -I -X GET http://localhost:8000/11/assets/decoration.png\n```\n\n### 💠 Example Output\n\n```text\nHTTP/1.1 200 OK\ncontent-type: image/png\ncontent-length: 787297\n...\n```\n\n---\n\n## 🎁 Task 2: Bull mode activated (200 bonus points)\n\nAdd a POST endpoint `/11/red_pixels`, that takes in a PNG image in the `image` field of a multipart POST request, and returns the number of pixels in the image that are perceived as \"magical red\" when viewed with Santa's night vision goggles.\nThe goggles considers a pixel \"magical red\" if the color values of the pixel fulfill the formula `red > blue + green`.\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/11/red_pixels \\\n  -H 'Content-Type: multipart/form-data' \\\n  -F 'image=@decoration.png' # the image from Task 1\n\n73034\n```\n\n---\n\nAuthors: [orhun](https://github.com/orhun), [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/challenges/12.md",
    "content": "# 🎄 Day 12: Timekeeper\n\n*One frosty night, Santa, dressed warmly in his favorite red coat, decided to take a midnight stroll around the elf workshop. As he pushed open the heavy wooden doors of the workshop, his eyes widened in surprise. He was completely stunned by the sight that greeted him.*\n\n*Rows upon rows of conveyor belts had been set up, zipping toys from one corner to the other, resembling an intricate dance of festivity and efficiency. The elves were operating with military precision, organizing toys into specific categories and sending them down the right pathways.*\n\n## ⭐ Task 1: How To Time Persist? (HTTP)\n\nPresents are being packed and wrapped at *blazingly fast* speeds in the workshop.\nIn order to gather data on the production of presents, Santa needs a multi-stopwatch that can keep the time of many packet IDs at once.\n\nCreate two endpoints:\n\n- POST `/12/save/<string>`: takes a string and stores it.\n- GET `/12/load/<string>`: takes the same string and returns the number of whole seconds elapsed since the last time it was stored.\n\n### 🔔 Tips\n\nFind a suitable way to store data (pairs of strings and timestamps), either with an in-memory data structure or in a persistent fashion.\n\n- [Sharing state in Axum](https://docs.rs/axum/latest/axum/#sharing-state-with-handlers)\n- [Application State in Actix Web](https://actix.rs/docs/application#state)\n- [State in Rocket](https://rocket.rs/v0.5/guide/state/)\n- [Shuttle Persist](https://docs.shuttle.rs/resources/shuttle-persist)\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/12/save/packet20231212\nsleep 2\ncurl http://localhost:8000/12/load/packet20231212\necho\nsleep 2\ncurl http://localhost:8000/12/load/packet20231212\necho\ncurl -X POST http://localhost:8000/12/save/packet20231212\ncurl http://localhost:8000/12/load/packet20231212\n\n# After ~4 seconds:\n2\n4\n0\n```\n\n## 🎁 Task 2: Unanimously Legendary IDentifier (ULID) (100 bonus points)\n\nSanta, who likes old-school tech, now sees that some packets use modern ULIDs.\nHelp him rewind time a little bit by showing him them in an older format that he understands.\n\nMake a POST endpoint `/12/ulids` that takes a JSON array of ULIDs.\nConvert all the ULIDs to UUIDs and return a new array but in reverse order.\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/12/ulids \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    \"01BJQ0E1C3Z56ABCD0E11HYX4M\",\n    \"01BJQ0E1C3Z56ABCD0E11HYX5N\",\n    \"01BJQ0E1C3Z56ABCD0E11HYX6Q\",\n    \"01BJQ0E1C3Z56ABCD0E11HYX7R\",\n    \"01BJQ0E1C3Z56ABCD0E11HYX8P\"\n  ]'\n\n[\n  \"015cae07-0583-f94c-a5b1-a070431f7516\",\n  \"015cae07-0583-f94c-a5b1-a070431f74f8\",\n  \"015cae07-0583-f94c-a5b1-a070431f74d7\",\n  \"015cae07-0583-f94c-a5b1-a070431f74b5\",\n  \"015cae07-0583-f94c-a5b1-a070431f7494\"\n]\n```\n\n## 🎁 Task 3: Let Santa Broil (LSB) (200 bonus points)\n\nNow that Santa is up to date on some newer data formats, he needs help with analyzing the manufacturing date of some packets he found in the corner of the workshop.\n\nCreate another variant of the same endpoint `/12/ulids/<weekday>` that counts the number of ULIDs that fulfill the following criteria (in the UTC timezone):\n\n- How many of the ULIDs were generated on a Christmas Eve?\n- How many were generated on a `<weekday>`? (A number in the path between 0 (Monday) and 6 (Sunday))\n- How many were generated in the future? (has a date later than the current time)\n- How many have entropy bits where the Least Significant Bit (LSB) is 1?\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/12/ulids/5 \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    \"00WEGGF0G0J5HEYXS3D7RWZGV8\",\n    \"76EP4G39R8JD1N8AQNYDVJBRCF\",\n    \"018CJ7KMG0051CDCS3B7BFJ3AK\",\n    \"00Y986KPG0AMGB78RD45E9109K\",\n    \"010451HTG0NYWMPWCEXG6AJ8F2\",\n    \"01HH9SJEG0KY16H81S3N1BMXM4\",\n    \"01HH9SJEG0P9M22Z9VGHH9C8CX\",\n    \"017F8YY0G0NQA16HHC2QT5JD6X\",\n    \"03QCPC7P003V1NND3B3QJW72QJ\"\n  ]'\n\n{\n  \"christmas eve\": 3,\n  \"weekday\": 1,\n  \"in the future\": 2,\n  \"LSB is 1\": 5\n}\n```\n\n---\n\nAuthors: [orhun](https://github.com/orhun), [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/challenges/13.md",
    "content": "# 🎄 Day 13: Santa's Gift Orders\n\n*Santa Claus has started facing a pressing issue at the North Pole. The existing database, written in a legacy language, is becoming insufficient for handling the tidal wave of gift requests from children worldwide. This ancient system is not only slowing down operations, but it is also proving harder to maintain.*\n\n*To ensure that not a single child's wish is overlooked and operations run as efficiently as possible, an immediate upgrade is a necessity.*\n\n## ⭐ Task 1: SQL? Sequel? Squeel??\n\nSanta's gift order database is written in an ancient language and needs to be oxidized.\nLet's show him the power of Rust with your backend combined with a Postgres database.\n\nAdd a Postgres database with the [Shuttle Shared Database](https://docs.shuttle.rs/resources/shuttle-shared-db) plugin, and add the pool to your application state.\nAdd a GET endpoint `/13/sql` that executes the SQL query `SELECT 20231213` and responds with the query result (an `i32` turned into a string).\n\n### 🔔 Tips\n\n- [sqlx](https://docs.rs/sqlx/latest/sqlx/)\n- [Shuttle Examples: Axum Postgres](https://github.com/shuttle-hq/shuttle-examples/tree/main/axum/postgres)\n- [Shuttle Examples: Actix Web Postgres](https://github.com/shuttle-hq/shuttle-examples/tree/main/actix-web/postgres)\n- [Shuttle Examples: Rocket Postgres](https://github.com/shuttle-hq/shuttle-examples/tree/main/rocket/postgres)\n\n### 💠 Example\n\n```bash\ncurl http://localhost:8000/13/sql\n\n20231213\n```\n\n## ⭐ Task 2: Use code NorthPole2023 for 2023% off???\n\nNow that the data can be migrated over to the new database, we see that Santa's workshop has received numerous gift orders from different regions. Time to do some basic analysis.\n\nCreate a POST endpoint `/13/reset` that (re-)creates the following schema in your database upon being called, and returns a plain `200 OK`.\nIt will be used at the start of each test to ensure a clean starting point.\n\n```sql\nDROP TABLE IF EXISTS orders;\nCREATE TABLE orders (\n  id INT PRIMARY KEY,\n  region_id INT,\n  gift_name VARCHAR(50),\n  quantity INT\n);\n```\n\nThen, create a POST endpoint `/13/orders` that takes a JSON array of order objects and inserts them into the table (see below). Return a plain `200 OK`.\n\nLastly, create a GET endpoint `/13/orders/total` that queries the table and returns the total number of gifts ordered (the sum of all quantities).\n\n### 🔔 Tips\n\nUse a `SELECT` statement and the `SUM()` function. The result can be extracted as one row with an `i64` on the Rust side.\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/13/reset\ncurl -X POST http://localhost:8000/13/orders \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    {\"id\":1,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":5},\n    {\"id\":2,\"region_id\":2,\"gift_name\":\"Doll\",\"quantity\":8},\n    {\"id\":3,\"region_id\":3,\"gift_name\":\"Action Figure\",\"quantity\":12},\n    {\"id\":4,\"region_id\":4,\"gift_name\":\"Board Game\",\"quantity\":10},\n    {\"id\":5,\"region_id\":2,\"gift_name\":\"Teddy Bear\",\"quantity\":6},\n    {\"id\":6,\"region_id\":3,\"gift_name\":\"Toy Train\",\"quantity\":3}\n  ]'\ncurl http://localhost:8000/13/orders/total\n\n{\"total\":44}\n```\n\n## 🎁 Task 3: Truly one of the gifts of all time (100 bonus points)\n\nAdd a GET endpoint `/13/orders/popular` that returns the name of the most popular gift.\nIf there is no most popular gift, use `null` instead of a string.\n\n```bash\ncurl -X POST http://localhost:8000/13/reset\ncurl -X POST http://localhost:8000/13/orders \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    {\"id\":1,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":5},\n    {\"id\":2,\"region_id\":2,\"gift_name\":\"Doll\",\"quantity\":8},\n    {\"id\":3,\"region_id\":3,\"gift_name\":\"Toy Train\",\"quantity\":4}\n  ]'\ncurl http://localhost:8000/13/orders/popular\n\n{\"popular\":\"Toy Train\"}\n```\n\n---\n\nAuthors: [orhun](https://github.com/orhun), [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/challenges/14.md",
    "content": "# 🎄 Day 14: Reindeering HTML\n\n*Did you hear about the time when Santa became a web designer? He picked up coding with great enthusiasm. Each tag told a story, every element was a toy, and every attribute was a wish from a child around the world. He soon managed to build a website where children could easily send their letters filled with Christmas wishes, and the elves could more efficiently organize the toymaking process.*\n\n## ⭐ Task 1: Ho-ho, Toymaking Magic Land! (HTML)\n\nToday we are simulating an incident that happened shortly after Santa joined the web dev team at the North Pole.\n\nImplement a POST endpoint `/14/unsafe` that takes some HTML content and *unsafely* renders it on a small HTML page.\n\n### 🔔 Tips\n\nIf you choose to use a templating engine for this task, make sure you disable escaping to allow unsafe rendering.\n\n### 💠 Example Input\n\n```bash\ncurl -X POST http://localhost:8000/14/unsafe \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"content\": \"<h1>Welcome to the North Pole!</h1>\"}'\n```\n\n### 💠 Example Output\n\nMake sure that no extra whitespace is rendered. The response content below is 124 bytes long.\n\n```html\n<html>\n  <head>\n    <title>CCH23 Day 14</title>\n  </head>\n  <body>\n    <h1>Welcome to the North Pole!</h1>\n  </body>\n</html>\n```\n\n---\n\n## 🎁 Task 2: Safety 2nd (100 bonus points)\n\nTime to clean up the mess that Santa caused in Task 1.\nShow him how it's done in `/14/safe` by securely rendering the HTML against script injection.\n\n### 💠 Example Input\n\n```bash\ncurl -X POST http://localhost:8000/14/safe \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"content\": \"<script>alert(\\\"XSS Attack!\\\")</script>\"}'\n```\n\n### 💠 Example Output\n\n```html\n<html>\n  <head>\n    <title>CCH23 Day 14</title>\n  </head>\n  <body>\n    &lt;script&gt;alert(&quot;XSS Attack!&quot;)&lt;/script&gt;\n  </body>\n</html>\n```\n\n---\n\nAuthors: [orhun](https://github.com/orhun), [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/challenges/15.md",
    "content": "# 🎄 Day 15: The Password Validator\n\n*There had been a few naughty incidents where mischievous users had tinkered with other children's wish lists, not respecting the goodwill and spirit of the platform. It was clear: the website needed to add a layer of security to protect the integrity of each child's wish list.*\n\n*The team behind the scenes, a dedicated crew of Santa's tech-savvy elves (led by you), rolled up their sleeves. They decided to implement a homemade password validation system that ensured that no Grinch could easily guess or crack the password.*\n\n## ⭐ Task 1: Naughty or Nice Strings\n\nNow that children can sign up to the letter sending website, we need an endpoint for validating their passwords.\n\nCreate an endpoint at `/15/nice` that accepts POST requests with a JSON payload containing a password string to validate.\n\nThe rules at this endpoint are:\n\n- **Nice Strings**: Must contain at least three vowels (`aeiouy`), at least one letter that appears twice in a row, and must not contain the substrings: `ab`, `cd`, `pq`, or `xy`.\n- **Naughty Strings**: Do not meet the criteria for nice strings.\n\nReturn an appropriate HTTP status code and message (see below) indicating whether the provided string is nice or naughty.\n\n### 🔔 Tips\n\nUse Rust's string and char methods or [regex](https://crates.io/crates/regex) for validation.\n\n### 💠 Examples\n\n```bash\ncurl -X POST http://localhost:8000/15/nice \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"input\": \"hello there\"}'\n\n# 200 OK\n{\"result\":\"nice\"}\n```\n\n```bash\ncurl -X POST http://localhost:8000/15/nice \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"input\": \"abcd\"}'\n\n# 400 Bad Request\n{\"result\":\"naughty\"}\n```\n\n```bash\ncurl -X POST http://localhost:8000/15/nice \\\n  -H 'Content-Type: application/json' \\\n  -d '{Grinch? GRINCH!}'\n\n# 400 Bad Request\n# response body does not matter\n```\n\n---\n\n## 🎁 Task 2: Game of the Year (400 bonus points)\n\nSanta thought this validation thing was so fun that it could be turned into a game!\n\nAdd a similar endpoint, POST `/15/game`, that has this set of rules:\n\n- **Nice Strings**: Must adhere to all the rules:\n  - Rule 1: must be at least 8 characters long\n  - Rule 2: must contain uppercase letters, lowercase letters, and digits\n  - Rule 3: must contain at least 5 digits\n  - Rule 4: all *integers* (sequences of consecutive digits) in the string must add up to 2023\n  - Rule 5: must contain the letters `j`, `o`, and `y` in that order and in no other order\n  - Rule 6: must contain a letter that repeats with exactly one other letter between them (like `xyx`)\n  - Rule 7: must contain at least one unicode character in the range `[U+2980, U+2BFF]`\n  - Rule 8: must contain at least one emoji\n  - Rule 9: the hexadecimal representation of the sha256 hash of the string must end with an `a`\n- **Naughty Strings**: Do not meet the criteria for nice strings.\n\nCheck the string for the rules in the listed order. Return the corresponding status code and reason (and naughty/nice result) based on which rule was violated:\n\n| Rule broken | Status Code | Reason |\n|-------------|-------------|--------|\n| 1 | 400 | `8 chars` |\n| 2 | 400 | `more types of chars` |\n| 3 | 400 | `55555` |\n| 4 | 400 | `math is hard` |\n| 5 | 406 | `not joyful enough` |\n| 6 | 451 | `illegal: no sandwich` |\n| 7 | 416 | `outranged` |\n| 8 | 426 | `😳` |\n| 9 | 418 | `not a coffee brewer` |\n| None | 200 | `that's a nice password` |\n\n### 💠 Examples\n\n```bash\ncurl -X POST http://localhost:8000/15/game \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"input\": \"password\"}'\n\n# 400 Bad Request\n{\"result\":\"naughty\",\"reason\":\"more types of chars\"}\n```\n\n```bash\ncurl -X POST http://localhost:8000/15/game \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"input\": \"Password12345\"}'\n\n# 400 Bad Request\n{\"result\":\"naughty\",\"reason\":\"math is hard\"}\n```\n\n```bash\ncurl -X POST http://localhost:8000/15/game \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"input\": \"23jPassword2000y\"}'\n\n# 451 Unavailable For Legal Reasons\n{\"result\":\"naughty\",\"reason\":\"illegal: no sandwich\"}\n```\n\n---\n\nAuthors: [orhun](https://github.com/orhun), [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/challenges/18.md",
    "content": "# 🎄 Day 18: Santa's Gift Orders: Data Analytics Edition\n\n*Santa sat back in his plush seat, a mug of hot cocoa in his hand, and a smile on his jolly face. The database upgrade from the previous week had indeed worked out exceptionally well; the operations were running smoother than ever, the reports were accurate, and morale among his helpers was at an all-time high. This modern marvel of technology had infused a new spirit into the North Pole operations.*\n\n## ⭐ Task 1: Mr. Worldwide\n\n*This challenge continues from what was built for the Core tasks on Day 13.*\n\nSanta is stoked about the speed and reliability of the new gift order database backend!\nHe wants you to expand it to support per-region analytics.\n\nCopy the `/13/reset` endpoint from Day 13 to `/18/reset`, but modify the query like this:\n\n```sql\nDROP TABLE IF EXISTS regions;\nDROP TABLE IF EXISTS orders;\n\nCREATE TABLE regions (\n  id INT PRIMARY KEY,\n  name VARCHAR(50)\n);\n\nCREATE TABLE orders (\n  id INT PRIMARY KEY,\n  region_id INT,\n  gift_name VARCHAR(50),\n  quantity INT\n);\n```\n\nWe want to re-use the POST endpoint `/13/orders` at `/18/orders` for adding new orders.\nYou can either add the same handler under the new route, or just copy+paste the entire thing, as long as both endpoints are doing the same thing.\n\nNow, add a POST endpoint `/18/regions` that inserts regions in the same way the orders endpoint does.\n\nLastly, add a GET endpoint `/18/regions/total` that returns the total number of orders per region.\nTo make it easier for Santa to find a location, the output should be alphabetically sorted on the region name.\nRegions with no orders should not be listed in the result.\n\n### 🔔 Tips\n\nYou can `JOIN` the tables and use `GROUP BY` and `SUM()`.\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/18/reset\ncurl -X POST http://localhost:8000/18/regions \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    {\"id\":1,\"name\":\"North Pole\"},\n    {\"id\":2,\"name\":\"Europe\"},\n    {\"id\":3,\"name\":\"North America\"},\n    {\"id\":4,\"name\":\"South America\"},\n    {\"id\":5,\"name\":\"Africa\"},\n    {\"id\":6,\"name\":\"Asia\"},\n    {\"id\":7,\"name\":\"Oceania\"}\n  ]'\ncurl -X POST http://localhost:8000/18/orders \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    {\"id\":1,\"region_id\":2,\"gift_name\":\"Board Game\",\"quantity\":5},\n    {\"id\":2,\"region_id\":2,\"gift_name\":\"Origami Set\",\"quantity\":8},\n    {\"id\":3,\"region_id\":3,\"gift_name\":\"Action Figure\",\"quantity\":12},\n    {\"id\":4,\"region_id\":4,\"gift_name\":\"Teddy Bear\",\"quantity\":10},\n    {\"id\":5,\"region_id\":2,\"gift_name\":\"Yarn Ball\",\"quantity\":6},\n    {\"id\":6,\"region_id\":3,\"gift_name\":\"Art Set\",\"quantity\":3},\n    {\"id\":7,\"region_id\":5,\"gift_name\":\"Robot Lego Kit\",\"quantity\":5},\n    {\"id\":8,\"region_id\":6,\"gift_name\":\"Drone\",\"quantity\":9}\n  ]'\ncurl http://localhost:8000/18/regions/total\n\n[\n  {\"region\":\"Africa\",\"total\":5},\n  {\"region\":\"Asia\",\"total\":9},\n  {\"region\":\"Europe\",\"total\":19},\n  {\"region\":\"North America\",\"total\":15},\n  {\"region\":\"South America\",\"total\":10}\n]\n```\n\n## 🎁 Task 2: West Pole to East Pole - Santa wants ALL the data (600 bonus points)\n\nTo optimize production of gifts for next year, Santa needs detailed insights into the best performing gifts in every region.\n\nCreate a GET endpoint `/18/regions/top_list/<number>` that retrieves the names of the regions along with the top `<number>` most ordered gifts in each region, considering the quantity of orders placed for each gift.\n\nIf there are less than `<number>` unique gifts in a region, the top list will be shorter.\nIf there are no gifts in a region, show that with an empty top list.\n\nIf there is a tie among gifts, use alphabetical ordering of the gift name to break it.\nThe final output shall once again be ordered by region name.\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/18/reset\ncurl -X POST http://localhost:8000/18/regions \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    {\"id\":1,\"name\":\"North Pole\"},\n    {\"id\":2,\"name\":\"South Pole\"},\n    {\"id\":3,\"name\":\"Kiribati\"},\n    {\"id\":4,\"name\":\"Baker Island\"}\n  ]'\ncurl -X POST http://localhost:8000/18/orders \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    {\"id\":1,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":5},\n    {\"id\":2,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":3},\n    {\"id\":3,\"region_id\":2,\"gift_name\":\"Doll\",\"quantity\":8},\n    {\"id\":4,\"region_id\":3,\"gift_name\":\"Toy Train\",\"quantity\":3},\n    {\"id\":5,\"region_id\":2,\"gift_name\":\"Teddy Bear\",\"quantity\":6},\n    {\"id\":6,\"region_id\":3,\"gift_name\":\"Action Figure\",\"quantity\":12},\n    {\"id\":7,\"region_id\":4,\"gift_name\":\"Board Game\",\"quantity\":10},\n    {\"id\":8,\"region_id\":3,\"gift_name\":\"Teddy Bear\",\"quantity\":1},\n    {\"id\":9,\"region_id\":3,\"gift_name\":\"Teddy Bear\",\"quantity\":2}\n  ]'\ncurl http://localhost:8000/18/regions/top_list/2\n\n[\n  {\"region\":\"Baker Island\",\"top_gifts\":[\"Board Game\"]},\n  {\"region\":\"Kiribati\",\"top_gifts\":[\"Action Figure\",\"Teddy Bear\"]},\n  {\"region\":\"North Pole\",\"top_gifts\":[]},\n  {\"region\":\"South Pole\",\"top_gifts\":[\"Doll\",\"Toy Train\"]}\n]\n```\n\n---\n\nAuthors: [jonaro00](https://github.com/jonaro00), [orhun](https://github.com/orhun)\n"
  },
  {
    "path": "cch23/challenges/19.md",
    "content": "# 🎄 Day 19: Christmas Sockets on the Chimney\n\n*On a cold and snowy winter day, Santa Claus was busy with his annual routine when he spotted a new delivery of vibrant socks hanging on his chimney. The hues and prints on these socks were unlike anything he had seen before - intricate patterns with tiny paddles embroidered on them. He chuckled, remembering how he used to juggle between writing protocols for his websocket apps and practising his backhand strokes on his virtual table tennis game.*\n\n## ⭐ Task 1: Table Tennis Server 🏓\n\nWrite a WebSocket GET endpoint `/19/ws/ping` that listens for messages of type Text.\n\n- If the incoming string is `serve`, the game starts in this WebSocket.\n- If and only if the game has started, respond with a string `pong` whenever the incoming string is `ping`.\n- All other incoming messages should be ignored.\n\n### 🔔 Tips\n\nCheck your web framework's documentation for how to use WebSockets.\n\n### 💠 Example\n\ncurl is not sufficient for testing WebSocket behavior with simple commands.\nUse the official validator (link at bottom of page) to run local tests for this challenge.\n\n## 🎁 Task 2: Bird App Simulator (500 bonus points)\n\nTo improve internal communications at the North Pole, Santa is trying out a real-time variant of Twitter (sometimes referred to as a \"chat app\").\n*(Santa is old-school & cool - still calls it Twitter instead of X).*\n\nIn order to know how much the elves are using the platform, Santa wants some metrics.\nHe thinks it is sufficient to just count the total number of views on all tweets.\n\nHere are the required endpoints:\n\n- POST endpoint `/19/reset` that resets the counter of tweet views.\n- GET endpoint `/19/views` that returns the current count of tweet views.\n- GET endpoint `/19/ws/room/<number>/user/<string>` that opens a WebSocket and connects a user to a room.\n\nThis is how the app should work:\n\n- A user can at any time send a tweet as a Text WebSocket message in the format `{\"message\":\"Hello North Pole!\"}`.\n- When a tweet is received, broadcast it to everyone in the same room (including the sender).\n- Tweets with more than 128 characters are too long and should be ignored by the server.\n- Tweets sent out to room members should have the format `{\"user\":\"xX_f4th3r_0f_chr1stm4s_Xx\",\"message\":\"Hello North Pole!\"}` where user is the author of the tweet (the username that the sender used in the endpoint's URL path).\n- Every time a tweet is successfully sent out to a user, it counts as one view.\n- Keep a running count of the number of views that happen, and return the current view count from the `/19/views` endpoint whenever requested.\n- When a websocket closes, that user leaves the room and should no longer receive tweets.\n- When the reset endpoint is called, the counter is set to 0.\n\nThe view counter can be in-memory and does not need to persist.\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/challenges/20.md",
    "content": "# 🎄 Day 20: Git good\n\n*Santa frowned, his usually merry eyes scanning the data on the screen before him. Something wasn't right. He pulled up the database of gift orders worldwide, but there was a noticeable gap in the records. This was a serious issue, and Santa knew the implications immediately - missing orders meant missing gifts and unhappy children. Just the thought of it made his jolly cheer fade a bit, replaced by a hint of worry.*\n\n*\"Time for a trip down memory lane,\" Santa mumbled to himself as he trudged his way towards the archives. The archives were a labyrinth of shelves, filled to the brim with old records and endless stacks of papers detailing all past Christmases. It was a treasure trove of information that had slowly been digitized, but the older records, the ones that were now in question, still lay tucked in the musty corners of the archive.*\n\n*It wouldn't be an easy task, and even Santa knew it could take hours, maybe even days. But every child mattered, and Santa would not rest until every record was found and every child got their rightful gift. With a deep breath, Santa began his journey in the archives, determined to fill in the gaps and ensure a merry Christmas for all.*\n\n## ⭐ Task 1: Archive Analysis\n\nTo find some very old gift order records, Santa needs to dig deep into the archives.\nYou offer to help him parse and analyze the archive files.\n\nCreate a POST endpoint `/20/archive_files` that receives a `tar` archive file in binary format and returns the number of files inside, and another POST endpoint `/20/archive_files_size` that does the same thing but instead returns the sum of all file sizes.\n\n### 🔔 Tips\n\n- [tar](https://crates.io/crates/tar)\n\n### 💠 Example\n\nDownload the test file [northpole20231220.tar](../validator/assets/northpole20231220.tar) and use it like this:\n\n```bash\ncurl -X POST http://localhost:8000/20/archive_files \\\n  -H 'Content-Type: application/x-tar' \\\n  --data-binary '@northpole20231220.tar'\n\n6\n```\n\n```bash\ncurl -X POST http://localhost:8000/20/archive_files_size \\\n  -H 'Content-Type: application/x-tar' \\\n  --data-binary '@northpole20231220.tar'\n\n1196282\n```\n\n---\n\n## 🎁 Task 2: Git Santa his cookie back (350 bonus points)\n\nSanta lost his cookie recently, and can't find it anymore.\nGood thing that everything in the north pole is logged in the git logs!\nBy using them, we can figure out the last one that saw it.\n\nAdd the endpoint POST `/20/cookie`.\nIt will receive a tar archive just like before, but this time it contains a `.git` directory with a repository structure inside.\nExtract the archive to somewhere on the file system (for example in a temporary directory with the crate [tempfile](https://crates.io/crates/tempfile)) and find the answer to the following instruction that Santa wrote down:\n\n*Find the name of the commit author and the commit hash of the most recent commit on the branch `christmas` that has a tree that contains a file called `santa.txt` (in any directory) with the string `COOKIE` anywhere inside of it.*\n\n- There are no merge commits in the repo (all commits have one parent, except the root commit).\n\n### 💠 Example\n\nTest file: [cookiejar.tar](../validator/assets/cookiejar.tar)\n\n```bash\ncurl -X POST http://localhost:8000/20/cookie \\\n  -H 'Content-Type: application/x-tar' \\\n  --data-binary '@cookiejar.tar'\n\nGrinch 71dfab551a1958b35b7436c54b7455dcec99a12c\n```\n\n---\n\nAuthors: [jonaro00](https://github.com/jonaro00), [orhun](https://github.com/orhun)\n"
  },
  {
    "path": "cch23/challenges/21.md",
    "content": "# 🎄 Day 21: Around the Globe\n\n*Once upon a frosty night in Christmas' season, ol' Santa was tidying up his archives. With his rosy cheeks and a finer air of mystery, he stumbled upon a pile of old, dusty tape drives. Intrigued, he gave a mighty tug and dust flew in the air, making him sneeze in the most jolly way possible.*\n\n*As he dusted them off, memories flooded back. Such mirth and jingle echoed in his mind. They were his old present delivery logs and routes, the ones he hadn't seen in years!*\n\n## ⭐ Task 1: Flat Squares on a Round Sphere?\n\nSanta found a bunch of old tape drives in the archives.\nReading their contents revealed a bunch of coordinates in a strange format encoded with ones and zeroes.\nHe needs some help with parsing them.\n\nMake a GET endpoint `/21/coords/<binary>` that takes a `u64` in binary representation representing an S2 cell ID.\nReturn the cell's center coordinates in DMS format rounded to 3 decimals (see format below).\n\n### 🔔 Tips\n\n- [S2 Cells](http://s2geometry.io/devguide/s2cell_hierarchy)\n- [Decimal degrees](https://en.wikipedia.org/wiki/Decimal_degrees)\n\n### 💠 Examples\n\n```bash\ncurl http://localhost:8000/21/coords/0100111110010011000110011001010101011111000010100011110001011011\n\n83°39'54.324''N 30°37'40.584''W\n```\n\n```bash\ncurl http://localhost:8000/21/coords/0010000111110000011111100000111010111100000100111101111011000101\n\n18°54'55.944''S 47°31'17.976''E\n```\n\n## 🎁 Task 2: Turbo-fast Country Lookup (300 bonus points)\n\nWhen Santa rides his sleigh across the world, he crosses so many country borders that he sometimes forgets which country he is in.\nHe needs a handy little API for quickly checking where he has ended up.\n\nMake a GET endpoint `/21/country/<binary>` with the same type of input as in Task 1, that returns the english name of the country that the corresponding coordinates are in.\n\nThe input is guaranteed to represent coordinates that are within one country's borders.\n\nHint for an API that *can* be used to solve this task: *\"In a tunnel? Closed. On a street? Open. In a tunnel? Slow. Passing over? Turbo.\"*\n\n### 💠 Example\n\n```bash\ncurl http://localhost:8000/21/country/0010000111110000011111100000111010111100000100111101111011000101\n\nMadagascar\n```\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/challenges/22.md",
    "content": "# 🎄 Day 22: Dawn of the day before the day before the final day\n\n*When Christmas Eve rolls around, it's game time. Santa, decked out in his jolly red suit, strides over to his fully-stacked sleigh. His eyes twinkle as he checks his list one last time on his high-tech sleigh dashboard. The backend has been working like a charm after the recent upgrades.*\n\n*With a crack of his whip and a hearty \"Ho ho ho,\" off they go into the snowy night. The reindeers take off like an orange space rocket, disappearing into the starry sky, on a journey to deliver joy to the world!*\n\n## ⭐ Task 1: Leave no gift behind!\n\nDuring a last minute database migration in the gift order database, Santa noticed that a small de-sync happened.\nOne gift order slipped through the cracks and only ended up in one of the database replicas.\nSince it's already Dec 22nd, Santa tells you we need to recover the lost record immediately.\nNo child must be left without a gift this Christmas!\n\nWhen Santa started extracting all gift order IDs from the database replicas, something got jumbled up and caused them to print in a random order.\nGreat... now we have two long lists of random numbers with just one number differing between them. Santa knows you are good at coding, so he concatenates the two files, scrambles the order again and lets you find the integer without a pair.\n\nMake a POST endpoint `/22/integers` that takes in a text body with one positive `u64` integer on each line.\nAll integers appear twice, except for one. Find it and respond with a string consisting of that number of Present emojis (🎁).\n\n*Food for thought: How memory efficient can you make your solution? Is it possible to make the integer filtering non-allocating?*\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/22/integers \\\n  -H 'Content-Type: text/plain' \\\n  -d '888\n77\n888\n22\n77\n'\n\n🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁🎁\n```\n\n## 🎁 Task 2: The Shuttle Rocket (600 bonus points)\n\nWhen Santa speeds across Earth to deliver presents, he looks up to the skies and sees the Shuttle Rocket taking off to the stars.\nThe crew on the rocket, in their quest to visit the stars at the edge of the CCH23 galaxy, has discovered that some magical portals have opened near every star.\nThe portals allow instant bidirectional travel between stars.\nThis saves the crew a lot of flight time to the outer edge, but now they need to figure out which portals to take in order to get to the destination.\n\nThe input is sent as text in a POST request to `/22/rocket` in this format:\n\n- The first line has a number *N* (`2 <= N <= 100`), the number of stars in the galaxy.\n- On the following *N* lines are the 3D coordinates of each star in the galaxy as three `i32`s.\n- Then follows a line with the number *K* (`1 <= K <= 100`), the number of portals in the galaxy.\n- On the following *K* lines are the stars that each portal connects as two star indices.\n\nThe crew wants to travel from star *0* to star *N-1* on the path that goes through the least amount of portals, since going through portals make them feel dizzy.\n\nAfter the path with the least portals has been found, the crew wants to know:\n\n- How many portals did they have to go through?\n- How long would the path they took have been if no portals existed? (as an `f32` rounded to 3 decimals)\n\nRemember to not get stuck in an infinite portal loop!\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/22/rocket \\\n  -H 'Content-Type: text/plain' \\\n  -d '5\n0 1 0\n-2 2 3\n3 -3 -5\n1 1 5\n4 3 5\n4\n0 1\n2 4\n3 4\n1 2\n'\n\n3 26.123\n```\n\nExplanation:\n\nThere are 5 stars and 4 portals.\nWe can get from star 0 to star 4 by going through these portals:\n\n- portal 0 from star 0 to star 1\n- portal 3 from star 1 to star 2\n- portal 1 from star 2 to star 4\n\nThe path is 0 -> 1 -> 2 -> 4. 3 portals were used.\nThe length of this path without taking any portals would have been `distance(star 0, star 1) + distance(star 1, star 2) + distance(star 2, star 4)` where `distance()` is the distance between two stars.\n\n## 🎁 Bonus challenge\n\n*The mischievous elves have been hard at work hiding words! Santa has noticed that 4 words from the manuscript for his grand Christmas Speech have been erased. The speech will be held on Christmas Eve (before the big trip) in front of everyone at the North Pole, so it would be a great embarrassment to not have the words right.*\n\nThe **4 secret words** have been hidden in various places across the CCH23 realm.\nSearch for them **everywhere** in the published CCH23 pages and resources.\n\n- The answers are single english words.\n- The elves are no amateurs - some words are hidden far outside of direct sight!\n\n- Word 1\n  - Hint 1: Santa's night vision goggles received a software update\n  - Hint 2: The update is called \"V11.0.0.PX module 8: Enhanced bull vision\"\n  - Hint 3: Red, module 8\n- Word 2\n  - Hint 1: Santa dropped a bag of toys on the floor\n  - Hint 2: They landed in an interesting way\n  - Hint 3: They landed in a line in a specific order\n- Word 3\n  - Hint 1: Elf Twitter is under a spam attack\n- Word 4\n  - Hint 1: The elves have been busy rigging a lottery\n  - Hint 2: They left some weird traces\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/challenges/4.md",
    "content": "# 🎄 Day 4: What do you call a serialized reindeer? Serdeer!\n\n*Under the soft glow of the Northern Lights, Santa's reindeer are training for the big night. But, oh deer! The reindeer's stats have been serialized into an unknown format after a playful elf accidentally spilled hot cocoa on the central computer. The data needs to be deserialized so the reindeer team can be assembled based on their combined strength.*\n\n## ⭐ Task 1: Reindeer cheer\n\nThe task is to create a POST endpoint `/4/strength` that calculates the combined strength of a group of reindeer, so that Santa knows if they can pull his sled through the skies.\n\nThe input to the endpoint is a JSON array containing information about each reindeer. Each reindeer is represented as an object with two attributes: `\"name\"` (string) and `\"strength\"` (integer). Collect the strength of each reindeer and respond with the sum.\n\n### 🔔 Tips\n\n- [serde](https://docs.rs/serde/latest/serde/)\n- [serde_json](https://docs.rs/serde_json/latest/serde_json/)\n- [JSON in Axum](https://docs.rs/axum/latest/axum/struct.Json.html)\n- [JSON in Actix Web](https://actix.rs/docs/request)\n- [JSON in Rocket](https://rocket.rs/v0.5/guide/requests/#json)\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/4/strength \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    { \"name\": \"Dasher\", \"strength\": 5 },\n    { \"name\": \"Dancer\", \"strength\": 6 },\n    { \"name\": \"Prancer\", \"strength\": 4 },\n    { \"name\": \"Vixen\", \"strength\": 7 }\n  ]'\n\n22\n```\n\n---\n\n## 🎁 Task 2: Cursed candy eating contest (150 bonus points)\n\nThis time, there is some more data for each reindeer (see example).\nThe endpoint is called `/4/contest`, because the reindeer are now  going to compare the attributes of the reindeer and present a summary of the winners.\n\nThere is at least one reindeer participating in the contest, and there is never a tie for first place.\n\nFor some reason, one of the field names in the input seems to still be a bit corrupted from the incident. Guess we just have to deal with it anyways.\n\nThe output should be a JSON object containing a summary of the winners (see example).\n\n### 💠 Example Input\n\n```bash\ncurl -X POST http://localhost:8000/4/contest \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    {\n      \"name\": \"Dasher\",\n      \"strength\": 5,\n      \"speed\": 50.4,\n      \"height\": 80,\n      \"antler_width\": 36,\n      \"snow_magic_power\": 9001,\n      \"favorite_food\": \"hay\",\n      \"cAnD13s_3ATeN-yesT3rdAy\": 2\n    },\n    {\n      \"name\": \"Dancer\",\n      \"strength\": 6,\n      \"speed\": 48.2,\n      \"height\": 65,\n      \"antler_width\": 37,\n      \"snow_magic_power\": 4004,\n      \"favorite_food\": \"grass\",\n      \"cAnD13s_3ATeN-yesT3rdAy\": 5\n    }\n  ]'\n```\n\n### 💠 Example Output\n\n*Note: JSON output examples are sometimes formatted. Output from your endpoint does not need to be formatted. The output is parsed and checked as a value.*\n\n```json\n{\n  \"fastest\": \"Speeding past the finish line with a strength of 5 is Dasher\",\n  \"tallest\": \"Dasher is standing tall with his 36 cm wide antlers\",\n  \"magician\": \"Dasher could blast you away with a snow magic power of 9001\",\n  \"consumer\": \"Dancer ate lots of candies, but also some grass\"\n}\n```\n\n---\n\n## 🔔 Bonus Content: Rust Crossword\n\nTo keep the Christmas spirit alive, we have created a [Rust-themed crossword](https://crosswordlabs.com/view/shuttle-rust-crossword) for you to enjoy.\n\n---\n\nAuthors: [jonaro00](https://github.com/jonaro00), [orhun](https://github.com/orhun)\n"
  },
  {
    "path": "cch23/challenges/5.md",
    "content": "# 🎄 Day 5: Why did Santa's URL query go haywire on Christmas? Too many \"present\" parameters!\n\n*In the technologically advanced North Pole, Santa decided to streamline his gift-tracking system using URL query parameters, entrusting the elves with entering present requests. However, the mischievous Grinch added duplicate parameters like \"present=puzzle\" and \"present=unicorn\" as a prank. On Christmas Eve, as Santa set out to deliver gifts, the excess parameters caused a glitch: the list of names entered an infinite loop.*\n\n## ⭐ Task 1: Slicing the Loop\n\nSanta has some lists of names that are becoming too long to deal with.\nHelp him by adding URL query parameters for paginating the list.\n\nThe task is to create a POST endpoint `/5` that takes a JSON list of names, and query parameters `offset` and `limit` as numbers.\nThen, return the sub-slice of the list between index `offset` and `offset + limit`.\n\n### 🔔 Tips\n\n- [Query parameters in Axum](https://docs.rs/axum/latest/axum/extract/struct.Query.html)\n- [Query strings in Actix Web](https://actix.rs/docs/extractors/)\n- [Query strings in Rocket](https://rocket.rs/v0.5/guide/requests/#query-strings)\n\n### 💠 Example\n\n```bash\ncurl -X POST \"http://localhost:8000/5?offset=3&limit=5\" \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    \"Ava\", \"Caleb\", \"Mia\", \"Owen\", \"Lily\", \"Ethan\", \"Zoe\",\n    \"Nolan\", \"Harper\", \"Lucas\", \"Stella\", \"Mason\", \"Olivia\"\n  ]'\n\n[\"Owen\", \"Lily\", \"Ethan\", \"Zoe\", \"Nolan\"]\n```\n\n---\n\n## 🎁 Task 2: Time to Page Some Names (150 bonus points)\n\nThis time, Santa also needs to be able to get all pages at once.\n\nModify the same endpoint, so that it can also handle a `split` parameter.\nAll parameters should now be optional.\nIf not given, `offset` defaults to 0, and `limit` defaults to including all remaining items in the list.\nIf `split` is not given, no splitting will happen, but if given, the output list should be split into sub-lists with length according the the value.\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/5?split=4 \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    \"Ava\", \"Caleb\", \"Mia\", \"Owen\", \"Lily\", \"Ethan\", \"Zoe\",\n    \"Nolan\", \"Harper\", \"Lucas\", \"Stella\", \"Mason\", \"Olivia\"\n  ]'\n\n[\n  [\"Ava\", \"Caleb\", \"Mia\", \"Owen\"],\n  [\"Lily\", \"Ethan\", \"Zoe\", \"Nolan\"],\n  [\"Harper\", \"Lucas\", \"Stella\", \"Mason\"],\n  [\"Olivia\"]\n]\n```\n\n```bash\ncurl -X POST \"http://localhost:8000/5?offset=5&split=2\" \\\n  -H 'Content-Type: application/json' \\\n  -d '[\n    \"Ava\", \"Caleb\", \"Mia\", \"Owen\", \"Lily\", \"Ethan\", \"Zoe\",\n    \"Nolan\", \"Harper\", \"Lucas\", \"Stella\", \"Mason\", \"Olivia\"\n  ]'\n\n[\n  [\"Ethan\", \"Zoe\"],\n  [\"Nolan\", \"Harper\"],\n  [\"Lucas\", \"Stella\"],\n  [\"Mason\", \"Olivia\"]\n]\n```\n\n---\n\nAuthors: [joshua-mo-143](https://github.com/joshua-mo-143), [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/challenges/6.md",
    "content": "# 🎄 Day 6: Elf on a shelf\n\n*It's that time of year when the elves hide on shelves to watch over the children of the world, reporting back to Santa on who's been naughty or nice. However, this year's reports have been mixed up with the rest of the letters to Santa, and the word \"elf\" is hidden throughout a mountain of text.*\n\n## ⭐ Task 1: Never count on an elf\n\nElves are notorious for their hide-and-seek skills,\nand now they've hidden themselves in strings of text!\n\nCreate an endpoint `/6` that takes a POST request with a raw string as input and count how many times the substring `\"elf\"` appears.\n\nThe output should be a JSON object containing the count of the string `\"elf\"`.\n\n### 🔔 Tips\n\n- [Rust Primitive Type str](https://doc.rust-lang.org/std/primitive.str.html)\n- [Rust String struct](https://doc.rust-lang.org/std/string/struct.String.html)\n\n### 💠 Examples\n\n```bash\ncurl -X POST http://localhost:8000/6 \\\n  -H 'Content-Type: text/plain' \\\n  -d 'The mischievous elf peeked out from behind the toy workshop,\n      and another elf joined in the festive dance.\n      Look, there is also an elf on that shelf!'\n\n{\"elf\":4}\n```\n\n---\n\n## 🎁 Task 2: Shelf under an elf? (200 bonus points)\n\nAdd two fields to the response that counts:\n\n- The number of occurrences of the string `\"elf on a shelf\"` in a field with the same name.\n- The number of shelves that don't have an elf on it. That is, the number of strings `\"shelf\"` that are not preceded by the string `\"elf on a \"`. Put this count in the field `\"shelf with no elf on it\"`.\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/6 \\\n  -H 'Content-Type: text/plain' \\\n  -d 'there is an elf on a shelf on an elf.\n      there is also another shelf in Belfast.'\n\n{\"elf\":5,\"elf on a shelf\":1,\"shelf with no elf on it\":1}\n```\n\n---\n\nAuthors: [orhun](https://github.com/orhun), [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/challenges/7.md",
    "content": "# 🎄 Day 7: GET Santa some cookies\n\n*At Santa's base near the North Pole (64 km away to be precise), the scent of freshly baked cookies fills the air, a sign that Christmas is near. Santa, however, has forgotten the encoding method that was used to hide his favorite cookie recipe in web browsers around the world. He needs this super-secret recipe (based on his grandfather's recipe made in 1964!) to fuel his late-night toy-making sessions.*\n\n## ⭐ Task 1: Based encoding, 64th edition\n\nSanta's secret cookie recipe is hidden in an encoded message,\nand he's looking to you for help. He's sending a GET request to your\nserver with a `Cookie` header.\n\nWhat you need to do is parse the Cookie header, decode the value in the *recipe* field, and return it.\n\nMake an endpoint `/7/decode` that extracts the `Cookie` HTTP header.\nThe header in the request will look something like this:\n\n```text\nCookie: recipe=eyJmbG91ciI6MTAwLCJjaG9jb2xhdGUgY2hpcHMiOjIwfQ==\n```\n\nAfter decoding the recipe value to bytes, convert it to a string and return it as the response to the GET request.\n\n### 🔔 Tips\n\n*\"Which encoding?\"* you might ask. Look around this page and the links below to get some hints!\n\n- [Binary-to-text encoding standards](https://en.wikipedia.org/wiki/Binary-to-text_encoding#Encoding_standards)\n- [Crates.io: Encoding](https://crates.io/categories/encoding?sort=downloads)\n- [MDN Web docs: Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie)\n\n### 💠 Example\n\n```bash\ncurl http://localhost:8000/7/decode \\\n  -H 'Cookie: recipe=eyJmbG91ciI6MTAwLCJjaG9jb2xhdGUgY2hpcHMiOjIwfQ=='\n\n{\"flour\":100,\"chocolate chips\":20}\n```\n\n---\n\n## 🎁 Task 2: The secret cookie recipe (120 bonus points)\n\nNow that the recipe is decoded, Santa can get back to baking cookies! Santa is not sure, however, if he has enough of each ingredient to bake a cookie for every elf.\n\nThe same type of request as in Task 1 will be sent to a new endpoint, `/7/bake`, but this time Santa needs your help to calculate the amount of cookies he can bake with the ingredients he has in the pantry.\n\nAfter decoding, parse the bytes as a JSON object (shape and keys can be seen in the example below) and use that to calculate how many cookies can be baked with the provided recipe and ingredients. Additionally, return the amount of ingredients that would remain in the pantry after the cookies have been baked.\n\n### 💠 Example Input\n\n```bash\ncurl http://localhost:8000/7/bake \\\n  -H 'Cookie: recipe=eyJyZWNpcGUiOnsiZmxvdXIiOjk1LCJzdWdhciI6NTAsImJ1dHRlciI6MzAsImJha2luZyBwb3dkZXIiOjEwLCJjaG9jb2xhdGUgY2hpcHMiOjUwfSwicGFudHJ5Ijp7ImZsb3VyIjozODUsInN1Z2FyIjo1MDcsImJ1dHRlciI6MjEyMiwiYmFraW5nIHBvd2RlciI6ODY1LCJjaG9jb2xhdGUgY2hpcHMiOjQ1N319'\n```\n\nAfter decoding, the recipe above will look like this JSON object:\n\n```text\n{\n  \"recipe\": {\n    \"flour\": 95,\n    \"sugar\": 50,\n    \"butter\": 30,\n    \"baking powder\": 10,\n    \"chocolate chips\": 50\n  },\n  \"pantry\": {\n    \"flour\": 385,\n    \"sugar\": 507,\n    \"butter\": 2122,\n    \"baking powder\": 865,\n    \"chocolate chips\": 457\n  }\n}\n```\n\n### 💠 Example Output\n\n```text\n{\n  \"cookies\": 4,\n  \"pantry\": {\n    \"flour\": 5,\n    \"sugar\": 307,\n    \"butter\": 2002,\n    \"baking powder\": 825,\n    \"chocolate chips\": 257\n  }\n}\n```\n\nExplanation: The recipe represents the required ingredients to make one cookie. After baking 4 cookies, we have 5 units of flour left and can't bake any more.\n\n---\n\n## 🎁 Task 3: Questionable cookie recipes (100 bonus points)\n\nSome mischievous elves have now found your endpoint, and are trying their \"innovative\" cookie recipes on it, without even knowing what ingredients are available in the pantry!\n\nUpdate the endpoint from Task 2 so that any set of ingredients can be present in the recipe and the pantry, respectively.\n\nThe number of cookies in the answer will always be finite.\n\n### 💠 Example\n\n```text\ncurl http://localhost:8000/7/bake \\\n  -H 'Cookie: recipe=eyJyZWNpcGUiOnsic2xpbWUiOjl9LCJwYW50cnkiOnsiY29iYmxlc3RvbmUiOjY0LCJzdGljayI6IDR9fQ=='\n\n{\n  \"cookies\": 0,\n  \"pantry\": {\n    \"cobblestone\": 64,\n    \"stick\": 4\n  }\n}\n```\n\n---\n\nAuthors: [jonaro00](https://github.com/jonaro00), [orhun](https://github.com/orhun)\n"
  },
  {
    "path": "cch23/challenges/8.md",
    "content": "# 🎄 Day 8: PokéPhysics\n\n*In the heart of the North Pole, Santa's workshop buzzes with a new type of magic. A portal has opened, and Pokémon from another world have tumbled into the snow-dusted realm of elves and reindeer. Santa, ever the innovator, sees an opportunity: why not enlist these charming creatures in his annual gift-giving campaign?*\n\n*But before the sleigh bells ring and the Pokémon can join the flight, Santa needs to understand their unique properties and figure out how many can fit into his sleigh, given their weight.*\n\n## ⭐ Task 1: IT'S PIKACHU!\n\nYour quest is to add a GET endpoint `/8/weight/<pokedex_number>` that, given a pokédex number, responds with the corresponding Pokémon's weight in kilograms as a number in plain text.\n\n### 🔔 Tips\n\n- [PokéAPI](https://pokeapi.co/)\n- [reqwest](https://docs.rs/reqwest/latest/reqwest/)\n\n### 💠 Example\n\n```bash\ncurl http://localhost:8000/8/weight/25\n\n6\n```\n\n---\n\n## 🎁 Task 2: That's gonna leave a dent (160 bonus points)\n\nOnce the Pokémon's weight is retrieved, Santa needs you to calculate the momentum it would have at the time of impact with the floor if dropped from a 10-meter high chimney *(so that he knows if he needs to climb down or if he can just drop it)*.\n\nKeep in mind that the gravity of Earth that Santa has in his physics book was measured close to the North Pole. This could explain why his calculations are a bit off sometimes, but he still wants you to use it.\n\nThe momentum, measured in Newton-seconds, signifies the force the Pokémon would exert upon meeting the floor beneath the 10-meter high chimney.\n\nThe GET endpoint `/8/drop/<pokedex_number>` shall respond with a plain text floating point number.\n\n*Use gravitational acceleration `g = 9.825 m/s²`. Ignore air resistance.*\n\n### 💠 Example\n\n```text\ncurl http://localhost:8000/8/drop/25\n\n84.10707461325713\n```\n\n*Validation has a fault tolerance of 0.001*\n\n---\n\nAuthors: [orhun](https://github.com/orhun), [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch23/validator/Cargo.toml",
    "content": "[package]\nname = \"cch23-validator\"\ndescription = \"Validate solutions to challenges from Shuttle's Christmas Code Hunt 2023\"\nhomepage = \"https://www.shuttle.rs/cch\"\nrepository = \"https://github.com/shuttle-hq/shuttlings\"\nauthors = [\"Santa\"]\nversion = \"22.0.5\"\nedition = \"2021\"\nlicense = \"MIT\"\npublish = true\n\n[dependencies]\nbase64 = \"0.22\"\nchrono = { version = \"0.4\", features = [\"clock\", \"serde\"] }\nclap = { version = \"4\", features = [\"derive\", \"cargo\"] }\nfutures-util = \"0.3\"\nreqwest = { version = \"0.12\", default-features = false, features = [\"rustls-tls\", \"json\", \"multipart\", \"stream\"] }\nserde = { version = \"1\", features = [\"derive\"] }\nserde_json = \"1\"\nshuttlings = \"0.1.0\"\ntokio = { version = \"1\", features = [\"full\"] }\ntokio-tungstenite = { version = \"0.24\", features = [\"rustls-tls-native-roots\"] }\ntracing = \"0.1.40\"\nuuid = \"1.5\"\n"
  },
  {
    "path": "cch23/validator/README.md",
    "content": "# Shuttle's Christmas Code Hunt 2023 - Validator\n\nUse this binary to run the official tests against your solution to challenges from [Shuttle's Christmas Code Hunt 2023](https://www.shuttle.dev/cch).\n\n## Installation / Upgrading\n\n```sh\ncargo install cch23-validator\n```\n\n## Usage\n\n```text\nUsage: cch23-validator [OPTIONS] <NUMBERS|--all>\n\nArguments:\n  [NUMBERS]...  The challenge numbers to validate\n\nOptions:\n      --all        Validate all challenges\n  -u, --url <URL>  The base URL to test against [default: http://127.0.0.1:8000]\n  -h, --help       Print help\n  -V, --version    Print version\n```\n\n## Examples\n\n```sh\ncch23-validator -1\ncch23-validator 6 7\ncch23-validator --all\n```\n"
  },
  {
    "path": "cch23/validator/assets/numbers.txt",
    "content": "11278171056114273519\n3751442393314989019\n18347682815989091752\n16318073259550480003\n11276777143002031408\n3882912681273177065\n6407502318670531206\n14679298581959679857\n16903611537127535966\n9214154110562003567\n18186514007264586093\n9615526638090035209\n8176172219945405989\n6470947202872026205\n15874481059901440675\n14127624162970323371\n3159485207117124136\n7162264774097111556\n13174839173917326199\n10972994107288435596\n2792991963846843708\n6483606630233278031\n8505100407492325365\n1520896786972515541\n881725608211970747\n5790337390461613720\n7701802565278373506\n1997081620107619885\n5488682244950930151\n15284605999820833956\n17123163966830615799\n17498369517464686513\n6990713930724471719\n4704573208608869729\n1305182981955380555\n6399728084992713417\n8682788813994392285\n4207040649719514736\n9395626239211612653\n10995383067948893247\n7392519818250487158\n9763625904863613823\n15995933892742883208\n16840104810367977109\n14984307382067943985\n15256331074011979111\n8861581059561092187\n6233556276658524476\n17659516433336498919\n7902155618953046362\n9331506743283462146\n823415564412786543\n5079730260571146267\n17954479059202753810\n4191291082655515328\n11913675369183495024\n4909693062022507927\n4630876459419428174\n11021256825166570882\n16562493312131086680\n1497898312002768161\n17703685559758032725\n8742020013877659941\n10291635553276897686\n6401526899110416173\n16043244962178410443\n2896707729570284962\n13852688362220147904\n2957420751707797427\n3417056834420894359\n6897774613792429343\n6889341150547674183\n13922482948373759016\n8759025454769053589\n7122569313360318064\n14149066662869843475\n2962439647579749906\n6841017561439894278\n5034098092390393466\n1193701105112228558\n10963694387488825063\n10489722066268082137\n5618579261616538298\n95413231391348313\n7914161817657342810\n9017030269661971479\n13771052281209476662\n7539376834766117274\n5343274308479372858\n1212279659217817815\n2423721150054573160\n11469115951191405540\n4123320312972914377\n681971196677626449\n11971037917976172894\n10637029032014105227\n11941160057560583596\n13780244628259586365\n10533531189168132936\n3629390900157270981\n17087688215828147329\n13578073247413785580\n1490005507474061829\n3883371645131873473\n12263391745146778040\n7801132818819914269\n4948457359247665181\n2078542560824193202\n3394872861804295911\n16689861136420156528\n7110462516856664949\n4458796764810705524\n16237285944896317390\n10521491349218267676\n12724323537355529778\n14039794476637099496\n13705675493163153202\n16932416317852511678\n8873432876878377085\n8900717522923401236\n11294199949679367448\n15086138196866070287\n18022682054880634797\n10492174919841101289\n3975962974182961935\n17340445566150283344\n11385368897781350312\n18205829946649243338\n4605182033486152819\n14856167620669339410\n18187284833661701506\n7143966098553468117\n4951749968341303051\n15958802952230303427\n17550024067652137260\n16415472041294125775\n9268320731006177555\n15270673067450636960\n5444469974529026808\n12627006486082370810\n15663746086902308913\n10105190730381910870\n2191671188227177797\n3225214667213521091\n2617885913636748228\n9140674932897736208\n12221533944344764618\n1747617644991251404\n10391168944689122352\n7809005271932882889\n13315267215328755068\n13594491820901212239\n13688461552626486477\n6161279484237089403\n14184536956275709278\n7353128450034344150\n17898632979463811048\n6479741063082408437\n13356117318120935013\n5961665972682879894\n4001034987493628882\n6397600805752232592\n2333615476034270743\n162215541305641057\n13545058223961409091\n8227048128891273652\n15092656122023683632\n17223686676761467488\n5119989549544378979\n12905703268129671267\n5993856626611489899\n15745132728104916409\n14400876787716890772\n7496754786008718680\n1776562263643713856\n4759570989273927148\n15096436164577985503\n5887687619912298522\n13914387122674072685\n1936707732265792360\n1923002259898913468\n7319025258497963116\n4219336280641557403\n17519841451216391026\n10639919262766709592\n15793467648461370073\n10158562383050462031\n8066258050698580069\n8644982129759239367\n299561846510567674\n2089839819355289633\n8209061483315392684\n7176860445847534722\n12757179870644180856\n12237819110608923915\n14408598604393266294\n13249138192794988535\n15618650892753865917\n15109575164197650444\n1658373394370047946\n8485017783746442909\n16782167037170269555\n15896610935349016483\n15647060499961671775\n12262663265992276840\n4122248459762158217\n2958599192007136953\n14208563630454323949\n3770417294339158535\n3581219915900828159\n6624248654771060784\n17930201880379879071\n772240435293427820\n13922190456276139695\n1661007502798918651\n11573672580068740264\n15875891504300200463\n4574517383568586465\n11445053339564295504\n5965770171517787918\n10734590853506398460\n1247653373229207840\n6954435759843609754\n7159358110535689756\n276814041883908860\n15306690074138495155\n14005127796340284889\n7516287003735792081\n7203560265286761543\n16357978367359789271\n1861570217754133639\n9720408652117864580\n760828118539923654\n6651930238017542197\n521880954100851319\n4097125177510788209\n330272594908966086\n1843908984209648059\n912444500454052640\n9284981118775085538\n914347863417776026\n3034027226363971643\n13539180034488842113\n17864482754113637837\n2089839819355289633\n5480288541366243035\n5811597766581449130\n6890631659552898694\n4039692914396988402\n17865300438951513358\n7670300649053105634\n14610894555359348434\n6270594933163270115\n11154138563397873110\n9279711253745708618\n8985147971826821256\n10241470445878520595\n8389840367103709574\n3839776210273286164\n3477001680218503192\n13144100591692962440\n5700330172150548363\n13187843925148795305\n18250997717879562980\n12722726049699965166\n3776985349296233258\n15789507646064215206\n6359352834054497216\n6959625016381647138\n16808150075518290981\n18393786735323900933\n7696264919289618419\n11172579685586783039\n572923994136796612\n1461468821250923955\n15039705479864020326\n2762863117089314183\n9262993542088977008\n9977054735783399023\n15694356453558378743\n4278390492009283969\n3151315081333722292\n18062444972703115013\n16288636616561036370\n14448477209480068204\n16566178804004546156\n6329003081577202773\n14200419799605227426\n5584978628899906301\n9021777196836583183\n583440345030401612\n12074153285940316516\n6317637559568653005\n12657007543615882237\n2055639459498619271\n3100013713648861936\n13576183877131743047\n12114979319972035785\n11263555027838906406\n3718060012356837655\n994198448043828925\n15273308928307019961\n6103331539890858270\n9021564549964937370\n3517064603117319739\n2583204993037233532\n18253331924077000431\n13661071463567512702\n15364525219316410447\n13832110904471386281\n9307847380749891957\n7226061763685135643\n11548431911649878238\n9025565024578725027\n10259956859046183648\n17686846064231799831\n17654866536305984476\n5587592933218900228\n16562136758104465189\n6979164518082235634\n15737210243667059626\n1145053081623077428\n4960766825915777225\n17533332552267492059\n3087091280502715308\n7428310909325635833\n6956870366258906639\n14787043904934800948\n13260971022230431925\n10815452863258259342\n16677883258051580531\n14206499685988491056\n1724017784125406146\n649090718333193560\n14064013388990204371\n904737834165828696\n4790654346342576537\n7283102653666706277\n13789184402320839756\n3285717728537625271\n2935189382528221268\n9455763178180447579\n9912350475397535267\n15884456604966635979\n4283203119319775267\n3390957352027422363\n14936301577017080597\n1031230234184664678\n6378227765251001337\n15103392826420048367\n17868657142183991703\n16855631037003966296\n303002278070257072\n16519749389945642630\n4660855856512690282\n14414868528997896919\n10625116666215912006\n13439127268097928266\n11534107170231651789\n13585097909484760993\n15520850526371615874\n4193953745505248000\n838670693346738263\n3238151140826945864\n2580084793903126873\n2697332232564800576\n2547180481474461073\n2807812234733879252\n17801401792849912085\n12271038148699722202\n8797122824279663657\n4632938134258709286\n6843968473617995\n1730344102097589389\n11303167101104896804\n13891384157546245554\n18073592186035102870\n10710777996449962154\n5999176365781644272\n10952254095573086731\n1709401906294632660\n12945191103519309853\n6427406708158362266\n16139422430982064570\n11166559373958677042\n15020636581385363420\n929718047577267059\n13948831231765767447\n11789344193592869712\n10840826182988365096\n12920508175872523551\n14725803548500388596\n15492967761366086006\n8815483522355778886\n12885048857449888928\n4330751346318391899\n5229830364073525891\n14227003970446648763\n5176159371824023301\n635210990323719356\n8811163479650755164\n1728219986178414653\n14415277956997930958\n6134889782532357464\n14190762167118985847\n9585274734213971900\n4710992773296222824\n10737360427995158327\n14613897644568366219\n11349745958651530997\n1300196501908582817\n699258519105271124\n11421136323545171105\n10820575656908689510\n13165060186929980104\n12006449451084980231\n4746899760222132459\n11561217540858088711\n7192573926950398717\n10513117679053179942\n8864654607073192937\n11759745253208062992\n8677524884845416370\n7776111079177573056\n8642887215113259819\n9986868514285337078\n3454576085629482056\n12199941114162471924\n15825793662688709004\n4367877646216816114\n6232080323900003754\n3002001886978332333\n7506202300330124786\n18107653834195538030\n11886036443304612834\n1251908231051874849\n7283102653666706277\n17841924566544064153\n4827357209171263481\n14653139845988526977\n517197483647225279\n18277479294890738848\n4996310566014731451\n3229578769404233457\n10297522553509695152\n12977886042722479881\n4419971197080674723\n2589331741677700670\n15187433010850447977\n2542120513109645803\n492696584014496896\n11458035012393992963\n17397172579809132471\n3215960192784356718\n15609698410444305853\n11623785214688130\n2219787796877033502\n4047930318561921837\n2554416983359722193\n1294255699754400923\n2500982044877191975\n8515582270400862517\n11938949529061227436\n16836957333058393013\n18010391343853483111\n4914657848748852957\n7610707685239047469\n7888565645628155955\n5536572326046534812\n3286413158491138707\n4386359583518947495\n2562047194752652805\n16084632435662893599\n12660687639316428067\n16345023128634041992\n1227045305207811917\n10689851714763920730\n15497392986878172107\n7719797426150545335\n17242987744208488155\n7482591977385050153\n2657343103907234697\n999694281642359548\n14581736440664115674\n9570878600407924330\n15602552518891249417\n16106616251153267372\n17345830192101384528\n5839733465577238390\n1555954914622828982\n11551910476750762632\n10970915017206913252\n14843783101340448795\n11701033290222296734\n7703679526146141223\n6353053920054809116\n6775367741225632462\n12242665744720741360\n7245597895960439390\n2025036480346181736\n15460611449321921853\n16328309432362318504\n7415577208015742502\n8983449127494935759\n3467387625207593039\n3522101495558523178\n162215541305641057\n10263415208515960965\n16255462347806079738\n11527692483263157359\n10759908214812281898\n10327835851051028320\n319146597929849925\n1248354092844841833\n13637760542483778621\n9700115938205077256\n12321599687151768135\n10928857691045206286\n14621340669769748276\n18069174692654806682\n11979437837046106983\n9746034687256946599\n10437617346914976332\n17784725371680753075\n11333190758006323533\n2119263508785614828\n12800066795611064307\n17740058157839988844\n9611205661388584909\n17948484948391727708\n3902148576847872159\n9410523710342076091\n14829671482196012880\n14276726417029738312\n13057379870569168632\n7611124095577493852\n10673693559053300566\n8008379871380158994\n201900647467760184\n14924170036066137175\n17264547021661416436\n6881166073888290706\n2159958472120605811\n15202218348780815539\n14911155983283016493\n2737310413673734095\n17136642208823758299\n18040323983876388027\n2607530669254888575\n29846174210578563\n3834337311011699565\n2311169221315687022\n11146055437158941697\n3623651457841806502\n3777040938095390732\n9390217602591528886\n16882114890948454063\n16234924760361303134\n11283400160856416728\n10416141460677819459\n18089343284380772009\n5197474343311662712\n11066683420633952511\n3971520667169558534\n6039950632951157952\n12568082877174731206\n9273746577480397890\n1839172145636136210\n2290423613487970140\n17162382036940053649\n5869377827469867607\n11514801442648597842\n9859394103020129337\n12823372931644506965\n9331021337727644560\n7395893089736248897\n5565260200912508096\n4125482166434248872\n4439391539546524596\n10023145889107537938\n3014132540738927105\n9695793092686937199\n3715633590520799487\n15256331074011979111\n9970428922921514349\n7708015999108787783\n7455978143929349715\n16885391630392902912\n15406074692571026126\n10001308057586933589\n5417262184293837233\n2871801466588109391\n1709426537052113212\n9560017661866342355\n10675696802074496976\n5374011275233924539\n11512794531243297075\n13286426583297405729\n14197260962786419507\n2234441354983508876\n17415882076306604415\n10673693559053300566\n14778331508638284751\n10202143874764772751\n4145465072229267582\n10883476614037517647\n5419511754667495451\n8042049423437581436\n13961006347614932365\n7643784810354162396\n15713568456719534280\n8837976757550832228\n7111180640487082025\n5451355090686942417\n9072509312707973146\n6127160028243281900\n5660263823040088244\n15776896697695669348\n142178144297815880\n17975243221356615270\n15187433010850447977\n10498983213366328427\n13547888396000660901\n3403581621352410586\n572561136045458605\n107555067249634519\n5194812685508444444\n6617786327159950987\n1288340154641124490\n15686781282881019487\n13622550225996624366\n18237010196698423178\n3308848975104226576\n12052729189143195939\n15366661690691414140\n11345520738046873247\n2501200304800168507\n5666762048737617123\n3081826479417258532\n8327137636459911903\n11506002556071870831\n13390055752459006563\n2754711293985799133\n8960034619844886310\n8028052587229879328\n6895841149902732686\n10942460962878845019\n3469554805433994956\n4489347248659953973\n9096559152154933202\n6414576814485873572\n10909361261222188035\n10410894244393648455\n16416299932856122186\n14481586030514895640\n266370749732816257\n3402288886302844099\n9132622035038615219\n18413938404097957486\n4778406265868043880\n18173529397337040201\n12142334935692588674\n10270752284359690775\n10402155769984656404\n2913904492564002291\n921814946226230290\n12966328372334541687\n9093438165277988634\n16944672502968187040\n4826681246629239587\n6493745714870440043\n18230680630774867787\n9899923394743179138\n5980452431533076414\n13442205780209344333\n4828484671583780662\n960892423900251268\n13065600209115765068\n10794646106825715479\n7050950562017608211\n9956833409119172110\n8212790770114426300\n4574517383568586465\n15603271364652543904\n4501282384701660912\n10225804963819861035\n9247393093472092889\n12657631513796752556\n15624286206466909213\n11358556171139673782\n16468489254539357644\n17892033338613346354\n12909869839441569974\n8697513470973721386\n7459190770099108991\n11794130045415532309\n17512558056373303924\n16458703020283988049\n7955584698161355674\n7563406252612965189\n3259411684258714003\n15998809144831570776\n11794130045415532309\n4691533966623223350\n15925523189764699004\n4434067970225445256\n14234178327260482810\n9105999171221990459\n10969102453928007890\n16298626761706222319\n17510815492800519819\n16643601106254241773\n2583204993037233532\n832608308602339532\n6378015591549911703\n7178637927273167859\n8093264909799424427\n4949406541361370888\n16278092541016474994\n7406085459588881329\n3411671842989745927\n9006127792802955166\n16161627811257097076\n3600432482581432923\n11350432358444908162\n6885463396613865548\n912983662196164034\n16154649169084705960\n10173644468931336832\n4709666226075195170\n12074109985653315279\n14707306127916729046\n13703105568403905570\n10543963507961964296\n9841113082419688829\n10694052875111452653\n8106840502779619902\n16697301913592060426\n9247379268519299310\n16102918872562035977\n12520096053415708705\n10972994107288435596\n1200827519022313598\n8294394889954363933\n5471791839450823710\n5729979083687500644\n1361952000944955902\n1782797937321700986\n11237552771651491082\n3547390460980277926\n2914720655152715469\n2633288762409192863\n10664876608758315103\n10278518055398716084\n5174228918914143705\n4427743302177313628\n16344700358319309611\n13412650760353747166\n2018157668787117882\n6775587044992752778\n7764152852215584507\n16261111194186098037\n8732997809584898797\n9071405941023490277\n9348521634538877696\n2506974844848596964\n4795776371251122866\n11763379470736882128\n12442509340579496437\n5286713361636540849\n6852346512869396809\n1131877675207168375\n15279657130598345381\n4993883963395254208\n7147143087510819449\n16507436111319540680\n14011001978430842119\n4310839308791657552\n8182479885433205946\n18356346237449553432\n5443192322657767612\n9495260365858183339\n18205829946649243338\n1357885771595192605\n16406374952294475744\n18297515897727348493\n5666696133068840761\n1517298419798250310\n5900592184648736695\n17625587130180253314\n11476212681280527854\n5581095820580299123\n17267492087429193336\n16303220098268747793\n11529426607764862709\n1598448895427611708\n10445773855405410519\n3007761314210976572\n8176172219945405989\n17065444102048912913\n14760686936703361569\n8348770358268697894\n10414188989306380753\n2735109764353599551\n6782225208728194602\n10226437172389362202\n15273607316104336557\n8572445443415791682\n13362190025254324716\n12245109568288598282\n11263348062016359407\n7935796528269614297\n13506546140222585691\n12003680613373681929\n9743764372091098674\n3421420212964245673\n12653134276957037012\n6067666988648823149\n9339931788502227843\n182291667461137302\n6898568018942336798\n10951195238774466495\n9928298800900906058\n635210990323719356\n13330442940669200262\n5535011045276822559\n12748802276743445982\n8818881109018610195\n14179982348033388464\n5937220396445439887\n7011579185273189499\n1958376386903356434\n16310229033767499758\n2991239997182903585\n4709906054320992502\n8373797487172677027\n11683440345011347673\n5141606151392068813\n16073294886823601223\n8002497183738127036\n9986868514285337078\n11173033799466440050\n3357254933008209056\n13991000583922510615\n10454638693425212416\n1210889458853104443\n16847086868074003590\n17666149874669870365\n18322394611983922550\n14859988667995003008\n7176106739067124644\n15572568842446317879\n15236113217263404680\n16007222744596068574\n3425942349794067789\n13651585187584643886\n18392190021574867232\n10268925443886761492\n15432544735555256872\n5691988227476662041\n14423824349302834036\n15503602821751165242\n7249601475112971241\n5927719683331976395\n13610447083680554767\n7670421984914774491\n14667599366443403498\n17577690511529067791\n15347976078888850733\n16585096623815012822\n5443983615453854153\n10306803820756497294\n3668952564648926019\n12229349860419130584\n8882179713914391815\n10622404045510891866\n11615146358750854259\n3682583462353988646\n5719270191274423237\n17230447492916725246\n10306803820756497294\n12614431623072685772\n7918212628599201736\n12836939292822856347\n9277620082839846803\n16647435796743956582\n13550148562265029106\n5140293719693188936\n11285633147187790272\n2679807911083396327\n15636749127653109355\n8801642904302304440\n7074863116239460120\n17768966742972653329\n13369751642652635602\n6798279480903092396\n12354918616403130843\n7274831531279278149\n12029313611388862964\n7596640047143064929\n3505415239186581592\n8550595271373930629\n1058714069052075903\n1484104605587255024\n14820018308717929725\n10240874702978179234\n14573410653385968758\n18333577225516373767\n14225721366777455650\n15274553852720134908\n13242109157344654805\n5644137499384205230\n9407880755168732358\n10612996555018523585\n17569555293609564414\n18056992994778248255\n8401130019067915153\n4814403168589857203\n10290162149688774956\n6740730492331186143\n1366641169432435725\n4356505295058394268\n17895857385085551079\n108074834984636915\n13280838641628408649\n6857871416231327430\n3451597686465626882\n9411534442477850892\n12214639979301734950\n15487629072338719917\n17868178858809704579\n12258343822696221827\n12421956845409738369\n16607523899507782533\n11821620625555541968\n6482299896394625630\n16172879748955132362\n7276405684028961641\n4193206194903022143\n13723716962056357889\n8723395899599072483\n877674488534263773\n7679839664027578910\n17845975553251788777\n16242520985340085024\n16922926874295331228\n2452999297715370369\n3542602358419722101\n1751522412228803989\n5185905792335243196\n6131510748576652475\n5393335167522524275\n5369869188317039818\n11387005372495622343\n11475717517947644506\n10445773855405410519\n3956615961198627894\n7299401580075424868\n15565174974229636824\n17830502692574675616\n13861327240259843319\n2031726326826750010\n9174758584601938325\n11773076417957189559\n2856692613996627531\n1839139241041486425\n9098811646221647043\n4147027156481849780\n14215035827137268333\n9273383611215959648\n14976972871771170484\n9155752776529718368\n5023563242453945354\n10784973946085835287\n8734717483788178420\n17645224795015763041\n18126039382698055839\n16800163418977341213\n10037317165083039348\n6419113766473983703\n441217033987222086\n6233098432593858421\n51097929371773067\n7564537002885173543\n16339117924960133367\n5895656330623392805\n6240557748465204865\n3499991572875104230\n15380790974400552373\n8662052968596755741\n7990211421109604107\n13350815822591134970\n6641753026481641300\n13352129943664748750\n1566273465307063646\n13468863835005260207\n3556874557414750363\n13455261248571555664\n8158149317509337255\n302781934444005160\n16520664653548093547\n5504018863192625075\n8133571520860480514\n388043187116991840\n3570586791703581576\n14810267208405188803\n15661336660437108280\n17469414008998898104\n1517489643287556345\n8755222394700166626\n10105190730381910870\n5515797029321319171\n18068670605668162482\n1484549029410631098\n8950046202132225703\n11623899362510334511\n11064823609717100611\n11097845764605564153\n13115118584827662300\n7197466758495880812\n6389061566542534016\n1707285542355890107\n12452098796274073136\n12107520990147052890\n3020057142875730131\n4089791676022691396\n60103094028234583\n12179409957836917228\n11472639639632150505\n7143966098553468117\n323577450553876253\n13809751938147092427\n3704703231487843012\n8964886046236568209\n18370541413248204894\n4933932417684914548\n1512962638870007633\n8854063887338644979\n12698920803961201177\n6751110731392400966\n17191737580195679954\n1910287380050633986\n15221128039558990711\n1933144867089449798\n3873897904725815759\n13875655531137462600\n13186167650714614436\n13348820480142434181\n9134703104016536857\n2869665204318440887\n9021564549964937370\n8635504586127357633\n709508449721551014\n1443275774636892300\n6572548114121337433\n5090493491333729939\n7147403927711684380\n265031188052935464\n1992612825881504232\n4976429483291695578\n13570469509066530630\n8533316222034060106\n6903430597893215789\n6524479443594935068\n8809125763670405798\n10115109704165423762\n2915095815996143605\n17895786592119485756\n10877767231471429562\n9302398969628185631\n13022514221049453859\n1958165850903953873\n8143605521897381323\n12353560218200065692\n3311506585352227509\n9411894793255325745\n27347143499350559\n17128367426728683392\n18045025520922068674\n10329663906100247497\n4122248459762158217\n5855789831023178209\n5316871757954836441\n1250264076970036985\n13781241225497486113\n5168532814922324202\n14034409742229283906\n14482935195607601544\n13911213737309984885\n13529646603918343900\n16255462347806079738\n5016550450497750008\n5880228023673931947\n1724017784125406146\n7382472514991907724\n15573572361549290863\n8869859706907521646\n799325264913259398\n17469414008998898104\n844257175678683180\n12011597232481368705\n14928871000275535597\n8914396725053956216\n7437809122981519036\n13898834112127610521\n14803072729925716320\n14999902106724197594\n12923112291621016585\n16340151605259272015\n11600752800398540975\n2082193937008688367\n9973253470216010664\n5226530405570000872\n355656557234829386\n7538589519254699883\n3677673356845726690\n7190207083390737591\n4310839308791657552\n14965339450195976418\n13836391347649410211\n8161319495806156410\n17663495300458759643\n3883371645131873473\n379434941107873571\n18397959558652477457\n13562410175686020638\n5844792504701056738\n7814397728576265079\n13545464385358785957\n16838853958995227937\n3364839479047976068\n2607832993626558004\n585768448370577482\n3717218550291891076\n304622507309520741\n2654052698615623760\n1052754703044431548\n15133736423245558757\n3562119753592365896\n13399133950160942661\n14588300429682406006\n12082351045398733873\n16721156326081793613\n9694119672089113847\n13309004209577980031\n8749677887604026725\n14576299879703257479\n17886442533702307713\n6236596459702416350\n9500334384940346745\n11910982864874280691\n8189999621639413243\n3638930871575090162\n2437601194510772122\n16918680098800645247\n4258982456533819116\n12331511114380684018\n5698726162403178728\n11644864708508590512\n12159927038331361858\n11680406053365966748\n10073235541244582588\n2112645945753985528\n10824161831106996747\n16083162754862717587\n1291749864428926498\n3371318370539489960\n1374840882106243837\n11545546604947264202\n18418547564684797483\n6328972314692457698\n14670690596439832091\n17294300865849159583\n553470255793403280\n8070876262113975473\n11744206458878797518\n16009160286980762186\n11577221945963682075\n5739127236364731276\n3716816954413318576\n18129673584999825485\n8636496245543593147\n379434941107873571\n5185714514595148369\n15093522620658220865\n14594234285686136960\n14639870226379152776\n13522272283668835384\n15259878356941973958\n10768970218298922755\n4907970019695749544\n17174453121254120906\n3548088551076108378\n2784160414331899876\n16246696712745224074\n1245242497108006793\n4904682536517629425\n4450419140938725194\n5363148833215162975\n15819138558812136443\n14810267208405188803\n6191544803260203870\n6950108192358588515\n13507213265869006134\n9232424802697013579\n2159958472120605811\n16174818136905273166\n11294199949679367448\n13587490523244867477\n17137748493630504386\n1443078560946738771\n7780514681070981439\n4766546816437660904\n3661832218508975982\n16571393886478076804\n16537803078673380214\n17722937129425228314\n618546680790133196\n3636724249504074665\n738053537399329987\n2517629320551317226\n15780308101501094920\n11066683420633952511\n9942828828858405830\n5952822886842739827\n11781493257593596777\n9721056744604483328\n2011422995462318593\n7386291115137004152\n2545163178111522540\n7809512832263517817\n1551792649086678205\n7762880703773131807\n2892125069458890142\n9059191981376568203\n17786876470638506365\n951707777457729665\n14346440503140738051\n10202752833523241255\n3264911859863952807\n15714139612734255787\n13452099038736062025\n17952489172638654753\n10525059786321482165\n11750445213533395715\n2560022832319866103\n2887747438236292942\n141751017934205544\n12274073079362430587\n13891232992420710183\n1497898312002768161\n2655466076161870735\n1484856415319834932\n4956474757701580815\n387899697041810423\n5783396042105917359\n5692033367628087791\n7738164285669838229\n13922190456276139695\n8365862704736513156\n8693075474006011293\n7951888287065581683\n11283400160856416728\n18359829965110882004\n11368959991394300949\n12428946110679290175\n5016550450497750008\n11623785214688130\n15696465904703587170\n8235284642450564793\n570872052808351307\n3316646277040432797\n10611058491571735843\n4468223090592895727\n18173561656462020693\n470069062795117371\n14614782388939189870\n8834548541779022987\n7913041269614602272\n13903857453620149056\n6238783108631664552\n7610198665592558342\n13896116386713218281\n5905750854001771357\n1066810939866907298\n11155422446095977676\n13976047789860110245\n12794074384072935672\n8273744656306690685\n9522826370556599337\n8869859706907521646\n17316410479402739876\n12949224348925450137\n10545901901812467159\n5339366529268464230\n1843908984209648059\n5922303975002625915\n4909601139602405221\n6463419096957538907\n13155810675918612775\n4886850017673623337\n8329037320118876651\n2630023154112595792\n4590467671448225628\n8240766313353025698\n16222684608956491300\n13004313851875165006\n11534107170231651789\n243160247546022856\n16014396331752365705\n10919971531386080905\n15125281726306582194\n9749168619636122524\n10236407640371150521\n16299222063380360716\n12305900269223887751\n16638818276881337441\n15236593155303700515\n12654975672887243321\n15475797177756651397\n12977886042722479881\n11136871488281635031\n11752636517379838318\n14987783061881630046\n2983081471512537108\n7982017036796982993\n15396232559441446302\n4083373341166128360\n2944353726335265800\n18039237864979795670\n15009126464697208336\n16950531893332455163\n1802336873851343461\n14179964488823887185\n17093698712153313376\n13443399319801525062\n11122851558244947619\n13129242719998564631\n13230459626579005568\n9407880755168732358\n18306772163271390226\n15873522692054446469\n9205396080483547024\n14810187217401714676\n4688318730336882845\n1400231975062891862\n4805425753314510459\n2034266388524820209\n15259361644186426438\n14813069061893655192\n17076487457362938957\n9180539871826159046\n3338698547389676478\n11391885908047523765\n3547390460980277926\n12945894335765207912\n9021777196836583183\n11501969880870933774\n13183602722192661697\n5640005003821127103\n3026146478898473899\n6235280725849875974\n8252818995019208570\n18369036212838404689\n5587389729688607489\n11783206175245256888\n14522570796377937815\n12451031375968759528\n1487180280167043759\n14428922313043563606\n12355748698286447233\n12643295533725307297\n7799742730792211435\n11276777143002031408\n1620058860624972155\n1928857573457398126\n5152477688609060209\n8214831544388552564\n14405986335632596631\n9478404316439766381\n7861320491091728359\n1451849523373689604\n3387095362882758426\n3320709611077468380\n7669642579961636153\n17462981434997105618\n17228795833416603044\n1850719485997215932\n14150706134515452908\n5772783437700746907\n3178146088567683882\n8705409405587350861\n12220353232036644250\n2817169949769730158\n4804115133538749317\n8440858277967143526\n5278735539248806230\n8656516121895738936\n9166954585311288036\n1478890313439404796\n12848326807531980820\n7226983372608992233\n8264181885406180174\n12166708172797889864\n13063896969094033954\n5398290388619447260\n9080880900428375213\n9105999171221990459\n3737372973672987268\n17242987744208488155\n5607208783085641172\n2207022554923227139\n9879394366678314776\n5999176365781644272\n15803968692662866587\n11859792406561840733\n16576420841968636596\n1608638869068696557\n12125858126487342484\n18104349756507147895\n6860536317922333311\n8488408171031646020\n11218711102414467491\n5738553394604814654\n6124744938669132236\n4335042997872497679\n15510199138015698049\n7114120368535207686\n3810150857385444855\n16822503225115493200\n9014049988766586497\n4799842381348407109\n13898834112127610521\n16419395429322406271\n4165030247146766835\n8454717612869429086\n10722969682380621623\n2985428233356392927\n7130959809044218232\n349828455523589225\n17052031795515241108\n17199688195429180740\n13411386411876521515\n8465869688700561220\n11154138563397873110\n15496975951641265527\n13447067903019977459\n4521560687739831979\n11752965975483746635\n1041650248723829684\n18146546693164685547\n5521857770464685779\n2997809167053978831\n2860169031786615962\n691165152994612861\n14800882442539796799\n14971677401887196868\n7957969245418471862\n3582821268457996241\n4194709501071183562\n960892423900251268\n13639940075507717903\n7192573926950398717\n11978069832690359460\n9537646772788526176\n709235337894404149\n18101679679980295228\n1674326105544508257\n8174518561559861373\n11322270069702876328\n14021843845168383846\n3155721875969161664\n15335634033511681300\n8449206541294457674\n10469345541012051484\n16974902978135765291\n17475422708018409699\n12558303678812211371\n911581710896579296\n5171102478294835470\n14262145707902429546\n1760290556652070086\n2644188207246118812\n17824951314502303877\n4828552403023601115\n14184536956275709278\n7984935630290590845\n13709392975207944120\n11733504701675984166\n2872615454923001737\n10744321138070901100\n11146055437158941697\n15845737715369355080\n9633354141389119323\n5851819321727466020\n129449907865176938\n15113045035371781816\n3467784852123351927\n15327541219995187552\n463707120969608656\n10967453577709591360\n4602665098919589195\n11545546604947264202\n3662370749224840115\n12411533545658591311\n10143861861983206984\n17830502692574675616\n5235769130097791655\n17320509488358908006\n10533531189168132936\n6875516676191829139\n2700181435289245871\n16227924763373308405\n4228753635343825028\n15652150145056454154\n13866874337174715724\n13570469509066530630\n2237387718233868268\n9110576934218113337\n7862819864947994160\n4021596622232744745\n16962226301137495672\n4792594073360598979\n14397693739564684031\n12616792865982767988\n8578024835719033270\n10960934178818611516\n17986577657709367714\n4112803993885133353\n7946086322799567984\n15010621300645759954\n3076308342828774312\n17570201155824213287\n1481069421952837257\n6156392473360546601\n6632470095963168954\n456948325694675339\n4605182033486152819\n1172979146861910227\n11275610181183080494\n3995990936028920590\n17232551080836262134\n8899144553314543199\n8282599151959806590\n17723096772492120557\n5403987949437054631\n802949419283725329\n8172952320476947191\n4327135238514028674\n15300319063941439023\n6245914843828066868\n18090560875556001866\n2152643989533937963\n4705408962365242418\n1175392854731212939\n3593368970808272907\n6119630425896465281\n1679133585036142553\n17042416102218053860\n11677638328864527682\n9974529405430294584\n5468242491190295231\n6641753026481641300\n15826650526637384873\n1087941277846558915\n5600705314673517365\n7487313815518969274\n1544210578744245229\n11802369012778562810\n16172010069175982337\n3458858555463497748\n12269117493102446309\n3451914374120952503\n13920791205070514569\n3499028693300366484\n12722726049699965166\n7657489275530730160\n7383232984686284962\n13628328980608964909\n12167155554393078056\n9720408652117864580\n1025820224499903574\n4340663582713897016\n7042333832340230983\n11532717204269743368\n2415036798095384091\n9194223226339722874\n10009706283899957070\n14005127796340284889\n7827679016620778386\n8295792112567978370\n6253726167752550756\n4408912438835695389\n3706326394328219504\n13312443236074804328\n13129242719998564631\n18078385316874037148\n9997035832768610678\n6887759873838586743\n7841351359146263547\n6118646779962994423\n13086495115160050496\n9648841790520163925\n14217049417831590769\n13260971022230431925\n1400231975062891862\n14605110544926051806\n9301473691251101256\n9395626239211612653\n1850719485997215932\n10692608916306548182\n1862399599986074174\n1291749864428926498\n8762757393399373774\n11735576937877348778\n17660769354461985220\n17642068816317438247\n8734717483788178420\n14695287825791552024\n10836864029527810209\n1544210578744245229\n11876909393145196844\n15497392986878172107\n905140352409187283\n11603507316346394344\n11941129771006520831\n15914273519893413220\n11399401147782522489\n5915098909266812218\n18248839597222557685\n1571472648563492980\n14046343162367181487\n15145252635793120820\n13357892983848221076\n14646421110532183431\n4348457906108696736\n111196387430106683\n10258843031026142709\n17616268553150321711\n8160428471919827376\n15792374302191736606\n293634704908324457\n8803100686083037166\n15124180042173771189\n5843346907311289099\n13049781677935483578\n6115090376490608986\n7393570815334726796\n12476682556982830438\n1131330879110421938\n13505018785345357756\n17366663987007087693\n5111667957469811778\n17697377431359526622\n17616226114978287756\n13903857453620149056\n3093860920666366058\n12451031375968759528\n721370571098851302\n13816781646815631242\n2408187786618791756\n1639573834097138810\n1831203627894132176\n13758744267614124930\n13723582814549394504\n11191661791820455158\n16760511177595740003\n1890758963880619584\n14860194321240555481\n10503585740087842568\n8667697558927048886\n3883322796380397418\n6722560943258296200\n1092022431727232625\n109126615180779661\n14780116598844675378\n6980832331272844463\n4662890120562480315\n5798055711420156007\n5212759163019084142\n10926252826016398759\n10354762484854216674\n7940704857340525193\n16097779527990115885\n5733843279366035554\n6788422847026614759\n9778259378884750787\n10599408158519924772\n13729589981569675363\n5745199509975308915\n7912879029739607489\n2753605858409815973\n3429817402327504188\n17026465581188079083\n841945184249864722\n17225399245216118698\n15180789932768745866\n2666260743438706053\n16009160286980762186\n8839743802003319172\n15797566488952265185\n8094666317460247028\n1822031909412571639\n288898209695906711\n6155390385846311744\n6960150859772028802\n491498193806541601\n6556641296314802082\n2501386171564778394\n4312385096204422171\n10639961830539358216\n14074004604280392272\n16247722323949514055\n8609417829188947511\n10211915901430063596\n12753800595887764609\n8761077759397297545\n15724525404529198483\n13422895052038226368\n12417681055284095532\n2653822828166335040\n8230421561028930246\n13719449438976623926\n15046908249942630688\n1906947891451272738\n18090560875556001866\n2605959523767019034\n12879510905666202716\n15259361644186426438\n12998582031460830356\n1585828884713142637\n15248565169372333492\n9641388481773274977\n1709665623725108874\n3293174477512104586\n532553130157278576\n7079581664048748386\n8166646371454166180\n13727240559233600232\n13438927909590058422\n16420515418261479290\n13928176509957622163\n13861327240259843319\n1696338958245866507\n7437809122981519036\n13657423573830161446\n18163742146047806227\n15504825423074468653\n2440973376618490066\n8423823455829724943\n17915611371057276688\n2940759257990198854\n16386281474456620736\n4454456623747812239\n17710749294542812801\n13382457870491111366\n5249175943457346855\n18237407187779942437\n15210956367548530370\n13493692698966714966\n17423690924666960721\n16879693528284549943\n10778752744638120022\n1168971788222092201\n7888940804397945053\n9116498679053876522\n7069719535917297134\n6124744938669132236\n1027046839357124498\n7265077122087759042\n5028423523867440912\n14576092569036284324\n9234823060209861480\n16775426497690113291\n14233944932985874614\n8630600559582568402\n17282783904814171380\n6520576766878140053\n14631992309136812058\n1722196695011472721\n13070865072570863624\n10402555302972915626\n12439683014498765600\n6079305266293299967\n9816478060777193365\n11891968614589459684\n13084811082305023446\n10483542731104853631\n14951977989407322350\n17257956828921433024\n3798288244340421674\n9753464553891173347\n4010033019166014433\n13878647307054236754\n1420160859346121810\n15783371857293743449\n7076401029982058130\n15504298825522049508\n16454037241960280067\n1905090645922269905\n5053045980396929329\n10105006513428679499\n13766368121241611683\n767107670802736080\n10174346297202747233\n656607617809965909\n9374828781084513425\n6171879751367973369\n1533772114256001368\n3804273208319445013\n17975675967093191561\n7738892483651487655\n5076452216877218413\n15630672601720539986\n5531539347078950013\n9305628866009374319\n2143420442988845788\n12052291406751101805\n2958133965434528175\n3704703231487843012\n2624521813750220030\n2804400584003181204\n14365030650538285993\n15236861719824719459\n10069921897157903941\n3902763513217036702\n14535626687873389905\n10922519644455244168\n5729636980258250231\n14526622906084138440\n11828255638218311191\n12828326443644169422\n13476226047394975803\n16288447522004951499\n12506487608784466594\n9229017207603602318\n13230459626579005568\n12524956808396141151\n16310229033767499758\n9088182451613181110\n13084811082305023446\n10818757740460603179\n5844792504701056738\n5793445933899715300\n5063291165723595766\n4265284390554644972\n12645551977680731424\n1444875000337250799\n13363486542149531818\n13711257169237796119\n4084778572820033509\n13381340863043233019\n5305644102542937210\n16257382875906252671\n10187802578965173299\n6301545919494071015\n12635911497847748416\n5203688384634491496\n7758842930936080220\n7809005271932882889\n16275067303270068216\n14874249662435329523\n12584579210815432066\n2481225588848755748\n3762814186831795882\n18249489601511413376\n17058833504559649129\n1490389339197715273\n14215572345649976188\n3839103178425836484\n15556528939892649722\n6626495789893118500\n15014911514959723426\n7117365419411251528\n12057192344377982709\n6232341421205603798\n16989888509696819871\n8005898641041703201\n9800871374365251384\n7520955495442221929\n1331430693043707961\n653753437874553937\n8355693810356350169\n17631041490286078859\n16183840176961302715\n15773754875206193331\n6079305266293299967\n4960566712638913773\n5212759163019084142\n16012173134958930348\n606242064063704501\n14195027548641001150\n2179168282310163452\n17045648032769244812\n14293789418279334280\n4501282384701660912\n8744820990728933162\n1710707572704860025\n15950168854509983850\n1442931666365003015\n11828776583358509094\n12846093022480104483\n11244065228506178989\n18444216137502480613\n13300313381060251829\n805093476182931748\n12733307911737264577\n9232893463425087760\n14533179982295231562\n15872275019937586435\n7758388643793597955\n6687966178720683288\n1010948181029915916\n12216193561844074858\n18250997717879562980\n3893319518126162549\n8273966730262347393\n5315668325578605504\n1777732351474808455\n4039692914396988402\n16338060559485745933\n5996305510318315886\n8563950127714861173\n2128289595262066126\n7447662333165328619\n2078542560824193202\n9071405941023490277\n17388958888799198625\n11199904688073531318\n7134676155066643840\n1229866271550524509\n4396929939202348079\n12619517561104650698\n16439172119772771558\n2592823355493542539\n14218346233387312998\n14933162876239088580\n14691932769216436537\n1637181197340898569\n13539180034488842113\n5574420414855747487\n5274923127600966676\n2709559810047251679\n1046920790792201021\n9660796119612569819\n5943208646094547446\n12821268210982511550\n1955642624057478971\n17757334399178450965\n6463462053187028136\n18430461488928217431\n15522658370414750531\n6153293156805647411\n3877236967032034787\n12750406962693118829\n8641678249380574798\n14719915205582116683\n10014913888039553743\n9088182451613181110\n9202810773615709644\n6838822336925659938\n8344811610792662291\n2219526570090240593\n16018882256074386936\n4265950692810867162\n6134889782532357464\n4842252435441447220\n8485830180883041736\n1730344102097589389\n5171719913407462175\n17283638692574195403\n3038503310048131073\n4814403168589857203\n1430394834248296510\n6231249139257835764\n9961340295669655499\n101371001981089658\n4173628817469879329\n11914705239687305488\n2336934651385496476\n17462508637712267202\n18140544209248185204\n1742717430606491174\n12238440164506292187\n6530503683739612260\n11658992310707777281\n12665281787372648464\n1208780568879694661\n4585541136291260467\n13411286464180226271\n2535331854622523066\n17584152849828012444\n305451296986384355\n14896062576785550601\n12936986905781525471\n5176159371824023301\n1069596978227020227\n13308485524662744805\n12384610028886647947\n4805425753314510459\n9488986371843030634\n12426242118831755235\n16112192059743392029\n15197329563680254815\n805601194906380757\n2833580188887098891\n12055738798134332962\n6392641372911939566\n15218911760751447378\n9458724831106483405\n1769193187164805800\n10545464768117572715\n10639919262766709592\n2355243159310511070\n995862214242104773\n17199670522810419419\n6336827270028213711\n665929335530840815\n15442345545965524656\n16847086868074003590\n15113045035371781816\n11014049886379145246\n10047967308980573461\n18368919566549131059\n4123320312972914377\n12197144132453598222\n15301809780424659307\n3040601856516540719\n1934747921463793249\n1906947891451272738\n11807994680750894615\n10269697238107186633\n5549691560016783383\n13941388688573999225\n17254074348225203972\n13471182089301754871\n15170586395365004956\n6556641296314802082\n4172791632611980368\n16702821786364239102\n4353645559055281729\n16194036215715942732\n17882790882784698992\n13188093152460810785\n133388065114012459\n16717964659912897811\n15004119093918669503\n6700332852844901138\n15252935928197740344\n10997744886701911530\n6255227884558178984\n10818757740460603179\n6239655372278670672\n13610794603928364843\n8780433104376569663\n10470676407929654513\n11329662868249521613\n7564487459460135113\n12035431828312081858\n11591341791334889418\n10001317627008668986\n8993741474844270513\n16814236562019112111\n2991631776950176078\n18006228336963978334\n1977765095559103842\n5117999980773621115\n16289620874615326238\n15504298825522049508\n17542541252630623402\n9765131671805198916\n9463748920454450913\n11903996980119113891\n16477545402736360790\n13541015553453095681\n11268355452703492714\n2611822710425475571\n5986041090204320537\n7496754786008718680\n11899148315946462883\n1532048516787593802\n699961678358067228\n1570837452751946810\n9394309826607863141\n5714042315870326473\n10485666008742427484\n13098459210771980203\n3715633590520799487\n15818610842924276540\n2184135433622060294\n3396297530010864683\n17174326313433179588\n12498843089509549961\n15926798316787518202\n14902425206815094229\n14531156770793439548\n17510815492800519819\n17532465422488923190\n5926234726406017899\n12841171610707828664\n10713486377301023348\n16972402391070790274\n10402155769984656404\n1368321537586114672\n13545058223961409091\n9214154110562003567\n6427406708158362266\n4755611578656644181\n7644566783069015632\n5997292517765696676\n14021044691340681190\n7820753501014450235\n1587489684846706208\n13764953990220580376\n5898165555114429553\n2798182091179764026\n12987671980611161028\n192918345908506354\n11425753227620135474\n6871193780527183041\n7512999343397086570\n13149736230603746122\n16214695542262001803\n17046489358498787474\n17075019405448406168\n5535689445498324408\n14686845654500599538\n13470541910857886601\n6144197052529353589\n4310451261733425004\n13007894296728061420\n15260397471841274116\n10301312906065045388\n5076690070277844837\n16501925111035880094\n5156379343119973750\n15792465796785103347\n3682709437633383413\n2024414779072497023\n5786174684380270151\n3915333864545243302\n15549878563340353549\n5795874064982821998\n9478404316439766381\n4960518094651677229\n15184978550294256807\n7149506235454261978\n14570528327398540979\n3736550362950486587\n1997199966116886093\n11399401147782522489\n9437135190722877651\n3285719482714431\n13130344678117160653\n16257864248103347494\n5206943638063402469\n14395708493680358310\n4302620541414712169\n14496384423962231421\n5231173893778276010\n13372470948036951552\n3209353083583452260\n13771072712800662804\n1900408659240558906\n15086138196866070287\n1412542083363987028\n1639834277366949336\n15560813100570707959\n2257934640718573379\n15797566488952265185\n5616798848009949725\n15284158535095264608\n13943373058095867336\n8943034378847619702\n11625126825294858284\n9096559152154933202\n6328972314692457698\n10753941599491519303\n5994706744607794819\n6728617815346554379\n7724392241536295685\n6236536826369270368\n2025203302824565127\n18059857014416742352\n8189999621639413243\n1413347998225128026\n15782154002189930635\n6419113766473983703\n17848502329351788037\n15813773306574163116\n6100680014138224812\n7788648001714133912\n17880283359214561531\n7510380921624605938\n17199798005972428140\n13678964049412451748\n11699608655635893248\n9792239531361938353\n129675662793004026\n9283749369479903544\n6938582522847689686\n7891385712610720131\n17064898294206436582\n1747617644991251404\n7022110813575161313\n11859800528028220648\n2580941834681335861\n7122569313360318064\n4069695786755924649\n2705884807167763414\n3962438146473236610\n5593695366477891188\n16146448014353717726\n16933700641351363752\n11628472654135404328\n5698726162403178728\n1175392854731212939\n14127624162970323371\n13017329066345875958\n4691533966623223350\n16883112380432327052\n3091939383400999999\n17651497327684624657\n5326922459620469234\n17530655888341620260\n15731494826008524908\n18362467979474763118\n11892489944004272311\n12864667621645393904\n16272455374606094464\n6871031157539153886\n5645898591410761354\n6535235301430598899\n14037668488328198289\n7008755903864992250\n12873735784055312675\n16565155857298934065\n10212990304916496605\n2887747438236292942\n3547884480100819920\n16228563614438631770\n18063066788374699187\n13739773979621923638\n1272246110809017921\n12610343981955807151\n12561026879393902632\n12058312369535265709\n16438511468838283973\n15032344642504493339\n3805145232294035869\n17186295631445180312\n6718141123113394452\n14546167527806298251\n7140110483994167741\n9014472394179942693\n2786685490935387239\n3540118745492693723\n16091465997751058169\n8875253993041387015\n17654630781937901948\n16977880762448238269\n12305900269223887751\n4024121552752687588\n13131456151170229793\n11766419882191254966\n17510964252353159035\n13061383542318963748\n5519138907214851929\n17566289948335664214\n15513155882596513873\n192070601676505584\n6266390873894137039\n10824161831106996747\n14813069061893655192\n17101070136325620971\n13789184402320839756\n12892778920160368729\n12284991545081558254\n9293391783070989121\n10187802578965173299\n16822959352464116832\n14025576675826870521\n1246420245301636479\n13482461498672081961\n8782564286735126222\n10344425155617591765\n10189968084046018245\n2776962958942416551\n1335720592351261152\n13711257169237796119\n11502525683066151545\n12909869839441569974\n13611519936343528027\n15078169276762562453\n11268355452703492714\n1456496186530612569\n14043838322988763580\n7662365420303853861\n15471473288021651024\n276927931206773055\n15064335762087083198\n14813783887454627121\n7123964052736342542\n4496766027844338100\n10581443379467228241\n9189324121673496112\n1637181197340898569\n6202941522189875739\n6399586441396228018\n2246703347911045760\n6799255500142152141\n14197260962786419507\n2368607988042521486\n78373184045552940\n8213315293091822292\n5168532814922324202\n11207705646100069086\n7995061728487763274\n11629820619519170221\n7536695720906182667\n7116139959017077111\n14687686273607357570\n3101299126474605312\n4666074054028728789\n11551087420034093598\n15974124714844178814\n1896639646962904788\n3822856732005045298\n17556517250120741418\n12467434374877312966\n2272437483685065927\n7294859493998264701\n11608124290252891188\n7694679156776159897\n13917241182735067087\n17071271759607301240\n13929039880771550505\n15516163276263277322\n7960069469184523871\n4740026081330341819\n4663462116049612620\n11358099197502606649\n6861287962206386232\n11742431622142571196\n4552588284212421809\n16254757771777335642\n7157357273280750083\n9307018145187341489\n6767151308125441051\n15722357680067788793\n15957007361971497821\n18419551063340523256\n11752965975483746635\n6295354203702264423\n14428922313043563606\n8542385087575098968\n9956454213277028830\n10374399007575064410\n18059857014416742352\n14631042198817209836\n387899697041810423\n4010026851158931577\n14137689926591432715\n4061593751010869432\n2740182751517037218\n6208897111922663745\n18142567982985176968\n12053520003133302661\n7136833185832477871\n9100979589437120319\n1089726053130008000\n17607607650871738638\n17543950492194009543\n17631041490286078859\n7738892483651487655\n8848574688215927399\n4406632254848790533\n13520842065347434536\n9051537975233309380\n1357509491414940652\n10713486377301023348\n497832767343480275\n7567656272468367643\n313444966883405994\n9957956948748065575\n5018609360451455170\n2219526570090240593\n802949419283725329\n1029546877296997163\n6902943515208271202\n5297467944348431938\n7191834101427575039\n5907624794671743463\n517545671008551478\n18354381154112511999\n4287880532953419442\n8317775897571659243\n681328060270787977\n11329662868249521613\n7505123344218388304\n6088677929383634537\n13113980386498641261\n13042211195933784970\n15400861193812844965\n1610857986010919778\n7111105190663991043\n16721363183224618600\n14496186804988119258\n12945191103519309853\n6136659425395354575\n10152094374988614291\n11387014717188063134\n7926170682954210199\n3884983559465320023\n1702613013620101691\n15396134650020963212\n6885995092194305162\n15581982551852813763\n13195063916453137402\n8683594137492817024\n267164020148255769\n9174758584601938325\n1389233523977502064\n10384652304514566792\n12688210174703057141\n7491531105310088108\n18067059293465904669\n9329278659146005795\n18234572248544357635\n9695793092686937199\n2234994276410788797\n1643149689918082037\n15930635321553945249\n13395140373977131873\n2327738025915905116\n3002001886978332333\n17042416102218053860\n17975811501502182606\n7851692570211838261\n12647177030484371149\n4436515707995345997\n5941628463220215468\n7951332641173246396\n16738111725577947786\n7325348943403347207\n6770947153236277192\n9948448198886300909\n6295709327753308448\n1379167483683124506\n2397258743469995111\n10616584145281799436\n14880047148634526667\n12735606628677917095\n7020907054769687502\n17859150748412516913\n2402948633649561410\n16142876286265332433\n11954817080329350140\n5067884441784025301\n3576753429462117175\n16418905201760946057\n3300360661952586543\n5587592933218900228\n2654662336318153625\n5177792336317683199\n13130344678117160653\n229387500894431592\n17813863307468563132\n7470469666827243263\n13363486542149531818\n77314549849646858\n1777732351474808455\n15212290389212849473\n17424473094171348071\n15826650526637384873\n9131998150346111937\n14439268928714517382\n753753198248346397\n5389325329538242953\n15762194486658191803\n13814482993120368757\n13313378814872393737\n16250594889500632899\n14956561146071190101\n4585541136291260467\n2491019752651238608\n5234567144359252336\n8267667347154575595\n8330071669687802285\n12709485539972876193\n131875973461833186\n1662187011430118247\n3857063384349225323\n10217243654849473656\n2503462551854892852\n3297773098015756881\n5596171104293562779\n1856962667564631167\n9648841790520163925\n11065248528909859268\n10492092636248650820\n7415998200326404511\n8861922047590573108\n8705409405587350861\n3483747011437719395\n939150359192521060\n17140699157142205256\n10131743675161816295\n5773097153320206014\n5572345961318331820\n5256256385623080907\n7263291976412971918\n4141006222699680695\n7479298284422595469\n16981773618769130438\n11461508478986239723\n6580669987661771827\n10419826510349578145\n17659516433336498919\n17705974675630407424\n1928857573457398126\n3689106678318323107\n8027423135105690362\n6956870366258906639\n15353366063976704690\n16040301735537075080\n10202143874764772751\n2633288762409192863\n2935189382528221268\n5643744786126648906\n7738164285669838229\n12891999564056186274\n17861060818425274818\n644534565861485845\n18180032399988942389\n7669642579961636153\n15883064639029061560\n7485957962639931002\n5160687303729239666\n17424628495413966125\n563986740041635572\n5417559075242806210\n4933932417684914548\n5447854946334267661\n8687379744975611381\n16247722323949514055\n13804491873511901702\n9777555259735756451\n889882240689370526\n14830620208392291174\n15780308101501094920\n16432693855289797795\n7279463107747304025\n8522519153333683550\n10242317406378630445\n5325616234425573739\n159501844497698337\n2988588220820926888\n9302398969628185631\n5605381684918646533\n11506838790138103502\n2996921107876906469\n2159210615743819621\n6720613656444654795\n2126832155069424368\n4769362227039779002\n2135011976875939616\n8662754794636654617\n8465869688700561220\n14393847414227178345\n10462411552902077221\n14649335038094038862\n16580469069733251892\n5397531441173038581\n13012000916665696667\n131066924388819138\n9918024891803763225\n11473151371107808972\n17673635029034443478\n2411827014619979615\n6414576814485873572\n9460882818254956264\n27543536543036010\n6722485160882783380\n1931887211377070411\n9956454213277028830\n12062110981090917995\n12295780633015965188\n14825295908937966519\n17411263906714527692\n3368006437037384918\n2001339334766524902\n6589959433521724044\n11651027803099351148\n9286946024096445544\n11914854407181465065\n532553130157278576\n5504018863192625075\n2920594386202824039\n8079484248328101628\n12421956845409738369\n18322394611983922550\n8780433104376569663\n12397533140860197956\n8303486296157098602\n7058476054530745656\n3253073878167984340\n8282599151959806590\n15011576203050257578\n8895374656773093040\n5277004205212824578\n12922291440015218698\n9766887706120406020\n7536695720906182667\n12920749223904840522\n5210828633379506321\n17393927669786148930\n7106623707991346578\n17578436902288890847\n3101742310953160709\n15048216802551508740\n9659043904728439496\n18186514007264586093\n2057702766725736311\n13152392770153234967\n8761884391389240643\n9039805072384859195\n7301349756724264708\n15982879171223804755\n14391212889525512654\n17630112368984579337\n14799683901774366900\n9858041029179132190\n15840288758340853541\n10704604757882077693\n14719915205582116683\n16660383508731243233\n2352157488521421558\n15527297782434769599\n8814530002695525361\n9382904477910064155\n3225214667213521091\n10972232631384679191\n1804101675485052258\n2431807876004305837\n14037938014664161606\n12701094082914416563\n8296973004362800385\n17387079612355865529\n37277171649934582\n5288114411253178122\n14797416614028916213\n569077190649641510\n6064236621006980744\n229387500894431592\n6556471207600475727\n18212053352386343635\n2737166043412730661\n16097233321368740435\n16840104810367977109\n4517833701745767524\n8709171847670190703\n17014095089994210989\n6032532839858403960\n16044293928951317196\n18325359612174341659\n12771026986363057454\n6860167366671430189\n1444875000337250799\n1370948491008981953\n6275276397171337480\n17850078206009659432\n6270701034091689505\n12333365806768137732\n303333395198854433\n5601434072661106709\n7046757668856370545\n475671116122787393\n2125253082440939630\n884321528290968776\n2258401822873401489\n14340834885884774570\n2714065190686934944\n731174268295796659\n12846733913516196421\n10763477998200455449\n2572156789002190059\n4342298502028476335\n8916636060148689757\n3163226888087608063\n542873641573958456\n2353635350932890608\n2709559810047251679\n7128189284548439382\n10255145455219260919\n3301424365747090490\n4312385096204422171\n9518047164248290297\n12284991545081558254\n8373797487172677027\n4409791221505412756\n15650773015890784586\n5069687496488879857\n11305945662022898874\n7006258969054498232\n4710992773296222824\n15213151340787309319\n13969791773093325954\n14787043904934800948\n16844054208212165153\n1929590253347425635\n1484549029410631098\n8897814493293016085\n14908867391407005713\n15452343209952203975\n17485968229662578359\n1522721638018196645\n16957798858864648897\n3721497349416936578\n13837836194805252589\n18085228899735596446\n2003562974494518801\n14532903576941658685\n7964040994980441365\n1524275346772316367\n2986669465909557668\n8301127369497147512\n14815130009162485795\n1174594734972800651\n7615174495302946326\n17007378123921922580\n8865260746603237816\n11783206175245256888\n4150632595731394674\n4161477986419924684\n5159007752045056315\n16448162068280907833\n7776931942147550016\n11844401942640486770\n4652111299363815507\n9541403516769024425\n8682788813994392285\n4790654346342576537\n2459873639390367512\n6403895198095066876\n7301973722100852902\n8482049504553763340\n12417681055284095532\n4625238067112986572\n6497181016072588197\n17223686676761467488\n12277247620220889373\n16209979925390148490\n7383666280375914157\n13638284211164576308\n11983205449713074356\n16944672502968187040\n7544198339498694860\n13816781646815631242\n6525076611656576301\n8951600043373241492\n15364525219316410447\n11375362583548810639\n16589043869189968890\n13173092171860256074\n14299973417045845962\n8386448035412367445\n2778394389678005832\n13674541211203067628\n1004013880874257562\n4729995279873967000\n9710792387054053419\n18167992709384056771\n16855631037003966296\n4709666226075195170\n5540266503780298035\n17174460973908019068\n5925028123107857677\n12164667494616919110\n996087570143634202\n13738693316985641913\n16335388478750439019\n14952298657969049599\n18105238156740200154\n18123733525194227468\n13562244515853985499\n10230216089736814407\n13222749584153550119\n8212790770114426300\n10581443379467228241\n9406885482208610382\n15272737668889922569\n15369315923801312514\n10202650704521885035\n7323951906155175486\n6489882656498285517\n2990119661031437678\n6019165720469168506\n966110382437332186\n2790046991269885737\n17766284345215533200\n4660076301591461092\n2016325601178621311\n4768991195460224920\n4367877646216816114\n11725032615455231046\n9290483314813802035\n7034505971590914431\n2440494720255367918\n9581359993291984577\n2839437817450987352\n17877941802045872789\n13404778749427356465\n11449381731851681287\n3377700098847559019\n2290423613487970140\n13530049907899097656\n6860536317922333311\n12299308580591811172\n11816180655768072390\n17481750972178460872\n11160510714599885260\n13809751938147092427\n6959566435062378349\n5474013940805325000\n3317328634719165201\n7857891183662293112\n5407657570805057681\n11582085217226044726\n6406626153897239170\n4689879982933487699\n15125281726306582194\n5042054591598306957\n492696584014496896\n11878341253495804538\n5370152151921960594\n12704647485624280302\n3057833616673118516\n3438481811777521851\n14180926974760476895\n6035631692618830439\n3004771364710990478\n9850058243774937436\n17603070000762350061\n10413663694958687743\n8453531828327618255\n2286719663712739934\n7147403927711684380\n4994356112683879037\n11553475546933871336\n10139017522571525767\n3090120274927339622\n11925235733194816930\n420953221133915346\n4525879573225314210\n5295674471232402776\n6496541577635943454\n16571724368714636486\n4515410025158476278\n12459870392782373524\n14125550484775057036\n9973253470216010664\n2893674108959110748\n13350815822591134970\n18359829965110882004\n17861927795095710916\n17646875767125599393\n6370072360418110608\n17868657142183991703\n13906626779026578436\n15034244668586636805\n656607617809965909\n12381608973890883183\n14807339990197789418\n8125990534460897656\n3701733155189856043\n18410345286674066564\n13529372750198177734\n6292895228750858722\n3982473645421342999\n5897845242504884610\n11923932004591693680\n8677439518603184279\n955238323066257077\n17598958966527197297\n2920467764947888621\n658071498434925280\n10492738007137352371\n12656894698927202844\n5031878685718600421\n6693309498747652945\n286796854153308539\n6181139464735538763\n963713441111153910\n10057969914868563681\n18294321584719702043\n10523395959317933684\n14571052027188223077\n15503180530583238996\n18157532234602896246\n15964929651636110005\n5608042361269609689\n5197474343311662712\n2587519891525349550\n16988943236884355027\n18156849758194724958\n2881314635034004454\n4422839332656036645\n7420085752422620246\n1678321286901118870\n15925760651382838342\n12826147207179964033\n12125858126487342484\n7632894256941328439\n2734571184147912363\n2506521831527123557\n12726211863256127541\n1737612740294142854\n9460882818254956264\n5999282304600912042\n8027114441470558569\n1209692801728010008\n14773629643209004533\n8486708602826629338\n5333088179768505206\n13290128327167434406\n1131877675207168375\n290543546890715981\n16415327907634070800\n926468937278903384\n5098663120346892536\n17461411276060573703\n157621864415968188\n2563793006624515095\n11313675203740871179\n16630678373998151520\n11475717517947644506\n6524479443594935068\n15240189299639412896\n7167552422065364896\n369188239617093081\n17528079224903246403\n9155992571854279158\n1609620265455370628\n18048110982954372084\n8020894911165393021\n12368188584880775779\n4365577752203594498\n18073476293338335765\n18370541413248204894\n5444073886903063908\n16853306641239783759\n7698885734610476989\n5185905792335243196\n11470434111228307729\n11623801860273914465\n10420346243062503267\n15450922332014572301\n2848881825507971690\n16977880762448238269\n12684685325973300905\n18064134801598499049\n13622258494798327841\n9101820275953680126\n2104715584355237645\n13697480679572316272\n17784725371680753075\n15248565169372333492\n11569105592668401070\n7749266583504096476\n9958913500599039866\n1491345663052222084\n3246889023590643715\n18415753091840880249\n15314802078292360384\n6890631659552898694\n14369934727944777154\n11403469827660957614\n109126615180779661\n7094714631117118609\n4894629063809964413\n11435863156228945456\n466683895198402101\n3772307418283534972\n5986041090204320537\n9488986371843030634\n7389554858281925689\n17814926375094318655\n13920791205070514569\n7497010324452162069\n11524530854144411399\n13390055752459006563\n14843783101340448795\n8829915881562684877\n13640032274705201965\n15925523189764699004\n17304677434543375872\n9949613683003807750\n8303486296157098602\n16593290901982247934\n17760657476259385533\n1400419672026743389\n9838017266908461425\n12295434656830794158\n5515797029321319171\n14960530923995368167\n16571724368714636486\n10101032416737730008\n17966927421652443636\n11433047015663472788\n10242317406378630445\n15294818425976640698\n10249055030817011899\n9925634054151381909\n961100659341301172\n520307909761130919\n2013923941471053031\n16972402391070790274\n8252818995019208570\n8828131611441127817\n2049146111789154292\n5834952720355032933\n6784194572818836922\n9266782194140648952\n14139198054243546817\n12838579474408964767\n815555033615652199\n13001982391210391217\n12164667494616919110\n14213554064325762726\n5989156609019534762\n17399959879550575465\n12426242118831755235\n5277004205212824578\n17815490169946000859\n15044832385391843093\n15165361936824622082\n8386448035412367445\n5560453525044220762\n9098122799663351485\n2110514294718467932\n8325689935321617251\n7720806922737209088\n2998062791782967469\n5363148833215162975\n8490759380056370619\n1136309135678212281\n2495112372447734742\n12358084741614060491\n9194001338610324702\n13381524700992217659\n15686781282881019487\n14902066760930679097\n657222614336747343\n2299649666271633813\n7093568642586510136\n9793580557551062425\n4605069094832739545\n14956541785670214294\n11569641517853334213\n11941624661428944864\n10973925056204874516\n8983449127494935759\n5062626774209017793\n7640096676919136988\n13176584028382530775\n11216554765928891673\n7918626358176595133\n6950194017648452256\n16882114890948454063\n8823130947541158043\n15054219889129538427\n3597366304701209927\n12747716454704493467\n18430461488928217431\n12167670984523137810\n11331337174472693257\n15640899449969454636\n6386327863339807996\n11027453303620553543\n6709721155687645698\n8809125763670405798\n6240557748465204865\n4409544623490886986\n9101820275953680126\n12173109620292099941\n14805453909469810765\n15806201682218462469\n17844362997852294199\n14971564413293701502\n3484442849126811465\n15252935928197740344\n2868513292005229914\n492212060117053904\n1933847284282878352\n4008175697199605189\n6397600805752232592\n6981888791496225056\n13570668507601416603\n3510378067453194649\n18082313552073039339\n15750762568361858290\n13997123475162922427\n2246249140375719087\n2891389058823416106\n17244012968447370008\n8870720430361202798\n9301473691251101256\n2974866964854643122\n7650180424035864696\n6866686810786932196\n12627624302095767411\n475671116122787393\n14111839772266489455\n889882240689370526\n18141479076136748105\n13469872219526872991\n11506002556071870831\n9177362847905677680\n578830621101962864\n12915995176838548696\n14676621697529743949\n13895216456441569165\n15951161734007376260\n4541903217020891020\n1251908231051874849\n6236536826369270368\n4110465924077370185\n7801132818819914269\n7502354663184064852\n2201419911584797162\n10846174515266323517\n15276535940919258744\n3763199126755148\n15578082582494887480\n11213726787725504328\n11462248870106499804\n8093691042381860529\n15874481059901440675\n8926509494202077087\n15959667987899755220\n926482977962751531\n17432719535168582908\n3841231917149345600\n5009106781575408620\n2378292627372123686\n4857467481772291844\n16489829370132169101\n7084571184351405672\n15021199929280631132\n12879510905666202716\n16957798858864648897\n12135096788828186985\n5064008965282223366\n3475188664199900770\n1483543024521534347\n5736591768119373124\n15645572434855274878\n2413112912529071192\n5922303975002625915\n12179409957836917228\n5078248791394646404\n1696338958245866507\n317720724607113479\n8169691076395815236\n8137870380495893414\n4125580803312587390\n3647161871885124807\n4886923695227897886\n7611124095577493852\n14421553600388580976\n14108036233205000400\n9766887706120406020\n10961664452595673789\n1333880128053293032\n17610478790890130243\n3839319891828458931\n1479663636476216909\n1587489684846706208\n7591766673885331312\n14748792747115485979\n7839707457603689616\n12343039147989204180\n17028503937428005658\n15440076391758992904\n3738864490560531419\n11821620625555541968\n6700439030137064640\n11136871488281635031\n10961733690532301548\n10561153641499424797\n1701578124032324499\n1298382097905922808\n1862697026494271055\n12043839799953035355\n4428850940990886266\n10722381637309297427\n8079484248328101628\n13242109157344654805\n8907930176227995545\n5244109320088223028\n15660811433119497577\n1346048055144745053\n7184939210017750427\n9159483609925781606\n10437617346914976332\n6580669987661771827\n15556528939892649722\n7657489275530730160\n7094457696473691077\n11505016113068334673\n3076308342828774312\n10454711887356714980\n3289912589818046459\n7804646474182939468\n14799493652772888951\n6500728583166347574\n301439010037845143\n5729500254064506307\n1533772114256001368\n18296626038366348120\n16417004123830825715\n5574420414855747487\n298674131798050064\n10883186590896219040\n7994004833739835710\n17073029011184162216\n16022811644395626275\n11207705646100069086\n3578710800407030524\n12724707472833652757\n10630398179454663496\n10092752211480902567\n5843346907311289099\n15440831503657572248\n13260844554118908475\n17923498535079216560\n9190572495564709335\n4926015247913622563\n15276535940919258744\n13301201953141085134\n15965692347256022345\n1960393251680867368\n11253537747964153145\n16327155801118556658\n10965562980301297537\n2538100561338832394\n13068528137572579835\n5994706744607794819\n15344818122000506041\n7349911860419284195\n11480915553983002866\n17430490531624209407\n10973925056204874516\n16780274096992046304\n14481586030514895640\n1110321451056361755\n17973089647342644595\n2706724710654274423\n6174376031897579907\n9394309826607863141\n11254129733905647985\n5501755751599531014\n2361591654721039353\n8172223558737478663\n15395739582157515806\n6359352834054497216\n11291197335087188184\n17441699098541914948\n1029546877296997163\n17767897328326122300\n5952822886842739827\n9098122799663351485\n1291879938505408519\n6174376031897579907\n12682962697741064351\n7468906333653678824\n11752636517379838318\n520307909761130919\n7205605378328289653\n9768484784098553136\n10713968265383559605\n11636540293647779522\n8182998036612822498\n12352585507759811926\n14369173278124497704\n10562507611529268502\n3014132540738927105\n15356132704265989074\n13760659367213172868\n7288028370420152422\n17345860788376397883\n15773754875206193331\n9894808659314673215\n12017649043869344127\n9013620938296806446\n2666008231795006\n4769362227039779002\n16781694077716947113\n13564606498536258420\n17124701017812707992\n7443134344729344061\n13061113701423809396\n12561026879393902632\n655310518076846319\n4781102654410718982\n7635163514383052446\n7729138404998930622\n6572916447179156076\n17720397853982998870\n6599275465636564878\n13260844554118908475\n13442480337759220663\n10726873574556659209\n6820836000462863193\n1712312205850969504\n5617845213919609112\n10704604757882077693\n9382648595796918520\n14134283809306450212\n4845947201325900329\n6020012777590964501\n17611130636841355941\n1986029515595876970\n10537070798828764677\n6628546482346787261\n2786685490935387239\n14961826436009953219\n6399560148446876708\n15816613701971669827\n1165622703168940006\n9244819929514310465\n157320242000255334\n2990119661031437678\n4471604275399905196\n1406833347486841479\n9727858156037752399\n6904373728104128677\n15632221937870369452\n5982887510608644252\n16515366786937077323\n560012088837029921\n5616798848009949725\n16754536173579285477\n4519186703344869713\n10132769335119620657\n12205581521811593701\n4493420532691612648\n5082372838649248610\n13399537876515867690\n509465043787919851\n7081784969753343430\n17963758574010884622\n16796625289615017494\n6238783108631664552\n2240729809891753003\n4160349028416651461\n7383666280375914157\n4145465072229267582\n8719434445736397435\n6857871416231327430\n6106131075209099054\n12695769338949701714\n4002422272041320992\n6690379462907966527\n16575368786825323686\n9104576090249274653\n14793238490884555279\n4937177054340656300\n13621072576251293767\n9764003451591167947\n1782797937321700986\n14534409038295679456\n560124214442136010\n14357994161086803817\n7183132720768330406\n17490257661653706234\n6906867582985042693\n8972520272316106082\n529463602506644823\n3359757733413956633\n12705009090110291340\n1597747233143155564\n1061391502131689666\n14306077372328463752\n718319462647064174\n14387761630868062324\n10520651367223629203\n9363728576480379270\n2576129022083497589\n4113500306076431780\n10114088402330915736\n15846970355090500143\n6859115509938049182\n1524275346772316367\n5487740839011598622\n17368331593345562740\n13899192944144030871\n10618791453893857254\n5748430931155785974\n16528685411403513949\n16777280759983099470\n14315127045682904357\n11907564453864350638\n1335227292523191798\n6583233237940298474\n2587353103074860169\n11220813356188352248\n12196090592742328228\n9124015703999861420\n10051738372976269674\n11105153524541524436\n14960530923995368167\n11198437554999442297\n15380587543238805844\n7532466643457806197\n11309853902729196928\n7382624243844487620\n718604579314043466\n12673708895932667713\n4721026661978525115\n13068528137572579835\n11467410418868848999\n8604202478180469188\n6628880687953841185\n5599479989898605235\n11938617334002250423\n17438694905259373979\n7063384858893698802\n10332937371634187510\n2970705149665092900\n17660769354461985220\n3747940374059127686\n7539376834766117274\n12272680357095610727\n12798368461846020494\n17882790882784698992\n10270781007623830975\n6882088592578754558\n12775594102775449801\n14245766801110365797\n3062395875712395631\n14733596618754001367\n6788480851158123409\n12062110981090917995\n16792122631668600697\n18410345286674066564\n11229928094314816179\n9980234160532744569\n1707285542355890107\n10335800889744742649\n14485241613554276399\n17136642208823758299\n9124569467350423962\n13222749584153550119\n13951498240460309419\n5127848075467146720\n1056064548361925694\n448865448614268364\n6460559482845639426\n16702473268422910616\n13229083034342066530\n5312641865488573069\n7181723681307928937\n2923903540181860387\n9142476883955128193\n15513155882596513873\n9551631899558252378\n6234630088073567475\n2731876728699408197\n15304430055089871039\n2097710292043233431\n17710896156854165072\n17927360465337471576\n15124180042173771189\n13580343264528829243\n939150359192521060\n5636547862080799995\n15193579631380282889\n12425837002017680802\n8958985377527283604\n7141872010628359556\n3293174477512104586\n16892671194373330073\n2620380960756548565\n12599384099961606572\n4260848219847154851\n11770200687782283663\n13046881207557700048\n11229515053201668478\n11525504284225445252\n16560407592083938583\n17276977821816592833\n16996741473368862448\n3180497229130793356\n2914720655152715469\n316527670296115344\n7218902309195362653\n10742061274711129153\n8661512798552603715\n11426666846603375200\n17368331593345562740\n918810717943326828\n15054219889129538427\n3614870642804067378\n18093142458137242302\n4887156406330540696\n7520955495442221929\n3660605034142291198\n11619526300694528901\n8895427687746572016\n6801708595033520960\n8085144326499210503\n18240126654025735874\n15405008580761111521\n172689804935585259\n17334920886854440762\n15789507646064215206\n11744206458878797518\n17257956828921433024\n16109293385262382617\n12211750390317846139\n6455850408099484989\n8213194170135959957\n17894987767369527780\n16983876025345002303\n3952519747175126517\n1090144127723340532\n13796224114866544097\n10206130451080086977\n331443683730340193\n9239137637521081391\n7960069469184523871\n10935489849472750858\n10230216089736814407\n13086495115160050496\n17616268553150321711\n8672520340337955751\n11556549611108587522\n722141004665369219\n17556599267448010470\n11638183032908730188\n4024657899219223160\n12271038148699722202\n14877329476891774465\n6899646372059622847\n13216100458611257857\n13732688980154951567\n10074016197450860323\n5985922541945899067\n265031188052935464\n520806793725369465\n7747193772962134372\n11759820329054085503\n6734893117681607709\n3259994264546216631\n8339548701890409788\n5618886634143637516\n17496583270845040562\n10485016715405925384\n5177792336317683199\n16753443768368162749\n18082753223449915811\n14234520585309308330\n4549069110117430298\n17927360465337471576\n4768991195460224920\n1568602342738674944\n11032977349149956498\n778390164297183189\n3857063384349225323\n2029243045210897567\n12132742056714210639\n10577377851437954198\n10393491497689241869\n319833879614644109\n126282059583787521\n15284158535095264608\n16989888509696819871\n16278042993215235247\n15444293333986169820\n2154851598827797161\n848031407464619085\n7317062599856835690\n8227048128891273652\n491498193806541601\n45411992842151100\n8926509494202077087\n13361491427439083102\n4839156821483365451\n2720950261276073760\n1596969894439161666\n3111129301420255468\n14025576675826870521\n12252472315047967888\n815555033615652199\n17602566584096525159\n10523264902056853600\n11650211861198539635\n18378007497717003174\n6637936515404487715\n13621488296755156578\n2055238995047011978\n593141322119469766\n8349925397491682112\n2428763910892696563\n12044709685083916300\n12493294048350611542\n13580675062476031783\n10143861861983206984\n1769721388770685583\n143019830663439604\n10263415208515960965\n5568643617820274275\n8363132383017981284\n6667405730298123892\n15599593770435064495\n1677865806198879520\n8742359259492332748\n7257008864054703912\n4219336280641557403\n7310775413733460595\n3728482408625645057\n570872052808351307\n8930292711312014194\n17127057813834936642\n8886030858879446134\n5515145696273593672\n1782641453254425298\n3592203068441707994\n4886850017673623337\n4164048543542795620\n12011906364497177294\n3367868134953599550\n16838853958995227937\n13842488372821990923\n8081386764630911759\n17893886754884802689\n13536206324435692459\n8592546673661161050\n4823466991610600145\n4552466138091182253\n9918367988800860598\n1753149640419399044\n371356467113946825\n2874375086882765733\n13248128313818858995\n1887090196042847581\n922078369736870333\n8199074711754258903\n2219241902556607144\n2644074565518405587\n10616584145281799436\n15010621300645759954\n15442529827256722595\n1307132675799817448\n5834487180679297519\n15989086720722518149\n1843163123869686220\n17131094403043974425\n8217947264727913440\n14035504332012264220\n721695721204106929\n14653837373184524144\n9059191981376568203\n17174460973908019068\n8604832755591647509\n12208344612356400727\n1007502382434642599\n197709030609238138\n18039237864979795670\n5970454510639958460\n1308242554601685864\n9133351020800895853\n17952354440117180502\n17747525210776296919\n3810244103382184483\n15290469446851007572\n17300153418272528703\n13654553865788259822\n13650538724446643591\n7573388064759856457\n5433913080792031706\n9794598996045580266\n15194547041720424121\n881725608211970747\n325843755571611337\n1476574489053771350\n11347465691270291885\n17551628446037399354\n6924371182715434792\n14269530326124945621\n15838922577847905066\n6109690441767194564\n2806644836848067481\n8713720073357381660\n13642548275153619002\n4020696554630210870\n7455978143929349715\n16304726875156415934\n1379167483683124506\n6295181371611727767\n4366099330781778891\n7495976377374695416\n4062985618834192864\n18315243083685633592\n17304677434543375872\n15212290389212849473\n10430728171687923494\n7662365420303853861\n1312067615642477927\n4287880532953419442\n7113105560470280805\n8041479943137190587\n3264358861105019574\n16721363183224618600\n6776790654811711335\n201900647467760184\n10903289887182680779\n4826681246629239587\n8158771192314543423\n711370822933819195\n3895306549725418919\n8862985398296939983\n15015397214114498241\n13786555111271880873\n18001896163843909445\n17824600625850819865\n177053830718852901\n10730444554245431722\n2769884254693043541\n2526326948150317841\n3484469398610060744\n2988588220820926888\n17911728816476182984\n10929666160941637427\n14369320143554385873\n182278169881607422\n15844741723651388263\n935835389551276654\n12885048857449888928\n4371875012546663817\n11448234117341615039\n16500601803628870850\n12965624778421219321\n13528984906890609185\n6823950760209850016\n17675122665841358774\n5024503809808357116\n14494934338432187648\n1824624471661267814\n4809765533800803766\n16934947354056229925\n15129344040106124796\n7283766869137486032\n13602587522406085461\n11129551403760100982\n218029367336894531\n4936368358510516469\n17497466358881134428\n16285022622420113196\n3554753324681949387\n17520387408062909499\n16565155857298934065\n8659319034684368914\n3888783797404708718\n17413841230803220592\n4021596622232744745\n824675788589045637\n2225174874520067459\n1640583716975349987\n7419584421718995238\n9207056885708047524\n1328089983715343111\n9113529369850719420\n11278978247702257403\n1673395551044310687\n16724014760768198434\n14015549011132347147\n14757704585843594299\n4532527256929013737\n11781493257593596777\n3471076118669100078\n18196340326991920337\n3348586638848948608\n2670840200565573839\n8020050722936049274\n16782976482439699647\n12915995176838548696\n6740874091206387414\n3081826479417258532\n3548677854724277948\n18329012727634849156\n7495976377374695416\n3472175347036398695\n15535055177365877990\n12008354475079636998\n12381438988870758048\n6465814152452001347\n17519572206809077313\n16760511177595740003\n5943208646094547446\n14215418609059514768\n3494962156190426590\n12272680357095610727\n16250594889500632899\n3315386220178631415\n16865807697661844537\n16265697735207718240\n4904947566452776577\n8578024835719033270\n8804858218525680087\n15236861719824719459\n15145252635793120820\n2658267448506460064\n4508813324017092651\n12975148014809035907\n16078596864946289747\n18423607523052477580\n13638284211164576308\n5755528863405107437\n5586514011042057253\n17940837500615000120\n16944004758162850511\n6068943461510332849\n1639651082028337600\n2658267448506460064\n10907831572143971558\n4656567321241934494\n14952298657969049599\n16421299637793291551\n13459016780534940942\n5853469365513940293\n14137119139198239023\n10774047365211412893\n10333418998884539720\n11770763403560277409\n157621864415968188\n17715529680389398994\n4010026851158931577\n3051855551379333533\n8029142023571048479\n1832929734942420005\n10918977730648007986\n4289238485000411175\n13744787786717435921\n142178144297815880\n8741015807180261550\n4141006222699680695\n15923784093508190695\n11982529865998770226\n1779624071008043590\n13729835828178652106\n4899371387835633681\n9302514616115083981\n11186063709961329089\n6752216943664571981\n17477450998008376077\n3128043861452740990\n603800635003780169\n578632051564987212\n3525388992519917043\n14775127605269414518\n17290991340668357231\n1142104679197000358\n661864967579742594\n17227649846751758967\n6843198997831922695\n18019355406790638975\n14834257354262711769\n7123964052736342542\n8748681894300266840\n10367441074290314011\n9840207814889346985\n17358522971118812335\n11173459448486289037\n12491220470807797430\n2113820440908572158\n4587589535920235949\n6796736957048457696\n6725166713774778759\n7614642826723278423\n6303935495324851701\n3893608198033392265\n3814847370826333592\n18067059293465904669\n1106218759348811558\n17944744109210233064\n729577929082043605\n1791562590548565819\n16110915047770022504\n7650180424035864696\n17316410479402739876\n2557578841514868274\n12236945689636128323\n9793092308678732522\n3053579305608852622\n2037524574354789645\n18356346237449553432\n6895755891453216702\n15278784925442610033\n7741388607621169538\n15080832926040060544\n12331511114380684018\n14667004205940743615\n15786931652622195977\n13058314833405557383\n16816199099620296772\n5480288541366243035\n12054091061977243301\n456758730325319250\n10015851046015348457\n9498538174466269503\n4553670514763683140\n7612643830718559721\n1537851684852690007\n17623988552885978535\n15492103378925319680\n5729500254064506307\n18082753223449915811\n6468256130268165278\n16702277359113358419\n4975877360858412059\n7052808560106447974\n561339543551773937\n2634010063631075739\n15044832385391843093\n5254927583731337438\n16139422430982064570\n10158108595535097942\n6648976187838191167\n10430728171687923494\n11383869676559437662\n5029520981616634815\n7008755903864992250\n14325178949366187488\n13238151510944437098\n9994981866123233528\n14855104057865071027\n13388683833883542265\n1404755219644435937\n1751052177062758177\n17282371072644342341\n15327541219995187552\n17210933966371372250\n8427994464031207684\n14491074615313793891\n12166708172797889864\n7795571022554718442\n2848124898191936270\n13073781207571188491\n10226437172389362202\n15399112058879006610\n5059159885769759172\n7343233402684916810\n2962201590828145906\n9590612130434450319\n13241126729749919541\n13694897990203571174\n3526152711561739647\n952073322291295437\n17961096681917551050\n13153522759144445889\n5798055711420156007\n7218902309195362653\n12745453441983155648\n13902570852990529634\n9686696793951822982\n18370169524482463752\n1487180280167043759\n8041479943137190587\n8197726202857310062\n14928871000275535597\n10814430563743076081\n2833933949201378232\n16234311024129480987\n17219908860198389217\n3011265658066712524\n7896577301731332969\n11387032036102266799\n14102769349880638796\n3964479802863542127\n17556599267448010470\n7541387647795331383\n15475842481779570550\n10731271226269216580\n12628865618903808905\n6139457429443091969\n10960882686308637266\n11601462396334460714\n1839139241041486425\n7257008864054703912\n13193653977804209447\n4409544623490886986\n13162529662392769427\n5927719683331976395\n3557283612699903580\n13703105568403905570\n11379128706198378597\n15863209204615495986\n7440474343478960828\n1890929151822452123\n10516552631625585780\n4977327283439369031\n11980486626243279433\n4894629063809964413\n3865253563002294618\n2525813954191957713\n18371619414053506816\n6214548114654295829\n5795272324508037651\n2445104326018494084\n16732952053401626447\n5206943638063402469\n16265697735207718240\n3417528958021458571\n12975610044733978941\n6050856727115360509\n15549878563340353549\n2001339334766524902\n589399041100564511\n4666074054028728789\n12610204061373736098\n494609810686180644\n5447766120181255420\n114492311168072360\n14247625159725837914\n5496201411719684492\n17160249918655285082\n11312306261004666922\n1862399599986074174\n15055277115026934567\n17603920983641763416\n9628847071669774468\n8648011225207315649\n14312379723369725422\n2496306075770465549\n17067819286011782188\n11629820619519170221\n3588459972613925535\n1705211980505113673\n16762523931519581508\n10737417971589660460\n716623209738740552\n15301809780424659307\n8064201638912904153\n14793238490884555279\n4079104457021862303\n17307534990209556263\n13951498240460309419\n2099160610503455716\n7005646584384242860\n1539071115383368999\n799325264913259398\n6998522217440368613\n5938129833144221405\n15977144533299735152\n9711282286987660511\n14597371628962298518\n2118875897073868979\n9193192433659398851\n12349073930688650062\n13932368179691562024\n1922995864265558017\n349175694093835032\n4215523935549933081\n9446734525530739579\n12298571110350176794\n2241318368345707829\n4719942348388086458\n8407410899016493124\n15380790974400552373\n10780672929226546574\n7926170682954210199\n12409307469426949965\n7279947129820021974\n18103370070457514620\n1545748835555624416\n14451160557422174074\n18076275076149743818\n10485016715405925384\n3134032151411792400\n7149506235454261978\n3238598966708789106\n5093280401571969483\n7134474746133606563\n13480003443571643800\n15765201779125659199\n1052596627541033766\n13505018785345357756\n7270641548653962145\n2700181435289245871\n6107781751729535301\n7260046083757448721\n14800882794950865440\n5200615822537085575\n6366294158886780693\n9927094618907441362\n13216100458611257857\n12476201829059740837\n17044597768798391717\n5023563242453945354\n9747309772542065203\n9569801708073302435\n12972908527759680898\n3837191031535451551\n3704404972126093379\n17216861388208835590\n4371835669696892914\n2382644385687526973\n16673620083541558549\n15926825013130640495\n5119989549544378979\n3084281644617320508\n12134156944020148703\n1691671436515606336\n9925634054151381909\n11035483471288482504\n1470130401073103094\n8475950426767803826\n9979232666136756598\n17785662858401941718\n10236407640371150521\n3522101495558523178\n2906118899565209061\n16969598090320184595\n11009662230098592390\n17664569204519469618\n9831121925783033064\n1104978598601332338\n430649717360290018\n12436719136806894535\n6147006426634666479\n12878628868192174906\n12629733456043428833\n2133380087560274740\n6423291063267190624\n5646117973041790321\n6690520061822491789\n6196748444916916810\n6868907619032746030\n10419698507465224410\n7578924754740010439\n16263924498209187039\n17153811928200947150\n12653696491945188735\n15006003239253802594\n477379265811711457\n5215778064014381334\n5583972578064877093\n16721156326081793613\n14173960408661702913\n13842990360525640598\n13261351816688237698\n2924484990843149142\n15460611449321921853\n7020907054769687502\n5000355727502345792\n2378292627372123686\n12650918653501267\n8150480413986898132\n16345023128634041992\n5439652219497854\n17824600625850819865\n13692237606027235662\n13467315128445840421\n3740445483565059823\n18307570993856727488\n3455906178039114106\n8636248911998104690\n16263421091572155801\n1551792649086678205\n7054011196337010257\n17900524610824303707\n922078369736870333\n11625126825294858284\n9318057685861647833\n17526345900640356291\n16076771292281126389\n6530274127131258135\n4193953745505248000\n11763683719243488767\n4430131797963281665\n1079817305417252148\n12636069929676403511\n7062304169419111723\n9911991950704985495\n11126948767782844702\n17970436686901618043\n16433234512508577713\n14503363992047836142\n10558071807415610010\n16046330711038523225\n5735761582809677651\n8345398642441940452\n12998582031460830356\n16574794996301818609\n4375652349917238546\n8008379871380158994\n8530634549749179583\n8997629757496069770\n2839437817450987352\n3321113637448678530\n17455987166046900804\n15191448169967809010\n10290162149688774956\n7983689866305945296\n15632708747444274604\n5472932564194080246\n17374647064134847725\n13120231437122899735\n10023169429098069515\n16381185354067302999\n2479735589994161741\n4330126125365031290\n12948024071888227496\n4396929939202348079\n1231097926237916233\n10808159670144736009\n7643353866694692976\n11462466285272864414\n963713441111153910\n760828118539923654\n17669045215068905958\n7776111079177573056\n310777361849106795\n8524611887276791508\n8325595684605605393\n5817439559009734032\n5697204263654444347\n3785088883664778004\n2916697913127091501\n14272060831742792043\n6361876051637709789\n5212415694590147160\n4429899099816260191\n6566058289137590473\n16273768746108040356\n8796447306099745300\n11724236963005827989\n14461184400537095211\n18056323349576055839\n8522519153333683550\n14559475691367743160\n929718047577267059\n9265940574281317560\n13439127268097928266\n10974661560262265764\n5745199509975308915\n2303637905369731428\n13798625029067608127\n14570528327398540979\n13903459001206053141\n12472796036947604484\n16400036097096400701\n7853624192080471928\n17556517250120741418\n12585548922041978630\n14699324822050553603\n6247031645266403605\n6212291922626751455\n13414988140408624113\n9735925535663508359\n9177126036076591439\n15198620432534955013\n13349379069760604123\n2965037428621990078\n10710777996449962154\n17569555293609564414\n2756811835614387575\n9488236098370319234\n12945631796188912447\n8319528108931319823\n2946461033474768016\n2650688537286143406\n2689981581037678554\n7835073437651980894\n3660605034142291198\n3285717728537625271\n16580557843113484199\n10436137325523930968\n18345781860920406256\n11435804917532373956\n2986669465909557668\n5076452216877218413\n8195843935835767436\n3673881661095829638\n15170586395365004956\n14182716129989584521\n14864089095957249496\n1570837452751946810\n10994476047017175891\n5318707510335384671\n5159007752045056315\n2389992823041645015\n11569105592668401070\n10751275815498968774\n12142334935692588674\n8118005168082358345\n15194795010009620114\n17577183266491063996\n1439148870364617226\n11955442665200767523\n9359265163852402442\n11758316798560566360\n14503739627470593892\n9116498679053876522\n16479868901495097019\n2112645945753985528\n9311679020175697063\n7130959809044218232\n1312067615642477927\n14951977989407322350\n10462411552902077221\n14803072729925716320\n11658992310707777281\n10835653457794615593\n8023441095601271940\n8532294574935931318\n9888776228385804697\n17057483671320237269\n7963466567614127420\n8309367242379697887\n11414433927280029269\n2326973603001393665\n602394350717843212\n11326218193575048835\n18116129117131086262\n13564606498536258420\n667659619127853060\n4704573208608869729\n10465698732076089184\n6704027661204345052\n117458432396962726\n9230971234839597965\n1303247252890532126\n16842457510010893748\n14717912490465898618\n9541403516769024425\n10562507611529268502\n1960968428340784092\n5254927583731337438\n12115078775557668575\n3779480430769090489\n15724525404529198483\n17009921026585637314\n2056309640419992736\n13804491873511901702\n16156538616693001128\n13680849466821682295\n2607832993626558004\n7823328067258628015\n3659260103241791521\n9897874727601829468\n15658957156498876380\n661864967579742594\n13510442832999295494\n15610348170178117448\n7951888287065581683\n3888817461037488554\n17531843596019503509\n7134006060039176042\n16910959392503338203\n8539596622052487224\n11698835657667933399\n14971677401887196868\n2068817953143129486\n7719638840806268929\n5473389415191369351\n2810985040786899602\n7140970782786717759\n11489163479872785580\n11005962146065493210\n9333738276189937276\n14041909985417261008\n18083923800302639795\n5617957928704373661\n12381764322357404691\n13404826377443106566\n15682952486544923440\n14312158968224832205\n16774830952835813068\n3567573318103235019\n12073996261861600729\n2671937858843578934\n6757923483102540240\n8985742934919715127\n10259891798535693125\n2834932863034803183\n11929224377631002419\n10445253756698472\n18219559565866083394\n17621349792600218126\n2933618839871883608\n8214987976558631155\n3229578769404233457\n7763179771981094971\n8405488170200668955\n14572566962524856076\n18403086151514705979\n13889576930692494684\n39033485076119984\n10398644738803113564\n3123382004457761770\n17348069791173232355\n18215167286919466252\n11005962146065493210\n5990815123951391747\n9012846000154801352\n17542582883120954292\n1260141140645412178\n11801631084021275143\n12389445117747889920\n4666520526711046838\n9188920841732089086\n15158519384777937800\n6270701034091689505\n14232968509670334\n14382251187754020635\n3115713874633833687\n11248004212680386636\n11461508478986239723\n4555593064912999363\n5023194609106177444\n16943820117049461347\n2993281334006787889\n8585187321889160552\n4699659876842061539\n2335271866586086492\n15704941582519027869\n4646370136966623610\n17719462479526500154\n14862581021587731888\n4667340211623342011\n15888294888673179185\n2601369390943522247\n884321528290968776\n1616651422401810926\n12984127465480103876\n16250172505400443933\n4394134438080674494\n8023709185118947307\n14182716129989584521\n17012381682863233398\n12164261643217295774\n9868989808589914673\n6745007220820726128\n4878476243524909741\n12828326443644169422\n10731271226269216580\n9421676877508943778\n800857523808831093\n17783003789219881861\n11952618308167049089\n11886036443304612834\n1880659324732673351\n7613242356210034453\n8257736826523435945\n1525613069594234685\n10056275450866050380\n3863613738506447833\n185250761715279778\n8355693810356350169\n7758388643793597955\n11734497748721594950\n6016053418263048535\n3382695877707424345\n7783851456214662614\n13637760542483778621\n8339548701890409788\n4781102654410718982\n9192281843548103188\n10024029150976503794\n7123483956791095277\n1406833347486841479\n12208162942681811321\n2925640908677184068\n8559986335776750091\n11998982220095062736\n1867278674012661125\n5980452431533076414\n12786603737616922265\n4391725488681149407\n2514037321826491017\n8690025448682997981\n1518543659868642359\n11889287549030188180\n6077874994014072119\n12254798167990331568\n6276629007770663522\n13012000916665696667\n11865014239361525217\n15736741123922638130\n6530932447494959214\n3995990936028920590\n11345351196152061165\n15694356453558378743\n3477001680218503192\n6736034056292109860\n8667377259806477547\n4004768222927699542\n14597114128109532779\n10980276405057296134\n17321943981653663938\n8170537887805590803\n14924548970469532925\n15300319063941439023\n12111809612796852644\n15466509322122603984\n13824339635609032009\n5607208783085641172\n13576480678754397955\n15359033654149226066\n8762716803345010692\n6949323475830076741\n12037160098346246090\n3313089424187063460\n12225315746289939147\n16105577804284925158\n4463404723530037587\n12081134389651739979\n5091211906645214560\n14561332208939456831\n13144100591692962440\n12416237175343371804\n7436414658966690195\n5005117584068138741\n12821268210982511550\n7195713364820485606\n12747427433346771017\n17425233090456592715\n12280284161983475515\n15845737715369355080\n5792619485770166561\n11824305125616343054\n14910591409478770504\n16016645509241507917\n18193189872413836801\n14791085000766218241\n8681144277303010509\n17039938375370962616\n7467559151233985643\n7763469924867193637\n1985080322759983586\n5902757476974301596\n12695769338949701714\n8798938274853518066\n5736516153833537067\n10327835851051028320\n13193755041005798564\n491177911681605752\n12333365806768137732\n18423607523052477580\n4571040147889804988\n1958376386903356434\n14010446547038633511\n13225178241182043469\n14924170036066137175\n2058539246428270392\n2735109764353599551\n16360108222797411141\n3760148830219105626\n6310608112759839552\n6715998042131505833\n1891566158087173731\n4646862896883247533\n11059476909794312940\n14425289427973041355\n11616496690328546879\n2335271866586086492\n8122970060722118771\n767107670802736080\n10412054975271165657\n5453917572982932169\n16762570776506816412\n2022971660828729865\n4385014454822579458\n13784431604827168147\n4882646585316842697\n7136833185832477871\n17330403580344403408\n10172306664461830073\n13915315579177206521\n8689979354698919310\n5451355090686942417\n10492174919841101289\n15751305630680763797\n8793996208038611013\n16796625289615017494\n6601009842684272754\n9198241425849607620\n10815452863258259342\n1840731413781765902\n2054616806174969096\n6280460645626878813\n8162335900231845547\n12413244037653872094\n16533475630462192456\n738825372586140051\n4290956364698345525\n7382198090326843437\n5114051058207735187\n1812195389759232482\n17069410936929580562\n5993856626611489899\n5591080492137782143\n16349753797083521465\n16183840176961302715\n3157569754426249124\n4612647124675320285\n2851432950945245058\n10416141460677819459\n16035283549058341190\n5067884441784025301\n7679839664027578910\n5700795453020390233\n2752469427072474715\n10011316204743505067\n17424473094171348071\n7894454422302236940\n18037910326905526523\n6785642929145938781\n2576129022083497589\n9046272642167433139\n1188579611328643233\n13909170214415280875\n16729323486609451559\n5373370471537616148\n6035631692618830439\n9456556491452215581\n12052729189143195939\n5716983583095821729\n9012846000154801352\n15193579631380282889\n17429100430299452245\n17501417300662509576\n8407431456187495762\n17324775735765758958\n16102918872562035977\n10127341150644473684\n4196776173550635904\n17777648987796919462\n12504263206582553380\n11770763403560277409\n16201963762232020169\n2975862790175518183\n13744406523179921275\n11523242716246002599\n3467185983422446874\n12684685325973300905\n4253329946215272530\n14800960596288263228\n17441699098541914948\n7381236086022320641\n10088199924069210029\n11834129626735838654\n11003850892147169556\n6233098432593858421\n10547183264912262562\n2491844703238075002\n5725465454712978319\n5551405411879655223\n10846174515266323517\n13150435678457077294\n9363728576480379270\n16316597180145620368\n12175802680378583957\n15844741723651388263\n3597366304701209927\n5773097153320206014\n8916788406830255526\n12237819110608923915\n3445057090273837338\n5315668325578605504\n9559531031761643507\n12196090592742328228\n16996741473368862448\n4612138343770350861\n17534208526087055247\n4002422272041320992\n6569230419499488390\n4342298502028476335\n7851692570211838261\n2179168282310163452\n16332834192167630033\n12789625372988331296\n7827679016620778386\n17533332552267492059\n3955837149706683949\n9899923394743179138\n13208799016288069201\n10929488199040174128\n11455591038119682133\n100384076492967461\n15833882314655552614\n15897900819287007581\n8470070636210653733\n4977237561352848608\n17956995654211419027\n15565174974229636824\n3647161871885124807\n6514837438705709501\n11445234484708126026\n15358880444430560874\n17741220254406149309\n11979437837046106983\n16933700641351363752\n6406626153897239170\n11795287063647148077\n9230971234839597965\n5172957657746084908\n12781319907986783260\n17206530954869298208\n16425998698211312271\n15188241520066508096\n17428919516951959130\n13902869055867536375\n16692103384613028257\n12422894965348612308\n9765131671805198916\n2924484990843149142\n574929933700710396\n16139084769255512573\n9455763178180447579\n8875308092708894784\n11176299997982893085\n8053369115904842131\n1787442879607483489\n2925640908677184068\n3301424365747090490\n9520566171229515221\n1957833100793430810\n2525813954191957713\n1754969299475426039\n17213882209503444852\n11968245821514747334\n4336940643743493603\n11542842787890663367\n10686426838751491049\n5930501203554320740\n12167155554393078056\n7153719026325935522\n7914570151299486991\n477017734490163461\n17876514749597024994\n17117510349379773692\n15709573819266429974\n7111180640487082025\n16257382875906252671\n15713568456719534280\n9554886096184934272\n7947024723706855557\n7823513224266955224\n6470357563898968873\n4488734793195029639\n1685455958204922961\n2601454506369326803\n1900408659240558906\n6757476953127772528\n11830350391292326570\n12391529206304563408\n14455759643374367627\n753000771350930851\n9729122058075625440\n426843250260881410\n4909693062022507927\n16736777843524721373\n13562011252413579654\n8533316222034060106\n14261413424768251132\n3999330844246270338\n13884379403491974952\n4375652349917238546\n18052850851626622257\n2496306075770465549\n17945168697861681026\n12053048794179856894\n2617885913636748228\n17614764978590854344\n7764152852215584507\n8755222394700166626\n13710619140416846291\n16659313059727896049\n9746034687256946599\n1404755219644435937\n6583233237940298474\n5803709518481345843\n13596657164971300343\n18131216709846412362\n8143134025833656226\n15810617950910229419\n9331021337727644560\n6016053418263048535\n1096730130432804805\n13170158401061119608\n14831186394742353263\n7156876110094609913\n7715583375122285577\n8187625797350553970\n2702050204428717308\n1326982472242840407\n14270132964567426299\n13032316100081014746\n5587389729688607489\n9557507956659746700\n5845088577016160077\n177053830718852901\n6655214394311657318\n14423824349302834036\n14156088754035226735\n7743664455319762315\n18074392507455389783\n525605073677544750\n8161336252187423171\n15838886960453594614\n7749409507418051037\n10744826821718727520\n12216967752349282137\n10103526973492423554\n14651653157331808981\n13102908184891268672\n8108369767510631207\n5533981769586990593\n13568522640819949525\n2517271880894300337\n5800548105665827171\n4801745846211149975\n16459219961864939673\n13121188592175984711\n5011715128729472859\n4823466991610600145\n2126832155069424368\n11638097234298026636\n13348909916748672406\n7832282556996566883\n15096494227030089579\n11857076760390642403\n7279463107747304025\n7420085752422620246\n10245894916771624615\n15885540506678917319\n15194795010009620114\n4884894195264582976\n13447067903019977459\n4811300029309799318\n15735845448086380450\n13065600209115765068\n7344957653646740999\n561887390485012142\n16638818276881337441\n6530274127131258135\n5844749401749425801\n15514365491500731748\n1846549560524757316\n2768583925208526302\n4069695786755924649\n14234716252033302978\n16767862013479328748\n13938122074403537035\n9154831755213836411\n349828455523589225\n2750338564895308892\n15737210243667059626\n2660458952984080447\n15926825013130640495\n8936520929311547303\n10928857691045206286\n905140352409187283\n3091939383400999999\n11462309229550864720\n6541265831056447677\n4459161718336039808\n17036422299712457113\n15067497455739836860\n11229928094314816179\n701280827470541342\n14683396937249943974\n10113523182426872093\n17915611371057276688\n2554323275096941797\n12790794875664619048\n1955590705678543978\n14053724190065752200\n15288008850310671011\n13576183877131743047\n5443192322657767612\n3284872058545146289\n2642058242308624824\n2833933949201378232\n886145686728613479\n7620748694074838694\n1273259516166641732\n11473151371107808972\n13990284671012890592\n2469838066249038299\n6779176625068449069\n6725175359317270670\n16743160103200188419\n8870455428705968728\n10677461517945542925\n18370169524482463752\n11538207713927098586\n9583214786255183131\n5477861031872178670\n6281273492885290448\n14422704260780840200\n17193888120164658527\n16922817131227610817\n6813571923832436025\n12220353232036644250\n3168976593510273474\n11218866860512751646\n5533981769586990593\n16288636616561036370\n8768407081960479498\n2939085181017355441\n14641136386810472762\n9281981575139870146\n12360879013630923437\n2260217546573200561\n466683895198402101\n18371553758611051959\n7664868072822881390\n11548192571854650567\n706887455683360300\n15522658370414750531\n9104576090249274653\n751401328641141437\n509269483460457595\n8814693194751226713\n7271884638387845663\n5062143164814524305\n7913041269614602272\n15231454395938292260\n8977522943482117465\n12627006486082370810\n9569801708073302435\n2240729809891753003\n11828776583358509094\n2110514294718467932\n13657423573830161446\n2982231841747287323\n10244192098775740627\n13563957296597228045\n618546680790133196\n6292749921445668149\n8363551000426413142\n13422895052038226368\n9189324121673496112\n14654067621887397494\n14381667063807041436\n13508271643373057762\n9180589457704661795\n13656600816185110031\n5354443163434711610\n8321498680799606930\n4699938055280436093\n4853021516196807734\n14651653157331808981\n10388101636166176200\n2037446055821832572\n17430563423718216937\n13520247816010460974\n8291622727971720453\n934176171864525950\n1312524122003452261\n14412372446375226715\n4261180921715457685\n17710896156854165072\n16020272116339116258\n3279884555964004485\n17634856203779677109\n5297200482686630977\n926468937278903384\n8683101056933411739\n9283749369479903544\n10023145889107537938\n8714844664951466223\n14829671482196012880\n15036340732492574286\n1689395829926777799\n17421029076341168479\n6465814152452001347\n9869746207154218468\n10149545045677696666\n164897249633784033\n6728267295768155001\n10200107661441820195\n9171358940566793713\n15184978550294256807\n5928242029205298135\n18173561656462020693\n4125580803312587390\n9112492076800453980\n4333165536194748067\n3371673549585833450\n16612939250725448470\n8787272954048723856\n13113767715940485586\n3020549586974155431\n16469784778470942702\n13367691756441682341\n6381656848848947085\n597897846136762883\n13584181953401935723\n14569965583877694562\n11448234117341615039\n3293441915994385460\n4310451261733425004\n185280358154807221\n1147253370324508047\n6230167383661604407\n9517932671247342288\n1751522412228803989\n3437474301135176417\n17530655888341620260\n5652166159779397612\n7567656272468367643\n10699704696444055349\n1061769337375467229\n9133301292808148398\n143019830663439604\n11254129733905647985\n16630678373998151520\n8740530469591545421\n17532010835487570192\n11514801442648597842\n1000397254495042565\n7781895987714430096\n4039930203221884183\n3181829525956153399\n4543381494375307018\n11721044486429273487\n12871767632880267759\n2737310413673734095\n7100501623911451825\n13834712279797741037\n9043644435238844936\n11952618308167049089\n8991596628572381387\n15352380353468275846\n7141536898648046437\n9629645896159244239\n1861835248924852644\n8657505885658228262\n1720543413794118741\n15977358788769139233\n15596813912960889455\n6470357563898968873\n2985428233356392927\n16111401518294189961\n9000229713547470589\n5708117654504342064\n13867201682284436322\n1885490084088585284\n1031230234184664678\n14173960408661702913\n12176086886948999627\n11509303017699976411\n5851238723280970133\n3181829525956153399\n4475012019951967548\n15564937377805532263\n5152521400174793002\n12060418855541795500\n1553862782870374759\n17492761589929535495\n3582402652011661108\n6859115509938049182\n850699889917048985\n15646304756369878699\n12610343981955807151\n1421173689471691218\n15011766004633027403\n17711059704581460090\n4733269084491180130\n9743136408661204819\n1159888091038791991\n18131343984605219969\n6487929067505316332\n5314811031964818846\n17209087404859916881\n9064963144072344889\n12012569736474677812\n14367512394981503186\n13007894296728061420\n3832960521714447936\n11342076202821805099\n1977756850518431247\n1485182793244233185\n11777715807617542983\n10598566078909826547\n12497026230158285587\n6623380976373292029\n3998370278572308568\n7279947129820021974\n5447603431030601494\n11538207713927098586\n15210956367548530370\n3517064603117319739\n18369036212838404689\n3032603954284521176\n4646765567637491969\n3425942349794067789\n11126948767782844702\n7504306147291093207\n13627741743924314269\n17876514749597024994\n8465454918509538139\n5678209021720941012\n10751275815498968774\n1346214739153447178\n14861061992441764422\n1299863275304855645\n15602783378665211018\n10839993423269324181\n12533944066478200584\n5945759401129735697\n8397232198996257501\n2563793006624515095\n4072250039901499431\n9989365439952533442\n1007200021423146052\n14066921255481015120\n16619862902662175495\n2889563323119114310\n18116129117131086262\n17540441034209800924\n13640032274705201965\n165485341210163322\n3355712671651170457\n14864194483343939899\n12394053478942489110\n12153370341302206901\n17975811501502182606\n18266185650625509615\n6837398743538591866\n251441926727679765\n3522497903137405073\n13810302091905574533\n5603557411307373692\n9616089861543640946\n7750172546859908813\n10609828078547430052\n469672818808383519\n8887216312376713071\n822375074938868519\n6899646372059622847\n14770502669213815317\n14686845654500599538\n13113912694560926998\n3493719666075232441\n14526955560812079445\n10520651367223629203\n9160382268526763997\n6106131075209099054\n11430557270312676454\n11449381731851681287\n14502929161395031750\n16507436111319540680\n16684654738994626924\n14813738382071115824\n14079022398270775510\n5824607467466632327\n13310352905789519184\n8737105576138085752\n267934469722184177\n8197726202857310062\n6139794438658268608\n17719462479526500154\n9602691899341810804\n15790888908179783900\n8683119908149988007\n3117544576648116399\n3525388992519917043\n10603932884885017326\n12182550381933777423\n1828704507629611788\n10256719238529004659\n2920467764947888621\n2706724710654274423\n7110606169110564283\n5937220396445439887\n12433853123335157554\n8396704552133666000\n14610894555359348434\n3959553131359034177\n15009126464697208336\n14335193942807415369\n8029142023571048479\n18262877724007580607\n5416281085780045334\n11755062424194605579\n7753747471565835002\n11435804917532373956\n9109146359590558319\n11923932004591693680\n5174228918914143705\n12236419883493569392\n8452384648954476885\n8552966243049957434\n13821042261644924195\n13310352905789519184\n2436574728528211431\n6963077285580506956\n9046272642167433139\n431909101629403241\n3278119694089950064\n5247281516536955742\n12615097682920201780\n12655044169054620870\n8083137702765883630\n13245662954029787742\n18104349756507147895\n6207540811485628564\n1598448895427611708\n4918167680412789018\n18120062436946806680\n75576306532669618\n11102977964652954463\n15663746086902308913\n9411534442477850892\n16572290095526714986\n12420199657810103727\n8434565279220671500\n18022682054880634797\n1539071115383368999\n16520664653548093547\n9558478293281319053\n17237699648500363065\n14667599366443403498\n10895105236672640405\n9604848504605885852\n4171089623731442848\n16702473268422910616\n1749119696752366592\n12280284161983475515\n17904218639497994011\n3278815525578941821\n6868907619032746030\n15783034488315598768\n2907713320783999131\n3580903147364113701\n13052591383085694226\n390533303037226174\n7436414658966690195\n17877343976617093443\n4125482166434248872\n5063291165723595766\n7266862051078878453\n16304798386782027492\n13919241012632096773\n18259730237980192180\n12540247791402368537\n15878562320910760569\n7549897366842867041\n2962439647579749906\n2045830408128119402\n8174518561559861373\n11845357336131491829\n15926798316787518202\n13823558881464414479\n17853550431263983815\n16698200607366380052\n6720081779873394801\n16704432177570915735\n7544198339498694860\n15637850563274996758\n14466148254943156045\n15407317856275431101\n3556874557414750363\n12883227476141420584\n552633528442390520\n7422747308397745685\n14845116573907907728\n14013366998308903881\n9255053011877581507\n6378660855538406541\n2767451637429668228\n10656178043848148953\n6795061819466993928\n12340714501123494459\n3889302001110941125\n665185768437851432\n12144159904406125979\n12948596384794058555\n10543963507961964296\n754172930320912447\n11250369598985965557\n18082223490421321982\n17892033338613346354\n1257365004112976901\n6527694422784367147\n8938844185916196483\n10855597993103771317\n16263888549194907021\n15088304755337792953\n1981255008781185520\n6034142651429273579\n14871893514033862522\n16784140386560957624\n3740554745241086972\n13229443125107231799\n1325964133856689768\n6929972456156375907\n16782976482439699647\n3751442393314989019\n9519027888258751813\n5011114552863517014\n7703679526146141223\n8702830561245705634\n2506521831527123557\n15147926383100312682\n4711083342202851914\n12218807219904996715\n1524295522360257599\n5476284555389779001\n17646875767125599393\n13607461644970741473\n2653822828166335040\n12381438988870758048\n10675696802074496976\n6206825546361676762\n6115090376490608986\n16651371786178299679\n6815627460838659012\n15875891504300200463\n12368362934760558196\n8864832226496750235\n12354918616403130843\n5425489462398726573\n2661834271291623969\n1608638869068696557\n14810970791399796513\n820674564903005788\n17748503125419825258\n10440963074548769013\n10374538614508675729\n16148421260739053955\n9052956889385879969\n8458176843839112802\n7496342752547084973\n18443582816141476096\n8704758505879271535\n1151720988337338126\n16094315188118949301\n15959667987899755220\n8070876262113975473\n3244020065734105922\n718931799378362985\n7935796528269614297\n7081784969753343430\n3731055254099289474\n15946178246992242506\n564049118347937212\n17625587130180253314\n2723352677502249106\n18390875543502894132\n2624071890399235284\n7803029644386054433\n11248581254526180716\n15563301938119732536\n4676754000472284520\n5502306080318434042\n6593919290564588438\n12317891137496144190\n13813478904735061154\n9949385154012309995\n1335227292523191798\n13227816907312680055\n10287959317997817084\n5599479989898605235\n12429309935960936386\n13272156547778583867\n13741702909764245828\n10664876608758315103\n1456094068145579675\n6615509269635389442\n8741526973612482999\n2915095815996143605\n7420067656436729450\n5774092032995124696\n11151263715525598417\n7736852407040078686\n12690238507145852765\n2362433953599687252\n2345238395920707006\n3437474301135176417\n9196467138015357693\n9068328692502145881\n8737553391232578551\n15442568703456225247\n10204994756481619007\n16882226717684491202\n16443344311964435942\n17377285940888651698\n9207056885708047524\n10470676407929654513\n15914273519893413220\n5521857770464685779\n12320625609565566296\n6606479147339594817\n13832110904471386281\n2628535958322936952\n12857716478265603902\n17543107119886977045\n11699916884094843837\n1955642624057478971\n14979239692466710652\n1517298419798250310\n3395124268628573714\n3257534462972248898\n9043546042496777231\n6889594347208677572\n4195655949879663122\n9097874486041506345\n13815155635020780874\n9404070187180994222\n2122197885785145497\n8214831544388552564\n5005835208297368580\n9199862350467116311\n12743266896775625147\n8978867021110162562\n4553670514763683140\n4839156821483365451\n9807201085565491982\n17179462853181559816\n2978575776728879752\n16473378930796384604\n5644137499384205230\n4586333965747321288\n13926397878952327256\n8291622727971720453\n17978349869923454277\n7750172546859908813\n11661456873031041259\n13638784265662907055\n2654662336318153625\n1804101675485052258\n7940101177627558659\n7620748694074838694\n277628002352607872\n16320104504872301649\n14797164258751282284\n4210449922358792797\n5915098909266812218\n8971463316959603975\n9590951681523654861\n16743160103200188419\n5730244331288784577\n16722032087721919020\n4791304164880444912\n12836939292822856347\n12788791805881853272\n12474888395822257522\n11445920516729413708\n13741702909764245828\n852684303915887687\n11643608906991658710\n13176584028382530775\n7141872010628359556\n3021877260795065824\n15570332903227677278\n5192652367207111203\n15032344642504493339\n7724163810817759304\n15399112058879006610\n8488828994353338291\n7117365419411251528\n13014780788566459630\n13796224114866544097\n13545211032508856246\n6919169290888527793\n17804605157226121269\n6737722112436848575\n10768970218298922755\n15970032088146308792\n9587213407092814769\n13659955540385927809\n8526720948009706770\n12076850203733776848\n3453776001711752753\n14470836559221475559\n5532508482842805304\n9194624639823663345\n13631061828454721853\n4255399506083803986\n4498757651799465709\n17113030484822690883\n7114120368535207686\n16289620874615326238\n15162371359709637319\n10561153641499424797\n14178317669330152338\n7957969245418471862\n4543381494375307018\n17808814823170099480\n6062583236200827251\n7633676009810743258\n14895662201111632043\n12208162942681811321\n5593695366477891188\n7230660918750078566\n9184648803263461704\n17638002699639979106\n9041341377874582773\n16405492462119019894\n5531539347078950013\n312387846484700601\n8846049892774005508\n3857475034417481701\n15331574922420912903\n16041911026278217346\n17137748493630504386\n11433047015663472788\n5095682716689385006\n16486799095039082525\n1476574489053771350\n16930359168852808809\n4274477716847058967\n17904877246139315136\n16911058947853703193\n4158566641517688620\n4981809828309522868\n8017263397783113045\n13562011252413579654\n3483747011437719395\n6776790654811711335\n16660383508731243233\n1010948181029915916\n424678892269867869\n13503124150487661384\n4391508797162728460\n11305945662022898874\n292097966495803465\n15345725434995900412\n16451584398401037691\n1126389132112917068\n18383630854760582799\n13286426583297405729\n4050334060980875869\n754041173107222884\n3878020880530744950\n7260046083757448721\n5042418534868185438\n11595087669307771791\n9632042806602912266\n14368231957005610912\n10730444554245431722\n16948330219183509481\n3309251642737397842\n1570363986982570315\n10426589218910747457\n14206499685988491056\n15508709154161903111\n9894808659314673215\n13152392770153234967\n11494211030306399720\n10081431217518753048\n2157244319030360442\n11564766907702385426\n1077659242831232163\n8950046202132225703\n12891232062361298949\n16702277359113358419\n6996654206467760985\n11065248528909859268\n11517224359673495319\n1659571244505098005\n684608817604547691\n14496861509853076601\n792475605585972421\n1236544842276088810\n8025446195770047446\n8773590407081495331\n15197186934349332171\n11983464496683801624\n5300945965908797239\n6740121843070026898\n7861320491091728359\n5800548105665827171\n4926015247913622563\n16448162068280907833\n18263250829669017836\n16249551865518587637\n14009693583573247704\n15519276584420910523\n13889380295782680862\n12534451424526152649\n11313675203740871179\n12030698790184649653\n59457088832460229\n10275893639937853274\n8023441095601271940\n3299700162760957922\n10737417971589660460\n16460140301321496162\n1800671857144332878\n1470130401073103094\n8188702016007028475\n6131510748576652475\n10376816630955602565\n4046368573992709830\n2913904492564002291\n15455439669377980321\n13366419655154151518\n7042743113063285602\n719786535099457142\n4365577752203594498\n2976238452082949403\n12710068903588525191\n9014049988766586497\n15638586707020213502\n16615901554591043617\n15018709018695495396\n4047930318561921837\n4353645559055281729\n7332431759578467882\n12907369029534379014\n3610000840753826543\n6573184040647626954\n5542124340464565685\n48957410564769028\n9794598996045580266\n7236285269602950415\n8597552716632901882\n3902639792974818886\n6813571923832436025\n13977700398161735777\n10683540940094219133\n8742020013877659941\n12170935133309034184\n6511074577804868113\n589399041100564511\n3050522070442745221\n1891929659070279234\n1437915755268530755\n112549307299890366\n13227816907312680055\n4255399506083803986\n3753798980697544541\n7269540128078716221\n8791135087270497909\n5599706262051671184\n778805089897817544\n5728032432300918145\n4337703199552336954\n16152423081206570879\n2605959523767019034\n6470947202872026205\n12807890093253221212\n7377439879156041975\n7011990499285628475\n2535331854622523066\n1861570217754133639\n12606979892540176963\n17787854812868477248\n10980795810985972841\n999694281642359548\n1123852686451063019\n6464514352147505310\n5076036065801942017\n11108604271732883327\n17247376297449526990\n9840207814889346985\n456758730325319250\n15735845448086380450\n16763544657859224366\n12972908527759680898\n14862581021587731888\n14621340669769748276\n778481422229078962\n911581710896579296\n5300388162591909345\n13894412207604539661\n15955196303791553351\n4989735446151055469\n12041922375619867163\n11366065067875177340\n2934338354724788515\n5062190907226633786\n1585740375137476671\n9273383611215959648\n13850596937522056508\n8681479284275966572\n3728482408625645057\n15260397471841274116\n15444142472578209816\n7490113694725386254\n2685505212397200457\n15923787141582045935\n2089953942494166233\n4649880856783137489\n1490389339197715273\n12983601251374943834\n8639366506093276749\n12301048493360262365\n18294321584719702043\n16385257837331041127\n1759897170707363873\n6552977300783547659\n645058298102214573\n1221379004191916043\n3902763513217036702\n11975808655962601615\n10513960618656733316\n11391885908047523765\n4420996909324711018\n9452365211132825389\n14425289427973041355\n8955378152644970054\n16910959392503338203\n8843794858863982663\n14295437827860550798\n13858825709932731779\n3956246364796326236\n2627930676495953937\n3038503310048131073\n9822430106444383919\n8972520272316106082\n3180497229130793356\n816297177277304268\n17266024661952859068\n9983794587885521064\n7414978604647541239\n12654975672887243321\n10812309604452042481\n9838017266908461425\n8823486493110143601\n10625116666215912006\n16741207462072209399\n9060237507415631696\n8354673248134829883\n15658957156498876380\n15682952486544923440\n5229571334038984654\n5121988962387618031\n667659619127853060\n4202786888034586683\n10220936406614071486\n11790568407825430560\n11495629679389284488\n10631023308179798172\n11437471320737271719\n17493743561977970753\n3065378661418762806\n16172010069175982337\n5519138907214851929\n281520586087823064\n9268262412985020327\n6193690939462948735\n13375114291985568560\n14050531077534344971\n17214168002765959272\n589440217112064854\n15290802916718900828\n9113529369850719420\n10430260503586736915\n10931880506002241616\n14871893514033862522\n2605464835748926854\n16913723711152431695\n2342172068312783302\n6349476291605604752\n6669649789844295071\n4365625970229860704\n16884434276278296451\n6099039060808011571\n1123852686451063019\n10204174796404595149\n3528778277023303689\n9986120386215028993\n17393927669786148930\n12417281657022684012\n2450087513924848413\n1622552155693969949\n7928042517556734920\n4606093462953809932\n2025036480346181736\n16470470271223906519\n8432281160725374598\n11608124290252891188\n4646488506069888414\n10213652582397149993\n5556916879659426068\n1920492306246998546\n5972089473780190260\n3882912681273177065\n8558105518260449288\n11268275953304602041\n519839864774129012\n12016448672105391411\n8423823455829724943\n1228332755606884694\n14455759643374367627\n3325071364556295184\n11543439471308534851\n5365749257447599185\n11437471320737271719\n3590011453018299353\n6202688440650623466\n16849444959830757529\n18443067790954392363\n6569230419499488390\n9795472354135648325\n7947024723706855557\n13231057159260839880\n13254000904102770980\n10283215425977341500\n7783851456214662614\n17358522971118812335\n14227003970446648763\n10925238510132712090\n10231203858713354515\n7928042517556734920\n11424319453394300699\n13262813820704579911\n1307132675799817448\n16133001830720161821\n1709426537052113212\n5755401475059411286\n3839103178425836484\n7719638840806268929\n9800871374365251384\n10907831572143971558\n7915489896893550642\n17397559877777340534\n9470881935527844647\n15982879171223804755\n9721056744604483328\n3775471423706465305\n11289787335146666073\n8213315293091822292\n14974725778912993749\n10774047365211412893\n3866213612773535109\n2294680138908947920\n5771334368405154666\n13899825249574577400\n14856167620669339410\n1750065723947341757\n14795597209536118568\n2547180481474461073\n7414978604647541239\n8906422282574636645\n9500020445162057414\n3297442975506555530\n520833151937192780\n7528757605760298150\n4239405413129793045\n14895577362620784937\n9865476702151052111\n1126389132112917068\n10459418760260376659\n6399167761810143009\n18425603494235092691\n5955105497783333255\n9302372111393202709\n6898482623178588851\n11221278622117458842\n17358313365052240735\n10445253756698472\n8532294574935931318\n17460081342691718934\n17507426477215526829\n15650773015890784586\n11458309691684632733\n38841874825718982\n8055324425058806299\n965366776590234352\n14021957506924461656\n8339239376455951730\n8864654607073192937\n12629733456043428833\n3925675780616390764\n9819166993050144622\n1466570142892776535\n13740060459903397918\n1120745254586356461\n6628880687953841185\n3956615961198627894\n12148978078911426874\n9446516174940646482\n10368993883094741795\n18071744085148483560\n17417694607380926611\n12645551977680731424\n722141004665369219\n9557507956659746700\n5011114552863517014\n13727544290512172160\n16152775583530296516\n16763147287551726220\n14575317824854100088\n16030541830345684166\n1340446170723960275\n16214695542262001803\n16020272116339116258\n9198590746726727074\n663299340113154010\n10189968084046018245\n18327021380133808278\n4103065713697417353\n8697220432188166124\n6556471207600475727\n4202786888034586683\n9660796119612569819\n9154985568680973734\n12386398003397661735\n364148883356239012\n7871910997919099780\n3115713874633833687\n10326219172001448435\n15633771496294694775\n8719311181499350704\n11655350942117242999\n11443013878760314743\n8146365165803162502\n6592842889342214136\n17045648032769244812\n3790644552158709323\n12962051892790824912\n2514037321826491017\n11498601343471586899\n210298025280192070\n3511108534181463632\n1920568839628417420\n707968055001599374\n16528685411403513949\n12396726560461891043\n15927242381175999533\n4827804292069643638\n578752530742131630\n17942963706226906974\n2345001124231627267\n18156849758194724958\n7212952191320142457\n15935576670110205463\n9181925433223300107\n6732329521391783550\n9911408942834613922\n3084575203050198083\n7093568642586510136\n7151786302216861095\n13120231437122899735\n11551077775707455770\n2396698581433186755\n17741943068216870673\n11207898627407656574\n4417013530628457156\n3810244103382184483\n14494934338432187648\n1302064845070672319\n12864667621645393904\n5961665972682879894\n3084575203050198083\n9231871808819725148\n11121160550377270658\n1975159500515981452\n6347948613932596146\n14011001978430842119\n10024029150976503794\n9585274734213971900\n8030110193502905653\n5795874064982821998\n15410083158220025958\n9043546042496777231\n4744408794771901587\n3664075509573411749\n12409835908278892901\n16589702633475067087\n16213298442287645336\n4998477086011689265\n13855208480493017745\n10363882923154662236\n14239157990226877553\n5398290388619447260\n1400419672026743389\n16655495380638596187\n14807339990197789418\n3802060110676108911\n16996777815047976848\n16685939342579672273\n11866615618041647236\n1817487164037868926\n17200379783766073156\n8670853471134823121\n9044972957365363276\n1395462793612869249\n12919457959537008830\n12170935133309034184\n13373963980570749003\n15982775338373030252\n3606256970209604106\n5061109940844778606\n17360664555396615616\n4341856860340234575\n17266024661952859068\n13930185922687274919\n17302344694427564718\n11638183032908730188\n5428369121097011569\n4162277175067751447\n14679298581959679857\n5888694039022262897\n1366641169432435725\n11469773995871443146\n17119764970377772659\n17579781790598040800\n9000229713547470589\n15284605999820833956\n12390729229778865134\n10353933654441033836\n563986740041635572\n4214258999405083532\n15762194486658191803\n6954497324421721433\n15974307718525827626\n8694703430729554199\n10954741197668243000\n11790248140749946384\n18123733525194227468\n17548629095969382144\n14780116598844675378\n12182550381933777423\n4838612009919366821\n823415564412786543\n12717712156741098111\n7674885583914498436\n3321113637448678530\n9948661595979879827\n8950562544413133306\n18073476293338335765\n3483148858510597739\n2920594386202824039\n2439671753956658922\n9850058243774937436\n14022220286287060497\n10427065537361864937\n8916557679176799471\n561887390485012142\n5700844870655777851\n9918024891803763225\n10759049523444411670\n18365556381748794754\n15155079960956177521\n12719089239576022837\n16816774630777509720\n12424600750629086378\n230969272525490209\n14990399760536082727\n11077146637125425279\n2988424833690603428\n11178082245625311375\n10415615689892967717\n7478286807622479717\n10742061274711129153\n18249489601511413376\n10539464057382056221\n17477450998008376077\n5575707476855514428\n13626165185132291319\n7119093525620710940\n1174407866668015805\n11735402854662873442\n492212060117053904\n17015021360577276386\n9100979589437120319\n9063619454503307683\n7539242659669432517\n13369751642652635602\n8407410899016493124\n7062304169419111723\n9052956889385879969\n6602651918097020932\n12295589613577500268\n17700472086574207078\n16035283549058341190\n10257415254063834806\n10535763134470275117\n8791071045709777395\n15213151340787309319\n17179462853181559816\n18150978664333495570\n17253988888947043029\n481429404789003452\n2809233327648276382\n2792465692209529398\n6875516676191829139\n15573572361549290863\n9519509122616718107\n1130628822381423034\n7280036244651819885\n11693905536455764155\n15496975951641265527\n11899528450577274392\n15960784677545574745\n12017949110242496090\n7680936879666111512\n3630334998361111565\n5340530002653815495\n14030210075470381690\n4695558820011210323\n16921190622061084551\n72578787106782662\n17446360339992911062\n12953838391815437217\n15076857764949547654\n10354762484854216674\n13140415027871275798\n6728617815346554379\n1687769384815721267\n15602783378665211018\n11342076202821805099\n11138731892917993915\n8752429295463825406\n5247281516536955742\n15246477472512587307\n14971564413293701502\n8188702016007028475\n12442406735180567903\n11733820121111864948\n8977522943482117465\n6171879751367973369\n17877343976617093443\n6882350861716238900\n8886030858879446134\n6832344248850620776\n13096474681332339817\n17243209106656946114\n5141606151392068813\n12524956808396141151\n17248898952362240797\n7315574421044494761\n13998270066656018139\n4022696209770861981\n7670595039858430707\n12107520990147052890\n8863444795319011152\n7349911860419284195\n4976105138747440615\n3959199428767199549\n2338986522575928426\n14156198624763805195\n16528535167816700178\n4975430107944343921\n3042215614335372603\n11525504284225445252\n14559475691367743160\n15308342646161764167\n17550024067652137260\n13331470196853977781\n7482591977385050153\n13555050284269480730\n4890864497900889313\n15776896697695669348\n599924135341447101\n11510203084053103635\n2939085181017355441\n7563406252612965189\n293634704908324457\n11258574898754999490\n3043777201253511407\n12225918088776982013\n17314611712612507827\n6574086393862529617\n7110462516856664949\n10470542824327691386\n9748828197623532412\n3564497361759348516\n17428919516951959130\n6871193780527183041\n3163226888087608063\n12823372931644506965\n17318574744107052639\n1008205359427064372\n7198353362434055033\n4113500306076431780\n8505203471806341670\n13763325729683965995\n17228795833416603044\n3940937224306470996\n7309116448481825859\n11957417998181866739\n5730244331288784577\n17969206723589310902\n9387567162011720719\n12086000010837700822\n12180134105482379255\n2523235780951910588\n3359757733413956633\n6820836000462863193\n11263555027838906406\n17396162778963428480\n9295011244138265198\n16638918733323812296\n9793580557551062425\n12683066142147166168\n4835527511667370520\n3217507432233878279\n10492018583677376368\n3677216090747676756\n9540815985977848349\n3537067906809916093\n5708073435259288420\n15417790537774057605\n7708015999108787783\n1993251265172381837\n2011422995462318593\n18019355406790638975\n16421299637793291551\n10221793442213742140\n11390273655631067182\n7809512832263517817\n11147922037337410274\n13273494027930288624\n14712775166285803473\n6482299896394625630\n1749119696752366592\n12601405667356331420\n14408598604393266294\n15877153087375226742\n1658677712638109445\n1094149792222986643\n16016669480317137194\n14858533626309199126\n3080562649309717035\n4528663706434723985\n5840159527805093044\n16434688243654932415\n3095682005579675794\n7152308972898953030\n12814438266383364412\n912444500454052640\n16375291017096135549\n14365030650538285993\n8250880919248314941\n4998973318438534794\n1705926246253318354\n2624521813750220030\n4122578628792329259\n13976047789860110245\n3889302001110941125\n15885665697433185397\n11828255638218311191\n9160382268526763997\n14750364650168037337\n6566058289137590473\n1361952000944955902\n16217016454080401173\n3604574554726679637\n17656854276197636210\n2052951885748105498\n12795076990329982431\n4259427416220224795\n18053352930551713298\n7427559966900600808\n14276510743474683052\n14685643417248532325\n107915393494433983\n5107895830478281986\n2981460650559446939\n4459876873388523898\n17805425953352328356\n13880215855819101382\n10214161221653817914\n16293771381549635737\n5929732804687836023\n101371001981089658\n8235284642450564793\n14115188671574361396\n11479730326014413149\n12269616606805501542\n7005089938403835\n13106727635138899583\n6653550767036171248\n12367245952246978962\n4423734111580468459\n3084281644617320508\n7644566783069015632\n3399804547061382061\n15816613701971669827\n1685455958204922961\n12520096053415708705\n473689837291821912\n13546585723358488330\n8152278207550207137\n5326830329312190973\n4913697084476582898\n14262418138109560951\n15290966590348762705\n12839383390186936300\n7542437877916769153\n9810492673269563482\n7758842930936080220\n4812571108324290908\n5029520981616634815\n15840288758340853541\n2092167525858979776\n18327021380133808278\n17632125695290280680\n12211750390317846139\n6843968473617995\n10188822277283446706\n14720444444495653362\n9238345581608110158\n17042537243640066571\n7422747308397745685\n561339543551773937\n17815490169946000859\n7725376327635216993\n12299115522411630855\n5929732804687836023\n5114625486228116199\n14150706134515452908\n11255919402395988332\n2935378256375593766\n17191737580195679954\n10920064304920925661\n3731055254099289474\n12319346710319849009\n12506487608784466594\n18322710104415563982\n6248532738633440646\n4360474079712230873\n8970438545861074999\n15245302593847570973\n2613084265826226277\n290860095631812876\n2012332944879013684\n11284594856235644401\n4351384563800590795\n12060418855541795500\n7287651022231059029\n15493612563428500636\n17321326645720608511\n15878435959982935288\n11603207067476522857\n11624896867823998948\n14721759329058006311\n16159669703962678394\n2907069029604674288\n6722485160882783380\n14421553600388580976\n4266271407317422008\n1838772287344865102\n1061769337375467229\n3110778535939275380\n7022073982804972033\n14646421110532183431\n5789376894991844608\n8465454918509538139\n1068187524961752193\n18157532234602896246\n12251956320560431379\n15923660062204629863\n11583532874533499835\n15511210516557241203\n16903611537127535966\n3064366918473189383\n2822891649644144007\n7276405684028961641\n4887116503517718740\n13884379403491974952\n17076487457362938957\n13679547485050900753\n15930788057323553468\n15602664842872115185\n633308877076369447\n13065732540110549474\n2846361377570642182\n681971196677626449\n8012576328612141316\n12311271862838835786\n2100030313490210609\n3812417007566063356\n9771739541777144799\n8929192631802592783\n1583882117698122642\n11426666846603375200\n11914638195268756198\n12065639644359096517\n9289926538835158248\n4561683589822663481\n379375080057843439\n16080493850661598802\n2331456598217589131\n6798279480903092396\n662703854024049960\n13482461498672081961\n6178133446194667859\n17760084789641521126\n16439143035826505874\n13049781677935483578\n5378517889627026440\n18172933393803773422\n9020487865114742578\n930850900585171713\n14687908480156632537\n13241309948857238172\n9370921634953667535\n3308104058347198759\n14764648814608956069\n13774232152489324670\n2554416983359722193\n1326689261255409830\n8453531828327618255\n16618511115949449329\n15745887332503217240\n18372424846695308145\n13467315128445840421\n3364839479047976068\n190504467300062359\n5792619485770166561\n244909990955214160\n3031729755434687197\n16497173753445591629\n17035173143605713370\n9531274020820826781\n5849028693978478215\n16181105402962622441\n12134156944020148703\n1621986658238822084\n13140867875770646407\n12245109568288598282\n9921327798797578367\n5216627896688102211\n1456496186530612569\n12153370341302206901\n5503865873759224893\n12927885775496976036\n17710749294542812801\n4960566712638913773\n16357637368415219014\n2658779111716362622\n11853711756501387523\n2670840200565573839\n7549239590252294658\n15854715559409739344\n7683593684903450212\n5444469974529026808\n17887584561723862556\n11960101731905309921\n478074557366143133\n15652150145056454154\n12891999564056186274\n4941318372998254406\n9266782194140648952\n15946178246992242506\n5578269654806667788\n15020636581385363420\n9265940574281317560\n9617201679941881553\n7635727188475583399\n2214723172814724399\n7992569959469189424\n2332837321589993090\n6009478794588531508\n5928242029205298135\n1291879938505408519\n14510877454180605462\n3257534462972248898\n4935968071840522138\n10834888515190079310\n14565764790217723962\n17333182863595378752\n1048861480725927086\n7382198090326843437\n18269663839489594904\n4855474356735943163\n8319712931809382606\n11332125668967122789\n14928968839586834300\n10621667220199672096\n5650130865616094226\n684131177886271852\n4769616916701037928\n6949323475830076741\n6887759873838586743\n12606609368945118373\n16106616251153267372\n5278735539248806230\n5318707510335384671\n9711282286987660511\n4945702025796790058\n10185672056197538661\n161594449176109758\n7749409507418051037\n10523395959317933684\n1172979146861910227\n2685505212397200457\n11723071209671775930\n7802232855195446498\n1835866573367246471\n13906626779026578436\n11115098603064446492\n2111285770747781409\n16263120649680269924\n3184327694943544619\n1862697026494271055\n3085607207291717919\n14686889156981620845\n9660507236680314567\n2644188207246118812\n17261869088524945807\n11491768274396748289\n18298408266193597084\n15989086720722518149\n8911523991552305381\n11432120404584216242\n13183602722192661697\n14936301577017080597\n2346433177858122979\n17094268739305384798\n3869593960543493991\n753753198248346397\n3601071704098406145\n11614025704504033512\n14510877454180605462\n17975675967093191561\n8134169145128605432\n8085144326499210503\n14279024344427790315\n15419963040361826339\n2689981581037678554\n11795287063647148077\n6882088592578754558\n6427156811143104054\n16314763041941254268\n5643744786126648906\n1284329352972489426\n1299863275304855645\n9015849370085649417\n7537659418559252934\n14232968509670334\n12212791721401898948\n1221379004191916043\n12221533944344764618\n16030541830345684166\n1875385436725233013\n12750001182590928658\n6945090986495750097\n3515739297278057908\n8973757122895703540\n8068580678361853570\n12244204631272143543\n9551631899558252378\n14196805007953532473\n14969611448191205722\n14122443612526805272\n5456491853112898189\n16816021462572050283\n2506595502797268076\n6687982354071097927\n18277479294890738848\n16558208046815685888\n17399959879550575465\n6844818230187214246\n12309121985500777510\n17957179517519805720\n8122098561598269901\n11481626123267876320\n9210853897680594890\n11947460167354802895\n6822365653093023224\n5471159954018142509\n8273966730262347393\n15483382360971328459\n6151815287161386786\n2634010063631075739\n17086565445217308369\n2042318482884865315\n2342143134051515982\n1933144867089449798\n12670511146499990540\n17246345627708439381\n14623600296857326262\n6284633127832655181\n14152805261830489758\n7987943842600170137\n16523418150709930748\n11893093672646038667\n15858012511252427997\n10079070413844692488\n14987783061881630046\n12248915540576480532\n16912166919422836877\n12558303678812211371\n11844401942640486770\n2870961443632410315\n18089343284380772009\n13977511021243066196\n13507433103965154477\n362764726524705292\n1722196695011472721\n2329672420692833128\n8823130947541158043\n9410456995303352656\n11264870872109038279\n16451260958017400398\n9628847071669774468\n5714195420842868474\n17342209983812292723\n1792400941091005516\n4887156406330540696\n3935026727022532070\n17579781790598040800\n15398599001871438830\n1512962638870007633\n13911213737309984885\n12496778146578689336\n11804871038007586944\n4266271407317422008\n604240182522058864\n13542040154512136518\n1529018025169321127\n6407502318670531206\n3797669403639807243\n7908334173433989326\n5970454510639958460\n3718060012356837655\n701280827470541342\n15057246885723121222\n9702535204140748434\n5996305510318315886\n16263924498209187039\n68582657721753774\n9140386042170313651\n6155390385846311744\n9432871312493668326\n13021630530054326169\n3250243241771088912\n17282466740789266479\n3412396136468935027\n2907069029604674288\n2755296976931198904\n5274923127600966676\n15380509353227890732\n1227045305207811917\n13757391838987177137\n10546935928903415204\n410505197199568472\n9333738276189937276\n15262932513447035028\n10294022143928128131\n9928941501609801018\n14278957220095286592\n13113130542976541483\n15601053163806139419\n6265324015100021505\n17655316335618222109\n11125058379341890857\n50847090111711150\n10211915901430063596\n8452384648954476885\n7541387647795331383\n8973757122895703540\n13075728693304713075\n12330689032669502118\n4410456143263457517\n8997629757496069770\n9793656148793618165\n1554672912833326247\n1257365004112976901\n11098989287072576675\n14972221995091971342\n14491074615313793891\n7462343897420112844\n675528355939287618\n4958424666924741139\n6293566689119108329\n17487508388487804261\n6473797416049992559\n12907369029534379014\n4431252684989912800\n7940704857340525193\n1555954914622828982\n13529372750198177734\n4496766027844338100\n12743266896775625147\n11488523445760188025\n3567573318103235019\n3630538244113749234\n4482539763436408785\n17940837500615000120\n9194223226339722874\n9133254336774500716\n14748792747115485979\n17126332448136238551\n2052951885748105498\n6963077285580506956\n13541015553453095681\n11759756906223116529\n4414939260477027842\n18190516580830101182\n16612191990239668158\n2951659237279157528\n3195804119918724934\n12385490355893670348\n15591578133294604069\n4916073249411573179\n1975159500515981452\n12098865378270934408\n9550957669456469223\n2184269629303402321\n8538523223643275090\n13744787786717435921\n11445053339564295504\n25584528747473507\n8146365165803162502\n17432719535168582908\n14372136109887310680\n2149298298310161239\n8797122824279663657\n7139645097696410580\n6541265831056447677\n4308860760605619433\n15132979043485747524\n3399804547061382061\n5416281085780045334\n7888565645628155955\n16683979355255256473\n10723894657162390798\n520833151937192780\n2435325114219267982\n8073427968773493843\n3253073878167984340\n15330736436888183789\n6687966178720683288\n6100642145836546564\n7604942233184161623\n17041977732952275085\n216711469692765805\n12082994476385683845\n1112616848330264745\n6468256130268165278\n10164814405030053093\n8832717247830513891\n3556557836672737129\n7400534942451691680\n8682830693787280631\n15162331979619551672\n4761318268483871444\n8317739469505866472\n8702830561245705634\n1301510448596804986\n12067200838127785593\n2682643828806043733\n5578027715320603481\n7908334173433989326\n8012576328612141316\n16297689437206369578\n18315243083685633592\n10232915372428621399\n852684303915887687\n17365608049737301920\n1518543659868642359\n362889138028887039\n18115055582538802450\n12076229949683103861\n11327318148379910359\n6416600351504857486\n3668952564648926019\n12616146336966695757\n5439652219497854\n357676407186903586\n10897714746892516378\n13507213265869006134\n960371650112191823\n10032493372364905644\n982630252291024474\n6068515191547035581\n1112214841729776845\n15512379872677571436\n10738276376079963359\n405676023262706001\n18010461662288086168\n8161336252187423171\n3043777201253511407\n11768457506681775677\n17567028433546034572\n6034702523770493031\n1004013880874257562\n11957417998181866739\n11603507316346394344\n1025820224499903574\n574595321930660084\n15982775338373030252\n13894412207604539661\n2855477503302033305\n18251602025366437420\n3810150173921405971\n900225886988543817\n13075728693304713075\n13465839043775121357\n17321521357158800743\n16287092961525692281\n8641678249380574798\n10281860533359734509\n15572123751417592725\n963494544159491313\n5503865873759224893\n18125468482363745485\n14706839034280787187\n8513986605712263834\n3011265658066712524\n12908625271057834727\n5852785836817858189\n14820018308717929725\n6256403925289872207\n13352163859730663645\n3080509858485658958\n14571367656542253972\n6302576066699056282\n15306833766839089685\n10654217996731556484\n15386928269624105960\n16963643695619796524\n2560022832319866103\n7329069364698401978\n6266390873894137039\n7019831911787560233\n7178637927273167859\n4418319017415467162\n10425320126517777253\n3080562649309717035\n5803709518481345843\n12057192344377982709\n5620463658452653928\n17804605157226121269\n12777029727273631668\n11583532874533499835\n13490104468656191393\n11761984771857325964\n11680469379006201842\n5018609360451455170\n3144182696961991623\n9124015703999861420\n5231949181749224161\n9064963144072344889\n11364297878127639328\n2684840831679227353\n9810496267187041544\n12357519959713530917\n17345860788376397883\n17720130798375920583\n3678997371724536888\n17210933966371372250\n13517565890459376866\n11462481001012722251\n6293303410753957352\n15282875379958070637\n11595637194258663013\n16055004992820937679\n17861060818425274818\n5067174348115762174\n9918367988800860598\n837799123159854226\n13660510308566537717\n11443013878760314743\n3869593960543493991\n16767324380549730225\n13312443236074804328\n13296394729847840885\n827692832812652447\n10311168975525855472\n12433853123335157554\n18139004011178465928\n10753941599491519303\n2586647910586189147\n7910174782499619039\n4878057342291441102\n12330415748205679277\n6734893117681607709\n17520387408062909499\n3887586767691333492\n3111763621867313165\n2966728589172272174\n11425355692736676184\n9405879101151727746\n4194526115276199275\n2856692613996627531\n17101070136325620971\n5286652257489828472\n15109575164197650444\n7491531105310088108\n8100358625873130753\n10522111283703224976\n7898801108044109002\n967959715877468032\n129675662793004026\n8694114529012793563\n16227924763373308405\n905607198203885544\n4790765249385995625\n18242706477257598152\n9718579568399245594\n7320363221004950796\n14775626594780165409\n3747940374059127686\n15736741123922638130\n8329958193551658927\n7918626358176595133\n588834445818771176\n8322945563710811666\n17726258712356970907\n3123382004457761770\n14680783091899975525\n10512671381738170918\n7054011196337010257\n17761119930647637260\n10552465938097858298\n17471604246748388147\n11383869676559437662\n1028886544483479779\n12945631796188912447\n12116050376924192929\n209951806397010062\n14764648814608956069\n1466268064061359331\n7218775718917503198\n9986796990315719206\n10794646106825715479\n4425640075924648236\n5789376894991844608\n12043839799953035355\n13558589881292483338\n10945674076833452037\n17491563904055019698\n10230684179534865413\n7087710455559817569\n15433548948523275051\n3681564573002964658\n17580638574022347982\n4463897490177086536\n2397258743469995111\n17801401792849912085\n8895374656773093040\n9550957669456469223\n17137436529885653502\n13090344551298043833\n12747427433346771017\n11748401990691694844\n699961678358067228\n10759908214812281898\n8194118925389656958\n12311271862838835786\n18001896163843909445\n16762523931519581508\n4524039554041427322\n10634220782696988124\n10098020035306558809\n850699889917048985\n13443399319801525062\n4519545771092414383\n4612647498453887899\n3231038553028361766\n16655495380638596187\n14151359826580975968\n13113912694560926998\n17462981434997105618\n2658779111716362622\n12584579210815432066\n14571548280605181228\n12848082163135424243\n8160428471919827376\n6749856250227664837\n13680689275130698769\n12333377205641195324\n14933783258093785057\n12017949110242496090\n11510203084053103635\n5365749257447599185\n4425640075924648236\n17628962317949639454\n16288447522004951499\n936941500828189722\n5501561727432320061\n7934953911194791636\n14861061992441764422\n14482935195607601544\n4594660694380412121\n182291667461137302\n15512379872677571436\n5927334706061716749\n18292731458317800915\n3678997371724536888\n18113841787116110360\n16278092541016474994\n14374049847971557198\n15286088704482712223\n13316685633793248529\n8418019099071261306\n7205150888016548579\n11959214249467107044\n10517076172479740152\n8741526973612482999\n6552977300783547659\n5111667957469811778\n7200270916733394651\n934176171864525950\n14131801398332120575\n7203560265286761543\n16148980350279340483\n9153627867540529776\n15162371359709637319\n18296979269524857278\n11768457506681775677\n18042731715024616609\n2276347840452991843\n12516834582864958882\n11563589108186101137\n9245450484217142212\n15156660508217103583\n16129936103312679645\n13465312328179724067\n3300360661952586543\n15093855007558318511\n2012332944879013684\n1689714516411321265\n724585814857531374\n8869178784025879502\n430649717360290018\n132141616854413325\n12549017460719262796\n8319712931809382606\n2756811835614387575\n14812823726948090720\n13536206324435692459\n12736091552799600377\n15147926383100312682\n2345238395920707006\n1439279650223746034\n13727298538026899341\n5930514728732864726\n4646862896883247533\n2428763910892696563\n15192875013526850836\n2347213791630968302\n4415018973796907621\n6619546888734840454\n1156338659506946124\n1456094068145579675\n16967532646973307514\n16524632845628416269\n15306690074138495155\n3593368970808272907\n10114218426500935847\n3673881661095829638\n11619815277834403781\n1375680068259241504\n11488859702004058532\n15696465904703587170\n3587613376752046513\n12453554643209660881\n8153427910126504076\n3020057142875730131\n10038951346174553990\n17243209106656946114\n13538632010646941169\n11470434111228307729\n1095562624035176045\n17497466358881134428\n3143147343017194893\n17087537540872333168\n7176849324688162718\n7134676155066643840\n15126494745977600676\n15966512694157726381\n12539619988041855698\n12238141001901388728\n4394134438080674494\n1479663636476216909\n7011990499285628475\n3332701711768844353\n13140415027871275798\n16178419441742170487\n6178133446194667859\n15813069675443733038\n18287885387678701560\n12360919583231447397\n9856513980859108830\n12650394825625539234\n8836000662455541662\n3312718187984308175\n13455261248571555664\n5957001334148737043\n14960569100269143005\n6715998042131505833\n5902111166349050941\n4253153734389212510\n7747193772962134372\n1481069421952837257\n316527670296115344\n1558460472219557423\n1936707732265792360\n14249860679975194929\n12441424423476860546\n9911040625898208348\n5576905949445743337\n11701033290222296734\n12826147207179964033\n14913763178559927359\n15525700062177750039\n6843198997831922695\n3760148830219105626\n3951813454343586833\n10255145455219260919\n16612093006915433962\n6074040745765175625\n9108559612908847427\n13245102981039078120\n17581685196742599713\n4140751965201231107\n16080493850661598802\n5954175233931186599\n8698191222780777521\n10884012853969018549\n4333165536194748067\n15621813194700388266\n10160861976603944151\n10542504828962477794\n7564487459460135113\n1754969299475426039\n14371712387255856506\n11425753227620135474\n9756026954375739818\n15698805319169632409\n3894160308267714274\n17926356826444153248\n1310857436959404664\n13872405893761917957\n17411799014195816854\n6780200247054486695\n11250369598985965557\n5372836401683401306\n8344889768248666509\n13495937803186745705\n3403219981788303091\n10738276376079963359\n15434918250387118220\n11362883001244678502\n13245102981039078120\n1709700687493508558\n3878668837731987644\n914307451138080621\n16840862398747942688\n6075715243954363377\n10295025187727712697\n1671819359900052166\n16154649169084705960\n12297143350901971036\n16467117841357452256\n9274321202546855469\n9410523710342076091\n17632125695290280680\n7341977402848124340\n589440217112064854\n4196776173550635904\n11158993770616641630\n1168299090873496870\n12360879013630923437\n2532106199639954165\n11763683719243488767\n7548086452030103285\n5383494608476881540\n15444142472578209816\n12927630024923078896\n7079581664048748386\n5374579790771669728\n6839143692418368153\n13406673913849207947\n6389061566542534016\n17118197310551652429\n7356312804191062751\n9911408942834613922\n16322374134403596079\n3455906178039114106\n15192195269206442954\n1890758963880619584\n5488682244950930151\n17425233090456592715\n5834952720355032933\n1751052177062758177\n5849028693978478215\n8561712944863520328\n17540441034209800924\n17615314710006483943\n16249285663294902991\n13435598015602483796\n13824339635609032009\n16875194251522354294\n17519572206809077313\n5006372962297445970\n11744021113899135316\n8562655249905490187\n1677914397327082790\n4689879982933487699\n3050354561028993695\n17399554387342678135\n14576092569036284324\n8093264909799424427\n13978143562634439342\n3302897064741149164\n1192186855479095212\n13982941604820231412\n9039805072384859195\n5367020124945566039\n7488003946919691242\n9841113082419688829\n9537646772788526176\n9562458680874920363\n14104065419524088930\n18311404156527163403\n14020537515173481426\n1977756850518431247\n7184939210017750427\n13927696128971573103\n4253153734389212510\n11268275953304602041\n9791194776719981240\n9857351843377542192\n16860290073028352632\n17466996832423640223\n6933902164191689214\n13771052281209476662\n326037676166414776\n6818513616184007308\n4746899760222132459\n11721044486429273487\n3238598966708789106\n3320709611077468380\n6898568018942336798\n13506546140222585691\n6872757667809850715\n10331798395749744002\n8017263397783113045\n13928176509957622163\n16781694077716947113\n15902801120068360998\n889917269831338556\n10193657244099379913\n6740730492331186143\n18233817344066659982\n14371712387255856506\n8709037053932991760\n1553862782870374759\n7982017036796982993\n141751017934205544\n10177902173048252823\n18069287454214888926\n6782225208728194602\n5473389415191369351\n4177019316526440682\n1726055569302450435\n5194812685508444444\n7750165211119355999\n9694119672089113847\n6667405730298123892\n9194624639823663345\n435058773012863977\n14121658070047240057\n14957430250160798534\n2988424833690603428\n9124310054176883147\n13786555111271880873\n14497323784737730018\n11213726787725504328\n14636223610179899677\n6510715093252845698\n11754959781255744057\n9442986028804141889\n965366776590234352\n12216967752349282137\n2918905242934895402\n10011316204743505067\n16629382070744642711\n489960977509090574\n735737360145556187\n13079383269058526529\n4945702025796790058\n9580421902116605568\n8931965087904742213\n994198448043828925\n5447603431030601494\n6686677032490914821\n16587225500711767926\n15074002312665548827\n1660545585310491608\n12242665744720741360\n7265539956140968405\n17987070265294200127\n4195655949879663122\n151132968411967266\n14061635324961627983\n8327137636459911903\n16559665168083813462\n8639366506093276749\n12087215704611941175\n15775632603247341599\n16386281474456620736\n13330443127881100200\n17065689795166957994\n5485692130731908013\n13606392686671020892\n17069063342805394818\n14232854513866122519\n14959063919785749017\n13587490523244867477\n5231173893778276010\n13234764918538536821\n3144182696961991623\n13490267784072789370\n5375096938498004995\n9515077706235247015\n6341441143285212220\n1933847284282878352\n14517279337017128339\n15977358788769139233\n5215477618204388987\n5940708610774712416\n4661414587641807256\n15374726940557327531\n14230453856774829055\n13529039522323783844\n16367981256216804893\n10955950449742460782\n1958165850903953873\n831534146685770284\n5760865757924943567\n1787442879607483489\n9738656325197907844\n12082351045398733873\n15630348149709667466\n629128257159684397\n16017117598912341665\n17723096772492120557\n7800803518648925064\n13917241182735067087\n16704432177570915735\n2442393298029079919\n3875942704686922970\n11106701110038266852\n7545798156428856657\n13348909916748672406\n15198262113139010004\n17149392383733539199\n14815623302813519254\n1640583716975349987\n10963694387488825063\n1661835836201009937\n8386910435688587593\n3798734735815351260\n11542680578860842604\n3664075509573411749\n4548266216690343144\n18139004011178465928\n8401130019067915153\n12685108407042260069\n16109293385262382617\n10492092636248650820\n8033132926206474651\n10713968265383559605\n12114979319972035785\n16474061459705197906\n15385178489170177685\n13173743342815969187\n17417694607380926611\n17432540125367642195\n1353721506729833793\n3311366990516554132\n15500945055121892125\n968737079553549937\n8773590407081495331\n18372424846695308145\n4486348632234964235\n509465043787919851\n14531653256972869235\n12660687639316428067\n9948661595979879827\n10969102453928007890\n5477723978802195107\n15705175658185413440\n10546791217709786268\n9255053011877581507\n1250264076970036985\n1594168786418846557\n7473709951812085859\n7822395074870936870\n11917210916583275939\n13084675310772318721\n6964318541196995988\n11366013053578001894\n4065122500098570917\n11806394278551038560\n7913568535959610592\n16088037953091285703\n12429309935960936386\n4709906054320992502\n6826707686342533194\n304871443784269314\n8713215223437872681\n6236045060685266132\n13124734473634782844\n13113980386498641261\n4171870717904330950\n133589295054382711\n139605914208246726\n3598236196394796641\n6366472952805843877\n12229349860419130584\n14388808890198899293\n7051443620577750797\n1062400361444270364\n5348147054138041560\n16674015859527610511\n10361135215452544647\n2675751360436337775\n3736550362950486587\n14227730257738921780\n15471528436026947995\n5098663120346892536\n13102377464885084382\n6968524056213815509\n14074004604280392272\n1751048894738473805\n9287090342421311742\n2030978528736843370\n3724557105147256888\n12948024071888227496\n13335402323518898031\n2107852480285906212\n7309116448481825859\n17603920983641763416\n16523372160861938557\n10310627280759400698\n6141475811346314056\n16718352774394670922\n27018711902375767\n1421173689471691218\n378397805079155261\n662005419121184425\n579329052165779341\n14151359826580975968\n2714065190686934944\n9274321202546855469\n13142204144050679600\n12485211616020548433\n10058717087588405268\n16950531893332455163\n1594709358601218414\n10315766662371759216\n7294859493998264701\n10775363126933173296\n6496289138849560686\n553470255793403280\n16690111741248525150\n8025442911750220523\n17961466309578681661\n2024316581175058073\n10081431217518753048\n16166031758315314640\n1489757504042743984\n9295011244138265198\n7920715656040526521\n8749677887604026725\n16953317106736938076\n206961508680337140\n16482387983364866298\n3982473645421342999\n11532717204269743368\n5185714514595148369\n53278051424465571\n7106623707991346578\n135645258891883142\n269136025524570948\n10073655607892931742\n2739978851303276513\n5078248791394646404\n12258343822696221827\n5572345961318331820\n5895656330623392805\n16686626979048337759\n9044972957365363276\n6818375649557178115\n3312359631309001762\n13490267784072789370\n13316930829341431070\n16683979355255256473\n11954981579775243096\n1616651422401810926\n5940174391379109968\n16236157907184317261\n14104847900380802808\n3231038553028361766\n1968868818986734533\n13723716962056357889\n7440474343478960828\n11023030357859170235\n17082315248577877489\n5171719913407462175\n3183188281337034432\n18413938404097957486\n9050180315638116980\n3706326394328219504\n12856408644123348653\n13621488296755156578\n824675788589045637\n1472145496001941300\n3837275596152247410\n1755982200035214629\n204626376581553182\n8791071045709777395\n4471272759934158946\n16418905201760946057\n255687138113329386\n16076771292281126389\n9073549535993606086\n10594318713651853805\n13041186610649749112\n4095039089832654706\n17738495843113833006\n11430557270312676454\n7014691371093458060\n1620058860624972155\n7426792532321323769\n13780244628259586365\n11750587890679756992\n16875518386411901929\n14074964262978341357\n2099866988409666412\n8804858218525680087\n8741015807180261550\n5372836401683401306\n5417262184293837233\n7970792540509397919\n3455335075453331293\n12441424423476860546\n13965218886844968738\n9002067786444628333\n750980907338927454\n7177226910512081819\n8826744813743085499\n14737999452271919518\n3677673356845726690\n8714762949274249614\n6572548114121337433\n8452634509638206887\n4846653553564452673\n17864482754113637837\n15218911760751447378\n3952983114381937054\n14893271769412210987\n1439148870364617226\n1569740655865442653\n3803132713194927096\n3292790731992058703\n2734571184147912363\n4420996909324711018\n16330514968055258903\n6963593911325124166\n14010749700121057331\n12144159904406125979\n8427994464031207684\n1110662648109836245\n14309124621539849955\n10869195906971751554\n15145829152406404150\n7672396924936143519\n16798073921529716325\n9626584088415905802\n9538146215523166447\n9491965227329565183\n11350432358444908162\n4020696554630210870\n4371835669696892914\n4996310566014731451\n18379568495883253811\n9232893463425087760\n11591341791334889418\n17118197310551652429\n6270594933163270115\n8142189285311104340\n16308560713405613498\n14565764790217723962\n11208620080514127885\n754172930320912447\n4696742252775855451\n11035483471288482504\n12164261643217295774\n1880506533800291137\n10207469623399387017\n14225721366777455650\n2425165515905647374\n3368006437037384918\n17477234826538609856\n8440359929830018617\n5999282304600912042\n13919074969611486900\n6144241244539714393\n519262811583692287\n8690025448682997981\n14034574577135260281\n11904728396999931028\n12980578136405862167\n17993499322133765917\n1507501566260611532\n13977511021243066196\n14051773455658932849\n11494979973461515584\n3648029121256642569\n9294600811864225722\n18137071942986711025\n15013379994199472234\n16111401518294189961\n14322261428355283222\n17002912470509453557\n3999330844246270338\n13465839043775121357\n15072719966318811882\n12394053478942489110\n15444140720204734182\n14817490443853319001\n16357637368415219014\n13241126729749919541\n877436164559735966\n8125990534460897656\n8279873149937091723\n16963643695619796524\n15282987536581000092\n6822402996526390097\n11804871038007586944\n7439983275494215076\n13507433103965154477\n18071791382193939116\n2673034593016150919\n3636724249504074665\n17426682926789728624\n290543546890715981\n8126488025987273434\n13198958686478642334\n10367441074290314011\n7447718664324440369\n1591874360243236134\n4183876326628182685\n17223645637503307887\n1200827519022313598\n15208260185248549322\n7870898529294422048\n16488114921244664375\n6875734948204117953\n15866535954495451925\n2520362297394238683\n3349168198883018221\n8689979354698919310\n1604243514122524193\n16390991540830829955\n17267439626263567316\n16097716843444347900\n13225658323535377096\n17329674808117743915\n13679547485050900753\n17936547182204701158\n4528663706434723985\n3918650115493528426\n18107653834195538030\n10937737316830538404\n13061113701423809396\n3128357671405145745\n15775489029121750190\n17569848259848483329\n12366264093308652450\n3472175347036398695\n10545464768117572715\n14717087844963085912\n7269540128078716221\n7364946773922967796\n15181680997672711762\n10972673465776991262\n10678815302535309834\n9358290520120214444\n7495324433735660046\n3522497903137405073\n7386291115137004152\n1459893991018366884\n11759756906223116529\n2119263508785614828\n8559990833503494860\n675528355939287618\n15982091144580516618\n8635962330915622099\n15639813633802006016\n13606392686671020892\n14683396937249943974\n9381540571422092738\n16892671194373330073\n9627060676452996074\n10521491349218267676\n1880506533800291137\n8488408171031646020\n3995033384369273966\n5965770171517787918\n11433643502875330404\n13322612073143740717\n7157357273280750083\n14986767618030379771\n7635727188475583399\n9202810773615709644\n1891929659070279234\n10017197835314618316\n11793194690583310876\n10202650704521885035\n11735402854662873442\n8031859311004406524\n11494211030306399720\n9796607136472112331\n14234178327260482810\n16816021462572050283\n14503310237866007856\n6064236621006980744\n2517629320551317226\n10275552320954442819\n4836485415310730078\n8562655249905490187\n13810302091905574533\n5377268830717905384\n404996509812323941\n2135011976875939616\n4024657899219223160\n4171089623731442848\n2406410016918466759\n13777520757563859046\n1483891131048403832\n7205150888016548579\n6372294050565546714\n2054228516124675696\n11507697410790436193\n3809317249901373579\n11758316798560566360\n11577221945963682075\n14018287052446392779\n1639573834097138810\n2585597754941305238\n6565263345107063130\n377590240414011831\n6165092910963791560\n8559990833503494860\n6038029253280980884\n14655406003416198376\n3713874780254383112\n4639576564983321485\n5459263611974799140\n12969542554392835933\n8150480413986898132\n1485144739520265454\n3494890953907017221\n763527714032668595\n3580171592123040208\n3959553131359034177\n6577590675667840274\n15359033654149226066\n17065430647017321009\n17760084789641521126\n1887090196042847581\n8562866438591658673\n596974279392080723\n17610478790890130243\n14984307382067943985\n18130077150525467718\n9470881935527844647\n11893093672646038667\n16579247530080928803\n17366678658099620161\n11559231540157322732\n6547334925566381101\n15586603876577588094\n12147239615305339317\n3989999202822012812\n10902485921289466830\n9068328692502145881\n1303247252890532126\n3470482585074595190\n6544608764129504923\n880256036835740297\n10923054345434247766\n7763469924867193637\n17848502329351788037\n14996549752372991756\n10580762853761997464\n13550017217260751592\n16901480360410040483\n16327155801118556658\n8274282784662710993\n12061878493264896032\n218029367336894531\n18425603494235092691\n14463342628006970203\n8492468651615996755\n15698805319169632409\n940326307808704675\n11862388561171037316\n292097966495803465\n213283965027128122\n17421029076341168479\n1028886544483479779\n1839172145636136210\n16930309904130160978\n16970642015135608608\n7442687413604863473\n7327234531349143187\n3286628619536284889\n7393596330348722196\n5225918609833988425\n3264911859863952807\n15527297782434769599\n16745572189097779838\n12942500339144442125\n14137119139198239023\n2349786045751366035\n758303140366886461\n12218690626768147229\n12846093022480104483\n1919937008721528056\n7672396924936143519\n16261111194186098037\n1538908262301420955\n15923660062204629863\n671914114426995668\n12355748698286447233\n9986760084259863773\n12784361423133621489\n4812128406152971276\n4834578571808605550\n17703685559758032725\n9311679020175697063\n15156961672598305498\n16730975452539727791\n13990852906507220292\n12701094082914416563\n18352994962917321348\n6869924212262527435\n13161224669381577192\n14080211585058982600\n12569610338948898418\n12334177401242287749\n13094898595134770946\n8353310566985352024\n8365507445896232933\n614659723942486928\n477526879173035649\n6202941522189875739\n2933618839871883608\n8895427687746572016\n5443904672833080527\n2345843094917819141\n8955378152644970054\n16769948169861452326\n7832300171669999913\n9904873107048457781\n4602665098919589195\n3948432320836064861\n6931725325389895035\n2849613431141422856\n2226439221802697642\n12701506122039050035\n304622507309520741\n5035522918985971793\n2133663414761572977\n14239157990226877553\n4541949399350480642\n16266945049644000202\n5892174633780164827\n3467387625207593039\n848720522880202832\n2753211188186352362\n8056213280919865635\n5973862536701210144\n11342976191914532964\n6799255500142152141\n16018882256074386936\n17875346184718117291\n13296394729847840885\n3363731920623297283\n6627671705289593389\n16865807697661844537\n9284981118775085538\n14670880296037373333\n13106609291981698939\n15972843400161631405\n4191291082655515328\n13966737424526271382\n17868178858809704579\n9612886696845325819\n4950461414406530988\n2684347282455461990\n17408511116758985994\n5466973204032982337\n17532010835487570192\n2066712676588133499\n355994163424437299\n9681116882195408622\n9099087478020747911\n5031878685718600421\n8530634549749179583\n11488859702004058532\n3402288886302844099\n2377978377088155678\n10131631717485252351\n17359533852998563990\n4039197346630562045\n5719723481911332960\n16258338494062779003\n15520435154240088754\n15198620432534955013\n4755611578656644181\n2951803388612193238\n796273923772405539\n16580557843113484199\n13248128313818858995\n16259964627887631404\n11021256825166570882\n16515366786937077323\n13042211195933784970\n17923498535079216560\n5449524215565865565\n12698920803961201177\n12457534879611405273\n12646866130996051554\n1678321286901118870\n760277915578640256\n4653396734840853652\n13900897713289631107\n10717041775735875590\n13354820947157884837\n9831121925783033064\n12616146336966695757\n7827440901918645341\n8092850033945708645\n14624391685888850152\n8916788406830255526\n2003562974494518801\n2151209287110554211\n11011996268955922955\n15319348310571551077\n17442925698582626111\n1702773096138237662\n5225342925514737681\n14154296192965795717\n14309600193453303917\n12908625271057834727\n18045659855528436586\n1442181865547388917\n6480357965568036844\n17642796630613755301\n14995647065614221753\n17248266259314451778\n17594738403646160869\n11059476909794312940\n604994870614171870\n8662052968596755741\n12321599687151768135\n10420064078497976890\n12008354475079636998\n9421676877508943778\n7488265933715789460\n5089672938169433560\n16769948169861452326\n4834578571808605550\n8053369115904842131\n8418167140591318112\n7287651022231059029\n6842030937971744837\n3643187151157126249\n11617608573329828360\n15939152928799228184\n11726696793219844580\n859577854604362722\n18242706477257598152\n716827667225358311\n15815912898853807989\n1198267195365251783\n11275610181183080494\n18361097570081996804\n7756113451912037331\n5240426925462834020\n3411671842989745927\n11606588697288141464\n16919096003219213769\n14135912853125097041\n6119217576022546760\n16610243312133557889\n1466570142892776535\n14815130009162485795\n12054091061977243301\n6741242955936853321\n9131998150346111937\n11203934204009565331\n4856628083601100455\n4823030711449659738\n2413112912529071192\n197709030609238138\n5005835208297368580\n6544296028899852577\n18415443727922541102\n15909024166941780677\n6561885820603521710\n7537659418559252934\n13225658323535377096\n7392519818250487158\n12732383046920485356\n8389840367103709574\n17858090896984855679\n2556494761266177903\n10965015880389304145\n16883880937632038889\n10961664452595673789\n18024161395488898727\n8754746608828763733\n3087896475304289885\n13335402323518898031\n18025335770451507917\n8262943249879772120\n13510900798462552901\n2418941208778148582\n6544296028899852577\n16278042993215235247\n2957420751707797427\n15929779039129801497\n17602566584096525159\n16471347665411169391\n12853789542996796098\n3279884555964004485\n5446132250399542717\n14846592787632640081\n15155463978209209825\n11959214249467107044\n13244101875118275853\n14246209489311876470\n11749155300605164969\n11616496690328546879\n10665391265305233342\n7107613511128020175\n14253762955819377623\n14215418609059514768\n13404778749427356465\n17287887561723875272\n15398695672287891882\n6476770566672307626\n17531843596019503509\n2495345974037947129\n16265742457386703528\n16516507076599135208\n14755105891600572633\n16844869804487291132\n362889138028887039\n14788859019740147358\n557352925087020534\n8002497183738127036\n18253559154505061370\n12580010049561725934\n13113608023585821396\n11617608573329828360\n13894881520463425431\n8023709185118947307\n11098989287072576675\n13868060340031036620\n17756409084764732750\n5905750854001771357\n12251956320560431379\n14312158968224832205\n7995602573660656446\n6779176625068449069\n10149278563816214353\n2031726326826750010\n3367868134953599550\n3471076118669100078\n12188169052241926737\n16589043869189968890\n797380661939199199\n926482977962751531\n16934913564703005506\n12536453489399284843\n11322270069702876328\n7094714631117118609\n14272089372279266809\n564049118347937212\n2440973376618490066\n11590169990694428809\n2611822710425475571\n1165622703168940006\n8778697242555098672\n18003164223336827521\n9107775511354811917\n9389692439656915427\n3662370749224840115\n11162239898191476695\n2458766288079546244\n4771273871384687275\n18300181452325442055\n8570449594820562309\n18307570993856727488\n3551685830889102154\n1581141802278554785\n10498983213366328427\n10156177168685544956\n846210485379438853\n17821163315003910416\n8562866438591658673\n13170158401061119608\n17075019405448406168\n9166954585311288036\n13114196520507981530\n18125468482363745485\n12548947000000714743\n5322026736057016664\n17930201880379879071\n3522737974037632420\n14360143506324531482\n2055175707639142568\n9356028139008543172\n6741269490465357950\n1985080322759983586\n8456276832228304055\n2418941208778148582\n2316858866166025145\n3587613376752046513\n12841833471919181189\n5250523794169946146\n14654067621887397494\n16673620083541558549\n2246249140375719087\n10385565488271724326\n13709392975207944120\n7503538191494712587\n5028790979768877595\n16597722150014600064\n1956356406914513464\n5343350373943925544\n6621772762382615357\n8985742934919715127\n446398751039063088\n1130061027416227300\n15094208261708531360\n1562714044737064497\n2402537027979371717\n12214639979301734950\n10868998240508545100\n2436265629027622210\n15597948670051269752\n12679726094857758958\n6700439030137064640\n17865300438951513358\n13798625029067608127\n6230167383661604407\n6767151308125441051\n18193189872413836801\n3540386883307464674\n2693217295285288105\n2993281334006787889\n8202685472993607\n8890174849862664969\n2272437483685065927\n5283622954170437855\n2762863117089314183\n15378902168715339342\n7538710163150486095\n9243723539968146640\n15133736423245558757\n11511927148543241228\n7798084265305794846\n5273192616242908178\n16491149190516655625\n4353264372900294922\n358936105611479143\n6929907492882922700\n2792465692209529398\n16981773618769130438\n12400865330750070342\n11604482055304213741\n6683321754165468093\n15290802916718900828\n5897845242504884610\n9559531031761643507\n17545257100861958072\n114492311168072360\n10958769964444970544\n16349753797083521465\n1657018632967423687\n9813142901599007172\n7156876110094609913\n18277283666551734700\n10294022143928128131\n17849616318529840824\n8689592859158522885\n6770947153236277192\n9432871312493668326\n3798835811354711994\n11045248364179798475\n15097305754914162278\n2806592668416392972\n17308039894039310911\n14585003882375648294\n5395044601570540323\n1095870686430935445\n11461775140963925922\n1968868818986734533\n1522721638018196645\n1008205359427064372\n16133001830720161821\n1311938770739307514\n440954513266053023\n15814650550579538387\n10256719238529004659\n14926973516087667119\n16046330711038523225\n13025401461076803934\n17044597768798391717\n15410083158220025958\n9219760975745355684\n1214281510734912777\n4610004925179752619\n9928941501609801018\n12748802276743445982\n2444483200608116009\n9606222444845220579\n16084632435662893599\n4456676685240386586\n8626921392722671419\n18248839597222557685\n10288720937597671053\n4958179248548988685\n6876541438904281005\n2617869484462736850\n11634050538739271968\n6142907300036255088\n9587213407092814769\n17098838295382663838\n5222349472368156367\n6522080070692836678\n2769730324371317650\n873538510669467491\n16901480360410040483\n14269916324343021497\n17686846064231799831\n6841017561439894278\n12268437017328543417\n893006848144418686\n17260072509412919004\n7821611093337289530\n5676887997054051368\n1457755988732663323\n1386409282454350115\n133575764409891266\n17611130636841355941\n5719270191274423237\n13889576930692494684\n14875996419149137314\n15622726386230818446\n5343274308479372858\n4949406541361370888\n10525059786321482165\n5425953418656695468\n11582085217226044726\n1320335007382945441\n12839383390186936300\n17026465581188079083\n6119630425896465281\n8543548004891483350\n12657863106033666731\n9534295622474791029\n1040088581366121590\n3575240604181727365\n5755401475059411286\n1142104679197000358\n11026475555801767893\n4118412560490977067\n14108036233205000400\n11421136323545171105\n11564766907702385426\n6171224166982985129\n4008874613892904898\n15093855007558318511\n10767669613235346181\n9436421206779048980\n12747716454704493467\n1958185468266499593\n4743988810247586658\n6783789074452539025\n13842488372821990923\n9985367311667497971\n17093660603005353129\n13715991797321340442\n17608596616754161157\n9239061766332729184\n5558922779661684500\n3087896475304289885\n10267072952018318572\n18064816087236903445\n4024121552752687588\n17940104984141415706\n2333615476034270743\n11252153974990425654\n7940022015941605682\n4216895091951468122\n4278390492009283969\n8832717247830513891\n5446132250399542717\n578830621101962864\n8784625293947115957\n14478300994410571970\n6406753057144978541\n8607122990993062932\n7743664455319762315\n10301985124021369274\n6904373728104128677\n11910982864874280691\n15057725731766487787\n12585548922041978630\n7113105560470280805\n17183697787711944353\n3299700162760957922\n6008389567212644213\n5918729287991871289\n98579791043054121\n441217033987222086\n3995033384369273966\n13186783529132821199\n16122013615845957401\n9764003451591167947\n11081350876463608532\n3258508516551455784\n8262540799478534935\n4939814522545351727\n14041909985417261008\n1568144094917364904\n6601009842684272754\n1525079181059828197\n2592290873210970359\n9994472354949172919\n12485211616020548433\n12636069929676403511\n2412530600238157705\n13652264000121656135\n10835543150593955508\n2833328863352206352\n9488236098370319234\n4659135669741917216\n243160247546022856\n8711932053318853871\n7410340693405412299\n12009093664486969764\n18071744085148483560\n17477234826538609856\n7235426026014786867\n5153439085636564024\n12016448672105391411\n17227966094616264841\n15355627722741738232\n16381404209191373167\n653860693805175978\n10644748040039977321\n2806592668416392972\n17199670522810419419\n6424327908629486639\n17780178015681323831\n17850070941567262786\n2066712676588133499\n10924230379415081713\n4237679888974286573\n16598344418158273487\n14232854513866122519\n5205103959422192199\n16407097260361374208\n5839733465577238390\n6527694422784367147\n15857954401942726219\n16451260325813170562\n4846653553564452673\n17956995654211419027\n4305747007031071575\n11925992624414801621\n6492137823793547068\n7142359221755306121\n3570717173612222314\n17318675786224324147\n10692608916306548182\n10073655607892931742\n11508867057287106713\n360686790572558201\n3047739284448043908\n139605914208246726\n706887455683360300\n4815824968996734302\n4838612009919366821\n1672864470463053413\n11673314377688379482\n3629390900157270981\n18374723681158279656\n11424319453394300699\n10492018583677376368\n9239137637521081391\n14046343162367181487\n15871404394456762368\n12852392517573641942\n386951635697043848\n565248401543662929\n16524632845628416269\n6974604374756730477\n1368321537586114672\n6971426034895225155\n10837942084416037237\n13227447392103549131\n5940708610774712416\n7710936513358599611\n12706387594925927469\n15622726386230818446\n10680956569153448857\n3357294339798931394\n12268437017328543417\n13238151510944437098\n8706537249700414723\n1594168786418846557\n7183055178773904028\n4744408794771901587\n17071271759607301240\n18042952845948511548\n5135572095337006070\n9808580494584463632\n9258691282242827393\n6188861732008983255\n15172660640714857316\n14176951008900162541\n14868728401415517824\n711370822933819195\n8964886046236568209\n17065430647017321009\n14124933871111248486\n2600226875537066126\n14597371628962298518\n7249238786456837476\n9914452666925235039\n8677439518603184279\n7957401130961431272\n3054105226627884256\n14912605402322924854\n7913232728608968046\n1998724396059822101\n18368761884613303301\n13084675310772318721\n2055205231359531381\n3203705641983810513\n12671736658864834150\n6647454805376581437\n8469384157494505595\n4081028995914572364\n17300153418272528703\n7141536898648046437\n13491455397064992502\n7629173775432043295\n16308560713405613498\n3499043292425052448\n2446452453096161478\n10207469623399387017\n3007761314210976572\n16381404209191373167\n477379265811711457\n3203705641983810513\n9522826370556599337\n15308342646161764167\n8158149317509337255\n9133254336774500716\n12813637044976657369\n2798182091179764026\n5976187743451015550\n8181682490972292851\n1456378053625779642\n11577854252665783743\n16763255236945979361\n17390495289994376608\n17820693712062823954\n12557328656098128088\n12442509340579496437\n6487929067505316332\n17738246970377841363\n5369253624665031838\n16040039271034158426\n11831920651936649797\n2805309988477866486\n5530527800944504429\n8475950426767803826\n5193283537554601588\n9295514215589412235\n9342602337291332456\n17064898294206436582\n5033168359007284112\n7021209525272262100\n8300299073811752022\n13565454977388702927\n17329674808117743915\n4999843170248968433\n10562846692485197936\n16955479935277506085\n5160687303729239666\n12920508175872523551\n15208012723752641283\n3484442849126811465\n311667771716678195\n7964475342521628715\n16007222744596068574\n11342976191914532964\n13517565890459376866\n16137158370249599404\n3979596984366763953\n5749936642965213034\n8217947264727913440\n16598178877605691595\n8143134025833656226\n6497008782341294781\n18307634465250953702\n15165361936824622082\n835905810179536590\n3576974871168544610\n14034409742229283906\n1888997424239770619\n11476212681280527854\n7741388607621169538\n18011112316242806624\n11035619823854804794\n10003600588042846319\n10007729913575312459\n16977600732255672457\n1674326105544508257\n5000355727502345792\n3083749638692144530\n12070003620941968875\n2502352617398620579\n15503180530583238996\n8870720430361202798\n17794555658396985388\n4189968610616479590\n6411493884710668067\n15235605911226489058\n8585789861148053530\n17961096681917551050\n3785088883664778004\n10516552631625585780\n11677137117141216837\n13494682541568022106\n2146748864362977110\n15440831503657572248\n11203909666672548420\n4098967599107258749\n10335800889744742649\n8274104388973568164\n610262004489536852\n4172791632611980368\n5990815123951391747\n7299401580075424868\n14956541785670214294\n12976448462008297983\n16217016454080401173\n6739078477303014513\n17261069648713313254\n11476677642269863931\n18276640559764358948\n16097716843444347900\n16458703020283988049\n182278169881607422\n3528778277023303689\n1701842086958938525\n674069972317666128\n8493696943955560914\n7439983275494215076\n10562846692485197936\n12073996261861600729\n5993959518562147299\n471230192639339706\n9268262412985020327\n14669944664824890788\n12205581521811593701\n17702045914657629834\n78726331985503277\n13197818217098334133\n11543439471308534851\n16110910757035327857\n4447849321052295631\n15067497455739836860\n3837275596152247410\n16377748277769114724\n877674488534263773\n481269794434578099\n8365507445896232933\n10326219172001448435\n15821557759102597160\n2755296976931198904\n5930514728732864726\n16568703547953136225\n13433238327546231553\n10554453241810066168\n11091862047642235125\n7717930771521113491\n6898482623178588851\n14676621697529743949\n9112492076800453980\n9944889989920539140\n13374499022384833601\n11916735564162972060\n17701157791089200063\n3634053640732155104\n12980578136405862167\n2006068366606539945\n310777361849106795\n8930292711312014194\n442035695732556005\n6459038118541391535\n14216481511087970799\n12142329821094675023\n5672607729269159643\n9015010728170624455\n7931462037720100881\n5474013940805325000\n12988918724405186037\n9763625904863613823\n17424282500980362315\n8597552716632901882\n14535626687873389905\n13284455704537705837\n1880659324732673351\n7495775138301488792\n18122129878372467102\n8899144553314543199\n16257864248103347494\n12354998875375466969\n5735087450338574367\n12848082163135424243\n951707777457729665\n14943833135965929434\n17360664555396615616\n8811163479650755164\n3452607907102249335\n12670408186831081016\n4753972556436131336\n10117421064039605554\n4956474757701580815\n6292749921445668149\n14331166878934703280\n14135912853125097041\n18190516580830101182\n11872099633003010278\n18206234992855020534\n17961466309578681661\n4336940643743493603\n1914127982526378873\n12725758190825837438\n16800163418977341213\n1097946505196706823\n5909733712018232000\n10778276579064495614\n14687908480156632537\n5819371679836821633\n11561217540858088711\n13110973408250971382\n1835866573367246471\n16558208046815685888\n4835956136503373524\n16993861307438800611\n15295629281630431302\n17510964252353159035\n12260012469225934198\n16528535167816700178\n2257934640718573379\n5982232924668874061\n15520435154240088754\n6213053905334558838\n12373276722438732002\n17397172579809132471\n14725803548500388596\n7915299469312974710\n14301925945730173221\n12280357399190314536\n13966501523445804715\n1474088856798394367\n1310857436959404664\n7683593684903450212\n14253432781421231097\n2829939000337059200\n10038951346174553990\n10402555302972915626\n8274537359029659476\n11806394278551038560\n7505123344218388304\n2634616045956098905\n12717712156741098111\n12097238253138263150\n15888294888673179185\n9002067786444628333\n17322000988461863546\n18025106282759636233\n9020487865114742578\n1370948491008981953\n5073277894900394508\n17489082019226618945\n4701784552663516141\n17010970399850974614\n16696995016418703447\n13210434084713551841\n16047677798721922208\n15011621973504756341\n7224542822300644692\n4250896458035029496\n3884829854372747821\n7821611093337289530\n13004313851875165006\n4335650371421181310\n15158677052425300350\n10259891798535693125\n11781757962565791298\n3825638462136761313\n10177137146486857631\n14800707983974738615\n10620108762516550128\n1589907520457341931\n569077190649641510\n9824650085788187153\n290585424040638552\n12750115900923494531\n355656557234829386\n3494890953907017221\n13131456151170229793\n9789943514209813562\n8682830693787280631\n12819887144775197059\n11075043114939294104\n48957410564769028\n16943820117049461347\n15362674755717113805\n3724557105147256888\n9868042926169699222\n10257415254063834806\n1059292977211861204\n3396297530010864683\n3550944498375316902\n10413663694958687743\n13831040526345229402\n5263329705519782626\n15011576203050257578\n18180032399988942389\n2311169221315687022\n5128843935703395549\n7301973722100852902\n7069157320810476415\n276927931206773055\n2060201075290103246\n10138933127859780619\n10995844811993854004\n4410151614677167325\n10580762853761997464\n10578055895222933889\n17637160656748088733\n6508421066389065695\n6895755891453216702\n11479148761474398565\n11178082245625311375\n7776688807684053479\n15442529827256722595\n699258519105271124\n9620798284906742285\n11970379987576983759\n8609417829188947511\n14538852394831324359\n15522886372925011865\n14799683901774366900\n6119415929276298913\n6144241244539714393\n5650130865616094226\n12716650189675106998\n15197186934349332171\n16249285663294902991\n13099204057525980336\n10257764077192788104\n17325729008831608517\n15123761270770238175\n16340151605259272015\n5982573196114996377\n8145510750772051876\n7495775138301488792\n14842371693376546971\n14861128916239233231\n10712299423757314667\n11152187360697691888\n13522272283668835384\n12702721456824688395\n11777715807617542983\n5887687619912298522\n1136309135678212281\n2370946172977930634\n18163742146047806227\n16977252967569621244\n9324522898080926829\n11725032615455231046\n17325729008831608517\n6034702523770493031\n9706314549487535372\n4514803504862002513\n1920568839628417420\n6757923483102540240\n8708319181316459806\n16468489254539357644\n7753747471565835002\n8547907108886401285\n4249441400236236417\n3228428174639721523\n11982529865998770226\n13650538724446643591\n1960393251680867368\n7198353362434055033\n7502354663184064852\n272134541643492675\n16121781610894733363\n1495723955897152230\n17253988888947043029\n15998317435152510866\n11639247549688430548\n5717487324334245217\n9956248619562430606\n14027330308163866875\n2006068366606539945\n14859988667995003008\n3452607907102249335\n4473977373915316456\n4150632595731394674\n13205448332587057817\n6000062552730898948\n3055934156084553263\n11403469827660957614\n11873318579708041988\n15021172732685167410\n7743839209201553093\n4640093418107336007\n14230453856774829055\n18335428217149033404\n525605073677544750\n15883064639029061560\n13079040549980931428\n2702050204428717308\n8483149169194631498\n5009106781575408620\n9463124009118975077\n16749670167901878438\n16699244195596998344\n744632239674003010\n3998370278572308568\n15390742455967155\n1460875302594239618\n11026475555801767893\n18262301614706337737\n1483543024521534347\n14877329476891774465\n10073235541244582588\n8931965087904742213\n8030110193502905653\n12855943067124151215\n4776006542557955314\n14131801398332120575\n4075434850693239983\n15745887332503217240\n707968055001599374\n17692943227648562250\n14400876787716890772\n8230065078784056685\n7538589519254699883\n6914419268239002374\n3470482585074595190\n9199862350467116311\n7939584233516538888\n10217243654849473656\n10615224247459192506\n18253331924077000431\n478074557366143133\n2619004428881543752\n3249396640697447934\n12671736658864834150\n11054035825864201457\n10410894244393648455\n11638097234298026636\n383783193612254719\n16848523079533074722\n13562410175686020638\n12871767632880267759\n7462343897420112844\n13926397878952327256\n9297553495644203484\n15510820022612180087\n15952193147425785850\n3726616214873309247\n17952354440117180502\n1910287380050633986\n17785662858401941718\n17669045215068905958\n6399167761810143009\n6426705453216871358\n3198864609590704626\n6236596459702416350\n257462627092871823\n17349163521852148222\n17658740728263722912\n14689364173020966374\n17049223822914444091\n12615461118050909381\n12975148014809035907\n14496186804988119258\n10156177168685544956\n481429404789003452\n14851626244026110568\n11601462396334460714\n13123270837370987949\n889917269831338556\n5772783437700746907\n15503602821751165242\n12946803752358849779\n5092657653093925536\n16754536173579285477\n17167264239748881657\n5612096284215724776\n14822932853246654467\n6924486425860915156\n15353366063976704690\n2592290873210970359\n5374579790771669728\n3991499813339563351\n12920568566497519924\n7421336036409568002\n867564606418552235\n9590951681523654861\n996087570143634202\n7479298284422595469\n98579791043054121\n8826744813743085499\n15601053163806139419\n15219518608706513456\n17397559877777340534\n1346048055144745053\n151164699806006307\n1759897170707363873\n17056973137446098996\n11160510714599885260\n1760290556652070086\n17232551080836262134\n1824624471661267814\n16921190622061084551\n5851819321727466020\n13106727635138899583\n6890322534879512634\n14933783258093785057\n2950494139912402358\n2673034593016150919\n1060222041514094069\n15483382360971328459\n17087537540872333168\n14376037549068260635\n12956677540949888302\n14546167527806298251\n17613967018839290433\n10898687425812049502\n7020737595339812880\n10851496658429438808\n11889287549030188180\n12389445117747889920\n7015849436327271766\n1395462793612869249\n2207022554923227139\n18419551063340523256\n14860194321240555481\n13760659367213172868\n14048841360136360135\n13136666775792329849\n13656600816185110031\n9153744158218064428\n13203940199051357663\n15998809144831570776\n14216481511087970799\n2425521466296261873\n10894706976923953254\n2159327980056111634\n1543290961780904766\n17861927795095710916\n15519276584420910523\n1850882102730232719\n12885839929708630814\n663299340113154010\n529463602506644823\n4801084672376784525\n17572655058951512062\n3611568418209126232\n9500020445162057414\n13773332300483514899\n14290652229084083047\n18352994962917321348\n17995457933848073185\n12689434873849697470\n8440359929830018617\n9293907029841295582\n7395893089736248897\n13703053488610508885\n7230660918750078566\n6882350861716238900\n243699172050670149\n10912335353912064035\n11028919252630546786\n4886923695227897886\n7914161817657342810\n8066258050698580069\n2030978528736843370\n11970379987576983759\n14270132964567426299\n17584152849828012444\n15947308787729187603\n7983035533789135374\n9570878600407924330\n3581219915900828159\n14670880296037373333\n9813142901599007172\n15013305801768332839\n7803029644386054433\n5833867775218765366\n8950562544413133306\n13102377464885084382\n15866163311008275766\n7250459083367898638\n8527647792065927709\n12666649304817034567\n9358918972160930370\n17358313365052240735\n5747289912926443721\n10904127858598511428\n2435622979650232320\n12933978028902082199\n15572035635262438203\n10806076664606227547\n1120745254586356461\n9583214786255183131\n11968245821514747334\n9845021379544719130\n3556557836672737129\n5796210808208518634\n12134480618434634621\n17028503937428005658\n15999634085926735306\n424288317671572325\n3805015585607097182\n4954333366094117596\n14682146398606658158\n1392204636579656447\n616466168053923584\n14534308617629044736\n1000397254495042565\n2349565906877709398\n11548431911649878238\n5980515662340117802\n13367691756441682341\n4261180921715457685\n11027453303620553543\n805093476182931748\n14744266065692831824\n6954435759843609754\n11547484876284624298\n6815810116847332703\n17125295590628836893\n14009693583573247704\n9558478293281319053\n10118798938243884570\n17203761916359197855\n11345351196152061165\n6980853665567884744\n10729774953596298568\n3403219981788303091\n3144217485179358839\n2965037428621990078\n12819887144775197059\n3039618275556340069\n8846471358527704025\n7327234531349143187\n13958051895146704980\n17579320692866308955\n3499043292425052448\n1689395829926777799\n1783281831918361798\n4171870717904330950\n4524039554041427322\n6677714310729036655\n8815483522355778886\n2145210008255848890\n6144197052529353589\n13046881207557700048\n12696085588374850759\n2996921107876906469\n6839143692418368153\n15395739582157515806\n18379568495883253811\n3165818951231057805\n5997701082948934967\n17193888120164658527\n5940174391379109968\n12920749223904840522\n4161767035991891747\n13260068837098478066\n14901304922797670084\n1223569133093981542\n15885540506678917319\n11619550945156262905\n14407450243185981000\n4779763426442721239\n5931761565433059248\n8635504586127357633\n1701578124032324499\n6363135025698452044\n13898298828867966221\n3403510513679622131\n7798084265305794846\n15172660640714857316\n792475605585972421\n12384610028886647947\n15511210516557241203\n8149543727293333755\n13538632010646941169\n15669015034145677332\n17115128709019444281\n16786778761264313575\n473689837291821912\n2331397275717287472\n17986577657709367714\n14399000136817372731\n10904127858598511428\n14207201520067825824\n797380661939199199\n16379251536350163119\n9923764191142170799\n12288980975309909124\n17251826185841162553\n2040988293585579242\n18085228899735596446\n8198682752656951515\n260391820026440067\n269722848673706778\n10074275503921165064\n7773463995751914577\n14822932853246654467\n2235199439496181744\n12827521427896562075\n9586238369312180643\n13357892983848221076\n7832282556996566883\n16648959304602987065\n6033955449861539464\n16320104504872301649\n3899227554840530347\n15444293333986169820\n2643409571148664458\n12426132100115583972\n7895910883677884352\n2782220436362552512\n5873586578102018394\n6142907300036255088\n1782883759453879063\n6761645866018424744\n11461775140963925922\n10967453577709591360\n950054442372368947\n13195063916453137402\n10902485921289466830\n14417857406398794169\n3271697823231214633\n348235960811786369\n10266800229600156442\n2901129803915302004\n5957001334148737043\n2848124898191936270\n17441738106209632717\n18213382414651566145\n7280036244651819885\n7052808560106447974\n3167348785184299046\n7256082876187598622\n7173295645615708784\n662703854024049960\n633308877076369447\n7177226910512081819\n4644701883266487890\n11763379470736882128\n6301545919494071015\n1874648662873764938\n5887910053966334891\n2784160414331899876\n16577418337151257863\n7205605378328289653\n7964040994980441365\n16872753972791446273\n15306833766839089685\n18003164223336827521\n14276726417029738312\n4612647498453887899\n14864194483343939899\n11235189045840287503\n12742715822189497663\n10408725551772525110\n5931761565433059248\n4167604582060077253\n1933448236108484970\n11644864708508590512\n18229555629257306298\n5122268390225087164\n16327269448150253945\n2645538178470229121\n11462005347632420432\n11153600814492868063\n4259656894784692193\n8618871994949420269\n16101887718657070172\n17369491204600033155\n3250243241771088912\n6906867582985042693\n16503193230794220700\n10722669255824216304\n3101742310953160709\n16571139946608582334\n365826929835816828\n3888783797404708718\n12369193328751029963\n2792603936234911357\n2225174874520067459\n13136666775792329849\n2629482873406111364\n17978349869923454277\n13411386411876521515\n151164699806006307\n8325689935321617251\n18184308334999147405\n17474195188399791411\n9458724831106483405\n10513960618656733316\n16767234566921040895\n8649523087138784060\n13025401461076803934\n8645049191933805046\n673827205796992742\n7406085459588881329\n12813125566455113754\n6233556276658524476\n14975121149878353571\n960371650112191823\n12267146426762105169\n15745132728104916409\n9795472354135648325\n12856408644123348653\n6662511162983312200\n8406345026911243262\n5113732477550193100\n4725522031729015986\n16651371786178299679\n18373138688789675937\n4899371387835633681\n3369508570294184238\n14070698205360693651\n7005007607864634347\n8923094915806619071\n1443078560946738771\n18330134063973710305\n306466359268424576\n18037910326905526523\n17016394037082164279\n9958913500599039866\n4366099330781778891\n6822575647742774280\n15411144935954941822\n3888817461037488554\n2876120586525179271\n16539836228327317044\n6901687108966333208\n14220668877796372155\n9376185847160975718\n10565384259640306457\n1691652878193968416\n2022971660828729865\n5426502467923840445\n5192652367207111203\n6416707195745617488\n13753105034759885062\n12628020357416434187\n13032316100081014746\n5701219419613384858\n2040988293585579242\n1771242103197913564\n12587659124023021047\n16138081286417644310\n5736591768119373124\n17046489358498787474\n15442568703456225247\n12446283353411937420\n8667377259806477547\n14594234285686136960\n523828508024507437\n16643601106254241773\n13831040526345229402\n8319528108931319823\n10460617296809943543\n3697001033186053717\n3802060110676108911\n13858287601353475498\n778481422229078962\n17850078206009659432\n6231249139257835764\n520699122988491156\n10344088442094743658\n9658300173317305302\n14926973516087667119\n6156392473360546601\n145848904750970481\n12277247620220889373\n8740530469591545421\n4677615866765653444\n11502525683066151545\n14032766436799077928\n2524123203589766817\n18090195872154717194\n17858290621353862687\n7200270916733394651\n13824482133835821353\n10412044079323766704\n1520896786972515541\n14415759278764699999\n6020950796204753070\n497832767343480275\n16712684381778633519\n8876378254298140826\n13965218886844968738\n5358183918777830214\n15185302078008746403\n6740121843070026898\n14195027548641001150\n13713131390752122398\n12210258297501743409\n8149543727293333755\n4570656308785746218\n10215763743553782582\n2297959799410918323\n8869942675350372099\n6815810116847332703\n12365637496669028561\n15414436386429632507\n9292808813149961673\n15332829237808952655\n11526676590744886376\n5797748206629787134\n2628535958322936952\n9725244413069938539\n14888286545696871836\n17351460085318299324\n14895662201111632043\n2346433177858122979\n11199904688073531318\n9821953611794161614\n331443683730340193\n4383495355007067672\n2329412438377287334\n18415443727922541102\n18252752230887549515\n12605550678298749442\n6741242955936853321\n4098967599107258749\n15453253599430006417\n16425998698211312271\n13771417609672564430\n10858260346551687947\n9302514616115083981\n14956561146071190101\n15814788441736780659\n442035695732556005\n5662231397316395127\n1702613013620101691\n16466512873763955112\n1412542083363987028\n17010970399850974614\n17294049390587863901\n16369790097469818986\n10124977023234515827\n2194035799806741560\n18102437294942249999\n9348521634538877696\n938274825757727429\n9022435986355428781\n16912166919422836877\n17422988772485407674\n14497243376269587947\n14641136386810472762\n1929590253347425635\n13891384157546245554\n16192585532311022791\n16586989575946600270\n15479860435164775472\n14573410653385968758\n1868185480009241835\n4795776371251122866\n7357147142255019481\n5840159527805093044\n10995844811993854004\n6317637559568653005\n14178317669330152338\n15278784925442610033\n15130852392465525432\n16415472041294125775\n8407431456187495762\n13943373058095867336\n18082223490421321982\n11849034993838087096\n5143282758460295444\n2370842391794663815\n10436137325523930968\n10269697238107186633\n17570109934419277146\n4521560687739831979\n1016277928677657220\n1124964562762592317\n15766974871064627648\n4936818183576869150\n347330946586875225\n16207854771576522309\n17598958966527197297\n11960194457535470703\n2260558123953276061\n10469345541012051484\n7938168930243381360\n2881314635034004454\n16417524146843526359\n2442393298029079919\n10611058491571735843\n14805453909469810765\n14720532659662170627\n10315766662371759216\n5853469365513940293\n16333690004628128126\n16875194251522354294\n15708367911420396970\n6775587044992752778\n3260220166454174512\n2587353103074860169\n5487740839011598622\n7172319088834238611\n369188239617093081\n17438017933320216696\n15960449499452915557\n14931541717601273718\n18284371129599121892\n14224106253515697472\n7726785057635005390\n1856962667564631167\n14461184400537095211\n8505100407492325365\n16282609454960643025\n15793467648461370073\n3798288244340421674\n5107895830478281986\n13732688980154951567\n11097845764605564153\n17779720769958368358\n17522889552213995805\n16885391630392902912\n1007502382434642599\n3563516727063394358\n2437601194510772122\n12650394825625539234\n16263888549194907021\n16297689437206369578\n1389233523977502064\n3317328634719165201\n6267121072388906374\n3047739284448043908\n2628542570933524265\n2891389058823416106\n8784625293947115957\n12472824698168012151\n13374499022384833601\n10483112659263137357\n15099917330412115428\n13343584391233574632\n12732383046920485356\n1519810034090296428\n4937177054340656300\n12267146426762105169\n6497008782341294781\n18249916274145927694\n18122129878372467102\n8151501923515940300\n11501969880870933774\n6799375638790941560\n3904353775642162138\n749271926386549642\n6980832331272844463\n5557421146429259295\n9151746264767483388\n7383232984686284962\n1345689834237979230\n16587225500711767926\n5060379764451153696\n2241318368345707829\n7297834201712763702\n14552148573019426170\n14309600193453303917\n17913209461275978182\n14631992309136812058\n4007037138403166447\n2864176668350924824\n1495723955897152230\n16589702633475067087\n8300299073811752022\n14559600992883144591\n15014911514959723426\n17267439626263567316\n2554276646743822772\n4194526115276199275\n18146546693164685547\n7183826317249901790\n18233735582449096899\n12562691581818055995\n11799029491924889881\n1802336873851343461\n7818007001023780494\n5310528541435354355\n718604579314043466\n7894454422302236940\n286796854153308539\n9605554882084362052\n15603271364652543904\n653784039888311864\n5735562427047128451\n14717912490465898618\n16110910757035327857\n10219880449583066616\n1840731413781765902\n17722937129425228314\n6882175375875773401\n16580469069733251892\n6598155760740369295\n3832258092561078952\n4001034987493628882\n749231131307367995\n16913723711152431695\n18271689371389690580\n13412297599497153395\n12218807219904996715\n3956246364796326236\n15632221937870369452\n11781757962565791298\n8782564286735126222\n10090133793711552357\n11699608655635893248\n17998092700854932216\n12078534185445509143\n3053579305608852622\n5676568663264242103\n5501561727432320061\n10474780658966194054\n4668776297851826084\n2368607988042521486\n16788554189409113138\n8370900992183817437\n8714844664951466223\n906201702538329472\n5016846143801291288\n906246674585747720\n15262932513447035028\n10183251270994493951\n14079022398270775510\n8526720948009706770\n334746806017233337\n678174883119162784\n13914910706376278039\n14279364162055568747\n6265324015100021505\n4878057342291441102\n4165030247146766835\n5944073455014811127\n16479419940325782365\n1093056368381279162\n12726211863256127541\n8279665109889067454\n2740182751517037218\n17009921026585637314\n1392202164497258242\n14933162876239088580\n15045165680324678856\n14039794476637099496\n12353885699742531997\n17428776936109193407\n13929039880771550505\n11507697410790436193\n5225614982398694792\n8916636060148689757\n517545671008551478\n14179964488823887185\n1413347998225128026\n17113030484822690883\n11520571129143455500\n15610350647647039702\n15713190934814665445\n12178471051699803520\n5797748206629787134\n2829939000337059200\n6752216943664571981\n1208780568879694661\n837799123159854226\n1079817305417252148\n45411992842151100\n6790221800723662777\n507824543076027839\n3810150173921405971\n12702721456824688395\n4302969532850732797\n12244638670824052771\n7459190770099108991\n6476770566672307626\n11603923971871206339\n7226983372608992233\n8149766850198295747\n8291483277980563212\n13541124926786321225\n15709573819266429974\n14562263115008608564\n12953413421414586160\n4534027677830270068\n3887586767691333492\n1266532379294372943\n6464514352147505310\n14663193039939063325\n1188807036180069308\n842177251770228327\n15911526141897523780\n6255939016027554507\n16696995016418703447\n14013366998308903881\n5851238723280970133\n14385262187168837176\n2946461033474768016\n15897900819287007581\n11145289580920844902\n16438511468838283973\n11075043114939294104\n1135039469700383166\n4147027156481849780\n14800707983974738615\n17271615876423738110\n2983081471512537108\n14338155873859536988\n5369869188317039818\n9008764491676639343\n3369508570294184238\n4725522031729015986\n8418019099071261306\n7337786420261896013\n7343233402684916810\n10191470680552006996\n13089373666007644161\n6775367741225632462\n641857896247757051\n9580421902116605568\n6378227765251001337\n18397959558652477457\n14690977287388331240\n16541862274120426695\n15386928269624105960\n16304572006317423179\n8626921392722671419\n4959672829891186398\n4561683589822663481\n10258843031026142709\n3591974959822164718\n15330531478292214316\n7134474746133606563\n17685157064860738865\n17614764978590854344\n4353540215550703172\n9640940988047838491\n1817487164037868926\n18130077150525467718\n13781241225497486113\n7365901486100357774\n5526485102471922215\n10215763743553782582\n11414433927280029269\n1489757504042743984\n11623801860273914465\n12919457959537008830\n6602651918097020932\n7677612281182330672\n3421420212964245673\n12688210174703057141\n8274697595641966360\n16780274096992046304\n1110321451056361755\n17595621855527400913\n7504306147291093207\n12389084142453188721\n4585174213630555276\n7298087957509796563\n4353540215550703172\n7504885429045259382\n11338385057294922554\n861289179283532313\n5128405640415394111\n1112640935850922288\n8802907448965891374\n1971507269403793099\n13739773979621923638\n8344811610792662291\n9273746577480397890\n2652473221731441548\n8339014620575000980\n8912728374977329894\n8104389879996499303\n12357519959713530917\n1843163123869686220\n7578272194847228645\n14534308617629044736\n17632920146244172287\n13349379069760604123\n6366294158886780693\n14018287052446392779\n11606588697288141464\n18176802270189658946\n16100802382265189498\n16295488780511700188\n8768407081960479498\n16230491154423543027\n2396951150161348312\n738825372586140051\n10980276405057296134\n11458035012393992963\n10958769964444970544\n1236544842276088810\n15372534076705683371\n4552056842024570547\n11046199097234940951\n7955584698161355674\n5205103959422192199\n1030051430426999838\n10017197835314618316\n13203940199051357663\n7710936513358599611\n8802678172456560034\n2381840282771856181\n5519131628213750549\n18109357178703449792\n3021877260795065824\n185250761715279778\n11491590178812795584\n8135854043570388704\n16273768746108040356\n1973641937996106997\n14070698205360693651\n8140068711377997937\n12287155542283820044\n16762570776506816412\n15786931652622195977\n17171911444025665784\n9112122982883125196\n2219787796877033502\n7776688807684053479\n772240435293427820\n229905481263583125\n1709700687493508558\n8604832755591647509\n7913568535959610592\n10678569901931303295\n4663679991573231059\n17308039894039310911\n12878628868192174906\n7721676707142433034\n847637441265037238\n7123117887214959227\n9435483296351744953\n7696264919289618419\n2226439221802697642\n1416948048608103558\n6784191105536340881\n2575253628434538014\n5140293719693188936\n7807318527048471419\n13262813820704579911\n14344484991567006658\n7638801476218180518\n904662346776673206\n14215572345649976188\n13127717189686002629\n6075715243954363377\n5273276641844336309\n11523242716246002599\n5279940799589330466\n4701784552663516141\n14308910387161878154\n1058714069052075903\n8493696943955560914\n11416236528317694941\n6423291063267190624\n14025588594256821328\n1288340154641124490\n2782261971582569350\n12416682617387220325\n8661512798552603715\n5024503809808357116\n8363551000426413142\n13545464385358785957\n14776227901155523473\n7514642944693532857\n18301414166848105699\n8221628949222249594\n16531498822061031604\n18048110982954372084\n9226020576355559473\n3841889892325691911\n12356821672923629913\n5147501673642346137\n18064816087236903445\n11816180655768072390\n9157298920196124228\n18219559565866083394\n5755528863405107437\n8333993045745722819\n1301994740177647943\n13229443125107231799\n16738111725577947786\n9293391783070989121\n11876909393145196844\n18282429153334553002\n15806201682218462469\n2446452453096161478\n16922926874295331228\n207028587859127103\n258682525998895549\n13113608023585821396\n16286701835307386087\n15046908249942630688\n9355734043768233725\n18277283666551734700\n7918212628599201736\n1069596978227020227\n9681116882195408622\n2018157668787117882\n10580945352699898595\n25055305154089966\n17615314710006483943\n7746333644187590224\n3286628619536284889\n12503045871362219609\n7095323643378069735\n12023062123520723597\n2785372542137316427\n17134412340077637187\n16266945049644000202\n3970989631278553457\n6990713930724471719\n11753475663152448528\n10483542731104853631\n9893573836353985676\n3087861535289351693\n16571315773613351618\n17453631386231006525\n10495803606769788578\n13539921709784610867\n677567270417299101\n2893674108959110748\n7140970782786717759\n15735374530985093880\n1041650248723829684\n18027869129116707259\n2860169031786615962\n16204859055454673634\n9847267243618299470\n2848881825507971690\n13021630530054326169\n1134965571618699631\n16343897468992562217\n9888776228385804697\n16953317106736938076\n18397137007847359511\n13680849466821682295\n4646488506069888414\n5378517889627026440\n8502859583272934339\n17723705182063702403\n6154838719427762102\n131066924388819138\n11831920651936649797\n10238417428178454546\n3659260103241791521\n6926891167139961791\n16017135294685780513\n5928303223259458548\n14680207746881029219\n16156538616693001128\n4948457359247665181\n1634540233848770788\n412414614672299550\n13555050284269480730\n16486799095039082525\n6875734948204117953\n11303167101104896804\n11577081344827580044\n14902425206815094229\n4356505295058394268\n1303141880137298405\n17041977732952275085\n1585740375137476671\n5229830364073525891\n8802907448965891374\n13879258339192372549\n198766119444944453\n11155422446095977676\n11364297878127639328\n9179201394158888257\n16697301913592060426\n17963758574010884622\n5079730260571146267\n5122268390225087164\n16798073921529716325\n1320335007382945441\n18078385316874037148\n15813069675443733038\n9658074075911266861\n3582821268457996241\n13404826377443106566\n14152805261830489758\n2180592792590839183\n5147501673642346137\n10795948634246859846\n5383494608476881540\n16400036097096400701\n15096494227030089579\n11350670629929533002\n12500618638964644051\n11634050538739271968\n2122197885785145497\n17962781990332865619\n10634220782696988124\n16471347665411169391\n2381840282771856181\n13162306092663059638\n4652111299363815507\n15539119665102153936\n4547229210177704717\n4659135669741917216\n14571052027188223077\n13943943642998147566\n2601369390943522247\n12730829338390491452\n12650918653501267\n18242809773439513156\n16884434276278296451\n12926360118936441087\n1850882102730232719\n2693217295285288105\n8418167140591318112\n17572655058951512062\n9531001165774843647\n3117544576648116399\n6637936515404487715\n17886442533702307713\n13966501523445804715\n2695317503619047482\n9916473770045990871\n18294904949677392880\n11472639639632150505\n5599387534464992460\n16190186780404473656\n7379400550794226567\n7573388064759856457\n2370842391794663815\n1517489643287556345\n2436574728528211431\n1231097926237916233\n3458858555463497748\n7011579185273189499\n15444140720204734182\n1846059397520952397\n13622550225996624366\n8440858277967143526\n13115118584827662300\n4248846690552584153\n5892174633780164827\n16576420841968636596\n15923784093508190695\n18160694763507143527\n13149736230603746122\n12394388580124556441\n7224542822300644692\n17946971333420412388\n349175694093835032\n6160314477508461014\n16598178877605691595\n3803132713194927096\n3005242224976260570\n16546498166738586499\n18026405368614058506\n5725396572134271045\n5229571334038984654\n16571315773613351618\n13420727741720240286\n4811300029309799318\n9253187486663260522\n11220813356188352248\n4463897490177086536\n7183377334048591107\n11677638328864527682\n16492862757714772014\n11484994175314799595\n12754298981791593542\n14549356696167407795\n17577183266491063996\n16767862013479328748\n4210449922358792797\n4296477293159229664\n5515145696273593672\n17545257100861958072\n7832028109248731502\n4958179248548988685\n567751233832916544\n18282429153334553002\n653860693805175978\n17193008032517100764\n6958311174368114816\n8929192631802592783\n3969860230814536568\n17276977821816592833\n15792374302191736606\n16236110418421678960\n7160042319398703327\n9904873107048457781\n9615260863062684105\n3110778535939275380\n3292113246304930783\n10430260503586736915\n3403581621352410586\n9746327270642713475\n17198849162727817178\n14253762955819377623\n8732997809584898797\n17913209461275978182\n16879128049326268899\n17321326645720608511\n12925174909295095673\n11155948287374165730\n6907504231882488736\n560124214442136010\n16271536396256619057\n241815536821498609\n15253903965265225069\n1888997424239770619\n7419584421718995238\n15991067981007532397\n7496342752547084973\n15021172732685167410\n6153293156805647411\n17746069107121266122\n11382094950037036528\n16129936103312679645\n14220668877796372155\n1832362568229687377\n13719449438976623926\n8216375417494315262\n18390429101206408266\n10439295454969178871\n6723293658520851858\n606242064063704501\n1826298542137251019\n12014510045908843812\n11470720713819721735\n2810985040786899602\n7575000891534499649\n13697480679572316272\n938274825757727429\n15903576775560566972\n4545843584826458339\n9015010728170624455\n1352849659014885905\n15729239144386698475\n6373991905389076054\n17998092700854932216\n4261285864270394832\n14605110544926051806\n18196340326991920337\n15092656122023683632\n269722848673706778\n6788422847026614759\n18120062436946806680\n4527118748320975098\n15782154002189930635\n16610243312133557889\n3565372083949873267\n16892321406246593213\n6523347700609192217\n8865731909707305957\n8604083603226480529\n15660811433119497577\n8618871994949420269\n17309762667473430965\n2980159931458766873\n281520586087823064\n16807389719981227480\n2542120513109645803\n6742714449836341035\n13229083034342066530\n18315955369010127447\n12511292663222604266\n10453286109126202563\n13155367880506664104\n7298087957509796563\n10677461517945542925\n6950194017648452256\n10663774310562456133\n7756113451912037331\n357676407186903586\n13361491427439083102\n14566389033451648549\n11615146358750854259\n12503045871362219609\n14405986335632596631\n12329996640975261299\n11147922037337410274\n876384662254171082\n11560089600436303063\n13827495606663650704\n11753475663152448528\n8846471358527704025\n5944073455014811127\n210345184327930503\n6571620337805380205\n8194118925389656958\n17794555658396985388\n10799701239066136724\n17137372435695804114\n170086169563640025\n11332125668967122789\n306466359268424576\n5845088577016160077\n17669730369211330609\n12730065618107447438\n9455109280293568371\n5986109257949779929\n9252414295047402644\n3740510255645445266\n9093438165277988634\n12260012469225934198\n14422704260780840200\n9343667515254290069\n12844201892223250123\n8763344369212317364\n17980066074063851026\n8539695082468512477\n13375114291985568560\n13613902079632640891\n1568144094917364904\n1800166771363323734\n5519131628213750549\n15955196303791553351\n12934098663146727634\n16601762549023516153\n4480814173180252688\n6411493884710668067\n9280358392389889230\n3169366315812375468\n9078883226985957165\n5672607729269159643\n17254074348225203972\n4746128101930313287\n10164814405030053093\n15413394602615959875\n12389084142453188721\n7340130423707145201\n16078426133237165600\n13642548275153619002\n9605554882084362052\n13133743068787173807\n6295181371611727767\n2396951150161348312\n11904728396999931028\n3198864609590704626\n1183382641653394541\n3790644552158709323\n16327269448150253945\n388114878584380500\n11960194457535470703\n10678815302535309834\n1174594734972800651\n12969542554392835933\n10909361261222188035\n11878341253495804538\n2423029346898792806\n4941783620126591363\n4940629862001947840\n12498843089509549961\n16843580736083258960\n13780559868327114498\n7643353866694692976\n14245766801110365797\n11484994175314799595\n18437895807705106705\n16172179436195962418\n7122392775154530969\n9869746207154218468\n13369212486279243888\n15722357680067788793\n746150398584091384\n2361097224822304615\n15000283250577207255\n9355734043768233725\n17277379546533998850\n5880228023673931947\n7990211421109604107\n6979164518082235634\n16898247461900430566\n5783396042105917359\n692569434467307034\n14755105891600572633\n12730065618107447438\n5501755751599531014\n3184327694943544619\n14478300994410571970\n11345520738046873247\n6525916093790466701\n3561392184769257542\n16914613934407826928\n13131903352738134996\n8798938274853518066\n11449439692991830437\n14848390160999293839\n3557137119511737126\n865692630396880061\n4004768222927699542\n16376881830896376163\n13902869055867536375\n6069341315969096979\n4228753635343825028\n8119688599277992869\n8761077759397297545\n17702045914657629834\n16344700358319309611\n7749341093406532193\n17937135854462649907\n12539619988041855698\n3726587994332382685\n11295950322864215902\n3576974871168544610\n16377748277769114724\n5870629188603249900\n16116916276915626316\n16108520271775554601\n5783671931906263965\n12548947000000714743\n845936963026640794\n8774290371999415918\n8162711408328129480\n12036375429190542624\n7490054596864994316\n14455268401501965539\n13280838641628408649\n11397146173859698555\n16688688523102415108\n11693905536455764155\n12280357399190314536\n8752429295463825406\n5390259982931940909\n7415377044053862704\n16698200607366380052\n17573771481952129624\n1677865806198879520\n13967418419441605583\n16122013615845957401\n11759820329054085503\n16201963762232020169\n3054105226627884256\n11319995132957282158\n8106840502779619902\n10470542824327691386\n10302522811214225368\n17036422299712457113\n4183876326628182685\n6424327908629486639\n3505415239186581592\n1843120237623676726\n8694703430729554199\n12668505177815033287\n17237699648500363065\n257043517957404139\n17065444102048912913\n14341629584534591206\n13729835828178652106\n10431167692962520274\n2374455915074190722\n15413067136704094191\n14902066760930679097\n12015182821218129087\n3893319518126162549\n100384076492967461\n11480386320603475862\n8763344369212317364\n2950494139912402358\n7455413184103858257\n9911991950704985495\n3371318370539489960\n4570656308785746218\n5902757476974301596\n10209233927386182114\n2503819558478638485\n1596969894439161666\n2684840831679227353\n11542680578860842604\n9801529727068067031\n16076878044219458975\n10287959317997817084\n12891232062361298949\n68582657721753774\n8619632706887631853\n9868042926169699222\n15857954401942726219\n3194688935400830864\n678174883119162784\n7410340693405412299\n296755628113407636\n13788035388819887022\n3219174072947549801\n9190572495564709335\n1846059397520952397\n721695721204106929\n4248846690552584153\n6750361046578653705\n15810617950910229419\n5844517563133961320\n16279191944314609306\n5982573196114996377\n18336431663595121813\n1416272826091897112\n17904218639497994011\n17131094403043974425\n14800882442539796799\n12248915540576480532\n2869665204318440887\n12377832704803220580\n5722784852426960524\n11488523445760188025\n15158519384777937800\n12933978028902082199\n6720613656444654795\n11086205205630075209\n14834257354262711769\n2642103907829357818\n17200537292043439019\n9683871662056764362\n9529399515710130734\n11221278622117458842\n7211706260074894561\n15974070985455002054\n3093860920666366058\n11347769025947717912\n1428517844340809427\n17396903641064948102\n8205131891913364924\n1777067137447976138\n9808580494584463632\n4007037138403166447\n15706863501390379349\n10680956569153448857\n4289238485000411175\n17463547807452738285\n5774092032995124696\n3640416155345199966\n15264203425367985470\n7578272194847228645\n654648454673187240\n14416157726345609126\n13914910706376278039\n4851798673695134575\n8381517584801168894\n470488951076395676\n1842018383418175181\n9735925535663508359\n12390009881201707453\n9791194776719981240\n18309280179149627082\n14939656030223260828\n13899192944144030871\n7537160330275678854\n6493745714870440043\n9970816963295259124\n4585486412012033982\n3805015585607097182\n4812571108324290908\n6779414720614065106\n13576480678754397955\n3765320865817172960\n9154985568680973734\n7437260091587360578\n17534728711589294793\n170086169563640025\n15966894423127189745\n17183697787711944353\n9575418880108652688\n7895910883677884352\n10940392569223966385\n10454711887356714980\n13418694376776958417\n9433669900282344560\n574929933700710396\n10301312906065045388\n2646550372871308980\n12534451424526152649\n13252293589792630317\n1428286146625390481\n17584203517016531790\n2726006431185189543\n18126039382698055839\n4653396734840853652\n3832258092561078952\n5152477688609060209\n4815824968996734302\n6530932447494959214\n16753443768368162749\n2318322344480239626\n12459074229353052804\n15246477472512587307\n13278545114421350381\n13568885447663734749\n7823513224266955224\n16843580736083258960\n684390878099570442\n144686898618772311\n13553582017083588911\n11084694259151971765\n5893050180930382100\n13710619140416846291\n1416272826091897112\n4659211122139436334\n8786018652768675219\n5453285480017663706\n11485137757600296279\n13330442940669200262\n4411028954807019721\n1578087279663329436\n17366663987007087693\n9916473770045990871\n11104767014542896162\n8708319181316459806\n645597174394745335\n5562423501076696172\n4771327828662454486\n14435414836052667222\n2526326948150317841\n4558280782774541282\n4139372766636088312\n11115098603064446492\n14880047148634526667\n3552048649858417027\n5240628258402523590\n10903147405106503138\n12934320948986624465\n14875996419149137314\n1867278674012661125\n14788859019740147358\n7749266583504096476\n10729774953596298568\n17813639287380391059\n12775594102775449801\n7504885429045259382\n15221152100670701348\n15563301938119732536\n11003339091562371710\n14054748374337647220\n7980579418565818574\n3191676532510275720\n4419971197080674723\n4167186968850548780\n15684000520594586829\n11717874114699466637\n17632920146244172287\n15961556238716784872\n4989735446151055469\n15022506285840794543\n4279053472750593815\n9500334384940346745\n11502406820226341996\n2151617681187646512\n17965032504588425843\n1168141953985132452\n17321521357158800743\n16524821987725683515\n5073277894900394508\n1442181865547388917\n5551172639808102182\n9298024707484555085\n14588300429682406006\n3253324916058487109\n3151315081333722292\n17757334399178450965\n1680466048819422741\n829992291057935214\n3797669403639807243\n9335808316751495927\n16299222063380360716\n8073800697575043306\n18317107175731511175\n10460617296809943543\n2991013392453676415\n17487508388487804261\n12500618638964644051\n6909634903141021801\n7516287003735792081\n15455439669377980321\n10526945537776261363\n8714762949274249614\n17200537292043439019\n6356014356349419748\n1943180997287680583\n14208563630454323949\n9685061562239594465\n10311168975525855472\n13043350388233310992\n17674668491907897041\n1484104605587255024\n3755654182586774824\n1066810939866907298\n5288114411253178122\n7611460096341032334\n11360384563626094423\n5059159885769759172\n7898801108044109002\n5617957928704373661\n17408511116758985994\n13530229950554085157\n12656894698927202844\n5989156609019534762\n16310247639532296418\n2324846577929700136\n13607461644970741473\n1525079181059828197\n7853624192080471928\n4980269500019710894\n14023931972741063647\n121044502754784419\n12704647485624280302\n15398520201166147968\n6113980072009360682\n6247031645266403605\n916358573057246925\n7682260057788983725\n16073624324677862032\n13417443529524866941\n12118972883016213353\n8875308092708894784\n14806967747757106581\n8496816113633962812\n17621349792600218126\n16100802382265189498\n5089672938169433560\n9723895479232090816\n1983350454696411209\n18056323349576055839\n1776562263643713856\n7857786812588811703\n18242809773439513156\n3738996409263345742\n16385257837331041127\n10149486938657304068\n702979466603977119\n15706863501390379349\n16172732038467402946\n12753800595887764609\n16002313452140362456\n12373276722438732002\n13558589881292483338\n3408633623732841063\n11605401521202704831\n9091329193927061705\n17267492087429193336\n3268303297148913211\n10873600947130844524\n12701506122039050035\n15414436386429632507\n10895105236672640405\n12890019280538623677\n12402270519867476941\n18303306099748616515\n17767897328326122300\n14053724190065752200\n9928298800900906058\n17961911377943218723\n11902389983134896409\n17607607650871738638\n18262877724007580607\n14554250078666091154\n4729995279873967000\n2580084793903126873\n731174268295796659\n9882395220582052788\n17372354610390484434\n1311136665801389145\n14573135638643050950\n10663774310562456133\n5095652221837893338\n12385490355893670348\n7265077122087759042\n18069287454214888926\n12902594644429554703\n12799233829644495146\n18383630854760582799\n15330531478292214316\n11673314377688379482\n14559600992883144591\n17873108431875182841\n15440598058633084760\n14147945954194666811\n10234318818179548141\n8485830180883041736\n15408562859223953187\n2990054225492457674\n388766886046311247\n6741269490465357950\n9918332010404087587\n15970916992410632395\n6907504231882488736\n6972516205967822046\n3490126787364833506\n10722669255824216304\n13146843853487926734\n4519005658949396867\n7087710455559817569\n6344077991233173780\n3515739297278057908\n3408633623732841063\n8704758505879271535\n9970428922921514349\n1807403019030112353\n8230421561028930246\n6200232584311840524\n304871443784269314\n11624896867823998948\n8747386085748184538\n11463564956781363197\n4977327283439369031\n18044261799592688995\n16524821987725683515\n6648976187838191167\n17756409084764732750\n14295852220408248396\n2855477503302033305\n6950108192358588515\n6511074577804868113\n1340446170723960275\n12038996589394235497\n15450859059237613929\n1815561647990942205\n3692699080864263803\n15564585884001860954\n9234548591966566909\n7875995959236387\n17999953578554427290\n11333190758006323533\n6188422666757411307\n560623159849539220\n267164020148255769\n8644982129759239367\n6693309498747652945\n9284328161140791819\n7263291976412971918\n17471604246748388147\n12178471051699803520\n520699122988491156\n3258508516551455784\n4976105138747440615\n17324775735765758958\n7865443803202055357\n7184083988563728431\n15714139612734255787\n12480701096482720487\n15996724785536473429\n7382997938859093975\n5466973204032982337\n12902925204961968271\n14961626585813965478\n14717087844963085912\n5887625937116514243\n1831203627894132176\n15055809726328221182\n1124964562762592317\n2923903540181860387\n5345491046706788415\n7131848218890026410\n15262729157666060249\n12902594644429554703\n3948432320836064861\n17808814823170099480\n11717102161251923587\n6037675672462755127\n7495416354739641055\n18021629152467564699\n290585424040638552\n1956356406914513464\n5783634686229757109\n10963080430336012425\n16774830952835813068\n12288980975309909124\n214658138657632158\n2156160068316101323\n10995383067948893247\n14773759750484836207\n12690601122100816888\n2434262527670810657\n4423734111580468459\n12486568958348083238\n14888286545696871836\n2094252554856746291\n15814788441736780659\n16101887718657070172\n17944744109210233064\n14534409038295679456\n388114878584380500\n11715481150451802028\n6026959113231972422\n4703811545386271544\n2970705149665092900\n11023030357859170235\n11971037917976172894\n9157298920196124228\n1112616848330264745\n12813637044976657369\n3765320865817172960\n13038668472769453666\n3236973306509740444\n7107613511128020175\n3839242101548492246\n4948668121176268633\n15825793662688709004\n10074275503921165064\n7176860445847534722\n12082994476385683845\n8104389879996499303\n17143047346875405315\n3292113246304930783\n5991866242398369601\n10111980833580609528\n1108021033485777909\n6415094011990728741\n3737372973672987268\n12459552429327222773\n11715481150451802028\n15618650892753865917\n18213382414651566145\n4406632254848790533\n3883322796380397418\n11248581254526180716\n17052031795515241108\n12580146551295535853\n18354381154112511999\n11548192571854650567\n17801494287799742643\n15798633643616801335\n13366419655154151518\n1147398685097696518\n831534146685770284\n5679253270633751268\n17089212200919477944\n10319727095021519656\n8284905173325901396\n5562423501076696172\n7315574421044494761\n3128357671405145745\n6492137823793547068\n7964475342521628715\n16004311098507475986\n2602580649133291634\n2870961443632410315\n6392641372911939566\n12131902954220033314\n15630348149709667466\n6784191105536340881\n12876420042693057051\n17801494287799742643\n14057281898935656568\n14351467216892958169\n14817490443853319001\n14768394311374577601\n1860939690850686594\n2807812234733879252\n13146843853487926734\n599924135341447101\n14497243376269587947\n14340363649252121031\n6214548114654295829\n16807389719981227480\n14185463187317354279\n8199074711754258903\n12695121798125966912\n277628002352607872\n18027869129116707259\n10530602448876720706\n16433234512508577713\n5250523794169946146\n283851559236679122\n16243268734569734365\n1299401001559610321\n312387846484700601\n17643720395175769427\n17759403039551516277\n14554250078666091154\n11556549611108587522\n13902570852990529634\n12599384099961606572\n2495112372447734742\n12614431623072685772\n877436164559735966\n6209283850697778919\n16560407592083938583\n2654821912393588057\n14030210075470381690\n18069174692654806682\n4769992076803446190\n195547858366595594\n16539836228327317044\n17927965216564072128\n15647060499961671775\n8614534155466623042\n4790765249385995625\n17271615876423738110\n16161627811257097076\n966110382437332186\n1832667051571083120\n15581982551852813763\n14354373298403263958\n17453631386231006525\n12074109985653315279\n6323687111057185240\n8572445443415791682\n16883112380432327052\n18252752230887549515\n16530246412968812735\n2868513292005229914\n6229585576370922571\n3316473175434020461\n8143605521897381323\n3417012036872283660\n665185768437851432\n7776931942147550016\n1442931666365003015\n7024488212825373272\n8818881109018610195\n7805684416058489191\n8386910435688587593\n908205778194881405\n4230577201973548297\n17543107119886977045\n16632315842655594400\n13210434084713551841\n10076279375777353554\n9370921634953667535\n8068580678361853570\n12685108407042260069\n10580945352699898595\n2623528134072355168\n17551628446037399354\n5714195420842868474\n16259964627887631404\n15669015034145677332\n11462248870106499804\n12610204061373736098\n8663624283134095940\n488382977201632758\n657222614336747343\n15961556238716784872\n7131848218890026410\n9970247315916147930\n6344082557787941024\n15006873702438846267\n17807044455898851009\n261106934750548232\n5373370471537616148\n8064201638912904153\n8172952320476947191\n13594491820901212239\n7270641548653962145\n847637441265037238\n9568055623423926943\n3610000840753826543\n17634856203779677109\n13406673913849207947\n16983731729943972635\n3085607207291717919\n14496861509853076601\n5623748775884180412\n3671089590669940709\n1248354092844841833\n5127848075467146720\n17330157962774156399\n5695838610954309796\n2294680138908947920\n17844362997852294199\n16186005427578038529\n6899315284246434582\n1168971788222092201\n3557137119511737126\n4878612453486593690\n8913222266741107773\n9239061766332729184\n18397137007847359511\n8502859583272934339\n8920470126075379122\n12005290447044942706\n4167186968850548780\n18270569845151628060\n14084590126813178155\n11458309691684632733\n12690601122100816888\n10347507635757174363\n14193385644090987844\n12934320948986624465\n10722381637309297427\n4157094299678183646\n9518047164248290297\n7100501623911451825\n15240189299639412896\n1782883759453879063\n8993741474844270513\n11998982220095062736\n16503193230794220700\n10958354870780029221\n14044417901403408553\n17957179517519805720\n6106496061262414372\n1524295522360257599\n17701157791089200063\n4804115133538749317\n15884476247249363753\n1059954108483256056\n10614827083220497383\n8182479885433205946\n2764673925327728575\n15701179964309861354\n15866763207811080113\n12778771598343342026\n5295713569670104224\n9166116273973407687\n12653696491945188735\n12269616606805501542\n10877394929135103235\n9227709617591235798\n3128043861452740990\n15836587244708121732\n7176849324688162718\n10854329004683719863\n403052356729441050\n15074002312665548827\n2107852480285906212\n4904947566452776577\n1566273465307063646\n12533245090045718541\n1944028084728537265\n5968430400331520604\n4362312686177264393\n17340265067582871025\n9606222444845220579\n16451260325813170562\n2266104071599301817\n9290483314813802035\n2737166043412730661\n12813532959712011865\n15156660508217103583\n17741943068216870673\n16777280759983099470\n10937737316830538404\n13580675062476031783\n10614827083220497383\n18216575464533671735\n9968616748457601051\n9930280582696110685\n14418400580706426725\n14072444119516016570\n16717964659912897811\n11563589108186101137\n9277620082839846803\n14657873664237086489\n12442474693810335567\n2592823355493542539\n2790046991269885737\n18132710663640715607\n17577690511529067791\n8286051083467839259\n2490015626828556673\n6453481834740376307\n11344399039116311635\n7668700683664630999\n2416704958422563613\n17320509488358908006\n17252340097396550791\n12446283353411937420\n2316278940930333496\n4250896458035029496\n1197048576682059035\n6790023516660577744\n5802295692528552853\n13468746127162475325\n10414188989306380753\n9723895479232090816\n12297143350901971036\n4749877650484904078\n2172003607068294884\n10329663906100247497\n2024316581175058073\n13529646603918343900\n692064909611154209\n11255919402395988332\n2078900548113970944\n15156961672598305498\n18024161395488898727\n3586892209973891565\n17726258712356970907\n4676292782526529821\n12030714546994016184\n4374843911868375031\n15352380353468275846\n12284730242685968192\n17686211828216880968\n8744820990728933162\n586828230045031042\n15951161734007376260\n11807994680750894615\n12036375429190542624\n7650907014463427321\n10749288105139283744\n8907930176227995545\n17171911444025665784\n15846970355090500143\n17364856896074951069\n2714205010864508061\n4198893634372866258\n12365586487247818146\n13103281843656101181\n9041341377874582773\n17192848324313416584\n5425489462398726573\n549539981845818156\n2978403248530353258\n10887631581979376571\n16230491154423543027\n9358918972160930370\n4646370136966623610\n8561712944863520328\n3348586638848948608\n8710105413190688211\n6599275465636564878\n12931000172470331010\n2258401822873401489\n2719101474476088399\n14416157726345609126\n8457294359025579221\n5128405640415394111\n15178925852118503531\n17270553680045873687\n3312251886995623843\n10799701239066136724\n2352264576214019566\n8020050722936049274\n15450922332014572301\n5605381684918646533\n16555941772116369031\n8146457958179190586\n15080832926040060544\n11489163479872785580\n6571620337805380205\n7389641355446182522\n2731876728699408197\n1691671436515606336\n1964331099362908548\n12252472315047967888\n6846042356880061760\n12710068903588525191\n916358573057246925\n754041173107222884\n16732952053401626447\n12140120487682036697\n11604443882131625936\n16116916276915626316\n17283638692574195403\n3069586009106463284\n11358556171139673782\n3878020880530744950\n6818375649557178115\n13330443127881100200\n14454083984821359297\n6363910448580793583\n10558071807415610010\n5471791839450823710\n2158536660700752786\n5535011045276822559\n5446638273776357556\n1146935915586946713\n11605401521202704831\n8248242539168032660\n13864515440119639265\n14407450243185981000\n13611227331564351896\n3138310277861131633\n15372831655794327203\n11807719573216845564\n4971717915030501275\n3208686345392172939\n1315108962037663490\n12442406735180567903\n4719942348388086458\n16172179436195962418\n8971463316959603975\n16685939342579672273\n12358084741614060491\n15022506285840794543\n7271884638387845663\n1402599613178237912\n12087215704611941175\n344884325672966321\n1960386785171790252\n16091465997751058169\n5172957657746084908\n15162331979619551672\n8843794858863982663\n11773076417957189559\n1246420245301636479\n12305939457772132329\n15123761270770238175\n1375680068259241504\n17807044455898851009\n10189216971235219510\n12989759443037790209\n12905703268129671267\n18263250829669017836\n14886028072837503441\n8778694679605277977\n7853417239621506542\n16332340790484355259\n1679133585036142553\n10722969682380621623\n11547484876284624298\n7341977402848124340\n14912605402322924854\n4552588284212421809\n9822430106444383919\n14434813196846999850\n4276996113221836258\n18059873841841242282\n13651585187584643886\n8204211843896433822\n15701179964309861354\n16844869804487291132\n14687686273607357570\n1095870686430935445\n11768959894277929899\n12352645403987077672\n10618791453893857254\n13552897022042134032\n14795597209536118568\n11859792406561840733\n1957833100793430810\n12003738265269331928\n13813938897559066147\n5028423523867440912\n16870878755181161450\n8348770358268697894\n12953413421414586160\n5556522312931843387\n5790337390461613720\n5313236225240600650\n12841833471919181189\n12070003620941968875\n7427559966900600808\n9732225594397607239\n8490759380056370619\n7963744314112216239\n157320242000255334\n9730962985307003668\n13678964049412451748\n4137397986629357642\n14272060831742792043\n5599387534464992460\n5695838610954309796\n3377700098847559019\n9729122058075625440\n2363153347514056589\n5370152151921960594\n7698885734610476989\n6636341726663512347\n750980907338927454\n18443067790954392363\n18415768464164202977\n17977173972867540082\n1954213897783609144\n11455591038119682133\n9474588653729603196\n6617368612347434722\n6227637813444754282\n17409186057068771720\n6796736957048457696\n12278924668133972426\n1312756051026894863\n6162492838246440685\n3562119753592365896\n4941318372998254406\n6399174140636410372\n14495523392354584701\n9043264981083858004\n8092493171796401045\n8883242043669404373\n9331506743283462146\n4088967401241053334\n13227447392103549131\n6912267175241343057\n14552148573019426170\n9621014273272748236\n6416707195745617488\n12925174909295095673\n13418694376776958417\n16108520271775554601\n7880166568179288641\n15648464672708567196\n11508867057287106713\n3232386117599501743\n18374723681158279656\n17429975938896808845\n18094559270923785269\n8861581059561092187\n15433548948523275051\n10349651784881368926\n3244020065734105922\n5599112079252099143\n11559231540157322732\n13430797093757281587\n6060906922509959278\n135645258891883142\n14721759329058006311\n4292624753814813751\n14044417901403408553\n10540277260419469877\n377590240414011831\n11799029491924889881\n18306775534248535057\n14743547003603058202\n16849444959830757529\n2888952681496719593\n15729239144386698475\n13089373666007644161\n8826214451234509821\n6623380976373292029\n185280358154807221\n2833580188887098891\n17162382036940053649\n17681773229578882451\n8694114529012793563\n1803806803073935719\n8274282784662710993\n692064909611154209\n14918536733724761778\n15018709018695495396\n5079358759670117570\n13381524700992217659\n6997306003634379556\n13753105034759885062\n15708367911420396970\n16420515418261479290\n16767500586311823844\n12417281657022684012\n164897249633784033\n7915489896893550642\n6414180480433160900\n14297193114686226063\n16586987278817766300\n12774053866776381357\n9436421206779048980\n13539921709784610867\n9463748920454450913\n12721044462077996582\n7880166568179288641\n3357254933008209056\n16432693855289797795\n17858978171195706231\n6427739287122331476\n15492967761366086006\n1045221867996985596\n5601434072661106709\n9097874486041506345\n6397209653570913942\n12983601251374943834\n11973577077558926394\n17432540125367642195\n17442925698582626111\n14279024344427790315\n14054748374337647220\n13629684778501249086\n2911599053392035583\n10872816211690186392\n14200419799605227426\n12058312369535265709\n1800671857144332878\n18025106282759636233\n14936300194511852632\n12107551250245685840\n1838772287344865102\n2719101474476088399\n16165484128422413112\n5457625773024138495\n6824756424395523716\n2089953942494166233\n2773987979313283459\n13713131390752122398\n6095252830423230767\n17206530954869298208\n13941388688573999225\n269136025524570948\n7478286807622479717\n11312306261004666922\n13459730400511633396\n18066639513124061378\n1345017260870832006\n2624071890399235284\n5603557411307373692\n14775626594780165409\n15262709596895639696\n5425953418656695468\n6326592166060505121\n7903335037371553817\n17390419084887865269\n12780543297384483510\n14104847900380802808\n15440076391758992904\n1560965596346323497\n17042537243640066571\n2347213791630968302\n9205396080483547024\n3308848975104226576\n15586603876577588094\n4409740982481861078\n10512671381738170918\n8887216312376713071\n2430459577105314994\n6201726037534331138\n15854715559409739344\n9390217602591528886\n11761984771857325964\n2452999297715370369\n4999843170248968433\n13237161923729267548\n10609828078547430052\n16330514968055258903\n2623528134072355168\n8131746888185137113\n6038410220417411932\n13406984741182673181\n10741532802122999243\n11770200687782283663\n10699959493499152549\n7799742730792211435\n7420067656436729450\n3876457563062558889\n9244819929514310465\n8093691042381860529\n2425165515905647374\n2517271880894300337\n14333120866547137855\n14965339450195976418\n2422673979429418021\n4158566641517688620\n7080119660671421864\n1108021033485777909\n13525215759308485248\n18202572402023055044\n17292426963431207328\n18253559154505061370\n10079070413844692488\n210345184327930503\n9707501199062960677\n2768583925208526302\n2619099367486661067\n15408562859223953187\n4711083342202851914\n5985922541945899067\n3306647178372308228\n326037676166414776\n2331397275717287472\n10319580878853818867\n6235280725849875974\n13574191639572684753\n1597747233143155564\n5863446022597336010\n3005242224976260570\n11366065067875177340\n14262145707902429546\n11680469379006201842\n12643396722124958736\n16920009930614719358\n3167348785184299046\n4195977386736551861\n9640940988047838491\n3131290073391219352\n5612096284215724776\n5453917572982932169\n1998724396059822101\n10482695410500407466\n17608596616754161157\n12754298981791593542\n17946971333420412388\n2491844703238075002\n3810150857385444855\n8490794039730250302\n7342036791644258086\n12453554643209660881\n13747141977208799401\n15335691527016303642\n1174247159521316624\n11520353242771844008\n18362467979474763118\n724585814857531374\n10768950718203956123\n4666520526711046838\n11347769025947717912\n10015851046015348457\n16688688523102415108\n17090634608996546087\n1964862429697108478\n9865476702151052111\n7938168930243381360\n7955087839940395150\n2601454506369326803\n17415882076306604415\n6929972456156375907\n6489101095435572766\n754354693695799463\n12422064117466429464\n4701817474837278812\n1600471419401187139\n12365586487247818146\n5851327870284764286\n6392447935194482172\n13459730400511633396\n6323687111057185240\n6248425323054029645\n1828704507629611788\n1908895468078382037\n2628542570933524265\n388766886046311247\n15634177237991608055\n4265950692810867162\n12590705151103685613\n9673603770676412663\n15245302593847570973\n16546170140786117893\n11121160550377270658\n876384662254171082\n6873984907729130582\n14670690596439832091\n2058539246428270392\n552633528442390520\n1168948444121610674\n3682978285244286943\n967959715877468032\n4412487107158235336\n10489722066268082137\n17364856896074951069\n17330157962774156399\n1146935915586946713\n2782261971582569350\n15683996944715002395\n3537067906809916093\n1361460746758210844\n5064375573165596099\n6245914843828066868\n7660806539439559679\n17288472713484924476\n3358763847159967698\n8396436037328787875\n19599028817099133\n10517076172479740152\n7166555479513479178\n14102769349880638796\n3979596984366763953\n17494327061612960889\n8031859311004406524\n11599449167467690516\n7966496116896089963\n12844201892223250123\n12447482265350989851\n17903196077554360661\n13309004209577980031\n6849009868913338175\n4855320214082457607\n21873120165035669\n10903289887182680779\n17759403039551516277\n6590520513911710550\n4878476243524909741\n12169646736033481200\n18270569845151628060\n12580010049561725934\n9994600581096656326\n8193095410615699649\n10374538614508675729\n11050503658429224165\n14149066662869843475\n2918905242934895402\n846652086702492989\n10992223956462966609\n11551910476750762632\n1975054190189448167\n10302522811214225368\n16073624324677862032\n15159255335150670839\n1106342173301235046\n17351460085318299324\n4804908740727148389\n12931000172470331010\n13058314833405557383\n4998477086011689265\n5783634686229757109\n13110973408250971382\n9291283921655092384\n16934913564703005506\n17069063342805394818\n8759254214789946136\n7212952191320142457\n9610173016149497470\n12467434374877312966\n17356270102184444250\n14626286855804467259\n13207912437611924964\n15362674755717113805\n10023169429098069515\n1543290961780904766\n14825295908937966519\n4321229790929420047\n17904877246139315136\n4835527511667370520\n2348665466217991947\n17438017933320216696\n12625993240286002741\n10177137146486857631\n2619099367486661067\n10037693654292894630\n6037675672462755127\n4795159809025858630\n17106775520292149783\n16379251536350163119\n11793194690583310876\n9855412937264095481\n13771072712800662804\n18368761884613303301\n2055238995047011978\n7461376019906554233\n17195770796839981575\n4998973318438534794\n1442159492150755543\n8152278207550207137\n8980900502679192139\n14855104057865071027\n15452343209952203975\n2785372542137316427\n5215542142004081180\n1676427826329432673\n7382472514991907724\n15974124714844178814\n16488114921244664375\n756420071251687051\n8482049504553763340\n17347104480046826261\n14313059588707290773\n1223569133093981542\n2896707729570284962\n11802369012778562810\n4975536052112479884\n6253357513445001427\n9847267243618299470\n15765201779125659199\n7433265012462718608\n16286701835307386087\n1583882117698122642\n301439010037845143\n11009662230098592390\n9143770405345272894\n13348820480142434181\n13205448332587057817\n6577590675667840274\n386951635697043848\n3032603954284521176\n6655214394311657318\n13613902079632640891\n4769992076803446190\n704139548666752848\n9323651175103250863\n16562344041037552545\n8997664602652738453\n10749288105139283744\n10310627280759400698\n3775471423706465305\n7236285269602950415\n16146445145791417877\n15060398491183485003\n13834208321534583639\n9764297523745893245\n6933307286875848101\n2345843094917819141\n8712832770249145027\n18042952845948511548\n842177251770228327\n4743988810247586658\n5869017122790966787\n10105006513428679499\n17616226114978287756\n5042418534868185438\n2423022751915520448\n2901129803915302004\n10427065537361864937\n7063384858893698802\n15492103378925319680\n2440494720255367918\n10938767546133419196\n14262842558403124957\n5792455712472110335\n17446360339992911062\n12922291440015218698\n13260068837098478066\n3959233640426754659\n3945652145020771591\n8667697558927048886\n17902111734488963559\n18090195872154717194\n15572035635262438203\n9615260863062684105\n3697001033186053717\n10582708593668632706\n11197169241899215913\n15102420782280264311\n7312888321124519469\n1442159492150755543\n3243449854484928965\n18071791382193939116\n2951803388612193238\n34604752048101049\n8964755669076195092\n2244097410754192782\n14886028072837503441\n11469115951191405540\n2341023801642134015\n2644074565518405587\n12647640999002014578\n13308485524662744805\n17069410936929580562\n11914854407181465065\n12171928196349527155\n212903338124053408\n5375096938498004995\n9298466410578692431\n12893423942765449937\n17497593626912583140\n6917541626617910888\n2889678923518165807\n15750762568361858290\n16562493312131086680\n6725175359317270670\n9529399515710130734\n17779720769958368358\n5389325329538242953\n17270553680045873687\n17655574446364468167\n6207540811485628564\n9828502752971653487\n3839319891828458931\n10359591947331247072\n2497448827930413926\n1960968428340784092\n13510900798462552901\n9534295622474791029\n4856628083601100455\n9142476883955128193\n7437260091587360578\n1521055016847978194\n6881166073888290706\n461701213275521198\n5928303223259458548\n8900717522923401236\n8514008953100298614\n13155367880506664104\n9358290520120214444\n287298343923091738\n4640093418107336007\n10347507635757174363\n9319176706756349089\n14021843845168383846\n12813532959712011865\n1485182793244233185\n12946403526225119671\n303333395198854433\n11158993770616641630\n8882179713914391815\n6525076611656576301\n8396436037328787875\n6171224166982985129\n15684869512062804581\n13184063736535621011\n2935378256375593766\n16763147287551726220\n1617140161052724065\n6293566689119108329\n3048183218844191522\n2634616045956098905\n17686211828216880968\n12356821672923629913\n7719797426150545335\n2355243159310511070\n4701620765259409969\n13866874337174715724\n1705926246253318354\n14533179982295231562\n492439111070964532\n10115109704165423762\n1106342173301235046\n17128367426728683392\n9989754944484405918\n9231871808819725148\n10111980833580609528\n13162529662392769427\n261106934750548232\n18431978208962553451\n1168948444121610674\n172689804935585259\n8897814493293016085\n11157286892104064441\n6200232584311840524\n12668505177815033287\n8207870500160163139\n14095271949740850091\n1284329352972489426\n12416237175343371804\n51097929371773067\n16541862274120426695\n10499488200989011450\n13578073247413785580\n12148978078911426874\n6653550767036171248\n16044293928951317196\n17935920785679989933\n16097779527990115885\n10228689780569836199\n6627671705289593389\n14095271949740850091\n870013575666733337\n5947996406346667053\n16887177735453792895\n5162078741700184609\n5556365957885863206\n5048941348996558000\n15235605911226489058\n11278978247702257403\n4498757651799465709\n17548629095969382144\n12426132100115583972\n4724296927401197698\n1299401001559610321\n4855474356735943163\n15878562320910760569\n18275183777218808082\n12739556402434697250\n5893050180930382100\n10316210615059804249\n16736777843524721373\n4254148529522048861\n6353481047897734839\n9980234160532744569\n3588459972613925535\n16648959304602987065\n12646866130996051554\n17804321341564227927\n3308104058347198759\n17441738106209632717\n4074706774402928374\n1071408327801993224\n15004119093918669503\n5645898591410761354\n145848904750970481\n12075150532326025199\n10957626942557585714\n2629482873406111364\n16004311098507475986\n4857467481772291844\n7946086322799567984\n8363132383017981284\n2888952681496719593\n1353721506729833793\n16142876286265332433\n6988542671642370339\n12577063809153742103\n16666005616106990116\n11577081344827580044\n5468242491190295231\n3671089590669940709\n17790324868430922120\n15620732140932578788\n9142952569106342882\n13013206546368054565\n6068515191547035581\n8588837235039466471\n3510378067453194649\n3638930871575090162\n16262464438846889766\n17859150748412516913\n14325178949366187488\n10582708593668632706\n9632009247638534856\n831297186452710395\n1861835248924852644\n13193755041005798564\n5256524145770038815\n17950037127145337043\n17058833504559649129\n6866686810786932196\n5477301231780410334\n5628089125292213938\n1423717141711629440\n749231131307367995\n8585669296951886761\n10960882686308637266\n11877914012755752367\n7344957653646740999\n2194035799806741560\n7050950562017608211\n13740728527573160497\n11015815090381361297\n8929240484885654084\n14061635324961627983\n681328060270787977\n17673635029034443478\n8168837963262093693\n8605269687476909592\n5216627896688102211\n12774123719055665499\n5640005003821127103\n13277493207582784856\n16451584398401037691\n7195713364820485606\n3875942704686922970\n15261829055622890589\n13880215855819101382\n15833748037340157715\n12381764322357404691\n10854329004683719863\n3337141163075242250\n9686696793951822982\n17968300843926321665\n10965562980301297537\n1039970940145459559\n1639834277366949336\n14871363552400150203\n5881676971387893867\n7677612281182330672\n15464425824245459313\n16872753972791446273\n15217318984692904266\n11955442665200767523\n6229585576370922571\n2080215730457195236\n18064134801598499049\n9531274020820826781\n9006127792802955166\n5973862536701210144\n12577215925366817429\n15525256579234933837\n133224423527033220\n12236419883493569392\n11298474349533423886\n15751305630680763797\n13783120983387456574\n133589295054382711\n18322710104415563982\n9279711253745708618\n1305182981955380555\n12902412493031789639\n9134703104016536857\n10239495723577053158\n2165964781370121584\n2276977983564350747\n14613897644568366219\n7091882909260905465\n7549239590252294658\n494609810686180644\n15602552518891249417\n3051855551379333533\n14503310237866007856\n8670853471134823121\n5761163313940486466\n5725396572134271045\n16852554758433735272\n6223274444422792041\n1474088856798394367\n523828508024507437\n6033955449861539464\n17346927531010599842\n18269663839489594904\n6981888791496225056\n8126488025987273434\n2767451637429668228\n188427463010225968\n9378666697816272136\n9967566482589538868\n17117510349379773692\n6151318954002800391\n7633676009810743258\n3413751548494385272\n15358880444430560874\n12071084022751124542\n39033485076119984\n7064957457524792690\n10992223956462966609\n3825638462136761313\n18056992994778248255\n9278112505282633559\n11218711102414467491\n2333566774553319469\n11449439692991830437\n11306295605353967801\n7720806922737209088\n1750128094736365542\n14451450700683398144\n18109357178703449792\n8778694679605277977\n15638586707020213502\n906246674585747720\n12615097682920201780\n5844749401749425801\n10363601900285996314\n7642033956772139131\n230969272525490209\n14466651074602455175\n9378666697816272136\n2352157488521421558\n4273455330325865040\n18309280179149627082\n4177019316526440682\n15770442359296415495\n9142952569106342882\n14646937973978963479\n9319176706756349089\n8370900992183817437\n3791007873170911703\n4945111919498837131\n8145510750772051876\n1613529526431687097\n4456676685240386586\n942552707892303844\n4993883963395254208\n8585187321889160552\n10245645146438931695\n16040301735537075080\n10342288778698816425\n2067334058597270029\n4547369209682563709\n12577215925366817429\n16408458776625787338\n16375291017096135549\n13867201682284436322\n16192585532311022791\n5374011275233924539\n9238345581608110158\n5817439559009734032\n3312540183314643730\n144686898618772311\n18000036781651224845\n3359835711283585119\n16088037953091285703\n2787899790192004616\n14634465622038292007\n3548088551076108378\n908429957659585136\n2100036076777398006\n17264547021661416436\n9335808316751495927\n7695566340613629895\n14961626585813965478\n16316597180145620368\n15646304756369878699\n12657007543615882237\n9700115938205077256\n3181184111737316968\n3055934156084553263\n11281051994702918599\n5244109320088223028\n12165145574758949608\n14776984898598254487\n159501844497698337\n10659885494782677503\n2029243045210897567\n2994301641702748590\n11322414960516992554\n11836705649202839969\n9284263414620568874\n16931536250557669513\n11694585142063138533\n1347170785631401262\n10733780943018375355\n13891232992420710183\n13621072576251293767\n5463070576061934336\n2326973603001393665\n1846549560524757316\n11954981579775243096\n11244065228506178989\n2165272267250816694\n7243425573068529678\n18303306099748616515\n5844517563133961320\n7564558854810299711\n17087688215828147329\n13542040154512136518\n1531363635269150070\n14966474208724520555\n3309251642737397842\n13672126710116545256\n6592842889342214136\n17411799014195816854\n5456491853112898189\n13325704297009037389\n10523468980660040676\n13844935839739142545\n2571925046497619347\n14399000136817372731\n3805145232294035869\n9389692439656915427\n1392202164497258242\n16097233321368740435\n3918650115493528426\n7257563953663619094\n4541903217020891020\n7381236086022320641\n11207898627407656574\n12099593997855791463\n471230192639339706\n2497448827930413926\n16593290901982247934\n7069719535917297134\n12936986905781525471\n5892203360031352826\n8284905173325901396\n3834337311011699565\n18076275076149743818\n14072444119516016570\n1826298542137251019\n9739756490814194796\n10289165273454446377\n7176106739067124644\n9889908450011389277\n2237387718233868268\n8809533969524123837\n7345628592645239809\n16012701441940428359\n7612643830718559721\n10465698732076089184\n1909019427944561617\n3841889892325691911\n13329468873489400336\n865692630396880061\n2991239997182903585\n3170295391122038844\n18365556381748794754\n10733780943018375355\n2445104326018494084\n8837976757550832228\n935835389551276654\n15818610842924276540\n9581359993291984577\n17297118854495888966\n5393335167522524275\n13969552714920292093\n1737612740294142854\n1224181370680917307\n5526485102471922215\n3606256970209604106\n9789943514209813562\n1059292977211861204\n4481779905582626018\n11723071209671775930\n12176129372016813067\n18333577225516373767\n1479397731421277512\n12571816152278393234\n7851870573387166569\n6459038118541391535\n4327135238514028674\n17185174889166250826\n6996654206467760985\n13187843925148795305\n590717246287068433\n4701817474837278812\n6890322534879512634\n4140229363415360926\n11176299997982893085\n1490005507474061829\n2234950251737072253\n15262729157666060249\n17873108431875182841\n600397655284579245\n7615174495302946326\n8875253993041387015\n11891968614589459684\n7653034326917159575\n17664569204519469618\n5367020124945566039\n5215778064014381334\n16376881830896376163\n8943034378847619702\n17463547807452738285\n4551162437651168818\n7128189284548439382\n14449786618238918627\n5678209021720941012\n6253357513445001427\n2374455915074190722\n1251152558975587320\n150952764854779265\n16416960623166196335\n16684167098592184177\n3101299126474605312\n9529410308403745784\n3632061151844301893\n10839993423269324181\n15287047249299185800\n492439111070964532\n5767259487684402946\n9883852259500109901\n10877767231471429562\n4994356112683879037\n10483567304417483745\n12034868250462235949\n13643808907465693837\n10172306664461830073\n10492738007137352371\n2817169949769730158\n4189968610616479590\n2094252554856746291\n12006449451084980231\n12067200838127785593\n11098838249440124069\n7857786812588811703\n7122392775154530969\n11975808655962601615\n16322374134403596079\n17977173972867540082\n36107055951322587\n14667004205940743615\n18233735582449096899\n11892489944004272311\n4242466015628998797\n14124054272376284484\n6832344248850620776\n8793996208038611013\n18045659855528436586\n9023540719005727117\n8286051083467839259\n6292895228750858722\n4043057359313445857\n5092657653093925536\n5297200482686630977\n2037524574354789645\n11698835657667933399\n5076690070277844837\n16779684593061500603\n3358763847159967698\n14465933479260410803\n8328405005037495445\n85408339431471925\n4951749968341303051\n14258937095058822569\n6536065095364312002\n1302992814810240468\n17429975938896808845\n15952193147425785850\n7249238786456837476\n5005117584068138741\n1087941277846558915\n17012381682863233398\n12330466156196620911\n11387014717188063134\n2642058242308624824\n5088582598373853807\n15570332903227677278\n13631061828454721853\n1345017260870832006\n13366140692212932670\n10188822277283446706\n7880426206856684378\n4118412560490977067\n1014869138091637157\n15564937377805532263\n11772013501143122562\n8697220432188166124\n7795571022554718442\n1594709358601218414\n1570363986982570315\n7296569774031428515\n14084249313071807684\n8869178784025879502\n14584448868125346135\n18249916274145927694\n11462309229550864720\n15286088704482712223\n331293919312054420\n1908895468078382037\n11569641517853334213\n17193008032517100764\n14682146398606658158\n5205576495452248207\n7312888321124519469\n8802678172456560034\n6840142065755414964\n16152423081206570879\n5042054591598306957\n17798503192770118574\n16625799304458265573\n15866535954495451925\n7955087839940395150\n18260328249424632492\n2501200304800168507\n17119310050949436226\n18176802270189658946\n10884012853969018549\n7627285697847441203\n12800066795611064307\n12159927038331361858\n8209695421012048290\n16405492462119019894\n7431250397890575852\n8029609175185136385\n161594449176109758\n14872099979782446526\n13420727741720240286\n16826268199936944530\n579329052165779341\n2979483325884883233\n9948448198886300909\n4039197346630562045\n4539081161122350842\n13895333493030672620\n15522886372925011865\n8689592859158522885\n17260072509412919004\n6929907492882922700\n12742715822189497663\n11309853902729196928\n12706387594925927469\n14981171119229182509\n921814946226230290\n1374840882106243837\n14727917100344618111\n17334221026399675995\n3604574554726679637\n14893271769412210987\n14924548970469532925\n5700330172150548363\n3863797620014459760\n7780514681070981439\n12735606628677917095\n11172092790780738690\n4431252684989912800\n15011766004633027403\n16204716019843017265\n9732225594397607239\n10270781007623830975\n13546585723358488330\n1430394834248296510\n4515410025158476278\n14578101997072980175\n6032208794829701531\n8149766850198295747\n11672557862263797172\n9043644435238844936\n18006228336963978334\n10523264902056853600\n15294818425976640698\n13366140692212932670\n4330126125365031290\n17630112368984579337\n6622559692868025677\n9698681438934932673\n15803968692662866587\n11349745958651530997\n17067819286011782188\n5523617911862063074\n4688318730336882845\n18093142458137242302\n11577854252665783743\n12309121985500777510\n2329672420692833128\n7060278089261329542\n6378015591549911703\n14796812977425650076\n1140020682076943646\n2151209287110554211\n14253432781421231097\n4805924069665033753\n14015549011132347147\n7098312992799133068\n10542504828962477794\n10938767546133419196\n7236562751923791469\n7703593063504749172\n12329996640975261299\n17372354610390484434\n3271697823231214633\n4590467671448225628\n11399502846625638277\n4632938134258709286\n908429957659585136\n14496384423962231421\n2874375086882765733\n11291197335087188184\n1346214739153447178\n11366760603235392242\n2846361377570642182\n17049656773411691787\n12180134105482379255\n13602042068822214171\n11319184956969687362\n15425275372341921482\n968737079553549937\n17940104984141415706\n526792555564231608\n7389554858281925689\n7382624243844487620\n17887584561723862556\n10353966376371778072\n10225919488693279969\n12249948064289974838\n13550017217260751592\n12736091552799600377\n17512558056373303924\n4814757093397664049\n7781895987714430096\n11604443882131625936\n6054894924721136737\n2732921478918790857\n5418147776365299038\n5675828460718292836\n15676389918053546486\n14943833135965929434\n1245242497108006793\n1702773096138237662\n7750165211119355999\n18301028784468092378\n8686872851007783966\n10285263972915949149\n6343027703952613839\n1910088052198568454\n8662173571907792466\n1193701105112228558\n7642033956772139131\n8636496245543593147\n13618309028010174670\n10228135712326246961\n9506090870801383717\n15740760596249583637\n16303220098268747793\n7095157514230007354\n6155148301333638285\n14975121149878353571\n17213882209503444852\n13858825709932731779\n11057540076430790923\n1613529526431687097\n13384542908571332113\n1617140161052724065\n16434688243654932415\n8273566545860899656\n2554323275096941797\n12269117493102446309\n14393847414227178345\n5897443315368934601\n17955378815187628640\n8105937762942233881\n3643187151157126249\n9775849979603468550\n12023930827029851744\n4828552403023601115\n11938617334002250423\n14502664391789100210\n6882175375875773401\n6476455277359160756\n17819470949171006977\n3548677854724277948\n1331430693043707961\n12577063809153742103\n4482539763436408785\n912262200513156887\n1152241566157455871\n11916735564162972060\n2355543909397229187\n3600432482581432923\n6202688440650623466\n5540901926317395285\n17092164215257694124\n10495803606769788578\n8570449594820562309\n3680951854593163814\n6295354203702264423\n14351467216892958169\n6147006426634666479\n9868989808589914673\n9442986028804141889\n1748771464049471275\n4559799160912380312\n1179232646059767530\n1115575256073891453\n2501386171564778394\n6118646779962994423\n14797416614028916213\n11735576937877348778\n11364843347595552011\n12041922375619867163\n18392190021574867232\n3522737974037632420\n267143843108582846\n15349651205656105932\n13655099689295923183\n5403987949437054631\n4753972556436131336\n3179709429663577091\n9615526638090035209\n1755982200035214629\n3964479802863542127\n132141616854413325\n17837515813408009721\n15407571708809447967\n7537160330275678854\n16497657518003791643\n12409835908278892901\n9387752463594593855\n4857489809475102878\n17573771481952129624\n3268303297148913211\n6280460645626878813\n431909101629403241\n8936520929311547303\n654608992595461994\n10283215425977341500\n1428286146625390481\n18311404156527163403\n11733820121111864948\n7627585403449091275\n8440587286364419562\n7337786420261896013\n16371579369531020851\n9010999382772023848\n16878302957177405345\n16173991157549744373\n16356010412078414565\n15097562761095002862\n16944004758162850511\n14043630004623551440\n2864176668350924824\n10037317165083039348\n9197446822104049902\n18418547564684797483\n16078596864946289747\n7020737595339812880\n16204859055454673634\n4606600341973833160\n8025446195770047446\n5377268830717905384\n18275559369605253836\n9685061562239594465\n11057540076430790923\n17416342026616749525\n16546498166738586499\n7249601475112971241\n6077477235322659087\n244909990955214160\n5196190226930053062\n8869156965857309887\n9404395616315384426\n831297186452710395\n463707120969608656\n17816136331585025627\n16489829370132169101\n10861305566158851220\n17321943981653663938\n2180592792590839183\n11862388561171037316\n17637160656748088733\n6897774613792429343\n10659885494782677503\n15322941142896639460\n12549017460719262796\n15405008580761111521\n15972843400161631405\n2097710292043233431\n9343667515254290069\n5738553394604814654\n3618322982461852690\n2600226875537066126\n1525613069594234685\n243149692918604812\n2477312020186903189\n4893631152295780410\n17195770796839981575\n12055738798134332962\n17407845961264553339\n15380509353227890732\n8083137702765883630\n1362198721948969714\n4162277175067751447\n17918062291146793748\n4216242094756617677\n14979103429529796315\n3805031899923833690\n12975827911914559863\n17198849162727817178\n4950461414406530988\n5811565157832932750\n9987421845180694586\n10808159670144736009\n8763436434242023837\n7316860045387931295\n12368362934760558196\n595793871254121101\n2886345223812860718\n6483606630233278031\n16497173753445591629\n2562377724444402443\n16371579369531020851\n13626897752777960414\n3040601856516540719\n5208656377958519747\n9496959961179498364\n470001657639822372\n17681773229578882451\n4493617426658162205\n9743764372091098674\n7123117887214959227\n3469554805433994956\n3238151140826945864\n2423721150054573160\n17656854276197636210\n2415036798095384091\n16523372160861938557\n1803806803073935719\n15896610935349016483\n4661414587641807256\n16501925111035880094\n3677216090747676756\n5316871757954836441\n11416236528317694941\n10567157228170217333\n6395847532377723924\n3572464052123427489\n6651930238017542197\n11572682594416210692\n4409740982481861078\n13221189312077445404\n10802874734071422232\n15400861193812844965\n6455850408099484989\n5152521400174793002\n7447718664324440369\n1753149640419399044\n477017734490163461\n9201959634089959388\n16792122631668600697\n778648917975764398\n4925491974388251901\n3311366990516554132\n12397922701290113610\n3194688935400830864\n1062400361444270364\n8786018652768675219\n1411997003204744557\n2613084265826226277\n7250459083367898638\n11186063709961329089\n5666696133068840761\n12497026230158285587\n867564606418552235\n7183132720768330406\n4090340031680931612\n2297959799410918323\n14415532778285524572\n9896650173659177566\n14269916324343021497\n2016325601178621311\n4489571072378792868\n1943180997287680583\n7494724040013078302\n10769514588858576210\n6988542671642370339\n17813639287380391059\n12397922701290113610\n3249396640697447934\n5492732900001012553\n600397655284579245\n214658138657632158\n1742717430606491174\n18315955369010127447\n12293214251941700077\n12777029727273631668\n12816735007246114063\n10319727095021519656\n17424628495413966125\n3959233640426754659\n272134541643492675\n14503739627470593892\n5279570138299817821\n13593658077513580200\n11406510695394272491\n2389992823041645015\n15378902168715339342\n13592915991394743290\n17542582883120954292\n14044965209459505306\n6155148301333638285\n14034574577135260281\n6720081779873394801\n662005419121184425\n820674564903005788\n16416299932856122186\n590717246287068433\n9284263414620568874\n5980609627654808753\n817777291349821067\n11203909666672548420\n8151501923515940300\n14581736440664115674\n13948831231765767447\n15219046474377472076\n4646765567637491969\n9190471769779616479\n7974845719245986671\n1945660807088431391\n18361097570081996804\n11979548496708421187\n17209087404859916881\n883916516479529660\n11081350876463608532\n15417790537774057605\n2620380960756548565\n7329069364698401978\n4043057359313445857\n13422370819996381853\n12725758190825837438\n12390729229778865134\n1052754703044431548\n2973985157162810301\n8119688599277992869\n10917796770449042194\n780904811740387387\n9463124009118975077\n6397209653570913942\n7729138404998930622\n10391680017540618200\n4489347248659953973\n10103526973492423554\n14354432891220351373\n2627166013404290836\n2165272267250816694\n8177961663764953648\n18357026283180655571\n4229842765633907116\n15877153087375226742\n6622559692868025677\n7561776472028661460\n10114088402330915736\n17119764970377772659\n17692045301890089805\n1809716112258276682\n8153894098984316060\n1192186855479095212\n4110465924077370185\n288898209695906711\n14776227901155523473\n11551077775707455770\n5114625486228116199\n5900095196605673235\n1090144127723340532\n11683440345011347673\n2434725237810954539\n18336431663595121813\n604240182522058864\n14124511157584395193\n11749155300605164969\n14526361551111787837\n10775363126933173296\n9611163979627974061\n9382904477910064155\n1266532379294372943\n9376185847160975718\n2760766335852137851\n3760178023892005476\n12166278770698579883\n17347104480046826261\n4362312686177264393\n14373362004585471101\n7983035533789135374\n6020012777590964501\n5208656377958519747\n3453776001711752753\n18279975532644681578\n4639576564983321485\n14124511157584395193\n11980486626243279433\n15169800947848728731\n586828230045031042\n8853234077212283437\n11396872785547567976\n2634181761217264461\n5523617911862063074\n8496816113633962812\n18306775534248535057\n16392904448435436724\n17889322578769838552\n12841171610707828664\n5273276641844336309\n11390273655631067182\n6722560943258296200\n5212415694590147160\n15790888908179783900\n4272009302505594064\n6209283850697778919\n8705586278068914176\n17032571044101509677\n12428865162550767193\n13325704297009037389\n12996989310674542588\n10387945110175428743\n2645281137428193371\n8642887215113259819\n4207040649719514736\n816297177277304268\n6353481047897734839\n13771417609672564430\n16451260958017400398\n6804518432107133925\n7912879029739607489\n11397346817224246597\n673827205796992742\n13639940075507717903\n9876686052286990861\n4034868466986288354\n16434412413422510857\n7667613009114430331\n8318906343061856983\n4423256736472859288\n9702535204140748434\n9756026954375739818\n2184135433622060294\n2506974844848596964\n15740760596249583637\n3837191031535451551\n17634897724826735674\n5300388162591909345\n5588443823488364551\n2886019839003976608\n60103094028234583\n16920009930614719358\n1688245600343488646\n16659313059727896049\n15991067981007532397\n15713190934814665445\n14293789418279334280\n16181105402962622441\n10540277260419469877\n12615461118050909381\n17746069107121266122\n18062444972703115013\n16794210386497464748\n8806924739730872434\n12081719786244465569\n11035619823854804794\n12807890093253221212\n5324770870374892623\n11319184956969687362\n16586989575946600270\n27104746048536209\n12188169052241926737\n8912728374977329894\n7183377334048591107\n18025335770451507917\n12288039374110578955\n17845975553251788777\n18181351776445945798\n13382457870491111366\n12658140133656837039\n15288008850310671011\n5708073435259288420\n4586333965747321288\n6077874994014072119\n18171415951758256394\n17049223822914444091\n8688014510776635234\n8938191624230758588\n8002447439987945265\n16812837547323916972\n1964862429697108478\n16083162754862717587\n13585097909484760993\n14249220499901101130\n16246327816209460960\n3563516727063394358\n4543885464626414615\n11203934204009565331\n1377520943176391543\n9773340101353060978\n653753437874553937\n6826707686342533194\n9015849370085649417\n782338023464927009\n15996724785536473429\n6068943461510332849\n1060222041514094069\n15500945055121892125\n17637213212753499417\n2479735589994161741\n15064335762087083198\n11764819637412851189\n11898908890482033189\n10453286109126202563\n17893886754884802689\n17407845961264553339\n7915299469312974710\n5263329705519782626\n778648917975764398\n16148421260739053955\n11122851558244947619\n10577377851437954198\n2092167525858979776\n12179248795063871122\n7902155618953046362\n9854259351320410952\n17658740728263722912\n15658857434041260229\n7195729417820548366\n9421049366985140142\n11878404968137846341\n4385420863843488134\n3899227554840530347\n4099301570338478451\n13574191639572684753\n16780397428017764187\n17914306008230921065\n15578082582494887480\n8447142480567747325\n8916557679176799471\n12131902954220033314\n8791135087270497909\n6489101095435572766\n8027961131373659147\n4734594634968459837\n12276989090548484198\n12517786282526727982\n5463070576061934336\n7159358110535689756\n14893632222060479042\n18216398791695355099\n1472145496001941300\n3592203068441707994\n15521969817318814856\n1875385436725233013\n17632286840970811874\n18108774054326760056\n17889322578769838552\n8604202478180469188\n15013305801768332839\n12274073079362430587\n5716983583095821729\n8488828994353338291\n1147253370324508047\n9961178299673568944\n15413067136704094191\n2260217546573200561\n15039705479864020326\n4699659876842061539\n11617003454324258394\n17334860748482313002\n10565384259640306457\n15583934422841414104\n8585789861148053530\n8906422282574636645\n5530527800944504429\n16718352774394670922\n7170571168515454878\n1473343888263898834\n16585096623815012822\n9995154461739024673\n450729363969854434\n16644948457425101404\n11790248140749946384\n16598344418158273487\n1933448236108484970\n916469602189900154\n18390429101206408266\n11153600814492868063\n5029694100237700764\n17566289948335664214\n234625712345446624\n15369315923801312514\n5320989141356050197\n14569899006533016843\n18137071942986711025\n4548266216690343144\n2742712755346320771\n3814847370826333592\n12076850203733776848\n9725244413069938539\n8814530002695525361\n4724296927401197698\n1444246078572181366\n8169691076395815236\n15000283250577207255\n3169366315812375468\n14224106253515697472\n864903446903634416\n3179270337435780768\n9808587120656599571\n4039930203221884183\n5500231997300688249\n7004101832173722295\n11028909983171567388\n7173295645615708784\n1843120237623676726\n17642075551665612273\n7481385770532843612\n5525613250021418370\n17383188700172509608\n7495416354739641055\n8170537887805590803\n14969611448191205722\n2057702766725736311\n15684000520594586829\n198766119444944453\n9738656325197907844\n12799233829644495146\n7851870573387166569\n7903335037371553817\n6615509269635389442\n15507795363818675304\n16833021857572510313\n5873586578102018394\n12893861629602872300\n6380064890869642206\n13580343264528829243\n5395044601570540323\n4353264372900294922\n17490855092579549337\n14797164258751282284\n6784977313737215110\n6453481834740376307\n5297467944348431938\n13282509254857194078\n6463419096957538907\n15396232559441446302\n9496959961179498364\n5600705314673517365\n12295434656830794158\n7870898529294422048\n8150102160658160807\n17082370171612178716\n18215167286919466252\n12705009090110291340\n15604950558287921753\n10744788657857952671\n7255872248027574713\n11429710202003871931\n7455413184103858257\n14465933479260410803\n10877510031951812181\n12831001600514528290\n14502929161395031750\n6901659494050096846\n15398599001871438830\n10408725551772525110\n4385014454822579458\n11326218193575048835\n8592546673661161050\n3247734453569709391\n7060278089261329542\n18184308334999147405\n6154838719427762102\n11485537579616873215\n9237767717267388661\n5545288732787033973\n4559799160912380312\n5972089473780190260\n1566098383240954159\n15207904499948040585\n1423717141711629440\n14391212889525512654\n16271536396256619057\n3651688808036516642\n14506593980464609523\n1377520943176391543\n3812417007566063356\n6058069991754982617\n13831153808673942769\n9973613144726195558\n7488265933715789460\n2732921478918790857\n6860167366671430189\n8960034619844886310\n2634181761217264461\n11524702940631757733\n5136219164953516216\n1847682884987902627\n15550011835210183208\n8759254214789946136\n1973641937996106997\n11054035825864201457\n15510424436316005573\n4103065713697417353\n1511395344330092641\n469672818808383519\n9266596645712304320\n14631042198817209836\n1301994740177647943\n12079170567822919916\n7841351359146263547\n8990767101803890709\n17948484948391727708\n1333880128053293032\n9071745462843048925\n16586987278817766300\n78373184045552940\n2388331210025009110\n6296327054102038073\n6473797416049992559\n10844707362787706064\n14067759288408040596\n10112530729623871010\n6026506612199191576\n8081386764630911759\n508928605306302012\n7951332641173246396\n13815155635020780874\n2082945624487382688\n8512665484535224142\n13552622122711577141\n15813773306574163116\n17968300843926321665\n4274477716847058967\n13249281100856440157\n16470470271223906519\n14134283809306450212\n4207393730752449755\n6353053920054809116\n1842018383418175181\n11399502846625638277\n654366137796070848\n4216242094756617677\n7139645097696410580\n9198590746726727074\n10622404045510891866\n8441484017374330267\n16748500380356833397\n12218173938189266706\n1606872545751564053\n17455987166046900804\n16970642015135608608\n8869942675350372099\n7773463995751914577\n1461468821250923955\n13602042068822214171\n11362883001244678502\n14489353657341508737\n15583934422841414104\n9252768995788316778\n10424197249937472808\n9517932671247342288\n8492468651615996755\n15957007361971497821\n15330736436888183789\n2833328863352206352\n7619186955445735456\n12452098796274073136\n12510880129453671922\n190504467300062359\n8719434445736397435\n15805220692987536484\n10227644357598620117\n16002313452140362456\n12459074229353052804\n5443559958527265653\n16930309904130160978\n8262540799478534935\n17697377431359526622\n12709485539972876193\n15129252540389849303\n3832960521714447936\n940326307808704675\n1112214841729776845\n4167604582060077253\n14815623302813519254\n10058717087588405268\n1519810034090296428\n7663235690398655746\n16138081286417644310\n16222045679908956370\n15126494745977600676\n2951659237279157528\n17157728202372861152\n2679807911083396327\n8142189285311104340\n5472932564194080246\n11039416365543337016\n12194021739258782189\n12679726094857758958\n10245645146438931695\n17999953578554427290\n16916122283576947672\n4229842765633907116\n1144192106037615633\n10718250170270922716\n15819138558812136443\n4383957575261253076\n13495937803186745705\n5175828085728846503\n1575489164116386350\n12341442147218757741\n12670511146499990540\n7643784810354162396\n8029609175185136385\n8264181885406180174\n14689364173020966374\n10903147405106503138\n2965700017623320296\n16487073453023119078\n758303140366886461\n15479833568004092116\n5900592184648736695\n11792263490447594121\n17198190317173296096\n15231454395938292260\n2158536660700752786\n6548375822987790512\n3653856605360686745\n7497010324452162069\n12987671980611161028\n17219931108594355168\n12924506829872731008\n17333182863595378752\n17494327061612960889\n2886019839003976608\n827692832812652447\n4869813342069630205\n5606201882848408185\n17347901168713998211\n13326560720949812642\n1255564082601479582\n9219760975745355684\n12212791721401898948\n578400299946775324\n6370072360418110608\n14395708493680358310\n12076229949683103861\n5159659810247501753\n11511927148543241228\n12195857714828538225\n7670421984914774491\n10419698507465224410\n950054442372368947\n14112790059305455933\n2327991544943967958\n12352258680650510933\n15013379994199472234\n15487629072338719917\n10417071544615532083\n12658140133656837039\n2962201590828145906\n14233944932985874614\n259589737888624650\n17979405256454590054\n7717660152339441436\n16262464438846889766\n15475797177756651397\n8801258974376178118\n16478273695886225813\n13688461552626486477\n8741783846304410661\n7663235690398655746\n10569249326017119002\n9793514150673686692\n2146748864362977110\n17214168002765959272\n6077477235322659087\n4552466138091182253\n18010391343853483111\n13788035388819887022\n4408912438835695389\n2201419911584797162\n14966474208724520555\n7079734399400703284\n18325359612174341659\n11495629679389284488\n15371198915216587257\n1661007502798918651\n10935489849472750858\n10209233927386182114\n14571367656542253972\n7473709951812085859\n8318906343061856983\n259589737888624650\n4019802448792317193\n941161271987729062\n6686677032490914821\n5031943597874722642\n8025442911750220523\n365826929835816828\n7265539956140968405\n1792400941091005516\n11859800528028220648\n10897714746892516378\n11502406820226341996\n2806644836848067481\n17057483671320237269\n5909733712018232000\n14190353586429932355\n12166636387082010873\n4493420532691612648\n7934953911194791636\n8449206541294457674\n5630329414182264951\n709508449721551014\n6288608847115893246\n15094208261708531360\n6343027703952613839\n5062626774209017793\n16814236562019112111\n5186102447326419534\n4247190912074276721\n3771590434199789685\n1335720592351261152\n17723705182063702403\n12892778920160368729\n257043517957404139\n4795159809025858630\n424542649098499756\n12299115522411630855\n9329964963345667725\n5196190226930053062\n3617520081613972825\n9495260365858183339\n9753464553891173347\n74856087341976062\n14485241613554276399\n7357147142255019481\n14387761630868062324\n13824482133835821353\n4260848219847154851\n4734594634968459837\n11512794531243297075\n74856087341976062\n614659723942486928\n18103370070457514620\n2402537027979371717\n3717218550291891076\n18132710663640715607\n8512665484535224142\n1676427826329432673\n1531363635269150070\n1538908262301420955\n4660076301591461092\n11891744225737687935\n7668700683664630999\n8605269687476909592\n3550944498375316902\n12298571110350176794\n17374647064134847725\n10929488199040174128\n1687769384815721267\n15332829237808952655\n2255252283307716764\n5525613250021418370\n7296569774031428515\n5090493491333729939\n15011621973504756341\n16948330219183509481\n10545901901812467159\n14195416639069031743\n6524082018787742580\n12510880129453671922\n3426509293521548346\n14010749700121057331\n8747386085748184538\n6818513616184007308\n11429710202003871931\n18296979269524857278\n11570991269406455432\n17738495843113833006\n13834712279797741037\n1149117671025937406\n15661336660437108280\n5674710626938989390\n2361591654721039353\n7134006060039176042\n16222684608956491300\n12340714501123494459\n11903314814633334561\n9590612130434450319\n9058679712350666489\n6267940595430876644\n13332245968661577871\n5064375573165596099\n15596813912960889455\n1058217644979076675\n6690520061822491789\n17813863307468563132\n11295542998692630862\n8854063887338644979\n6479741063082408437\n14033584593459416265\n13221189312077445404\n1311938770739307514\n12666649304817034567\n8737105576138085752\n7022110813575161313\n2524123203589766817\n13133743068787173807\n560012088837029921\n12719089239576022837\n11814227964371591164\n3412396136468935027\n7861476745287244552\n5719723481911332960\n2769884254693043541\n14898963019561248465\n2159327980056111634\n3894160308267714274\n4660855856512690282\n16745572189097779838\n744632239674003010\n7006258969054498232\n14806967747757106581\n6750361046578653705\n13162306092663059638\n17898100178449709307\n1578087279663329436\n572561136045458605\n14345899562572391312\n1712312205850969504\n13490104468656191393\n18171415951758256394\n2571925046497619347\n16807890743574635906\n11011996268955922955\n15453253599430006417\n2697332232564800576\n17655574446364468167\n17654630781937901948\n14190353586429932355\n16568703547953136225\n9610173016149497470\n9575951772433734944\n4855320214082457607\n7695566340613629895\n8489747303646286514\n8110248136139436409\n829992291057935214\n11886345927869244130\n8161319495806156410\n8205131891913364924\n15507795363818675304\n4180136690893961756\n14655406003416198376\n16152775583530296516\n7110606169110564283\n14261413424768251132\n11941129771006520831\n9181925433223300107\n838670693346738263\n13049567544305918904\n1948438287868480047\n654366137796070848\n4308860760605619433\n10127341150644473684\n9816478060777193365\n5114051058207735187\n2022130137286221515\n9452721029332986678\n13796661826674167297\n7604942233184161623\n2026613260516377959\n17611568085358918462\n15099917330412115428\n13065732540110549474\n7140110483994167741\n8230065078784056685\n12341485368056500120\n11750587890679756992\n1521055016847978194\n8153427910126504076\n1950770133251997745\n12301048493360262365\n10701340825152801376\n17611568085358918462\n7152737482556912856\n13796661826674167297\n6181139464735538763\n8862985398296939983\n5246425368513784189\n8432281160725374598\n10291635553276897686\n3925675780616390764\n14369173278124497704\n4980269500019710894\n873538510669467491\n7319025258497963116\n14669944664824890788\n16237331527075201928\n383783193612254719\n9710663961130500459\n17623988552885978535\n14532903576941658685\n18129673584999825485\n7105846862229384010\n6784194572818836922\n11462466285272864414\n12014479835593329519\n7342036791644258086\n14526622906084138440\n16356010412078414565\n16987835578067638887\n14748754861813812906\n18216398791695355099\n6933307286875848101\n6165092910963791560\n8166646371454166180\n2585597754941305238\n6889594347208677572\n14918536733724761778\n12557328656098128088\n12983038325291229899\n7506202300330124786\n15995511362175807855\n13727298538026899341\n15336519928397899615\n11950179613537227096\n1313920798537885406\n13352129943664748750\n4508813324017092651\n12511292663222604266\n17200379783766073156\n12394388580124556441\n5502306080318434042\n3962438146473236610\n9677014516042720923\n7999819356695774915\n995862214242104773\n14466651074602455175\n7114807358339177827\n10877394929135103235\n17642068816317438247\n565248401543662929\n16355387331224905205\n18285928163877505683\n17655316335618222109\n1807403019030112353\n17143549519018304482\n2587519891525349550\n8864832226496750235\n6704027661204345052\n12814438266383364412\n2272311607224654434\n4207393730752449755\n14976972871771170484\n29846174210578563\n14808478384434778000\n1179232646059767530\n235150937242017780\n3932493674606402124\n861920589491070992\n4644816815802358373\n5735562427047128451\n1809716112258276682\n12330415748205679277\n8719311181499350704\n11710768133752362957\n11914705239687305488\n8345398642441940452\n9049626501851492219\n8265631910345230565\n9305628866009374319\n7095157514230007354\n15026323203569137831\n10117143021722523293\n14813738382071115824\n7257563953663619094\n10483567304417483745\n1059954108483256056\n15228775613129702455\n9520566171229515221\n16816774630777509720\n1303141880137298405\n2991497348916567725\n10444093549893437592\n7670595039858430707\n7788648001714133912\n3178146088567683882\n18319529704495169709\n4845944021122635795\n17330403580344403408\n12306373272520506258\n9110576934218113337\n2580941834681335861\n4228544887175229456\n9454395067162810880\n9808587120656599571\n4391725488681149407\n17603420844651942046\n3488197537979356076\n17654866536305984476\n15281169583812838514\n11397346817224246597\n3951813454343586833\n6200371096105873637\n16922817131227610817\n9923764191142170799\n15873522692054446469\n12500156889088844844\n11759745253208062992\n10132769335119620657\n3264358861105019574\n14990399760536082727\n7896577301731332969\n2675751360436337775\n1631802981345493243\n11836705649202839969\n4836341284872417237\n10150793513467045024\n5132537937552367562\n4975536052112479884\n12218173938189266706\n8092850033945708645\n10917796770449042194\n3738864490560531419\n8221628949222249594\n14451160557422174074\n3149646304768529748\n16428612873602364324\n3279565434898422376\n13831153808673942769\n13626897752777960414\n7910174782499619039\n10769514588858576210\n1657018632967423687\n15028554408604218719\n14322261428355283222\n17115128709019444281\n11849133039051974839\n9302372111393202709\n11285633147187790272\n8686872851007783966\n1071408327801993224\n9329964963345667725\n7913232728608968046\n13545211032508856246\n8796447306099745300\n5892203360031352826\n1950770133251997745\n18358168676207962279\n2021522480297685858\n18279916234267649144\n12883227476141420584\n16729323486609451559\n2738220855250191876\n12071084022751124542\n14928968839586834300\n17413841230803220592\n12354998875375466969\n360686790572558201\n11414976040007859545\n9879913124484104148\n1897964240990093681\n10090133793711552357\n11891744225737687935\n17997221351517729130\n5955105497783333255\n13249281100856440157\n3215960192784356718\n13659955540385927809\n11872099633003010278\n14665777007907341569\n257462627092871823\n17504202150903886846\n574595321930660084\n17490257661653706234\n14262418138109560951\n10288720937597671053\n760277915578640256\n7717660152339441436\n17497349335269309562\n13205410394390705569\n4823673097612323170\n17056973137446098996\n6039950632951157952\n12948596384794058555\n12158252462331329069\n15374233552824202207\n12562691581818055995\n10228135712326246961\n11784041308899377530\n2491019752651238608\n11425355692736676184\n4488734793195029639\n15273607316104336557\n12341442147218757741\n13622047199682437098\n644534565861485845\n12344030367114135356\n7529769116866071661\n15156028268215123203\n10088199924069210029\n11435863156228945456\n10202752833523241255\n14796812977425650076\n15103392826420048367\n2563044355685003261\n16931536250557669513\n9659043904728439496\n11358099197502606649\n3357294339798931394\n13739526827667511258\n14614782388939189870\n14936300194511852632\n10413054711571816245\n17685157064860738865\n17157728202372861152\n1048861480725927086\n10333418998884539720\n916469602189900154\n16236714333080007537\n3877236967032034787\n4791304164880444912\n13605403550382313983\n10873600947130844524\n1072247865216082660\n16870878755181161450\n15483541068406524563\n6060906922509959278\n18319942498287860537\n426843250260881410\n17714078261881525852\n2742712755346320771\n9882121875480982403\n14388808890198899293\n6401526899110416173\n8911523991552305381\n18297515897727348493\n3952983114381937054\n11579351208539335203\n18377097296409235128\n15949190075229291571\n17918062291146793748\n116042522893858659\n10614208796838435112\n10766041007385179921\n1428517844340809427\n12413244037653872094\n16619862902662175495\n709235337894404149\n15411144935954941822\n16728451855766871667\n10972673465776991262\n8873432876878377085\n11338385057294922554\n17233327700434298091\n10113523182426872093\n10632900906055209895\n18443590770376662585\n7797963945821124711\n6929880455750337214\n15699309156964911116\n15291511466960101988\n7718354054170427160\n12293214251941700077\n410505197199568472\n11768289295826511467\n3632061151844301893\n15334118545543101721\n2340818024100810804\n12317891137496144190\n5093280401571969483\n4088967401241053334\n5609359169354905467\n4228544887175229456\n705366248570263971\n12211317968142291713\n11651027803099351148\n3949853070899198363\n7802232855195446498\n7447662333165328619\n14205437203092917815\n14399656994087200381\n4514803504862002513\n5006955395654200223\n14551216212042796237\n4088231166382786829\n6956673309748871683\n17288472713484924476\n16586617470298172007\n7596640047143064929\n10569249326017119002\n4249441400236236417\n3772307418283534972\n7613242356210034453\n549539981845818156\n5767259487684402946\n536691103473012794\n17902111734488963559\n2439895001630305840\n12442474693810335567\n9611205661388584909\n17673852375929933209\n13121188592175984711\n11886910792138825300\n16977600732255672457\n5714042315870326473\n13563957296597228045\n15282987536581000092\n14112790059305455933\n14449786618238918627\n2428810504115701282\n1140020682076943646\n11173033799466440050\n2104715584355237645\n15838886960453594614\n14335193942807415369\n3437949862337393550\n6427156811143104054\n2853576325352904456\n1680466048819422741\n9143770405345272894\n8693075474006011293\n6154553378625845196\n5321402294482326914\n195547858366595594\n1313920798537885406\n17249254672450198492\n8216375417494315262\n11726696793219844580\n6535235301430598899\n4670862168464331049\n13234764918538536821\n13041044288223589876\n9727858156037752399\n14571548280605181228\n9168291398942350718\n416723215079966562\n14925525630021726088\n121044502754784419\n8853234077212283437\n4454456623747812239\n10535763134470275117\n11445234484708126026\n13113130542976541483\n14276510743474683052\n5802295692528552853\n7999346850142884226\n16571393886478076804\n2532499984570475671\n16744012281411108904\n8690999696909540756\n6151815287161386786\n8689403801046505872\n15096436164577985503\n10474780658966194054\n16898247461900430566\n753000771350930851\n7153719026325935522\n8994171811420445626\n6151318954002800391\n17700472086574207078\n5447766120181255420\n11701885565704637729\n3682709437633383413\n18212053352386343635\n5681310480988011732\n17814926375094318655\n12037160098346246090\n16149029566654496668\n17012647053457982690\n7766011655330222034\n3253324916058487109\n13013206546368054565\n3097324847495193970\n2630023154112595792\n1922995864265558017\n4551162437651168818\n9284328161140791819\n9022435986355428781\n13889380295782680862\n6160314477508461014\n18165742392311553205\n17837515813408009721\n15192875013526850836\n1324292838738405048\n3570717173612222314\n8667075353567510180\n14775127605269414518\n2975862790175518183\n9626584088415905802\n15629136823046646751\n14451450700683398144\n9365645834398488085\n3338698547389676478\n15034244668586636805\n10918977730648007986\n2976238452082949403\n15632708747444274604\n16102364211399164003\n10249055030817011899\n10230684179534865413\n11925235733194816930\n5121988962387618031\n9168291398942350718\n12627624302095767411\n18403898968713802690\n4459876873388523898\n5869017122790966787\n15159255335150670839\n17199688195429180740\n4066136916983962833\n16016645509241507917\n5824607467466632327\n11699916884094843837\n18378007497717003174\n919485394379794773\n9155992571854279158\n5310528541435354355\n12525394028503644060\n9912350475397535267\n12295589613577500268\n8358298414045961326\n9936334659209192538\n10220936406614071486\n618861411029675699\n9570502987207972543\n5539030146264293868\n4239405413129793045\n4237679888974286573\n3286828729596354521\n930850900585171713\n9997035832768610678\n2726006431185189543\n13368408615484844881\n10958354870780029221\n1916802325354297403\n11216554765928891673\n12849495600361085295\n18061131552593236438\n37277171649934582\n17388958888799198625\n13840689949437666635\n4297232453938085476\n5609359169354905467\n17911728816476182984\n9996070503902863634\n16146448014353717726\n6837398743538591866\n7682260057788983725\n7245597895960439390\n1197048576682059035\n10704968641662560831\n3623651457841806502\n14415759278764699999\n17978421961682045423\n14208029508791759532\n6593919290564588438\n16357978367359789271\n16466512873763955112\n6901687108966333208\n6296327054102038073\n4668776297851826084\n6683321754165468093\n14778331508638284751\n8709037053932991760\n6395847532377723924\n12061822280278777468\n6034142651429273579\n17489082019226618945\n10342288778698816425\n17261869088524945807\n17720397853982998870\n4977237561352848608\n10244192098775740627\n13612185140968392342\n3473407937870053381\n5887625937116514243\n13245662954029787742\n3156710303120926555\n2930802555488661285\n12305939457772132329\n10189216971235219510\n9961178299673568944\n6095252830423230767\n9480989970909963742\n14951836327324321219\n7651832671587611515\n10701340825152801376\n17858978171195706231\n7533520614741173336\n3540386883307464674\n16133102665499692787\n17740058157839988844\n15645572434855274878\n8028052587229879328\n5982887510608644252\n8806924739730872434\n15552802387112849369\n15974070985455002054\n2133663414761572977\n2809233327648276382\n490353539467897084\n11314294525413300355\n16076878044219458975\n5390259982931940909\n7760375821793613761\n14023931972741063647\n12135096788828186985\n2503819558478638485\n6525916093790466701\n3580903147364113701\n1948438287868480047\n16887177735453792895\n2056309640419992736\n9971185349380676064\n16977252967569621244\n389470311632065687\n3930809096266454522\n16301833091503744130\n4383495355007067672\n6852346512869396809\n14360143506324531482\n14817137441965382565\n13648976627098023645\n17634897724826735674\n13193653977804209447\n8325595684605605393\n6926751010394930797\n14720689508779893570\n7724392241536295685\n8543548004891483350\n15966512694157726381\n4827804292069643638\n1461473817807721665\n17219908860198389217\n8042049423437581436\n13837836194805252589\n13338379816534760061\n2769730324371317650\n4418319017415467162\n12344030367114135356\n4479293553035526992\n346124564162900118\n11553181727748756095\n15322941142896639460\n5292319788015843344\n709753328828054666\n16993861307438800611\n17048549344075133096\n15270673067450636960\n1888620282999246478\n14743547003603058202\n15930635321553945249\n13836391347649410211\n12516834582864958882\n14727917100344618111\n16517337784579347032\n59457088832460229\n4493617426658162205\n18119965451281684568\n11108604271732883327\n13919074969611486900\n10133884076933829204\n1149117671025937406\n16999068618870018321\n16353090438930582168\n3932493674606402124\n3945652145020771591\n17391698704831873323\n17580638574022347982\n5045571349998545204\n2627166013404290836\n5997292517765696676\n185435789904403918\n5599706262051671184\n9437135190722877651\n2616972167975177612\n10603333807958135684\n17409186057068771720\n15272737668889922569\n5997701082948934967\n15872275019937586435\n3455335075453331293\n11755062424194605579\n12647177030484371149\n12533245090045718541\n17318181941821290282\n2439895001630305840\n2450087513924848413\n5684209831490739499\n11295542998692630862\n2616972167975177612\n4667340211623342011\n12023930827029851744\n261904651984186376\n6586992490072295025\n13321644741314492329\n14167384037897645175\n7967350634513585378\n7470469666827243263\n10363601900285996314\n9318668059385687693\n7172319088834238611\n3246889023590643715\n2520362297394238683\n11975164022522405089\n12352585507759811926\n2973985157162810301\n15543825018284298336\n16265742457386703528\n12476682556982830438\n16100221755241662546\n8856864437352204000\n2990054225492457674\n7323951906155175486\n5426502467923840445\n402743822560152078\n10239495723577053158\n274044254103445842\n9506090870801383717\n7627285697847441203\n1621986658238822084\n4922684417663384077\n17993499322133765917\n6480349910456748899\n18169341122137723835\n4606093462953809932\n10379006167218763241\n7500841792531274335\n17777648987796919462\n9060237507415631696\n11559732537337104523\n3809317249901373579\n16987835578067638887\n3315386220178631415\n4337703199552336954\n3938226500179077804\n14924533651107974524\n13565601606532913107\n1718083468079861944\n7340130423707145201\n8027961131373659147\n9193192433659398851\n18095133771843780745\n11983205449713074356\n1096730130432804805\n15406074692571026126\n11708033982652329072\n14021044691340681190\n10829632665739079431\n16043244962178410443\n18443590770376662585\n15335691527016303642\n6963593911325124166\n10399364825148220954\n12580146551295535853\n6889341150547674183\n15283488819502801833\n18113542375490023948\n4373271299671787748\n14196805007953532473\n15202384521960613216\n13465312328179724067\n10920064304920925661\n4878612453486593690\n13618309028010174670\n8449607457404901853\n7805684416058489191\n1381774393702146791\n4606600341973833160\n4842376440728697957\n14898963019561248465\n403052356729441050\n947664526728353433\n10259956859046183648\n12199219216106151039\n3208686345392172939\n12249948064289974838\n18237010196698423178\n2570811463466989155\n5986109257949779929\n8552381190508250055\n7372899210150974296\n12173109620292099941\n9706314549487535372\n11347465691270291885\n12386721006595518659\n2705884807167763414\n14770502669213815317\n10228404431820357215\n15579557726442912962\n6919169290888527793\n13998270066656018139\n596974279392080723\n10694052875111452653\n12934098663146727634\n12422064117466429464\n8018433515099470758\n7487313815518969274\n5750252657824586609\n14439268928714517382\n9663972837549081125\n13978143562634439342\n15372831655794327203\n6760435163430073280\n17225399245216118698\n11045248364179798475\n15949190075229291571\n18233817344066659982\n12849495600361085295\n1018065599694424677\n7717469035708732536\n15958802952230303427\n5812479041551209186\n7014316911741210583\n4585486412012033982\n6740874091206387414\n12784361423133621489\n4630876459419428174\n778390164297183189\n17927965216564072128\n6547334925566381101\n9810492673269563482\n212903338124053408\n5243772753411786961\n7173611105342758699\n5407657570805057681\n9354446601682472456\n10204735423695985679\n15775489029121750190\n16632315842655594400\n1904039380306116752\n11570991269406455432\n10245894916771624615\n13041044288223589876\n8631311256431973519\n11979299285629611757\n10331798395749744002\n5175828085728846503\n716827667225358311\n5567424296037504009\n17953919156220984198\n17534728711589294793\n129449907865176938\n906201702538329472\n210298025280192070\n1487812168583683876\n4975877360858412059\n4663679991573231059\n479370227719941838\n2556494761266177903\n8656516121895738936\n4351967853406158102\n12873735784055312675\n15049528716160704157\n12075150532326025199\n5683823632899809458\n16749791066753485653\n4430670649573752653\n14124054272376284484\n12852392517573641942\n336418738303871061\n15425275372341921482\n14585003882375648294\n5028790979768877595\n13014780788566459630\n5091211906645214560\n6100680014138224812\n11595637194258663013\n888532550166998647\n4026913253961275091\n11479730326014413149\n14810970791399796513\n7610198665592558342\n13356117318120935013\n3050354561028993695\n3551685830889102154\n8318413465938013778\n17137372435695804114\n542873641573958456\n17602034077108965929\n1918913528551420733\n10160861976603944151\n10844707362787706064\n11560089600436303063\n11218866860512751646\n17961911377943218723\n13915315579177206521\n12926801579615731260\n4468223090592895727\n17261175926241187460\n16417524146843526359\n12118972883016213353\n12873824858122949632\n18160694763507143527\n4971717915030501275\n6641424048404259640\n1889488703126046570\n3763199126755148\n12536453489399284843\n16572290095526714986\n10219880449583066616\n3488197537979356076\n17937135854462649907\n9184648803263461704\n11151263715525598417\n12244204631272143543\n18306772163271390226\n13061383542318963748\n17522889552213995805\n5305644102542937210\n15261829055622890589\n14744266065692831824\n17669730369211330609\n15208260185248549322\n1688245600343488646\n8317775897571659243\n14040978493580428458\n4527600196134204539\n5683823632899809458\n1357509491414940652\n2611886560488424582\n4070496987383466131\n7288028370420152422\n14815281056459713856\n15166730302875937903\n12480701096482720487\n2521227361183014489\n13277493207582784856\n13488346887491591034\n4805924069665033753\n14346440503140738051\n3544112126485601363\n6964318541196995988\n4321229790929420047\n15360775030754827004\n4954333366094117596\n1243270429867992143\n16875518386411901929\n11807619717514062124\n11495388435296765244\n16822959352464116832\n117458432396962726\n1312756051026894863\n15321442013707227568\n4728449056412339571\n4428850940990886266\n914307451138080621\n13969552714920292093\n9927094618907441362\n6849009868913338175\n11768959894277929899\n9793656148793618165\n12816055010883165687\n8648011225207315649\n7400534942451691680\n15178925852118503531\n331293919312054420\n12976448462008297983\n3156710303120926555\n13530049907899097656\n16381185354067302999\n9054381748240666157\n8456616635720922504\n3575240604181727365\n11789344193592869712\n641857896247757051\n12500156889088844844\n3004771364710990478\n17282783904814171380\n13878647307054236754\n242306196331976383\n4699938055280436093\n12409307469426949965\n3866213612773535109\n10678569901931303295\n517197483647225279\n13967418419441605583\n2763065041767084758\n9229017207603602318\n7534021464850191217\n17496583270845040562\n17261175926241187460\n2570811463466989155\n13744406523179921275\n2714205010864508061\n1221709548221479421\n11898908890482033189\n6931725325389895035\n12199941114162471924\n3278119694089950064\n4769616916701037928\n10021243212470526660\n8172223558737478663\n15977144533299735152\n2370946172977930634\n1145053081623077428\n5700844870655777851\n14957430250160798534\n6606558634027279985\n4481779905582626018\n1112640935850922288\n12716650189675106998\n344884325672966321\n14333120866547137855\n4413637828165196896\n2538100561338832394\n6127160028243281900\n14032766436799077928\n9405879101151727746\n14575317824854100088\n14815281056459713856\n15198262113139010004\n9575418880108652688\n17720130798375920583\n16314763041941254268\n151132968411967266\n4486348632234964235\n10829632665739079431\n13513257877715340036\n7426792532321323769\n9498538174466269503\n13281600116066790705\n10363027308290038053\n4649880856783137489\n7170571168515454878\n16310247639532296418\n8846049892774005508\n3578710800407030524\n8161103853732122671\n14156088754035226735\n4261285864270394832\n8801642904302304440\n2329412438377287334\n15735374530985093880\n17491313468969512962\n12474888395822257522\n16663979070055085447\n10102503248545132473\n14139951432510854812\n11075954436559359016\n17578436902288890847\n2191276167294980494\n649090718333193560\n3500065645552044590\n5006372962297445970\n16860290073028352632\n14247625159725837914\n2554276646743822772\n15073749706881379341\n17280782918983563511\n1174407866668015805\n15543825018284298336\n9562458680874920363\n797306458585202507\n1783281831918361798\n7152308972898953030\n18063066788374699187\n8055324425058806299\n16215829200840232844\n9455109280293568371\n12459552429327222773\n10014913888039553743\n14826273853993540021\n15059641767300108851\n9280358392389889230\n17491563904055019698\n7533520614741173336\n13411286464180226271\n12291803725715974759\n311667771716678195\n2853576325352904456\n8254962176492324863\n12654733061261443314\n13388683833883542265\n541797045997302752\n7332431759578467882\n14313059588707290773\n16763255236945979361\n13127717189686002629\n5733843279366035554\n632451256953815892\n6295430381552207365\n15273308928307019961\n5556522312931843387\n13530229950554085157\n9349058405055653357\n18042731715024616609\n7653034326917159575\n8377307823670377649\n3565372083949873267\n15465965786141994620\n17428776936109193407\n3020549586974155431\n10275893639937853274\n5834487180679297519\n10970915017206913252\n692569434467307034\n10982543012475259888\n2532499984570475671\n17086565445217308369\n17352865368839298636\n17714078261881525852\n8257736826523435945\n17352865368839298636\n14576299879703257479\n8991596628572381387\n10278505298319097892\n6959566435062378349\n3839776210273286164\n13570668507601416603\n8330071669687802285\n13310564265067970478\n18132829489799584698\n8379329120133141414\n8365862704736513156\n4272009302505594064\n17377955066706968631\n362764726524705292\n14227730257738921780\n5095682716689385006\n14122443612526805272\n5443904672833080527\n9876686052286990861\n6924371182715434792\n16282609454960643025\n8178563501130563969\n6496289138849560686\n2611886560488424582\n869603950406441391\n9627060676452996074\n14812823726948090720\n13547888396000660901\n11807619717514062124\n11418467658236877285\n17858090896984855679\n325843755571611337\n17123163966830615799\n2082360244292729125\n7201379915658489273\n14517279337017128339\n9475425841940294799\n5558922779661684500\n10384652304514566792\n17808924302738001556\n2156160068316101323\n9707501199062960677\n16930359168852808809\n15479860435164775472\n8631311256431973519\n1672864470463053413\n1253217320471888332\n4914811992754731820\n17018777930569063911\n2057627454977535495\n1977765095559103842\n8195843935835767436\n16190186780404473656\n8202685472993607\n9528879848168230761\n1954213897783609144\n11790568407825430560\n1243270429867992143\n2377978377088155678\n17126332448136238551\n17396903641064948102\n350142971134923081\n13525215759308485248\n13727240559233600232\n3382695877707424345\n2402948633649561410\n5560923831828748799\n11886910792138825300\n9918332010404087587\n10384694573834703172\n8273744656306690685\n1443275774636892300\n8920470126075379122\n16728451855766871667\n38841874825718982\n16763544657859224366\n10483112659263137357\n4097125177510788209\n16236714333080007537\n6561885820603521710\n4598455405020155298\n6824756424395523716\n5283622954170437855\n859577854604362722\n3026146478898473899\n1547830259843785866\n13517078141099346808\n8165319906980726415\n1904039380306116752\n13099204057525980336\n3243449854484928965\n6725166713774778759\n17162847852387901929\n11509303017699976411\n14720532659662170627\n16467138749482745744\n13655099689295923183\n5795272324508037651\n12330689032669502118\n4414939260477027842\n8454717612869429086\n10769796278923712037\n7379400550794226567\n15282875379958070637\n17760890685538658341\n8914396725053956216\n653784039888311864\n260391820026440067\n12855943067124151215\n25584528747473507\n1018065599694424677\n15434918250387118220\n7736852407040078686\n8168837963262093693\n3582402652011661108\n1152241566157455871\n507824543076027839\n11863396591256793443\n7415377044053862704\n4512674360900898808\n13827495606663650704\n2690883668194479909\n17090634608996546087\n481269794434578099\n15525700062177750039\n2763065041767084758\n18113841787116110360\n629128257159684397\n14128341135228437675\n9491965227329565183\n6220548936593110208\n11479148761474398565\n12147340044214161526\n9175838503803227114\n13476226047394975803\n1960554367397398721\n13888668787821199694\n3692699080864263803\n16263421091572155801\n6427739287122331476\n3540118745492693723\n11814227964371591164\n4383957575261253076\n10646911048009428114\n9460322088076403735\n490353539467897084\n2752469427072474715\n10454638693425212416\n15335634033511681300\n5948578529561085833\n13231057159260839880\n3236973306509740444\n15389330012758785558\n12438237673280586355\n3090120274927339622\n13943943642998147566\n883916516479529660\n11973577077558926394\n18139410375123163191\n1253217320471888332\n914347863417776026\n15833748037340157715\n7814397728576265079\n15169800947848728731\n18229555629257306298\n18437895807705106705\n2349565906877709398\n18347682815989091752\n8876603080020091584\n13864515440119639265\n12491220470807797430\n13750540595795411224\n15129252540389849303\n9171358940566793713\n18206234992855020534\n3841126229627482709\n4940629862001947840\n16050401532105992132\n16417004123830825715\n18026405368614058506\n7461376019906554233\n5030837047786500130\n242306196331976383\n3863797620014459760\n2586647910586189147\n9792239531361938353\n3004280358728157920\n10982543012475259888\n2804400584003181204\n11788336378296862656\n4084778572820033509\n3438481811777521851\n1662187011430118247\n4836341284872417237\n13568885447663734749\n1494499889949462057\n9658074075911266861\n6710339047415129945\n12199219216106151039\n8017451722757692352\n567751233832916544\n17926356826444153248\n13729589981569675363\n4160349028416651461\n16456989477940516804\n2562377724444402443\n7725376327635216993\n13847141218143335426\n2978403248530353258\n14990809980029444775\n14913763178559927359\n11559732537337104523\n3675471057316379279\n11364843347595552011\n15145829152406404150\n6823950760209850016\n16186005427578038529\n7243425573068529678\n15484165939231973106\n3572464052123427489\n6760435163430073280\n2128289595262066126\n2731836273524147023\n16370192167523184702\n578400299946775324\n17602034077108965929\n1144192106037615633\n2165964781370121584\n4415018973796907621\n7901157240393701582\n10399364825148220954\n3259411684258714003\n2049146111789154292\n13541124926786321225\n13778638882585188235\n8294394889954363933\n10431167692962520274\n3514065661011729617\n17475422708018409699\n18140544209248185204\n6033615586336737200\n572923994136796612\n6038029253280980884\n9112122982883125196\n8483149169194631498\n4732301355801749651\n15524811358874317952\n2133380087560274740\n2628325073835613247\n9071745462843048925\n6403895198095066876\n3297773098015756881\n17692943227648562250\n3893608198033392265\n8214987976558631155\n1945033348734698336\n12619517561104650698\n658071498434925280\n17377955066706968631\n7931900863104108172\n17966927421652443636\n17246345627708439381\n1479397731421277512\n9410078953550122596\n1159888091038791991\n6188422666757411307\n10003600588042846319\n8005317685990870202\n2185282483191520343\n16295488780511700188\n17954479059202753810\n9617201679941881553\n18371619414053506816\n12339656810183429202\n6188861732008983255\n3499991572875104230\n18021629152467564699\n9996070503902863634\n9747309772542065203\n1153825641268004063\n15873568925529500761\n10513117679053179942\n5549691560016783383\n9673603770676412663\n7939584233516538888\n7638801476218180518\n14013815899595885948\n4668758441179484410\n5565260200912508096\n8349925397491682112\n9237767717267388661\n3976856972515905962\n11677137117141216837\n53278051424465571\n17125295590628836893\n7743839209201553093\n4517833701745767524\n16040039271034158426\n10241470445878520595\n16786778761264313575\n4492581521927372146\n4520522919150563842\n15487395535884085588\n120003\n13932368179691562024\n7832028109248731502\n2753211188186352362\n15181680997672711762\n9519027888258751813\n12247110586083173968\n7667613009114430331\n8440473958606346991\n13899825249574577400\n9050180315638116980\n1498187731960641622\n12745453441983155648\n17160249918655285082\n16675664741811622652\n2572156789002190059\n16467138749482745744\n632451256953815892\n6523347700609192217\n8485017783746442909\n3686523910594955434\n10123586245803632675\n7084571184351405672\n16100221755241662546\n4598455405020155298\n17460081342691718934\n14865448199011363740\n8328405005037495445\n9860909496504570071\n3762814186831795882\n8667075353567510180\n6742714449836341035\n2987980228726801688\n11445920516729413708\n13741767093100081520\n12244638670824052771\n1110662648109836245\n12306683317811894909\n10737360427995158327\n10198104575536799031\n3368162641710919794\n13674541211203067628\n17584203517016531790\n16712684381778633519\n36107055951322587\n17344067852193013942\n126282059583787521\n1257732063445537978\n16178419441742170487\n3474565283640379014\n4430670649573752653\n14706839034280787187\n4935968071840522138\n1300196501908582817\n5412987843508168579\n17277379546533998850\n593141322119469766\n18169341122137723835\n5240426925462834020\n4612647124675320285\n3195804119918724934\n17340265067582871025\n8997664602652738453\n4649737827008171105\n14374049847971557198\n1255564082601479582\n1780876351105525406\n9824650085788187153\n350142971134923081\n10272215893309126926\n18317107175731511175\n6360051259553181317\n17901391070282194733\n10217447972113978825\n14839093890739947686\n11480915553983002866\n14025588594256821328\n1257732063445537978\n1511471275784395030\n8997743698120713525\n1470432989286689525\n610262004489536852\n2826959292758366696\n17987070265294200127\n7372899210150974296\n2149298298310161239\n7627924386076787091\n13834208321534583639\n16198037324046506594\n8146622962423737887\n9054381748240666157\n15911526141897523780\n5652166159779397612\n9291283921655092384\n2060201075290103246\n10084992251724453475\n1115575256073891453\n2342143134051515982\n5006955395654200223\n13763325729683965995\n5225614982398694792\n2388331210025009110\n2411827014619979615\n13138942072157110549\n12300097802246235464\n3355712671651170457\n8663624283134095940\n15478795623519624863\n16540788641757470602\n10112530729623871010\n18011112316242806624\n6621772762382615357\n7094457696473691077\n2353070666700523155\n3564497361759348516\n17898100178449709307\n3182826254716307890\n14566389033451648549\n17979405256454590054\n17901391070282194733\n1814164117830594921\n216711469692765805\n7214076766230438463\n16467117841357452256\n6598155760740369295\n9454395067162810880\n16360108222797411141\n4049473706650456412\n13103281843656101181\n15078169276762562453\n15185302078008746403\n8978867021110162562\n7490113694725386254\n12402270519867476941\n14435414836052667222\n8515582270400862517\n2145210008255848890\n9663972837549081125\n10051738372976269674\n17507426477215526829\n14299973417045845962\n8825200677484278610\n2414124315661316849\n12909100754890274168\n5783671931906263965\n7827440901918645341\n7256082876187598622\n7564482812616989761\n10191470680552006996\n10268925443886761492\n2143420442988845788\n2416704958422563613\n9245450484217142212\n1229866271550524509\n7797963945821124711\n17594738403646160869\n16482387983364866298\n13552622122711577141\n3568972255508007255\n14217049417831590769\n10931880506002241616\n2067334058597270029\n15564585884001860954\n16408458776625787338\n2159210615743819621\n13925666799818184910\n10924230379415081713\n3062395875712395631\n9531001165774843647\n14037668488328198289\n18167992709384056771\n10499488200989011450\n8456616635720922504\n10444093549893437592\n10131743675161816295\n9281981575139870146\n2431807876004305837\n9266596645712304320\n14297193114686226063\n9775849979603468550\n1093056368381279162\n4610004925179752619\n3680951854593163814\n12132742056714210639\n1130628822381423034\n17603420844651942046\n13517078141099346808\n13422370819996381853\n5453285480017663706\n17058158167630224783\n17866696605266643838\n6710339047415129945\n17430563423718216937\n3955837149706683949\n18357026283180655571\n17526345900640356291\n13858287601353475498\n8607122990993062932\n10503585740087842568\n15290966590348762705\n11219045565846220796\n13209516138870522243\n8872375102270830313\n4124079099528741364\n1971507269403793099\n3252803791336063803\n17198190317173296096\n12570035362610009992\n14249379990038386664\n3949853070899198363\n5869377827469867607\n7071413650703187312\n14258937095058822569\n5418147776365299038\n5588443823488364551\n2826959292758366696\n7005007607864634347\n3046986916609659131\n5560923831828748799\n5476284555389779001\n13443323438949126899\n5662231397316395127\n2072112727236098164\n11526676590744886376\n13880209812070806094\n8762757393399373774\n13278545114421350381\n18052850851626622257\n9008764491676639343\n2930802555488661285\n6054894924721136737\n12690238507145852765\n6009478794588531508\n12975610044733978941\n14315127045682904357\n1896639646962904788\n5218033205810856174\n2607023777113932122\n14555108989293606109\n12262663265992276840\n11365676716931873251\n11929224377631002419\n27347143499350559\n13953597600992570788\n14872099979782446526\n14737999452271919518\n13894881520463425431\n13783120983387456574\n16149029566654496668\n10238417428178454546\n5771334368405154666\n8869156965857309887\n17103396208205581288\n12496778146578689336\n12175802680378583957\n10598605270221375583\n15466509322122603984\n15510424436316005573\n5428369121097011569\n11617003454324258394\n6419876661365121985\n9406885482208610382\n12210258297501743409\n2521227361183014489\n4409791221505412756\n7021209525272262100\n4081028995914572364\n1071801713936108212\n4975430107944343921\n9132396972809213817\n14526361551111787837\n2889563323119114310\n3050522070442745221\n18000036781651224845\n15191448169967809010\n6455618635494278649\n2820454634856852380\n17247376297449526990\n16272455374606094464\n11792263490447594121\n6069341315969096979\n9108559612908847427\n2082193937008688367\n3841231917149345600\n1804911071482001725\n15658857434041260229\n15195939548047384326\n15699309156964911116\n13063896969094033954\n1411997003204744557\n4695558820011210323\n8274537359029659476\n16782167037170269555\n6573184040647626954\n18230680630774867787\n13399537876515867690\n1058217644979076675\n9132396972809213817\n3312540183314643730\n6795061819466993928\n11886345927869244130\n17900524610824303707\n4323341865956540005\n1247653373229207840\n5902111166349050941\n13153522759144445889\n6749856250227664837\n8922946423491714643\n18385568102993354923\n3976856972515905962\n5618245248081180757\n15982091144580516618\n1619998234994633667\n13254000904102770980\n10926252826016398759\n941161271987729062\n4741758963794717158\n16784140386560957624\n17134412340077637187\n3586892209973891565\n12147340044214161526\n12606979892540176963\n6869924212262527435\n6746239997605562015\n12389467203019380711\n11172579685586783039\n2944353726335265800\n12628020357416434187\n10522111283703224976\n10744826821718727520\n13611519936343528027\n12625993240286002741\n14981059689889751267\n9706800228291547555\n5568643617820274275\n2966728589172272174\n4161767035991891747\n4074706774402928374\n7999819356695774915\n2082945624487382688\n113659126906115808\n12989759443037790209\n2744450429692624554\n11418467658236877285\n1658677712638109445\n1267681115448037761\n2994301641702748590\n8396704552133666000\n7408646339087765070\n11878404968137846341\n5532508482842805304\n14319606710762172018\n5325616234425573739\n14010446547038633511\n4412487107158235336\n13997123475162922427\n11187799446866115955\n10227644357598620117\n10965015880389304145\n7442687413604863473\n8188115006339123640\n780904811740387387\n2355543909397229187\n10057969914868563681\n3876457563062558889\n1658373394370047946\n16304726875156415934\n16840862398747942688\n14489353657341508737\n1677914397327082790\n13961006347614932365\n4283203119319775267\n11235440100548133869\n8714549787366588349\n8379329120133141414\n16897251775882272191\n12386721006595518659\n5063592597367450107\n4340663582713897016\n1944675190758705542\n13768770940727837561\n9411894793255325745\n10837942084416037237\n1110346823975169021\n2619004428881543752\n17230447492916725246\n4853021516196807734\n1765165912863818718\n14584448868125346135\n9949385154012309995\n14707306127916729046\n1906383374628095067\n10386133419369900028\n16853306641239783759\n2436265629027622210\n3930809096266454522\n10440963074548769013\n18415768464164202977\n15637584722050466092\n5793445933899715300\n9855650404154013618\n5143282758460295444\n17349163521852148222\n9073549535993606086\n2006665743655548627\n4527600196134204539\n14671083000687399881\n5692033367628087791\n15158677052425300350\n5604241088426107348\n15925760651382838342\n15045165680324678856\n16234311024129480987\n11750445213533395715\n13205410394390705569\n15947308787729187603\n14561802971881203023\n1891566158087173731\n13847141218143335426\n15516163276263277322\n11327318148379910359\n12857716478265603902\n2872615454923001737\n13562244515853985499\n2206230546424953899\n17866696605266643838\n453708481214355606\n8150102160658160807\n16684654738994626924\n3574752903730856484\n16837231860608637675\n937970160205425253\n11954817080329350140\n12909100754890274168\n12750001182590928658\n14454083984821359297\n15654670740223165234\n12696085588374850759\n10571954901290667636\n16194036215715942732\n13774232152489324670\n8279665109889067454\n14538852394831324359\n5729636980258250231\n11831597098738817169\n13161224669381577192\n7494724040013078302\n6496541577635943454\n4980077389646521261\n10359591947331247072\n12472796036947604484\n17975243221356615270\n1740446236329750292\n5596171104293562779\n9540815985977848349\n13872405893761917957\n12301395911897843118\n1487812168583683876\n13553602447037785185\n14555108989293606109\n2021522480297685858\n15059641767300108851\n2981460650559446939\n4890864497900889313\n16942599255995980389\n1575489164116386350\n5980609627654808753\n290860095631812876\n13131903352738134996\n7931900863104108172\n3179709429663577091\n14857021749001711233\n2210642359409034201\n13038668472769453666\n10611179668243757955\n12197144132453598222\n1386409282454350115\n2991631776950176078\n14195416639069031743\n6945090986495750097\n10289165273454446377\n15102420782280264311\n13513257877715340036\n14207201520067825824\n6745007220820726128\n7762880703773131807\n17748503125419825258\n4925491974388251901\n17689519787343166975\n11827956148088684180\n14680207746881029219\n5583972578064877093\n10530602448876720706\n12966328372334541687\n8619632706887631853\n6954497324421721433\n1558460472219557423\n1671819359900052166\n9180539871826159046\n4102737589934633887\n1315108962037663490\n302781934444005160\n3253389051640947285\n4473977373915316456\n6373991905389076054\n7871910997919099780\n2848986990576708202\n15634177237991608055\n16102364211399164003\n6885463396613865548\n6956673309748871683\n27018711902375767\n10848576976074924113\n6624248654771060784\n11014315784662082454\n10840826182988365096\n10131631717485252351\n5551172639808102182\n8369707051270036839\n12750115900923494531\n1709401906294632660\n17344067852193013942\n424678892269867869\n17365608049737301920\n7391735935330514317\n4267180167190318954\n8122970060722118771\n2425521466296261873\n9194001338610324702\n15863209204615495986\n7931447870146695532\n12825648519594912243\n3904353775642162138\n16546170140786117893\n6347948613932596146\n13430797093757281587\n16523418150709930748\n13446847683313114512\n13649651038856434954\n8829915881562684877\n5701219419613384858\n17642075551665612273\n5556365957885863206\n17607068105492433653\n4845944021122635795\n6902943515208271202\n7287518756482113859\n17411263906714527692\n3884983559465320023\n10689851714763920730\n15893325849573319083\n7749341093406532193\n11014049886379145246\n5546757454421394022\n7218775718917503198\n9287090342421311742\n2997809167053978831\n2025203302824565127\n18074392507455389783\n2711121700595639955\n6099002040605066885\n10133884076933829204\n12428946110679290175\n3557283612699903580\n12962051892790824912\n15786702179330327627\n15026323203569137831\n4075434850693239983\n4348457906108696736\n2125253082440939630\n9977054735783399023\n10612996555018523585\n8630600559582568402\n7629173775432043295\n10432601182424247253\n14531156770793439548\n18350225100442082184\n14415532778285524572\n1301510448596804986\n738053537399329987\n5980515662340117802\n17995457933848073185\n6302576066699056282\n10869195906971751554\n12358163507169934793\n4180136690893961756\n15498607609802292400\n14715219990504741045\n12142329821094675023\n14910591409478770504\n3689106678318323107\n5697204263654444347\n10228404431820357215\n17642796630613755301\n10349651784881368926\n4008175697199605189\n4267180167190318954\n8092493171796401045\n4273455330325865040\n16298626761706222319\n4026913253961275091\n14757704585843594299\n18108774054326760056\n3744338859634416300\n11788336378296862656\n6055883360449123214\n18234572248544357635\n5246425368513784189\n11387005372495622343\n2965700017623320296\n7644624764587475301\n17879480507233119034\n5298446543744778841\n11075964938824776662\n7492869317847367002\n4612138343770350861\n14649335038094038862\n7147143087510819449\n18444216137502480613\n8329958193551658927\n4804908740727148389\n9565964595973607351\n5348147054138041560\n4770257091729966418\n10835543150593955508\n2099866988409666412\n13281600116066790705\n15624286206466909213\n14569965583877694562\n14578101997072980175\n8214843082687315124\n15471473288021651024\n4137397986629357642\n3590011453018299353\n10149486938657304068\n15060398491183485003\n17879480507233119034\n15295590094089457771\n12433343173360449537\n14208029508791759532\n8333993045745722819\n13694897990203571174\n14549356696167407795\n4411028954807019721\n14990809980029444775\n6119217576022546760\n3289912589818046459\n12813125566455113754\n4958424666924741139\n2711121700595639955\n10942460962878845019\n8002447439987945265\n900225886988543817\n15192195269206442954\n2265120119742913333\n7287518756482113859\n9014472394179942693\n8137870380495893414\n13417443529524866941\n7364946773922967796\n16966435447664055459\n424288317671572325\n133388065114012459\n9956248619562430606\n9252768995788316778\n4635524050068152319\n16406374952294475744\n12358163507169934793\n9632009247638534856\n6531784734159071398\n2448283753022909006\n3601071704098406145\n12535584412843358378\n2435622979650232320\n13438927909590058422\n17631421871737265315\n10269317152164329025\n726082672869803478\n10420064078497976890\n12353560218200065692\n18066639513124061378\n2345001124231627267\n13739526827667511258\n16133102665499692787\n2911599053392035583\n1896289557889721684\n13241309948857238172\n10539464057382056221\n16911058947853703193\n16748500380356833397\n11830350391292326570\n9324522898080926829\n12236945689636128323\n77314549849646858\n13354820947157884837\n18274843992616109756\n11481626123267876320\n15718094803163752907\n17448137627812360165\n12946403526225119671\n6212291922626751455\n1251152558975587320\n4914657848748852957\n4775869596748082154\n2054228516124675696\n334746806017233337\n12512062085102080381\n10213652582397149993\n3228428174639721523\n13425272646462846760\n6392447935194482172\n3332701711768844353\n8793392012739806721\n6552636956051131588\n7183055178773904028\n2848986990576708202\n2234994276410788797\n6480349910456748899\n5249175943457346855\n4842376440728697957\n10699959493499152549\n7345628592645239809\n7970792540509397919\n8414677958751130734\n14783795194916587381\n8664408281190341774\n17356270102184444250\n16749454157102138906\n10384694573834703172\n822375074938868519\n1945033348734698336\n2958133965434528175\n3603761878677833284\n12643396722124958736\n13459016780534940942\n5747289912926443721\n11091862047642235125\n14573135638643050950\n16228563614438631770\n14185463187317354279\n479370227719941838\n10997744886701911530\n11208620080514127885\n13369212486279243888\n7853417239621506542\n13272156547778583867\n3097324847495193970\n7804646474182939468\n1461473817807721665\n7564995365981890708\n10745914842375828014\n18443445784673901765\n11680406053365966748\n2661834271291623969\n13372470948036951552\n13207912437611924964\n13173092171860256074\n13519770229191375567\n13865673440158607686\n6497181016072588197\n4140751965201231107\n2423029346898792806\n1052596627541033766\n8711932053318853871\n11497703886059617930\n1822031909412571639\n10232915372428621399\n9475425841940294799\n14865448199011363740\n3100013713648861936\n8182998036612822498\n6284633127832655181\n17466996832423640223\n1168299090873496870\n14354432891220351373\n5449524215565865565\n13895333493030672620\n15478795623519624863\n7539242659669432517\n16702821786364239102\n15479833568004092116\n17532465422488923190\n17705974675630407424\n1484856415319834932\n13331470196853977781\n13414988140408624113\n298674131798050064\n12747678714197188405\n14249860679975194929\n16460140301321496162\n6926751010394930797\n1673395551044310687\n705366248570263971\n12569610338948898418\n5225918609833988425\n10569004120222710433\n4668758441179484410\n13643808907465693837\n12211184404635563508\n7717930771521113491\n4093197895353313494\n5326830329312190973\n13165060186929980104\n17481750972178460872\n12112221219943960192\n6415094011990728741\n9855412937264095481\n12846733913516196421\n14103280779999504288\n5907624794671743463\n16744012281411108904\n5215542142004081180\n11109933746725910350\n11295950322864215902\n9983794587885521064\n3627536010404200676\n10272215893309126926\n14040978493580428458\n470488951076395676\n3697360687785158197\n13513444452170039623\n12786603737616922265\n17895857385085551079\n16780397428017764187\n12275070569964125129\n560623159849539220\n6790221800723662777\n8787272954048723856\n12021915537364443605\n16647435796743956582\n17430490531624209407\n9252414295047402644\n1221709548221479421\n14974725778912993749\n2362433953599687252\n15408449985382799853\n1077659242831232163\n16601762549023516153\n4050334060980875869\n3312718187984308175\n6929880455750337214\n10204735423695985679\n15464425824245459313\n12457534879611405273\n9893573836353985676\n4659211122139436334\n13373963980570749003\n8344889768248666509\n14497323784737730018\n9960199565524054126\n6399728084992713417\n12291803725715974759\n112549307299890366\n4823673097612323170\n5062190907226633786\n16094315188118949301\n2361097224822304615\n7984935630290590845\n10945674076833452037\n11463564956781363197\n2382644385687526973\n17808924302738001556\n2152643989533937963\n14137689926591432715\n16477545402736360790\n1071801713936108212\n7503538191494712587\n12689434873849697470\n14234520585309308330\n12276989090548484198\n4194709501071183562\n15654670740223165234\n9739756490814194796\n6119415929276298913\n5035522918985971793\n1131330879110421938\n12003680613373681929\n17570201155824213287\n6799375638790941560\n17426682926789728624\n221184208255232385\n13106609291981698939\n16428612873602364324\n17880283359214561531\n9602691899341810804\n13102908184891268672\n12657739599575319239\n3841126229627482709\n10101032416737730008\n797306458585202507\n7994004833739835710\n1110346823975169021\n7992569959469189424\n2408187786618791756\n5819371679836821633\n14961826436009953219\n2695317503619047482\n597897846136762883\n4889601171614462242\n305451296986384355\n13715095466366988143\n10745454091506189838\n9616089861543640946\n5796210808208518634\n7211706260074894561\n2072112727236098164\n10632900906055209895\n9404395616315384426\n13300313381060251829\n14084590126813178155\n1777067137447976138\n15498607609802292400\n13852688362220147904\n9196467138015357693\n2396698581433186755\n16237331527075201928\n1909019427944561617\n5863446022597336010\n500478503792989297\n11497703886059617930\n12367245952246978962\n15057725731766487787\n10744321138070901100\n7534021464850191217\n7022073982804972033\n15811596122292011760\n16807890743574635906\n5575707476855514428\n9670676297727501262\n7857891183662293112\n18083923800302639795\n12750406962693118829\n18403086151514705979\n2689980054299223795\n8714549787366588349\n234625712345446624\n4242466015628998797\n5669713531882338843\n3895306549725418919\n3217507432233878279\n12369193328751029963\n15539119665102153936\n14345899562572391312\n4835425039559425274\n8588837235039466471\n16756403295641656137\n12381608973890883183\n1779005043854746398\n13622258494798327841\n952073322291295437\n5345491046706788415\n13329468873489400336\n17697249472954053497\n13757391838987177137\n13294819301223277919\n3508999556981458585\n8456276832228304055\n8558105518260449288\n6139794438658268608\n12794074384072935672\n9503543238010495110\n14774497605810135843\n15838922577847905066\n10359024083254408084\n8027423135105690362\n11278171056114273519\n14552469789812245933\n3451914374120952503\n2500982044877191975\n16741207462072209399\n14951836327324321219\n17248898952362240797\n9575951772433734944\n5222349472368156367\n6590520513911710550\n16469784778470942702\n10767669613235346181\n7983689866305945296\n5446638273776357556\n11521513465681432626\n18429368627819430889\n3484469398610060744\n2974866964854643122\n8881359421856530767\n8941221728204192867\n12416682617387220325\n3490126787364833506\n17348069791173232355\n1883539876428269709\n14799493652772888951\n8214882184120769346\n8870455428705968728\n2444483200608116009\n14290652229084083047\n1983350454696411209\n13648976627098023645\n15504825423074468653\n15609698410444305853\n6867426086008863649\n10295025187727712697\n17041684924152443862\n8273566545860899656\n11784041308899377530\n4976429483291695578\n1634540233848770788\n754354693695799463\n3150820907238275662\n15015397214114498241\n15909024166941780677\n2863061213085815537\n4882646585316842697\n16555941772116369031\n17950037127145337043\n7283766869137486032\n6626495789893118500\n13838557836780474261\n8761884391389240643\n7561776472028661460\n14128341135228437675\n18302196965339622556\n4649737827008171105\n2272311607224654434\n6933902164191689214\n15631827104805737436\n18350225100442082184\n17048549344075133096\n15319348310571551077\n14996549752372991756\n2657343103907234697\n12306373272520506258\n2037446055821832572\n1091086367152775943\n9560017661866342355\n9995154461739024673\n4333123006960100661\n8550595271373930629\n5079358759670117570\n8105937762942233881\n17501417300662509576\n7724163810817759304\n188427463010225968\n13768770940727837561\n15884476247249363753\n17997221351517729130\n9262993542088977008\n72578787106782662\n12238141001901388728\n15629136823046646751\n6399586441396228018\n12801537890632008797\n18113542375490023948\n782338023464927009\n665929335530840815\n160393586153624122\n9710663961130500459\n17674668491907897041\n16110915047770022504\n11184010058845050862\n13406984741182673181\n16979550860662381161\n4371875012546663817\n10480596510340479076\n6479846558859216961\n12992133987756322381\n6058069991754982617\n718319462647064174\n7694679156776159897\n4447849321052295631\n2353070666700523155\n9140674932897736208\n13764953990220580376\n15072719966318811882\n17089212200919477944\n16318073259550480003\n5471159954018142509\n4934399796980200251\n12330466156196620911\n7151786302216861095\n14215035827137268333\n1812195389759232482\n4740026081330341819\n9633354141389119323\n1010158640681337361\n5852785836817858189\n17261084970261802481\n1311136665801389145\n4644816815802358373\n3359835711283585119\n10363882923154662236\n6356014356349419748\n4279053472750593815\n15560813100570707959\n13844935839739142545\n6020950796204753070\n7610707685239047469\n15202384521960613216\n7627924386076787091\n10910690297367208303\n12420199657810103727\n17387079612355865529\n11655350942117242999\n1832362568229687377\n17422684301854128050\n18131216709846412362\n6586992490072295025\n9683871662056764362\n17958164647600520780\n17942963706226906974\n4644701883266487890\n3207402972392158132\n886145686728613479\n10123586245803632675\n17282466740789266479\n2100030313490210609\n15345725434995900412\n8683101056933411739\n2545163178111522540\n15036340732492574286\n9527687351606849015\n1960554367397398721\n12733307911737264577\n14278957220095286592\n13113767715940485586\n16842457510010893748\n1466268064061359331\n7746745197512022746\n14806831790445835342\n16575368786825323686\n11636540293647779522\n8489747303646286514\n6366472952805843877\n14043838322988763580\n13114196520507981530\n16243268734569734365\n14750824092590754593\n7614642826723278423\n14830620208392291174\n12116050376924192929\n3417056834420894359\n7548086452030103285\n358936105611479143\n3483148858510597739\n11075964938824776662\n9226020576355559473\n3863613738506447833\n13198958686478642334\n745976039145923799\n1426074734118767579\n7310775413733460595\n4436515707995345997\n10594318713651853805\n16689861136420156528\n15219518608706513456\n13370384834204095336\n5938129833144221405\n12158252462331329069\n15046403931157572491\n2523235780951910588\n5750252657824586609\n3467784852123351927\n1545748835555624416\n7680936879666111512\n14646937973978963479\n8214882184120769346\n10768950718203956123\n4475012019951967548\n13888668787821199694\n1691652878193968416\n15493612563428500636\n704139548666752848\n15156028268215123203\n8876378254298140826\n1392204636579656447\n8214843082687315124\n5906132704228613812\n762539222864773275\n9679250880243157030\n8358298414045961326\n10332937371634187510\n9474588653729603196\n18082313552073039339\n17302344694427564718\n11360384563626094423\n6156936620833171614\n12176129372016813067\n4656567321241934494\n15385178489170177685\n3363731920623297283\n204626376581553182\n5646117973041790321\n12275070569964125129\n7004101832173722295\n11979299285629611757\n17039938375370962616\n14021957506924461656\n7382091435479731685\n6667254712192254475\n2307662480375996907\n10412044079323766704\n8397232198996257501\n12371818693251100535\n15964929651636110005\n3444734109189433858\n1964331099362908548\n5033168359007284112\n5205576495452248207\n4083373341166128360\n13595608842877859251\n10894706976923953254\n18182633328696746867\n15442345545965524656\n10861296721886453034\n14774497605810135843\n649387856981643423\n16209979925390148490\n2682807903662135710\n3697360687785158197\n12827521427896562075\n2185282483191520343\n6344082557787941024\n6685572316129351028\n11899528450577274392\n17251826185841162553\n7488003946919691242\n7255872248027574713\n3731191148350188850\n4728449056412339571\n10565256481867915697\n3034027226363971643\n15217318984692904266\n16531498822061031604\n15129344040106124796\n12963091474384620597\n12263391745146778040\n18105238156740200154\n13966737424526271382\n2439671753956658922\n14115188671574361396\n6669649789844295071\n9446516174940646482\n10092752211480902567\n14834265126333597908\n17423074883506782644\n6850921823943022285\n841945184249864722\n3679786706652024514\n710969569849664328\n13503124150487661384\n13635117371381254254\n14503363992047836142\n14448477209480068204\n5717487324334245217\n10363027308290038053\n5722784852426960524\n6171058329726382801\n3165818951231057805\n6480357965568036844\n13079383269058526529\n8285468988215742888\n16204716019843017265\n18330134063973710305\n10820575656908689510\n1095562624035176045\n11732899287490214880\n8539596622052487224\n11298474349533423886\n10021243212470526660\n7173611105342758699\n4368669437621020474\n8689403801046505872\n13155777804831272017\n16328309432362318504\n14373362004585471101\n17673852375929933209\n5061109940844778606\n1975054190189448167\n1934747921463793249\n7888940804397945053\n14569899006533016843\n12665281787372648464\n9538146215523166447\n5591080492137782143\n2348665466217991947\n15314802078292360384\n16612809043003766994\n14810187217401714676\n10717968575288457853\n8883242043669404373\n1091086367152775943\n2699249687519191224\n17423074883506782644\n4547229210177704717\n9286946024096445544\n213283965027128122\n8737553391232578551\n9210853897680594890\n14372136109887310680\n6380064890869642206\n12153701674236020437\n8688014510776635234\n7718354054170427160\n9527837888689160718\n229905481263583125\n2324846577929700136\n6628546482346787261\n7490054596864994316\n13881214360208557101\n14376037549068260635\n710969569849664328\n842845896321320628\n13660510308566537717\n9973613144726195558\n1426074734118767579\n17965032504588425843\n12061878493264896032\n5162796514787623016\n6685572316129351028\n9318668059385687693\n7635163514383052446\n3661832218508975982\n7967350634513585378\n17632220957449346381\n3580171592123040208\n16012701441940428359\n348235960811786369\n5945759401129735697\n1437915755268530755\n12216193561844074858\n13550148562265029106\n14080211585058982600\n1272246110809017921\n13425272646462846760\n684390878099570442\n14400920255679478647\n11375362583548810639\n4217127358570860993\n5660263823040088244\n3445057090273837338\n7865443803202055357\n7670300649053105634\n4139372766636088312\n9100295384497069406\n2352264576214019566\n9298024707484555085\n1361460746758210844\n12171928196349527155\n6275276397171337480\n1750065723947341757\n10565256481867915697\n10231203858713354515\n15334118545543101721\n5629390985002397006\n5492732900001012553\n2266104071599301817\n4771327828662454486\n10525542203616453476\n3413751548494385272\n16571139946608582334\n4391508797162728460\n5286713361636540849\n9049626501851492219\n5011715128729472859\n12777422504708252623\n11834129626735838654\n2342172068312783302\n15483541068406524563\n10637029032014105227\n17607068105492433653\n15221128039558990711\n11865717300871688546\n15821557759102597160\n7393570815334726796\n8698191222780777521\n2730120446632986716\n7575000891534499649\n16105577804284925158\n12988918724405186037\n500478503792989297\n1027860922353286844\n10139454648620587002\n1061391502131689666\n5477861031872178670\n4399447310862361685\n654608992595461994\n4904682536517629425\n10911365545876974392\n6027542339104961409\n13150435678457077294\n6113980072009360682\n3935026727022532070\n14022220286287060497\n7502852078941812096\n2454841291648338365\n489960977509090574\n4668321841090677989\n2434725237810954539\n8990767101803890709\n2627930676495953937\n17903196077554360661\n17841924566544064153\n16516507076599135208\n470069062795117371\n18371553758611051959\n6912267175241343057\n6255939016027554507\n4471604275399905196\n12848326807531980820\n4230577201973548297\n11106701110038266852\n11595087669307771791\n16139084769255512573\n5082372838649248610\n15221152100670701348\n11469403396963112486\n16983731729943972635\n9293907029841295582\n13326560720949812642\n15117477797350689843\n6341441143285212220\n4519545771092414383\n3138582261798557890\n11492014723996912937\n3313089424187063460\n17820693712062823954\n8321498680799606930\n18345781860920406256\n2937410910443181931\n16384639977428384037\n6736034056292109860\n6938582522847689686\n5326922459620469234\n2532106199639954165\n8825200677484278610\n8110248136139436409\n4587589535920235949\n11467410418868848999\n9746327270642713475\n15684869512062804581\n6524082018787742580\n15290469446851007572\n14939656030223260828\n3754613623381218608\n3618322982461852690\n2930813935554660145\n12332201048037287051\n5300945965908797239\n1135039469700383166\n1027860922353286844\n14180926974760476895\n17276448609064643694\n16602470515639003218\n10212990304916496605\n1554672912833326247\n3278815525578941821\n7191834101427575039\n12788791805881853272\n192070601676505584\n2889678923518165807\n7502283687443350840\n1868185480009241835\n17396162778963428480\n9438531031996624577\n17895786592119485756\n10424197249937472808\n12341485368056500120\n10855597993103771317\n18045025520922068674\n10278505298319097892\n6632470095963168954\n10972232631384679191\n5447854946334267661\n13273494027930288624\n14502664391789100210\n9227709617591235798\n14671083000687399881\n13978642858185220757\n13832934164229471964\n14938172583843025914\n12657631513796752556\n251441926727679765\n4143680508959735857\n14066921255481015120\n7452608398527241808\n18393891950201498846\n16004871141601074192\n3681564573002964658\n12009093664486969764\n4072250039901499431\n14639870226379152776\n402743822560152078\n3209353083583452260\n10221793442213742140\n620821526654867076\n8681126738734696612\n7495324433735660046\n11873318579708041988\n3087091280502715308\n8449607457404901853\n8317739469505866472\n13506422919079575780\n1347170785631401262\n13041186610649749112\n10074016197450860323\n2099160610503455716\n8938844185916196483\n11498601343471586899\n17401756935351780989\n6547173173151022616\n17914306008230921065\n18240126654025735874\n11614025704504033512\n12942500339144442125\n3157569754426249124\n6026506612199191576\n3252803791336063803\n3325071364556295184\n10069921897157903941\n18044261799592688995\n10784973946085835287\n521880954100851319\n8881359421856530767\n12301395911897843118\n9025565024578725027\n10225804963819861035\n8659319034684368914\n15650375882129302865\n4292624753814813751\n10729419830781954211\n7428310909325635833\n4851798673695134575\n10734590853506398460\n4061593751010869432\n4008874613892904898\n10368993883094741795\n15960784677545574745\n11492014723996912937\n1997081620107619885\n6019165720469168506\n10546935928903415204\n5034098092390393466\n12841146109667729096\n3150820907238275662\n14699324822050553603\n448865448614268364\n8713215223437872681\n1890929151822452123\n17195990106752699991\n3371673549585833450\n16562136758104465189\n2652473221731441548\n14385262187168837176\n5226530405570000872\n16612093006915433962\n13315267215328755068\n5225342925514737681\n3884829854372747821\n9480989970909963742\n14690977287388331240\n8267667347154575595\n12670408186831081016\n3417012036872283660\n11672557862263797172\n13290128327167434406\n845936963026640794\n7822395074870936870\n10104582954170578539\n12295780633015965188\n6548375822987790512\n9232424802697013579\n11717102161251923587\n13611227331564351896\n12493294048350611542\n3131290073391219352\n12574169616537231107\n11724236963005827989\n15155463978209209825\n8947718823084985754\n4259656894784692193\n912983662196164034\n6589959433521724044\n8318413465938013778\n15998317435152510866\n13834807165531952315\n2034266388524820209\n7957401130961431272\n5279940799589330466\n7415577208015742502\n17082370171612178716\n8697513470973721386\n16932416317852511678\n743934076580653333\n11941624661428944864\n10316210615059804249\n6917541626617910888\n1040088581366121590\n5591053181073900796\n14455268401501965539\n10615224247459192506\n5095652221837893338\n13960245448311200144\n7818007001023780494\n16767324380549730225\n12165145574758949608\n6997306003634379556\n14067759288408040596\n14044965209459505306\n11003850892147169556\n5540266503780298035\n18292731458317800915\n5768946208832364129\n1643149689918082037\n12643295533725307297\n5343350373943925544\n832608308602339532\n1444246078572181366\n3686523910594955434\n7980579418565818574\n10552465938097858298\n11619815277834403781\n6061560452959148731\n5237320992284180113\n9297553495644203484\n17181498239268105048\n7542437877916769153\n11015815090381361297\n6255227884558178984\n11603207067476522857\n4532527256929013737\n13758744267614124930\n4749877650484904078\n5725465454712978319\n17700192067164807299\n15871404394456762368\n7601372528950962106\n817777291349821067\n13017329066345875958\n9387752463594593855\n8369707051270036839\n5438413749319666403\n11768289295826511467\n7528757605760298150\n14861128916239233231\n6867426086008863649\n9155752776529718368\n13631672142483282799\n5320989141356050197\n947664526728353433\n14111839772266489455\n17307534990209556263\n2650688537286143406\n11864946203030581725\n10525542203616453476\n4812128406152971276\n14842371693376546971\n2118875897073868979\n8834548541779022987\n12657739599575319239\n12654733061261443314\n13978642858185220757\n549276728351272004\n2459873639390367512\n12798368461846020494\n9960199565524054126\n12747678714197188405\n4662890120562480315\n12699633925824623049\n16724014760768198434\n5135572095337006070\n13520842065347434536\n9177362847905677680\n15243479677856736062\n2206230546424953899\n16154450832545982797\n9629645896159244239\n549276728351272004\n7502852078941812096\n12570035362610009992\n11744021113899135316\n1705211980505113673\n6842030937971744837\n13553582017083588911\n6784977313737215110\n18276640559764358948\n13142204144050679600\n5076036065801942017\n5159659810247501753\n18010461662288086168\n9579135144216063982\n6349476291605604752\n15268776863196604850\n3713874780254383112\n2886345223812860718\n4914811992754731820\n13705675493163153202\n10656178043848148953\n16586617470298172007\n2717164928082181748\n14597114128109532779\n4836485415310730078\n4909601139602405221\n10726873574556659209\n16075219694340100188\n15413394602615959875\n12052291406751101805\n14846592787632640081\n16483175129984492113\n2262463595567822313\n5218033205810856174\n11184010058845050862\n18094559270923785269\n12365637496669028561\n4732301355801749651\n14512868301391224201\n4554081388453756751\n3297442975506555530\n5171102478294835470\n14344484991567006658\n16148980350279340483\n4122578628792329259\n12038996589394235497\n12924506829872731008\n9153627867540529776\n16812837547323916972\n15336519928397899615\n5797867061187675323\n10177902173048252823\n13443323438949126899\n17780178015681323831\n16154450832545982797\n12926360118936441087\n9551798954044174203\n2327738025915905116\n27543536543036010\n10530148252896821285\n1896289557889721684\n12134480618434634621\n18095133771843780745\n8405488170200668955\n15202218348780815539\n16692006580843500595\n10836864029527810209\n4675950731352242696\n15866763207811080113\n15884456604966635979\n8881465230223078022\n8890174849862664969\n12333377205641195324\n6363910448580793583\n9602234016917844244\n3326987695900668822\n8763436434242023837\n9365645834398488085\n16166031758315314640\n10151837437810677092\n10432601182424247253\n16236157907184317261\n17955443819835077734\n13703053488610508885\n3779480430769090489\n131875973461833186\n6329003081577202773\n12683066142147166168\n4676754000472284520\n8301127369497147512\n165485341210163322\n7024488212825373272\n17290991340668357231\n3057833616673118516\n11424050725696075900\n12211317968142291713\n6522080070692836678\n13228760503064203016\n12927885775496976036\n7564482812616989761\n14340834885884774570\n4413637828165196896\n15195939548047384326\n10974661560262265764\n4297232453938085476\n16607523899507782533\n16730975452539727791\n16456989477940516804\n5128843935703395549\n4555593064912999363\n3473407937870053381\n13919241012632096773\n11336915777299814594\n8826214451234509821\n18172933393803773422\n3911168639521176125\n3138310277861131633\n2332837321589993090\n17032571044101509677\n8108369767510631207\n7382997938859093975\n2739978851303276513\n435058773012863977\n5422724742673392163\n8872375102270830313\n2575253628434538014\n14839093890739947686\n2738220855250191876\n16529056306132216053\n13715991797321340442\n9896650173659177566\n18385568102993354923\n8339014620575000980\n13914387122674072685\n16439172119772771558\n11385368897781350312\n4775869596748082154\n4088231166382786829\n3651688808036516642\n14050531077534344971\n10630398179454663496\n8262943249879772120\n2318322344480239626\n7839707457603689616\n12377832704803220580\n14399656994087200381\n12332201048037287051\n5193283537554601588\n2246703347911045760\n13316685633793248529\n14908867391407005713\n6804518432107133925\n255687138113329386\n9706800228291547555\n5500900419847881607\n11258574898754999490\n11947460167354802895\n6295709327753308448\n6032532839858403960\n12208344612356400727\n16836957333058393013\n8073427968773493843\n16930165781007730301\n13188093152460810785\n296755628113407636\n13938122074403537035\n7201379915658489273\n869603950406441391\n17153811928200947150\n17244012968447370008\n10525414287317366941\n450729363969854434\n12287155542283820044\n6050856727115360509\n5786174684380270151\n12300097802246235464\n10272249578594791850\n9764297523745893245\n4330751346318391899\n4479293553035526992\n3971520667169558534\n11157286892104064441\n1718083468079861944\n401052600076379098\n18165742392311553205\n17853550431263983815\n4066136916983962833\n7660806539439559679\n9777555259735756451\n11418150897792272206\n8828387025139283226\n2991013392453676415\n6267121072388906374\n10980795810985972841\n12517786282526727982\n12647640999002014578\n12853789542996796098\n6476455277359160756\n14193385644090987844\n16173991157549744373\n440954513266053023\n11650211861198539635\n16962226301137495672\n12349073930688650062\n1992612825881504232\n7703593063504749172\n12653134276957037012\n14713309708523394842\n15510820022612180087\n10309943463994484440\n4827357209171263481\n10883476614037517647\n11368959991394300949\n864903446903634416\n8649523087138784060\n7995602573660656446\n5419511754667495451\n1923002259898913468\n961100659341301172\n15287047249299185800\n12440346649192331693\n12645981988339861968\n16193538064821950033\n9771739541777144799\n2684347282455461990\n16559665168083813462\n15259878356941973958\n5313236225240600650\n3111763621867313165\n17645224795015763041\n12825648519594912243\n10417071544615532083\n14295437827860550798\n5295713569670104224\n8876603080020091584\n14773759750484836207\n11521513465681432626\n14623600296857326262\n16690111741248525150\n78726331985503277\n16370192167523184702\n7123483956791095277\n9897874727601829468\n16948441291566991384\n6103331539890858270\n5153439085636564024\n9098811646221647043\n6926891167139961791\n11075954436559359016\n4258982456533819116\n2448283753022909006\n15402712065235559135\n16213298442287645336\n9107775511354811917\n8861922047590573108\n10848576976074924113\n10949033457544491079\n11039416365543337016\n2958599192007136953\n5993959518562147299\n2469838066249038299\n5045064007624960724\n7058469514503226722\n9773340101353060978\n16041911026278217346\n9298466410578692431\n6201726037534331138\n13140867875770646407\n3989999202822012812\n2434262527670810657\n10104582954170578539\n2835352724196024865\n18061131552593236438\n10425320126517777253\n10229725871414702508\n8018433515099470758\n1072247865216082660\n4705408962365242418\n7036567973012955574\n15360775030754827004\n7701802565278373506\n1016277928677657220\n2022130137286221515\n17804321341564227927\n17973089647342644595\n13565601606532913107\n5322026736057016664\n844257175678683180\n5927334706061716749\n6776057386756159627\n3444734109189433858\n15279657130598345381\n17082315248577877489\n15298782653977363316\n18275183777218808082\n9661825285156968496\n17461411276060573703\n3312251886995623843\n14121658070047240057\n8165319906980726415\n5456084766064146637\n1944028084728537265\n8774290371999415918\n8440473958606346991\n6861287962206386232\n17058158167630224783\n14147945954194666811\n11396872785547567976\n12386398003397661735\n10665391265305233342\n346124564162900118\n10344425155617591765\n13052198049159062628\n4164048543542795620\n10439295454969178871\n4799842381348407109\n14896062576785550601\n3630334998361111565\n15573896859795528237\n17768966742972653329\n16112192059743392029\n3031729755434687197\n3915333864545243302\n6718141123113394452\n8505203471806341670\n13723582814549394504\n15960449499452915557\n8604083603226480529\n17978421961682045423\n7317062599856835690\n14834265126333597908\n684608817604547691\n6239655372278670672\n6223274444422792041\n17422988772485407674\n160393586153624122\n12081134389651739979\n1609620265455370628\n15858012511252427997\n3247734453569709391\n2276977983564350747\n4766546816437660904\n2387750248257216420\n4010033019166014433\n15228775613129702455\n7226061763685135643\n2682643828806043733\n15347976078888850733\n3675471057316379279\n12402339605130987267\n11365676716931873251\n3263931516615203212\n4746128101930313287\n3144217485179358839\n5422724742673392163\n15966894423127189745\n16848523079533074722\n6154553378625845196\n7914570151299486991\n6359592730801888655\n8339239376455951730\n1886393078265588741\n9904626054019955988\n8681144277303010509\n4463404723530037587\n17528079224903246403\n15105477397474386194\n17504202150903886846\n4093197895353313494\n4549069110117430298\n11764819637412851189\n12166278770698579883\n2406410016918466759\n3653856605360686745\n10266800229600156442\n8563950127714861173\n11387032036102266799\n14895577362620784937\n16788554189409113138\n6227637813444754282\n16222045679908956370\n17579320692866308955\n11480386320603475862\n3738996409263345742\n13638784265662907055\n6064239558043363484\n13117264338048358679\n6751110731392400966\n1073291464082492939\n13529039522323783844\n16955479935277506085\n12034868250462235949\n15264203425367985470\n15440598058633084760\n5586514011042057253\n13094898595134770946\n4195977386736551861\n9124310054176883147\n2760766335852137851\n8723395899599072483\n15893325849573319083\n16794210386497464748\n4228731429683346268\n16509421772629842662\n10778276579064495614\n16766106271897869934\n4778406265868043880\n16749791066753485653\n15903576775560566972\n4814757093397664049\n5629390985002397006\n14848390160999293839\n8951600043373241492\n11806121341045927714\n8033132926206474651\n7116139959017077111\n7281505211729982292\n14871363552400150203\n18131343984605219969\n8863444795319011152\n12780543297384483510\n6924486425860915156\n9349058405055653357\n15814650550579538387\n7650907014463427321\n10124977023234515827\n9960501375252413942\n9858041029179132190\n13778638882585188235\n16529056306132216053\n3553819518684298433\n17252340097396550791\n12396726560461891043\n4112803993885133353\n14263023103938137645\n3087861535289351693\n11527692483263157359\n16879693528284549943\n14131643861697567782\n14301925945730173221\n707110941341257420\n9845021379544719130\n9438531031996624577\n9602234016917844244\n2363153347514056589\n10835653457794615593\n1782641453254425298\n14381667063807041436\n12306683317811894909\n15484165939231973106\n6739078477303014513\n14071872052219459510\n8100358625873130753\n5312641865488573069\n8706537249700414723\n16934947354056229925\n11235440100548133869\n15521969817318814856\n15311827691824555424\n17340445566150283344\n7564995365981890708\n1498187731960641622\n21873120165035669\n13773332300483514899\n8828131611441127817\n12282092305171513988\n15088304755337792953\n3805031899923833690\n5991866242398369601\n9807201085565491982\n16500601803628870850\n12366264093308652450\n12352258680650510933\n7197466758495880812\n13927696128971573103\n6061560452959148731\n12587659124023021047\n12044709685083916300\n9166116273973407687\n12247110586083173968\n5243772753411786961\n10778752744638120022\n9742174232752559313\n5176433906683210288\n7963744314112216239\n11382094950037036528\n12682962697741064351\n1094149792222986643\n1094714262461996414\n17945168697861681026\n13446847683313114512\n8683594137492817024\n8941221728204192867\n15328811333574991637\n2045830408128119402\n8056213280919865635\n3475188664199900770\n5913894099192503451\n4099301570338478451\n9294600811864225722\n17423690924666960721\n17015021360577276386\n10529740758581753941\n10174346297202747233\n14106762631001619817\n3731191148350188850\n3312359631309001762\n4571040147889804988\n11029061205676183059\n12956677540949888302\n15283488819502801833\n14715219990504741045\n7698239103211098740\n17334860748482313002\n4049473706650456412\n12319346710319849009\n5954175233931186599\n15380587543238805844\n8778697242555098672\n16530246412968812735\n8828387025139283226\n17261069648713313254\n12841146109667729096\n12730829338390491452\n3279565434898422376\n11003339091562371710\n11152187360697691888\n11978069832690359460\n16454037241960280067\n14972221995091971342\n4668321841090677989\n4253329946215272530\n14263023103938137645\n2666008231795006\n3570586791703581576\n8552381190508250055\n3726587994332382685\n4341856860340234575\n3917541028802405180\n14272089372279266809\n14808478384434778000\n9658300173317305302\n10525530525037448204\n1740604053496138597\n11229515053201668478\n15253848750661907540\n16816199099620296772\n17041684924152443862\n11314294525413300355\n6909634903141021801\n10567157228170217333\n4771273871384687275\n11600752800398540975\n18429368627819430889\n6413001281090601879\n5735087450338574367\n10229725871414702508\n8094785515252995799\n509269483460457595\n4823030711449659738\n15718094803163752907\n17227649846751758967\n9989754944484405918\n16822503225115493200\n1888620282999246478\n4801084672376784525\n8762716803345010692\n11849133039051974839\n3179270337435780768\n4761318268483871444\n13079040549980931428\n15055277115026934567\n4399447310862361685\n2210642359409034201\n16439143035826505874\n17195990106752699991\n15006873702438846267\n5666762048737617123\n9356028139008543172\n9621014273272748236\n893006848144418686\n11366760603235392242\n13930185922687274919\n15885665697433185397\n8094785515252995799\n5237320992284180113\n1960386785171790252\n1302064845070672319\n12876420042693057051\n11857076760390642403\n8306166442826071647\n6381656848848947085\n5551405411879655223\n2412530600238157705\n10098020035306558809\n3083749638692144530\n15295590094089457771\n7632894256941328439\n13395140373977131873\n7005646584384242860\n5341264399710514083\n735737360145556187\n1153825641268004063\n2234441354983508876\n10117143021722523293\n16852554758433735272\n10955950449742460782\n8672520340337955751\n8980900502679192139\n1507501566260611532\n1061385636366945422\n7823328067258628015\n10578055895222933889\n6520576766878140053\n861920589491070992\n1132418264350906366\n8690999696909540756\n1326689261255409830\n1720543413794118741\n16666005616106990116\n16533475630462192456\n4541949399350480642\n3857475034417481701\n719786535099457142\n5909601675922458467\n15902801120068360998\n17666149874669870365\n1014869138091637157\n13078938124528894239\n10001317627008668986\n17167264239748881657\n2370883904116955173\n5618579261616538298\n4333123006960100661\n107555067249634519\n9452365211132825389\n9278112505282633559\n152783285094154002\n11264870872109038279\n4809765533800803766\n13858749413080222577\n7601372528950962106\n14512868301391224201\n6544608764129504923\n11433643502875330404\n11344399039116311635\n4934399796980200251\n848720522880202832\n12097238253138263150\n7502283687443350840\n6312327877285601809\n702979466603977119\n17894987767369527780\n13288004305565182082\n4534027677830270068\n1326982472242840407\n11319995132957282158\n133224423527033220\n420953221133915346\n1088458596042960419\n10426589218910747457\n7963333829149842968\n11748401990691694844\n9994981866123233528\n2637076412949079847\n12801903049994283400\n10263860207191985785\n8513986605712263834\n6580155564600465739\n7940022015941605682\n8713720073357381660\n16263120649680269924\n2316858866166025145\n16384639977428384037\n10800280152792878210\n2157244319030360442\n8184341327852199196\n5286652257489828472\n8353310566985352024\n7079734399400703284\n3499028693300366484\n10547183264912262562\n6479846558859216961\n6196748444916916810\n274044254103445842\n1916802325354297403\n3065378661418762806\n12061822280278777468\n13322612073143740717\n14357994161086803817\n14981059689889751267\n15374726940557327531\n3368162641710919794\n336418738303871061\n5708117654504342064\n14925525630021726088\n13767580974941446612\n2009148459385328716\n5898165555114429553\n13990852906507220292\n16879128049326268899\n16629382070744642711\n13777520757563859046\n5231949181749224161\n7763179771981094971\n10523468980660040676\n13680689275130698769\n846210485379438853\n6208897111922663745\n12195857714828538225\n14531653256972869235\n9268320731006177555\n18279975532644681578\n2042318482884865315\n8158771192314543423\n8865260746603237816\n7316860045387931295\n2172003607068294884\n18121515504242796963\n1600471419401187139\n15239577848795094893\n7320678003367714462\n12400865330750070342\n841017624048558317\n1571472648563492980\n677567270417299101\n10554453241810066168\n11603923971871206339\n13814482993120368757\n16749670167901878438\n14708849682855786451\n2628325073835613247\n13480003443571643800\n85408339431471925\n7071413650703187312\n8005317685990870202\n8354673248134829883\n9768379914067363023\n13412297599497153395\n17569848259848483329\n17065689795166957994\n13316930829341431070\n12360919583231447397\n6757476953127772528\n17127057813834936642\n4701620765259409969\n11517224359673495319\n5417559075242806210\n16612939250725448470\n17223645637503307887\n7800803518648925064\n6193690939462948735\n10922519644455244168\n18415753091840880249\n15097305754914162278\n12949224348925450137\n14033584593459416265\n6232080323900003754\n5934398952627574085\n9985367311667497971\n14364658089741796382\n15965692347256022345\n11520353242771844008\n14048841360136360135\n16579247530080928803\n3716816954413318576\n9063619454503307683\n16004871141601074192\n1804911071482001725\n1800166771363323734\n470001657639822372\n2341023801642134015\n11350670629929533002\n942552707892303844\n6971426034895225155\n11281051994702918599\n4759570989273927148\n17219931108594355168\n11046199097234940951\n6336827270028213711\n6088677929383634537\n9936334659209192538\n10646911048009428114\n12086000010837700822\n11708033982652329072\n18358168676207962279\n10961733690532301548\n15970916992410632395\n6779414720614065106\n5700795453020390233\n14262842558403124957\n15552802387112849369\n16882226717684491202\n9243723539968146640\n14817137441965382565\n1981255008781185520\n1910088052198568454\n4102737589934633887\n12546743709030467006\n7987943842600170137\n14665777007907341569\n7098312992799133068\n5162796514787623016\n13244101875118275853\n10912335353912064035\n12645981988339861968\n2055175707639142568\n6679173700036914975\n12390009881201707453\n5636547862080799995\n3048183218844191522\n11109933746725910350\n2906118899565209061\n10386133419369900028\n10379006167218763241\n8958985377527283604\n15815912898853807989\n13070865072570863624\n18266185650625509615\n14561332208939456831\n13294819301223277919\n9778259378884750787\n4046368573992709830\n9967566482589538868\n503411680928006862\n15798633643616801335\n9970247315916147930\n13596657164971300343\n4070496987383466131\n6112027499322124235\n7545798156428856657\n6706065680575763598\n17936547182204701158\n13649651038856434954\n18443582816141476096\n2368793274116159959\n870013575666733337\n12533944066478200584\n6191544803260203870\n3134032151411792400\n1997199966116886093\n9601416638926666781\n3740554745241086972\n1883539876428269709\n18319529704495169709\n9856513980859108830\n13780559868327114498\n9611163979627974061\n17738246970377841363\n13468863835005260207\n17440935303388017617\n16699244195596998344\n7046757668856370545\n6156936620833171614\n11284594856235644401\n2454841291648338365\n5887910053966334891\n10858260346551687947\n5888694039022262897\n2340818024100810804\n15766974871064627648\n15390742455967155\n1986029515595876970\n7325348943403347207\n17249254672450198492\n15048216802551508740\n7529769116866071661\n6399174140636410372\n12945894335765207912\n15298782653977363316\n6972988862181642557\n8964755669076195092\n10712299423757314667\n12339656810183429202\n15770442359296415495\n15236113217263404680\n17401756935351780989\n8486708602826629338\n8856864437352204000\n3394872861804295911\n7096376781495554502\n18287885387678701560\n5618245248081180757\n5354443163434711610\n4434067970225445256\n2982231841747287323\n13519770229191375567\n3362017143936932216\n8905971874018260194\n4217127358570860993\n9882121875480982403\n221184208255232385\n7651832671587611515\n6293303410753957352\n671914114426995668\n6259453822911867577\n17930505035890641990\n6886149071816982507\n15055809726328221182\n3143147343017194893\n18251602025366437420\n15356543321188080581\n11983464496683801624\n8929240484885654084\n12020825102223686917\n5567424296037504009\n9289926538835158248\n12179248795063871122\n14154296192965795717\n15805220692987536484\n16988943236884355027\n9433669900282344560\n11028909983171567388\n5063592597367450107\n6274665456131882629\n9757285114364841258\n17519841451216391026\n17497593626912583140\n15811596122292011760\n3627536010404200676\n9201959634089959388\n15132979043485747524\n17570109934419277146\n14845116573907907728\n15639813633802006016\n14125550484775057036\n15239577848795094893\n1494499889949462057\n9551798954044174203\n11992258946706531731\n15166730302875937903\n287298343923091738\n11853711756501387523\n13470541910857886601\n15572568842446317879\n7320363221004950796\n17819470949171006977\n8027114441470558569\n11306295605353967801\n7549897366842867041\n6899315284246434582\n1188807036180069308\n10569004120222710433\n16979550860662381161\n4480814173180252688\n11491590178812795584\n6455618635494278649\n18390875543502894132\n7512999343397086570\n14653139845988526977\n11469403396963112486\n6547173173151022616\n16146445145791417877\n4939814522545351727\n2327991544943967958\n11704148251596559198\n17850070941567262786\n9859394103020129337\n6647454805376581437\n836425753878885426\n15049528716160704157\n4373271299671787748\n6099002040605066885\n17314611712612507827\n1473343888263898834\n9634418359514220851\n7644624764587475301\n2787899790192004616\n5728032432300918145\n4982182098241374108\n11914638195268756198\n16974902978135765291\n684131177886271852\n13823558881464414479\n5604241088426107348\n1068187524961752193\n13750540595795411224\n15021199929280631132\n15599593770435064495\n5674710626938989390\n17318675786224324147\n10391680017540618200\n969907971942960322\n16242520985340085024\n762539222864773275\n2234950251737072253\n16618511115949449329\n3996530567554317991\n1631802981345493243\n14269530326124945621\n15524811358874317952\n17637213212753499417\n14857021749001711233\n8295792112567978370\n18202572402023055044\n15281169583812838514\n8017451722757692352\n5870629188603249900\n8742359259492332748\n5200615822537085575\n6606558634027279985\n3902639792974818886\n4936818183576869150\n10745454091506189838\n13612185140968392342\n1918913528551420733\n1993251265172381837\n7832300171669999913\n4438135781885301816\n11489498563019292868\n4374843911868375031\n4603332291901913450\n10748597080146349544\n9072509312707973146\n7014691371093458060\n12996989310674542588\n1168141953985132452\n6801708595033520960\n9554886096184934272\n5369253624665031838\n14959063919785749017\n2831030291667150355\n3302897064741149164\n14095235495459021028\n10228689780569836199\n4247190912074276721\n16483175129984492113\n17798503192770118574\n1210535598340077081\n526792555564231608\n5412987843508168579\n6641424048404259640\n7365901486100357774\n3232386117599501743\n5557421146429259295\n15372534076705683371\n12963091474384620597\n14064013388990204371\n10868998240508545100\n1328089983715343111\n12166636387082010873\n5459735059357190633\n7931462037720100881\n10117421064039605554\n8274697595641966360\n3286413158491138707\n5792455712472110335\n8985147971826821256\n8589120381523979926\n8687379744975611381\n841017624048558317\n12011906364497177294\n7433265012462718608\n14013815899595885948\n12801537890632008797\n17613967018839290433\n6087420603622021778\n4960766825915777225\n16692103384613028257\n5256256385623080907\n8664408281190341774\n2563044355685003261\n446398751039063088\n6248532738633440646\n9879913124484104148\n1056064548361925694\n6281273492885290448\n16999068618870018321\n11228415622720366978\n15380598180075107392\n11661456873031041259\n8187625797350553970\n3574752903730856484\n13895216456441569165\n5340530002653815495\n4090340031680931612\n5168235106828890806\n461701213275521198\n3285719482714431\n11253537747964153145\n16779684593061500603\n15835315926379897107\n13842990360525640598\n18302196965339622556\n17093660603005353129\n11845357336131491829\n4828484671583780662\n13535789676859335866\n2244097410754192782\n1886393078265588741\n10814418483275677694\n17309762667473430965\n388043187116991840\n10485666008742427484\n13793514272777243121\n10353933654441033836\n10480596510340479076\n11524321703553539091\n6531784734159071398\n17877941802045872789\n7974845719245986671\n13399133950160942661\n17958164647600520780\n5608042361269609689\n729577929082043605\n6776057386756159627\n12540247791402368537\n2690883668194479909\n12352645403987077672\n3911168639521176125\n13516779819768034614\n13868060340031036620\n16369790097469818986\n10155388752206144672\n6312327877285601809\n15637584722050466092\n2265120119742913333\n9586238369312180643\n2562047194752652805\n208745561716115990\n13626165185132291319\n8414677958751130734\n4290956364698345525\n2834932863034803183\n10281860533359734509\n8184341327852199196\n11433824521465282836\n1224181370680917307\n618861411029675699\n4603332291901913450\n9994600581096656326\n11166559373958677042\n5235769130097791655\n7382091435479731685\n11237552771651491082\n2502352617398620579\n2113820440908572158\n18139410375123163191\n3591974959822164718\n11470720713819721735\n8793392012739806721\n11732899287490214880\n2731836273524147023\n12927630024923078896\n1751048894738473805\n3771590434199789685\n9911040625898208348\n7611460096341032334\n7096376781495554502\n13909170214415280875\n5314811031964818846\n9080880900428375213\n17935920785679989933\n5069687496488879857\n16443344311964435942\n8709171847670190703\n9180589457704661795\n401052600076379098\n5914230747233456186\n13879258339192372549\n3975962974182961935\n11379128706198378597\n6419876661365121985\n7481385770532843612\n9435483296351744953\n13953597600992570788\n11938949529061227436\n10877510031951812181\n10861305566158851220\n390533303037226174\n206961508680337140\n7452608398527241808\n16948441291566991384\n2370883904116955173\n11905075842608509718\n13629684778501249086\n9247379268519299310\n16996777815047976848\n11162239898191476695\n4893631152295780410\n11599449167467690516\n4052653798148323540\n2792603936234911357\n7564537002885173543\n16301833091503744130\n8469384157494505595\n6780200247054486695\n17783003789219881861\n6746239997605562015\n13900897713289631107\n6359592730801888655\n7619186955445735456\n6413001281090601879\n7640096676919136988\n6213053905334558838\n13654553865788259822\n5812479041551209186\n14103280779999504288\n4459161718336039808\n16447318599146483594\n17675122665841358774\n15887728889020855855\n14783795194916587381\n1460875302594239618\n14995647065614221753\n13880209812070806094\n12777422504708252623\n13313378814872393737\n13747141977208799401\n2191276167294980494\n13282509254857194078\n4011046553487857465\n14249220499901101130\n5926234726406017899\n1324292838738405048\n243149692918604812\n12923112291621016585\n11877914012755752367\n9188920841732089086\n12640643483176989963\n6259453822911867577\n18260328249424632492\n17761119930647637260\n13898298828867966221\n1791562590548565819\n17567028433546034572\n10717041775735875590\n16618096558346665601\n18393891950201498846\n405676023262706001\n7880426206856684378\n12099593997855791463\n5918729287991871289\n11418150897792272206\n6416600351504857486\n8912840850730979558\n13568522640819949525\n3810009882508575246\n50847090111711150\n15194547041720424121\n17369491204600033155\n3311506585352227509\n7645097249097210218\n11105153524541524436\n13838557836780474261\n18063383809736429288\n14864089095957249496\n8848574688215927399\n6980853665567884744\n800857523808831093\n16766106271897869934\n7091882909260905465\n585768448370577482\n9307847380749891957\n9307018145187341489\n4676975697766469535\n7532466643457806197\n17094268739305384798\n9708559856960556757\n10032493372364905644\n18298408266193597084\n16304798386782027492\n2699249687519191224\n2503462551854892852\n13631672142483282799\n12695121798125966912\n9190471769779616479\n7042743113063285602\n319833879614644109\n17014020968733015398\n2422673979429418021\n2880339721523650526\n17012647053457982690\n5433913080792031706\n18115055582538802450\n7167552422065364896\n16623434034986190717\n6099039060808011571\n7760375821793613761\n3500065645552044590\n108074834984636915\n13225178241182043469\n16084590801545439316\n15929779039129801497\n7393596330348722196\n14466148254943156045\n7301349756724264708\n9921327798797578367\n14901304922797670084\n2489501254145451019\n8839743802003319172\n11590169990694428809\n908205778194881405\n12834748398789405811\n6406753057144978541\n16073294886823601223\n7377439879156041975\n2435325114219267982\n16355387331224905205\n3004280358728157920\n17093698712153313376\n6728267295768155001\n4552056842024570547\n17898632979463811048\n3454576085629482056\n3740510255645445266\n11366013053578001894\n9968616748457601051\n10616206999188888698\n2428810504115701282\n303002278070257072\n27104746048536209\n4857489809475102878\n9153744158218064428\n15602664842872115185\n6631068518567404371\n18102437294942249999\n6508421066389065695\n2214723172814724399\n14400920255679478647\n11462005347632420432\n6783789074452539025\n116042522893858659\n5930501203554320740\n3544112126485601363\n12838579474408964767\n6679173700036914975\n16767234566921040895\n9828502752971653487\n8306166442826071647\n12795076990329982431\n13990284671012890592\n6873984907729130582\n1689714516411321265\n12476201829059740837\n17953919156220984198\n8923094915806619071\n2637076412949079847\n6033615586336737200\n5982232924668874061\n5976187743451015550\n3064366918473189383\n7784526728367681262\n1188579611328643233\n2478736107649357279\n16353090438930582168\n10398644738803113564\n7181723681307928937\n18373138688789675937\n16678409336324337155\n9930280582696110685\n1779005043854746398\n2057627454977535495\n14397693739564684031\n2489501254145451019\n5062143164814524305\n16916122283576947672\n9742174232752559313\n3860932202669966135\n13516779819768034614\n12225315746289939147\n185435789904403918\n16339117924960133367\n519839864774129012\n9043264981083858004\n267934469722184177\n2368793274116159959\n4676292782526529821\n4305747007031071575\n9151746264767483388\n6972516205967822046\n7931447870146695532\n15535055177365877990\n11102977964652954463\n10272249578594791850\n3451597686465626882\n283851559236679122\n14434813196846999850\n18271689371389690580\n9410456995303352656\n9974529405430294584\n7564558854810299711\n1860939690850686594\n8314465365932501575\n15274553852720134908\n3111129301420255468\n4594660694380412121\n1740604053496138597\n13858749413080222577\n9579135144216063982\n6026959113231972422\n5443983615453854153\n15636749127653109355\n1944749268511144701\n14680783091899975525\n11529426607764862709\n1920492306246998546\n3259994264546216631\n17429100430299452245\n5477723978802195107\n5078215330180903623\n15268776863196604850\n2353635350932890608\n17345389504250995367\n16407097260361374208\n10620108762516550128\n15591578133294604069\n16615901554591043617\n14634465622038292007\n3426509293521548346\n11639247549688430548\n6619546888734840454\n10748597080146349544\n13903459001206053141\n5804691470487536481\n16392904448435436724\n6162492838246440685\n13535789676859335866\n12053520003133302661\n12015182821218129087\n16826268199936944530\n4458796764810705524\n6872757667809850715\n3554753324681949387\n13384542908571332113\n13381340863043233019\n1955590705678543978\n16474061459705197906\n6426705453216871358\n5620463658452653928\n15995933892742883208\n12194021739258782189\n1451849523373689604\n3603761878677833284\n1402599613178237912\n17332843921935952319\n9529410308403745784\n6822365653093023224\n14626286855804467259\n1478890313439404796\n8803100686083037166\n7184083988563728431\n557352925087020534\n12030714546994016184\n6205174253369353623\n5900095196605673235\n3727859432651183156\n2782220436362552512\n15866163311008275766\n14139198054243546817\n4948668121176268633\n17700192067164807299\n5088582598373853807\n10412054975271165657\n2907713320783999131\n1457755988732663323\n3873897904725815759\n11491768274396748289\n13813478904735061154\n14791085000766218241\n18300181452325442055\n14463342628006970203\n8140068711377997937\n15939152928799228184\n13523919159791432134\n7820753501014450235\n778805089897817544\n13073781207571188491\n13977700398161735777\n16019815574282483679\n17741220254406149309\n9801529727068067031\n5045064007624960724\n756420071251687051\n17332843921935952319\n14312379723369725422\n14057281898935656568\n3679786706652024514\n691165152994612861\n12890019280538623677\n9904626054019955988\n12801903049994283400\n16019815574282483679\n6565263345107063130\n6723293658520851858\n1740446236329750292\n1456378053625779642\n4941783620126591363\n12943470839338994090\n5397531441173038581\n7341945276626185615\n11001622579193304862\n15105477397474386194\n4677615866765653444\n9942828828858405830\n13442205780209344333\n7236562751923791469\n17475670717438227453\n2013923941471053031\n8913222266741107773\n14122170428984069731\n2338986522575928426\n3798734735815351260\n6236045060685266132\n1621445085287517426\n2458766288079546244\n3866750256660797879\n16207854771576522309\n9051537975233309380\n16012173134958930348\n826279373635099178\n2655466076161870735\n8645049191933805046\n17790324868430922120\n378397805079155261\n9994472354949172919\n8970438545861074999\n5739127236364731276\n4065122500098570917\n17276448609064643694\n12081719786244465569\n6709721155687645698\n1728219986178414653\n6552636956051131588\n10482695410500407466\n11754959781255744057\n14931541717601273718\n10861296721886453034\n9730962985307003668\n9409923476273314312\n12606609368945118373\n10118798938243884570\n11866615618041647236\n16844054208212165153\n16914613934407826928\n17492761589929535495\n477526879173035649\n1183382641653394541\n7152737482556912856\n1357885771595192605\n17697249472954053497\n11865014239361525217\n7966496116896089963\n3727859432651183156\n3726616214873309247\n2654821912393588057\n14750824092590754593\n7142359221755306121\n12486568958348083238\n15304430055089871039\n16249551865518587637\n10155388752206144672\n763527714032668595\n5676887997054051368\n17377285940888651698\n936941500828189722\n17715529680389398994\n16017117598912341665\n9192281843548103188\n9944889989920539140\n13925666799818184910\n3387095362882758426\n1661835836201009937\n3865253563002294618\n15253903965265225069\n9855650404154013618\n4558280782774541282\n13958051895146704980\n8240766313353025698\n18063383809736429288\n4945111919498837131\n10923054345434247766\n15356543321188080581\n9527687351606849015\n13208799016288069201\n12440346649192331693\n11129551403760100982\n460586852322873629\n8314465365932501575\n3634053640732155104\n9757285114364841258\n3770417294339158535\n12353885699742531997\n18068670605668162482\n11524530854144411399\n5947996406346667053\n14911155983283016493\n14369934727944777154\n1470432989286689525\n2723352677502249106\n3839242101548492246\n16193538064821950033\n11064823609717100611\n3219174072947549801\n12111809612796852644\n2488331726224270346\n2717164928082181748\n11917210916583275939\n12098865378270934408\n16333690004628128126\n14249379990038386664\n12774053866776381357\n6785642929145938781\n8377307823670377649\n5256524145770038815\n6109690441767194564\n11084694259151971765\n7356312804191062751\n7114807358339177827\n1931887211377070411\n2154851598827797161\n4124079099528741364\n1639651082028337600\n7875995959236387\n14037938014664161606\n15006003239253802594\n8146457958179190586\n10183251270994493951\n15328811333574991637\n12778771598343342026\n5542124340464565685\n11485537579616873215\n2184269629303402321\n10225919488693279969\n13602587522406085461\n4075883611489729648\n6580155564600465739\n4365625970229860704\n10704968641662560831\n15650375882129302865\n10960934178818611516\n9109146359590558319\n5048941348996558000\n3940937224306470996\n17282371072644342341\n9601416638926666781\n13096474681332339817\n12003738265269331928\n8542385087575098968\n14686889156981620845\n14234716252033302978\n133575764409891266\n17969206723589310902\n7673093768542385745\n2477312020186903189\n17760657476259385533\n16075219694340100188\n2488331726224270346\n11733504701675984166\n1814164117830594921\n16250172505400443933\n746150398584091384\n11235189045840287503\n4918167680412789018\n4429899099816260191\n9708559856960556757\n4512674360900898808\n15155079960956177521\n13494682541568022106\n6288608847115893246\n7482800138227128197\n11086205205630075209\n12965624778421219321\n14713309708523394842\n1591874360243236134\n16434412413422510857\n5909601675922458467\n12893861629602872300\n8329037320118876651\n10954741197668243000\n12699633925824623049\n7726785057635005390\n10952254095573086731\n15704941582519027869\n6667254712192254475\n2024414779072497023\n13362190025254324716\n13468746127162475325\n11424050725696075900\n1104978598601332338\n14279364162055568747\n10887631581979376571\n9979232666136756598\n16473378930796384604\n17342209983812292723\n13922482948373759016\n6850921823943022285\n11406510695394272491\n207028587859127103\n11520571129143455500\n9099087478020747911\n7105846862229384010\n11397146173859698555\n10925238510132712090\n7578924754740010439\n7673093768542385745\n15579557726442912962\n16335388478750439019\n9456556491452215581\n10599408158519924772\n12673708895932667713\n3326987695900668822\n10686426838751491049\n2333566774553319469\n7036567973012955574\n18275559369605253836\n3553819518684298433\n14868728401415517824\n6822402996526390097\n5591053181073900796\n6038410220417411932\n12574169616537231107\n5588204780062259470\n6489882656498285517\n15471528436026947995\n508928605306302012\n2171522640982193703\n7274831531279278149\n14776984898598254487\n5064008965282223366\n9175838503803227114\n12601405667356331420\n1771242103197913564\n16647558463822374241\n3682583462353988646\n11623899362510334511\n15349651205656105932\n9986760084259863773\n11495388435296765244\n5588204780062259470\n6617368612347434722\n14354373298403263958\n18279916234267649144\n4198893634372866258\n4779763426442721239\n12546743709030467006\n1298382097905922808\n17632220957449346381\n1547830259843785866\n13321644741314492329\n10387945110175428743\n6220548936593110208\n1459893991018366884\n12628865618903808905\n9641388481773274977\n6055883360449123214\n10158562383050462031\n2822891649644144007\n10037693654292894630\n456948325694675339\n12153701674236020437\n10723894657162390798\n12635911497847748416\n15683996944715002395\n6778703207871686736\n13855208480493017745\n10598605270221375583\n721370571098851302\n6871031157539153886\n13452099038736062025\n453708481214355606\n17106775520292149783\n16892321406246593213\n18296626038366348120\n16285022622420113196\n2557578841514868274\n4215523935549933081\n14074964262978341357\n3170295391122038844\n3648415787146604862\n13117264338048358679\n16775426497690113291\n14712775166285803473\n11742431622142571196\n389470311632065687\n2481225588848755748\n8458176843839112802\n12370284043326240597\n13553602447037785185\n10614208796838435112\n6248425323054029645\n10158108595535097942\n4545843584826458339\n2299649666271633813\n6205174253369353623\n4216895091951468122\n12422894965348612308\n7891385712610720131\n6074040745765175625\n17440935303388017617\n888532550166998647\n9339618348590024967\n15999634085926735306\n6960150859772028802\n10301985124021369274\n5897443315368934601\n4663462116049612620\n11228415622720366978\n5669713531882338843\n17970436686901618043\n8741783846304410661\n1537851684852690007\n6698853281500707421\n9339931788502227843\n17143549519018304482\n1906383374628095067\n17534208526087055247\n16237285944896317390\n10963080430336012425\n7281505211729982292\n5023194609106177444\n15508709154161903111\n2916697913127091501\n578632051564987212\n3682978285244286943\n12640643483176989963\n398727942078019488\n4703811545386271544\n14826273853993540021\n6700332852844901138\n7715583375122285577\n7645097249097210218\n8801258974376178118\n3969860230814536568\n14446587637024488905\n4519005658949396867\n2171522640982193703\n14551216212042796237\n17119310050949436226\n13661071463567512702\n12605550678298749442\n11252153974990425654\n16016669480317137194\n1562714044737064497\n16304572006317423179\n416723215079966562\n4351967853406158102\n2744450429692624554\n7784526728367681262\n5060379764451153696\n14446587637024488905\n1267681115448037761\n9234548591966566909\n18187284833661701506\n5210828633379506321\n17322000988461863546\n1491345663052222084\n258682525998895549\n11643608906991658710\n8094666317460247028\n2940759257990198854\n1769721388770685583\n2490015626828556673\n6064239558043363484\n7482800138227128197\n17014020968733015398\n10741532802122999243\n10940392569223966385\n17474195188399791411\n4889601171614462242\n9247393093472092889\n7408646339087765070\n4635524050068152319\n10526945537776261363\n6032208794829701531\n8005898641041703201\n9570502987207972543\n11604482055304213741\n15572123751417592725\n3327739461126484547\n1919937008721528056\n15355627722741738232\n404996509812323941\n10780672929226546574\n9768379914067363023\n583440345030401612\n1007200021423146052\n12411533545658591311\n17438694905259373979\n17233327700434298091\n16566178804004546156\n8912840850730979558\n15396134650020963212\n17643720395175769427\n3614870642804067378\n5029694100237700764\n14341629584534591206\n12721044462077996582\n2937410910443181931\n11172092790780738690\n602394350717843212\n14624391685888850152\n17124701017812707992\n12739556402434697250\n2111285770747781409\n10759049523444411670\n15028554408604218719\n2754711293985799133\n13896116386713218281\n4733269084491180130\n12606245735303878931\n17962781990332865619\n14297402208521510267\n3253389051640947285\n3316646277040432797\n1944675190758705542\n9295514215589412235\n9949613683003807750\n8585669296951886761\n10250475636840924027\n6344077991233173780\n3293441915994385460\n955238323066257077\n8994171811420445626\n11414976040007859545\n13510442832999295494\n15219046474377472076\n15775632603247341599\n11628472654135404328\n14981171119229182509\n10319580878853818867\n2778394389678005832\n299561846510567674\n7183826317249901790\n18119965451281684568\n15407317856275431101\n16623434034986190717\n15389330012758785558\n15514365491500731748\n9218942371999957101\n5156379343119973750\n18403898968713802690\n14205437203092917815\n13301201953141085134\n12902412493031789639\n13228760503064203016\n5324770870374892623\n15262709596895639696\n15731494826008524908\n15208012723752641283\n14720444444495653362\n2643409571148664458\n7963333829149842968\n2645281137428193371\n16647558463822374241\n11827956148088684180\n5681310480988011732\n10729419830781954211\n3776985349296233258\n13881214360208557101\n12902925204961968271\n5691988227476662041\n10766041007385179921\n6267940595430876644\n7538710163150486095\n4161477986419924684\n16967532646973307514\n13652264000121656135\n12391529206304563408\n5144832998230590664\n12334177401242287749\n12147239615305339317\n17955443819835077734\n7051443620577750797\n14924533651107974524\n16919096003219213769\n10206130451080086977\n16674015859527610511\n3467185983422446874\n3095682005579675794\n14310497442439430410\n1529018025169321127\n8681126738734696612\n7415998200326404511\n12873824858122949632\n14318806937873938833\n412414614672299550\n17786876470638506365\n3959199428767199549\n243699172050670149\n9810496267187041544\n1222850176745599431\n2660458952984080447\n743934076580653333\n14858533626309199126\n14663193039939063325\n6303935495324851701\n12424600750629086378\n13552897022042134032\n10683540940094219133\n4913697084476582898\n14338155873859536988\n4801745846211149975\n15970032088146308792\n2720950261276073760\n14308910387161878154\n6606479147339594817\n745976039145923799\n5599112079252099143\n14213554064325762726\n11907564453864350638\n16014396331752365705\n5914230747233456186\n6460559482845639426\n10910690297367208303\n17216861388208835590\n1134965571618699631\n16415327907634070800\n12816055010883165687\n1210889458853104443\n10359024083254408084\n12079170567822919916\n3860932202669966135\n3263931516615203212\n13370384834204095336\n15676389918053546486\n11623590566828646146\n16258338494062779003\n14691932769216436537\n10834888515190079310\n4410456143263457517\n6510715093252845698\n1769193187164805800\n10361135215452544647\n6274665456131882629\n12288039374110578955\n7258971059523535764\n10084992251724453475\n16492862757714772014\n2987980228726801688\n4143680508959735857\n2506595502797268076\n4696742252775855451\n15117477797350689843\n15836587244708121732\n6399560148446876708\n13865673440158607686\n5234567144359252336\n1073291464082492939\n16574794996301818609\n16459219961864939673\n5456084766064146637\n5279570138299817821\n4884894195264582976\n11734497748721594950\n4302969532850732797\n16332340790484355259\n8552966243049957434\n18329012727634849156\n3804273208319445013\n3753798980697544541\n8181682490972292851\n1352849659014885905\n8017871240977894132\n10795948634246859846\n7005089938403835\n11902389983134896409\n15046403931157572491\n1210535598340077081\n9793514150673686692\n11975164022522405089\n16236110418421678960\n6062583236200827251\n15792465796785103347\n25055305154089966\n13098459210771980203\n9382648595796918520\n8193095410615699649\n3191676532510275720\n10056275450866050380\n6141475811346314056\n18259730237980192180\n5298446543744778841\n15432544735555256872\n11710768133752362957\n1045221867996985596\n17638002699639979106\n7042333832340230983\n4907970019695749544\n15974307718525827626\n11505016113068334673\n1046920790792201021\n9452721029332986678\n14495523392354584701\n1039970940145459559\n5760865757924943567\n3260220166454174512\n9661825285156968496\n11125058379341890857\n2666260743438706053\n16372276537555466090\n14364658089741796382\n9957956948748065575\n13209516138870522243\n14708849682855786451\n16165484128422413112\n2602580649133291634\n379375080057843439\n12282092305171513988\n842845896321320628\n6326592166060505121\n16121781610894733363\n10611179668243757955\n16942599255995980389\n10872816211690186392\n6815627460838659012\n12343039147989204180\n15873568925529500761\n7341945276626185615\n13692237606027235662\n14960569100269143005\n12078534185445509143\n2316278940930333496\n7995061728487763274\n8133571520860480514\n13186167650714614436\n8254962176492324863\n2026613260516377959\n13049567544305918904\n13565454977388702927\n3514065661011729617\n649387856981643423\n17212848789588653600\n912262200513156887\n3701733155189856043\n10007729913575312459\n12402339605130987267\n13605403550382313983\n12012569736474677812\n2219241902556607144\n3493719666075232441\n16684167098592184177\n11619526300694528901\n18216575464533671735\n919485394379794773\n11941160057560583596\n1212279659217817815\n9956833409119172110\n9857351843377542192\n14414868528997896919\n3902148576847872159\n7717469035708732536\n13513444452170039623\n4140229363415360926\n1381774393702146791\n14733596618754001367\n13184063736535621011\n1779624071008043590\n4981809828309522868\n15610348170178117448\n4471272759934158946\n14979103429529796315\n3039618275556340069\n5341264399710514083\n18301028784468092378\n16055004992820937679\n15950168854509983850\n11701885565704637729\n4721026661978525115\n11028919252630546786\n8490794039730250302\n8681479284275966572\n12757179870644180856\n7492869317847367002\n11198437554999442297\n4422839332656036645\n276814041883908860\n5545288732787033973\n5203688384634491496\n12568082877174731206\n5443559958527265653\n15833882314655552614\n4335650371421181310\n17366678658099620161\n17747525210776296919\n5339366529268464230\n5833867775218765366\n10250475636840924027\n4302620541414712169\n17543950492194009543\n8134169145128605432\n4543885464626414615\n10994476047017175891\n14773629643209004533\n2191671188227177797\n5240628258402523590\n6959625016381647138\n7698239103211098740\n9460322088076403735\n10802874734071422232\n12953838391815437217\n5132537937552367562\n2414124315661316849\n11807719573216845564\n13741767093100081520\n4003084531196005706\n12512062085102080381\n12035431828312081858\n14979239692466710652\n5438413749319666403\n9253187486663260522\n1659571244505098005\n3760178023892005476\n12525394028503644060\n11263348062016359407\n7391735935330514317\n6914419268239002374\n8381517584801168894\n5684209831490739499\n7111105190663991043\n8865731909707305957\n18393786735323900933\n620367790986443117\n17212848789588653600\n17955378815187628640\n7807318527048471419\n14319606710762172018\n6844818230187214246\n5630329414182264951\n3651808595177092433\n4959672829891186398\n595793871254121101\n9339618348590024967\n14122170428984069731\n9342602337291332456\n16017135294685780513\n3740445483565059823\n8161103853732122671\n16918680098800645247\n1606872545751564053\n1591510325657091611\n6360051259553181317\n511650841022384879\n18443445784673901765\n5804691470487536481\n6901659494050096846\n17149392383733539199\n9058679712350666489\n3970989631278553457\n10525530525037448204\n14562263115008608564\n8836000662455541662\n17185174889166250826\n6310608112759839552\n5675828460718292836\n13155810675918612775\n11992258946706531731\n7214076766230438463\n4430979949105515045\n8657505885658228262\n1905090645922269905\n13528984906890609185\n4625238067112986572\n1345689834237979230\n9446734525530739579\n15180789932768745866\n645597174394745335\n13715095466366988143\n7485957962639931002\n8285468988215742888\n14176951008900162541\n16497657518003791643\n16625799304458265573\n17689519787343166975\n4547369209682563709\n9292808813149961673\n16756403295641656137\n9503543238010495110\n17143047346875405315\n937970160205425253\n5176433906683210288\n9821953611794161614\n13252293589792630317\n6136659425395354575\n9359265163852402442\n14412372446375226715\n5546757454421394022\n5045571349998545204\n14043630004623551440\n17930505035890641990\n12992133987756322381\n9986120386215028993\n17035173143605713370\n14256663488893523643\n6846042356880061760\n8705586278068914176\n16479868901495097019\n6636341726663512347\n13469872219526872991\n18285928163877505683\n15473719348635964568\n17711059704581460090\n1914127982526378873\n7807694111626425960\n11138731892917993915\n15379530465429684152\n645058298102214573\n12449105663815170003\n2831030291667150355\n347330946586875225\n8440587286364419562\n7119093525620710940\n826279373635099178\n5215477618204388987\n13982941604820231412\n8447142480567747325\n16519749389945642630\n15450859059237613929\n15783034488315598768\n16246696712745224074\n1885490084088585284\n7500841792531274335\n9677014516042720923\n5623748775884180412\n3744338859634416300\n13238945521716582196\n3284872058545146289\n15633771496294694775\n620821526654867076\n3630538244113749234\n1847682884987902627\n14851626244026110568\n10344088442094743658\n16983876025345002303\n14893632222060479042\n12438237673280586355\n9486104677634331510\n4450419140938725194\n15291511466960101988\n14027330308163866875\n5136219164953516216\n15835315926379897107\n15626547594177480160\n2871801466588109391\n14748754861813812906\n707110941341257420\n5736516153833537067\n14417857406398794169\n14020537515173481426\n3257880745664674244\n8209695421012048290\n6500728583166347574\n11901251380826859435\n1308242554601685864\n3822856732005045298\n10603932884885017326\n18262301614706337737\n208745561716115990\n16172879748955132362\n307752522208338847\n11901251380826859435\n13584181953401935723\n13186783529132821199\n17049656773411691787\n17292426963431207328\n17875346184718117291\n17248266259314451778\n8527647792065927709\n317720724607113479\n5729979083687500644\n16343897468992562217\n6276629007770663522\n1030051430426999838\n14218346233387312998\n11462481001012722251\n18132829489799584698\n13592915991394743290\n14800882794950865440\n5144832998230590664\n12299308580591811172\n836425753878885426\n95413231391348313\n10420346243062503267\n14084249313071807684\n4770257091729966418\n11551087420034093598\n13832934164229471964\n12885839929708630814\n10152094374988614291\n10114218426500935847\n8683119908149988007\n16837231860608637675\n4519186703344869713\n8470070636210653733\n5584978628899906301\n7591766673885331312\n12065639644359096517\n11623590566828646146\n17280782918983563511\n519262811583692287\n16663979070055085447\n8248242539168032660\n1610857986010919778\n11903314814633334561\n17016394037082164279\n9486104677634331510\n15597948670051269752\n460586852322873629\n7510380921624605938\n3362017143936932216\n5948578529561085833\n10267072952018318572\n17391698704831873323\n520806793725369465\n16675664741811622652\n5676568663264242103\n3754613623381218608\n5295674471232402776\n13738693316985641913\n5735761582809677651\n10951195238774466495\n34604752048101049\n11572682594416210692\n17347901168713998211\n16172732038467402946\n15057246885723121222\n1260141140645412178\n8662754794636654617\n16246327816209460960\n796273923772405539\n16047677798721922208\n7258971059523535764\n1832929734942420005\n6414180480433160900\n5067174348115762174\n8153894098984316060\n2797143678810453326\n17980066074063851026\n15201543482106712583\n6732329521391783550\n5934398952627574085\n10151837437810677092\n6840142065755414964\n17632286840970811874\n2876120586525179271\n9883852259500109901\n1897964240990093681\n12655044169054620870\n4014737995268602657\n3508999556981458585\n14938172583843025914\n17318181941821290282\n1726055569302450435\n6876541438904281005\n9132622035038615219\n2805309988477866486\n11322414960516992554\n17092164215257694124\n9860909496504570071\n8406345026911243262\n10393491497689241869\n4431298018118762282\n5113732477550193100\n2980159931458766873\n14806831790445835342\n2068817953143129486\n5500900419847881607\n4887116503517718740\n14095235495459021028\n17137436529885653502\n4439391539546524596\n15201543482106712583\n1815561647990942205\n4014737995268602657\n9634418359514220851\n9017030269661971479\n10898687425812049502\n1589907520457341931\n15621813194700388266\n2797143678810453326\n14318806937873938833\n10883186590896219040\n12017649043869344127\n11248004212680386636\n14231783564474342382\n6895841149902732686\n10278518055398716084\n1312524122003452261\n14246209489311876470\n15321442013707227568\n14295852220408248396\n12834748398789405811\n12397533140860197956\n3149646304768529748\n17140699157142205256\n655310518076846319\n13197818217098334133\n7320678003367714462\n1027046839357124498\n7166555479513479178\n11865717300871688546\n11553475546933871336\n3183188281337034432\n12983038325291229899\n13520247816010460974\n17103396208205581288\n12023062123520723597\n14345260991413925115\n9632042806602912266\n18150978664333495570\n17692045301890089805\n10204994756481619007\n588834445818771176\n11579351208539335203\n4410151614677167325\n17497349335269309562\n10814430563743076081\n18237407187779942437\n969907971942960322\n5358183918777830214\n9819166993050144622\n12606245735303878931\n5333088179768505206\n3721497349416936578\n14657873664237086489\n904662346776673206\n13766368121241611683\n9970816963295259124\n15935576670110205463\n8146622962423737887\n12197668862468181098\n12831001600514528290\n4003084531196005706\n9660507236680314567\n13628328980608964909\n6206825546361676762\n8122098561598269901\n4427743302177313628\n7235426026014786867\n1198267195365251783\n13960245448311200144\n7963466567614127420\n14415277956997930958\n9679250880243157030\n7901157240393701582\n15398520201166147968\n1420160859346121810\n16749454157102138906\n8814693194751226713\n3155721875969161664\n2671937858843578934\n12014510045908843812\n10388101636166176200\n11032977349149956498\n13261351816688237698\n6253726167752550756\n6968524056213815509\n18319942498287860537\n1568602342738674944\n7920715656040526521\n10270752284359690775\n1780876351105525406\n10522924757964200824\n6737722112436848575\n16390991540830829955\n10150793513467045024\n10139454648620587002\n11849034993838087096\n8322945563710811666\n8213194170135959957\n10193657244099379913\n18301414166848105699\n8809533969524123837\n9743136408661204819\n12176086886948999627\n18368919566549131059\n3417528958021458571\n13740728527573160497\n3257880745664674244\n17297118854495888966\n11824305125616343054\n3542602358419722101\n11950179613537227096\n6008389567212644213\n511650841022384879\n17359533852998563990\n2764673925327728575\n17651497327684624657\n7162264774097111556\n6232341421205603798\n2682807903662135710\n12724707472833652757\n15253848750661907540\n3648415787146604862\n18121515504242796963\n2495345974037947129\n9023540719005727117\n12946803752358849779\n6171058329726382801\n16050401532105992132\n15331574922420912903\n12140120487682036697\n10546791217709786268\n11145289580920844902\n8291483277980563212\n8997743698120713525\n8177961663764953648\n11831597098738817169\n18431978208962553451\n1748771464049471275\n15093522620658220865\n16487073453023119078\n9093467487725674669\n5496201411719684492\n5748430931155785974\n13123270837370987949\n17952489172638654753\n8296973004362800385\n11899148315946462883\n4438135781885301816\n2430459577105314994\n7064957457524792690\n7835073437651980894\n13875655531137462600\n620367790986443117\n11098838249440124069\n16078426133237165600\n14572566962524856076\n75576306532669618\n4296477293159229664\n13435598015602483796\n12472824698168012151\n9971185349380676064\n16137158370249599404\n15419963040361826339\n10309943463994484440\n2792991963846843708\n192918345908506354\n1362198721948969714\n14418400580706426725\n9318057685861647833\n7190207083390737591\n11331337174472693257\n6530503683739612260\n2645538178470229121\n113659126906115808\n10745914842375828014\n12029313611388862964\n5459735059357190633\n6386327863339807996\n9404070187180994222\n13124734473634782844\n4228731429683346268\n10413054711571816245\n3181184111737316968\n12020825102223686917\n6822575647742774280\n18182633328696746867\n11433824521465282836\n9854259351320410952\n4360474079712230873\n3810009882508575246\n16275067303270068216\n5618886634143637516\n1147398685097696518\n12389467203019380711\n6361876051637709789\n16883880937632038889\n15487395535884085588\n982630252291024474\n5761163313940486466\n17318574744107052639\n14986767618030379771\n3552048649858417027\n16678409336324337155\n6677714310729036655\n17287887561723875272\n654648454673187240\n2607023777113932122\n5485692130731908013\n15371198915216587257\n12687355595284346792\n4869813342069630205\n17766284345215533200\n9177126036076591439\n17007378123921922580\n3474565283640379014\n9961340295669655499\n9133351020800895853\n2820454634856852380\n16537803078673380214\n11489498563019292868\n10621667220199672096\n5606201882848408185\n11772013501143122562\n7674885583914498436\n14139951432510854812\n6706065680575763598\n11717874114699466637\n7266862051078878453\n13237161923729267548\n10149278563816214353\n16562344041037552545\n8265631910345230565\n12267192790328045898\n4489571072378792868\n14506593980464609523\n18181351776445945798\n15407571708809447967\n488382977201632758\n150952764854779265\n16215829200840232844\n17821163315003910416\n9013620938296806446\n11694585142063138533\n10415615689892967717\n12112221219943960192\n13991000583922510615\n7940101177627558659\n13155777804831272017\n241815536821498609\n17399554387342678135\n2979483325884883233\n1061385636366945422\n15374233552824202207\n5628089125292213938\n1750128094736365542\n963494544159491313\n9100295384497069406\n15207904499948040585\n8274104388973568164\n15626547594177480160\n12107551250245685840\n1094714262461996414\n17849616318529840824\n8677524884845416370\n12284730242685968192\n17858290621353862687\n14345260991413925115\n14683242407755616824\n7468906333653678824\n1566098383240954159\n1701842086958938525\n13052198049159062628\n9718579568399245594\n13352163859730663645\n12278924668133972426\n2478736107649357279\n805601194906380757\n10929666160941637427\n11975348443844028865\n16254757771777335642\n861289179283532313\n1604243514122524193\n14552469789812245933\n4539081161122350842\n1954495746177077215\n8712832770249145027\n13493692698966714966\n307752522208338847\n13043350388233310992\n8938191624230758588\n6838822336925659938\n13057379870569168632\n16617853362535019907\n17345389504250995367\n14760686936703361569\n14310497442439430410\n9565964595973607351\n4417013530628457156\n2646550372871308980\n16540788641757470602\n9986796990315719206\n8073800697575043306\n14051773455658932849\n17498369517464686513\n15525256579234933837\n12459870392782373524\n5560453525044220762\n18284371129599121892\n17485968229662578359\n11173459448486289037\n10204174796404595149\n7297834201712763702\n11029061205676183059\n4157094299678183646\n16930165781007730301\n7353128450034344150\n7467559151233985643\n1945660807088431391\n8947718823084985754\n604994870614171870\n11979548496708421187\n751401328641141437\n18053352930551713298\n13310564265067970478\n11524702940631757733\n12053048794179856894\n7058476054530745656\n15236593155303700515\n9381540571422092738\n17816136331585025627\n12984127465480103876\n13052591383085694226\n107915393494433983\n17824951314502303877\n371356467113946825\n7721676707142433034\n5881676971387893867\n10941109803987236463\n398727942078019488\n2589331741677700670\n5016846143801291288\n424542649098499756\n4254148529522048861\n8309367242379697887\n8538523223643275090\n15630672601720539986\n4385420863843488134\n13821042261644924195\n9670676297727501262\n4386616353390749270\n8020894911165393021\n15783371857293743449\n1483891131048403832\n10537070798828764677\n4916073249411573179\n10654217996731556484\n1709665623725108874\n4741758963794717158\n4585174213630555276\n2331456598217589131\n11801631084021275143\n17345830192101384528\n2851432950945245058\n4475780577054868585\n10522924757964200824\n14297402208521510267\n4386616353390749270\n16198037324046506594\n17603070000762350061\n8514008953100298614\n8457294359025579221\n13332245968661577871\n9140386042170313651\n8754746608828763733\n578752530742131630\n2934338354724788515\n3337141163075242250\n6886149071816982507\n14256663488893523643\n3996530567554317991\n11619550945156262905\n16878302957177405345\n10525414287317366941\n12439683014498765600\n16517337784579347032\n7195729417820548366\n3429817402327504188\n13627741743924314269\n10616206999188888698\n8614534155466623042\n16022811644395626275\n16279191944314609306\n17462508637712267202\n12115078775557668575\n1302992814810240468\n13622047199682437098\n13442480337759220663\n16509421772629842662\n4554081388453756751\n4520522919150563842\n10391168944689122352\n1485144739520265454\n4265284390554644972\n10919971531386080905\n11960101731905309921\n4492581521927372146\n16618096558346665601\n17424282500980362315\n3878668837731987644\n491177911681605752\n14768394311374577601\n9329278659146005795\n3316473175434020461\n16479419940325782365\n616466168053923584\n13523919159791432134\n6107781751729535301\n1132418264350906366\n7058469514503226722\n12238440164506292187\n18141479076136748105\n8441484017374330267\n10047967308980573461\n16491149190516655625\n1156338659506946124\n6885995092194305162\n4276996113221836258\n9519509122616718107\n17199798005972428140\n14167384037897645175\n8135854043570388704\n5851327870284764286\n9354446601682472456\n4776006542557955314\n6788480851158123409\n674069972317666128\n12920568566497519924\n12370284043326240597\n13727544290512172160\n9234823060209861480\n4852208055830871645\n14368231957005610912\n15311827691824555424\n2303637905369731428\n12504263206582553380\n3952519747175126517\n5031943597874722642\n17261084970261802481\n9527837888689160718\n15197329563680254815\n10139017522571525767\n14526955560812079445\n3917541028802405180\n3292790731992058703\n3866750256660797879\n3437949862337393550\n11542842787890663367\n13610794603928364843\n1088458596042960419\n5576905949445743337\n9914452666925235039\n17174326313433179588\n4835956136503373524\n14874249662435329523\n14813783887454627121\n13672126710116545256\n2336934651385496476\n12167670984523137810\n12893423942765449937\n3138582261798557890\n9387567162011720719\n6761645866018424744\n14035504332012264220\n5811565157832932750\n4936368358510516469\n2054616806174969096\n2100036076777398006\n3403510513679622131\n9768484784098553136\n5117999980773621115\n8662173571907792466\n8922946423491714643\n12728014333012194575\n10530148252896821285\n16677883258051580531\n10571954901290667636\n16833021857572510313\n5925028123107857677\n12943470839338994090\n235150937242017780\n9159483609925781606\n1560965596346323497\n16612809043003766994\n1214281510734912777\n4386359583518947495\n9698681438934932673\n3069586009106463284\n3755654182586774824\n10699704696444055349\n18173529397337040201\n1092022431727232625\n4835425039559425274\n4525879573225314210\n5168235106828890806\n15243479677856736062\n7627585403449091275\n11077146637125425279\n10185672056197538661\n17014095089994210989\n6100642145836546564\n4368669437621020474\n18274843992616109756\n13767580974941446612\n16447318599146483594\n6974604374756730477\n16969598090320184595\n17227966094616264841\n6473826005179990596\n18307634465250953702\n7015849436327271766\n9528879848168230761\n1581141802278554785\n726082672869803478\n12433343173360449537\n11336915777299814594\n6161279484237089403\n4845947201325900329\n5273192616242908178\n11553181727748756095\n6363135025698452044\n9010999382772023848\n16617853362535019907\n1954495746177077215\n9960501375252413942\n9421049366985140142\n8250880919248314941\n5444073886903063908\n9409923476273314312\n5916245362241782246\n15640899449969454636\n17490855092579549337\n16722032087721919020\n5941628463220215468\n6972988862181642557\n12436719136806894535\n12324900938300159340\n17663495300458759643\n14331166878934703280\n12657863106033666731\n11905075842608509718\n15408449985382799853\n17760890685538658341\n10718250170270922716\n6617786327159950987\n13595608842877859251\n846652086702492989\n2307662480375996907\n5459263611974799140\n8162711408328129480\n11014315784662082454\n6027542339104961409\n7664868072822881390\n11001622579193304862\n15097562761095002862\n17628962317949639454\n14274080551709754896\n1439279650223746034\n2773987979313283459\n3938226500179077804\n4527118748320975098\n2892125069458890142\n14179982348033388464\n16367981256216804893\n17294049390587863901\n3651808595177092433\n4430131797963281665\n5500231997300688249\n5292319788015843344\n11432120404584216242\n904737834165828696\n1585828884713142637\n3526152711561739647\n11704148251596559198\n5457625773024138495\n8271207202847165630\n11219045565846220796\n17416342026616749525\n4475780577054868585\n16159669703962678394\n2689980054299223795\n3640416155345199966\n15648464672708567196\n3159485207117124136\n15550011835210183208\n10240874702978179234\n905607198203885544\n17162847852387901929\n14306077372328463752\n267143843108582846\n10374399007575064410\n11197169241899215913\n12169646736033481200\n1591510325657091611\n8524611887276791508\n12014479835593329519\n14131643861697567782\n4323341865956540005\n12218690626768147229\n14683242407755616824\n2930813935554660145\n8209061483315392684\n2423022751915520448\n5679253270633751268\n5581095820580299123\n3568972255508007255\n15398695672287891882\n10800280152792878210\n266370749732816257\n16577418337151257863\n2978575776728879752\n6295430381552207365\n16808150075518290981\n10598566078909826547\n4430979949105515045\n17018777930569063911\n14071872052219459510\n8198682752656951515\n18335428217149033404\n13138942072157110549\n4034868466986288354\n6514837438705709501\n4423256736472859288\n13078938124528894239\n716623209738740552\n10285263972915949149\n323577450553876253\n15510199138015698049\n14636223610179899677\n1222850176745599431\n2605464835748926854\n1944749268511144701\n11925992624414801621\n9620798284906742285\n12728014333012194575\n1130061027416227300\n15379530465429684152\n8759025454769053589\n1089726053130008000\n10851496658429438808\n5968430400331520604\n6112027499322124235\n10744788657857952671\n17383188700172509608\n4011046553487857465\n2349786045751366035\n1294255699754400923\n15520850526371615874\n3046986916609659131\n14522570796377937815\n3791007873170911703\n5162078741700184609\n4193206194903022143\n16372276537555466090\n17448137627812360165\n6698853281500707421\n14340363649252121031\n14999902106724197594\n14156198624763805195\n11050503658429224165\n7076401029982058130\n503411680928006862\n11573672580068740264\n14470836559221475559\n14707451498519974721\n12005290447044942706\n15188241520066508096\n12816735007246114063\n3576753429462117175\n330272594908966086\n8636248911998104690\n2835352724196024865\n4335042997872497679\n8881465230223078022\n3561392184769257542\n17542541252630623402\n5749936642965213034\n7746333644187590224\n4792594073360598979\n1532048516787593802\n6536065095364312002\n14561802971881203023\n11494979973461515584\n10198104575536799031\n10173644468931336832\n5539030146264293868\n13249138192794988535\n11485137757600296279\n11289787335146666073\n14382251187754020635\n4670862168464331049\n261904651984186376\n17192848324313416584\n7862819864947994160\n5913894099192503451\n603800635003780169\n12449105663815170003\n2260558123953276061\n8131746888185137113\n17294300865849159583\n15610350647647039702\n18073592186035102870\n6662511162983312200\n8188115006339123640\n12774123719055665499\n10200107661441820195\n13433238327546231553\n2055205231359531381\n17181498239268105048\n15786702179330327627\n15631827104805737436\n718931799378362985\n12419478380987705099\n12425837002017680802\n2602102990721872881\n9604848504605885852\n2922911753513362311\n2849613431141422856\n9879394366678314776\n15475842481779570550\n3648029121256642569\n2080215730457195236\n2863061213085815537\n4075883611489729648\n15923787141582045935\n12616792865982767988\n15995511362175807855\n6778703207871686736\n2286719663712739934\n18142567982985176968\n3349168198883018221\n12011597232481368705\n13284455704537705837\n7431250397890575852\n10949033457544491079\n15366661690691414140\n17390419084887865269\n16293771381549635737\n7443134344729344061\n6139457429443091969\n16338060559485745933\n11903996980119113891\n6998522217440368613\n7034505971590914431\n16692006580843500595\n7514642944693532857\n13488346887491591034\n3704404972126093379\n5811597766581449130\n13793514272777243121\n12724323537355529778\n2006665743655548627\n17581685196742599713\n6958311174368114816\n10957626942557585714\n12267192790328045898\n13343584391233574632\n8559986335776750091\n6067666988648823149\n6572916447179156076\n6256403925289872207\n4431298018118762282\n7421336036409568002\n14124933871111248486\n209951806397010062\n4675950731352242696\n2276347840452991843\n9078883226985957165\n10769796278923712037\n319146597929849925\n3390957352027422363\n6154471017046493832\n15465965786141994620\n4980077389646521261\n1622552155693969949\n9323651175103250863\n1174247159521316624\n9515077706235247015\n18059873841841242282\n1209692801728010008\n4842252435441447220\n11187799446866115955\n13471182089301754871\n12781319907986783260\n12771026986363057454\n4259427416220224795\n7019831911787560233\n18040323983876388027\n6463462053187028136\n2607530669254888575\n9748828197623532412\n15380598180075107392\n14274080551709754896\n3798835811354711994\n3327739461126484547\n9793092308678732522\n4173628817469879329\n11191661791820455158\n3182826254716307890\n16612191990239668158\n2730120446632986716\n13506422919079575780\n17631421871737265315\n2776962958942416551\n8207870500160163139\n12030698790184649653\n17491313468969512962\n3547884480100819920\n8434565279220671500\n4605069094832739545\n5030837047786500130\n8452634509638206887\n9749168619636122524\n14367512394981503186\n10297522553509695152\n835905810179536590\n9093467487725674669\n2642103907829357818\n16966435447664055459\n4960518094651677229\n5578027715320603481\n4982182098241374108\n17390495289994376608\n17002912470509453557\n10353966376371778072\n11155948287374165730\n4052653798148323540\n7389641355446182522\n15402712065235559135\n10217447972113978825\n12975827911914559863\n4922684417663384077\n10631023308179798172\n9133301292808148398\n17073029011184162216\n749271926386549642\n14800960596288263228\n1710707572704860025\n9374828781084513425\n14309124621539849955\n8905971874018260194\n12320625609565566296\n1569740655865442653\n12211184404635563508\n17346927531010599842\n16897251775882272191\n8823486493110143601\n2617869484462736850\n3494962156190426590\n18101679679980295228\n6200371096105873637\n11104767014542896162\n13001982391210391217\n16478273695886225813\n2009148459385328716\n5186102447326419534\n14707451498519974721\n10941109803987236463\n15344818122000506041\n10529740758581753941\n17334221026399675995\n6790023516660577744\n3395124268628573714\n5768946208832364129\n16638918733323812296\n12447482265350989851\n12789625372988331296\n15295629281630431302\n13969791773093325954\n9710792387054053419\n6372294050565546714\n2991497348916567725\n918810717943326828\n17805425953352328356\n13813938897559066147\n9882395220582052788\n1619998234994633667\n13850596937522056508\n8589120381523979926\n111196387430106683\n5540901926317395285\n17334920886854440762\n10102503248545132473\n12324900938300159340\n19599028817099133\n16287092961525692281\n16174818136905273166\n4019802448792317193\n2387750248257216420\n3617520081613972825\n14695287825791552024\n16597722150014600064\n9154831755213836411\n13610447083680554767\n15073749706881379341\n10234318818179548141\n16686626979048337759\n3042215614335372603\n3168976593510273474\n12254798167990331568\n8118005168082358345\n7095323643378069735\n5321402294482326914\n13412650760353747166\n1511395344330092641\n15927242381175999533\n3080509858485658958\n17203761916359197855\n2753605858409815973\n15473719348635964568\n4676975697766469535\n1874648662873764938\n12590705151103685613\n9258691282242827393\n12368188584880775779\n12074153285940316516\n12225918088776982013\n9197446822104049902\n14231783564474342382\n10269317152164329025\n10149545045677696666\n12428865162550767193\n1416948048608103558\n10214161221653817914\n12535584412843358378\n9987421845180694586\n13491455397064992502\n5578269654806667788\n364148883356239012\n10459418760260376659\n11864946203030581725\n15705175658185413440\n13368408615484844881\n3991499813339563351\n10763477998200455449\n16419395429322406271\n9568055623423926943\n3611568418209126232\n7766011655330222034\n3511108534181463632\n17475670717438227453\n9796607136472112331\n14653837373184524144\n5536572326046534812\n2602102990721872881\n16644948457425101404\n1621445085287517426\n8635962330915622099\n12021915537364443605\n8162335900231845547\n15130852392465525432\n14685643417248532325\n14750364650168037337\n14369320143554385873\n1511471275784395030\n13840689949437666635\n10717968575288457853\n4022696209770861981\n12926801579615731260\n4062985618834192864\n10385565488271724326\n15887728889020855855\n14190762167118985847\n13740060459903397918\n8017871240977894132\n2880339721523650526\n4079104457021862303\n12371818693251100535\n8279873149937091723\n1228332755606884694\n541797045997302752\n10257764077192788104\n2255252283307716764\n12790794875664619048\n15356132704265989074\n2922911753513362311\n6903430597893215789\n15604950558287921753\n11524321703553539091\n6234630088073567475\n6690379462907966527\n8539695082468512477\n3777040938095390732\n16084590801545439316\n17422684301854128050\n10076279375777353554\n12419478380987705099\n536691103473012794\n14104065419524088930\n3306647178372308228\n152783285094154002\n3207402972392158132\n6106496061262414372\n1765165912863818718\n1660545585310491608\n10419826510349578145\n14106762631001619817\n17186295631445180312\n10806076664606227547\n2750338564895308892\n848031407464619085\n1832667051571083120\n11469773995871443146\n16332834192167630033\n10812309604452042481\n8547907108886401285\n5477301231780410334\n2151617681187646512\n355994163424437299\n10263860207191985785\n1889488703126046570\n8178563501130563969\n13635117371381254254\n2078900548113970944\n13834807165531952315\n9198241425849607620\n15076857764949547654\n5855789831023178209\n15878435959982935288\n7074863116239460120\n10001308057586933589\n6154471017046493832\n10911365545876974392\n17174453121254120906\n7861476745287244552\n14720689508779893570\n9179201394158888257\n13508271643373057762\n17787854812868477248\n8710105413190688211\n9218942371999957101\n1097946505196706823\n7014316911741210583\n9612886696845325819\n880256036835740297\n12687355595284346792\n13174839173917326199\n11913675369183495024\n18294904949677392880\n2055639459498619271\n1106218759348811558\n1958185468266499593\n10639961830539358216\n8204211843896433822\n18377097296409235128\n5797867061187675323\n8748681894300266840\n2998062791782967469\n15637850563274996758\n7999346850142884226\n12197668862468181098\n5053045980396929329\n4214258999405083532\n16234924760361303134\n10376816630955602565\n1151720988337338126\n6631068518567404371\n6473826005179990596\n5535689445498324408\n6574086393862529617\n14831186394742353263\n17170029516980065389\n11476677642269863931\n6000062552730898948\n16416960623166196335\n17595621855527400913\n4089791676022691396\n10814418483275677694\n4351384563800590795\n9410078953550122596\n5556916879659426068\n3286828729596354521\n16602470515639003218\n13173743342815969187\n2235199439496181744\n9124569467350423962\n9091329193927061705\n13784431604827168147\n6087420603622021778\n11506838790138103502\n10138933127859780619\n5916245362241782246\n15620732140932578788\n15930788057323553468\n7746745197512022746\n1325964133856689768\n15573896859795528237\n17493743561977970753\n313444966883405994\n1273259516166641732\n13238945521716582196\n13022514221049453859\n5906132704228613812\n11975348443844028865\n7069157320810476415\n11766419882191254966\n3598236196394796641\n4852208055830871645\n5078215330180903623\n6687982354071097927\n10009706283899957070\n4095039089832654706\n9889908450011389277\n13288004305565182082\n2262463595567822313\n7160042319398703327\n12571816152278393234\n1010158640681337361\n8271207202847165630\n11863396591256793443\n7807694111626425960\n2082360244292729125\n16767500586311823844\n10644748040039977321\n6378660855538406541\n9989365439952533442\n11806121341045927714\n10603333807958135684\n17170029516980065389\n5617845213919609112\n10275552320954442819\n13338379816534760061\n13090344551298043833\n709753328828054666\n13593658077513580200\n17098838295382663838\n7080119660671421864\n2654052698615623760"
  },
  {
    "path": "cch23/validator/src/args.rs",
    "content": "use clap::{Args, Parser};\n\n#[derive(Debug, Parser)]\n#[command(version)]\npub struct ValidatorArgs {\n    #[command(flatten)]\n    pub challenge: ChallengeArgs,\n    /// The base URL to test against\n    #[arg(long, short, default_value = \"http://127.0.0.1:8000\")]\n    pub url: String,\n}\n\n#[derive(Debug, Clone, Args)]\n#[group(required = true, multiple = false)]\npub struct ChallengeArgs {\n    /// The challenge numbers to validate\n    pub numbers: Vec<i32>,\n    /// Validate all challenges\n    #[arg(long)]\n    pub all: bool,\n}\n"
  },
  {
    "path": "cch23/validator/src/lib.rs",
    "content": "pub mod args;\n\nuse std::{ops::Deref, sync::Arc};\n\nuse base64::{engine::general_purpose, Engine};\nuse futures_util::{\n    stream::{SplitSink, SplitStream},\n    SinkExt, StreamExt,\n};\nuse reqwest::{\n    header::{HeaderValue, CONTENT_TYPE},\n    multipart::{Form, Part},\n    redirect::Policy,\n    StatusCode,\n};\npub use shuttlings;\nuse shuttlings::{SubmissionState, SubmissionUpdate};\nuse tokio::{\n    net::TcpStream,\n    sync::mpsc::Sender,\n    time::{sleep, Duration},\n};\nuse tokio_tungstenite::{tungstenite::Message, MaybeTlsStream, WebSocketStream};\nuse tracing::info;\nuse uuid::Uuid;\n\npub const SUPPORTED_CHALLENGES: &[i32] =\n    &[-1, 1, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15, 18, 19, 20, 21, 22];\npub const SUBMISSION_TIMEOUT: u64 = 60;\n\npub async fn run(url: String, id: Uuid, number: i32, tx: Sender<SubmissionUpdate>) {\n    info!(%id, %url, %number, \"Starting submission\");\n\n    tx.send(SubmissionState::Running.into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    tokio::select! {\n        _ = validate(url.as_str(), number, tx.clone()) => (),\n        _ = sleep(Duration::from_secs(SUBMISSION_TIMEOUT)) => {\n            // if the validation task timed out\n            info!(%id, %url, %number, \"Submission timed out\");\n            tx.send(\"Timed out\".to_owned().into()).await.unwrap();\n            tx.send(SubmissionState::Done.into()).await.unwrap();\n            tx.send(SubmissionUpdate::Save).await.unwrap();\n        },\n    };\n    info!(%id, %url, %number, \"Completed submission\");\n}\n\n/// Task number and Test number in the current challenge\ntype TaskTest = (i32, i32);\n/// If failure, return tuple with task number and test number that failed\ntype ValidateResult = std::result::Result<(), TaskTest>;\n\npub async fn validate(url: &str, number: i32, tx: Sender<SubmissionUpdate>) {\n    if !SUPPORTED_CHALLENGES.contains(&number) {\n        tx.send(\n            format!(\"Validating Challenge {number} is not supported yet! Check for updates.\")\n                .into(),\n        )\n        .await\n        .unwrap();\n        return;\n    }\n    let txc = tx.clone();\n    if let Err((task, test)) = match number {\n        -1 => validate_minus1(url, txc).await,\n        1 => validate_1(url, txc).await,\n        4 => validate_4(url, txc).await,\n        5 => validate_5(url, txc).await,\n        6 => validate_6(url, txc).await,\n        7 => validate_7(url, txc).await,\n        8 => validate_8(url, txc).await,\n        11 => validate_11(url, txc).await,\n        12 => validate_12(url, txc).await,\n        13 => validate_13(url, txc).await,\n        14 => validate_14(url, txc).await,\n        15 => validate_15(url, txc).await,\n        18 => validate_18(url, txc).await,\n        19 => validate_19(url, txc).await,\n        20 => validate_20(url, txc).await,\n        21 => validate_21(url, txc).await,\n        22 => validate_22(url, txc).await,\n        _ => unreachable!(),\n    } {\n        info!(%url, %number, %task, %test, \"Submission failed\");\n        tx.send(format!(\"Task {task}: test #{test} failed 🟥\").into())\n            .await\n            .unwrap();\n    }\n    tx.send(SubmissionState::Done.into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n}\n\nfn new_client() -> reqwest::Client {\n    reqwest::ClientBuilder::new()\n        .http1_only()\n        .connect_timeout(Duration::from_secs(3))\n        .redirect(Policy::limited(3))\n        .referer(false)\n        .timeout(Duration::from_secs(60))\n        .build()\n        .unwrap()\n}\n\nasync fn validate_minus1(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1: respond 200\n    test = (1, 1);\n    let url = &format!(\"{}/\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    if res.status() != StatusCode::OK {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2: respond 500\n    test = (2, 1);\n    let url = &format!(\"{}/-1/error\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    if res.status() != StatusCode::INTERNAL_SERVER_ERROR {\n        return Err(test);\n    }\n    // TASK 2 DONE\n    tx.send((false, 0).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_1(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1: basic formula\n    test = (1, 1);\n    let url = &format!(\"{}/1/2/3\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"1\" {\n        return Err(test);\n    }\n    test = (1, 2);\n    let url = &format!(\"{}/1/12/16\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"21952\" {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2: multiple and zero and negative numbers\n    test = (2, 1);\n    let url = &format!(\"{}/1/3/5/7/9\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"512\" {\n        return Err(test);\n    }\n    test = (2, 2);\n    let url = &format!(\"{}/1/0/0/0\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"0\" {\n        return Err(test);\n    }\n    test = (2, 3);\n    let url = &format!(\"{}/1/-3/1\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"-64\" {\n        return Err(test);\n    }\n    test = (2, 4);\n    let url = &format!(\"{}/1/3/5/7/9/2/13/12/16/18\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"729\" {\n        return Err(test);\n    }\n    tx.send((false, 100).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_4(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1\n    test = (1, 1);\n    let url = &format!(\"{}/4/strength\", base_url);\n    let res = client\n        .post(url)\n        .json(&serde_json::json!([\n            {\n              \"name\": \"Zeus\",\n              \"strength\": 8\n            },\n            {\n              \"name\": \"Oner\",\n              \"strength\": 6\n            },\n            {\n              \"name\": \"Faker\",\n              \"strength\": 7\n            },\n            {\n              \"name\": \"Gumayusi\",\n              \"strength\": 6\n            },\n            {\n              \"name\": \"Keria\",\n              \"strength\": 6\n            }\n        ]))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"33\" {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    test = (2, 1);\n    let url = &format!(\"{}/4/contest\", base_url);\n    let res = client\n        .post(url)\n        .json(&serde_json::json!([\n        {\n            \"name\": \"Zeus\",\n            \"strength\": 8,\n            \"speed\": 51.2,\n            \"height\": 81,\n            \"antler_width\": 31,\n            \"snow_magic_power\": 311,\n            \"favorite_food\": \"pizza\",\n            \"cAnD13s_3ATeN-yesT3rdAy\": 4\n        },\n        {\n            \"name\": \"Oner\",\n            \"strength\": 6,\n            \"speed\": 41.3,\n            \"height\": 51,\n            \"antler_width\": 30,\n            \"snow_magic_power\": 321,\n            \"favorite_food\": \"burger\",\n            \"cAnD13s_3ATeN-yesT3rdAy\": 1\n        },\n        {\n            \"name\": \"Faker\",\n            \"strength\": 7,\n            \"speed\": 50,\n            \"height\": 50,\n            \"antler_width\": 37,\n            \"snow_magic_power\": 6667,\n            \"favorite_food\": \"broccoli\",\n            \"cAnD13s_3ATeN-yesT3rdAy\": 1\n        },\n        {\n            \"name\": \"Gumayusi\",\n            \"strength\": 6,\n            \"speed\": 60.1,\n            \"height\": 50,\n            \"antler_width\": 34,\n            \"snow_magic_power\": 2323,\n            \"favorite_food\": \"pizza\",\n            \"cAnD13s_3ATeN-yesT3rdAy\": 1\n        },\n        {\n            \"name\": \"Keria\",\n            \"strength\": 6,\n            \"speed\": 48.2,\n            \"height\": 65,\n            \"antler_width\": 33,\n            \"snow_magic_power\": 5014,\n            \"favorite_food\": \"wok\",\n            \"cAnD13s_3ATeN-yesT3rdAy\": 5\n        }\n        ]))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json\n        != serde_json::json!({\n            \"fastest\":\"Speeding past the finish line with a strength of 6 is Gumayusi\",\n            \"tallest\":\"Zeus is standing tall with his 31 cm wide antlers\",\n            \"magician\":\"Faker could blast you away with a snow magic power of 6667\",\n            \"consumer\":\"Keria ate lots of candies, but also some wok\"\n        })\n    {\n        return Err(test);\n    }\n    tx.send((false, 150).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_5(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    // TASK 1\n    let t = JSONTester::new(format!(\"{}/5?offset=0&limit=8\", base_url));\n    t.test(\n        (1, 1),\n        &serde_json::json!([\"Ava\", \"Caleb\", \"Mia\", \"Owen\", \"Lily\", \"Ethan\", \"Zoe\", \"Nolan\"]),\n        StatusCode::OK,\n        &serde_json::json!([\"Ava\", \"Caleb\", \"Mia\", \"Owen\", \"Lily\", \"Ethan\", \"Zoe\", \"Nolan\"]),\n    )\n    .await?;\n    let t = JSONTester::new(format!(\"{}/5?offset=10&limit=4\", base_url));\n    t.test(\n        (1, 2),\n        &serde_json::json!([\n            \"Ava\", \"Caleb\", \"Mia\", \"Owen\", \"Lily\", \"Ethan\", \"Zoe\", \"Nolan\", \"Harper\", \"Lucas\",\n            \"Stella\", \"Mason\", \"Olivia\", \"Wyatt\", \"Isabella\", \"Logan\",\n        ]),\n        StatusCode::OK,\n        &serde_json::json!([\"Stella\", \"Mason\", \"Olivia\", \"Wyatt\"]),\n    )\n    .await?;\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    let t = JSONTester::new(format!(\"{}/5?offset=0&limit=5\", base_url));\n    t.test(\n        (2, 1),\n        &serde_json::json!([]),\n        StatusCode::OK,\n        &serde_json::json!([]),\n    )\n    .await?;\n    let t = JSONTester::new(format!(\"{}/5\", base_url));\n    t.test(\n        (2, 2),\n        &serde_json::json!([\"Alice\", \"Bob\", \"Charlie\", \"David\"]),\n        StatusCode::OK,\n        &serde_json::json!([\"Alice\", \"Bob\", \"Charlie\", \"David\"]),\n    )\n    .await?;\n    let t = JSONTester::new(format!(\"{}/5?offset=2\", base_url));\n    t.test(\n        (2, 3),\n        &serde_json::json!([\"Alice\", \"Bob\", \"Charlie\", \"David\"]),\n        StatusCode::OK,\n        &serde_json::json!([\"Charlie\", \"David\"]),\n    )\n    .await?;\n    let t = JSONTester::new(format!(\"{}/5?offset=2&limit=0\", base_url));\n    t.test(\n        (2, 4),\n        &serde_json::json!([\"Alice\", \"Bob\", \"Charlie\", \"David\"]),\n        StatusCode::OK,\n        &serde_json::json!([]),\n    )\n    .await?;\n    let t = JSONTester::new(format!(\"{}/5?split=6\", base_url));\n    t.test(\n        (2, 5),\n        &serde_json::json!([\n            \"Alice\", \"Bob\", \"Charlie\", \"David\", \"Eva\", \"Frank\", \"Grace\", \"Hank\", \"Ivy\", \"Jack\",\n            \"Katie\", \"Liam\", \"Mia\", \"Nathan\", \"Olivia\", \"Paul\", \"Quinn\", \"Rachel\", \"Samuel\",\n            \"Tara\", \"Aria\", \"Jackson\"\n        ]),\n        StatusCode::OK,\n        &serde_json::json!([\n            [\"Alice\", \"Bob\", \"Charlie\", \"David\", \"Eva\", \"Frank\"],\n            [\"Grace\", \"Hank\", \"Ivy\", \"Jack\", \"Katie\", \"Liam\"],\n            [\"Mia\", \"Nathan\", \"Olivia\", \"Paul\", \"Quinn\", \"Rachel\"],\n            [\"Samuel\", \"Tara\", \"Aria\", \"Jackson\"]\n        ]),\n    )\n    .await?;\n    let t = JSONTester::new(format!(\"{}/5?offset=2&limit=4&split=1\", base_url));\n    t.test(\n        (2, 6),\n        &serde_json::json!([\n            \"Alice\", \"Bob\", \"Charlie\", \"David\", \"Alice\", \"Bob\", \"Charlie\", \"David\"\n        ]),\n        StatusCode::OK,\n        &serde_json::json!([[\"Charlie\"], [\"David\"], [\"Alice\"], [\"Bob\"],]),\n    )\n    .await?;\n    let t = JSONTester::new(format!(\"{}/5?limit=0\", base_url));\n    t.test(\n        (2, 7),\n        &serde_json::json!([\"Alice\", \"Bob\", \"Charlie\", \"David\"]),\n        StatusCode::OK,\n        &serde_json::json!([]),\n    )\n    .await?;\n    let t = JSONTester::new(format!(\"{}/5?offset=0&limit=0\", base_url));\n    t.test(\n        (2, 8),\n        &serde_json::json!([\"Alice\", \"Bob\", \"Charlie\", \"David\"]),\n        StatusCode::OK,\n        &serde_json::json!([]),\n    )\n    .await?;\n    tx.send((false, 150).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_6(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    let url = &format!(\"{}/6\", base_url);\n    // TASK 1: elf\n    test = (1, 1);\n    let res = client\n        .post(url)\n        .body(\"elf elf elf\")\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json[\"elf\"] != serde_json::Value::Number(3.into()) {\n        return Err(test);\n    }\n    test = (1, 2);\n    let res = client\n        .post(url)\n        .body(\"In the quirky town of Elf stood an enchanting shop named 'The Elf & Shelf.' Managed by Wally, a mischievous elf with a knack for crafting exquisite shelves, the shop was a bustling hub of elf after elf who wanter to see their dear elf in Belfast.\")\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json[\"elf\"] != serde_json::Value::Number(6.into()) {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2: more strings\n    test = (2, 1);\n    let res = client\n        .post(url)\n        .body(\"elf elf elf on a shelf\")\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json\n        != serde_json::json!({\n            \"elf\":4,\n            \"elf on a shelf\":1,\n            \"shelf with no elf on it\":0\n        })\n    {\n        return Err(test);\n    }\n    test = (2, 2);\n    let res = client\n        .post(url)\n        .body(\"In Belfast I heard an elf on a shelf on a shelf on a \")\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json\n        != serde_json::json!({\n            \"elf\":4,\n            \"elf on a shelf\":2,\n            \"shelf with no elf on it\":0\n        })\n    {\n        return Err(test);\n    }\n    test = (2, 3);\n    let res = client\n        .post(url)\n        .body(\"Somewhere in Belfast under a shelf store but above the shelf realm there's an elf on a shelf on a shelf on a shelf on a elf on a shelf on a shelf on a shelf on a shelf on a elf on a elf on a elf on a shelf on a \")\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json\n        != serde_json::json!({\n            \"elf\":16,\n            \"elf on a shelf\":8,\n            \"shelf with no elf on it\":2\n        })\n    {\n        return Err(test);\n    }\n    // TASK 2 DONE\n    tx.send((false, 200).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_7(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1\n    test = (1, 1);\n    let url = &format!(\"{}/7/decode\", base_url);\n    let data = serde_json::json!({\n        \"recipe\": {\n            \"flour\": 4,\n            \"sugar\": 3,\n            \"butter\": 3,\n            \"baking powder\": 1,\n            \"raisins\": 50\n        },\n    });\n    let b64 = general_purpose::STANDARD.encode(serde_json::to_vec(&data).unwrap());\n    let res = client\n        .get(url)\n        .header(\"Cookie\", format!(\"recipe={b64}\"))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json != data {\n        return Err(test);\n    }\n    test = (1, 2);\n    let data = serde_json::json!({\n        \"recipe\": {\n            \"peanuts\": 26,\n            \"dough\": 37,\n            \"extra salt\": 1,\n            \"raisins\": 50\n        },\n    });\n    let b64 = general_purpose::STANDARD.encode(serde_json::to_vec(&data).unwrap());\n    let res = client\n        .get(url)\n        .header(\"Cookie\", format!(\"recipe={b64}\"))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json != data {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    let url = &format!(\"{}/7/bake\", base_url);\n    let test_bake = |test: (i32, i32), i: serde_json::Value, o: serde_json::Value| async move {\n        let client = new_client();\n        let b64 = general_purpose::STANDARD.encode(serde_json::to_vec(&i).unwrap());\n        let res = client\n            .get(url)\n            .header(\"Cookie\", format!(\"recipe={b64}\"))\n            .send()\n            .await\n            .map_err(|_| test)?;\n        let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n        if json != o {\n            return Err(test);\n        }\n        Ok(())\n    };\n    test = (2, 1);\n    test_bake(\n        test,\n        serde_json::json!({\n            \"recipe\": {\n                \"flour\": 35,\n                \"sugar\": 56,\n                \"butter\": 3,\n                \"baking powder\": 1001,\n                \"chocolate chips\": 55\n            },\n            \"pantry\": {\n                \"flour\": 4045,\n                \"sugar\": 9606,\n                \"butter\": 99, // will land at 0\n                \"baking powder\": 8655432,\n                \"chocolate chips\": 4587\n            }\n        }),\n        serde_json::json!({\n            \"cookies\": 33,\n            \"pantry\": {\n                \"flour\": 2890,\n                \"sugar\": 7758,\n                \"butter\": 0,\n                \"baking powder\": 8622399,\n                \"chocolate chips\": 2772\n            }\n        }),\n    )\n    .await?;\n    test = (2, 2);\n    test_bake(\n        test,\n        serde_json::json!({\n            \"recipe\": {\n                \"flour\": 35,\n                \"sugar\": 56,\n                \"butter\": 3,\n                \"baking powder\": 1001,\n                \"chocolate chips\": 55\n            },\n            \"pantry\": {\n                \"flour\": 4045,\n                \"sugar\": 7606,\n                \"butter\": 100,\n                \"baking powder\": 865543211516164409i64,\n                \"chocolate chips\": 4587\n            }\n        }),\n        serde_json::json!({\n            \"cookies\": 33,\n            \"pantry\": {\n                \"flour\": 2890,\n                \"sugar\": 5758,\n                \"butter\": 1,\n                \"baking powder\": 865543211516131376i64,\n                \"chocolate chips\": 2772\n            }\n        }),\n    )\n    .await?;\n    // TASK 2 DONE\n    tx.send((false, 120).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 3\n    test = (3, 1);\n    test_bake(\n        test,\n        serde_json::json!({\n            \"recipe\": {\n                \"chicken\": 1,\n            },\n            \"pantry\": {\n                \"chicken\": 0,\n            }\n        }),\n        serde_json::json!({\n            \"cookies\": 0,\n            \"pantry\": {\n                \"chicken\": 0,\n            }\n        }),\n    )\n    .await?;\n    test = (3, 2);\n    test_bake(\n        test,\n        serde_json::json!({\n            \"recipe\": {\n                \"cocoa bean\": 1,\n                \"chicken\": 0,\n            },\n            \"pantry\": {\n                \"cocoa bean\": 5,\n                \"corn\": 5,\n                \"cucumber\": 0,\n            }\n        }),\n        serde_json::json!({\n            \"cookies\": 5,\n            \"pantry\": {\n                \"cocoa bean\": 0,\n                \"corn\": 5,\n                \"cucumber\": 0,\n            }\n        }),\n    )\n    .await?;\n    test = (3, 3);\n    test_bake(\n        test,\n        serde_json::json!({\n            \"recipe\": {\n                \"cocoa bean\": 1,\n                \"chicken\": 0,\n            },\n            \"pantry\": {\n                \"cocoa bean\": 5,\n                \"chicken\": 0,\n            }\n        }),\n        serde_json::json!({\n            \"cookies\": 5,\n            \"pantry\": {\n                \"cocoa bean\": 0,\n                \"chicken\": 0,\n            }\n        }),\n    )\n    .await?;\n    test = (3, 4);\n    test_bake(\n        test,\n        serde_json::json!({\n            \"recipe\": {\n                \"cocoa bean\": 1,\n                \"chicken\": 0,\n            },\n            \"pantry\": {\n                \"cocoa bean\": 5,\n            }\n        }),\n        serde_json::json!({\n            \"cookies\": 5,\n            \"pantry\": {\n                \"cocoa bean\": 0,\n            }\n        }),\n    )\n    .await?;\n    // TASK 3 DONE\n    tx.send((false, 100).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_8(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    let tol = 0.001f64;\n    // TASK 1\n    test = (1, 1);\n    let url = &format!(\"{}/8/weight/225\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    let num: f64 = text.parse().map_err(|_| test)?;\n    if !(num.is_finite() && (num - 16f64).abs() < tol) {\n        return Err(test);\n    }\n    test = (1, 2);\n    let url = &format!(\"{}/8/weight/393\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    let num: f64 = text.parse().map_err(|_| test)?;\n    if !(num.is_finite() && (num - 5.2f64).abs() < tol) {\n        return Err(test);\n    }\n    test = (1, 3);\n    let url = &format!(\"{}/8/weight/92\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    let num: f64 = text.parse().map_err(|_| test)?;\n    if !(num.is_finite() && (num - 0.1f64).abs() < tol) {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    test = (2, 1);\n    let url = &format!(\"{}/8/drop/383\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    let num: f64 = text.parse().map_err(|_| test)?;\n    if !(num.is_finite() && (num - 13316.953480432378f64).abs() < tol) {\n        return Err(test);\n    }\n    test = (2, 2);\n    let url = &format!(\"{}/8/drop/16\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    let num: f64 = text.parse().map_err(|_| test)?;\n    if !(num.is_finite() && (num - 25.23212238397714f64).abs() < tol) {\n        return Err(test);\n    }\n    test = (2, 3);\n    let url = &format!(\"{}/8/drop/143\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    let num: f64 = text.parse().map_err(|_| test)?;\n    if !(num.is_finite() && (num - 6448.2090536830465f64).abs() < tol) {\n        return Err(test);\n    }\n    // TASK 2 DONE\n    tx.send((false, 160).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_11(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1\n    test = (1, 1);\n    let url = &format!(\"{}/11/assets/decoration.png\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let headers = res.headers();\n    if !headers\n        .get(\"content-type\")\n        .is_some_and(|v| v == \"image/png\")\n    {\n        return Err(test);\n    }\n    if !headers.get(\"content-length\").is_some_and(|v| v == \"787297\") {\n        return Err(test);\n    }\n    let bytes = res.bytes().await.map_err(|_| test)?;\n    const EXPECTED: &[u8] = include_bytes!(\"../assets/decoration.png\");\n    if bytes.to_vec().as_slice() != EXPECTED {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    test = (2, 1);\n    let url = &format!(\"{}/11/red_pixels\", base_url);\n    let form = Form::new().part(\n        \"image\",\n        Part::bytes(include_bytes!(\"../assets/decoration2.png\").as_slice())\n            .file_name(\"decoration2.png\")\n            .mime_str(\"image/png\")\n            .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"152107\" {\n        return Err(test);\n    }\n    test = (2, 2);\n    let form = Form::new().part(\n        \"image\",\n        Part::bytes(include_bytes!(\"../assets/decoration3.png\").as_slice())\n            .file_name(\"decoration3.png\")\n            .mime_str(\"image/png\")\n            .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"40263\" {\n        return Err(test);\n    }\n    test = (2, 3);\n    let form = Form::new().part(\n        \"image\",\n        Part::bytes(include_bytes!(\"../assets/decoration4.png\").as_slice())\n            .file_name(\"decoration4.png\")\n            .mime_str(\"image/png\")\n            .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"86869\" {\n        return Err(test);\n    }\n    // TASK 2 DONE\n    tx.send((false, 200).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_12(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1\n    test = (1, 1);\n    let url = &format!(\"{}/12/save/cch23\", base_url);\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    if res.status() != StatusCode::OK {\n        return Err(test);\n    }\n    sleep(Duration::from_secs(2)).await;\n    let url = &format!(\"{}/12/load/cch23\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"2\" {\n        return Err(test);\n    }\n    sleep(Duration::from_secs(2)).await;\n    let url = &format!(\"{}/12/load/cch23\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"4\" {\n        return Err(test);\n    }\n    test = (1, 2);\n    let url = &format!(\"{}/12/save/alpha\", base_url);\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    if res.status() != StatusCode::OK {\n        return Err(test);\n    }\n    sleep(Duration::from_secs(2)).await;\n    let url = &format!(\"{}/12/save/omega\", base_url);\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    if res.status() != StatusCode::OK {\n        return Err(test);\n    }\n    sleep(Duration::from_secs(2)).await;\n    let url = &format!(\"{}/12/load/alpha\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"4\" {\n        return Err(test);\n    }\n    let url = &format!(\"{}/12/save/alpha\", base_url);\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    if res.status() != StatusCode::OK {\n        return Err(test);\n    }\n    sleep(Duration::from_secs(1)).await;\n    let url = &format!(\"{}/12/load/omega\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"3\" {\n        return Err(test);\n    }\n    let url = &format!(\"{}/12/load/alpha\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"1\" {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    test = (2, 1);\n    let url = &format!(\"{}/12/ulids\", base_url);\n    let res = client\n        .post(url)\n        .json(&serde_json::json!([\n            \"01BJQ0E1C3Z56ABCD0E11HYX4M\",\n            \"01BJQ0E1C3Z56ABCD0E11HYX5N\",\n            \"01BJQ0E1C3Z56ABCD0E11HYX6Q\",\n            \"01BJQ0E1C3Z56ABCD0E11HYX7R\",\n            \"01BJQ0E1C3Z56ABCD0E11HYX8P\"\n        ]))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json\n        != serde_json::json!([\n            \"015cae07-0583-f94c-a5b1-a070431f7516\",\n            \"015cae07-0583-f94c-a5b1-a070431f74f8\",\n            \"015cae07-0583-f94c-a5b1-a070431f74d7\",\n            \"015cae07-0583-f94c-a5b1-a070431f74b5\",\n            \"015cae07-0583-f94c-a5b1-a070431f7494\"\n        ])\n    {\n        return Err(test);\n    }\n    test = (2, 2);\n    let res = client\n        .post(url)\n        .json(&serde_json::json!([]))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json != serde_json::json!([]) {\n        return Err(test);\n    }\n    // TASK 2 DONE\n    tx.send((false, 100).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 3\n    test = (3, 1);\n    let ids = serde_json::json!([\n        \"00WEGGF0G0J5HEYXS3D7RWZGV8\",\n        \"76EP4G39R8JD1N8AQNYDVJBRCF\",\n        \"018CJ7KMG0051CDCS3B7BFJ3AK\",\n        \"00Y986KPG0AMGB78RD45E9109K\",\n        \"010451HTG0NYWMPWCEXG6AJ8F2\",\n        \"01HH9SJEG0KY16H81S3N1BMXM4\",\n        \"01HH9SJEG0P9M22Z9VGHH9C8CX\",\n        \"017F8YY0G0NQA16HHC2QT5JD6X\",\n        \"03QCPC7P003V1NND3B3QJW72QJ\"\n    ]);\n    let url = &format!(\"{}/12/ulids/5\", base_url);\n    let res = client.post(url).json(&ids).send().await.map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json\n        != serde_json::json!({\n            \"christmas eve\": 3,\n            \"weekday\": 1,\n            \"in the future\": 2,\n            \"LSB is 1\": 5\n        })\n    {\n        return Err(test);\n    }\n    test = (3, 2);\n    let url = &format!(\"{}/12/ulids/0\", base_url);\n    let res = client.post(url).json(&ids).send().await.map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json\n        != serde_json::json!({\n            \"christmas eve\": 3,\n            \"weekday\": 0,\n            \"in the future\": 2,\n            \"LSB is 1\": 5\n        })\n    {\n        return Err(test);\n    }\n    test = (3, 3);\n    let url = &format!(\"{}/12/ulids/2\", base_url);\n    let res = client\n        .post(url)\n        .json(&serde_json::json!([\"04BJK8N300BAMR9SQQWPWHVYKZ\"]))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json\n        != serde_json::json!({\n            \"christmas eve\": 1,\n            \"weekday\": 1,\n            \"in the future\": 1,\n            \"LSB is 1\": 1\n        })\n    {\n        return Err(test);\n    }\n    // TASK 3 DONE\n    tx.send((false, 200).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_13(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1\n    test = (1, 1);\n    let url = &format!(\"{}/13/sql\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"20231213\" {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((false, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    test = (2, 1);\n    let reset_url = &format!(\"{}/13/reset\", base_url);\n    let order_url = &format!(\"{}/13/orders\", base_url);\n    let total_url = &format!(\"{}/13/orders/total\", base_url);\n    let res = client.post(reset_url).send().await.map_err(|_| test)?;\n    if res.status() != StatusCode::OK {\n        return Err(test);\n    }\n    let res = client\n        .post(order_url)\n        .json(&serde_json::json!([\n            {\"id\":1,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":5},\n            {\"id\":2,\"region_id\":2,\"gift_name\":\"Doll\",\"quantity\":8},\n            {\"id\":3,\"region_id\":3,\"gift_name\":\"Action Figure\",\"quantity\":12},\n            {\"id\":4,\"region_id\":4,\"gift_name\":\"Board Game\",\"quantity\":10},\n            {\"id\":5,\"region_id\":2,\"gift_name\":\"Teddy Bear\",\"quantity\":6},\n            {\"id\":6,\"region_id\":3,\"gift_name\":\"Toy Train\",\"quantity\":3},\n        ]))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    if res.status() != StatusCode::OK {\n        return Err(test);\n    }\n    let res = client.get(total_url).send().await.map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json != serde_json::json!({\"total\": 44}) {\n        return Err(test);\n    }\n    test = (2, 2);\n    let res = client\n        .post(order_url)\n        .json(&serde_json::json!([\n            {\"id\":123,\"region_id\":6,\"gift_name\":\"Unknown\",\"quantity\":333},\n        ]))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    if res.status() != StatusCode::OK {\n        return Err(test);\n    }\n    let res = client.get(total_url).send().await.map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json != serde_json::json!({\"total\": 377}) {\n        return Err(test);\n    }\n    // TASK 2 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 3\n    test = (3, 1);\n    let popular_url = &format!(\"{}/13/orders/popular\", base_url);\n    let res = client.post(reset_url).send().await.map_err(|_| test)?;\n    if res.status() != StatusCode::OK {\n        return Err(test);\n    }\n    let res = client.get(popular_url).send().await.map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json != serde_json::json!({\"popular\": null}) {\n        return Err(test);\n    }\n    test = (3, 2);\n    let res = client\n        .post(order_url)\n        .json(&serde_json::json!([\n            {\"id\":1,\"region_id\":2,\"gift_name\":\"Lego Rocket\",\"quantity\":12},\n            {\"id\":2,\"region_id\":2,\"gift_name\":\"Action Figure\",\"quantity\":18},\n            {\"id\":3,\"region_id\":5,\"gift_name\":\"Toy Train\",\"quantity\":19},\n            {\"id\":4,\"region_id\":5,\"gift_name\":\"Lego Rocket\",\"quantity\":12},\n            {\"id\":5,\"region_id\":4,\"gift_name\":\"Toy Train\",\"quantity\":15},\n            {\"id\":6,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":7},\n            {\"id\":7,\"region_id\":3,\"gift_name\":\"Toy Train\",\"quantity\":19},\n            {\"id\":8,\"region_id\":4,\"gift_name\":\"Action Figure\",\"quantity\":8},\n            {\"id\":9,\"region_id\":2,\"gift_name\":\"Toy Axe\",\"quantity\":15},\n            {\"id\":10,\"region_id\":4,\"gift_name\":\"Toy Axe\",\"quantity\":1},\n            {\"id\":11,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":17},\n            {\"id\":12,\"region_id\":4,\"gift_name\":\"Toy Train\",\"quantity\":5},\n            {\"id\":13,\"region_id\":4,\"gift_name\":\"Sweater\",\"quantity\":20},\n            {\"id\":14,\"region_id\":4,\"gift_name\":\"Action Figure\",\"quantity\":7},\n            {\"id\":15,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":16},\n            {\"id\":16,\"region_id\":3,\"gift_name\":\"Action Figure\",\"quantity\":12},\n            {\"id\":17,\"region_id\":4,\"gift_name\":\"Toy Axe\",\"quantity\":2},\n            {\"id\":18,\"region_id\":3,\"gift_name\":\"Toy Train\",\"quantity\":9},\n            {\"id\":19,\"region_id\":2,\"gift_name\":\"Sweater\",\"quantity\":9},\n            {\"id\":20,\"region_id\":5,\"gift_name\":\"Toy Train\",\"quantity\":9},\n            {\"id\":21,\"region_id\":4,\"gift_name\":\"Action Figure\",\"quantity\":11},\n            {\"id\":22,\"region_id\":3,\"gift_name\":\"Toy Train\",\"quantity\":7},\n            {\"id\":23,\"region_id\":2,\"gift_name\":\"Action Figure\",\"quantity\":5},\n            {\"id\":24,\"region_id\":4,\"gift_name\":\"Action Figure\",\"quantity\":17},\n            {\"id\":25,\"region_id\":5,\"gift_name\":\"Lego Rocket\",\"quantity\":6},\n            {\"id\":26,\"region_id\":2,\"gift_name\":\"Sweater\",\"quantity\":5},\n            {\"id\":27,\"region_id\":5,\"gift_name\":\"Toy Train\",\"quantity\":4},\n            {\"id\":28,\"region_id\":4,\"gift_name\":\"Lego Rocket\",\"quantity\":8},\n            {\"id\":29,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":3},\n            {\"id\":30,\"region_id\":4,\"gift_name\":\"Toy Axe\",\"quantity\":20},\n            {\"id\":31,\"region_id\":2,\"gift_name\":\"Action Figure\",\"quantity\":5},\n            {\"id\":32,\"region_id\":2,\"gift_name\":\"Lego Rocket\",\"quantity\":10},\n            {\"id\":33,\"region_id\":5,\"gift_name\":\"Toy Train\",\"quantity\":4},\n            {\"id\":34,\"region_id\":2,\"gift_name\":\"Toy Axe\",\"quantity\":14},\n            {\"id\":35,\"region_id\":3,\"gift_name\":\"Action Figure\",\"quantity\":18},\n            {\"id\":36,\"region_id\":5,\"gift_name\":\"Toy Axe\",\"quantity\":10},\n            {\"id\":37,\"region_id\":4,\"gift_name\":\"Lego Rocket\",\"quantity\":6},\n            {\"id\":38,\"region_id\":4,\"gift_name\":\"Action Figure\",\"quantity\":16},\n            {\"id\":39,\"region_id\":4,\"gift_name\":\"Toy Axe\",\"quantity\":15},\n            {\"id\":40,\"region_id\":5,\"gift_name\":\"Lego Rocket\",\"quantity\":15},\n            {\"id\":41,\"region_id\":5,\"gift_name\":\"Action Figure\",\"quantity\":7},\n            {\"id\":42,\"region_id\":3,\"gift_name\":\"Action Figure\",\"quantity\":16},\n            {\"id\":43,\"region_id\":3,\"gift_name\":\"Toy Train\",\"quantity\":8},\n            {\"id\":44,\"region_id\":4,\"gift_name\":\"Action Figure\",\"quantity\":13},\n            {\"id\":45,\"region_id\":3,\"gift_name\":\"Lego Rocket\",\"quantity\":12},\n            {\"id\":46,\"region_id\":3,\"gift_name\":\"Toy Train\",\"quantity\":1},\n            {\"id\":47,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":11},\n            {\"id\":48,\"region_id\":5,\"gift_name\":\"Action Figure\",\"quantity\":1},\n            {\"id\":49,\"region_id\":4,\"gift_name\":\"Toy Train\",\"quantity\":13},\n            {\"id\":50,\"region_id\":5,\"gift_name\":\"Action Figure\",\"quantity\":16},\n            {\"id\":51,\"region_id\":4,\"gift_name\":\"Toy Axe\",\"quantity\":19},\n            {\"id\":52,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":14},\n            {\"id\":53,\"region_id\":3,\"gift_name\":\"Action Figure\",\"quantity\":16},\n        ]))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    if res.status() != StatusCode::OK {\n        return Err(test);\n    }\n    let res = client.get(popular_url).send().await.map_err(|_| test)?;\n    let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    if json != serde_json::json!({\"popular\": \"Action Figure\"}) {\n        return Err(test);\n    }\n    // TASK 3 DONE\n    tx.send((false, 100).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_14(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1\n    test = (1, 1);\n    let url = &format!(\"{}/14/unsafe\", base_url);\n    let res = client\n        .post(url)\n        .json(&serde_json::json!({\"content\": \"Bing Chilling 🥶🍦\"}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text\n        != \"\\\n<html>\n  <head>\n    <title>CCH23 Day 14</title>\n  </head>\n  <body>\n    Bing Chilling 🥶🍦\n  </body>\n</html>\"\n    {\n        return Err(test);\n    }\n    test = (1, 2);\n    let res = client\n        .post(url)\n        .json(&serde_json::json!({\"content\": r#\"<script>alert(\"XSS Attack Success!\")</script>\"#}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text\n        != \"\\\n<html>\n  <head>\n    <title>CCH23 Day 14</title>\n  </head>\n  <body>\n    <script>alert(\\\"XSS Attack Success!\\\")</script>\n  </body>\n</html>\"\n    {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    test = (2, 1);\n    let url = &format!(\"{}/14/safe\", base_url);\n    let res = client\n        .post(url)\n        .json(&serde_json::json!({\"content\": r#\"<script>alert(\"XSS Attack Failed!\")</script>\"#}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text\n        != \"\\\n<html>\n  <head>\n    <title>CCH23 Day 14</title>\n  </head>\n  <body>\n    &lt;script&gt;alert(&quot;XSS Attack Failed!&quot;)&lt;/script&gt;\n  </body>\n</html>\"\n    {\n        return Err(test);\n    }\n    // TASK 2 DONE\n    tx.send((false, 100).into()).await.unwrap();\n\n    Ok(())\n}\n\nstruct JSONTester {\n    client: reqwest::Client,\n    url: String,\n}\n\nimpl JSONTester {\n    fn new(url: String) -> Self {\n        Self {\n            client: new_client(),\n            url,\n        }\n    }\n    async fn test(\n        &self,\n        test: TaskTest,\n        i: &serde_json::Value,\n        code: StatusCode,\n        o: &serde_json::Value,\n    ) -> ValidateResult {\n        let res = self\n            .client\n            .post(&self.url)\n            .json(i)\n            .send()\n            .await\n            .map_err(|_| test)?;\n        if res.status() != code {\n            return Err(test);\n        }\n        let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n        if json != *o {\n            return Err(test);\n        }\n        Ok(())\n    }\n}\n\nasync fn validate_15(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    // TASK 1\n    let t = JSONTester::new(format!(\"{}/15/nice\", base_url));\n    t.test(\n        (1, 1),\n        &serde_json::json!({\"input\": \"hello there\"}),\n        StatusCode::OK,\n        &serde_json::json!({\"result\": \"nice\"}),\n    )\n    .await?;\n    t.test(\n        (1, 2),\n        &serde_json::json!({\"input\": \"he77o there\"}),\n        StatusCode::BAD_REQUEST,\n        &serde_json::json!({\"result\": \"naughty\"}),\n    )\n    .await?;\n    t.test(\n        (1, 3),\n        &serde_json::json!({\"input\": \"hello\"}),\n        StatusCode::BAD_REQUEST,\n        &serde_json::json!({\"result\": \"naughty\"}),\n    )\n    .await?;\n    t.test(\n        (1, 4),\n        &serde_json::json!({\"input\": \"hello xylophone\"}),\n        StatusCode::BAD_REQUEST,\n        &serde_json::json!({\"result\": \"naughty\"}),\n    )\n    .await?;\n    t.test(\n        (1, 5),\n        &serde_json::json!({\"input\": \"password\"}),\n        StatusCode::BAD_REQUEST,\n        &serde_json::json!({\"result\": \"naughty\"}),\n    )\n    .await?;\n    let test = (1, 6);\n    let res = new_client()\n        .post(format!(\"{}/15/nice\", base_url))\n        .header(CONTENT_TYPE, HeaderValue::from_static(\"application/json\"))\n        .body(\"WooooOOOooOOOoooOO 👻\")\n        .send()\n        .await\n        .map_err(|_| test)?;\n    if res.status() != StatusCode::BAD_REQUEST {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    let t = JSONTester::new(format!(\"{}/15/game\", base_url));\n    t.test(\n        (2, 1),\n        &serde_json::json!({\"input\": \"mario\"}),\n        StatusCode::BAD_REQUEST,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"8 chars\"}),\n    )\n    .await?;\n    t.test(\n        (2, 2),\n        &serde_json::json!({\"input\": \"mariobro\"}),\n        StatusCode::BAD_REQUEST,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"more types of chars\"}),\n    )\n    .await?;\n    t.test(\n        (2, 3),\n        &serde_json::json!({\"input\": \"EEEEEEEEEEE\"}),\n        StatusCode::BAD_REQUEST,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"more types of chars\"}),\n    )\n    .await?;\n    t.test(\n        (2, 4),\n        &serde_json::json!({\"input\": \"E3E3E3E3E3E\"}),\n        StatusCode::BAD_REQUEST,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"more types of chars\"}),\n    )\n    .await?;\n    t.test(\n        (2, 5),\n        &serde_json::json!({\"input\": \"e3E3e#eE#ee3#EeE3\"}),\n        StatusCode::BAD_REQUEST,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"55555\"}),\n    )\n    .await?;\n    t.test(\n        (2, 6),\n        &serde_json::json!({\"input\": \"Password12345\"}),\n        StatusCode::BAD_REQUEST,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"math is hard\"}),\n    )\n    .await?;\n    t.test(\n        (2, 7),\n        &serde_json::json!({\"input\": \"2 00 2 3 OOgaBooga\"}),\n        StatusCode::BAD_REQUEST,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"math is hard\"}),\n    )\n    .await?;\n    t.test(\n        (2, 8),\n        &serde_json::json!({\"input\": \"2+2/2-8*8 = 1-2000 OOgaBooga\"}),\n        StatusCode::NOT_ACCEPTABLE,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"not joyful enough\"}),\n    )\n    .await?;\n    t.test(\n        (2, 9),\n        &serde_json::json!({\"input\": \"2000.23.A yoyoj\"}),\n        StatusCode::NOT_ACCEPTABLE,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"not joyful enough\"}),\n    )\n    .await?;\n    t.test(\n        (2, 10),\n        &serde_json::json!({\"input\": \"2000.23.A joy joy\"}),\n        StatusCode::NOT_ACCEPTABLE,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"not joyful enough\"}),\n    )\n    .await?;\n    t.test(\n        (2, 11),\n        &serde_json::json!({\"input\": \"2000.23.A joyo\"}),\n        StatusCode::NOT_ACCEPTABLE,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"not joyful enough\"}),\n    )\n    .await?;\n    t.test(\n        (2, 12),\n        &serde_json::json!({\"input\": \"2000.23.A j  ;)  o  ;)  y \"}),\n        StatusCode::UNAVAILABLE_FOR_LEGAL_REASONS,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"illegal: no sandwich\"}),\n    )\n    .await?;\n    t.test(\n        (2, 13),\n        &serde_json::json!({\"input\": \"2020.3.A j  ;)  o  ;)  y\"}),\n        StatusCode::UNAVAILABLE_FOR_LEGAL_REASONS,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"illegal: no sandwich\"}),\n    )\n    .await?;\n    t.test(\n        (2, 14),\n        &serde_json::json!({\"input\": \"2000.23.A j  ;)  o  ;)  y AzA\"}),\n        StatusCode::RANGE_NOT_SATISFIABLE,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"outranged\"}),\n    )\n    .await?;\n    t.test(\n        (2, 15),\n        &serde_json::json!({\"input\": \"2000.23.A j  ;)  o  ;)  y⥿ AzA\"}),\n        StatusCode::RANGE_NOT_SATISFIABLE,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"outranged\"}),\n    )\n    .await?;\n    t.test(\n        (2, 16),\n        &serde_json::json!({\"input\": \"2000.23.A j  ;)  o  ;)  y ⦄AzA\"}),\n        StatusCode::UPGRADE_REQUIRED,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"😳\"}),\n    )\n    .await?;\n    t.test(\n        (2, 17),\n        &serde_json::json!({\"input\": \"2000.23.A j  🥶  o  🍦  y ⦄AzA\"}),\n        StatusCode::IM_A_TEAPOT,\n        &serde_json::json!({\"result\": \"naughty\", \"reason\": \"not a coffee brewer\"}),\n    )\n    .await?;\n    t.test(\n        (2, 18),\n        &serde_json::json!({\"input\": \"2000.23.A j ⦖⦖⦖⦖⦖⦖⦖⦖ 🥶  o  🍦  y ⦄AzA\"}),\n        StatusCode::OK,\n        &serde_json::json!({\"result\": \"nice\", \"reason\": \"that's a nice password\"}),\n    )\n    .await?;\n    // TASK 2 DONE\n    tx.send((false, 400).into()).await.unwrap();\n\n    Ok(())\n}\n\nstruct RegionGiftTester {\n    client: reqwest::Client,\n    reset_url: String,\n    regions_url: String,\n    orders_url: String,\n    final_url: String,\n}\n\nimpl RegionGiftTester {\n    async fn test(\n        &self,\n        test: TaskTest,\n        i1: &serde_json::Value,\n        i2: &serde_json::Value,\n        o: &serde_json::Value,\n    ) -> ValidateResult {\n        let res = self\n            .client\n            .post(&self.reset_url)\n            .send()\n            .await\n            .map_err(|_| test)?;\n        if res.status() != StatusCode::OK {\n            return Err(test);\n        }\n        let res = self\n            .client\n            .post(&self.regions_url)\n            .json(i1)\n            .send()\n            .await\n            .map_err(|_| test)?;\n        if res.status() != StatusCode::OK {\n            return Err(test);\n        }\n        let res = self\n            .client\n            .post(&self.orders_url)\n            .json(i2)\n            .send()\n            .await\n            .map_err(|_| test)?;\n        if res.status() != StatusCode::OK {\n            return Err(test);\n        }\n        let res = self\n            .client\n            .get(&self.final_url)\n            .send()\n            .await\n            .map_err(|_| test)?;\n        if res.status() != StatusCode::OK {\n            return Err(test);\n        }\n        let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n        if json != *o {\n            return Err(test);\n        }\n        Ok(())\n    }\n}\n\nasync fn validate_18(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    // TASK 1\n    let t = RegionGiftTester {\n        client: new_client(),\n        reset_url: format!(\"{}/18/reset\", base_url),\n        regions_url: format!(\"{}/18/regions\", base_url),\n        orders_url: format!(\"{}/18/orders\", base_url),\n        final_url: format!(\"{}/18/regions/total\", base_url),\n    };\n    t.test(\n        (1, 1),\n        &serde_json::json!([{\"id\":1,\"name\":\"North Pole\"}]),\n        &serde_json::json!([]),\n        &serde_json::json!([]),\n    )\n    .await?;\n    t.test(\n        (1, 2),\n        &serde_json::json!([]),\n        &serde_json::json!([{\"id\":1,\"region_id\":2,\"gift_name\":\"Board Game\",\"quantity\":5}]),\n        &serde_json::json!([]),\n    )\n    .await?;\n    t.test(\n        (1, 3),\n        &serde_json::json!([{\"id\":1,\"name\":\"A\"}]),\n        &serde_json::json!([{\"id\":1,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":1}]),\n        &serde_json::json!([{\"region\":\"A\",\"total\":1}]),\n    )\n    .await?;\n    t.test(\n        (1, 4),\n        &serde_json::json!([{\"id\":1,\"name\":\"A\"}]),\n        &serde_json::json!([\n            {\"id\":1,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":1},\n            {\"id\":2,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":1},\n            {\"id\":3,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":1}\n        ]),\n        &serde_json::json!([{\"region\":\"A\",\"total\":3}]),\n    )\n    .await?;\n    t.test(\n        (1, 5),\n        &serde_json::json!([\n            {\"id\":1,\"name\":\"A\"},\n            {\"id\":2,\"name\":\"B\"}\n        ]),\n        &serde_json::json!([\n            {\"id\":1,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":1},\n            {\"id\":2,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":1},\n            {\"id\":3,\"region_id\":2,\"gift_name\":\"B\",\"quantity\":1}\n        ]),\n        &serde_json::json!([\n            {\"region\":\"A\",\"total\":2},\n            {\"region\":\"B\",\"total\":1}\n        ]),\n    )\n    .await?;\n    t.test(\n        (1, 6),\n        &serde_json::json!([\n            {\"id\":1,\"name\":\"A\"},\n            {\"id\":2,\"name\":\"B\"}\n        ]),\n        &serde_json::json!([\n            {\"id\":1,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":1},\n            {\"id\":2,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":1},\n            {\"id\":3,\"region_id\":3,\"gift_name\":\"C\",\"quantity\":1}\n        ]),\n        &serde_json::json!([{\"region\":\"A\",\"total\":2}]),\n    )\n    .await?;\n    t.test(\n        (1, 7),\n        &serde_json::json!([{\"id\":1,\"name\":\"A\"}]),\n        &serde_json::json!([{\"id\":1,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":555555555}]),\n        &serde_json::json!([{\"region\":\"A\",\"total\":555555555}]),\n    )\n    .await?;\n    t.test(\n        (1, 8),\n        &serde_json::json!([{\"id\":-1,\"name\":\"A\"}]),\n        &serde_json::json!([\n            {\"id\":-1,\"region_id\":-1,\"gift_name\":\"A\",\"quantity\":-1},\n            {\"id\":0,\"region_id\":-1,\"gift_name\":\"A\",\"quantity\":1}\n        ]),\n        &serde_json::json!([{\"region\":\"A\",\"total\":0}]),\n    )\n    .await?;\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    let t = RegionGiftTester {\n        client: new_client(),\n        reset_url: format!(\"{}/18/reset\", base_url),\n        regions_url: format!(\"{}/18/regions\", base_url),\n        orders_url: format!(\"{}/18/orders\", base_url),\n        final_url: format!(\"{}/18/regions/top_list/2\", base_url),\n    };\n    t.test(\n        (2, 1),\n        &serde_json::json!([]),\n        &serde_json::json!([]),\n        &serde_json::json!([]),\n    )\n    .await?;\n    t.test(\n        (2, 2),\n        &serde_json::json!([{\"id\":1,\"name\":\"A\"}]),\n        &serde_json::json!([]),\n        &serde_json::json!([{\"region\":\"A\",\"top_gifts\":[]}]),\n    )\n    .await?;\n    t.test(\n        (2, 3),\n        &serde_json::json!([]),\n        &serde_json::json!([{\"id\":1,\"region_id\":2,\"gift_name\":\"B\",\"quantity\":5}]),\n        &serde_json::json!([]),\n    )\n    .await?;\n    t.test(\n        (2, 4),\n        &serde_json::json!([{\"id\":1,\"name\":\"A\"}]),\n        &serde_json::json!([{\"id\":1,\"region_id\":2,\"gift_name\":\"B\",\"quantity\":5}]),\n        &serde_json::json!([{\"region\":\"A\",\"top_gifts\":[]}]),\n    )\n    .await?;\n    t.test(\n        (2, 5),\n        &serde_json::json!([{\"id\":1,\"name\":\"A\"}]),\n        &serde_json::json!([\n            {\"id\":1,\"region_id\":1,\"gift_name\":\"B\",\"quantity\":10},\n            {\"id\":2,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":5},\n            {\"id\":3,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":5},\n            {\"id\":4,\"region_id\":1,\"gift_name\":\"C\",\"quantity\":9}\n        ]),\n        &serde_json::json!([{\"region\":\"A\",\"top_gifts\":[\"A\",\"B\"]}]),\n    )\n    .await?;\n    let regions = serde_json::json!([\n        {\"id\":1,\"name\":\"North Pole\"},\n        {\"id\":2,\"name\":\"Europe\"},\n        {\"id\":3,\"name\":\"North America\"},\n        {\"id\":4,\"name\":\"South America\"},\n        {\"id\":5,\"name\":\"Africa\"},\n        {\"id\":6,\"name\":\"Asia\"},\n        {\"id\":7,\"name\":\"Oceania\"}\n    ]);\n    t.test(\n        (2, 6),\n        &regions,\n        &serde_json::json!([\n            {\"id\":1,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":5},\n            {\"id\":2,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":3},\n            {\"id\":3,\"region_id\":2,\"gift_name\":\"Doll\",\"quantity\":8},\n            {\"id\":4,\"region_id\":3,\"gift_name\":\"Toy Train\",\"quantity\":3},\n            {\"id\":5,\"region_id\":2,\"gift_name\":\"Teddy Bear\",\"quantity\":6},\n            {\"id\":6,\"region_id\":3,\"gift_name\":\"Action Figure\",\"quantity\":12},\n            {\"id\":7,\"region_id\":4,\"gift_name\":\"Board Game\",\"quantity\":10},\n            {\"id\":8,\"region_id\":3,\"gift_name\":\"Teddy Bear\",\"quantity\":1},\n            {\"id\":9,\"region_id\":3,\"gift_name\":\"Teddy Bear\",\"quantity\":2}\n        ]),\n        &serde_json::json!([\n            {\"region\":\"Africa\",\"top_gifts\":[]},\n            {\"region\":\"Asia\",\"top_gifts\":[]},\n            {\"region\":\"Europe\",\"top_gifts\":[\"Doll\",\"Toy Train\"]},\n            {\"region\":\"North America\",\"top_gifts\":[\"Action Figure\",\"Teddy Bear\"]},\n            {\"region\":\"North Pole\",\"top_gifts\":[]},\n            {\"region\":\"Oceania\",\"top_gifts\":[]},\n            {\"region\":\"South America\",\"top_gifts\":[\"Board Game\"]},\n        ]),\n    )\n    .await?;\n    let t = RegionGiftTester {\n        client: new_client(),\n        reset_url: format!(\"{}/18/reset\", base_url),\n        regions_url: format!(\"{}/18/regions\", base_url),\n        orders_url: format!(\"{}/18/orders\", base_url),\n        final_url: format!(\"{}/18/regions/top_list/3\", base_url),\n    };\n    t.test(\n        (2, 7),\n        &regions,\n        &serde_json::json!([\n            {\"id\":1,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":5},\n            {\"id\":2,\"region_id\":2,\"gift_name\":\"Toy Train\",\"quantity\":3},\n            {\"id\":3,\"region_id\":2,\"gift_name\":\"Doll\",\"quantity\":8},\n            {\"id\":4,\"region_id\":3,\"gift_name\":\"Toy Train\",\"quantity\":3},\n            {\"id\":5,\"region_id\":2,\"gift_name\":\"Teddy Bear\",\"quantity\":6},\n            {\"id\":6,\"region_id\":3,\"gift_name\":\"Action Figure\",\"quantity\":12},\n            {\"id\":7,\"region_id\":4,\"gift_name\":\"Board Game\",\"quantity\":10},\n            {\"id\":8,\"region_id\":3,\"gift_name\":\"Teddy Bear\",\"quantity\":1},\n            {\"id\":9,\"region_id\":3,\"gift_name\":\"Teddy Bear\",\"quantity\":2}\n        ]),\n        &serde_json::json!([\n            {\"region\":\"Africa\",\"top_gifts\":[]},\n            {\"region\":\"Asia\",\"top_gifts\":[]},\n            {\"region\":\"Europe\",\"top_gifts\":[\"Doll\",\"Toy Train\",\"Teddy Bear\"]},\n            {\"region\":\"North America\",\"top_gifts\":[\"Action Figure\",\"Teddy Bear\",\"Toy Train\"]},\n            {\"region\":\"North Pole\",\"top_gifts\":[]},\n            {\"region\":\"Oceania\",\"top_gifts\":[]},\n            {\"region\":\"South America\",\"top_gifts\":[\"Board Game\"]},\n        ]),\n    )\n    .await?;\n    let t = RegionGiftTester {\n        client: new_client(),\n        reset_url: format!(\"{}/18/reset\", base_url),\n        regions_url: format!(\"{}/18/regions\", base_url),\n        orders_url: format!(\"{}/18/orders\", base_url),\n        final_url: format!(\"{}/18/regions/top_list/0\", base_url),\n    };\n    t.test(\n        (2, 8),\n        &serde_json::json!([{\"id\":1,\"name\":\"A\"}]),\n        &serde_json::json!([{\"id\":1,\"region_id\":1,\"gift_name\":\"A\",\"quantity\":555555555}]),\n        &serde_json::json!([{\"region\":\"A\",\"top_gifts\":[]}]),\n    )\n    .await?;\n    // TASK 2 DONE\n    tx.send((false, 600).into()).await.unwrap();\n\n    Ok(())\n}\n\nstruct WS {\n    test: TaskTest,\n    w: SplitSink<WebSocketStream<MaybeTlsStream<TcpStream>>, Message>,\n    r: SplitStream<WebSocketStream<MaybeTlsStream<TcpStream>>>,\n}\n\nimpl WS {\n    async fn new(test: TaskTest, url: String) -> Result<Self, TaskTest> {\n        let (s, _) = tokio_tungstenite::connect_async(url)\n            .await\n            .map_err(|_| test)?;\n        let (w, r) = s.split();\n\n        Ok(Self { test, w, r })\n    }\n\n    async fn send(&mut self, msg: impl Into<String>) -> ValidateResult {\n        self.w\n            .send(Message::Text(msg.into()))\n            .await\n            .map_err(|_| self.test)\n    }\n\n    async fn send_tweet(&mut self, msg: impl Into<String>) -> ValidateResult {\n        self.send(serde_json::to_string(&serde_json::json!({\"message\": msg.into()})).unwrap())\n            .await\n    }\n\n    async fn recv(&mut self) -> Result<String, TaskTest> {\n        let Some(Ok(Message::Text(text))) = self.r.next().await else {\n            return Err(self.test);\n        };\n\n        Ok(text)\n    }\n\n    async fn recv_str(&mut self, exp: &str) -> ValidateResult {\n        let text = self.recv().await?;\n        if text != exp {\n            return Err(self.test);\n        }\n\n        Ok(())\n    }\n\n    async fn recv_json(&mut self, exp: &serde_json::Value) -> ValidateResult {\n        let text = self.recv().await?;\n        let json = serde_json::from_str::<serde_json::Value>(&text).map_err(|_| self.test)?;\n        if &json != exp {\n            return Err(self.test);\n        }\n\n        Ok(())\n    }\n\n    async fn close(mut self) -> ValidateResult {\n        self.w.close().await.map_err(|_| self.test)?;\n\n        Ok(())\n    }\n}\n\nasync fn validate_19(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let mut test: TaskTest;\n    let ws_base_url = format!(\n        \"ws{}\",\n        base_url\n            .strip_prefix(\"http\")\n            .expect(\"url to begin with http\")\n    );\n    // TASK 1\n    test = (1, 1);\n    let mut ws = WS::new(test, format!(\"{}/19/ws/ping\", ws_base_url)).await?;\n    ws.send(\"ping\").await?;\n    tokio::select! {\n        _ = ws.recv() => {\n            return Err(test);\n        },\n        _ = sleep(Duration::from_secs(1)) => (),\n    };\n    ws.send(\"serve\").await?;\n    ws.send(\"ping\").await?;\n    ws.recv_str(\"pong\").await?;\n    test = (1, 2);\n    ws.test = test;\n    ws.send(\"ding\").await?;\n    tokio::select! {\n        _ = ws.recv() => {\n            return Err(test);\n        },\n        _ = sleep(Duration::from_secs(1)) => (),\n    };\n    test = (1, 3);\n    ws.test = test;\n    ws.send(\"ping\").await?;\n    ws.send(\"ping\").await?;\n    ws.recv_str(\"pong\").await?;\n    ws.recv_str(\"pong\").await?;\n    tokio::select! {\n        _ = ws.recv() => {\n            return Err(test);\n        },\n        _ = sleep(Duration::from_millis(500)) => (),\n    };\n    ws.close().await?;\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    let reset_url = &format!(\"{}/19/reset\", base_url);\n    let reset = || async move {\n        let client = new_client();\n        let res = client.post(reset_url).send().await.map_err(|_| ())?;\n        if res.status() != StatusCode::OK {\n            return Err(());\n        }\n        Ok(())\n    };\n    let views_url = &format!(\"{}/19/views\", base_url);\n    let ensure_views = |v: u32| async move {\n        let client = new_client();\n        let res = client.get(views_url).send().await.map_err(|_| ())?;\n        let text = res.text().await.map_err(|_| ())?;\n        if text != v.to_string() {\n            return Err(());\n        }\n        Ok(())\n    };\n\n    test = (2, 1);\n    reset().await.map_err(|_| test)?;\n    ensure_views(0).await.map_err(|_| test)?;\n\n    test = (2, 2);\n    let mut elon = WS::new(test, format!(\"{}/19/ws/room/1/user/elonmusk\", ws_base_url)).await?;\n    let s = \"Next I'm buying Coca-Cola to put the cocaine back in\";\n    elon.send_tweet(s).await?;\n    elon.recv_json(&serde_json::json!({\"user\": \"elonmusk\", \"message\": s}))\n        .await?;\n    ensure_views(1).await.map_err(|_| test)?;\n\n    test = (2, 3);\n    let s = \"I've concocted a whimsical idea to bring a bit of the ol' history back to life by attempting to put the cocaine back in Coca-Cola, rekindling the rebellious spirit of its original formulation\";\n    elon.send_tweet(s).await?;\n    tokio::select! {\n        _ = elon.recv() => {\n            return Err(test);\n        },\n        _ = sleep(Duration::from_secs(1)) => (),\n    };\n    ensure_views(1).await.map_err(|_| test)?;\n    elon.close().await?;\n    sleep(Duration::from_millis(10)).await;\n\n    test = (2, 4);\n    reset().await.map_err(|_| test)?;\n    ensure_views(0).await.map_err(|_| test)?;\n    let mut a1 = WS::new(test, format!(\"{}/19/ws/room/44/user/annifrid\", ws_base_url)).await?;\n    let mut b1 = WS::new(test, format!(\"{}/19/ws/room/55/user/bjorn\", ws_base_url)).await?;\n    let mut b2 = WS::new(test, format!(\"{}/19/ws/room/55/user/benny\", ws_base_url)).await?;\n    let mut a2 = WS::new(test, format!(\"{}/19/ws/room/44/user/agnetha\", ws_base_url)).await?;\n    let l1 = \"thank you for the music\";\n    let l2 = \"the songs i'm singing\";\n    let l3 = \"thanks for all\";\n    let l4 = \"the joy they're bringing\";\n    let l5 = \"who can live without it\";\n    let l6 = \"i ask in all honesty\";\n    let x1 = \"uhhhhhhhh?\";\n    let x2 = \"wazzaaaaa?\";\n    a1.send_tweet(l1).await?;\n    sleep(Duration::from_millis(10)).await;\n    a2.send_tweet(l2).await?;\n    sleep(Duration::from_millis(10)).await;\n    a1.send_tweet(l3).await?;\n    sleep(Duration::from_millis(10)).await;\n    b1.send_tweet(x1).await?;\n    sleep(Duration::from_millis(10)).await;\n    a2.send_tweet(l4).await?;\n    sleep(Duration::from_millis(10)).await;\n    a1.send_tweet(l5).await?;\n    sleep(Duration::from_millis(10)).await;\n    a1.recv_json(&serde_json::json!({\"user\": \"annifrid\", \"message\": l1}))\n        .await?;\n    a2.recv_json(&serde_json::json!({\"user\": \"annifrid\", \"message\": l1}))\n        .await?;\n    a1.recv_json(&serde_json::json!({\"user\": \"agnetha\", \"message\": l2}))\n        .await?;\n    a2.recv_json(&serde_json::json!({\"user\": \"agnetha\", \"message\": l2}))\n        .await?;\n    a1.recv_json(&serde_json::json!({\"user\": \"annifrid\", \"message\": l3}))\n        .await?;\n    a2.recv_json(&serde_json::json!({\"user\": \"annifrid\", \"message\": l3}))\n        .await?;\n    a1.recv_json(&serde_json::json!({\"user\": \"agnetha\", \"message\": l4}))\n        .await?;\n    a2.recv_json(&serde_json::json!({\"user\": \"agnetha\", \"message\": l4}))\n        .await?;\n    a1.recv_json(&serde_json::json!({\"user\": \"annifrid\", \"message\": l5}))\n        .await?;\n    a2.recv_json(&serde_json::json!({\"user\": \"annifrid\", \"message\": l5}))\n        .await?;\n    sleep(Duration::from_millis(10)).await;\n    ensure_views(12).await.map_err(|_| test)?;\n\n    test = (2, 5);\n    a1.close().await?;\n    sleep(Duration::from_millis(10)).await;\n    a2.send_tweet(l6).await?;\n    a2.recv_json(&serde_json::json!({\"user\": \"agnetha\", \"message\": l6}))\n        .await?;\n    sleep(Duration::from_millis(10)).await;\n    ensure_views(13).await.map_err(|_| test)?;\n\n    test = (2, 6);\n    let mut a1 = WS::new(test, format!(\"{}/19/ws/room/55/user/annifrid\", ws_base_url)).await?;\n    tokio::select! {\n        _ = a1.recv() => {\n            return Err(test);\n        },\n        _ = sleep(Duration::from_secs(1)) => (),\n    };\n    b1.recv_json(&serde_json::json!({\"user\": \"bjorn\", \"message\": x1}))\n        .await?;\n    b2.recv_json(&serde_json::json!({\"user\": \"bjorn\", \"message\": x1}))\n        .await?;\n    a1.send_tweet(x2).await?;\n    sleep(Duration::from_millis(10)).await;\n    b1.close().await?;\n    a1.send_tweet(x2).await?;\n    b2.recv_json(&serde_json::json!({\"user\": \"annifrid\", \"message\": x2}))\n        .await?;\n    b2.recv_json(&serde_json::json!({\"user\": \"annifrid\", \"message\": x2}))\n        .await?;\n    a1.recv_json(&serde_json::json!({\"user\": \"annifrid\", \"message\": x2}))\n        .await?;\n    a1.recv_json(&serde_json::json!({\"user\": \"annifrid\", \"message\": x2}))\n        .await?;\n    sleep(Duration::from_millis(10)).await;\n    ensure_views(18).await.map_err(|_| test)?;\n\n    test = (2, 7);\n    reset().await.map_err(|_| test)?;\n    ensure_views(0).await.map_err(|_| test)?;\n    // generated with https://github.com/orhun/godsays\n    let phrases = Arc::new([\n        \"Okilydokily Give me praise Shhh how high umm what now epic fail mine\",\n        \"quite Wow Shhh driving wot exorbitant Church\",\n        \"whatcha talkin' 'bout chaos look buddy husband good pow Shalom\",\n        \"joking don't have a cow so let it be written you should be so lucky taxes wonderbread spirit\",\n        \"radio dean scream slumin big fish begs the question unemployment red fang\",\n        \"radio Is that your final answer how goes it where's the love unsung hero yep fool\",\n        \"yeah ghetto pardon the french happy middle class what a mess Isn't that special\",\n        \"incoming you better not husband hope driving Watch this thank you very much\",\n        \"I didn't see that sex won't you be my neighbor What take your pick naughty delicious\",\n        \"you're in big trouble hypocrite won't you be my neighbor not in kansas anymore angel joy look on the brightside\",\n        \"money freak joyful bizarre ahh go ahead make my day HolySpirit\",\n        \"Han shot first awesome CIA what's up king of mars what's the plan do you like it\",\n        \"woot ridiculous in a perfect world in other words It's nice being God I was just thinking joker\",\n        \"lying depressing gluttony thank you very much think you could do better charity rip off\",\n        \"how come You da man gosh chaos what a mess frown vengeance\",\n        \"when hell freezes over resume theft I had a crazy dream dude such a scoffer not good Wow\",\n        \"in a perfect world rose colored glasses quite That's gonna leave a mark slumin That's my favorite I have an idea\",\n        \"you don't say I'm not sure what a nightmare well I never be quiet bird fortitude when hell freezes over\",\n        \"scum you're in big trouble you see the light I'm bored who are you to judge because I said so by the way\",\n        \"nevada cheerful vermin threads boss Yes you are I planned that\",\n        \"high mucky muck Isn't that special what a mess mine pet energy that's your opinion\",\n        \"et tu who's to say tattle tale oh my I'm good you good you owe me yuck\",\n        \"praying patience genius I'm in suspense how high Venus I didn't do it\",\n        \"Terry the Mom rum bitty di do it Zap I veto that\",\n        \"hotel I got your back on the otherhand not good chess chill out talk to my lawyer\",\n        \"in a perfect world I'm on a roll Yawn rubbish boss hold on a minute sports\",\n        \"Varoom it'd take a miracle ohh thank you naughty Terry make my day outrageous\",\n        \"atrocious Icarus hate piety one small step phasors on stun take your pick\",\n        \"whazza matter for you not a chance in hell ridiculous whoop there it is little fish hilarious close your eyes\",\n        \"you'll see yep this might end badly news to me red fang that's for me to know you're nuts\",\n        \"what part of God do you not understand what's it to you laziness I donno ha whale beam me up\",\n        \"sess me yep joy hurts my head chaos be happy okay\",\n        \"how about that Pullin the dragons tail prosperity mocking refreshing StephenHawking my bad\",\n        \"boss quite beep beep study dang it population basket case\",\n        \"hobnob no you cant employee jealousy one of the secret words are REMOTE lift uh huh are you deaf\",\n        \"bickering skills thats laughable theres no place like home king of mars repeat after me go ahead make my day\",\n        \"music you should be so lucky in theory no more tears do you know what time it is Angel it's hopeless\",\n        \"couldnt possibly bad ol puddytat husband anger yep atheist et tu\",\n        \"FBI energy lust well I never dance I'm the boss manufacturing\",\n        \"think you could do better gluttony Shalom I didn't see that voodoo Han shot first how could you\",\n        \"virtue experts just between us drama like like vengeance charity\",\n        \"incredibly don't have a cow got the life Russia rufus! basically Is that so\",\n        \"I planned that white trash failure to communicate check this out virtue crash and burn let's see\",\n        \"check this out sloth news to me but of course NOT do it shucks\",\n        \"It grieves me you're no fun cursing rufus! sess me rose colored glasses Church\",\n        \"dance bizarre these cans are defective frown Knock you upside the head no more tears I am not amused\",\n        \"manufacturing adjusted for inflation application Jedi mind trick do I have to praise Venus\",\n        \"I'll let you know you're not all there are you I'm impressed talk to my lawyer abnormal This cant be william wallace frown\",\n        \"Putin This cant be william wallace California rum bitty di end begs the question look buddy\",\n        \"shist Greece failure to communicate you'll see rich left field Mom\",\n        \"thats right you're wonderful you never know really that's your opinion what's up ice cream\",\n        \"class  class  shutup tree hugger news to me just between us ROFLMAO not good not\",\n        \"do it smile You fix it services liberal study I'm God and you're not\",\n        \"chump change I'm feeling nice today thats just wrong you're fired it figures God smack Oy\",\n        \"One finger salute ba ha won't you be my neighbor bring it on don't mention it talk to my lawyer exorbitant\",\n        \"phasors on stun ohh thank you Yes you are how goes it nut job come and get me I got your back\",\n        \"tattle tale you shouldn't have you're wonderful perfect Give me praise I veto that Is that so\",\n        \"fabulous stuff pride Pope You know ordinarily ho ho ho\",\n        \"ouch CIA study application phasors on stun not a chance in hell I'm not sure\",\n        \"energy Isn't that special piety unsung hero guilty downer you owe me\",\n        \"now you tell me no more hypocrite food one small step bad ol puddytat you're not all there are you\",\n        \"depressing Ivy league I was just thinking umm I can't believe it ipod angel\",\n        \"WooHoo place in theory strip African hello a flag on that play\",\n        \"slumin grumble here now I'll get right on it frown If had my druthers over the top\",\n        \"doh naughty joy NeilDeGrasseTyson sports nut job now you tell me\",\n        \"commanded lust Yes you are don't worry recipe nope evolution\",\n        \"manufacturing because I said so pride straighten up I'm on a roll quit it evolution\",\n        \"Mom a likely story I'm off today Is that so don't mention it surprise surprise grumble\",\n        \"arrogant won't you be my neighbor exports act yep Terry I have an idea\",\n        \"reverse engineer I could be wrong news to me nope employee love foul\",\n        \"conservative thank you very much commanded I'll let you know let me count the ways funny theres no place like home\",\n        \"handyman yeah You get what you pray for whale gambling delightful sloth\",\n        \"I'll think about it in theory awful Mom what a mess radio rum bitty di\",\n        \"holy grail glam fortitude have fun depressing who are you to judge take your pick\",\n        \"incoming in a galaxy far far away blessing spirit Pullin the dragons tail computers red fang\",\n        \"beam me up Mom money boss fake prosperity scorning\",\n        \"umm what now one more time nevada completely what's the plan rum bitty di no news is good news\",\n        \"okay exorbitant hopefully mocking is it just me or I pity the fool that's your opinion\",\n        \"because I said so kick back wot vote it's my world Pope charged\",\n        \"money wazz up with that in other words I'm God who the hell are you tattle tale you're lucky don't count on it\",\n        \"small talk genius lying here now mocking other smart\",\n        \"you're lucky smurfs no way dude tree hugger abnormal You da man it's my world\",\n        \"couldn't be better sloth look buddy we ve already got one holy grail take the day off ehheh that's all folks\",\n        \"don't worry relax baffling whoop there it is phasors on stun lighten up I hate when that happens\",\n        \"yeah illogical astrophysics not good busybody bye funny\",\n        \"I hate when that happens food fancy it'd take a miracle shist pick me pick me sloth\",\n        \"check this out wonderful ba ha Moses It's nice being God I don't care abnormal\",\n        \"ipod here now one small step Ivy league that's your opinion you think I'm joking programming\",\n        \"super computer happy GarryKasparov I be like smile God after a break\",\n        \"Oh really it'd take a miracle nut job you owe me Pope holy grail dude such a scoffer\",\n        \"genius humility California holier than thou persistence Isn't that special absetively posilutely\",\n        \"desert break some woopass on you rufus! super computer stuff I'm thrilled the\",\n        \"yep not too shabby voodoo you should be so lucky You da man boss Knock you upside the head\",\n        \"joyful boss you're fired yada yada yada close your eyes look out you'll see\",\n        \"Varoom food don't have a cow run away got the life You know stuff\",\n        \"play is it just me or tiffanies vermin God is not mocked bad what luck\",\n        \"by the way hotel pow study courage I can't believe it I pity the fool\",\n        \"failure is not an option how hard could it be ridiculous what do you want nerd bring it on Dad\",\n        \"spirit king of mars I'm off today threads oh oh what's the plan so he sess\",\n        \"are you feeling lucky do not disturb here now bring it on Bam Dad red fang\",\n    ]);\n    let mut joins = tokio::task::JoinSet::<ValidateResult>::new();\n    let mut tasks = vec![];\n    let views_url = Arc::new(views_url.clone());\n    for i in 0..5 {\n        let u = ws_base_url.clone();\n        let ps = phrases.clone();\n        let views_url = views_url.clone();\n        let mut user = WS::new(test, format!(\"{}/19/ws/room/1/user/{}\", u, i)).await?;\n        tasks.push(async move {\n            for (ii, p) in ps.iter().enumerate() {\n                user.send_tweet(*p).await?;\n                sleep(Duration::from_millis(150)).await;\n                if i == 0 && ii == 50 {\n                    let client = new_client();\n                    client\n                        .get(views_url.deref())\n                        .send()\n                        .await\n                        .map_err(|_| test)?;\n                }\n            }\n            sleep(Duration::from_secs(2)).await;\n            user.close().await?;\n\n            Ok(())\n        });\n    }\n    for t in tasks.into_iter() {\n        joins.spawn(t);\n    }\n    while let Some(Ok(r)) = joins.join_next().await {\n        r?;\n    }\n    sleep(Duration::from_millis(100)).await;\n    ensure_views(2500).await.map_err(|_| test)?;\n    // TASK 2 DONE\n    tx.send((false, 500).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_20(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1\n    test = (1, 1);\n    let url = &format!(\"{}/20/archive_files\", base_url);\n    let res = client\n        .post(url)\n        .body(include_bytes!(\"../assets/northpole20231220.tar\").to_vec())\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"6\" {\n        return Err(test);\n    }\n    test = (1, 2);\n    let url = &format!(\"{}/20/archive_files_size\", base_url);\n    let res = client\n        .post(url)\n        .body(include_bytes!(\"../assets/northpole20231220.tar\").to_vec())\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"1196282\" {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    test = (2, 1);\n    let url = &format!(\"{}/20/cookie\", base_url);\n    let res = client\n        .post(url)\n        .body(include_bytes!(\"../assets/cookiejar.tar\").to_vec())\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"Grinch 71dfab551a1958b35b7436c54b7455dcec99a12c\" {\n        return Err(test);\n    }\n    test = (2, 2);\n    let url = &format!(\"{}/20/cookie\", base_url);\n    let res = client\n        .post(url)\n        .body(include_bytes!(\"../assets/lottery.tar\").to_vec())\n        .send()\n        .await\n        .map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"elf-27221 6342c1dbdb560f0d5dcaac7566fca51454866664\" {\n        return Err(test);\n    }\n    // TASK 2 DONE\n    tx.send((false, 350).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_21(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1\n    test = (1, 1);\n    let url = &format!(\n        \"{}/21/coords/0100111110010011000110011001010101011111000010100011110001011011\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"83°39'54.324''N 30°37'40.584''W\" {\n        return Err(test);\n    }\n    test = (1, 2);\n    let url = &format!(\n        \"{}/21/coords/0010000111110000011111100000111010111100000100111101111011000101\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"18°54'55.944''S 47°31'17.976''E\" {\n        return Err(test);\n    }\n    test = (1, 3);\n    let url = &format!(\n        \"{}/21/coords/0101110100010001110001111100100111000111100010111100111101110001\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"51°26'57.804''N 99°28'33.204''E\" {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    test = (2, 1);\n    let url = &format!(\n        \"{}/21/country/0010000111110000011111100000111010111100000100111101111011000101\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"Madagascar\" {\n        return Err(test);\n    }\n    test = (2, 2);\n    let url = &format!(\n        \"{}/21/country/0011001000100010100010110001110100000111000010111000100000010101\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"Brunei\" {\n        return Err(test);\n    }\n    test = (2, 3);\n    let url = &format!(\n        \"{}/21/country/1001010011001110010011100110001000100110100111001001000100110001\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"Brazil\" {\n        return Err(test);\n    }\n    test = (2, 4);\n    let url = &format!(\n        \"{}/21/country/0101110100010001110001111100100111000111100010111100111101110001\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"Mongolia\" {\n        return Err(test);\n    }\n    test = (2, 5);\n    let url = &format!(\n        \"{}/21/country/0011100111101001000010001100001100111111101001100110000010101011\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"Nepal\" {\n        return Err(test);\n    }\n    test = (2, 6);\n    let url = &format!(\n        \"{}/21/country/0100011111000110101110101100011001101001111111001011000011101111\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"Belgium\" {\n        return Err(test);\n    }\n    test = (2, 7);\n    let url = &format!(\n        \"{}/21/country/0100111100110010101001010001010100100110110000100100101011011111\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    let text = res.text().await.map_err(|_| test)?;\n    if text != \"Iceland\" {\n        return Err(test);\n    }\n    // TASK 2 DONE\n    tx.send((false, 300).into()).await.unwrap();\n\n    Ok(())\n}\n\nstruct TextTester {\n    client: reqwest::Client,\n    url: String,\n}\n\nimpl TextTester {\n    fn new(url: String) -> Self {\n        Self {\n            client: new_client(),\n            url,\n        }\n    }\n    async fn test(&self, test: TaskTest, i: &str, code: StatusCode, o: &str) -> ValidateResult {\n        let res = self\n            .client\n            .post(&self.url)\n            .body(i.to_owned())\n            .send()\n            .await\n            .map_err(|_| test)?;\n        if res.status() != code {\n            return Err(test);\n        }\n        let text = res.text().await.map_err(|_| test)?;\n        if text != o {\n            return Err(test);\n        }\n        Ok(())\n    }\n}\n\nasync fn validate_22(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    // TASK 1\n    let t = TextTester::new(format!(\"{}/22/integers\", base_url));\n    t.test(\n        (1, 1),\n        \"\\\n1\n\",\n        StatusCode::OK,\n        \"🎁\",\n    )\n    .await?;\n    t.test(\n        (1, 2),\n        \"\\\n1\n1\n2\n2\n3\n3\n4\n\",\n        StatusCode::OK,\n        \"🎁\".repeat(4).as_str(),\n    )\n    .await?;\n    t.test(\n        (1, 3),\n        \"\\\n1\n3\n1\n2\n4\n2\n3\n\",\n        StatusCode::OK,\n        \"🎁\".repeat(4).as_str(),\n    )\n    .await?;\n    t.test(\n        (1, 4),\n        \"\\\n11111111111111111111\n555555555555555\n33333333\n68\n555555555555555\n33333333\n4444\n11111111111111111111\n4444\n\",\n        StatusCode::OK,\n        \"🎁\".repeat(68).as_str(),\n    )\n    .await?;\n    t.test(\n        (1, 5),\n        include_str!(\"../assets/numbers.txt\"),\n        StatusCode::OK,\n        \"🎁\".repeat(120003).as_str(),\n    )\n    .await?;\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2\n    let t = TextTester::new(format!(\"{}/22/rocket\", base_url));\n    t.test(\n        (2, 1),\n        \"\\\n2\n0 0 0\n0 0 1\n1\n0 1\n\",\n        StatusCode::OK,\n        \"1 1.000\",\n    )\n    .await?;\n    t.test(\n        (2, 2),\n        \"\\\n5\n0 1 0\n-2 2 3\n3 -3 -5\n1 1 5\n4 3 5\n4\n0 1\n2 4\n3 4\n1 2\n\",\n        StatusCode::OK,\n        \"3 26.123\",\n    )\n    .await?;\n    t.test(\n        (2, 3),\n        \"\\\n5\n0 1 0\n-2 2 3\n3 -3 -5\n1 1 5\n4 3 5\n5\n0 1\n1 3\n3 4\n0 2\n2 4\n\",\n        StatusCode::OK,\n        \"2 18.776\",\n    )\n    .await?;\n    t.test(\n        (2, 4),\n        \"\\\n5\n0 1 0\n-2 2 3\n3 -3 -5\n1 1 5\n4 3 5\n1\n0 4\n\",\n        StatusCode::OK,\n        \"1 6.708\",\n    )\n    .await?;\n    t.test(\n        (2, 5),\n        \"\\\n5\n0 1 0\n-2 2 3\n3 -3 -5\n1 1 5\n4 3 5\n5\n0 4\n0 1\n1 2\n2 0\n0 3\n\",\n        StatusCode::OK,\n        \"1 6.708\",\n    )\n    .await?;\n    t.test(\n        (2, 6),\n        \"\\\n21\n570 -435 923\n672 -762 -218\n707 16 640\n311 902 47\n-963 -399 -773\n788 532 -704\n703 475 -145\n-303 -394 -369\n699 -640 952\n-341 -221 743\n740 -146 544\n-424 655 179\n-630 161 690\n789 -848 -517\n-14 -893 551\n-48 815 962\n528 552 -96\n337 983 165\n-565 459 -90\n81 -476 301\n-685 -319 698\n24\n0 2\n2 4\n4 6\n6 10\n10 17\n17 20\n20 18\n18 11\n11 7\n7 5\n5 3\n3 0\n0 1\n1 12\n12 13\n13 19\n19 20\n20 16\n16 14\n14 15\n15 9\n9 8\n8 6\n11 16\n\",\n        StatusCode::OK,\n        \"5 7167.055\",\n    )\n    .await?;\n    t.test(\n        (2, 7),\n        \"\\\n75\n570 -435 923\n672 -762 -218\n707 16 640\n311 902 47\n-963 -399 -773\n788 532 -704\n703 475 -145\n-303 -394 -369\n699 -640 952\n-341 -221 743\n740 -146 544\n-424 655 179\n-630 161 690\n789 -848 -517\n-14 -893 551\n-48 815 962\n528 552 -96\n337 983 165\n-565 459 -90\n81 -476 301\n-685 -319 698\n-264 96 361\n796 94 402\n983 763 -953\n711 -221 -866\n-578 128 -178\n-464 117 304\n426 -433 -961\n-626 -779 -596\n-117 -88 349\n880 -286 -527\n941 -451 177\n627 -832 286\n593 370 -436\n609 431 -681\n-549 -690 447\n957 849 -162\n189 290 -485\n-914 -447 -61\n367 731 825\n-177 432 -675\n-926 -811 198\n-379 345 831\n-669 -134 804\n956 380 -427\n213 -954 -357\n-806 -663 583\n7 -460 374\n-384 -797 -404\n-793 -333 196\n402 175 329\n703 9 -926\n599 559 -844\n64 343 885\n-865 -49 -373\n-728 880 -164\n830 528 -394\n931 -782 -365\n661 -528 931\n-764 34 -289\n442 298 983\n-899 382 -967\n662 361 -85\n775 98 -519\n202 335 60\n474 823 -677\n-708 41 127\n-974 718 81\n443 -526 -945\n-279 778 -271\n896 26 -902\n-977 -233 837\n151 -22 -454\n824 -472 471\n702 871 -244\n73\n0 1\n0 2\n0 4\n0 5\n0 7\n1 10\n10 11\n11 25\n12 13\n13 27\n14 29\n15 30\n16 17\n17 35\n18 36\n19 6\n2 3\n20 22\n21 19\n22 40\n23 60\n24 42\n25 26\n26 43\n27 28\n28 45\n29 47\n3 12\n30 31\n31 68\n32 50\n34 16\n35 52\n36 54\n37 38\n38 57\n39 21\n4 14\n40 59\n41 23\n42 61\n43 44\n44 63\n45 64\n46 65\n47 46\n49 32\n49 68\n5 15\n50 33\n51 34\n52 70\n54 73\n55 37\n56 74\n57 56\n58 39\n59 58\n6 18\n63 62\n65 66\n66 67\n67 48\n69 51\n7 20\n70 71\n71 72\n72 53\n73 55\n8 1\n8 9\n9 23\n9 24\n\",\n        StatusCode::OK,\n        \"20 27826.439\",\n    )\n    .await?;\n    t.test(\n        (2, 8),\n        \"\\\n70\n788 532 -704\n703 475 -145\n-303 -394 -369\n699 -640 952\n-341 -221 743\n740 -146 544\n-424 655 179\n-630 161 690\n789 -848 -517\n-14 -893 551\n-48 815 962\n528 552 -96\n337 983 165\n-565 459 -90\n81 -476 301\n-685 -319 698\n-264 96 361\n796 94 402\n983 763 -953\n711 -221 -866\n-578 128 -178\n-464 117 304\n426 -433 -961\n-626 -779 -596\n-117 -88 349\n880 -286 -527\n941 -451 177\n627 -832 286\n593 370 -436\n609 431 -681\n-549 -690 447\n957 849 -162\n189 290 -485\n-914 -447 -61\n367 731 825\n-177 432 -675\n-926 -811 198\n-379 345 831\n-669 -134 804\n956 380 -427\n213 -954 -357\n-806 -663 583\n7 -460 374\n-384 -797 -404\n-793 -333 196\n402 175 329\n703 9 -926\n599 559 -844\n64 343 885\n-865 -49 -373\n-728 880 -164\n830 528 -394\n931 -782 -365\n661 -528 931\n-764 34 -289\n442 298 983\n-899 382 -967\n662 361 -85\n775 98 -519\n202 335 60\n474 823 -677\n-708 41 127\n-974 718 81\n443 -526 -945\n-279 778 -271\n896 26 -902\n-977 -233 837\n151 -22 -454\n824 -472 471\n702 871 -244\n70\n0 10\n0 2\n0 3\n1 22\n10 21\n11 1\n12 11\n13 27\n14 15\n15 4\n16 31\n17 33\n18 19\n19 7\n2 12\n20 53\n21 37\n22 39\n23 40\n24 23\n25 24\n26 25\n27 26\n27 6\n28 14\n29 30\n3 13\n30 46\n30 69\n31 47\n33 18\n33 48\n34 33\n35 34\n37 20\n38 55\n39 56\n39 57\n4 16\n40 59\n41 60\n42 62\n43 63\n44 28\n44 65\n45 29\n46 68\n47 32\n48 49\n49 50\n5 17\n50 51\n51 35\n53 36\n55 54\n56 38\n57 58\n59 41\n6 5\n60 61\n61 42\n62 43\n63 64\n64 44\n65 45\n67 66\n68 67\n7 9\n8 0\n9 8\n\",\n        StatusCode::OK,\n        \"23 34029.320\",\n    )\n    .await?;\n    // TASK 2 DONE\n    tx.send((false, 600).into()).await.unwrap();\n\n    Ok(())\n}\n"
  },
  {
    "path": "cch23/validator/src/main.rs",
    "content": "use cch23_validator::{\n    args::ValidatorArgs,\n    run,\n    shuttlings::{SubmissionState, SubmissionUpdate},\n    SUPPORTED_CHALLENGES,\n};\nuse clap::{CommandFactory, FromArgMatches};\nuse uuid::Uuid;\n\n#[tokio::main]\nasync fn main() {\n    let c = ValidatorArgs::command();\n    let m = c\n        .mut_arg(\"numbers\", |a| a.allow_negative_numbers(true))\n        .get_matches();\n    let args = ValidatorArgs::from_arg_matches(&m).unwrap();\n\n    println!(\n        \"\\\n⋆｡°✩ ⋆⁺｡˚⋆˙‧₊✩₊‧˙⋆˚｡⁺⋆ ✩°｡⋆°✩ ⋆⁺｡˚⋆˙‧₊✩₊‧˙⋆˚｡⁺⋆ ✩°｡⋆\n.・゜゜・・゜゜・．                .・゜゜・・゜゜・．\n｡･ﾟﾟ･          SHUTTLE CCH23 VALIDATOR          ･ﾟﾟ･｡\n.・゜゜・・゜゜・．                .・゜゜・・゜゜・．\n⋆｡°✩ ⋆⁺｡˚⋆˙‧₊✩₊‧˙⋆˚｡⁺⋆ ✩°｡⋆°✩ ⋆⁺｡˚⋆˙‧₊✩₊‧˙⋆˚｡⁺⋆ ✩°｡⋆\n\"\n    );\n\n    let (tx, mut rx) = tokio::sync::mpsc::channel::<SubmissionUpdate>(32);\n\n    let get_printer = |summary: bool| async move {\n        let mut tasks_completed = 0;\n        let mut days_completed = 0;\n        let mut bonus = 0;\n        while let Some(s) = rx.recv().await {\n            match s {\n                SubmissionUpdate::State(SubmissionState::Done) => {\n                    tasks_completed = 0;\n                }\n                SubmissionUpdate::TaskCompleted(completed, bp) => {\n                    tasks_completed += 1;\n                    println!(\"Task {}: completed 🎉\", tasks_completed);\n                    if bp > 0 {\n                        bonus += bp;\n                        println!(\"Bonus points: {} ✨\", bp);\n                    }\n                    if completed {\n                        days_completed += 1;\n                        println!(\"Core tasks completed ✅\");\n                    }\n                }\n                SubmissionUpdate::LogLine(line) => {\n                    println!(\"{line}\");\n                }\n                _ => (),\n            }\n        }\n        if summary {\n            println!();\n            println!();\n            println!(\n                \"Completed {} challenges and gathered a total of {} bonus points.\",\n                days_completed, bonus\n            );\n        }\n    };\n\n    let nums = if !args.challenge.numbers.is_empty() {\n        args.challenge.numbers.as_ref()\n    } else {\n        SUPPORTED_CHALLENGES\n    };\n\n    let printer = tokio::task::spawn(get_printer(nums.len() > 1));\n\n    for num in nums {\n        println!();\n        println!(\"Validating Challenge {num}...\");\n        println!();\n        run(\n            args.url.trim_end_matches('/').to_owned(),\n            Uuid::nil(),\n            *num,\n            tx.clone(),\n        )\n        .await;\n        // give the receiver time to print everything from the previous challenge\n        tokio::time::sleep(tokio::time::Duration::from_millis(10)).await;\n    }\n\n    drop(tx);\n    printer.await.unwrap();\n}\n"
  },
  {
    "path": "cch24/README.md",
    "content": "# Shuttle's Christmas Code Hunt 2024\n\nThe Shuttle Christmas Code Hunt is a set of Rust challenges that were released throughout December 2024.\n\n## Prerequistites\n\nIf you haven't yet, [install Rust](https://rustup.rs/) and [install Shuttle CLI](https://docs.shuttle.dev/getting-started/installation).\n\nYou can check the versions with `cargo -V` and `shuttle -V`.\n\n## How to get started\n\nOpen [Challenge -1](challenges/-1.md) for a guide to get started with using Shuttle, and follow along the journey to build a web server for solving all of Santa's problems!\n\nYou can also read the challenges on the [Shuttle Console](https://console.shuttle.dev/).\n\n## How to validate my solutions\n\nLocally, you can use the [validator](validator/README.md).\n\nYou can also deploy your solution to Shuttle and validate it there. Go to the challenge pages on [Shuttle Console](https://console.shuttle.dev/) for instructions.\n"
  },
  {
    "path": "cch24/challenges/-1.md",
    "content": "# 🎄 Day -1: We are so back!!\n\nWelcome to Shuttle's Christmas Code Hunt 2024!\n\nSanta is excited beyond belief to have you back this year to help him.\n\nThis challenge is a warmup challenge made to familiarize you with solving a Shuttlings code challenge and deploying your CCH24 project to Shuttle.\n\n![cover](../validator/assets/-1.png)\n\n---\n\n## ⭐ Getting started\n\nFirst, let's get set up for working with Rust and Shuttle!\n\nIf you need any help with the steps below, feel free to ask for help in the CCH channel in\n[Discord](https://discord.gg/shuttle) or by using the Support Chat in the bottom right corner.\n\nTo install Rust and the `cargo` command, visit [rustup](https://rustup.rs/) and follow the instructions.\nYou can check your installed version with `cargo -V` (1.78 or above is required).\n\nTo install the Shuttle CLI, use one of the options in the [installation docs](https://docs.shuttle.dev/getting-started/installation).\nYou can check your installed version with `shuttle -V` (0.48.0 or above is required).\n\nNavigate to a directory where you want to create your CCH24 solution, and use the command below to initialize a project.\nWhen selecting a template, choose a Hello World template in one of the web frameworks.\nAxum, Actix Web, and Rocket are the ones we recommend if you don't know which one to pick.\n\n```bash\nshuttle init --name shuttlings-cch24\n```\n\nThen you can `cd` into the generated directory and open your code editor of choice.\n\nNow you should be all set for starting Task 1!\n\n---\n\n## 🔔 Challenge layout\n\nEvery challenge is split into one or more *Core Tasks* (marked with ⭐) and one or more *Bonus Tasks* (marked with 🎁).\nTo **complete** a challenge, you only need to pass the tests for the *Core Tasks* ⭐.\n*Bonus Tasks* 🎁 are harder to complete but give even more points. Their tests contain more edge cases and curveballs.\n\n---\n\n## ⭐ Task 1: Hello, bird!\n\n*Santa has grown tired of the \"Hello, world!\" phrase. Everyone uses it all the time!*\n*Time to switch things up and say... \"Hello, bird!\"*\n*Why? I hope we will find out.*\n\nThe starter template from the init command you ran earlier should have a root endpoint `/` responding to GET requests with a \"Hello, world!\" string and a `200 OK` status code.\nChange the response string so that it responds with \"Hello, bird!\" instead.\n\n### 🔔 Tips\n\nIn your project directory, you can use `shuttle run` to test your Shuttle app locally (see below).\n\n**More reading:**\n\n- [Shuttle docs: Quick start](https://docs.shuttle.dev/getting-started/quick-start)\n- [Shuttle docs: Local run](https://docs.shuttle.dev/getting-started/local-run)\n- [Shuttle docs: Axum](https://docs.shuttle.dev/examples/axum)\n- [Shuttle docs: Actix Web](https://docs.shuttle.dev/examples/actix)\n- [Shuttle docs: Rocket](https://docs.shuttle.dev/examples/rocket)\n- [Shuttle docs: Tower, Warp, Salvo, Poem, Thruster, Tide](https://docs.shuttle.dev/examples/other)\n- [MDN web docs: 200 OK](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/200)\n\n### 💠 Example\n\nMany tasks throughout CCH24 can easily be tested with a `curl` command.\nYou can use it when testing locally, and then verify that the deployed app works.\n\n```bash\n# While the app is running with `shuttle run`\ncurl -I -X GET http://localhost:8000/\n\nHTTP/1.1 200 OK\n...\n```\n\n```bash\ncurl http://localhost:8000/\n\nHello, bird!\n```\n\nIf everything looks good now, and you want to get some sweet ✨*imaginary points*✨ already, scroll to the bottom of this page to try validating with the local validator and on Shuttle!\n\n---\n\n## 🎁 Task 2: Seek and you will find (0 bonus points)\n\n*Santa thinks the North Pole has been awfully quiet since last year.*\n*\"Time to introduce some cheerful tunes! Let's call it ✨Vibe of the Day✨.*\n*Now, where did I put that link to the first song?\"*\n\nFor this bonus task, add an endpoint on `/-1/seek` that responds to GET requests with the `302 Found` redirection response.\n\nFor a 302 response to be valid, it needs to have the `Location` header set to where the requested resource can be found.\nThe Location header value we want today is (as requested by Santa): `https://www.youtube.com/watch?v=9Gc4QTqslN4`\n\n### 🔔 Tips\n\n- [Axum Responses](https://docs.rs/axum/latest/axum/response/index.html)\n- [Actix Web Responses](https://actix.rs/docs/response)\n- [Rocket Responses](https://rocket.rs/v0.5/guide/responses/)\n- [MDN web docs: 302 Found](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302)\n\n### 💠 Example\n\n```bash\ncurl -I -X GET http://localhost:8000/-1/seek\n\nHTTP/1.1 302 Found\nlocation: https://www.youtube.com/watch?v=9Gc4QTqslN4\n...\n```\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch24/challenges/12.md",
    "content": "# 🎄 Day 12: The *Cookies and Milk* Factory (part 2)\n\n*As Santa's additional factories thrived globally, his innovative 4x4 packing strategy became an instant holiday market hit. Each \"Santa's Cookies and Milk\" pack hid a delightful surprise—a playful mix of cookies and milk cartons arranged in varying patterns.*\n\n✨[*Vibe of the Day*](https://www.youtube.com/watch?v=dulMq9oddOs)✨\n\n![cover](../validator/assets/12.png)\n\n---\n\n## ⭐ Task 1: It's game time!\n\nEach *Santa's Cookies and Milk* pack should contain a \"random\" arrangement of cookies and milk cartons in a 4x4 grid, totalling 16 items.\nTo their great joy, the elves came up with an awesome idea that will make their day-to-day work more entertaining: Playing *Connect 4*! (but with a smaller board)\n\n1. Implement a data model for representing the 4x4 grid of tiles that can be either Empty, Cookie, or Milk.\n2. Add a string representation for the current state of the board, a 5x6 rectangle of emojis, using ⬛🍪🥛 for tiles and ⬜ for walls (see below). The string should have a trailing `\\n` on the last line.\n3. Add a constructor for an empty board. Add an empty board to the handler state.\n4. Add a GET `/12/board` endpoint that returns the current state of the board (`200 OK`).\n5. Add a POST `/12/reset` endpoint that resets the board to an empty state, and then returns it (`200 OK`).\n\n### 🔔 Tips\n\n- Use a locking primitive like [Mutex](https://docs.rs/tokio/latest/tokio/sync/struct.Mutex.html) or [RwLock](https://docs.rs/tokio/latest/tokio/sync/struct.RwLock.html) to read and write to the board state in different handlers.\n\n### 💠 Examples\n\n```bash\ncurl http://localhost:8000/12/board\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n```\n\n```bash\ncurl -X POST http://localhost:8000/12/reset\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n```\n\n---\n\n## ⭐ Task 2: \"I'm gonna do what's called a pro-gamer move\"\n\nLet's add the gameplay!\n\nAdd a function for detecting if the game has ended with a winner:\n\n- If 4 of the same item covers a full row or column or diagonal, that team wins.\n- If all 16 slots are filled without any 4-in-a-row, there is \"No winner.\"\n- Otherwise, the game has not ended yet.\n\nIf the game has ended, add the winner status as the last line in the string representation of the board (the last line should still have a trailing newline).\nTwo examples of boards with their winners shown:\n\n```text\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n```\n\n```text\n⬜🥛🍪🥛🍪⬜\n⬜🍪🥛🍪🥛⬜\n⬜🍪🥛🍪🥛⬜\n⬜🍪🥛🍪🥛⬜\n⬜⬜⬜⬜⬜⬜\nNo winner.\n```\n\nNow, let's add the POST endpoint `/12/place/{team}/{column}` for placing items:\n\n- `{team}` is either `cookie` or `milk`. `{column}` is a number between 1 and 4. If either is invalid, return `400 Bad Request` (response body does not matter).\n- If the column requested is already full, return the board with a `503 Service Unavailable` status.\n- If the game is over (has a winner or no winner), return the board with a `503 Service Unavailable` status.\n- The endpoint should place the incoming item by letting it fall down the column and land in the lowest empty tile. After the new item has been placed, return the board with a `200 OK` status.\n\nSince the production tempo in the factory needs to remain high, the elves don't have time to make sure they are taking turns during gameplay.\nThey simplify the rules and say that both teams can always place items as long as the game has not ended.\nThis also helps ensure the contents in each pack remains \"random\".\n\nIf all of that is done, we should have a working *Connect 4*!\n\n### 💠 Examples\n\n```bash\ncurl -X POST http://localhost:8000/12/reset\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\ncurl -X POST http://localhost:8000/12/place/cookie/1\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\ncurl -X POST http://localhost:8000/12/place/cookie/1\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\ncurl -X POST http://localhost:8000/12/place/cookie/1\n⬜⬛⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\ncurl -X POST http://localhost:8000/12/place/cookie/1\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n\ncurl -v -X POST http://localhost:8000/12/place/cookie/1\n...\n< HTTP/1.1 503 Service Unavailable\n...\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n\ncurl -v -X POST http://localhost:8000/12/place/milk/2\n...\n< HTTP/1.1 503 Service Unavailable\n...\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n\ncurl http://localhost:8000/12/board\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n```\n\n```bash\ncurl -X POST http://localhost:8000/12/reset\ncurl -X POST http://localhost:8000/12/place/cookie/1\ncurl -X POST http://localhost:8000/12/place/milk/2\ncurl -X POST http://localhost:8000/12/place/cookie/2\ncurl -X POST http://localhost:8000/12/place/milk/3\ncurl -X POST http://localhost:8000/12/place/milk/3\ncurl -X POST http://localhost:8000/12/place/cookie/3\ncurl -X POST http://localhost:8000/12/place/milk/4\ncurl -X POST http://localhost:8000/12/place/milk/4\ncurl -X POST http://localhost:8000/12/place/milk/4\n# The output from the above calls is hidden for brevity\n\ncurl -X POST http://localhost:8000/12/place/cookie/4\n⬜⬛⬛⬛🍪⬜\n⬜⬛⬛🍪🥛⬜\n⬜⬛🍪🥛🥛⬜\n⬜🍪🥛🥛🥛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n```\n\n---\n\n## 🎁 Task 3: Not very random randomness (75 bonus points)\n\nSanta thinks the \"random\" placement in the *Connect 4* game is nice, but not random enough!\nHe decides that there should also be a way to generate \"truly random\" arrangements of items, and lets you get the job done!\n\nFor internal testing of the randomness, Santa wants to be able to retry the same random sequence of packs from the RNG. To achieve this, we will use a seeded RNG with a hardcoded seed.\n\n1. Add the [rand](https://crates.io/crates/rand) crate as a dependency.\n2. Add a method in your *Connect 4* board data model for creating a new board filled with random items. The method should take a `&mut rand::rngs::StdRng` and call `.gen::<bool>()` (`use rand::Rng;`) for each tile, from the top left, row by row. If the bool is true, place a Cookie, otherwise place Milk.\n3. Add a seeded RNG `rand::rngs::StdRng::seed_from_u64(2024)` (`use rand::SeedableRng;`) with a locking primitive to the handler state.\n4. Modify the `/12/reset` endpoint from Task 1 so that it also resets the RNG to a new and seeded one (same as shown above).\n5. Add a GET `/12/random-board` that generates a random board and returns its string representation (including its winner).\n\nIf this works correctly, calls to the random-board endpoint should produce the same sequence of boards after every reset. The first two are shown below.\n\n(Note: Randomly filled boards might have 4-in-a-row of both Cookie and Milk. Such boards are invalid in gameplay. Therefore, the displayed winner in this task's output is ignored by the validator.)\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/12/reset\n...\n\ncurl http://localhost:8000/12/random-board\n⬜🍪🍪🍪🍪⬜\n⬜🥛🍪🍪🥛⬜\n⬜🥛🥛🥛🥛⬜\n⬜🍪🥛🍪🥛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n\ncurl http://localhost:8000/12/random-board\n⬜🍪🥛🍪🍪⬜\n⬜🥛🍪🥛🍪⬜\n⬜🥛🍪🍪🍪⬜\n⬜🍪🥛🥛🥛⬜\n⬜⬜⬜⬜⬜⬜\nNo winner.\n```\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch24/challenges/16.md",
    "content": "# 🎄 Day 16: A mystery gift wrapped in a cookie\n\n*In the heart of the North Pole, Santa was renowned not only for his joyful spirit but also as the genius behind the world's most innovative gift wraps.*\n\n*Santa turned to a clandestine supplier, acquiring hair-thin transparent plastic wraps unseen by the naked eye. This advanced material, integrated with Santa's digital signature, encased each genuine gift, verifying its authenticity. Upon unwrapping, the paper emitted a warm glow and a personal message from Santa himself.*\n\n*This pioneering approach shielded against counterfeit gifts, securing Santa's title as the world's best gift wrap manufacturer. Through his diligent R&D, Santa ensured each unwrapping was a unique, magical experience.*\n\n✨[*Vibe of the Day*](https://www.youtube.com/watch?v=hC8CH0Z3L54)✨\n\n![cover](../validator/assets/16.png)\n\n---\n\n## ⭐ Task 1: Client-side distributed database?\n\nTo be able to detect counterfeit Christmas gifts, Santa wraps them in a hair-thin transparent plastic wrap from a secret supplier.\nThe wrap allows Santa to digitally sign the presents, so that he later can verify their authenticity.\n\nMake a POST endpoint `/16/wrap` that takes an arbitrary JSON request body, and responds with `200 OK` and an appropriate `Set-Cookie` header for setting the client's `gift` cookie to a valid JSON Web Token (JWT) that contains the JSON in some way. You decide what type of encryption to use.\n\nThe validator client will then make a second request, a GET to `/16/unwrap`.\nIf the first response was correctly made, the second request will have the `Cookie` header set accordingly.\nThis endpoint should decode the JWT in the cookie, and respond with the same JSON object that was sent when creating it.\nIf the header or `gift` cookie is missing, respond with `400 Bad Request`.\n\n### 🔔 Tips\n\nAll shortcuts are allowed, as long as the validator is happy.\n\n- [MDN Web Docs: Set-Cookie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie)\n- [jsonwebtoken](https://crates.io/crates/jsonwebtoken)\n- [jwt.io](https://jwt.io/)\n\n### 💠 Example\n\nIn this example, the string `(JWT)` symbolises the actual JWT that your first endpoint creates.\nCopy it from the first response to make a valid second request.\n\n```bash\ncurl -v -H \"Content-Type: application/json\" http://localhost:8000/16/wrap -d '{\"cookie is delicious?\": true}'\n...\n< HTTP/1.1 200 OK\n< set-cookie: gift=(JWT)\n...\n\ncurl -H \"Cookie: gift=(JWT)\" http://localhost:8000/16/unwrap\n{\"cookie is delicious?\":true}\n```\n\n---\n\n## 🎁 Task 2: Present Encryption Magic (200 bonus points)\n\nAfter looking in the basement of Santa's gift wrapping facility, you find some dusty old wrapped gifts.\nWith a confused look, you ask Santa where they are from.\n\n\"Those must be left-over gifts from last year,\" he laughs, \"But be careful, last year we found multiple counterfeits. Let's check the authenticity of the gift wraps to be sure.\"\n\nImplement a POST endpoint `/16/decode` that takes a JWT (string) as the request body:\n\n- The endpoint should return the decoded *claims* JSON object if the JWT is valid and Santa signed it.\n- If the header is invalid, return `400 Bad Request`.\n- If the signature is invalid, return `401 Unauthorized`.\n- If the JWT is invalid for any other reason, return `400 Bad Request`.\n\nSanta bumps your shoulder and says \"You will also need this:\"\n\nHe hands you an envelope with a [note](../validator/assets/day16_santa_public_key.pem).\n\nAs you look up from the note in confusion, Santa has magically disappeared.\nLooks like the instructions are a bit unclear, but there's work to do, so you decide to try anyways.\n\n### 🔔 Tips\n\n- Debug the requests and JWTs sent by the validator to figure out what is required next.\n- Santa has a reputation of being lazy when following standards and best practices, and you might need to adapt.\n\n### 💠 Examples\n\n```bash\ncurl http://localhost:8000/16/decode -d \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJyZWluZGVlclNuYWNrIjoiY2Fycm90cyIsInNhbnRhSGF0Q29sb3IiOiJyZWQiLCJzbm93R2xvYmVDb2xsZWN0aW9uIjo1LCJzdG9ja2luZ1N0dWZmZXJzIjpbInlvLXlvIiwiY2FuZHkiLCJrZXljaGFpbiJdLCJ0cmVlSGVpZ2h0Ijo3fQ.EoWSlwZIMHdtd96U_FkfQ9SkbzskSvgEaRpsUeZQFJixDW57vZud_k-MK1R1LEGoJRPGttJvG_5ewdK9O46OuaGW4DHIOWIFLxSYFTJBdFMVmAWC6snqartAFr2U-LWxTwJ09WNpPBcL67YCx4HQsoGZ2mxRVNIKxR7IEfkZDhmpDkiAUbtKyn0H1EVERP1gdbzHUGpLd7wiuzkJnjenBgLPifUevxGPgj535cp8I6EeE4gLdMEm3lbUW4wX_GG5t6_fDAF4URfiAOkSbiIW6lKcSGD9MBVEGps88lA2REBEjT4c7XHw4Tbxci2-knuJm90zIA9KX92t96tF3VFKEA\"\n\n{\"reindeerSnack\":\"carrots\",\"santaHatColor\":\"red\",\"snowGlobeCollection\":5,\"stockingStuffers\":[\"yo-yo\",\"candy\",\"keychain\"],\"treeHeight\":7}\n```\n\n```bash\ncurl -v http://localhost:8000/16/decode -d \"eyJ0eXAiOiJKV1QiLCJhbGci0iJSUzI1NiJ9.eyJyZWluZGVlclNuYWNrIjoiY2Fycm90cyIsInNhbnRhSGF0Q29sb3IiOiJyZWQiLCJzbm93R2xvYmVDb2xsZWN0aW9uIjo1LCJzdG9ja2luZ1N0dWZmZXJzIjpbInlvLXlvIiwiY2FuZHkiLCJrZXljaGFpbiJdLCJ0cmVlSGVpZ2h0Ijo3fQ.EoWSlwZIMHdtd96U_FkfQ9SkbzskSvgEaRpsUeZQFJixDW57vZud_k-MK1R1LEGoJRPGttJvG_5ewdK9O46OuaGW4DHIOWIFLxSYFTJBdFMVmAWC6snqartAFr2U-LWxTwJ09WNpPBcL67YCx4HQsoGZ2mxRVNIKxR7IEfkZDhmpDkiAUbtKyn0H1EVERP1gdbzHUGpLd7wiuzkJnjenBgLPifUevxGPgj535cp8I6EeE4gLdMEm3lbUW4wX_GG5t6_fDAF4URfiAOkSbiIW6lKcSGD9MBVEGps88lA2REBEjT4c7XHw4Tbxci2-knuJm90zIA9KX92t96tF3VFKEA\"\n\n...\n< HTTP/1.1 400 Bad Request\n...\n```\n\n```bash\ncurl -v http://localhost:8000/16/decode -d \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJnaWZ0cyI6WyJDb2FsIl19.DaVXV_czINRO1Cvhw33YSPSpV7_TYTqp7gIB_XiVl5fh3K9zkmDItBFLxJHyb7TRw_CGrAYwfinxn6_Dn9MMhp8d3tc-UnRskOxNHpqwU9EcbDtn31uHStT5sLfzdK0fdAc1XUJnr-9dbiGiYARO9YK7HAijdR8bCRMtvMUgIHsumWHO5BEE4CCeVgypzkebsoaev495OE0VNCfn1rSbTKR12xiIFoPCZALV9_slqoZvO59K0x8DSppx7uHApGjXvS6JmyjVgMJNuJoPrIYzc0nytVCa5uLjYIadS2inw7Sty1Jj-sLi8AgtYCXcpyB59MUXNP5xze_Sat8hmQ_NzQ\"\n\n...\n< HTTP/1.1 401 Unauthorized\n...\n```\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch24/challenges/19.md",
    "content": "# 🎄 Day 19: Santa's Quote Book\n\n*Santa Claus, always inspired by the great thinkers and everyday heroes, started a quote book to capture the wisdom he admires. This collection of meaningful sayings guides his journey of spreading joy and kindness. By reflecting on these quotes, Santa fuels his own spirit and inspires his elves, ensuring the magic of Christmas is always heartfelt and thoughtful.*\n\n✨[*Vibe of the Day*](https://www.youtube.com/watch?v=RqjXn2NflqU)✨\n\n![cover](../validator/assets/19.png)\n\n---\n\n## ⭐ Task 1: Candlelight Reveals Unread Delights\n\nSanta is building an API for his Quote Book and wrote to you that it should be a classic *CRUD*.\nHowever, you notice a weird detail: \"*CRUD: Cite Remove Undo Draft*\"...\nSanta really loves breaking standards for the sake of it, doesn't he?\n\nUse [shuttle-shared-db](https://docs.shuttle.dev/resources/shuttle-shared-db) to get a Postgres DB to store the quotes.\nHere's an example SQL schema that you can use for this challenge:\n\n```sql\nCREATE TABLE IF NOT EXISTS quotes (\n    id UUID PRIMARY KEY,\n    author TEXT NOT NULL,\n    quote TEXT NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,\n    version INT NOT NULL DEFAULT 1\n);\n```\n\nThe endpoints required are as follows.\nIf nothing else is specified, the response code is `200 OK`.\nCheck the example below for the JSON request and response schemas.\n\n- POST `/19/reset`: Clear the `quotes` table in the database.\n- GET `/19/cite/{id}`: Respond with the quote of the given ID. Use `404 Not Found` if a quote with the ID does not exist.\n- DELETE `/19/remove/{id}`: Delete and respond with the quote of the given ID. Same `404` logic as above.\n- PUT `/19/undo/{id}`: Update the author and text, and increment the version number of the quote of the given ID. Respond with the updated quote. Same `404` logic as above.\n- POST `/19/draft`: Add a quote with a random UUID v4. Respond with the quote and `201 Created`.\n\n### 🔔 Tips\n\n- [shuttle-shared-db](https://docs.shuttle.dev/resources/shuttle-shared-db)\n- [sqlx](https://docs.rs/sqlx/latest/sqlx/)\n- [uuid](https://docs.rs/uuid/latest/uuid/)\n- [chrono](https://docs.rs/chrono/latest/chrono/)\n- Activating the `uuid` and `chrono` features on `sqlx` will make your life easier.\n\n### 💠 Example\n\nThe value of `created_at` should be a valid UTC timestamp, the specific value does not matter.\nNotice how `version` changes to 2, and `created_at` is unchanged.\n\n```bash\ncurl -X POST -H \"Content-Type: application/json\" http://localhost:8000/19/draft -d '{\"author\":\"Santa\",\"quote\":\"Ho ho ho!\"}'\n\n{\"id\":\"3dd7e875-3c17-470b-986a-e39377e55e59\",\"author\":\"Santa\",\"quote\":\"Ho ho ho!\",\"created_at\":\"2024-12-19T12:01:09.709025Z\",\"version\":1}\n\n# Use the correct UUID from the draft response in the undo request\ncurl -X PUT -H \"Content-Type: application/json\" http://localhost:8000/19/undo/3dd7e875-3c17-470b-986a-e39377e55e59 -d '{\"author\":\"Santa\",\"quote\":\"I changed my mind...\"}'\n\n{\"id\":\"3dd7e875-3c17-470b-986a-e39377e55e59\",\"author\":\"Santa\",\"quote\":\"I changed my mind...\",\"created_at\":\"2024-12-19T12:01:09.709025Z\",\"version\":2}\n```\n\n---\n\n## 🎁 Task 2: The Paginator has entered the cabin (75 bonus points)\n\nSanta needs a nice way to arrange the quotes on every page on his e-reader.\nThe e-reader has very little memory, so it can't store all quotes at once and needs to fetch one page at a time.\nThe server needs to keep track of which page the reader will request when Santa turns to the next page.\n\nAdd a GET endpoint `/19/list` that returns an object with:\n\n- a list of quotes, sorted by created date, oldest first, up to 3 quotes per page,\n- a page number,\n- a *token*:\n  - if there are more pages to fetch after the current one, the token should be set to a random 16-character ASCII alphanumerical string,\n  - otherwise, it should be set to `null`.\n\nIf the `token` query parameter is set, the listing endpoint should return the next page that the token is referring to.\nIf the token is unknown or badly formatted, return `400`.\nMultiple token holders should be able to fetch different pages at different times.\n\nTo keep thing simple:\n\n- The list of quotes will not be modified during runs through the paginator.\n- The tokens do not need to be persistent. They can optionally be discarded when they reach the final page.\n\n### 💠 Examples\n\n```bash\n# Setup: add 5 quotes by resetting and calling this 5 times\ncurl -X POST -H \"Content-Type: application/json\" http://localhost:8000/19/draft -d '{\"author\":\"Santa\",\"quote\":\"Ho ho ho!\"}'\n...\n\ncurl \"http://localhost:8000/19/list\"\n{\"quotes\":[{ ... },{ ... },{ ... }],\"page\":1,\"next_token\":\"MZUEzpijMBMU3mb8\"}\n\ncurl \"http://localhost:8000/19/list?token=MZUEzpijMBMU3mb8\"\n{\"quotes\":[{ ... },{ ... }],\"page\":2,\"next_token\":null}\n```\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch24/challenges/2.md",
    "content": "# 🎄 Day 2: Ridiculous Routing\n\n*Back in the early days of the Internet, Santa joyfully built a magical data center igloo at the North Pole to streamline his gift-giving magic! Using glistening ice bricks mixed with enchanting snowflakes for insulation, the igloo was filled with candy-cane striped servers and ice crystal fiber optics.*\n\n✨[*Vibe of the Day*](https://www.youtube.com/watch?v=2G8LO44Ax8w)✨\n\n![cover](../validator/assets/2.png)\n\n---\n\n## ⭐ Task 1: Egregious Encryption\n\nSanta is having his network routers in the data center igloo upgraded to the next generation.\nFor reasons unknown, he uses a special IP routing algorithm to obfuscate the traffic on the internal network.\n(An elf said that it just looks like a terrible implementation of symmetric encryption.)\nHe now needs your help to implement a simple web API for verifying the calculations in the routing algorithm.\n\nThe algorithm for IPv4 addresses is as follows:\n\nTo calculate the destination IP of a packet, take the source IP and apply a *key* address.\nThe formula `from + key == dest` (where \"`+`\" is **overflowing addition**) is applied to each of the four *octets* separately.\n\nMake a GET endpoint `/2/dest` that takes the query parameters `from` and `key` and responds with the `dest` address as text.\n\n### 🔔 Tips\n\nOverflowing addition for the `u8` type means that adding 255 and 1 gives 0 (the values wrap around in the interval 0-255).\n\n- [Query parameters in Axum](https://docs.rs/axum/latest/axum/extract/struct.Query.html)\n- [Query parameters in Actix Web](https://actix.rs/docs/extractors/#query)\n- [Query strings in Rocket](https://rocket.rs/v0.5/guide/requests/#query-strings)\n- [Rust docs: Ipv4Addr](https://doc.rust-lang.org/std/net/struct.Ipv4Addr.html)\n- [Rust docs: u8](https://doc.rust-lang.org/std/primitive.u8.html)\n- [Integer overflow](https://en.wikipedia.org/wiki/Integer_overflow)\n\n### 💠 Examples\n\n```bash\ncurl \"http://localhost:8000/2/dest?from=10.0.0.0&key=1.2.3.255\"\n\n11.2.3.255\n```\n\n```bash\ncurl \"http://localhost:8000/2/dest?from=128.128.33.0&key=255.0.255.33\"\n\n127.128.32.33\n```\n\n## ⭐ Task 2: Going the other way\n\nSanta occasionally also wants to double check that the routing calculations are correct.\n\nImplement the GET endpoint `/2/key` that instead takes the parameters `from` and `to` and returns the `key` that was used to calculate the destination (it reverses the calculation in Task 1).\n\n### 💠 Examples\n\n```bash\ncurl \"http://localhost:8000/2/key?from=10.0.0.0&to=11.2.3.255\"\n\n1.2.3.255\n```\n\n```bash\ncurl \"http://localhost:8000/2/key?from=128.128.33.0&to=127.128.32.33\"\n\n255.0.255.33\n```\n\n---\n\n## 🎁 Task 3: What happened to version 5? (50 bonus points)\n\nTo keep up with the times, Santa also wants to use this type of routing for IPv6 packets.\nHe became a bit bored with elementary school math and decided that for IPv6 packets, the algorithm should **use XOR instead of overflowing addition**.\n\nImplement `/2/v6/dest` and `/2/v6/key` in the same way as in Task 1 and 2, but using IPv6 addresses.\n\n### 💠 Examples\n\n```bash\ncurl \"http://localhost:8000/2/v6/dest?from=fe80::1&key=5:6:7::3333\"\n\nfe85:6:7::3332\n```\n\n```bash\ncurl \"http://localhost:8000/2/v6/key?from=aaaa::aaaa&to=5555:ffff:c:0:0:c:1234:5555\"\n\nffff:ffff:c::c:1234:ffff\n```\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch24/challenges/23.md",
    "content": "# 🎄 Day 23: Dinner at the Christmas Tree\n\n*In the snowy North Pole, Santa Claus beamed with joy as he gazed at his gleaming sleigh. The elves had finished their work, every toy perfectly crafted and ready. Reindeer stood harnessed, bells jingling in the crisp air, Rudolf's nose shining brightly.*\n\n*\"Ho, Ho, Ho!\" Santa chuckled, his heart brimming with happiness. His sleigh was more than a collection of gifts; it was a vehicle of joy, destined to deliver dreams to children worldwide. As he grasped the reins, anticipation bubbled within him. With a hearty \"Onward!\" the sleigh soared into the starlit sky, Santa's heart as light as the hope he spread on Christmas Eve.*\n\n✨[*Vibe of the Day*](https://www.youtube.com/watch?v=zzzunYn6sUU)✨\n\n![cover](../validator/assets/23.png)\n\n---\n\n## ⭐ Task 1: Who let him cook?\n\nSanta is preparing a Christmas dinner in a cozy cabin in the woods.\nHe is preparing to serve the dish *Twenty-three Half-baked Toasty Majestic Lobsters*, or *23.html* as he likes to call it, and needs your help in the kitchen.\n\nDownload the file [23.html](../validator/assets/23.html), and serve it as a static file on the path `/assets/23.html`.\n\nWhen done, opening <http://localhost:8000/assets/23.html> in the browser should show you the HTML page with a Christmas tree and some presents.\n\nNOTE: To make static assets available when deploying to Shuttle, be sure to configure [build.assets](https://docs.shuttle.dev/docs/files#build-assets) in `Shuttle.toml`.\n\n### 🔔 Tips\n\n- [Shuttle examples: Axum static files](https://github.com/shuttle-hq/shuttle-examples/tree/main/axum/static-files)\n- [Shuttle examples: Actix Web static files](https://github.com/shuttle-hq/shuttle-examples/tree/main/actix-web/static-files)\n- [Shuttle examples: Rocket static files](https://github.com/shuttle-hq/shuttle-examples/tree/main/rocket/static-files)\n\n---\n\n## ⭐ Task 2: I thought this was a Rust challenge...?\n\n*The time has come to decorate the Christmas tree in the cabin, or more precisely, add the magic touch of Christmas joy!*\n\nThe HTML file uses [htmx](https://htmx.org/), and is waiting for some server-side rendered HTML components to run the show.\n\nImplement GET `/23/star` so that the star lights up when the button is clicked (the button's logic for sending the request is already implemented).\nThe star is lit by returning an HTML `<div>` element identical to the existing star element, but with the `lit` CSS class added.\n\n### 🔔 Tips\n\n- You should NOT modify *23.html*, all logic needed to get started is already in there. Reading its contents is **highly recommended** though!\n- [htmx docs](https://htmx.org/docs/) is your friend.\n- [W3 schools: HTML class attribute](https://www.w3schools.com/html/html_classes.asp)\n\n### 💠 Example\n\nCheck the example for Task 4 to see how everything should behave when finished!\n\n---\n\n## ⭐ Task 3: Where is the JavaScript onClick?!\n\n*Santa observes that all the presents under the tree have the same color.*\n*With his magic touch and your help, let's add some color variety to this happy occasion!*\n\nIn a similar fashion as Task 1, add GET `/23/present/{color}` that responds with a new present element with the requested color.\nClicking on a present should change its color in the order `red` -> `blue` -> `purple` -> `red`, and so on.\nThe logic for getting the next color on the next click is achieved by correctly setting the `hx-get` value to get the next color.\n\nIf the color in the request is invalid, return a `418 I'm a teapot`.\n\n---\n\n## ⭐ Task 4: Where is the CSS animation-iteration-count?!\n\n*Santa thinks that filling the Christmas tree with glitter is too sharp on his eyes these days.*\n*Instead, he went and got himself some \"fading\" red ornaments that gives the tree a cozy vibe.*\n\nAdd GET `/23/ornament/{state}/{n}` that returns ornament number `n` in the requested `state`.\n\n- `n` might not always be a number, so treat it like a string.\n- The state is either `on` or `off`, and just like in Task 3, the next state needs to be referenced in the returned element. Only if the state is `on` should the element have the CSS class `on` added.\n  - Like before, return `418` if the state is invalid.\n- The hx-trigger `delay` property should have the value `2s` in all cases.\n\n### 💠 Example\n\nThis is what the page should look like when Tasks 2, 3, and 4 are done!\n\n![tree](../validator/assets/23tree.gif)\n\n---\n\n## ⭐ Task 5: Xtra Spicy Soup 😱\n\n*Santa remembers that the elves can be a little careless (or mischievous?) in the kitchen when adding chili flakes to the fish soup served alongside the lobster.*\n*Make sure they don't overheat any web servers or user machines with the amount of spice they add.*\n\nEnsure that all endpoints in this challenge are resistant to XSS attempts by HTML-escaping any incoming strings.\n\n### 🔔 Tips\n\n- Templating libraries usually come with escaping built-in in some way.\n\n### 💠 Example\n\n```bash\n# Without escaping\ncurl \"http://localhost:8000/23/ornament/on/%22%3E%3Cscript%3Ealert%28%22Spicy%20soup%21%22%29%3C%2Fscript%3E\"\n<div class=\"ornament on\" id=\"ornament\"><script>alert(\"Spicy soup!\")</script>...\n\n# With escaping\ncurl \"http://localhost:8000/23/ornament/on/%22%3E%3Cscript%3Ealert%28%22Spicy%20soup%21%22%29%3C%2Fscript%3E\"\n<div class=\"ornament on\" id=\"ornament&quot;&gt;&lt;script&gt;alert(&quot;Spicy soup!&quot;)&lt;/script&gt;\"...\n```\n\n---\n\n## 🎁 Task 6: cargo bake me a cake (100 bonus points)\n\n*Santa thanks you for all the help with the Christmas tree!*\n*The only thing remaining now for peace and joy during the holidays is finishing this Christmas dinner off with some cake!*\n\nSanta has an interesting way to arrange the sprinkles on each cake to make them somewhat unique and interesting.\nIf you didn't notice yet, scrolling down the page in *23.html* reveals a form where you can upload a `Cargo.lock` file.\n\nThe form uses `hx-post` to send a multipart POST request to `/23/lockfile` with a `lockfile` field.\nImplement this endpoint so that it, for every package in the lockfile that has a checksum, returns an HTML element with styles based on the checksum value:\n\n```html\n<div style=\"background-color:{color};top:{top}px;left:{left}px;\"></div>\n```\n\nThe values are calculated like this:\n\n- `color` is the first 3 bytes in the checksum, turned into a hex color code.\n- `top` is the following byte, converted to decimal.\n- `left` is the following byte, converted to decimal.\n\nAll the other CSS has been prepared for you in advance by Santa.\n\n- If anything goes wrong when parsing the multipart form or lockfile, return `400`.\n- If any required characters in a checksum string are missing or invalid, return `422`.\n\n### 💠 Example\n\nWith this (simplified) Cargo.lock file...\n\n```toml\n[[package]]\nname = \"shuttle-runtime\"\nversion = \"0.49.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"337789faa0372648a8ac286b2f92a53121fe118f12e29009ac504872a5413cc6\"\n\n[[package]]\nname = \"shuttle-service\"\nversion = \"0.49.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"22ba454b13e4e29b5b892a62c334360a571de5a25c936283416c94328427dd57\"\n```\n\n...the endpoint should produce:\n\n```html\n<div style=\"background-color:#337789;top:250px;left:160px;\"></div>\n<div style=\"background-color:#22ba45;top:75px;left:19px;\"></div>\n```\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch24/challenges/5.md",
    "content": "# 🎄 Day 5: The dangerous open Internet\n\n*Ho ho ho! Santa's got his hands full this year with the grand Christmas present delivery! He's all set to send out orders to his trusty warehouse at the South Pole, but oh my, what a festive twist we have here!*\n\n*You see, the magical undersea optic fiber cable Santa installed back in 2005 got a bit of a surprise - a ship dragged its anchor right through it! Now, instead of sending messages through that secret snowy channel, Santa must use the open Internet, where those mischievous hackers under the Grinch's command are waiting to disrupt them.*\n\n*But Santa, with his big belly laugh, says, \"No time for encryption, my dear elves! Christmas is just 20 days away, and we've got heaps of other magical coding tasks to sprinkle with Christmas magic! Ho ho ho!\"*\n\n✨[*Vibe of the Day*](https://www.youtube.com/watch?v=M1F5_UzwiY4)✨\n\n![cover](../validator/assets/5.png)\n\n---\n\n## ⭐ Task 1: Car go many festivity 🤔\n\nSanta has a plan for evading the hackers' attempts at disrupting his gift order requests: disguising them as Cargo.toml files!\n\nSanta will be sending his gift orders as POST requests to `/5/manifest` with TOML documents that are valid Cargo.toml manifests.\nThe `package.metadata` field allows arbitrary data to be stored in Cargo manifests, but for the worker elves in the warehouse to understand the order, they need it written out as a plain newline-separated list (with no newline at the end).\n\nThe `package.metadata.orders` field will be an array of maps that *should* have `item` (String) and `quantity` (u32) fields.\nInvalid orders in the array should be ignored.\nIf the manifest does not contain any valid orders, the response should be `204 No Content`.\n\n### 🔔 Tips\n\n- [toml](https://crates.io/crates/toml)\n\n### 💠 Examples\n\n```bash\ncurl http://localhost:8000/5/manifest -H \"Content-Type: application/toml\" --data '\n[package]\nname = \"not-a-gift-order\"\nauthors = [\"Not Santa\"]\nkeywords = [\"Christmas 2024\"]\n\n[[package.metadata.orders]]\nitem = \"Toy car\"\nquantity = 2\n\n[[package.metadata.orders]]\nitem = \"Lego brick\"\nquantity = 230\n'\n\nToy car: 2\nLego brick: 230\n```\n\nThe following example responds with 204 since there are no valid orders (the one provided has an invalid `quantity` data type).\n\n```bash\ncurl -v http://localhost:8000/5/manifest -H \"Content-Type: application/toml\" --data '\n[package]\nname = \"coal-in-a-bowl\"\nauthors = [\"H4CK3R_13E7\"]\nkeywords = [\"Christmas 2024\"]\n\n[[package.metadata.orders]]\nitem = \"Coal\"\nquantity = \"Hahaha get rekt\"\n'\n\n...\n< HTTP/1.1 204 No Content\n...\n```\n\n---\n\n## ⭐ Task 2: How to make crates.io\n\n\"Hah! It works, but... oh no!\"\nThe hackers discovered the endpoint and are now planning to spam it with invalid Cargo.toml files to overload the server!\nA cat and mouse game is taking shape.\n\nWe need to add a Cargo manifest parser that can deny all invalid manifests.\nIf a manifest is invalid, respond with a `400 Bad Request` code and the response body `Invalid manifest`.\n\n### 🔔 Tips\n\n- [cargo-manifest](https://crates.io/crates/cargo-manifest)\n\n### 💠 Examples\n\n```bash\ncurl -v http://localhost:8000/5/manifest -H \"Content-Type: application/toml\" --data '\n[package]\nname = false\nauthors = [\"Not Santa\"]\nkeywords = [\"Christmas 2024\"]\n'\n\n...\n< HTTP/1.1 400 Bad Request\n...\nInvalid manifest\n```\n\n```bash\ncurl -v http://localhost:8000/5/manifest -H \"Content-Type: application/toml\" --data '\n[package]\nname = \"not-a-gift-order\"\nauthors = [\"Not Santa\"]\nkeywords = [\"Christmas 2024\"]\n\n[profile.release]\nincremental = \"stonks\"\n'\n\n...\n< HTTP/1.1 400 Bad Request\n...\nInvalid manifest\n```\n\n---\n\n## ⭐ Task 3: Use the magic word\n\nFiltering out bad manifests worked for a while, but now the hackers have refined their strategy and are mostly sending valid manifests.\nTime to add more requirements! *(said the project manager)*\n\nNotice how all of Santa's manifests have the package keyword `Christmas 2024`?\nThe hackers' manifests are not mimicking that part, so we can deny requests that don't include that keyword!\nRespond with another 400 and the text `Magic keyword not provided` if that is the case.\n\n### 💠 Example\n\n```bash\ncurl -v http://localhost:8000/5/manifest -H \"Content-Type: application/toml\" --data '\n[package]\nname = \"grass\"\nauthors = [\"A vegan cow\"]\nkeywords = [\"Moooooo\"]\n'\n\n...\n< HTTP/1.1 400 Bad Request\n...\nMagic keyword not provided\n```\n\n---\n\n## 🎁 Task 4: Cargo.yaml? 😳 (70 bonus points)\n\n\"You know what,\" Santa says, \"time for some trickery.\nLet's confuse the hackers even more by also allowing the manifest to be passed as YAML and JSON documents!\"\n\nUse the `Content-Type` header to know which format the incoming request has.\nIf the header has an unsupported value, return a `415 Unsupported Media Type`.\nAll previous rules still apply to the new formats.\n\n### 💠 Examples\n\n```bash\ncurl -v http://localhost:8000/5/manifest -H \"Content-Type: text/html\" --data '<h1>Hello, bird!</h1>'\n\n...\n< HTTP/1.1 415 Unsupported Media Type\n...\n```\n\n```bash\ncurl http://localhost:8000/5/manifest -H \"Content-Type: application/yaml\" --data '\npackage:\n  name: big-chungus-sleigh\n  version: \"2.0.24\"\n  metadata:\n    orders:\n      - item: \"Toy train\"\n        quantity: 5\n  rust-version: \"1.69\"\n  keywords:\n    - \"Christmas 2024\"\n'\n\nToy train: 5\n```\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch24/challenges/9.md",
    "content": "# 🎄 Day 9: The *Cookies and Milk* Factory (part 1)\n\n*Wanting to spread the joy of sweet treats beyond the holidays, Santa built a wondrous factory to mass produce the perfect treat duo: cookies and milk packaged as a 2-in-1 deal!*\n\n*Branded as \"Santa's Cookies and Milk,\" the product quickly became a worldwide hit, delighting taste buds and hearts alike. The success was so enormous that Santa now considers building more factories to meet the growing demand!*\n\n✨[*Vibe of the Day*](https://www.youtube.com/watch?v=P1FsnwYJ3p0)✨\n\n![cover](../validator/assets/9.png)\n\n---\n\n## ⭐ Task 1: The Leaky Bucket of Milk\n\nSanta has a bucket in the *Cookies and Milk* factory that can store 5 liters of milk.\nAs long as the bucket is not full, the bucket is magically refilled with 1 liter of milk every second.\nEvery time the production line makes a pack of milk, 1 liter is taken from the bucket.\n\nWithdrawing milk from the bucket when it is empty creates an empty pack of milk, which can not be accepted in this factory.\nSanta needs a way to ensure this never ever happens!\n\nMake a POST endpoint `/9/milk` that makes sure the bucket is never empty.\nIt should take no request body as input.\nIf there is milk in the bucket, respond with `200 OK` and the string `Milk withdrawn\\n`.\nIf there is no milk in the bucket, respond with `429 Too Many Requests` and the string `No milk available\\n`.\n\n### 🔔 Tips\n\n- [leaky-bucket](https://crates.io/crates/leaky-bucket)\n- [Sharing state in Axum](https://docs.rs/axum/latest/axum/#sharing-state-with-handlers)\n- [Application State in Actix Web](https://actix.rs/docs/application#state)\n- [State in Rocket](https://rocket.rs/v0.5/guide/state/)\n\n### 💠 Example\n\nWhen the bucket is full, this sequence of calls should produce the following responses:\n\n```bash\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\nsleep 1\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\nsleep 2\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\n\nMilk withdrawn\nMilk withdrawn\nMilk withdrawn\nMilk withdrawn\nMilk withdrawn\nNo milk available\nMilk withdrawn\nNo milk available\nMilk withdrawn\nMilk withdrawn\nNo milk available\n```\n\n---\n\n## ⭐ Task 2: Hey dude, how 'bout a gallon of milk and some cookies? 🇺🇸\n\nSanta is thinking of opening the next *Cookies and Milk* factory in the United States.\nOver there, he is planning to have a 5-gallon bucket instead, but... \"How many liters is that?\"\n\nModify the endpoint from Task 1 so that it can convert between liters and US gallons.\n\nThe `Content-Type: application/json` header value determines the endpoint's behavior:\n\n- If the content type is not JSON, respond like in Task 1.\n- If the content type is JSON, parse the body and convert between the volume units as `f32`s (examples below).\n  - If the JSON is invalid, or the input does not contain exactly **one** of the valid input fields, respond with a `400 Bad Request`.\n\nThe same rate-limiting rules should apply, regardless of whether it is a milk withdrawal request or a unit conversion request.\n\n### 🔔 Tips\n\n- [JSON in Axum](https://docs.rs/axum/latest/axum/struct.Json.html)\n- [JSON in Actix Web](https://actix.rs/docs/request)\n- [JSON in Rocket](https://rocket.rs/v0.5/guide/requests/#json)\n\n### 💠 Examples\n\n```bash\ncurl -H \"Content-Type: application/json\" http://localhost:8000/9/milk -d '{\"liters\":5}'\n\n{\"gallons\":1.3208603}\n```\n\n```bash\ncurl -H \"Content-Type: application/json\" http://localhost:8000/9/milk -d '{\"gallons\":5}'\n\n{\"liters\":18.92706}\n```\n\n```bash\ncurl -v -H \"Content-Type: application/json\" http://localhost:8000/9/milk -d '{\"liters\":1,\"gallons\":5}'\n\n...\n< HTTP/1.1 400 Bad Request\n...\n```\n\n---\n\n## ⭐ Task 3: Oi bruv, fancy a pint o' milk and some biscuits? 🇬🇧\n\nCrikey! What's all this then?\nWhen Santa popped over to the UK to open a *Cookies and Milk* factory there, he quickly learned they spell it as *litres*.\nNot only that, but they'd rather have their bucket hold 5 UK pints instead of litres or gallons.\nQuite the adjustment, innit?\n\nModify the same endpoint to convert back and forth between *litres* and UK pints.\nThe same rules and behaviors as in Task 2 still apply.\n\n### 💠 Example\n\n```bash\ncurl -H \"Content-Type: application/json\" http://localhost:8000/9/milk -d '{\"litres\":2}'\n\n{\"pints\":3.519508}\n```\n\n---\n\n## 🎁 Task 4: Top up the cup (75 bonus points)\n\nOh, Santa can snap his fingers and magically refill the bucket with milk, just like that?\nWhat do we even need these factories for then?\n\nAdd a POST endpoint `/9/refill` for instantly refilling the bucket to its max capacity, that responds `200 OK`.\n\n### 💠 Example\n\n```bash\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/refill\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\ncurl -X POST http://localhost:8000/9/milk\n\nMilk withdrawn\nMilk withdrawn\nMilk withdrawn\nMilk withdrawn\nMilk withdrawn\nNo milk available\nMilk withdrawn\nMilk withdrawn\nMilk withdrawn\nMilk withdrawn\nMilk withdrawn\nNo milk available\n```\n\n---\n\nAuthor: [jonaro00](https://github.com/jonaro00)\n"
  },
  {
    "path": "cch24/validator/Cargo.toml",
    "content": "[package]\nname = \"cch24-validator\"\ndescription = \"Validate solutions to challenges from Shuttle's Christmas Code Hunt 2024\"\nhomepage = \"https://www.shuttle.dev/cch\"\nrepository = \"https://github.com/shuttle-hq/shuttlings\"\nauthors = [\"Santa\"]\nversion = \"23.0.1\"\nedition = \"2021\"\nlicense = \"MIT\"\npublish = true\n\n[dependencies]\nchrono = { version = \"0.4\", features = [\"clock\", \"serde\"] }\nclap = { version = \"4\", features = [\"derive\", \"cargo\"] }\nhtml-compare-rs = \"0.3.0\"\njsonwebtoken = { version = \"9.3.0\", default-features = false }\nreqwest = { version = \"0.12\", default-features = false, features = [\"rustls-tls\", \"json\", \"cookies\", \"multipart\"] }\nserde = { version = \"1\", features = [\"derive\"] }\nserde_json = \"1\"\nshuttlings = \"0.1.0\"\ntokio = { version = \"1\", features = [\"full\"] }\ntracing = \"0.1\"\nuuid = \"1\"\n"
  },
  {
    "path": "cch24/validator/README.md",
    "content": "# Shuttle's Christmas Code Hunt 2024 - Validator\n\nUse this binary to run the official tests against your solution to challenges from [Shuttle's Christmas Code Hunt 2024](https://www.shuttle.dev/cch).\n\n## Installation / Upgrading\n\n```sh\ncargo install cch24-validator\n```\n\n## Usage\n\n```text\nUsage: cch24-validator [OPTIONS] <NUMBERS|--all>\n\nArguments:\n  [NUMBERS]...  The challenge numbers to validate\n\nOptions:\n      --all        Validate all challenges\n  -u, --url <URL>  The base URL to test against [default: http://127.0.0.1:8000]\n  -h, --help       Print help\n  -V, --version    Print version\n```\n\n## Examples\n\n```sh\ncch24-validator -1\ncch24-validator 2 5\ncch24-validator --all\n```\n"
  },
  {
    "path": "cch24/validator/assets/23.html",
    "content": "<html>\n    <head>\n        <script src=\"https://unpkg.com/htmx.org@2.0.4\"></script>\n        <style>\nbody {\n    --darkgrey: #0d0d0d;\n    --red: #a00;\n    --green: #060;\n    --white: #eee;\n    background-color: var(--darkgrey);\n    color: var(--white);\n}\nmain {\n    max-width: 600px;\n    margin: auto;\n    margin-top: 100px;\n}\n\n.tree {\n    position: relative;\n    height: 500px;\n}\n.tree * {\n    position: absolute;\n}\n#star {\n    top: -20px;\n    left: 150px;\n    width: 100px;\n    height: 100px;\n    background-color: darkgoldenrod;\n    clip-path: polygon(\n        50% 0%,\n        61% 35%,\n        98% 35%,\n        68% 57%,\n        79% 91%,\n        50% 70%,\n        21% 91%,\n        32% 57%,\n        2% 35%,\n        39% 35%\n    );\n}\n#star.lit {\n    background: linear-gradient(10deg, rgba(227,233,0,1) 0%, rgba(241,245,148,1) 100%);\n}\n.tree-part {\n    width: 0;\n    height: 0;\n    border-style: solid;\n    border-color: transparent transparent green transparent;\n    border-width: 0 100px 100px 100px;\n}\n.tree-part1 {\n    left: 100px;\n    top: 20px;\n}\n.tree-part2 {\n    left: 100px;\n    top: 60px;\n    transform: scale(120%);\n    filter: brightness(90%);\n}\n.tree-part3 {\n    left: 100px;\n    top: 100px;\n    transform: scale(135%);\n}\n.tree-part4 {\n    left: 100px;\n    top: 140px;\n    transform: scale(150%);\n    filter: brightness(90%);\n}\n.tree-part5 {\n    left: 100px;\n    top: 180px;\n    transform: scale(160%);\n}\n.tree-base {\n    width: 40px;\n    height: 40px;\n    left: 180px;\n    top: 310px;\n    background-color: rgb(97, 47, 13);\n    margin: 0 auto;\n}\n.ornament {\n    width: 20px;\n    height: 20px;\n    background-color: darkred;\n    border-radius: 50%;\n    transition: background-color 1s ease;\n}\n.ornament.on {\n    background-color: red;\n}\n#ornament1 {\n    top: 90px;\n    left: 150px;\n}\n#ornament2 {\n    top: 140px;\n    left: 210px;\n}\n#ornament3 {\n    top: 172px;\n    left: 160px;\n}\n#ornament4 {\n    top: 253px;\n    left: 110px;\n}\n#ornament5 {\n    top: 200px;\n    left: 260px;\n}\n#ornament6 {\n    top: 230px;\n    left: 200px;\n}\n#ornament7 {\n    top: 270px;\n    left: 250px;\n}\n.present {\n    width: 100px;\n    height: 100px;\n    box-shadow: black 0px 0px 11px 1px;\n}\n.present.red {\n    background-color: red;\n}\n.present.blue {\n    background-color: blue;\n}\n.present.purple {\n    background-color: purple;\n}\n.present:nth-child(1) {\n    top: 280px;\n    left: 350px;\n}\n.present:nth-child(2) {\n    top: 280px;\n    left: 460px;\n}\n.present:nth-child(3) {\n    top: 320px;\n    left: 420px;\n}\n.present .ribbon {\n    background: rgb(227,233,0);\n    background: linear-gradient(0deg, rgba(227,233,0,1) 0%, rgba(241,245,148,1) 100%);\n}\n.present .ribbon:nth-child(1) {\n    width: 100px;\n    height: 20px;\n    top: 40px;\n}\n.present .ribbon:nth-child(2) {\n    width: 20px;\n    height: 100px;\n    left: 40px;\n}\n.present .ribbon:nth-child(3) {\n    width: 20px;\n    height: 30px;\n    left: 30px;\n    top: -20px;\n    transform: rotate(-45deg);\n}\n.present .ribbon:nth-child(4) {\n    width: 20px;\n    height: 30px;\n    left: 50px;\n    top: -20px;\n    transform: rotate(35deg);\n}\n#switch {\n    top: 400px;\n    left: 145px;\n    border: none;\n    background-color: #ccc;\n    color: black;\n    padding: 1em;\n    border-radius: .5em;\n    cursor: pointer;\n    font-weight: bold;\n}\n.text {\n    font-size: 200%;\n    font-weight: bold;\n    text-align: center;\n}\n.rocket {\n    width: 80px;\n    height: 80px;\n}\n.spacer {\n    height: 800px;\n}\n#lockfilecanvas {\n    height: 276px;\n    width: 276px;\n    margin: auto;\n    border: 1px solid grey;\n    margin-bottom: 100px;\n    position: relative;\n}\n#lockfilecanvas * {\n    position: absolute;\n    width: 20px;\n    height: 20px;\n    border-radius: 50%;\n}\n        </style>\n    </head>\n    <body>\n        <main>\n            <div class=\"tree\">\n                <div class=\"present red\" hx-get=\"/23/present/blue\" hx-swap=\"outerHTML\">\n                    <div class=\"ribbon\"></div>\n                    <div class=\"ribbon\"></div>\n                    <div class=\"ribbon\"></div>\n                    <div class=\"ribbon\"></div>\n                </div>\n                <div class=\"present red\" hx-get=\"/23/present/blue\" hx-swap=\"outerHTML\">\n                    <div class=\"ribbon\"></div>\n                    <div class=\"ribbon\"></div>\n                    <div class=\"ribbon\"></div>\n                    <div class=\"ribbon\"></div>\n                </div>\n                <div class=\"present red\" hx-get=\"/23/present/blue\" hx-swap=\"outerHTML\">\n                    <div class=\"ribbon\"></div>\n                    <div class=\"ribbon\"></div>\n                    <div class=\"ribbon\"></div>\n                    <div class=\"ribbon\"></div>\n                </div>\n                <div class=\"tree-base\"></div>\n                <div class=\"tree-part tree-part5\"></div>\n                <div class=\"tree-part tree-part4\"></div>\n                <div class=\"tree-part tree-part3\"></div>\n                <div class=\"tree-part tree-part2\"></div>\n                <div class=\"tree-part tree-part1\"></div>\n                <div class=\"ornament\" id=\"ornament1\" hx-trigger=\"load changed delay:2000ms once\" hx-get=\"/23/ornament/on/1\" hx-swap=\"outerHTML\"></div>\n                <div class=\"ornament\" id=\"ornament2\" hx-trigger=\"load changed delay:1600ms once\" hx-get=\"/23/ornament/on/2\" hx-swap=\"outerHTML\"></div>\n                <div class=\"ornament\" id=\"ornament3\" hx-trigger=\"load changed delay:200ms once\" hx-get=\"/23/ornament/on/3\" hx-swap=\"outerHTML\"></div>\n                <div class=\"ornament\" id=\"ornament4\" hx-trigger=\"load changed delay:400ms once\" hx-get=\"/23/ornament/on/4\" hx-swap=\"outerHTML\"></div>\n                <div class=\"ornament\" id=\"ornament5\" hx-trigger=\"load changed delay:800ms once\" hx-get=\"/23/ornament/on/5\" hx-swap=\"outerHTML\"></div>\n                <div class=\"ornament\" id=\"ornament6\" hx-trigger=\"load changed delay:1200ms once\" hx-get=\"/23/ornament/on/6\" hx-swap=\"outerHTML\"></div>\n                <div class=\"ornament\" id=\"ornament7\" hx-trigger=\"load changed delay:1400ms once\" hx-get=\"/23/ornament/on/7\" hx-swap=\"outerHTML\"></div>\n                <div class=\"present-wrap present-wrap1\"></div>\n                <div class=\"present-wrap present-wrap2\"></div>\n                <div class=\"present-wrap present-wrap3\"></div>\n                <div class=\"present-wrap present-wrap4\"></div>\n                <div id=\"star\"></div>\n                <button id=\"switch\" hx-get=\"/23/star\" hx-swap=\"outerHTML\" hx-target=\"#star\">\n                    Light the star\n                </button>\n            </div>\n            <div class=\"text\">Merry Christmas!</div>\n            <div class=\"text\">/ Shuttle</div>\n            <div class=\"text\"><img class=\"rocket\" src=\"https://console.shuttle.dev/images/rocket.gif\"></div>\n            <div class=\"spacer\"></div>\n            <div class=\"text\">Bonus task:</div>\n            <form hx-post=\"/23/lockfile\" enctype=\"multipart/form-data\" hx-target=\"#lockfilecanvas\">\n                <input type=\"file\" name=\"lockfile\" required>\n                <br>\n                <br>\n                <button type=\"submit\">Submit lockfile</button>\n            </form>\n            <div id=\"lockfilecanvas\"></div>\n        </main>\n    </body>\n</html>\n"
  },
  {
    "path": "cch24/validator/assets/day16_santa_public_key.pem",
    "content": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs5BlLjDtKuEY2NV3+xhH\nWWlKrZDWkIOV+HoLURIBEpAHa11xU+wL9sySR17j4bL9MJawlCJAGArW8vnDiAv8\n366PfOhCqZsD9N2iG28y7vf5q1PhoXl/Vfuelykw0k+r4054h0uCg9Olal0Nm/V8\nvsdPEC3wjNLBi86oYESkW43/7lbBWPBti1POCVJDuBEASZFhIR2+mfz6AFWQwmqO\nzzhP1Yli/7EtNMELWezQJXnVLQ3JvjT2btWWwKYT468YX/NtQgMC7SLvIRBuWb/Z\nayfoi/9rGndqW0YPE1xwJEQA415w5HbfTneyAIxDy7TC8/+dFaKRcoPiEQA1T5bk\nOQIDAQAB\n-----END PUBLIC KEY-----\n"
  },
  {
    "path": "cch24/validator/src/args.rs",
    "content": "use clap::{Args, Parser};\n\n#[derive(Debug, Parser)]\n#[command(version)]\npub struct ValidatorArgs {\n    #[command(flatten)]\n    pub challenge: ChallengeArgs,\n    /// The base URL to test against\n    #[arg(long, short, default_value = \"http://127.0.0.1:8000\")]\n    pub url: String,\n}\n\n#[derive(Debug, Clone, Args)]\n#[group(required = true, multiple = false)]\npub struct ChallengeArgs {\n    /// The challenge numbers to validate\n    pub numbers: Vec<String>,\n    /// Validate all challenges\n    #[arg(long)]\n    pub all: bool,\n}\n"
  },
  {
    "path": "cch24/validator/src/lib.rs",
    "content": "pub mod args;\n\nuse chrono::{DateTime, TimeDelta, Utc};\nuse html_compare_rs::{HtmlCompareOptions, HtmlComparer};\nuse jsonwebtoken::decode_header;\nuse reqwest::{\n    header::{self, HeaderValue},\n    multipart::{Form, Part},\n    redirect::Policy,\n    Client, StatusCode,\n};\nuse serde_json::json;\nuse shuttlings::{SubmissionState, SubmissionUpdate};\nuse tokio::{\n    sync::mpsc::Sender,\n    time::{sleep, Duration},\n};\nuse tracing::info;\nuse uuid::Uuid;\n\npub const SUPPORTED_CHALLENGES: &[&str] = &[\"-1\", \"2\", \"5\", \"9\", \"12\", \"16\", \"19\", \"23\"];\npub const SUBMISSION_TIMEOUT: u64 = 60;\n\npub async fn run(url: String, id: Uuid, number: &str, tx: Sender<SubmissionUpdate>) {\n    info!(%id, %url, %number, \"Starting submission\");\n\n    tx.send(SubmissionState::Running.into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    tokio::select! {\n        _ = validate(url.as_str(), number, tx.clone()) => (),\n        _ = sleep(Duration::from_secs(SUBMISSION_TIMEOUT)) => {\n            // if the validation task timed out\n            info!(%id, %url, %number, \"Submission timed out\");\n            tx.send(\"Timed out\".to_owned().into()).await.unwrap();\n            tx.send(SubmissionState::Done.into()).await.unwrap();\n            tx.send(SubmissionUpdate::Save).await.unwrap();\n        },\n    };\n    info!(%id, %url, %number, \"Completed submission\");\n}\n\n/// Task number and Test number in the current challenge\ntype TaskTest = (i32, i32);\n/// If failure, return tuple with task number and test number that failed\ntype ValidateResult = std::result::Result<(), TaskTest>;\n\npub async fn validate(url: &str, number: &str, tx: Sender<SubmissionUpdate>) {\n    let txc = tx.clone();\n    if let Err((task, test)) = match number {\n        \"-1\" => validate_minus1(url, txc).await,\n        \"2\" => validate_2(url, txc).await,\n        \"5\" => validate_5(url, txc).await,\n        \"9\" => validate_9(url, txc).await,\n        \"12\" => validate_12(url, txc).await,\n        \"16\" => validate_16(url, txc).await,\n        \"19\" => validate_19(url, txc).await,\n        \"23\" => validate_23(url, txc).await,\n        _ => {\n            tx.send(\n                format!(\"Validating Challenge {number} is not supported yet! Check for updates.\")\n                    .into(),\n            )\n            .await\n            .unwrap();\n            return;\n        }\n    } {\n        info!(%url, %number, %task, %test, \"Submission failed\");\n        tx.send(format!(\"Task {task}: test #{test} failed 🟥\").into())\n            .await\n            .unwrap();\n    }\n    tx.send(SubmissionState::Done.into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n}\n\nfn new_client_base() -> reqwest::ClientBuilder {\n    reqwest::ClientBuilder::new()\n        .http1_only()\n        .connect_timeout(Duration::from_secs(3))\n        .redirect(Policy::limited(3))\n        .referer(false)\n        .timeout(Duration::from_secs(60))\n}\nfn new_client() -> reqwest::Client {\n    new_client_base().build().unwrap()\n}\nfn new_client_with_cookies() -> reqwest::Client {\n    new_client_base().cookie_store(true).build().unwrap()\n}\n\nmacro_rules! assert_status {\n    ($res:expr, $test:expr, $expected_status:expr) => {\n        if $res.status() != $expected_status {\n            return Err($test);\n        }\n    };\n}\n\nmacro_rules! assert_text {\n    ($res:expr, $test:expr, $expected_text:expr) => {\n        if $res.text().await.map_err(|_| $test)? != $expected_text {\n            return Err($test);\n        }\n    };\n}\n\nmacro_rules! assert_json {\n    ($res:expr, $test:expr, $expected_json:expr) => {\n        if $res.json::<serde_json::Value>().await.map_err(|_| $test)? != $expected_json {\n            return Err($test);\n        }\n    };\n}\n\nmacro_rules! assert_text_starts_with {\n    ($res:expr, $test:expr, $expected_text:expr) => {\n        if !$res\n            .text()\n            .await\n            .map_err(|_| $test)?\n            .starts_with($expected_text)\n        {\n            return Err($test);\n        }\n    };\n}\n\nmacro_rules! assert_ {\n    ($test:expr, $expected_true:expr) => {\n        if !$expected_true {\n            return Err($test);\n        }\n    };\n}\n\nmacro_rules! assert_eq_ {\n    ($test:expr, $left:expr, $right:expr) => {\n        if $left != $right {\n            return Err($test);\n        }\n    };\n}\n\nmacro_rules! assert_neq_ {\n    ($test:expr, $left:expr, $right:expr) => {\n        if $left == $right {\n            return Err($test);\n        }\n    };\n}\n\nasync fn validate_minus1(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1: respond 200 with Hello, bird!\n    test = (1, 1);\n    let url = &format!(\"{}/\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Hello, bird!\");\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2: respond 302\n    test = (2, 1);\n    let url = &format!(\"{}/-1/seek\", base_url);\n    let client_no_redir = reqwest::ClientBuilder::new()\n        .http1_only()\n        .connect_timeout(Duration::from_secs(3))\n        .redirect(Policy::none())\n        .referer(false)\n        .timeout(Duration::from_secs(60))\n        .build()\n        .unwrap();\n    let res = client_no_redir.get(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::FOUND);\n    if res.headers().get(header::LOCATION)\n        != Some(&HeaderValue::from_static(\n            \"https://www.youtube.com/watch?v=9Gc4QTqslN4\",\n        ))\n    {\n        return Err(test);\n    }\n    // TASK 2 DONE\n    tx.send((false, 0).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_2(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1: Ipv4 dest\n    test = (1, 1);\n    let url = &format!(\"{}/2/dest?from=10.0.0.0&key=1.2.3.255\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"11.2.3.255\");\n    test = (1, 2);\n    let url = &format!(\"{}/2/dest?from=128.128.33.0&key=255.0.255.33\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"127.128.32.33\");\n    test = (1, 3);\n    let url = &format!(\"{}/2/dest?from=192.168.0.1&key=72.96.8.7\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"8.8.8.8\");\n    // TASK 1 DONE\n    tx.send((false, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2: Ipv4 key\n    test = (2, 1);\n    let url = &format!(\"{}/2/key?from=10.0.0.0&to=11.2.3.255\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"1.2.3.255\");\n    test = (2, 2);\n    let url = &format!(\"{}/2/key?from=128.128.33.0&to=127.128.32.33\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"255.0.255.33\");\n    test = (2, 3);\n    let url = &format!(\"{}/2/key?from=192.168.0.1&to=8.8.8.8\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"72.96.8.7\");\n    // TASK 2 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 3: Ipv6\n    test = (3, 1);\n    let url = &format!(\"{}/2/v6/dest?from=fe80::1&key=5:6:7::3333\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"fe85:6:7::3332\");\n    test = (3, 2);\n    let url = &format!(\n        \"{}/2/v6/dest?from=aaaa:0:0:0::aaaa&key=ffff:ffff:c:0:0:c:1234:ffff\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"5555:ffff:c::c:1234:5555\");\n    test = (3, 3);\n    let url = &format!(\n        \"{}/2/v6/dest?from=feed:beef:deaf:bad:cafe::&key=::dab:bed:ace:dad\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"feed:beef:deaf:bad:c755:bed:ace:dad\");\n    test = (3, 4);\n    let url = &format!(\"{}/2/v6/key?from=fe80::1&to=fe85:6:7::3332\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"5:6:7::3333\");\n    test = (3, 5);\n    let url = &format!(\n        \"{}/2/v6/key?from=aaaa::aaaa&to=5555:ffff:c:0:0:c:1234:5555\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"ffff:ffff:c::c:1234:ffff\");\n    test = (3, 6);\n    let url = &format!(\n        \"{}/2/v6/key?from=feed:beef:deaf:bad:cafe::&to=feed:beef:deaf:bad:c755:bed:ace:dad\",\n        base_url\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_text!(res, test, \"::dab:bed:ace:dad\");\n    // TASK 3 DONE\n    tx.send((false, 50).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_5(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    let url = &format!(\"{}/5/manifest\", base_url);\n    const CT: &str = \"Content-Type\";\n    const TOML: &str = \"application/toml\";\n    const YAML: &str = \"application/yaml\";\n    const JSON: &str = \"application/json\";\n    // TASK 1: order list\n    test = (1, 1);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"not-a-gift-order\"\nauthors = [\"Not Santa\"]\nkeywords = [\"Christmas 2024\"]\n\n[[package.metadata.orders]]\nitem = \"Toy car\"\nquantity = 2\n\n[[package.metadata.orders]]\nitem = \"Lego brick\"\nquantity = 230\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Toy car: 2\\nLego brick: 230\");\n    test = (1, 2);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"coal-in-a-bowl\"\nauthors = [\"H4CK3R_13E7\"]\nkeywords = [\"Christmas 2024\"]\n\n[[package.metadata.orders]]\nitem = \"Coal\"\nquantity = \"Hahaha get rekt\"\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::NO_CONTENT);\n    test = (1, 3);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"coal-in-a-bowl\"\nauthors = [\"H4CK3R_13E7\"]\nkeywords = [\"Christmas 2024\"]\n\npackage.metadata.orders = []\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::NO_CONTENT);\n    test = (1, 4);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"not-a-gift-order\"\nauthors = [\"Not Santa\"]\nkeywords = [\"Christmas 2024\"]\n\n[[package.metadata.orders]]\nitem = \"Toy car\"\nquantity = 2\n\n[[package.metadata.orders]]\nitem = \"Lego brick\"\nquantity = 1.5\n\n[[package.metadata.orders]]\nitem = \"Doll\"\nquantity = 2\n\n[[package.metadata.orders]]\nquantity = 5\nitem = \"Cookie:::\\n\"\n\n[[package.metadata.orders]]\nitem = \"Thing\"\ncount = 3\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Toy car: 2\\nDoll: 2\\nCookie:::\\n: 5\");\n    // TASK 1 DONE\n    tx.send((false, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2: manifest parsing\n    test = (2, 1);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = false\nauthors = [\"Not Santa\"]\nkeywords = [\"Christmas 2024\"]\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    assert_text!(res, test, \"Invalid manifest\");\n    test = (2, 2);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"not-a-gift-order\"\nauthors = [\"Not Santa\"]\nkeywords = [\"Christmas 2024\"]\n\n[profile.release]\nincremental = \"stonks\"\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    assert_text!(res, test, \"Invalid manifest\");\n    test = (2, 3);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"big-chungus\"\nversion = \"2.0.24\"\nedition = \"2024\"\nresolver = \"2\"\nreadme.workspace = true\nkeywords = [\"Christmas 2024\"]\n\n[dependencies]\nshuttle-runtime = \"1.0.0+when\"\n\n[target.shuttlings.dependencies]\ncch24-validator = \"5+more\"\n\n[profile.release]\nincremental = false\n\n[package.metadata.stuff]\nthing = [\"yes\", \"no\"]\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::NO_CONTENT);\n    test = (2, 4);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"chig-bungus\"\nedition = \"2023\"\n\n[workspace.dependencies]\nshuttle-bring-your-own-cloud = \"0.0.0\"\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    assert_text!(res, test, \"Invalid manifest\");\n    test = (2, 5);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"chig-bungus\"\n\n[workspace]\nresolver = \"135\"\n\n[workspace.dependencies]\nshuttle-bring-your-own-cloud = \"0.0.0\"\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    assert_text!(res, test, \"Invalid manifest\");\n    // TASK 2 DONE\n    tx.send((false, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 3: keyword\n    test = (3, 1);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"grass\"\nauthors = [\"A vegan cow\"]\nkeywords = [\"Moooooo\"]\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    assert_text!(res, test, \"Magic keyword not provided\");\n    test = (3, 2);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"chig-bungus\"\n\n[workspace]\nresolver = \"2\"\n\n[workspace.dependencies]\nshuttle-bring-your-own-cloud = \"0.0.0\"\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    assert_text!(res, test, \"Magic keyword not provided\");\n    test = (3, 3);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"slurp\"\nauthors = [\"A crazy cow\"]\nkeywords = [\"MooOooooooOOOOoo00oo=oOooooo\", \"Mew\", \"Moh\", \"Christmas 2024\"]\nmetadata.orders = [{ item = \"Milk 🥛\", quantity = 1 }]\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk 🥛: 1\");\n    test = (3, 4);\n    let res = client\n        .post(url)\n        .header(CT, TOML)\n        .body(\n            r#\"\n[package]\nname = \"snow\"\nauthors = [\"The Cow of Christmas\"]\nkeywords = [\"Moooooo Merry Christmas 2024\"]\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    assert_text!(res, test, \"Magic keyword not provided\");\n    // TASK 3 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 4: Yaml, Json\n    test = (4, 1);\n    let res = client\n        .post(url)\n        .header(CT, \"text/html\")\n        .body(\"<h1>Hello, bird!</h1>\")\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::UNSUPPORTED_MEDIA_TYPE);\n    test = (4, 2);\n    let res = client\n        .post(url)\n        .header(CT, YAML)\n        .body(\n            r#\"\npackage:\n  name: big-chungus-sleigh\n  version: \"2.0.24\"\n  metadata:\n    orders:\n      - item: \"Toy train\"\n        quantity: 5\n      - item: \"Toy car\"\n        quantity: 3\n  rust-version: \"1.69\"\n  keywords:\n    - \"Christmas 2024\"\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Toy train: 5\\nToy car: 3\");\n    test = (4, 3);\n    let res = client\n        .post(url)\n        .header(CT, YAML)\n        .body(\n            r#\"\npackage:\n  name: big-chungus-sleigh\n  metadata:\n    orders:\n      - item: \"Toy train\"\n        quantity: 5\n      - item: \"Coal\"\n      - item: \"Horse\"\n        quantity: 2\n  keywords:\n    - \"Christmas 2024\"\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Toy train: 5\\nHorse: 2\");\n    test = (4, 4);\n    let res = client\n        .post(url)\n        .header(CT, YAML)\n        .body(\n            r#\"\npackage:\n  name: big-chungus-sleigh\n  metadata:\n    orders:\n      - item: \"Toy train\"\n        quantity: 5\n  rust-version: true\n  keywords:\n    - \"Christmas 2024\"\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    assert_text!(res, test, \"Invalid manifest\");\n    test = (4, 5);\n    let res = client\n        .post(url)\n        .header(CT, JSON)\n        .body(\n            r#\"\n{\n  \"package\": {\n    \"name\": \"big-chungus-sleigh\",\n    \"version\": \"2.0.24\",\n    \"metadata\": {\n      \"orders\": [\n        {\n          \"item\": \"Toy train\",\n          \"quantity\": 5\n        },\n        {\n          \"item\": \"Toy car\",\n          \"quantity\": 3\n        }\n      ]\n    },\n    \"rust-version\": \"1.69\",\n    \"keywords\": [\n      \"Christmas 2024\"\n    ]\n  }\n}\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Toy train: 5\\nToy car: 3\");\n    test = (4, 6);\n    let res = client\n        .post(url)\n        .header(CT, JSON)\n        .body(\n            r#\"\n{\n  \"package\": {\n    \"name\": \"big-chungus-sleigh\",\n    \"metadata\": {\n      \"orders\": [\n        {\n          \"item\": \"Toy train\",\n          \"quantity\": 5\n        },\n        {\n          \"item\": \"Coal\"\n        },\n        {\n          \"item\": \"Horse\",\n          \"quantity\": 2\n        }\n      ]\n    },\n    \"keywords\": [\n      \"Christmas 2024\"\n    ]\n  }\n}\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Toy train: 5\\nHorse: 2\");\n    test = (4, 7);\n    let res = client\n        .post(url)\n        .header(CT, JSON)\n        .body(\n            r#\"\n{\n  \"package\": {\n    \"name\": \"big-chungus-sleigh\",\n    \"metadata\": {\n      \"orders\": [\n        {\n          \"item\": \"Toy train\",\n          \"quantity\": 5\n        }\n      ]\n    }\n  }\n}\n\"#,\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    assert_text!(res, test, \"Magic keyword not provided\");\n    // TASK 4 DONE\n    tx.send((false, 70).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_9(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1: leaky bucket\n    test = (1, 1);\n    let url = &format!(\"{}/9/milk\", base_url);\n    let start = Utc::now();\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let end = Utc::now();\n    if end - start > TimeDelta::milliseconds(500) {\n        tx.send(SubmissionUpdate::LogLine(\n            \"Info: High network latency detected. This test is timing-sensitive and might therefore fail.\".to_owned()\n        ))\n        .await\n        .unwrap();\n    }\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::TOO_MANY_REQUESTS);\n    assert_text!(res, test, \"No milk available\\n\");\n    sleep(Duration::from_secs(1)).await;\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::TOO_MANY_REQUESTS);\n    assert_text!(res, test, \"No milk available\\n\");\n    sleep(Duration::from_secs(2)).await;\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::TOO_MANY_REQUESTS);\n    assert_text!(res, test, \"No milk available\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::TOO_MANY_REQUESTS);\n    assert_text!(res, test, \"No milk available\\n\");\n    // TASK 1 DONE\n    tx.send((false, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // reset bucket\n    sleep(Duration::from_secs(5)).await;\n\n    // TASK 2: gallons\n    test = (2, 1);\n    let res = client\n        .post(url)\n        .json(&json!({\"liters\": 2}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let j = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    assert_!(\n        test,\n        j.as_object().is_some_and(|o| o.len() == 1\n            && o.get(\"gallons\").is_some_and(|g| g\n                .as_f64()\n                .is_some_and(|f| (f / 0.5283441 - 1.0).abs() < 0.0001)))\n    );\n    test = (2, 2);\n    let res = client\n        .post(url)\n        .json(&json!({\"gallons\": -2.000000000000001}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let j = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    assert_!(\n        test,\n        j.as_object().is_some_and(|o| o.len() == 1\n            && o.get(\"liters\").is_some_and(|g| g\n                .as_f64()\n                .is_some_and(|f| (f / -7.5708237 - 1.0).abs() < 0.0001)))\n    );\n    test = (2, 3);\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    test = (2, 4);\n    let res = client\n        .post(url)\n        .json(&json!({}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (2, 5);\n    let res = client\n        .post(url)\n        .json(&json!({\"liters\": 0, \"gallons\": 1337}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (2, 6);\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::TOO_MANY_REQUESTS);\n    assert_text!(res, test, \"No milk available\\n\");\n    test = (2, 7);\n    sleep(Duration::from_secs(1)).await;\n    let res = client\n        .post(url)\n        .header(\"Content-Type\", \"application/json\")\n        .body(\"\")\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (2, 8);\n    sleep(Duration::from_secs(1)).await;\n    let res = client\n        .post(url)\n        .header(\"Content-Type\", \"application/json\")\n        .body(\"\")\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (2, 9);\n    sleep(Duration::from_secs(1)).await;\n    let res = client\n        .post(url)\n        .header(\"Content-Type\", \"application/json\")\n        .body(\"{'liters':0}\")\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (2, 10);\n    sleep(Duration::from_secs(1)).await;\n    let res = client\n        .post(url)\n        // (incoming f32 is truncated)\n        .json(&json!({\"liters\": 123123123123.0}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let j = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    assert_!(\n        test,\n        j.as_object().is_some_and(|o| o.len() == 1\n            && o.get(\"gallons\").is_some_and(|g| g\n                .as_f64()\n                .is_some_and(|f| (f / 32525687000.0 - 1.0).abs() < 0.0001)))\n    );\n    test = (2, 11);\n    sleep(Duration::from_secs(1)).await;\n    let res = client\n        .post(url)\n        .header(\"Content-Type\", \"text/html\")\n        .body(r#\"{\"liters\":0}\"#)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    // TASK 2 DONE\n    tx.send((false, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // reset bucket\n    sleep(Duration::from_secs(5)).await;\n\n    // TASK 3: litres/pints\n    test = (3, 1);\n    let res = client\n        .post(url)\n        .json(&json!({\"litres\": 7.4}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let j = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    assert_!(\n        test,\n        j.as_object().is_some_and(|o| o.len() == 1\n            && o.get(\"pints\").is_some_and(|g| g\n                .as_f64()\n                .is_some_and(|f| (f / 13.02218 - 1.0).abs() < 0.0001)))\n    );\n    test = (3, 2);\n    let res = client\n        .post(url)\n        .json(&json!({\"pints\": 32630.25}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let j = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    assert_!(\n        test,\n        j.as_object().is_some_and(|o| o.len() == 1\n            && o.get(\"litres\").is_some_and(|g| g\n                .as_f64()\n                .is_some_and(|f| (f / 18542.508 - 1.0).abs() < 0.0001)))\n    );\n    test = (3, 3);\n    let res = client\n        .post(url)\n        .json(&json!({\"litres\": -0.0}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let j = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n    assert_!(\n        test,\n        j.as_object().is_some_and(|o| o.len() == 1\n            && o.get(\"pints\")\n                .is_some_and(|g| g.as_f64().is_some_and(|f| f == 0.0)))\n    );\n    test = (3, 4);\n    let res = client\n        .post(url)\n        .json(&json!({\"litres\": 7.4, \"liters\": 7.4}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (3, 5);\n    let res = client\n        .post(url)\n        .json(r#\"{\"litres\": 7.4, \"litres\": 7.6}\"#)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (3, 6);\n    sleep(Duration::from_secs(1)).await;\n    let res = client\n        .post(url)\n        .json(&json!({\"gallons\": 2, \"pints\": 0}))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (3, 7);\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::TOO_MANY_REQUESTS);\n    assert_text!(res, test, \"No milk available\\n\");\n    // TASK 3 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 4: refill\n    test = (4, 1);\n    let refill_url = &format!(\"{}/9/refill\", base_url);\n    let res = client.post(refill_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    test = (4, 2);\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::TOO_MANY_REQUESTS);\n    assert_text!(res, test, \"No milk available\\n\");\n    let res = client.post(refill_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, \"Milk withdrawn\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::TOO_MANY_REQUESTS);\n    assert_text!(res, test, \"No milk available\\n\");\n    let res = client.post(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::TOO_MANY_REQUESTS);\n    assert_text!(res, test, \"No milk available\\n\");\n    // TASK 4 DONE\n    tx.send((false, 75).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_12(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1: board and reset\n    test = (1, 1);\n    let reset_url = &format!(\"{}/12/reset\", base_url);\n    let res = client.post(reset_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    test = (1, 2);\n    let board_url = &format!(\"{}/12/board\", base_url);\n    let res = client.get(board_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    // TASK 1 DONE\n    tx.send((false, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2: gameplay\n    test = (2, 1);\n    let res = client.post(reset_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    async fn place(\n        client: &Client,\n        base_url: &str,\n        test: TaskTest,\n        team: &str,\n        col: i32,\n    ) -> Result<reqwest::Response, TaskTest> {\n        client\n            .post(format!(\"{}/12/place/{}/{}\", base_url, team, col))\n            .send()\n            .await\n            .map_err(|_| test)\n    }\n    let res = place(&client, base_url, test, \"cookie\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    let res = place(&client, base_url, test, \"cookie\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    let res = place(&client, base_url, test, \"cookie\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜⬛⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    let res = place(&client, base_url, test, \"cookie\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n\"\n    );\n    let res = place(&client, base_url, test, \"cookie\", 1).await?;\n    assert_status!(res, test, StatusCode::SERVICE_UNAVAILABLE);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n\"\n    );\n    let res = place(&client, base_url, test, \"milk\", 2).await?;\n    assert_status!(res, test, StatusCode::SERVICE_UNAVAILABLE);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n\"\n    );\n    let res = client.get(board_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜🍪⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n\"\n    );\n    test = (2, 2);\n    let res = client.post(reset_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    let res = place(&client, base_url, test, \"cookie\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 2).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 2).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 3).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 3).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 3).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 4).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 4).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 4).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 4).await?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜⬛⬛⬛🍪⬜\n⬜⬛⬛🍪🥛⬜\n⬜⬛🍪🥛🥛⬜\n⬜🍪🥛🥛🥛⬜\n⬜⬜⬜⬜⬜⬜\n🍪 wins!\n\"\n    );\n    tokio::time::sleep(Duration::from_millis(1000)).await;\n    test = (2, 3);\n    let res = client.post(reset_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    let res = place(&client, base_url, test, \"cookie\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 2).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 2).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 2).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 2).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 3).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 3).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 3).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 3).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 4).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 4).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 4).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 4).await?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜🥛🍪🥛🍪⬜\n⬜🍪🥛🍪🥛⬜\n⬜🍪🥛🍪🥛⬜\n⬜🍪🥛🍪🥛⬜\n⬜⬜⬜⬜⬜⬜\nNo winner.\n\"\n    );\n    tokio::time::sleep(Duration::from_millis(1000)).await;\n    test = (2, 4);\n    let res = client.post(reset_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬛⬛⬛⬛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    let res = place(&client, base_url, test, \"cookie\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 2).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 2).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 2).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 3).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 3).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 2).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 4).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 3).await?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"milk\", 1).await?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(\n        res,\n        test,\n        \"\\\n⬜🥛🥛⬛⬛⬜\n⬜🍪🥛🍪⬛⬜\n⬜🥛🍪🥛⬛⬜\n⬜🍪🥛🍪🥛⬜\n⬜⬜⬜⬜⬜⬜\n🥛 wins!\n\"\n    );\n    test = (2, 5);\n    let res = place(&client, base_url, test, \"milk\", 4).await?;\n    assert_status!(res, test, StatusCode::SERVICE_UNAVAILABLE);\n    let res = client.post(reset_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = place(&client, base_url, test, \"cookie\", 0).await?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    let res = place(&client, base_url, test, \"cookie\", 5).await?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    let res = place(&client, base_url, test, \"cookie\", -2).await?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    let res = client\n        .post(format!(\"{}/12/place/cookie/one\", base_url))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    let res = place(&client, base_url, test, \"plastic\", 1).await?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    // TASK 2 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 3: random\n    test = (3, 1);\n    let url = &format!(\"{}/12/random-board\", base_url);\n    let res = client.post(reset_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text_starts_with!(\n        res,\n        test,\n        \"\\\n⬜🍪🍪🍪🍪⬜\n⬜🥛🍪🍪🥛⬜\n⬜🥛🥛🥛🥛⬜\n⬜🍪🥛🍪🥛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text_starts_with!(\n        res,\n        test,\n        \"\\\n⬜🍪🥛🍪🍪⬜\n⬜🥛🍪🥛🍪⬜\n⬜🥛🍪🍪🍪⬜\n⬜🍪🥛🥛🥛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text_starts_with!(\n        res,\n        test,\n        \"\\\n⬜🍪🍪🥛🍪⬜\n⬜🍪🥛🍪🍪⬜\n⬜🥛🍪🍪🥛⬜\n⬜🍪🥛🍪🍪⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text_starts_with!(\n        res,\n        test,\n        \"\\\n⬜🥛🍪🍪🥛⬜\n⬜🥛🍪🍪🍪⬜\n⬜🍪🥛🥛🥛⬜\n⬜🍪🥛🍪🥛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text_starts_with!(\n        res,\n        test,\n        \"\\\n⬜🥛🥛🥛🍪⬜\n⬜🍪🍪🍪🥛⬜\n⬜🥛🍪🍪🥛⬜\n⬜🍪🥛🥛🍪⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    let res = client.post(reset_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text_starts_with!(\n        res,\n        test,\n        \"\\\n⬜🍪🍪🍪🍪⬜\n⬜🥛🍪🍪🥛⬜\n⬜🥛🥛🥛🥛⬜\n⬜🍪🥛🍪🥛⬜\n⬜⬜⬜⬜⬜⬜\n\"\n    );\n    // TASK 3 DONE\n    tx.send((false, 75).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_16(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let mut test: TaskTest;\n    // TASK 1: jwt cookie\n    test = (1, 1);\n    let url1 = &format!(\"{}/16/wrap\", base_url);\n    let url2 = &format!(\"{}/16/unwrap\", base_url);\n    let client = new_client_with_cookies();\n    let payload = json!({\"cookie\": \"yum\"});\n    let res = client\n        .post(url1)\n        .json(&payload)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let h = res\n        .headers()\n        .get(header::SET_COOKIE)\n        .ok_or(test)?\n        .to_str()\n        .map_err(|_| test)?;\n    let h = h.strip_prefix(\"gift=\").ok_or(test)?;\n    decode_header(h).map_err(|_| test)?;\n    let res = client.get(url2).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_text!(res, test, serde_json::to_string(&payload).unwrap());\n    test = (1, 2);\n    let c1 = new_client_with_cookies();\n    let c2 = new_client_with_cookies();\n    let c3 = new_client_with_cookies();\n    let p1 = json!({\"recipient\": \"p1\", \"gifts\": [\"Toy train\", \"Caramel corn\", \"Potato\"]});\n    let p2 = json!({\"recipient\": \"p2\", \"gifts\": [\"Toy train\", \"Caramel corn\", \"Potato\"]});\n    let p3 = json!({\"recipient\": \"p3\", \"gifts\": [\"Toy train\", \"Caramel corn\", \"Potato\"]});\n    let res = c1.post(url1).json(&p1).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = c2.post(url1).json(&p2).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = c3.post(url1).json(&p3).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let res = c1.get(url2).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_json!(res, test, p1);\n    let res = c3.get(url2).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_json!(res, test, p3);\n    test = (1, 3);\n    let client = new_client();\n    let res = client.get(url2).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (1, 4);\n    let client = new_client();\n    let res = client\n        .get(url2)\n        .header(\"Cookie\", \"candy=5\")\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2: decode\n    let client = new_client();\n    let url = &format!(\"{}/16/decode\", base_url);\n    test = (2, 1);\n    let res = client\n        .post(url)\n        .body(\n            \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJyZWluZGVlclNuYWNrIjoiY2Fycm90cyIsInNhbnRhSGF0Q29sb3IiOiJyZWQiLCJzbm93R2xvYmVDb2xsZWN0aW9uIjo1LCJzdG9ja2luZ1N0dWZmZXJzIjpbInlvLXlvIiwiY2FuZHkiLCJrZXljaGFpbiJdLCJ0cmVlSGVpZ2h0Ijo3fQ.EoWSlwZIMHdtd96U_FkfQ9SkbzskSvgEaRpsUeZQFJixDW57vZud_k-MK1R1LEGoJRPGttJvG_5ewdK9O46OuaGW4DHIOWIFLxSYFTJBdFMVmAWC6snqartAFr2U-LWxTwJ09WNpPBcL67YCx4HQsoGZ2mxRVNIKxR7IEfkZDhmpDkiAUbtKyn0H1EVERP1gdbzHUGpLd7wiuzkJnjenBgLPifUevxGPgj535cp8I6EeE4gLdMEm3lbUW4wX_GG5t6_fDAF4URfiAOkSbiIW6lKcSGD9MBVEGps88lA2REBEjT4c7XHw4Tbxci2-knuJm90zIA9KX92t96tF3VFKEA\"\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_json!(\n        res,\n        test,\n        json!({\"stockingStuffers\":[\"yo-yo\",\"candy\",\"keychain\"],\"reindeerSnack\":\"carrots\",\"treeHeight\":7,\"santaHatColor\":\"red\",\"snowGlobeCollection\":5})\n    );\n    test = (2, 2);\n    let res = client\n        .post(url)\n        .body(\n            \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJnaWZ0cyI6WyJDb2FsIl19.DaVXV_czINRO1Cvhw33YSPSpV7_TYTqp7gIB_XiVl5fh3K9zkmDItBFLxJHyb7TRw_CGrAYwfinxn6_Dn9MMhp8d3tc-UnRskOxNHpqwU9EcbDtn31uHStT5sLfzdK0fdAc1XUJnr-9dbiGiYARO9YK7HAijdR8bCRMtvMUgIHsumWHO5BEE4CCeVgypzkebsoaev495OE0VNCfn1rSbTKR12xiIFoPCZALV9_slqoZvO59K0x8DSppx7uHApGjXvS6JmyjVgMJNuJoPrIYzc0nytVCa5uLjYIadS2inw7Sty1Jj-sLi8AgtYCXcpyB59MUXNP5xze_Sat8hmQ_NzQ\"\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::UNAUTHORIZED);\n    test = (2, 3);\n    let res = client\n        .post(url)\n        .body(\n            \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJjYW5kbGVTY2VudHMiOlsicGluZSIsImNpbm5hbW9uIiwidmFuaWxsYSJdLCJmZXN0aXZlU29ja3MiOjEyLCJnaWZ0VGFncyI6WyJwZXJzb25hbGl6ZWQiLCJibGFuayIsInNwYXJrbHkiXSwiZ2luZ2VyYnJlYWRIb3VzZUtpdHMiOjMsImhvdENvY29hU3RvY2siOjI1fQ.GgYB9NXomy-s_lzmoRC-BFHUvrSMjDMcZ4jFCre6NaPJA2fKr--cadxerpody-H5wV19N2zguNb5gr6dt7-suegC8D2ANe9mExohY9tuqgGKRJdLqtmb8U91T_iRg2kyAyhrv3HlSUHQP3sxvAO7jcwLtbePQehtzb6Hv9tZqNCojxMJmAhrJxz41fnD9wvTsEZVpQVwo21C-GIpZKRUGJnaL6OU9IAY6D4PMUr4X9OjEC1zSdQWpYUW_8CHrGNYPVg-6ZpdEvkejxZGTwPg8pMPPSxRa6g0v7Scx-50pgjcP15VK2OUaF9xce7MReJOgI2dxtF35DpYT-UNsIWDKg\"\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_json!(\n        res,\n        test,\n        json!({\"giftTags\":[\"personalized\",\"blank\",\"sparkly\"],\"hotCocoaStock\":25,\"candleScents\":[\"pine\",\"cinnamon\",\"vanilla\"],\"gingerbreadHouseKits\":3,\"festiveSocks\":12})\n    );\n    test = (2, 4);\n    let res = client\n        .post(url)\n        .body(\n            \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzUxMiJ9.eyJjYXJvbGluZ1JvdXRlIjpbIk1haW4gU3RyZWV0IiwiRWxtIEF2ZW51ZSIsIkJha2VyIFN0cmVldCJdLCJjb29raWVSZWNpcGVzIjpbInN1Z2FyIGNvb2tpZXMiLCJzbmlja2VyZG9vZGxlcyIsInNob3J0YnJlYWQiXSwiZmVzdGl2ZVB1bmNoSW5ncmVkaWVudHMiOlsiY3JhbmJlcnJ5IGp1aWNlIiwiZ2luZ2VyIGFsZSIsIm9yYW5nZSBzbGljZXMiXSwiZmlyZXBsYWNlTWFudGxlRGVjb3IiOlsiZ2FybGFuZCIsInN0b2NraW5ncyIsImNhbmRsZXMiXSwiZ2lmdENhcmRPcHRpb25zIjpbImJvb2tzdG9yZSIsImNvZmZlZSBzaG9wIiwib25saW5lIHJldGFpbGVyIl0sImhvbGlkYXlDYXJkTGlzdCI6WyJmYW1pbHkiLCJmcmllbmRzIiwiY293b3JrZXJzIl0sIm51dGNyYWNrZXJDb2xsZWN0aW9uU2l6ZXMiOnsibGFyZ2UiOjEsIm1lZGl1bSI6Mywic21hbGwiOjV9LCJzbm93bWFuQnVpbGRpbmdLaXRzIjo0fQ.ZAThp4qXSV1eY8swvPa9OmQrTglgILGWHzR_DN-gslN1dYNPszb2Hy322hiHIht_ASdXcV7-LNatS-P1yIpg7YnIRpZUgg5_Cb3uvucuna0npqfV3U3tTeqDAikPCs5bc7pWjawVscvabJjDm-WPCwLe9o4YMCSFb_XPra6lAHARRrMyqms2PjjdBE3WcUT_wYQq7WwgChXCXHMCOa1XoKIMoegSesYdSXNbbrckDvwdty9GsASCHaX9TAIY4TNdSdl3RanqDlrRDdwjvs5A9dQUul-JzHLxvSodJAGqxxPODNG_P1l0KRlmlVZVZSRqgFC_wH3sziHyVsM1WayjWQ\"\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_json!(\n        res,\n        test,\n        json!({\"cookieRecipes\":[\"sugar cookies\",\"snickerdoodles\",\"shortbread\"],\"fireplaceMantleDecor\":[\"garland\",\"stockings\",\"candles\"],\"snowmanBuildingKits\":4,\"holidayCardList\":[\"family\",\"friends\",\"coworkers\"],\"nutcrackerCollectionSizes\":{\"small\":5,\"medium\":3,\"large\":1},\"festivePunchIngredients\":[\"cranberry juice\",\"ginger ale\",\"orange slices\"],\"carolingRoute\":[\"Main Street\",\"Elm Avenue\",\"Baker Street\"],\"giftCardOptions\":[\"bookstore\",\"coffee shop\",\"online retailer\"]})\n    );\n    test = (2, 5);\n    let res = client\n        .post(url)\n        .body(\n            \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJlbHZlcyI6WyJKaW5nbGUiLCJUd2lua2xlIiwiVGluc2VsIl0sImdpZnRGYWN0b3J5Ijp7ImxvY2F0aW9uIjoiTm9ydGggUG9sZSIsIm91dHB1dFBlckhvdXIiOjUwMDB9LCJnaWZ0SWRlYXMiOlsidG95IHRyYWluIiwiYWN0aW9uIGZpZ3VyZSIsInRlZGR5IGJlYXIiLCJsZWdvIHNldCJdLCJyZWluZGVlciI6IlJ1ZG9scGgiLCJzYW50YSI6eyJhZ2UiOjE3NTAsIm5hbWUiOiJLcmlzIEtyaW5nbGUifSwic3VycHJpc2VFbGVtZW50Ijp0cnVlLCJ3aXNobGlzdCI6eyJicm90aGVyIjoidmlkZW8gZ2FtZSIsImRhZCI6InNvY2tzIiwibW9tIjoiY2hvY29sYXRlcyIsInNpc3RlciI6InBvcCBjdWx0dXJlIHBvc3RlciJ9LCJ3cmFwcGluZyI6eyJwYXBlclR5cGVzIjpbImdsb3NzeSIsIm1hdHRlIiwic3BhcmtsZSJdfX0.lQDLhwqrWAn8jPV-lzPuEQE7fFt30yao5M7jADhg3ipwRYYOB8g9sT5TrIufKKCMpNk8qxxgZX9rGJrGVqmdVLRXmyMMgxhiVuboxtI8RlhAEgzNQR6z7G3OWJ-ZccOEHVjdXBQwtpQeLMwoDDHK6UnVsWSrLai5n-VI87QOyxz_2VVj_cR9mtsSEU9rMxZBly1KD5-f-pQHwOczOlAerdp-bgQpANH6uR94AQGENMRQaY7tr_ldh5DNpP9gL0K3oZD3HbEBvYv8OS498mq_09BqVFrp9nmgB4JGhYzNqyFbad8f52sdBRle-ewNR55uxDHq6e10IdJQ_PR34gGPjw\"\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::UNAUTHORIZED);\n    test = (2, 6);\n    let res = client\n        .post(url)\n        .body(\n            \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJjYW5keUNhbmVTdG9jayI6MTUwMCwiY2Fyb2xQbGF5bGlzdCI6WyJKaW5nbGUgQmVsbHMiLCJTaWxlbnQgTmlnaHQiLCJEZWNrIHRoZSBIYWxscyJdLCJmYXZvcml0ZUNvb2tpZXMiOlsiY2hvY29sYXRlIGNoaXAiLCJvYXRtZWFsIHJhaXNpbiIsImdpbmdlcmJyZWFkIl0sImdpZnRFeGNoYW5nZVJ1bGVzIjp7Im1heEJ1ZGdldCI6NTAsInRoZW1lIjoiaGFuZG1hZGUifSwicmVpbmRlZXJOYW1lcyI6WyJEYXNoZXIiLCJEYW5jZXIiLCJQcmFuY2VyIiwiVml4ZW4iLCJDb21ldCIsIkN1cGlkIiwiRG9ubmVyIiwiQmxpdHplbiJdLCJzZWNyZXRTYW50YSI6eyJkcmF3RGF0ZSI6IjIwMjMtMTItMDEiLCJwYXJ0aWNpcGFudHMiOlsiQWxpY2UiLCJCb2IiLCJDaGFybGllIl19LCJzbGVpZ2giOnsiY29sb3IiOiJyZWQiLCJmdWVsVHlwZSI6Im1hZ2ljIGR1c3QifSwidHJlZURlY29yYXRpb25zIjpbImxpZ2h0cyIsImJhdWJsZXMiLCJ0aW5zZWwiLCJzdGFyIl19.MGtse2G55XIZTSWa2IdNI6YCKsFKsGEonkH0iIlRUuELY6nBdPnLpI4oFEB4-yK8j2eVcQALS3J3YbVUk-LLpIazaVJ5uJ9r-VvBNZqe_Uih8GQjVmINMEHdQwh6v2T2h4FLOqs2wap4SS6q25BVz2v0urycbCo_6IiHvswgkqRk9ZBA_bFDXEKRCoKLdgcNxnYRbkbLVvOzVpvhHFRYOsiwBxBiMakkjp3ZmvV5vaMQaSFUsmW9CHoU0ffbdwOwyMUXrxphSYB7h4OAZeudnZa7ntoOZ6J3PJQCTvgU7llffTPcdoO6LVoXSD8hiIfvJWPKgsOgasyG_xEQmfGcsA\"\n        )\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::UNAUTHORIZED);\n    for (test, txt) in [\n        ((2, 7), \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJyZWluZGVlclNuYWNrIjoiY2Fycm90cyIsInNhbnRhSGF0Q29sb3IiOiJyZWQiLCJzbm93R2xvYmVDb2xsZWN0aW9uIjo1LCJzdG9ja2luZ1N0dWZmZXJzIjpbInlvLXlvIiwiY2FuZHkiLCJrZXljaGFpbiJdLCJ0cmVlSGVpZ2h0Ijo3fQEoWSlwZIMHdtd96U_FkfQ9SkbzskSvgEaRpsUeZQFJixDW57vZud_k-MK1R1LEGoJRPGttJvG_5ewdK9O46OuaGW4DHIOWIFLxSYFTJBdFMVmAWC6snqartAFr2U-LWxTwJ09WNpPBcL67YCx4HQsoGZ2mxRVNIKxR7IEfkZDhmpDkiAUbtKyn0H1EVERP1gdbzHUGpLd7wiuzkJnjenBgLPifUevxGPgj535cp8I6EeE4gLdMEm3lbUW4wX_GG5t6_fDAF4URfiAOkSbiIW6lKcSGD9MBVEGps88lA2REBEjT4c7XHw4Tbxci2-knuJm90zIA9KX92t96tF3VFKEA\"),\n        ((2, 8), \"eyJ0eXAiOiJKV1QiLCJhbGci0iJSUzI1NiJ9.eyJyZWluZGVlclNuYWNrIjoiY2Fycm90cyIsInNhbnRhSGF0Q29sb3IiOiJyZWQiLCJzbm93R2xvYmVDb2xsZWN0aW9uIjo1LCJzdG9ja2luZ1N0dWZmZXJzIjpbInlvLXlvIiwiY2FuZHkiLCJrZXljaGFpbiJdLCJ0cmVlSGVpZ2h0Ijo3fQ.EoWSlwZIMHdtd96U_FkfQ9SkbzskSvgEaRpsUeZQFJixDW57vZud_k-MK1R1LEGoJRPGttJvG_5ewdK9O46OuaGW4DHIOWIFLxSYFTJBdFMVmAWC6snqartAFr2U-LWxTwJ09WNpPBcL67YCx4HQsoGZ2mxRVNIKxR7IEfkZDhmpDkiAUbtKyn0H1EVERP1gdbzHUGpLd7wiuzkJnjenBgLPifUevxGPgj535cp8I6EeE4gLdMEm3lbUW4wX_GG5t6_fDAF4URfiAOkSbiIW6lKcSGD9MBVEGps88lA2REBEjT4c7XHw4Tbxci2-knuJm90zIA9KX92t96tF3VFKEA\"),\n        ((2, 9), \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJy.ZWluZGVlclNuYWNrIjoiY2Fycm90cyIsInNhbnRhSGF0Q29sb3IiOiJyZWQiLCJzbm93R2xvYmVDb2xsZWN0aW9uIjo1LCJzdG9ja2luZ1N0dWZmZXJzIjpbInlvLXlvIiwiY2FuZHkiLCJrZXljaGFpbiJdLCJ0cmVlSGVpZ2h0Ijo3fQ.EoWSlwZIMHdtd96U_FkfQ9SkbzskSvgEaRpsUeZQFJixDW57vZud_k-MK1R1LEGoJRPGttJvG_5ewdK9O46OuaGW4DHIOWIFLxSYFTJBdFMVmAWC6snqartAFr2U-LWxTwJ09WNpPBcL67YCx4HQsoGZ2mxRVNIKxR7IEfkZDhmpDkiAUbtKyn0H1EVERP1gdbzHUGpLd7wiuzkJnjenBgLPifUevxGPgj535cp8I6EeE4gLdMEm3lbUW4wX_GG5t6_fDAF4URfiAOkSbiIW6lKcSGD9MBVEGps88lA2REBEjT4c7XHw4Tbxci2-knuJm90zIA9KX92t96tF3VFKEA\"),\n        ((2, 10), \"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.ImNvYWwi.cTlGrCeHzvweR-b7U1PZn3fpNk5P_C8wjTo2s93itoYdzeJwUunHTfPY9MJ3Mmif_2MDveSf7b_xID4fRhnXzEBNblIXtlfoNE1lWGPurOvB8udxxJk30qM6sG-ldK79TKzt784ok1ecyuAP94vMjKK861YUoqq5bfZdr9YwIq0chJOx0RZG0zY2OS7VVoOG-SbOssHb-eZKysCt-r8zrIwJGXoSe6H5ZYX7dN5l9CbJ6t29D89I0SkZj2TI2unBG5UueXIw6VukwREzDPTKJTdh6AbnMRwoi7GGIlayhUaFtAGPrlnS2razOmAWndtSv9rDNELJirN2AQ7iyRbqyg\"),\n    ] {\n        let res = client.post(url).body(txt).send().await.map_err(|_| test)?;\n        assert_status!(res, test, StatusCode::BAD_REQUEST);\n    }\n    // TASK 2 DONE\n    tx.send((false, 200).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_19(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1: CRUD\n    test = (1, 1);\n    let reset_url = &format!(\"{}/19/reset\", base_url);\n    let cite_url = &format!(\"{}/19/cite\", base_url);\n    let remove_url = &format!(\"{}/19/remove\", base_url);\n    let undo_url = &format!(\"{}/19/undo\", base_url);\n    let draft_url = &format!(\"{}/19/draft\", base_url);\n    let res = client.post(reset_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n\n    async fn validate_quote(\n        res: reqwest::Response,\n        test: (i32, i32),\n        sent: &serde_json::Value,\n        version: i64,\n    ) -> Result<Uuid, TaskTest> {\n        quote_matches(\n            test,\n            sent,\n            &res.json::<serde_json::Value>().await.map_err(|_| test)?,\n            version,\n        )\n        .await\n    }\n    async fn quote_matches(\n        test: (i32, i32),\n        exp: &serde_json::Value,\n        act: &serde_json::Value,\n        version: i64,\n    ) -> Result<Uuid, TaskTest> {\n        assert_eq_!(test, act.as_object().ok_or(test)?.len(), 5);\n        assert_!(test, act.get(\"author\") == exp.get(\"author\"));\n        assert_!(test, act.get(\"quote\") == exp.get(\"quote\"));\n        assert_!(\n            test,\n            act.get(\"version\")\n                .is_some_and(|v| v.as_i64().is_some_and(|v| v == version))\n        );\n        act.get(\"created_at\")\n            .ok_or(test)?\n            .as_str()\n            .ok_or(test)?\n            .parse::<DateTime<Utc>>()\n            .map_err(|_| test)?;\n        let id: Uuid = act\n            .get(\"id\")\n            .ok_or(test)?\n            .as_str()\n            .ok_or(test)?\n            .parse()\n            .map_err(|_| test)?;\n\n        Ok(id)\n    }\n\n    let quote1 = json!({\"author\":\"Santa\",\"quote\":\"Ho ho ho! Spread cheer and kindness, for that's the true magic of the season!\"});\n    let quote2 = json!({\"author\":\"Santa's best elf\",\"quote\":\"In the glow of snow and twinkling light, dreams take flight on a magical night!\"});\n    let quote3 = json!({\"author\":\"Dasher\",\"quote\":\"Whoosh and clatter, my hooves pitter-patter!\"});\n    let quote4 = json!({\"author\":\"Polar Bear\",\"quote\":\"Roar!\"});\n    let res = client\n        .post(draft_url)\n        .json(&quote1)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::CREATED);\n    let id = validate_quote(res, test, &quote1, 1).await?;\n\n    let res = client\n        .get(format!(\"{}/{}\", cite_url, id))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    validate_quote(res, test, &quote1, 1).await?;\n\n    let res = client\n        .put(format!(\"{}/{}\", undo_url, id))\n        .json(&quote2)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let id2 = validate_quote(res, test, &quote2, 2).await?;\n    assert_eq_!(test, id, id2);\n\n    let res = client\n        .delete(format!(\"{}/{}\", remove_url, id))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    validate_quote(res, test, &quote2, 2).await?;\n\n    let res = client\n        .get(format!(\"{}/{}\", cite_url, id))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::NOT_FOUND);\n\n    test = (1, 2);\n    let res = client\n        .post(draft_url)\n        .json(&quote1)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::CREATED);\n    let id = validate_quote(res, test, &quote1, 1).await?;\n    let res = client\n        .post(draft_url)\n        .json(&quote1)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::CREATED);\n    let id2 = validate_quote(res, test, &quote1, 1).await?;\n    assert_neq_!(test, id, id2);\n\n    let res = client\n        .put(format!(\"{}/{}\", undo_url, id))\n        .json(&quote2)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    validate_quote(res, test, &quote2, 2).await?;\n    let res = client\n        .get(format!(\"{}/{}\", cite_url, id2))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    validate_quote(res, test, &quote1, 1).await?;\n    let res = client\n        .get(format!(\"{}/{}\", cite_url, id))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    validate_quote(res, test, &quote2, 2).await?;\n\n    let res = client\n        .put(format!(\"{}/{}\", undo_url, id))\n        .json(&quote3)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    validate_quote(res, test, &quote3, 3).await?;\n    let res = client\n        .put(format!(\"{}/{}\", undo_url, id))\n        .json(&quote1)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    validate_quote(res, test, &quote1, 4).await?;\n\n    test = (1, 3);\n    let res = client\n        .put(format!(\n            \"{}/{}\",\n            undo_url, \"00000000-0000-0000-0000-000000000000\"\n        ))\n        .json(&quote4)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::NOT_FOUND);\n    let res = client\n        .delete(format!(\n            \"{}/{}\",\n            remove_url, \"00000000-0000-0000-0000-000000000000\"\n        ))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::NOT_FOUND);\n    let res = client\n        .get(format!(\n            \"{}/{}\",\n            cite_url, \"00000000-0000-0000-0000-000000000000\"\n        ))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::NOT_FOUND);\n    let res = client\n        .put(format!(\"{}/{}\", undo_url, \"1234\"))\n        .json(&quote4)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n\n    // TASK 1 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 2: paginator\n    test = (2, 1);\n    let list_url = &format!(\"{}/19/list\", base_url);\n    async fn validate_quotes(\n        res: reqwest::Response,\n        test: (i32, i32),\n        sent: &[(&serde_json::Value, i64)],\n        page: i64,\n    ) -> Result<Option<String>, TaskTest> {\n        let json = res.json::<serde_json::Value>().await.map_err(|_| test)?;\n        assert_!(\n            test,\n            json.get(\"page\")\n                .is_some_and(|v| v.as_i64().is_some_and(|v| v == page))\n        );\n        let quotes = json.get(\"quotes\").ok_or(test)?.as_array().ok_or(test)?;\n        for ((v, version), quote) in sent.iter().zip(quotes.iter()) {\n            quote_matches(test, v, quote, *version).await?;\n        }\n        let next_token: Option<String> =\n            serde_json::from_value(json.get(\"next_token\").ok_or(test)?.clone())\n                .map_err(|_| test)?;\n        if let Some(t) = next_token.as_ref() {\n            if t.chars().any(|c| !c.is_ascii_alphanumeric()) || t.len() != 16 {\n                return Err(test);\n            }\n        }\n        Ok(next_token)\n    }\n    let res = client.get(list_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n = validate_quotes(res, test, &[(&quote1, 4), (&quote1, 1)], 1).await?;\n    assert_!(test, n.is_none());\n\n    let res = client\n        .post(draft_url)\n        .json(&quote3)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::CREATED);\n    let id3 = validate_quote(res, test, &quote3, 1).await?;\n    let res = client\n        .post(draft_url)\n        .json(&quote3)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::CREATED);\n    validate_quote(res, test, &quote3, 1).await?;\n\n    let res = client.get(list_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n = validate_quotes(res, test, &[(&quote1, 4), (&quote1, 1), (&quote3, 1)], 1).await?;\n    assert_!(test, n.is_some());\n    let res = client\n        .get(format!(\"{}?token={}\", list_url, n.unwrap()))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n = validate_quotes(res, test, &[(&quote3, 1)], 2).await?;\n    assert_!(test, n.is_none());\n\n    test = (2, 2);\n    let res = client\n        .delete(format!(\"{}/{}\", remove_url, id3))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    validate_quote(res, test, &quote3, 1).await?;\n    let res = client.get(list_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n = validate_quotes(res, test, &[(&quote1, 4), (&quote1, 1), (&quote3, 1)], 1).await?;\n    assert_!(test, n.is_none());\n\n    test = (2, 3);\n    let page1 = &[(&quote1, 4), (&quote1, 1), (&quote3, 1)];\n    let page2 = &[(&quote2, 1), (&quote2, 1), (&quote3, 1)];\n    let page3 = &[(&quote2, 1), (&quote3, 1), (&quote1, 1)];\n    for &(q, v) in page2.iter().chain(page3.iter()) {\n        let res = client\n            .post(draft_url)\n            .json(q)\n            .send()\n            .await\n            .map_err(|_| test)?;\n        assert_status!(res, test, StatusCode::CREATED);\n        validate_quote(res, test, q, v).await?;\n    }\n\n    let res = client.get(list_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n = validate_quotes(res, test, page1, 1).await?;\n    assert_!(test, n.is_some());\n    let res = client\n        .get(format!(\"{}?token={}\", list_url, n.unwrap()))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n = validate_quotes(res, test, page2, 2).await?;\n    assert_!(test, n.is_some());\n    let res = client\n        .get(format!(\"{}?token={}\", list_url, n.unwrap()))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n = validate_quotes(res, test, page3, 3).await?;\n    assert_!(test, n.is_none());\n\n    test = (2, 4);\n    let res = client\n        .get(format!(\"{}?token=asd987f69as87d6q\", list_url))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n\n    test = (2, 5);\n    let res = client.get(list_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n1 = validate_quotes(res, test, page1, 1).await?;\n    assert_!(test, n1.is_some());\n\n    let res = client.get(list_url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n2 = validate_quotes(res, test, page1, 1).await?;\n    assert_!(test, n2.is_some());\n\n    let res = client\n        .get(format!(\"{}?token={}\", list_url, n1.unwrap()))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n1 = validate_quotes(res, test, page2, 2).await?;\n    assert_!(test, n1.is_some());\n    let res = client\n        .get(format!(\"{}?token={}\", list_url, n1.unwrap()))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n1 = validate_quotes(res, test, page3, 3).await?;\n    assert_!(test, n1.is_none());\n\n    let res = client\n        .get(format!(\"{}?token={}\", list_url, n2.unwrap()))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n2 = validate_quotes(res, test, page2, 2).await?;\n    assert_!(test, n2.is_some());\n    let res = client\n        .get(format!(\"{}?token={}\", list_url, n2.unwrap()))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    let n2 = validate_quotes(res, test, page3, 3).await?;\n    assert_!(test, n2.is_none());\n\n    // TASK 2 DONE\n    tx.send((false, 75).into()).await.unwrap();\n\n    Ok(())\n}\n\nasync fn validate_23(base_url: &str, tx: Sender<SubmissionUpdate>) -> ValidateResult {\n    let client = new_client();\n    let mut test: TaskTest;\n    // TASK 1: serve\n    test = (1, 1);\n    let url = &format!(\"{}/assets/23.html\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    if res.text().await.map_err(|_| test)?.len() != 7163 {\n        return Err(test);\n    }\n    // TASK 1 DONE\n    tx.send((false, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    let comparer = HtmlComparer::with_options(HtmlCompareOptions {\n        ignore_whitespace: true,\n        ignore_attributes: false,\n        ignored_attributes: Default::default(),\n        ignore_text: false,\n        ignore_comments: true,\n        ignore_sibling_order: false,\n        ignore_style_contents: false,\n    });\n    macro_rules! assert_html {\n        ($res:expr, $test:expr, $comp:expr, $expected_html:expr) => {\n            if !$comp\n                .compare($expected_html, &$res.text().await.map_err(|_| $test)?)\n                .is_ok_and(|t| t)\n            {\n                return Err($test);\n            }\n        };\n    }\n    // TASK 2: star\n    test = (2, 1);\n    let url = &format!(\"{}/23/star\", base_url);\n    let res = client.get(url).send().await.map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(res, test, comparer, r#\"<div id=\"star\" class=\"lit\"></div>\"#);\n    // TASK 2 DONE\n    tx.send((false, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 3: present\n    test = (3, 1);\n    let res = client\n        .get(format!(\"{}/23/present/red\", base_url))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"<div class=\"present red\" hx-get=\"/23/present/blue\" hx-swap=\"outerHTML\"><div class=\"ribbon\"></div><div class=\"ribbon\"></div><div class=\"ribbon\"></div><div class=\"ribbon\"></div></div>\"#\n    );\n    let res = client\n        .get(format!(\"{}/23/present/blue\", base_url))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"<div class=\"present blue\" hx-get=\"/23/present/purple\" hx-swap=\"outerHTML\"><div class=\"ribbon\"></div><div class=\"ribbon\"></div><div class=\"ribbon\"></div><div class=\"ribbon\"></div></div>\"#\n    );\n    let res = client\n        .get(format!(\"{}/23/present/purple\", base_url))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"<div class=\"present purple\" hx-get=\"/23/present/red\" hx-swap=\"outerHTML\"><div class=\"ribbon\"></div><div class=\"ribbon\"></div><div class=\"ribbon\"></div><div class=\"ribbon\"></div></div>\"#\n    );\n    test = (3, 2);\n    let res = client\n        .get(format!(\"{}/23/present/green\", base_url))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::IM_A_TEAPOT);\n    // TASK 3 DONE\n    tx.send((false, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 4: ornament\n    test = (4, 1);\n    let res = client\n        .get(format!(\"{}/23/ornament/on/1\", base_url))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"<div class=\"ornament on\" id=\"ornament1\" hx-trigger=\"load delay:2s once\" hx-get=\"/23/ornament/off/1\" hx-swap=\"outerHTML\"></div>\"#\n    );\n    let res = client\n        .get(format!(\"{}/23/ornament/off/1\", base_url))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"<div class=\"ornament\" id=\"ornament1\" hx-trigger=\"load delay:2s once\" hx-get=\"/23/ornament/on/1\" hx-swap=\"outerHTML\"></div>\"#\n    );\n    let res = client\n        .get(format!(\"{}/23/ornament/off/100\", base_url))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"<div class=\"ornament\" id=\"ornament100\" hx-trigger=\"load delay:2s once\" hx-get=\"/23/ornament/on/100\" hx-swap=\"outerHTML\"></div>\"#\n    );\n    test = (4, 2);\n    let res = client\n        .get(format!(\"{}/23/ornament/on/the_prettiest_one\", base_url))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"<div class=\"ornament on\" id=\"ornamentthe_prettiest_one\" hx-trigger=\"load delay:2s once\" hx-get=\"/23/ornament/off/the_prettiest_one\" hx-swap=\"outerHTML\"></div>\"#\n    );\n    test = (4, 3);\n    let res = client\n        .get(format!(\"{}/23/ornament/maybe-on/1\", base_url))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::IM_A_TEAPOT);\n    // TASK 4 DONE\n    tx.send((false, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 5: injection\n    test = (5, 1);\n    let res = client\n        .get(format!(\n            \"{}/23/ornament/on/%22%3E%3Cscript%3Ealert%28%22Spicy%20soup%21%22%29%3C%2Fscript%3E\",\n            base_url\n        ))\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"<div class=\"ornament on\" id=\"ornament&quot;&gt;&lt;script&gt;alert(&quot;Spicy soup!&quot;)&lt;/script&gt;\" hx-trigger=\"load delay:2s once\" hx-get=\"/23/ornament/off/&quot;&gt;&lt;script&gt;alert(&quot;Spicy soup!&quot;)&lt;/script&gt;\" hx-swap=\"outerHTML\"></div>\"#\n    );\n    // TASK 5 DONE\n    tx.send((true, 0).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    // TASK 6: lockfile\n    test = (6, 1);\n    let url = &format!(\"{}/23/lockfile\", base_url);\n    let form = Form::new().part(\n        \"lockfile\",\n        Part::bytes(\n            r#\"[[package]]\nname = \"shuttle-runtime\"\nversion = \"0.49.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"337789faa0372648a8ac286b2f92a53121fe118f12e29009ac504872a5413cc6\"\n\n[[package]]\nname = \"shuttle-service\"\nversion = \"0.49.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"22ba454b13e4e29b5b892a62c334360a571de5a25c936283416c94328427dd57\"\n\"#\n            .as_bytes(),\n        )\n        .file_name(\"Cargo.lock\")\n        .mime_str(\"application/octet-stream\")\n        .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"\n<div style=\"background-color:#337789;top:250px;left:160px;\"></div>\n<div style=\"background-color:#22ba45;top:75px;left:19px;\"></div>\n\"#\n    );\n    test = (6, 2);\n    let form = Form::new().part(\n        \"lockfile\",\n        Part::bytes(\n            r#\"# This file is automatically @generated by Cargo.\n# It is not intended for manual editing.\nversion = 4\n\n[[package]]\nname = \"addr2line\"\nversion = \"0.24.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1\"\ndependencies = [\n \"gimli\",\n]\n\n[[package]]\nname = \"adler2\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627\"\n\n[[package]]\nname = \"ahash\"\nversion = \"0.8.11\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011\"\ndependencies = [\n \"cfg-if\",\n \"once_cell\",\n \"version_check\",\n \"zerocopy\",\n]\n\n[[package]]\nname = \"aho-corasick\"\nversion = \"1.1.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916\"\ndependencies = [\n \"memchr\",\n]\n\n[[package]]\nname = \"allocator-api2\"\nversion = \"0.2.21\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923\"\n\n[[package]]\nname = \"android-tzdata\"\nversion = \"0.1.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0\"\n\n[[package]]\nname = \"android_system_properties\"\nversion = \"0.1.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311\"\ndependencies = [\n \"libc\",\n]\n\n[[package]]\nname = \"anyhow\"\nversion = \"1.0.93\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775\"\n\n[[package]]\nname = \"askama\"\nversion = \"0.12.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b79091df18a97caea757e28cd2d5fda49c6cd4bd01ddffd7ff01ace0c0ad2c28\"\ndependencies = [\n \"askama_derive\",\n \"askama_escape\",\n \"humansize\",\n \"num-traits\",\n \"percent-encoding\",\n]\n\n[[package]]\nname = \"askama_axum\"\nversion = \"0.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"a41603f7cdbf5ac4af60760f17253eb6adf6ec5b6f14a7ed830cf687d375f163\"\ndependencies = [\n \"askama\",\n \"axum-core 0.4.5\",\n \"http 1.1.0\",\n]\n\n[[package]]\nname = \"askama_derive\"\nversion = \"0.12.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"19fe8d6cb13c4714962c072ea496f3392015f0989b1a2847bb4b2d9effd71d83\"\ndependencies = [\n \"askama_parser\",\n \"basic-toml\",\n \"mime\",\n \"mime_guess\",\n \"proc-macro2\",\n \"quote\",\n \"serde\",\n \"syn 2.0.89\",\n]\n\n[[package]]\nname = \"askama_escape\"\nversion = \"0.10.3\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341\"\n\n[[package]]\nname = \"askama_parser\"\nversion = \"0.2.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"acb1161c6b64d1c3d83108213c2a2533a342ac225aabd0bda218278c2ddb00c0\"\ndependencies = [\n \"nom\",\n]\n\n[[package]]\nname = \"async-stream\"\nversion = \"0.3.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476\"\ndependencies = [\n \"async-stream-impl\",\n \"futures-core\",\n \"pin-project-lite\",\n]\n\n[[package]]\nname = \"async-stream-impl\"\nversion = \"0.3.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"syn 2.0.89\",\n]\n\n[[package]]\nname = \"async-trait\"\nversion = \"0.1.83\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd\"\ndependencies = [\n \"proc-macro2\",\n \"quote\",\n \"syn 2.0.89\",\n]\n\n[[package]]\nname = \"atoi\"\nversion = \"2.0.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528\"\ndependencies = [\n \"num-traits\",\n]\n\n[[package]]\nname = \"autocfg\"\nversion = \"1.4.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26\"\n\n[[package]]\nname = \"axum\"\nversion = \"0.6.20\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3b829e4e32b91e643de6eafe82b1d90675f5874230191a4ffbc1b336dec4d6bf\"\ndependencies = [\n \"async-trait\",\n \"axum-core 0.3.4\",\n \"bitflags 1.3.2\",\n \"bytes\",\n \"futures-util\",\n \"http 0.2.12\",\n \"http-body 0.4.6\",\n \"hyper 0.14.31\",\n \"itoa\",\n \"matchit\",\n \"memchr\",\n \"mime\",\n \"percent-encoding\",\n \"pin-project-lite\",\n \"rustversion\",\n \"serde\",\n \"sync_wrapper 0.1.2\",\n \"tower 0.4.13\",\n \"tower-layer\",\n \"tower-service\",\n]\n\n[[package]]\nname = \"axum\"\nversion = \"0.7.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f\"\ndependencies = [\n \"async-trait\",\n \"axum-core 0.4.5\",\n \"bytes\",\n \"futures-util\",\n \"http 1.1.0\",\n \"http-body 1.0.1\",\n \"http-body-util\",\n \"hyper 1.5.1\",\n \"hyper-util\",\n \"itoa\",\n \"matchit\",\n \"memchr\",\n \"mime\",\n \"percent-encoding\",\n \"pin-project-lite\",\n \"rustversion\",\n \"serde\",\n \"serde_json\",\n \"serde_path_to_error\",\n \"serde_urlencoded\",\n \"sync_wrapper 1.0.2\",\n \"tokio\",\n \"tower 0.5.1\",\n \"tower-layer\",\n \"tower-service\",\n \"tracing\",\n]\n\n[[package]]\nname = \"axum-core\"\nversion = \"0.3.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"759fa577a247914fd3f7f76d62972792636412fbfd634cd452f6a385a74d2d2c\"\ndependencies = [\n \"async-trait\",\n \"bytes\",\n \"futures-util\",\n \"http 0.2.12\",\n \"http-body 0.4.6\",\n \"mime\",\n \"rustversion\",\n \"tower-layer\",\n \"tower-service\",\n]\n\n[[package]]\nname = \"axum-core\"\nversion = \"0.4.5\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199\"\ndependencies = [\n \"async-trait\",\n \"bytes\",\n \"futures-util\",\n \"http 1.1.0\",\n \"http-body 1.0.1\",\n \"http-body-util\",\n \"mime\",\n \"pin-project-lite\",\n \"rustversion\",\n \"sync_wrapper 1.0.2\",\n \"tower-layer\",\n \"tower-service\",\n \"tracing\",\n]\n\n[[package]]\nname = \"axum-extra\"\nversion = \"0.9.6\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04\"\ndependencies = [\n \"axum 0.7.9\",\n \"axum-core 0.4.5\",\n \"bytes\",\n \"cookie\",\n \"fastrand\",\n \"futures-util\",\n \"http 1.1.0\",\n \"http-body 1.0.1\",\n \"http-body-util\",\n \"mime\",\n \"multer\",\n \"pin-project-lite\",\n \"serde\",\n \"tower 0.5.1\",\n \"tower-layer\",\n \"tower-service\",\n]\n\n[[package]]\nname = \"backtrace\"\nversion = \"0.3.74\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a\"\ndependencies = [\n \"addr2line\",\n \"cfg-if\",\n \"libc\",\n \"miniz_oxide\",\n \"object\",\n \"rustc-demangle\",\n \"windows-targets 0.52.6\",\n]\n\n[[package]]\nname = \"base64\"\nversion = \"0.21.7\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567\"\n\n[[package]]\nname = \"base64\"\nversion = \"0.22.1\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6\"\n\n[[package]]\nname = \"base64ct\"\nversion = \"1.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b\"\n\n[[package]]\nname = \"basic-toml\"\nversion = \"0.1.9\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"823388e228f614e9558c6804262db37960ec8821856535f5c3f59913140558f8\"\ndependencies = [\n \"serde\",\n]\n\n[[package]]\nname = \"bitflags\"\nversion = \"1.3.2\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a\"\n\n[[package]]\nname = \"bitflags\"\nversion = \"2.6.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de\"\ndependencies = [\n \"serde\",\n]\n\n[[package]]\nname = \"block-buffer\"\nversion = \"0.10.4\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71\"\ndependencies = [\n \"generic-array\",\n]\n\n[[package]]\nname = \"bumpalo\"\nversion = \"3.16.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c\"\n\n[[package]]\nname = \"byteorder\"\nversion = \"1.5.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b\"\n\n[[package]]\nname = \"bytes\"\nversion = \"1.8.0\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da\"\n\n[[package]]\nname = \"shuttlings-cch24\"\nversion = \"0.1.0\"\ndependencies = [\n \"askama\",\n \"askama_axum\",\n \"axum 0.7.9\",\n \"axum-extra\",\n \"cargo-manifest\",\n \"chrono\",\n \"ipnet\",\n \"jsonwebtoken\",\n \"leaky-bucket\",\n \"rand\",\n \"serde\",\n \"serde_json\",\n \"serde_yml\",\n \"shuttle-axum\",\n \"shuttle-runtime\",\n \"shuttle-shared-db\",\n \"sqlx\",\n \"tokio\",\n \"toml\",\n \"tower-http\",\n \"uuid\",\n]\n\n[[package]]\nname = \"signal-hook\"\nversion = \"0.3.17\"\nsource = \"registry+https://github.com/rust-lang/crates.io-index\"\nchecksum = \"8621587d4798caf8eb44879d42e56b9a93ea5dcd315a6487c357130095b62801\"\ndependencies = [\n \"libc\",\n \"signal-hook-registry\",\n]\n\"#\n            .as_bytes(),\n        )\n        .file_name(\"Cargo.lock\")\n        .mime_str(\"application/octet-stream\")\n        .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"\n<div style=\"background-color:#dfbe27;top:126px;left:86px;\"></div>\n<div style=\"background-color:#512761;top:224px;left:187px;\"></div>\n<div style=\"background-color:#e89da8;top:65px;left:168px;\"></div>\n<div style=\"background-color:#8e60d3;top:67px;left:13px;\"></div>\n<div style=\"background-color:#683d79;top:16px;left:231px;\"></div>\n<div style=\"background-color:#e99994;top:27px;left:35px;\"></div>\n<div style=\"background-color:#819e72;top:25px;left:219px;\"></div>\n<div style=\"background-color:#4c95c1;top:11px;left:160px;\"></div>\n<div style=\"background-color:#b79091;top:223px;left:24px;\"></div>\n<div style=\"background-color:#a41603;top:247px;left:205px;\"></div>\n<div style=\"background-color:#19fe8d;top:108px;left:177px;\"></div>\n<div style=\"background-color:#619743;top:227px;left:75px;\"></div>\n<div style=\"background-color:#acb116;top:28px;left:107px;\"></div>\n<div style=\"background-color:#0b5a71;top:166px;left:243px;\"></div>\n<div style=\"background-color:#c7c24d;top:225px;left:93px;\"></div>\n<div style=\"background-color:#721cae;top:125px;left:229px;\"></div>\n<div style=\"background-color:#f28d99;top:236px;left:139px;\"></div>\n<div style=\"background-color:#ace50b;top:173px;left:232px;\"></div>\n<div style=\"background-color:#3b829e;top:78px;left:50px;\"></div>\n<div style=\"background-color:#edca88;top:188px;left:19px;\"></div>\n<div style=\"background-color:#759fa5;top:119px;left:162px;\"></div>\n<div style=\"background-color:#09f2bd;top:97px;left:70px;\"></div>\n<div style=\"background-color:#c794b3;top:12px;left:144px;\"></div>\n<div style=\"background-color:#8d82cb;top:51px;left:44px;\"></div>\n<div style=\"background-color:#9d297d;top:235px;left:25px;\"></div>\n<div style=\"background-color:#72b325;top:79px;left:22px;\"></div>\n<div style=\"background-color:#8c3c1a;top:54px;left:143px;\"></div>\n<div style=\"background-color:#823388;top:226px;left:40px;\"></div>\n<div style=\"background-color:#bef38d;top:69px;left:22px;\"></div>\n<div style=\"background-color:#b048fb;top:99px;left:253px;\"></div>\n<div style=\"background-color:#3078c7;top:98px;left:155px;\"></div>\n<div style=\"background-color:#792967;top:22px;left:23px;\"></div>\n<div style=\"background-color:#1fd0f2;top:88px;left:65px;\"></div>\n<div style=\"background-color:#9ac015;top:12px;left:170px;\"></div>\n<div style=\"background-color:#862158;top:125px;left:71px;\"></div>\n\"#\n    );\n    test = (6, 3);\n    let form = Form::new().part(\n        \"blockfile\",\n        Part::bytes(r#\"MINE DIAMONDS!!!!\"#.as_bytes())\n            .file_name(\"Cargo.block\")\n            .mime_str(\"application/octet-stream\")\n            .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (6, 4);\n    let form = Form::new();\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (6, 5);\n    let form = Form::new().part(\n        \"lockfile\",\n        Part::bytes(\n            \"[[package]]\nchecksum = \\\"337789faa0372648a8ac286b2f92a53121fe118f12e29009ac504872a5413cc6\\\"\n\\x00\\x00\"\n                .as_bytes(),\n        )\n        .file_name(\"Cargo.lock\")\n        .mime_str(\"application/octet-stream\")\n        .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (6, 5);\n    let form = Form::new().part(\n        \"lockfile\",\n        Part::bytes(\n            r#\"[[package]]\nchecksum = \"337789faa0372648a8ac286b2f92a53121fe118f12e29009ac504872a5413cc6\"\nfn jingle_bells(volume: f32) -> Result<Sound<DingDong>, MusicError> { ... }\n\"#\n            .as_bytes(),\n        )\n        .file_name(\"Cargo.lock\")\n        .mime_str(\"application/octet-stream\")\n        .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (6, 6);\n    let form = Form::new().part(\n        \"lockfile\",\n        Part::bytes(\n            r#\"[[package]]\nchecksum = \"337789faa0372648a8ac286b2f92a53121fe118f12e29009ac504872a5413cc6\"\n\"#\n            .as_bytes(),\n        )\n        .file_name(\"Cargo.lock\")\n        .mime_str(\"application/octet-stream\")\n        .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"\n<div style=\"background-color:#337789;top:250px;left:160px;\"></div>\n\"#\n    );\n    test = (6, 7);\n    let form = Form::new().part(\n        \"lockfile\",\n        Part::bytes(\n            r#\"[[package]]\nchecksum = [ \"cookie\", \"milk\", \"hot cocoa\" ]\n\"#\n            .as_bytes(),\n        )\n        .file_name(\"Cargo.lock\")\n        .mime_str(\"application/octet-stream\")\n        .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::BAD_REQUEST);\n    test = (6, 8);\n    let form = Form::new().part(\n        \"lockfile\",\n        Part::bytes(\n            r#\"[[package]]\nchecksum = \"337789faa0\"\n\"#\n            .as_bytes(),\n        )\n        .file_name(\"Cargo.lock\")\n        .mime_str(\"application/octet-stream\")\n        .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"\n<div style=\"background-color:#337789;top:250px;left:160px;\"></div>\n\"#\n    );\n    test = (6, 9);\n    let form = Form::new().part(\n        \"lockfile\",\n        Part::bytes(\n            r#\"[[package]]\nchecksum = \"337789faa0\"\n\"#\n            .as_bytes(),\n        )\n        .file_name(\"Cargo.lock\")\n        .mime_str(\"application/octet-stream\")\n        .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"\n<div style=\"background-color:#337789;top:250px;left:160px;\"></div>\n\"#\n    );\n    test = (6, 10);\n    let form = Form::new().part(\n        \"lockfile\",\n        Part::bytes(\n            r#\"[[package]]\nchecksum = \"337789FAA0\"\n\"#\n            .as_bytes(),\n        )\n        .file_name(\"Cargo.lock\")\n        .mime_str(\"application/octet-stream\")\n        .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::OK);\n    assert_html!(\n        res,\n        test,\n        comparer,\n        r#\"\n<div style=\"background-color:#337789;top:250px;left:160px;\"></div>\n\"#\n    );\n    test = (6, 11);\n    let form = Form::new().part(\n        \"lockfile\",\n        Part::bytes(\n            r#\"[[package]]\nchecksum = \"3377QQFAA0\"\n\"#\n            .as_bytes(),\n        )\n        .file_name(\"Cargo.lock\")\n        .mime_str(\"application/octet-stream\")\n        .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::UNPROCESSABLE_ENTITY);\n    test = (6, 12);\n    let form = Form::new().part(\n        \"lockfile\",\n        Part::bytes(\n            r#\"[[package]]\nchecksum = \"BEEF\"\n\"#\n            .as_bytes(),\n        )\n        .file_name(\"Cargo.lock\")\n        .mime_str(\"application/octet-stream\")\n        .unwrap(),\n    );\n    let res = client\n        .post(url)\n        .multipart(form)\n        .send()\n        .await\n        .map_err(|_| test)?;\n    assert_status!(res, test, StatusCode::UNPROCESSABLE_ENTITY);\n\n    // TASK 6 DONE\n    tx.send((false, 100).into()).await.unwrap();\n    tx.send(SubmissionUpdate::Save).await.unwrap();\n\n    Ok(())\n}\n"
  },
  {
    "path": "cch24/validator/src/main.rs",
    "content": "use cch24_validator::{args::ValidatorArgs, run, SUPPORTED_CHALLENGES};\nuse clap::{CommandFactory, FromArgMatches};\nuse shuttlings::{SubmissionState, SubmissionUpdate};\nuse uuid::Uuid;\n\n#[tokio::main]\nasync fn main() {\n    let c = ValidatorArgs::command();\n    let m = c\n        .mut_arg(\"numbers\", |a| a.allow_negative_numbers(true))\n        .get_matches();\n    let args = ValidatorArgs::from_arg_matches(&m).unwrap();\n\n    println!(\n        \"\\\n⋆｡°✩ ⋆⁺｡˚⋆˙‧₊✩₊‧˙⋆˚｡⁺⋆ ✩°｡⋆°✩ ⋆⁺｡˚⋆˙‧₊✩₊‧˙⋆˚｡⁺⋆ ✩°｡⋆\n.・゜゜・・゜゜・．                .・゜゜・・゜゜・．\n｡･ﾟﾟ･          SHUTTLE CCH24 VALIDATOR          ･ﾟﾟ･｡\n.・゜゜・・゜゜・．                .・゜゜・・゜゜・．\n⋆｡°✩ ⋆⁺｡˚⋆˙‧₊✩₊‧˙⋆˚｡⁺⋆ ✩°｡⋆°✩ ⋆⁺｡˚⋆˙‧₊✩₊‧˙⋆˚｡⁺⋆ ✩°｡⋆\n\"\n    );\n\n    let (tx, mut rx) = tokio::sync::mpsc::channel::<SubmissionUpdate>(32);\n\n    let get_printer = |summary: bool| async move {\n        let mut tasks_completed = 0;\n        let mut days_completed = 0;\n        let mut bonus = 0;\n        while let Some(s) = rx.recv().await {\n            match s {\n                SubmissionUpdate::State(state) => {\n                    match state {\n                        SubmissionState::Done => {\n                            tasks_completed = 0;\n                        }\n                        _ => (),\n                    };\n                }\n                SubmissionUpdate::TaskCompleted(completed, bp) => {\n                    tasks_completed += 1;\n                    println!(\"Task {}: completed 🎉\", tasks_completed);\n                    if bp > 0 {\n                        bonus += bp;\n                        println!(\"Bonus points: {} ✨\", bp);\n                    }\n                    if completed {\n                        days_completed += 1;\n                        println!(\"Core tasks completed ✅\");\n                    }\n                }\n                SubmissionUpdate::LogLine(line) => {\n                    println!(\"{line}\");\n                }\n                _ => (),\n            }\n        }\n        if summary {\n            println!();\n            println!();\n            println!(\n                \"Completed {} challenges and gathered a total of {} bonus points.\",\n                days_completed, bonus\n            );\n        }\n    };\n\n    let nums = if !args.challenge.numbers.is_empty() {\n        &args\n            .challenge\n            .numbers\n            .iter()\n            .map(|s| s.as_str())\n            .collect::<Vec<_>>()\n    } else {\n        SUPPORTED_CHALLENGES\n    };\n\n    let printer = tokio::task::spawn(get_printer(nums.len() > 1));\n\n    for num in nums {\n        println!();\n        println!(\"Validating Challenge {num}...\");\n        println!();\n        run(\n            args.url.trim_end_matches('/').to_owned(),\n            Uuid::nil(),\n            *num,\n            tx.clone(),\n        )\n        .await;\n        // give the receiver time to print everything from the previous challenge\n        tokio::time::sleep(tokio::time::Duration::from_millis(10)).await;\n    }\n\n    drop(tx);\n    printer.await.unwrap();\n}\n"
  }
]